- 區塊鏈社會:區塊鏈助力國家治理能力現代化
- 王煥然等
- 1140字
- 2021-03-23 16:36:35
6.2 交易和消息
用戶賬戶發起的簽名數據稱為交易,合約賬戶發起的簽名數據稱為消息。交易記錄的數據結構如下:
1)交易標識(Nouce):隨機數,用于確定每筆交易只能被處理一次的計數器,用于抵制重放攻擊。
2)接收方地址(Receipt):可以是用戶地址或者合約地址。
3)數值(Value):交易的以太幣數量。
4)數據(Data):可選填項,供智能合約接收方使用的數據。
5)V/R/S:ECDSA(Elliptic Curre Digital Signature Algorithm)簽名,用來恢復公鑰。
6)GasPrice:每一個Gas的價格。
7)Gas:交易使用的最大Gas數量。
以太坊引進了“Gas”(燃料)的概念。兩個數值Gas和GasPrice的作用是為了對代碼執行做出經濟上的限制。這種經濟上的舉措就好比我們生活中的智能卡用電。為了防止濫用電資源(當然,還有其他的經濟因素),國家規定了用電成本,電價越貴,我們的用電成本就越高。我們能用多少電取決于花了多少錢買電,一旦用完,家里就停電了。
以太坊系統中,任何運算都是需要占用/消耗資源的,包括計算資源、帶寬資源、存儲資源等。為了防止代碼被惡意或不停地執行(如無限循環運算或其他無謂消耗資源的運算),每筆交易需要對執行代碼所引發的計算,包括初始消息和所有執行中引發的消息做出經濟上的限制。GasPrice是每一計算步驟所需要支付的費用,好比電價。Gas是交易執行時的最大計算步驟數,好比電量。這兩個值的作用就是限制交易中所能執行的代碼計算步驟。所以,在交易執行時,賬戶余額需要有足夠多的“錢”來滿足執行交易中代碼的經濟需求。
簡單理解,就是以太坊中規避計算機惡意攻擊占用資源的解決方案是經濟制裁。既然執行交易需要預先設置花多少錢,那么就可能有下面這兩種情況發生:錢用完了;錢剩余了。
1)如果執行交易的過程中,用完了Gas,那么所有狀態將恢復到原狀態,但是已經支付的交易費用不退。
2)如果執行交易完結時還剩余Gas,那么這些Gas將退還給發送者。
以太坊交易的具體步驟如下:
1)檢查交易的格式是否正確、簽名是否有效和交易標識是否與發送者賬戶的交易標識匹配。如否,返回錯誤。
2)計算交易費用:fee=Gas*GasPrice,并從簽名中確定發送者的地址。從發送者的賬戶中減去交易費用,增加發送者的交易標識。如果賬戶余額不足,返回錯誤。
3)設定初值Gas,并根據交易中的字節數減去一定量的Gas。
4)從發送者的賬戶轉移貨幣價值到接收者賬戶。如果接收賬戶不存在,創建此賬戶。如果接收賬戶是一個合約,運行合約的代碼,直到代碼運行結束或者Gas用完。
5)如果因為發送者賬戶沒有足夠的錢或者代碼執行耗盡Gas導致價值轉移失敗,恢復原來的狀態,但是還需要支付交易費用,交易費用加至礦工賬戶。
6)否則,將所有剩余的Gas歸還給發送者,消耗掉的Gas作為交易費用發送給礦工。
以太坊的消息跟交易在很多方面是相同的。不同點在于消息是從合約發出的,而不是從用戶賬戶。這里需要注意的是,消息觸發合約的執行同樣也需要消耗Gas。
- OpenCV 3和Qt5計算機視覺應用開發
- Silverlight魔幻銀燈
- SSM輕量級框架應用實戰
- 焊接機器人系統操作、編程與維護
- Python算法詳解
- ServiceNow:Building Powerful Workflows
- 搞定J2EE:Struts+Spring+Hibernate整合詳解與典型案例
- 21天學通C++(第5版)
- 移動增值應用開發技術導論
- 創意UI:Photoshop玩轉APP設計
- Java EE 7 with GlassFish 4 Application Server
- Building Business Websites with Squarespace 7(Second Edition)
- WebStorm Essentials
- Android 游戲開發大全(第二版)
- Clojure for Finance