block解析
- difficulty般此,直接有返回
- extraData(額外數(shù)據(jù))籍茧,例如:0x476574682f76312e302e312f77696e646f77732f676f312e342e32徽龟,他的utf編碼內(nèi)容是:Geth/v1.0.1/windows/go1.4.2
- gasLimit gas最大限制绩聘,直接有返回 <這個(gè)塊最大的gas數(shù)量限制踢代,即所有交易的gas limit之和小于這個(gè)塊的gas limit數(shù)量>
- gasUsed 塊交易gas實(shí)際使用累加,直接有返回 <這個(gè)是所有這個(gè)塊打包的所有的交易實(shí)際消耗的gas數(shù)量之和> 使用率的獲得是(59.95% = gasUsed / gasLimit * 100%)
- block Hash塊的hash瓜客,直接有返回
- 返回的logsBloom适瓦,日記塊。日記塊寫下含有可索引的信息(寫日記人地址和日記主題)谱仪,這信息包含每個(gè)日記里交易列表中每個(gè)交易的接收人的登錄信息
- 返回的miner,這個(gè)塊的發(fā)現(xiàn)者否彩,想把發(fā)現(xiàn)塊的獎(jiǎng)勵(lì)發(fā)送到的地址疯攒。<這個(gè)塊的獎(jiǎng)勵(lì)發(fā)送的地址>
- mixhash: 混合哈希值(“mixHash”):一個(gè)與隨機(jī)數(shù)一起證明已經(jīng)在這個(gè)區(qū)塊中完成的充分的計(jì)算力總量的256位哈希值
- Nonce: 隨機(jī)數(shù)(“nonce”):一個(gè)與混合哈希值一起證明已經(jīng)在這個(gè)區(qū)塊中完成的充分的計(jì)算力總量的256位哈希值
- 返回的number 也就是這個(gè)塊當(dāng)前位于整個(gè)鏈中的位置,例如可以說這個(gè)塊在46953這個(gè)地方列荔,也可以說是塊的高度值
- parentHash字段敬尺,當(dāng)前塊指向之前的塊的hash
- receiptsRoot: 接收人根(“receiptsRoot”):trie結(jié)構(gòu)根節(jié)點(diǎn)的Keccak256位哈希值移植到這個(gè)區(qū)塊交易列表中的每個(gè)交易的接收人
- sha3Uncles: 暫時(shí)不知道用處
- size: <這個(gè)塊的實(shí)際大小>
- stateRoot: 狀態(tài)根(“stateRoot”):trie狀態(tài)根節(jié)點(diǎn)的Keccak256位哈希值,在所有交易被執(zhí)行和定稿被應(yīng)用
- timestamp: <這個(gè)塊發(fā)現(xiàn)的時(shí)間戳>
- totalDifficulty字段贴浙,到這個(gè)塊為止的難度之和
- 交易的數(shù)組字段transactions砂吞。這個(gè)字段需要分析出交易的類型,例如普通轉(zhuǎn)賬崎溃,合約的內(nèi)部交易蜻直,合約代幣轉(zhuǎn)賬。怎么區(qū)分是個(gè)問題,暫時(shí)沒找到就是包括這些不同類型信息的交易信息概而。待信息數(shù)據(jù)模塊完善后呼巷,可以具體分析下。
- 發(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ì)
- 暫時(shí)不清楚uncles字段和Uncles Reward: 0 有什么特殊意義瓶佳。 <如果你之前塊是你的父塊芋膘,那么叔塊就是你父塊的兄弟,你的父塊得到了確認(rèn)霸饲,叔塊沒有得到確認(rèn)为朋,如果沒人理他,他就成了孤兒塊厚脉,如果你把這個(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中返回的交易信息解析如下:
- blockHash: 上面的塊的hash
- blockNumber: Block Height:46953 (4852571 確認(rèn)數(shù)字即在這個(gè)塊所連接的鏈上,后續(xù)有繼續(xù)連接了多少個(gè)塊蟋滴,叫對(duì)這個(gè)交易的確認(rèn)數(shù))
- from: 發(fā)起交易的賬戶
- gas: 不知道是哪個(gè)染厅,感覺是gas limit ,也就是一筆交易的限制消耗的最大gas數(shù)量津函。就是Gas Limit: 21000 最大可被計(jì)算使用過的gas數(shù)量肖粮,當(dāng)真正需要計(jì)算的所消耗的大于這個(gè)limit的時(shí)候,交易會(huì)失敗
- gasPrice: 0.0000003 Ether (300 Gwei)這個(gè)是轉(zhuǎn)化后的顯示數(shù)字真實(shí)的是"300000000000"尔苦,需要特殊處理下
- hash: 這交易的hash
- input: input字段涩馆,一般交易為空行施,如果是創(chuàng)建合約或者調(diào)用合約,則會(huì)附帶一些數(shù)據(jù)
- nonce: 可以理解為當(dāng)前這個(gè)發(fā)送交易賬戶凌净,發(fā)送交易的記錄 例如悲龟,第一次交易為0,第二次交易為1冰寻,第三次為2须教,一次類推。nonce 防止雙花交易斩芭,這個(gè)值要和以太坊網(wǎng)絡(luò)上的記錄保持一致轻腺。高于這個(gè)值,則此交易無效
- to: 轉(zhuǎn)到的賬戶地址
- transactionIndex: 這筆交易是塊打包的第幾筆交易
- value: 轉(zhuǎn)賬的金額划乖,實(shí)際值為"50000000000000000" 轉(zhuǎn)化為可以理解的就是0.05以太幣
以下字段沒有返回
- timeStamp時(shí)間戳就是所在塊打包的時(shí)間
- 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)
- Cumulative Gas Used: 21000 累計(jì)使用的gas數(shù)量,一筆筆交易的gas used相加得到的
每一筆交易真實(shí)消耗的gas之和 - 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è)字段,可以不用自己加踊挠,這里直接有返回
最后遺留問題
怎么區(qū)分:普通轉(zhuǎn)賬鹰晨,合約的內(nèi)部交易,合約代幣轉(zhuǎn)賬止毕,怎么區(qū)分是個(gè)問題,暫時(shí)沒找到就是包括這些不同類型信息的交易信息漠趁。待信息數(shù)據(jù)模塊完善后扁凛,可以具體分析下。
-
補(bǔ)充
首先普通轉(zhuǎn)賬闯传,很簡(jiǎn)單谨朝,交易信息中顯示很詳細(xì) 使用getBlock() 和 getTransactionReceipt() 基本很詳細(xì)了。 其次是合約內(nèi)部的交易,也就是轉(zhuǎn)賬到合約地址字币,然后被合約各種處理后则披,最后到了某個(gè)地址 這個(gè)主要通過debug_traceTransaction接口獲取,分析返回的數(shù)據(jù)即可 最后是合約代幣的流轉(zhuǎn) 合約代幣的流程一定會(huì)觸發(fā)下面的事件 event Transfer(address indexed from, address indexed to, uint256 value); 分析getTransactionReceipt()數(shù)據(jù)中的logs字段洗出,即可獲得詳細(xì)信息
-
轉(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è)合約的代幣,轉(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)用合約地址的公開方法做一些事情 <理論上2) 屬于3)> - 最簡(jiǎn)單的就是調(diào)用合約公開方法改變內(nèi)部存儲(chǔ)的值,但是沒有觸發(fā)事件 https://etherscan.io/tx/0x43607252bf210c3d20fe9a659f45dddcd1725969d8471be7868e577f28a98e61 調(diào)用了函數(shù)利耍,且傳入了不同的值蚌本,但是沒有觸發(fā)事件 - 轉(zhuǎn)賬到合約地址,觸發(fā)了事件隘梨,但是沒有做轉(zhuǎn)出程癌,代幣分發(fā)操作,此合約地址有余額 https://etherscan.io/tx/0x8d3e2be93030c39faf5642bd479055f8a0e99e5673142cdebc492004194376ae - 復(fù)雜的轉(zhuǎn)賬到合約地址出嘹,觸發(fā)了事件席楚,做了代幣分發(fā)和合約轉(zhuǎn)賬到另一地址操作 https://etherscan.io/tx/0xd54e1fbc350dac428ca65a4abef6db4e343e1367e6cd9434bb14949a469cefc4