日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

以太坊账户 相关知识

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊账户 相关知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

比特幣轉賬機制(UTXO)

  • 比特幣是基于UTXO的結構存儲有關用戶余額的數據,系統的整個狀態就是一組UTXO集合,每個UTXO都有一個所有者和面值(相當于法幣的面值),每一筆交易都會花費若干個輸入的UTXO,并且根據規則創建若干個新的UTXO
  • 每個引用的輸入必須是有效的(尚未花費的UTXO),對于一個交易,必須包含與當前輸入UTXO相匹配的所有者的簽名,并且保證輸入必須大于等于總的輸出值,比特幣系統中用戶的余額是用戶具有私鑰的UTXO的總值

以太坊的轉賬機制(Accounts)

?

  • 以太坊的使用機制:存儲系統中所有用戶的列表
  • 每一個賬戶都包括了一個余額(balance),和以太坊特殊定義的數據(代碼和內部存儲,這個是指智能合約)
  • 以太坊的賬戶類型和銀行使用的是一致的,一筆交易的產生,需要先扣除交易發起方的賬戶余額,如果交易方賬戶余額足夠,則交易生效;然后,交易接收方的賬戶會記入這筆交易。
  • 智能合約:如果接收方的賬戶存在相關代碼(智能合約),則代碼會自動運行,并且他的內部存儲也可能被改變,比如代碼還可能設定向其他賬戶發起新的交易信息,這就會造成進一步的借貸資金關系。

比特幣的UTXO的優缺點

  • 高度的隱私性,因為每一筆交易使用的不會是相同的地址,因此很難將其與現實的用戶連接起來,保護了用戶的隱私性,這樣也就限制了比特幣只能適用于貨幣,提升空間很小,比如面對現在的Dapps(分布式app),Dapps通常設計到跟蹤和用戶綁定的復雜狀態,很難像貨幣一樣對于用戶狀態簡單的劃分。
  • 潛在的可擴展性,UTXO在理論上更符合可擴展性的要求,因為只需要依賴UTXO的人去維護基于Merkle樹的所有權證明,即使一筆交易的數據丟失,僅僅所有者會受到對應的UTXO的損失,但是不會影響接下來的交易。如果是賬戶模式,如果每個人都丟失了與賬戶相對應的Merkle樹的部分,那么就會使得與該賬戶相關的信息完全無法處理。
  • 以太坊的優缺點

    • 節省空間,不將UTXO分開存儲,而是合并到特定的用戶,每個交易只需要一個輸入,一個簽名、并且產生一個輸出
    • 更好的替代性,貨幣的本質都是同質化、可以替代的,UTXO設計使得貨幣分為可花費和不可花費兩類,這個很難和現實模型對
    • 更加簡單:容易編碼和理解,特別是設計復雜腳本的時候,UTXO在腳本邏輯復雜時候更加令人費解
    • 更容易維護持久性節點,只需要沿著特定方向掃描狀態樹,親節點可以很容易的隨時訪問賬戶相關的所有數據。而UTXO的每一個交易都會使得狀態發生改變,這個對于親節點來說長時間運行分布式APP會造成很大的壓力

    對比

    ?

    BitCoin

    Ethereum

    設計定位

    現金系統

    去中心化應用平臺

    數據組成

    交易列表(賬本)

    交易和賬戶狀態

    交易對象

    UTXO

    Accounts

    代碼控制

    腳本

    智能合約

    以太坊的賬戶類型

    • 外部用戶/普通賬戶
    • 合約賬戶/內部用戶

    外部用戶/普通賬戶

  • 有對應的以太坊余額
  • 可以發起交易(轉賬/觸發合約代碼)
  • 由用戶私鑰控制
  • 沒有關聯代碼(智能合約有)
  • 合約賬戶/內部用戶

  • 有對應的以太坊余額
  • 有關聯代碼
  • 由代碼控制
  • 可以通過交易或者來自其他合約的調用消息來觸發代碼執行
  • 執行代碼時候可以操作自己的存儲空間,也可以調用其他的合約
  • 消息

    • 合約可以向其他合約發送“消息”
    • 消息是不會被序列化的虛擬對象,只存在于以太坊的執行環境(EVM)中
    • 可以看作是函數的調用
    • 內容:消息的發送方、消息的接收方、金額(VALUE)、數據(DATA,可選)、START GAS 最大支付的GAS

    合約

    ?

    • 可以讀/寫自己的內部存儲(32字節key-value的數據庫)
    • 可以向其他合約發送消息,依次觸發執行
    • 一旦合約運行結束,并且由它發送的消息觸發的所有子執行(sub-exception)結束,EVM就會中止執行,直到下次交易被喚醒

    合約的應用

    • 維護一個數據存儲(賬本),存放其他合約或者外部的世界有用的內容比如,發售自己的虛擬貨幣
    • 通過合約賬戶實現一種具有更加復雜的訪問策略的普通賬戶(EOA),這個被稱為“轉發合同”,只有在滿足某些特定的條件的時候,才會將傳入的消息重新發送到某個所需要的目的地址:例如,一個人有一份轉發合約,該合約會等待直到給定的三個私鑰中的兩個確認之后,再重新發送特定的消息,比如錢包合約
    • 管理多個用戶之間的持續合同或者關系。包括金融合同,以及某些特定的托管合同或者某種保險。遺囑,遺產分配。

    交易數據結構

    (交易是包含以下數據的序列化的二進制消息)

    • Nonce 由發起人EOA發出的序列號,用于防止消息重播,相當于統計從一個賬戶中交易記錄的次序,防止了雙重支付。
    • Gas price 交易發起人愿意支付的gas單價(wei)
    • Start gas 交易發起人愿意支付方最大gas量
    • To:以太坊交易的目的地址
    • Value:發送到目的地的以太數量
    • Data:可變長度的二進制數據負載(payload)
    • v,r,s 發起人EOA的ECDSA簽名的三個組成部分
    • 交易消息的結構使用遞歸長度前綴(RLP)編碼方案進行序列化,該方案專為以太坊中準確和字節完美的數據序列化而創建。

    交易中的nonce

    • 黃皮書的定義:一個標量值,等于從這個地址發送的交易數,或者對于關聯code的賬戶來說,就是這個賬戶創建合約的數量
    • nonce不會明確存儲為區塊鏈中賬戶狀態的一個部分,相反它是通過計算發送地址已經確認的交易的數量來動態計算的
    • nonce值還用于防止錯誤計算賬戶的余額。Nonce強制來自任何地址的交易按照順序處理,沒有間隔,無論節點接收他們的順序如何。
    • 使用nonce是為了確保所有的節點計算的是相同的余額和正確的交易,等同于防止了“雙重支付/重放攻擊”,但是因為不像比特幣使用UTXO機制,因此以太坊只有在錯誤計算賬戶的余額時候才會發生“雙重支付/重放攻擊”。

    并發和nonce

    • 以太坊是一個允許(節點、客戶端,Dapps)并發的系統,但是強制單例狀態。例如,出塊的時候只有一個系統狀態
    • 假如我們有多個獨立的錢包客戶端,比如MetaMask和Geth,他們都是使用同一個地址生成交易。如果我們希望同時發起交易,該如何設置交易的nonce呢?
    • 方法1,用一臺服務器為各個應用分配nonce,先來先服務,(單點故障),如果先來的一個應用發生故障,那么失敗的交易會使得后續的交易阻塞
    • 方法2,生成交易后不分配nonce,也不簽名,而是將其放在一個隊列中等待,另一個節點跟蹤nonce并簽名交易。同樣會出現單點故障,而且跟蹤nonce和簽名的節點是無法實現真正的并發

    特殊的交易:創建(部署)合約

    • 特殊的交易,具有數據負載但是沒有value,則這筆交易就是為了創建新的合約

    • 合約的創建交易被發送到特殊目的的地址,即0x0.這個地址既不代表EOA也不代表合約,也不會花費以太幣或者發布交易,僅僅具有特殊的含義“創建合約”

    • 還有一種目的:銷毀以太幣

    向EOA或合約傳遞數據

    • 當交易包含數據有效負載的時候,一般是發送到合約地址的,但是發送給EOA也是可以的
    • 如果發送數據給EOA,數據負載的解釋取決于錢包
    • 如果發送給數據給合約地址,EVM會解釋為函數調用,從payload里面解碼出函數的名稱和參數,調用該函數并且傳入參數
    • 發送給合約的數據有效負載是32字節的十六進制序列化編碼
      • 函數選擇器:函數原型的keccak256哈希的前4個字節,允許EVM明確識別將要調用的函數
      • 函數參數:根據EVM定義的各種基本類型的規則進行編碼

    交易的Value和data

    交易的“有效負載”包含在兩個字段中:value和data。交易可以同時有value和data,僅有value、僅有data、data和value都沒有

  • 僅有value的交易是一筆以太的付款
  • 僅有value的交易一般是合約的調用
  • 進行合約的調用的時候,除了傳輸data,還可以發送以太幣,從而使得交易中同時包含data和value
  • 沒有value也沒有data的交易,只是在浪費gas,但是交易是有效的
  • 交易的接收者(to)

  • 交易接受者在to字段中指定,是一個20字節的以太坊地址,地址可以是EOA或者合約的地址
  • 以太坊無法判定任何20字節的地址是否是有效的,是否是公鑰正確派生的,但是這筆交易是有效的,只是錢回不來了
  • 如果交易的地址是無效的,將會銷毀發送的以太幣,使其永遠無法訪問
  • 驗證接收人的地址是否是有效的,應該在用戶界面一層完成
  • gas計算

  • 發起交易時的gas limit并不是要支付的gas數量,而是給定一個消耗gas的上限,相當于押金,如果存在剩余,會返回到交易發起方的賬戶
  • 實際支付的gas數量是執行過程中消耗的gas(gasUsed),gas limit中剩余的部分會返回給發送人,單價是由設定的gasPrise而確定
  • 最終支付的費用 totalCost = gasPrise * gasUsed
  • TotalCost會作為交易的手續費支付給礦工
  • 總結

    以上是生活随笔為你收集整理的以太坊账户 相关知识的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。