純干貨|深度解析以太坊(3):交易費用和消息


1.Gas費用

以太坊的一個非常重要的概念是費用(fees)篱昔。每一次在以太坊網(wǎng)絡(luò)上進行的交易都會產(chǎn)生費用钉鸯,這筆費用是以“Gas”名義支付的。

gas就是用來衡量在一個具體計算中要求的費用單位。gas price就是你愿意在每個gas上花費Ether的數(shù)量,以“gwei”進行衡量和泌。“Wei”是Ether的最小單位祠肥,1Ether表示10^18Wei. 1gwei是1,000,000,000 Wei武氓。

對每個交易,發(fā)送者設(shè)置gas limit和gas price仇箱。gas limit和gas price就代表著發(fā)送者愿意為執(zhí)行交易支付的Wei的最大值县恕。

例如,假設(shè)發(fā)送者設(shè)置gas limit為50,000工碾,gas price為20gwei。這就表示發(fā)送者愿意最多支付50,000*20gwei = 1,000,000,000,000,000 Wei = 0.001 Ether來執(zhí)行此交易百姓。

記住gas limit代表用戶愿意花費在gas上的錢的最大值渊额。如果在他們的賬戶余額中有足夠的Ether來支付這個最大值費用,那么就沒問題。在交易結(jié)束時任何未使用的gas都會被返回給發(fā)送者旬迹,以原始費率兌換火惊。

如果發(fā)送者沒有提供必要的Gas來執(zhí)行交易,則交易“gas不足”并被認為是無效的奔垦。在這種情況下屹耐,交易處理中止,發(fā)生的任何狀態(tài)變化都被顛倒過來椿猎,以致在交易之前我們最終回到以太坊的狀態(tài)惶岭。另外,交易失敗的記錄犯眠,顯示交易是什么嘗試以及失敗的地方按灶。而且,由于機器已經(jīng)耗盡了在用完gas之前進行計算的努力筐咧,在邏輯上鸯旁,沒有g(shù)as被退還給發(fā)送者。

這些gas究竟在哪里量蕊?發(fā)送者花費在gas上的所有資金都被發(fā)送到“受益人”地址铺罢,這通常是礦工的地址。由于礦工正在花費精力進行計算和確認交易残炮,所以礦工收到gas作為獎勵韭赘。

通常,發(fā)送者愿意支付的氣價越高吉殃,礦工從交易中獲得的價值就越高辞居。因此,礦工越可能選擇它蛋勺。通過這種方式瓦灶,礦工可以自由選擇要驗證或忽略的交易。為了引導(dǎo)發(fā)送者設(shè)置gas price抱完,礦工可以選擇廣告他們將執(zhí)行交易的最低gas價格贼陶。

1.1 存儲也有費用

Gas不僅用于支付計算步驟,還用于支付存儲的費用巧娱。存儲的總費用與使用的32字節(jié)的最小倍數(shù)成正比碉怔。

存儲費有一些細微的方面。例如禁添,由于增加的存儲量會增加所有節(jié)點上的以太坊狀態(tài)數(shù)據(jù)庫的大小撮胧,因此存在一個激勵機制,可以保持較小的數(shù)據(jù)存儲量老翘。因此芹啥,如果一個交易的執(zhí)行有一步是清除一個存儲實體锻离,那么為執(zhí)行這個操作的費用就會被放棄,并且由于釋放存儲空間的退款就會被返回給發(fā)送者墓怀。

1.2 收費的目的是什么汽纠?

以太坊工作方式的一個重要方面是網(wǎng)絡(luò)執(zhí)行的每一個操作都同時受到每個全節(jié)點的影響。但是傀履,以太坊虛擬機上的計算步驟非常昂貴虱朵。因此,以太坊智能合約最適合用于簡單的任務(wù)钓账,如運行簡單的業(yè)務(wù)邏輯或驗證簽名和其他加密對象碴犬,而不是像文件存儲,電子郵件或機器學(xué)習(xí)這樣可能給網(wǎng)絡(luò)帶來壓力的更復(fù)雜用途官扣。征收費用可以防止用戶使網(wǎng)絡(luò)負擔過重翅敌。

以太坊是一個圖靈完備語言。(簡而言之惕蹄,圖靈機是一種可以模擬任何計算機算法的機器蚯涮,這樣就可以實現(xiàn)循環(huán),并使得以太坊容易陷入停滯問題卖陵,無法確定程序是否無限運行遭顶,如果沒有收費,惡意行為人可以通過在交易內(nèi)部執(zhí)行無限循環(huán)而輕易地破壞網(wǎng)絡(luò)泪蔫,沒有任何影響棒旗,因此費用保護網(wǎng)絡(luò)免受故意的攻擊。

你可能會想撩荣,“為什么我們還要為存儲付費铣揉?”好吧,就像計算一樣餐曹,以太坊網(wǎng)絡(luò)上的存儲成本是整個網(wǎng)絡(luò)必須承擔的成本逛拱。


2.交易和消息


我們之前指出,以太坊是一個基于交易的狀態(tài)機台猴。換句話說朽合,不同賬戶之間發(fā)生的交易是把以太坊的全球狀態(tài)從一個國家轉(zhuǎn)移到另一個國家的原因。

從最基本的意義上說饱狂,交易是由外部擁有的賬戶產(chǎn)生的經(jīng)過加密簽名的一條指令曹步,序列化,然后提交給區(qū)塊鏈休讳。

有兩種類型的交易:消息呼叫和合約創(chuàng)造(即創(chuàng)造新的以太坊合約的交易)讲婚。?


?所有交易都包含以下組件,無論其類型如何:

  • nonce:發(fā)送者發(fā)送交易數(shù)的計數(shù)

  • gasPrice:發(fā)送者愿意支付執(zhí)行交易所需的每個gas的Wei數(shù)量

  • gasLimit:發(fā)送者愿意為執(zhí)行交易支付gas數(shù)量的最大值俊柔。這個數(shù)量被設(shè)置之后在任何計算完成之前就會被提前扣掉

  • to:接收者的地址筹麸。在合約創(chuàng)建交易中纳猫,合約賬戶的地址還沒有存在,所以值先空著

  • value:從發(fā)送者轉(zhuǎn)移到接收者的Wei數(shù)量竹捉。在合約創(chuàng)建交易中,value作為新建合約賬戶的開始余額

  • v,r,s:用于產(chǎn)生標識交易發(fā)生著的簽名

  • init(只有在合約創(chuàng)建交易中存在):用來初始化新合約賬戶的EVM代碼片段尚骄。init值會執(zhí)行一次块差,然后就會被丟棄。當init第一次執(zhí)行的時候倔丈,它返回一個賬戶代碼體憨闰,也就是永久與合約賬戶關(guān)聯(lián)的一段代碼。

  • data(可選域需五,只有在消息通信中存在):消息通話中的輸入數(shù)據(jù)(也就是參數(shù))鹉动。例如,如果智能合約就是一個域名注冊服務(wù)宏邮,那么調(diào)用合約可能就會期待輸入域例如域名和IP地址

  • 我們在“?賬戶?”這部分了解到泽示,交易(包括消息通話和創(chuàng)建合約的交易)總是由外部擁有的賬戶發(fā)起并提交給區(qū)塊鏈。另一種思考的方式是交易是外部世界與以太坊內(nèi)部狀態(tài)的橋梁蜜氨。

    但這并不意味著合約不能與其他合約談判械筛。在以太坊國家的全球范圍內(nèi)存在的合約可以與同一范圍內(nèi)的其他合約進行談判。他們這樣做的方式是通過“消息”或“內(nèi)部交易”到其他合約飒炎。我們可以將消息或內(nèi)部交易視為與交易相似埋哟,主要區(qū)別在于它們不是由外部擁有的賬戶生成的。相反郎汪,它們是由合約生成的赤赊。它們是虛擬對象,與交易不同煞赢,它不是序列化的抛计,只存在于以太坊執(zhí)行環(huán)境中。

    當一份合約將內(nèi)部交易發(fā)送給另一份合約時耕驰,執(zhí)行接收者合約賬戶上存在的相關(guān)代碼爷辱。

    一個重要的事情要注意的是,內(nèi)部交易或消息不包含gas限制朦肘。這是因為gas限制是由原始交易的外部創(chuàng)造者(即一些外部擁有的賬戶)決定的饭弓。

    外部擁有賬戶所設(shè)置的Gas限額必須足夠高以執(zhí)行交易,包括由于該交易而發(fā)生的任何子執(zhí)行媒抠,例如合約到合約的消息弟断。如果在交易和消息鏈中,特定的消息執(zhí)行耗盡趴生,那么該消息的執(zhí)行將與執(zhí)行所觸發(fā)的任何后續(xù)消息一起還原阀趴。但是昏翰,父執(zhí)行不需要恢復(fù)。


    布尼區(qū)塊鏈

    擁抱區(qū)塊鏈未來

    打造最有價值的區(qū)塊鏈學(xué)習(xí)&交流社群

    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    • 序言:七十年代末刘急,一起剝皮案震驚了整個濱河市棚菊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叔汁,老刑警劉巖统求,帶你破解...
      沈念sama閱讀 217,657評論 6 505
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異据块,居然都是意外死亡码邻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 92,889評論 3 394
    • 文/潘曉璐 我一進店門另假,熙熙樓的掌柜王于貴愁眉苦臉地迎上來像屋,“玉大人,你說我怎么就攤上這事边篮〖狠海” “怎么了?”我有些...
      開封第一講書人閱讀 164,057評論 0 354
    • 文/不壞的土叔 我叫張陵戈轿,是天一觀的道長篇恒。 經(jīng)常有香客問我,道長凶杖,這世上最難降的妖魔是什么胁艰? 我笑而不...
      開封第一講書人閱讀 58,509評論 1 293
    • 正文 為了忘掉前任,我火速辦了婚禮智蝠,結(jié)果婚禮上腾么,老公的妹妹穿的比我還像新娘。我一直安慰自己杈湾,他們只是感情好解虱,可當我...
      茶點故事閱讀 67,562評論 6 392
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漆撞,像睡著了一般殴泰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浮驳,一...
      開封第一講書人閱讀 51,443評論 1 302
    • 那天悍汛,我揣著相機與錄音,去河邊找鬼至会。 笑死离咐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的奉件。 我是一名探鬼主播宵蛀,決...
      沈念sama閱讀 40,251評論 3 418
    • 文/蒼蘭香墨 我猛地睜開眼昆著,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了术陶?” 一聲冷哼從身側(cè)響起凑懂,我...
      開封第一講書人閱讀 39,129評論 0 276
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梧宫,沒想到半個月后征候,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 45,561評論 1 314
    • 正文 獨居荒郊野嶺守林人離奇死亡祟敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點故事閱讀 37,779評論 3 335
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兆解。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馆铁。...
      茶點故事閱讀 39,902評論 1 348
    • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锅睛,靈堂內(nèi)的尸體忽然破棺而出埠巨,到底是詐尸還是另有隱情,我是刑警寧澤现拒,帶...
      沈念sama閱讀 35,621評論 5 345
    • 正文 年R本政府宣布辣垒,位于F島的核電站,受9級特大地震影響印蔬,放射性物質(zhì)發(fā)生泄漏勋桶。R本人自食惡果不足惜,卻給世界環(huán)境...
      茶點故事閱讀 41,220評論 3 328
    • 文/蒙蒙 一侥猬、第九天 我趴在偏房一處隱蔽的房頂上張望例驹。 院中可真熱鬧,春花似錦退唠、人聲如沸鹃锈。這莊子的主人今日做“春日...
      開封第一講書人閱讀 31,838評論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽屎债。三九已至,卻和暖如春垢油,著一層夾襖步出監(jiān)牢的瞬間盆驹,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 32,971評論 1 269
    • 我被黑心中介騙來泰國打工滩愁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留召娜,地道東北人。 一個月前我還...
      沈念sama閱讀 48,025評論 2 370
    • 正文 我出身青樓惊楼,卻偏偏與公主長得像玖瘸,于是被迫代替她去往敵國和親秸讹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
      茶點故事閱讀 44,843評論 2 354

    推薦閱讀更多精彩內(nèi)容

    • 簡介 不管你們知不知道以太坊(Ethereum blockchain)是什么雅倒,但是你們大概都聽說過以太坊璃诀。最近在新...
      Lilymoana閱讀 3,892評論 1 22
    • 以太坊白皮書地址:https://github.com/ethereum/wiki/wiki/White-Pape...
      rectinajh閱讀 17,823評論 0 46
    • 以太坊(Ethereum ):下一代智能合約和去中心化應(yīng)用平臺 翻譯:巨蟹 、少平 譯者注:中文讀者可以到以太坊愛...
      車圣閱讀 3,760評論 1 7
    • 【中文版】以太坊白皮書 翻譯:少平蔑匣、 Seven當中本聰在 2009 年 1 月啟動比特幣區(qū)塊鏈時劣欢,他同時向世界引...
      __Seven__閱讀 4,209評論 0 10
    • 管理學(xué)——破局而出的智慧 寧老師希望:能堅持下來,成長為“掃地僧”(默默無聞的幕后高手安昧肌凿将!寧老師本意不是這樣,嘿嘿...
      西門雜貨閱讀 448評論 0 0