block字段分析

block解析

  1. difficulty,直接有返回
  2. extraData(額外數(shù)據(jù)),例如:0x476574682f76312e302e312f77696e646f77732f676f312e342e32,他的utf編碼內(nèi)容是:Geth/v1.0.1/windows/go1.4.2
  3. gasLimit gas最大限制,直接有返回 <這個(gè)塊最大的gas數(shù)量限制,即所有交易的gas limit之和小于這個(gè)塊的gas limit數(shù)量>
  4. gasUsed 塊交易gas實(shí)際使用累加,直接有返回 <這個(gè)是所有這個(gè)塊打包的所有的交易實(shí)際消耗的gas數(shù)量之和> 使用率的獲得是(59.95% = gasUsed / gasLimit * 100%)
  5. block Hash塊的hash,直接有返回
  6. 返回的logsBloom,日記塊。日記塊寫(xiě)下含有可索引的信息(寫(xiě)日記人地址和日記主題),這信息包含每個(gè)日記里交易列表中每個(gè)交易的接收人的登錄信息
  7. 返回的miner,這個(gè)塊的發(fā)現(xiàn)者,想把發(fā)現(xiàn)塊的獎(jiǎng)勵(lì)發(fā)送到的地址。<這個(gè)塊的獎(jiǎng)勵(lì)發(fā)送的地址>
  8. mixhash: 混合哈希值(“mixHash”):一個(gè)與隨機(jī)數(shù)一起證明已經(jīng)在這個(gè)區(qū)塊中完成的充分的計(jì)算力總量的256位哈希值
  9. Nonce: 隨機(jī)數(shù)(“nonce”):一個(gè)與混合哈希值一起證明已經(jīng)在這個(gè)區(qū)塊中完成的充分的計(jì)算力總量的256位哈希值
  10. 返回的number 也就是這個(gè)塊當(dāng)前位于整個(gè)鏈中的位置,例如可以說(shuō)這個(gè)塊在46953這個(gè)地方,也可以說(shuō)是塊的高度值
  11. parentHash字段,當(dāng)前塊指向之前的塊的hash
  12. receiptsRoot: 接收人根(“receiptsRoot”):trie結(jié)構(gòu)根節(jié)點(diǎn)的Keccak256位哈希值移植到這個(gè)區(qū)塊交易列表中的每個(gè)交易的接收人
  13. sha3Uncles: 暫時(shí)不知道用處
  14. size: <這個(gè)塊的實(shí)際大小>
  15. stateRoot: 狀態(tài)根(“stateRoot”):trie狀態(tài)根節(jié)點(diǎn)的Keccak256位哈希值,在所有交易被執(zhí)行和定稿被應(yīng)用
  16. timestamp: <這個(gè)塊發(fā)現(xiàn)的時(shí)間戳>
  17. totalDifficulty字段,到這個(gè)塊為止的難度之和
  18. 交易的數(shù)組字段transactions。這個(gè)字段需要分析出交易的類(lèi)型,例如普通轉(zhuǎn)賬,合約的內(nèi)部交易,合約代幣轉(zhuǎn)賬。怎么區(qū)分是個(gè)問(wèn)題,暫時(shí)沒(méi)找到就是包括這些不同類(lèi)型信息的交易信息。待信息數(shù)據(jù)模塊完善后,可以具體分析下。
  19. 發(fā)現(xiàn)塊的獎(jiǎng)勵(lì)。具體為當(dāng)前發(fā)現(xiàn)一個(gè)塊的獎(jiǎng)勵(lì)大小,打包在這個(gè)塊中的交易u(yù)se gas *gas price之和,相加即獎(jiǎng)勵(lì)。
    詳細(xì)計(jì)算:發(fā)現(xiàn)一個(gè)塊默認(rèn)獎(jiǎng)勵(lì)是5eth在 當(dāng)塊的高度 block height <= 4369999,當(dāng)block height >= 4370000后區(qū)塊獎(jiǎng)勵(lì)是3eth
        所以如果M是獎(jiǎng)勵(lì)的eth數(shù)字
        blockHeight <= 4369999時(shí) M = 5,blockHeight >= 4370000 M = 3
        1) 發(fā)現(xiàn)一個(gè)塊的獎(jiǎng)勵(lì) M eth
        2) 每一筆交易自己的use gas * 每一筆交易自己的gas price = 真實(shí)消耗的cost ,然后塊內(nèi)所有交易的cost之和的值
        3) 如果打包了叔塊(一個(gè)塊最多可以打包兩個(gè)叔塊),則會(huì)獎(jiǎng)勵(lì)一部分eth,計(jì)算方式如:如果打包了n個(gè)(n>=0 && n<= 2)n * M * (1/32)
        4) 結(jié)果是M eth +  total cost + M * 5 * (1/32) 就是這塊最終的獎(jiǎng)勵(lì)
    
  20. 暫時(shí)不清楚uncles字段和Uncles Reward: 0 有什么特殊意義。 <如果你之前塊是你的父塊,那么叔塊就是你父塊的兄弟,你的父塊得到了確認(rèn),叔塊沒(méi)有得到確認(rèn),如果沒(méi)人理他,他就成了孤兒塊,如果你把這個(gè)叔塊包含進(jìn)你的塊中,那么就會(huì)成為你的叔塊,每個(gè)塊最多包含兩個(gè)叔塊,同時(shí)你會(huì)得到獎(jiǎng)勵(lì)>
    詳細(xì)計(jì)算:叔塊的獎(jiǎng)勵(lì)(不是打包叔塊的獎(jiǎng)勵(lì))
        blockHeight <= 4369999時(shí) M = 5,blockHeight >= 4370000 M = 3
        當(dāng)此叔塊被打包的塊的高度是blockHeight時(shí), uncleHeight = blockHteigh - 1。
        ( uncleHeight + 8 - blockHeigh ) * M / 8 = result value 就是最后的獎(jiǎng)勵(lì),獎(jiǎng)勵(lì)給這個(gè)叔塊的發(fā)現(xiàn)者,但是里面打包的交易,需要重新打包。
    

block中返回的交易信息解析如下:

  1. blockHash: 上面的塊的hash
  2. blockNumber: Block Height:46953 (4852571 確認(rèn)數(shù)字即在這個(gè)塊所連接的鏈上,后續(xù)有繼續(xù)連接了多少個(gè)塊,叫對(duì)這個(gè)交易的確認(rèn)數(shù))
  3. from: 發(fā)起交易的賬戶
  4. gas: 不知道是哪個(gè),感覺(jué)是gas limit ,也就是一筆交易的限制消耗的最大gas數(shù)量。就是Gas Limit: 21000 最大可被計(jì)算使用過(guò)的gas數(shù)量,當(dāng)真正需要計(jì)算的所消耗的大于這個(gè)limit的時(shí)候,交易會(huì)失敗
  5. gasPrice: 0.0000003 Ether (300 Gwei)這個(gè)是轉(zhuǎn)化后的顯示數(shù)字真實(shí)的是"300000000000",需要特殊處理下
  6. hash: 這交易的hash
  7. input: input字段,一般交易為空,如果是創(chuàng)建合約或者調(diào)用合約,則會(huì)附帶一些數(shù)據(jù)
  8. nonce: 可以理解為當(dāng)前這個(gè)發(fā)送交易賬戶,發(fā)送交易的記錄 例如,第一次交易為0,第二次交易為1,第三次為2,一次類(lèi)推。nonce 防止雙花交易,這個(gè)值要和以太坊網(wǎng)絡(luò)上的記錄保持一致。高于這個(gè)值,則此交易無(wú)效
  9. to: 轉(zhuǎn)到的賬戶地址
  10. transactionIndex: 這筆交易是塊打包的第幾筆交易
  11. value: 轉(zhuǎn)賬的金額,實(shí)際值為"50000000000000000" 轉(zhuǎn)化為可以理解的就是0.05以太幣

以下字段沒(méi)有返回

  1. timeStamp時(shí)間戳就是所在塊打包的時(shí)間
  2. Gas Used By Txn: 21000 計(jì)算真正使用的gas數(shù)量?
    1. 如果交易發(fā)出之前計(jì)算的話使用: eth.estimateGas({from: fromAddress, to: toAddress, value:50000000000000})
    2. 如果是已經(jīng)完成交易的可以根據(jù)tx hash 查詢: eth.getTransactionReceipt(hash)
    
  3. Cumulative Gas Used: 21000 累計(jì)使用的gas數(shù)量,一筆筆交易的gas used相加得到的
    每一筆交易真實(shí)消耗的gas之和
  4. Actual Tx Cost/Fee: 0.0063 Ether
    <21000(Gas Used) * 0.0000003(Gas Price)>即真正使用的gas * 每個(gè)gas的價(jià)格,就是實(shí)際消耗的

補(bǔ)充信息

在block塊中的信息,并不完全,如果要分析這筆交易的跟多信息,需要結(jié)合eth.getTransactionReceipt(hash)返回的結(jié)果值。
1. 可以得到當(dāng)前交易的gasUsed,也就是真實(shí)用到的gas數(shù)量
2. 可以得到當(dāng)前交易的狀態(tài)字段status,0x0是失敗,0x1是成功
3. logs字段,可以分析交易內(nèi)部的一些事情,暫未搞明白
4. contractAddress字段,就是當(dāng)你的toAddress字段是null,且input字段有內(nèi)容時(shí)。查詢交易狀態(tài)時(shí),contractAddress就是你的合約創(chuàng)建地址
5. cumulativeGasUsed也是展示在交易信息界面上的交易的第12個(gè)字段,可以不用自己加,這里直接有返回

最后遺留問(wèn)題

怎么區(qū)分:普通轉(zhuǎn)賬,合約的內(nèi)部交易,合約代幣轉(zhuǎn)賬,怎么區(qū)分是個(gè)問(wèn)題,暫時(shí)沒(méi)找到就是包括這些不同類(lèi)型信息的交易信息。待信息數(shù)據(jù)模塊完善后,可以具體分析下。

  1. 補(bǔ)充

    首先普通轉(zhuǎn)賬,很簡(jiǎn)單,交易信息中顯示很詳細(xì)
        使用getBlock() 和 getTransactionReceipt() 基本很詳細(xì)了。
    其次是合約內(nèi)部的交易,也就是轉(zhuǎn)賬到合約地址,然后被合約各種處理后,最后到了某個(gè)地址
        這個(gè)主要通過(guò)debug_traceTransaction接口獲取,分析返回的數(shù)據(jù)即可
    最后是合約代幣的流轉(zhuǎn)
        合約代幣的流程一定會(huì)觸發(fā)下面的事件
        event Transfer(address indexed from, address indexed to, uint256 value);
        分析getTransactionReceipt()數(shù)據(jù)中的logs字段,即可獲得詳細(xì)信息
    
  2. 轉(zhuǎn)賬流程分析如下

    1. 普通的轉(zhuǎn)賬 
            fromAddress and toAddress 都是普通賬戶
            描述:很簡(jiǎn)單就是兩個(gè)賬戶余額的變化
        2. 合約的創(chuàng)建
            fromAddress 為普通賬戶, toAddress為nil,input字段有內(nèi)容(就是要部署的合約的bytecode)
            在交易getTransactionReceipt函數(shù)返回的結(jié)果中contractAddress字段有內(nèi)容。這就是一個(gè)合約的創(chuàng)建交易。
            例如:0x77350c5282d57507cb4b1d8298387878a52d1ecd1a40fa2d7985f0b3c822dc34 這筆就是創(chuàng)建合約的交易
            https://etherscan.io/tx/0x77350c5282d57507cb4b1d8298387878a52d1ecd1a40fa2d7985f0b3c822dc34
        3. 合約的調(diào)用
            1) 普通地址轉(zhuǎn)賬到合約地址觸發(fā)一些事件
                - 購(gòu)買(mǎi)某個(gè)合約的代幣,轉(zhuǎn)賬到這個(gè)合約地址
                    合約執(zhí)行某個(gè)事件為發(fā)送交易地址分配相應(yīng)代幣額度
                    合約會(huì)將 轉(zhuǎn)賬到合約地址的以太幣 轉(zhuǎn)到一個(gè)普通用戶賬戶地址
                - 如果不講合約代幣的合約。則如果轉(zhuǎn)賬到某個(gè)合約,則會(huì)根據(jù)合約代碼的設(shè)計(jì)觸發(fā)相對(duì)應(yīng)的事件
            2) 普通地址調(diào)用合約地址的方法觸發(fā)代幣轉(zhuǎn)賬 (最近經(jīng)常用的)
    
            3) 普通地址調(diào)用合約地址的公開(kāi)方法做一些事情 <理論上2) 屬于3)>
                - 最簡(jiǎn)單的就是調(diào)用合約公開(kāi)方法改變內(nèi)部存儲(chǔ)的值,但是沒(méi)有觸發(fā)事件
                    https://etherscan.io/tx/0x43607252bf210c3d20fe9a659f45dddcd1725969d8471be7868e577f28a98e61
                    調(diào)用了函數(shù),且傳入了不同的值,但是沒(méi)有觸發(fā)事件
                - 轉(zhuǎn)賬到合約地址,觸發(fā)了事件,但是沒(méi)有做轉(zhuǎn)出,代幣分發(fā)操作,此合約地址有余額
                    https://etherscan.io/tx/0x8d3e2be93030c39faf5642bd479055f8a0e99e5673142cdebc492004194376ae
                - 復(fù)雜的轉(zhuǎn)賬到合約地址,觸發(fā)了事件,做了代幣分發(fā)和合約轉(zhuǎn)賬到另一地址操作
                    https://etherscan.io/tx/0xd54e1fbc350dac428ca65a4abef6db4e343e1367e6cd9434bb14949a469cefc4
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.以太幣(Ether)產(chǎn)生規(guī)則和比特幣有哪些區(qū)別? 1. 出塊時(shí)間。 比特幣出塊時(shí)間是平均10分鐘,而以太坊約是...
    愛(ài)學(xué)習(xí)的小仙女呀閱讀 3,574評(píng)論 0 7
  • 概念 以太坊是一個(gè)可編程區(qū)塊鏈,那么允許用戶創(chuàng)建屬于他們自己的復(fù)雜的操作,且作為一個(gè)去中介化的平臺(tái),提供不同的區(qū)塊...
    磨鏈社區(qū)閱讀 1,469評(píng)論 0 1
  • 【中文版】以太坊白皮書(shū) 翻譯:少平、 Seven當(dāng)中本聰在 2009 年 1 月啟動(dòng)比特幣區(qū)塊鏈時(shí),他同時(shí)向世界引...
    __Seven__閱讀 4,447評(píng)論 0 10
  • 文/吳雷 今天遇到一件小事,其實(shí)同類(lèi)的問(wèn)題以前經(jīng)常遇上,我只是沒(méi)有反思自己......下午時(shí),正好遇到對(duì)門(mén)出去,我...
    吳雷china閱讀 368評(píng)論 0 1
  • 愛(ài)上寂寞,一個(gè)人遠(yuǎn)行。 總覺(jué)得這個(gè)世界很寂寞,老子是寂寞的,人是寂寞的。人在娘胎里就是一個(gè)人,長(zhǎng)...
    瀟夏閱讀 784評(píng)論 0 0

友情鏈接更多精彩內(nèi)容