日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

以太坊交易生命周期

發(fā)布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊交易生命周期 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章總結(jié)以太坊上的交易如何被構(gòu)建和全網(wǎng)廣播。

交易是區(qū)塊鏈的核心。當(dāng)你和以太坊交易交互時,本質(zhì)上就是執(zhí)行一個交易并更改它的狀態(tài)。是否好奇在以太坊上交易被執(zhí)行的過程發(fā)生了什么嗎?讓我們通過一個例子來探討說明以太坊交易的本質(zhì),在這篇文章中我們會覆蓋以下知識點:

  • 全端剖析交易從用戶瀏覽器或者命令行發(fā)起交易到區(qū)塊鏈全網(wǎng)廣播到返回用戶終端的過程
  • 理解使用錢包插件替代全數(shù)據(jù)節(jié)點時交易是如何工作的,譬如 Metamask 或 Myetherwallet 「略」
  • 當(dāng)你偏執(zhí)到不信任其他第三方錢包插件時,你應(yīng)該如何執(zhí)行交易 「略」
  • 默認(rèn)讀者具備以太坊的基礎(chǔ)知識,譬如賬戶系統(tǒng)、gas 和合約等。如果你是一名開發(fā)者,推薦看文章 Ethereum for web developers ,簡單的投票 Dapp 開發(fā)教程

    讀這篇文章的同時如果一邊執(zhí)行交易的話你應(yīng)該理解更通透 (有能力的程序員可以搭建私有鏈節(jié)點進行轉(zhuǎn)賬),比如把 eth 發(fā)給其他普通賬戶或者合約賬戶、投票 dapp 交互等操作都是一筆交易。

    交易過程

    通過調(diào)用合約解釋交易生命周期的全部流程。投票合約的源碼在 這里,整體而言,這是一個初始化一些參與競選的候選者,任何人都可以對候選者投票,最終投票結(jié)果永久不可篡改記錄在區(qū)塊鏈上。

    Voting.deployed().then(function(instance) { instance.voteForCandidate('Nick', {gas: 140000, from: web3.eth.accounts[0]}).then(function(r) {console.log("Voted successfully!") }) })



    假設(shè)在你的電腦上已經(jīng)部署好以太坊客戶端 (geth 或 parity) 并連接到以太坊區(qū)塊鏈網(wǎng)絡(luò) (Testnet 或 Mainnet),通過合約地址和合約 ABI 就能調(diào)用合約中的函數(shù)。拿到合約對象之后調(diào)用 voteForCandidate 函數(shù)。

    構(gòu)建原始交易對象

    voteForCandidate 函數(shù)被調(diào)用之后首次生成原始交易:

    txnCount = web3.eth.getTransactionCount(web3.eth.accounts[0]) var rawTxn = {nonce: web3.toHex(txnCount),gasPrice: web3.toHex(100000000000),gasLimit: web3.toHex(140000),to: '0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b',value: web3.toHex(0),data: '0xc7ed014952616d6100000000000000000000000000000000000000000000000000000000' };

    逐個解釋原始交易中每個字段的意義

    • nonce: 以太坊上每個賬戶都有一個 nonce 字段,用以標(biāo)記該賬戶發(fā)生交易的次數(shù)。賬戶中每發(fā)生一筆新交易,則 nonce 增加 1 ,與此同時區(qū)塊鏈網(wǎng)絡(luò)也能處理交易的執(zhí)行順序。nonce 還被用來重放保護。

    What is a replay attack? Without a replay protection, when you, say send out 1 Bitcoin from the legacy chain, the transaction is also valid on the forked chain with the same amount of new coins and same recipient. Someone else can make use of this and send out your new coins without your agreement. This is the same case for the opposite direction: when you send out the new coins, you are potentially also sending out your Bitcoin!

    • gasPrice:支付該筆交易每個單元 gas 的價格。
    • gasLimit: 支付該筆交易最大數(shù)量的 gas 。該字段防止執(zhí)行交易時出現(xiàn)特殊情況(譬如合約出現(xiàn)無限循環(huán))導(dǎo)致賬戶余額被耗完,一旦交易完成,剩余的 gas 將會返回到你的賬戶。
    • to:調(diào)用合約時這個字段是合約地址,普通交易時為目標(biāo)用戶地址。在這里是投票合約地址
    • value:轉(zhuǎn)賬數(shù)量。在這里我們的目的是調(diào)用投票合約,故賦值為 0
    • data:交易攜帶的信息,在這里有個 tip ,普通交易得到交易結(jié)果的 input data 通常為 0x, 合約交易結(jié)果該字段保護合約交易信息。通過這個字段能夠區(qū)別普通交易和合約交易。

    進一步解釋 data 字段值的生成規(guī)則。

    首先是被調(diào)用合約函數(shù)的散列之后獲取前面四個字節(jié),得到 0xcc9ab267

    > web3.sha3('voteForCandidate(bytes32 candidate)') '0xc7ed014922ff9493a686391b70ca0e8bb7e80f91c98a5cd3d285778ab2e245b3'

    然后是被調(diào)用合約函數(shù)的參數(shù)值轉(zhuǎn)為 32 字節(jié),得到 52616d6100000000000000000000000000000000000000000000000000000000*

    上述兩次得到的組合一起就是 data 字段的值。

    簽名交易

    web3.eth.accounts[0] 執(zhí)行交易,以太坊網(wǎng)絡(luò)需校驗交易發(fā)起者是否有效,通過私鑰簽名就能證明你有該賬戶余額的使用權(quán)。

    const privateKey = Buffer.from('e331b6d69882b4ab4ea581s88e0b6s4039a3de5967d88dfdcffdd2270c0fd109', 'hex') const txn = new EthereumTx(rawTxn) txn.sign(privateKey) const serializedTxn = txn.serialize()

    本地節(jié)點校驗交易合法性

    簽名后的交易被提交到你搭建的節(jié)點,節(jié)點會校驗被簽名的交易是否真的被對應(yīng)的私鑰簽名。

    交易被全網(wǎng)廣播

    一旦構(gòu)建的交易被你搭建的節(jié)點廣播到區(qū)塊鏈網(wǎng)絡(luò),本地節(jié)點就會返回交易 ID, 通過該散列可追蹤交易狀態(tài)

    transactionId = sha3(serializedTxn)



    Mainnet 上的交易可在 etherscan.io 上查看詳情,如果你的交易被其他節(jié)點收到,在區(qū)塊瀏覽器上可以看到交易狀態(tài)為 pending 。本地廣播出去的交易并不會被所有的節(jié)點接收,這種情況發(fā)生在交易的 gas price 低于節(jié)點設(shè)置的最低 gas price 。

    挖礦節(jié)點打包交易

    礦工節(jié)點維護一個交易池,把收集到未被打包的交易按照 gas price 從高到低排列 (當(dāng)然排列規(guī)則是可配置的),然后打包生成一個區(qū)塊。交易池能夠保存的交易有上限,如果網(wǎng)絡(luò)區(qū)塊擁堵會導(dǎo)致手續(xù)費提高和低手續(xù)費的交易遲遲不能得到打包甚至?xí)坏V工丟棄,此時我們就要重新廣播交易。還有一個技巧讓被礦工從交易池丟棄的交易重新被打包:保持 nonce 不變同時提高 gas price 再重新廣播,礦工收到增加手續(xù)費的交易后,新交易會覆蓋被剔出交易池的交易,舊的交易將會失效。

    出塊并全網(wǎng)廣播

    礦工最終把我們構(gòu)建的交易和其他交易一并打包生成塊。以太坊協(xié)議通過設(shè)置塊的 gas limit 限制塊中的交易數(shù)量,塊中所有交易 gas limit 的總和加起來不能超過塊設(shè)置的 gas limit 。通過 ethstats.net 可查看當(dāng)前塊 gas limit 。

    一旦礦工選擇把交易打包生成區(qū)塊,意味著這些交易成功被校驗,此時塊的狀態(tài)是 pending block ,接著礦工節(jié)點開始工作量證明計算。最終只有一個挖礦節(jié)點獲得區(qū)塊權(quán),并把 pending 塊追加到鏈上。廣播區(qū)塊就像我們節(jié)點廣播交易一樣,出塊的礦工把塊廣播到全網(wǎng)。

    本地節(jié)點接收/同步最新區(qū)塊

    本地節(jié)點接收到出塊礦工廣播的最新塊并同步,接收到新塊時,本地節(jié)點執(zhí)行塊中的所有事務(wù)。如果你使用 truffle 執(zhí)行交易,這個工具會不斷地輪訓(xùn)鏈上的數(shù)據(jù)判斷交易是否被確認(rèn),一旦收到確認(rèn)這段代碼就會被執(zhí)行:

    .then(function(r) { console.log("Voted successfully!") })

    推薦閱讀

    • What is transaction replay and replay protection?

    • Life Cycle of an Ethereum Transaction

    https://zhuanlan.zhihu.com/p/35271647

    總結(jié)

    以上是生活随笔為你收集整理的以太坊交易生命周期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 激情伦成人综合小说 | 日本特黄视频 | 日日摸夜夜添狠狠添欧美 | 中文字幕人妻丝袜乱一区三区 | 500福利视频导航 | 美女啪啪av | 一区二区三区精品在线 | 成人国产精品免费观看动漫 | 性——交——性——乱免费的 | 草草影院第一页yycc.com | 亚洲第一天堂在线观看 | 夜色网 | 视频在线免费 | 国产大片一区二区三区 | 毛片在线网站 | 解开人妻的裙子猛烈进入 | 精品久久久久久久久久久久久久久久久 | 青青草草 | 日韩av导航 | 看片久久| 国产αv| 亚洲精品一级二级 | 播放男人添女人下边视频 | 亚洲天堂二区 | 探花国产精品一区二区 | 中国爆后菊女人的视频 | av男人的天堂在线 | 欧美精品大片 | 日本网站免费观看 | 成长快手短视频在线观看 | 黑人vs亚洲人在线播放 | 亚洲第一网址 | 成年人免费视频网站 | 成人毛片观看 | 国产在线播放一区二区三区 | 中文字字幕一区二区三区四区五区 | 污污污www精品国产网站 | 99re在线视频精品 | 欧美老熟妇一区二区三区 | 久久精品无码Av中文字幕 | 中文字幕国产专区 | 亚洲网站免费 | 国产95在线 | 欧美一级免费看 | 中文幕无线码中文字夫妻 | 91亚洲综合 | 少妇aa| 天天鲁一鲁摸一摸爽一爽 | 久久精彩免费视频 | 成人资源在线观看 | 国产精品久久久久久久天堂 | 麻豆网站在线看 | 毛片av免费看 | 亚洲视频a | 韩日av一区二区 | 两口子交换真实刺激高潮 | 青青草免费观看 | 韩国久久精品 | 国产美女裸体无遮挡免费视频 | 都市激情亚洲色图 | 色综合日韩| 日日操视频 | 男人私人影院 | 国产精品久久久久影院老司 | 97公开视频| 国产吞精囗交免费视频 | 欧美,日韩,国产精品免费观看 | 国产精久久 | 欧美另类亚洲 | 亚洲成人中文字幕 | 日本一区免费视频 | 日本少妇aaa | 精品动漫一区二区三区在线观看 | 欧美精品性生活 | 黄色一级大片免费看 | 日本在线观看一区二区 | 天天色网站 | 伦理自拍 | 免费二区| 午夜888| 亚洲AV无码成人精品区麻豆 | 手机天堂网 | 亚洲天堂小说 | 欧美激情不卡 | 日韩av在线播放一区 | 日本韩国三级 | 国产一区麻豆 | 黄色av大全| 天天射天天搞 | 亚洲无码精品国产 | 午夜一区在线观看 | 漂亮人妻被黑人久久精品 | 热久久国产精品 | 国产欧美日韩精品区一区二污污污 | 国产一区精品在线观看 | 无码人妻精品一区二区三区温州 | 国产精品视频999 | 欧美大色网 | av资源免费看 |