【易錯概念】以太坊的交易(transaction),消息(message)和調(diào)用(call)

交易和消息是以太坊系統(tǒng)中很關(guān)鍵的兩個概念蟆豫,同時也是兩個非常類似的概念篙耗,它們在形式上近乎相同,但是本質(zhì)上卻又完全不同引润。這篇博客會將交易(Transaction)巩趁、消息(Message)和調(diào)用(Message Call)進(jìn)行介紹和區(qū)分。

交易(Transaction)是什么淳附?

交易存儲了發(fā)送者要發(fā)送至以太坊網(wǎng)絡(luò)的經(jīng)過簽名的信息议慰,它其中包含了從一個賬戶要傳遞給另一個賬戶(或者合約)的信息。在以太坊中奴曙,有兩種類型的交易:一種是能夠產(chǎn)生消息調(diào)用的交易别凹,另一種是能夠生成新賬戶的交易(比如說生成合約)

籠統(tǒng)的來說洽糟,一個完整有效的以太坊交易包含以下幾個部分:

  • 交易接收者
  • 簽名(用以核實交易發(fā)送者身份)
  • value值(發(fā)送的以太幣數(shù)量炉菲,以wei為單位)
  • 可選數(shù)據(jù)域
  • STARTGAS值
  • GASPRICE值

交易中的字段

根據(jù)以太坊黃皮書,我們知道一個交易中有以下字段:

  • nonce:該字段表示的是交易發(fā)送者的交易序列號坤溃,它是賬號的一個交易計數(shù)器拍霜,這個字段能夠防止重放攻擊(replay attack)。
  • gasPrice:gas的價格薪介,用于計算交易費用
  • gasLimit:執(zhí)行這筆交易所花費的gas的上限
  • to:交易接收者的地址或者合約的地址
  • value:要發(fā)送的以太幣數(shù)量祠饺,以wei為單位
  • v, s, r:簽名相關(guān)的參數(shù),通過這三個參數(shù)可以得到發(fā)送者的公鑰和地址(更詳細(xì)的內(nèi)容參見以太坊黃皮書附錄F)

如果該交易是一個創(chuàng)建合約的交易汁政,還可能包括以下字段:

  • init:用于初始化交易的EVM(以太坊虛擬機(jī))操作碼
  • data:數(shù)據(jù)域(理論上數(shù)據(jù)域的大小是不受限制的)

消息(Message)是什么道偷?

消息在以太坊中是一個“虛擬”的事物,它永遠(yuǎn)不會被記錄到區(qū)塊鏈中记劈,它是由合約發(fā)出的勺鸦。從形式上看,消息很“像”交易抠蚣,但是它與交易有著本質(zhì)上的區(qū)別祝旷,一筆成功的交易會被永久的記錄到區(qū)塊鏈中履澳。在以太坊中嘶窄,我們可以把消息看做在EVM中的函數(shù)調(diào)用。

一般來說距贷,一條消息會包含以下幾個部分:

  • 消息的發(fā)送者
  • 消息的接收者
  • 以太幣的數(shù)量(以wei為單位)
  • 可選數(shù)據(jù)域
  • STARTGAS
  • GASPRICE

交易柄冲、消息與調(diào)用(Message Call)的區(qū)別

以太坊黃皮書中對交易(transations)的描述為:

A piece of data, signed by an External Actor. It represents either a Message or a new Autonomous Object. Transactions are recorded into each block of the blockchain.
由外部參與者簽名后的一段數(shù)據(jù)。它代表了一條信息或者一個新創(chuàng)建的自治對象(合約)忠蝗。交易會被記錄至區(qū)塊鏈的區(qū)塊中现横。

對消息(message)的描述為:

Data (as a set of bytes) and Value (specified as Ether) that is passed between two Accounts, either through the deterministic operation of an Autonomous Object or the cryptographically secure signature of the Transaction.
在兩個賬戶之間傳輸?shù)臄?shù)據(jù)(一組字節(jié))和值(以太幣的數(shù)量),形式是合約的確定性操作或者經(jīng)過加密安全簽名的交易。

對調(diào)用(call)的描述為:

The act of passing a message from one Account to another. If the destination account is associated with non-empty EVM Code, then the VM will be started with the state of said Object and the Message acted upon. If the message sender is an Autonomous Object, then the Call passes any data returned from the VM operation.
從一個賬戶發(fā)送至另一個賬戶的消息的行為戒祠。如果目標(biāo)賬戶關(guān)聯(lián)著非空的EVM操作碼骇两,VM就會按照該操作碼的狀態(tài)進(jìn)行啟動。如果消息的發(fā)送者是一個自治對象姜盈,那么該調(diào)用將會傳遞所有返回自VM操作的數(shù)據(jù)低千。

具體來說,調(diào)用是對合約的本地調(diào)用馏颂,它是只讀的操作并且不會消耗以太幣示血。它能夠模擬交易的行為,但是在調(diào)用結(jié)束以后救拉,它會返回至之前的狀態(tài)难审。交易是會被廣播至整個網(wǎng)絡(luò)的,被礦工處理驗證之后會被記錄至區(qū)塊鏈的區(qū)塊中亿絮。

合約中函數(shù)的調(diào)用創(chuàng)建的是調(diào)用還是交易告喊?

考慮一下這四種情況:

  • 使用調(diào)用(call)直接對合約函數(shù)進(jìn)行調(diào)用
  • 使用sendTransaction直接對合約函數(shù)進(jìn)行調(diào)用
  • 使用調(diào)用(call)通過合約對合約函數(shù)進(jìn)行調(diào)用
  • 使用sendTransaction通過合約對合約函數(shù)進(jìn)行調(diào)用

第一種情況與第三種情況是很明顯的調(diào)用,第二種情況由于使用的是sendTransaction方法派昧,因此它創(chuàng)建了一筆交易葱绒。比較特殊的是第四種情況,它看似是生成了一筆交易斗锭,但是由于以太坊黃皮書中對交易的定義中提到地淀,交易是需要外部參與者(External Actor)進(jìn)行簽名的消息,所以第四種情況沒有生成交易岖是。


本文的版權(quán)歸作者 羅遠(yuǎn)航 所有帮毁,采用 Attribution-NonCommercial 3.0 License。任何人可以進(jìn)行轉(zhuǎn)載豺撑、分享烈疚,但不可在未經(jīng)允許的情況下用于商業(yè)用途;轉(zhuǎn)載請注明出處聪轿。感謝配合爷肝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市陆错,隨后出現(xiàn)的幾起案子灯抛,更是在濱河造成了極大的恐慌,老刑警劉巖音瓷,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件对嚼,死亡現(xiàn)場離奇詭異,居然都是意外死亡绳慎,警方通過查閱死者的電腦和手機(jī)纵竖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門漠烧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人靡砌,你說我怎么就攤上這事已脓。” “怎么了通殃?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵摆舟,是天一觀的道長。 經(jīng)常有香客問我邓了,道長恨诱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任骗炉,我火速辦了婚禮照宝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘句葵。我一直安慰自己厕鹃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布乍丈。 她就那樣靜靜地躺著剂碴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轻专。 梳的紋絲不亂的頭發(fā)上忆矛,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音请垛,去河邊找鬼催训。 笑死,一個胖子當(dāng)著我的面吹牛宗收,可吹牛的內(nèi)容都是我干的漫拭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼混稽,長吁一口氣:“原來是場噩夢啊……” “哼采驻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匈勋,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤礼旅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颓影,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體各淀,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年诡挂,在試婚紗的時候發(fā)現(xiàn)自己被綠了碎浇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡璃俗,死狀恐怖奴璃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情城豁,我是刑警寧澤苟穆,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站唱星,受9級特大地震影響雳旅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜间聊,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一攒盈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哎榴,春花似錦型豁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至飘言,卻和暖如春衣形,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姿鸿。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工柿祈, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留羞酗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像灭返,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叔扼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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