官术网_书友最值得收藏!

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。

主站蜘蛛池模板: 清原| 兴城市| 尚志市| 东兰县| 赣州市| 新河县| 贵阳市| 锡林浩特市| 闸北区| 岐山县| 客服| 永修县| 喀喇沁旗| 库伦旗| 子洲县| 南康市| 含山县| 江城| 安庆市| 青川县| 儋州市| 清涧县| 贡觉县| 介休市| 乐都县| 明星| 寿宁县| 古交市| 抚远县| 柘荣县| 宜城市| 玉环县| 博湖县| 广元市| 阜宁县| 广南县| 富锦市| 宽城| 延安市| 清镇市| 文安县|