[eos17]協(xié)議-交易協(xié)議-part1

https://developers.eos.io/welcome/latest/protocol/transactions_protocol

經(jīng)過這幾天對共識協(xié)議的完整翻譯和梳理元潘,一個最大的感受就是收獲大,但確實費時費力。不過,總體來說還是值得的抽米。

原文是transaction太伊,更傾向翻譯成交易鲤桥,可能有地方叫事務蚯嫌。

action之前一直翻譯成行為卑吭,最近翻閱一些資料后芽淡,應該翻譯成操作更合適。

1 概述

操作(action)是指在一個智能合約中的原子行為豆赏。在之前的實戰(zhàn)例子中也可以感受到挣菲,智能合約就是由多個action構(gòu)成富稻,用戶可以通過cleos push action命令執(zhí)行某合約中的某個action。從更高層次看白胀,去中心化應用中椭赋,交易定義一組被原子性執(zhí)行的actions。與數(shù)據(jù)庫中事務的概念類似或杠,交易中的一組actions必須按照預先定義好的順序哪怔,一個接一個的執(zhí)行,要么都成功向抢,要么都失敗认境。在交易失敗的情況下,為了維護交易的原子性和完整性挟鸠,需要將區(qū)塊鏈的狀態(tài)恢復到執(zhí)行交易前的狀態(tài)叉信。這保證了在故障點之前執(zhí)行的任何action都不會產(chǎn)生任何副作用。

1.1 操作(action)

操作能被一個或多個之前在區(qū)塊鏈上創(chuàng)建的actor授權(quán)艘希。個人理解硼身,這里的actor應該比account更細粒度,一個account可能有多個actor枢冤。即具有特定權(quán)限的actor可以指定誰執(zhí)行某操作鸠姨。在一個智能合約中,操作即可以被顯式創(chuàng)建淹真,也可以被隱式創(chuàng)建(內(nèi)聯(lián)操作)讶迁。

對于任何給定的actor:action對,最多有一個顯式關(guān)聯(lián)的最小權(quán)限(不理解)核蘸。如果沒有顯式最小權(quán)限巍糯,則隱式默認為actor@active。

每個actor都可以獨立地為給定的操作設置自己的最低權(quán)限客扎。此外祟峦,EOSIO軟件中有一個復雜但靈活的授權(quán)結(jié)構(gòu),允許actor代表其他帳戶執(zhí)行操作(push action)徙鱼。因此宅楞,需要檢查是否為某個actor授權(quán)執(zhí)行某操作。

在一個交易中袱吆,有兩種類型的操作厌衙,他們的主要區(qū)別就是被執(zhí)行的方式不同:

顯式操作:在已簽名的交易中顯式出現(xiàn)

隱式操作(內(nèi)聯(lián)操作):作為處理交易的一個副作用(side effect),例如通知绞绒?

和顯式操作一樣婶希,隱式操作也被定義在智能合約中。關(guān)鍵的區(qū)別在于蓬衡,內(nèi)聯(lián)操作不不會在網(wǎng)絡傳播并最終包含在塊中的實際交易中喻杈,他們是隱式的彤枢。

1.1.1 顯式操作

顯式操作包含在組成交易的實際操作列表中。在被放到交易里面之前筒饰,顯式操作被實現(xiàn)為具體的操作實例缴啡。顯式操作還包含實際的負載數(shù)據(jù)(如果有的話),這些數(shù)據(jù)和操作相關(guān)聯(lián)龄砰,且作為交易的一部分盟猖。

1.1.2 隱式操作

隱式(內(nèi)聯(lián))操作是在一個交易中被顯式操作(即調(diào)用者)調(diào)用而產(chǎn)生的讨衣,該交易需要隱式操作來執(zhí)行一個操作换棚,以便顯式操作(即調(diào)用者)繼續(xù)進行。正因這樣反镇,內(nèi)聯(lián)操作和調(diào)用者是工作在相同的作用域和權(quán)限下的固蚤。因此,內(nèi)聯(lián)操作可以確保和調(diào)用者在同一個交易中執(zhí)行歹茶。

1.2 智能合約

在EOSIO系統(tǒng)中夕玩,智能合約是由一系列根據(jù)功能劃分的操作和這些操作所依賴的類型定義組成。即合約由操作和類型組成惊豺。因此燎孟,操作定義了合約的實際行為。一些行為是由標準的eosio合約實現(xiàn)尸昧,例如賬號創(chuàng)建揩页,為BP投票,通證轉(zhuǎn)賬等烹俗。應用開發(fā)者能通過在自定義的合約中創(chuàng)建自定義的操作來擴展爆侣、代替或者修改這些功能。另一方面幢妄,交易就是典型的在應用程序級創(chuàng)建的兔仰,智能合約和交易類似。

1.2.1 實現(xiàn)

智能合約是用c++語言實現(xiàn)的蕉鸳,需要從eosio::contract類繼承乎赴。操作就是合約類中的方法。交易是在eosio應用程序中動態(tài)生成的潮尝,通過交易實例實現(xiàn)榕吼。eosio處理每一個交易實例,跟蹤它的狀態(tài):創(chuàng)建衍锚、簽名友题、驗證、執(zhí)行戴质。

2 交易實例

實例由交易頭度宦、操作實例列表和交易擴展踢匣。根據(jù)交易過期時間(交易被執(zhí)行的時候會計算出來),交易頭評估它需要包含的必要信息戈抄。(過期時間不一樣离唬,交易頭中信息還不一樣?)其他字段包括包含該交易的塊號(沒有找到;搿J漭骸!)裸诽,塊id前綴(用于防止跨鏈嫂用,跨分支攻擊,沒有找到U啥V龊!)埂蕊、CPU和網(wǎng)絡使用的上限往弓、以及延遲事務的秒數(shù)(如果適用)。交易實例如下示意圖蓄氧。

操作實例由常規(guī)操作或上下文無關(guān)的操作組成函似。簽名是在交易級別被創(chuàng)建和驗證的。也就是說單一行為不會做簽名的喉童。帳戶和權(quán)限會基于單個操作處理撇寞。

每個操作實例都包含一些信息,用于根據(jù)操作中指定的actor的權(quán)限級別(即actor@permission)和合約中為該操作指定的實際授權(quán)來驗證它是否可以執(zhí)行泄朴。

2.1 交易ID

每個交易實例對應著一個交易實體重抖,不同交易通過交易ID區(qū)分。交易ID是通過包含在交易實例中的基本信息經(jīng)過加密哈希處理后生成的祖灰。因此钟沛,交易ID是由交易頭,操作列表和交易擴展字段唯一決定的(這不是廢話嘛)局扶。交易實例后續(xù)可以被具化成簽名交易實例或打包交易實例恨统。

2.2 簽名交易實例

簽名的交易擴展了交易字段的基本內(nèi)容,包括對交易進行簽名的賬號生成的簽名信息三妈。還包括與交易實例中包含的上下文無關(guān)操作(如果有的話)相關(guān)的任何數(shù)據(jù)畜埋。只有被賬號簽名過的交易,才能準備被執(zhí)行和驗證畴蒲。

簽名交易字段如下:https://developers.eos.io/welcome/latest/protocol/transactions_protocol/#signed_transaction-schema

2.3 打包交易實例

被打包的交易里面悠鞍,是否壓縮是可選項。打包交易會將空間最小化模燥,形成EOSIO中最常見的交易類型咖祭。因此掩宜,當交易被推入一個塊時,不管是否壓縮么翰,它們都是打包交易牺汤。

打包交易字段如下:https://developers.eos.io/welcome/latest/protocol/transactions_protocol/#packed_transaction-schema


擴展

1、eosio是如何確認交易的原子性的浩嫌?

參考:https://www.zhihu.com/question/30272728

沒有找到eos如何做到的檐迟,找到普通數(shù)據(jù)庫如何做到的。

為了實現(xiàn)原子性码耐,需要通過日志:將所有對數(shù)據(jù)的更新操作都寫入日志追迟,如果一個事務中的一部分操作已經(jīng)成功,但以后的操作,由于斷電/系統(tǒng)崩潰/其它的軟硬件錯誤而無法繼續(xù),則通過回溯日志换怖,將已經(jīng)執(zhí)行成功的操作撤銷役纹,從而達到“全部操作失敗”的目的。最常見的場景是金闽,數(shù)據(jù)庫系統(tǒng)崩潰后重啟纯露,此時數(shù)據(jù)庫處于不一致的狀態(tài),必須先執(zhí)行一個crash recovery的過程:讀取日志進行REDO(重演將所有已經(jīng)執(zhí)行成功但尚未寫入到磁盤的操作代芜,保證持久性)埠褪,再對所有到崩潰時尚未成功提交的事務進行UNDO(撤銷所有執(zhí)行了一部分但尚未提交的操作,保證原子性)挤庇。crash recovery結(jié)束后钞速,數(shù)據(jù)庫恢復到一致性狀態(tài),可以繼續(xù)被使用嫡秕。

2渴语、交易參數(shù)關(guān)系

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昆咽,隨后出現(xiàn)的幾起案子驾凶,更是在濱河造成了極大的恐慌,老刑警劉巖掷酗,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件调违,死亡現(xiàn)場離奇詭異,居然都是意外死亡泻轰,警方通過查閱死者的電腦和手機技肩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浮声,“玉大人虚婿,你說我怎么就攤上這事殖告。” “怎么了雳锋?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵黄绩,是天一觀的道長。 經(jīng)常有香客問我玷过,道長爽丹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任辛蚊,我火速辦了婚禮粤蝎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袋马。我一直安慰自己初澎,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布虑凛。 她就那樣靜靜地躺著碑宴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桑谍。 梳的紋絲不亂的頭發(fā)上延柠,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音锣披,去河邊找鬼贞间。 笑死,一個胖子當著我的面吹牛雹仿,可吹牛的內(nèi)容都是我干的增热。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胧辽,長吁一口氣:“原來是場噩夢啊……” “哼峻仇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起票顾,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤础浮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奠骄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豆同,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年含鳞,在試婚紗的時候發(fā)現(xiàn)自己被綠了影锈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸭廷,靈堂內(nèi)的尸體忽然破棺而出枣抱,到底是詐尸還是另有隱情,我是刑警寧澤辆床,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布佳晶,位于F島的核電站,受9級特大地震影響讼载,放射性物質(zhì)發(fā)生泄漏轿秧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一咨堤、第九天 我趴在偏房一處隱蔽的房頂上張望菇篡。 院中可真熱鬧,春花似錦一喘、人聲如沸驱还。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽议蟆。三九已至,卻和暖如春触徐,著一層夾襖步出監(jiān)牢的瞬間咪鲜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工撞鹉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颖侄。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓鸟雏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親览祖。 傳聞我的和親對象是個殘疾皇子孝鹊,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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