Ethereum學(xué)習(xí)筆記(一)

相關(guān)命令分析

  • eth.blockNumber
    查看當(dāng)前塊高。
  • eth.getBlock()
    根據(jù)高度查看塊內(nèi)容。
  • eth.syncing
    獲取同步狀態(tài),可以看到全網(wǎng)最新塊高狂打,提示用戶同步進(jìn)度。

區(qū)塊分析

創(chuàng)世區(qū)塊:

{
  difficulty: 17179869184,
  extraData: "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
  gasLimit: 5000,
  gasUsed: 0,
  hash: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x0000000000000000000000000000000000000000",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000042",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 540,
  stateRoot: "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",
  timestamp: 0,
  totalDifficulty: 17179869184,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

以太坊主網(wǎng)第410000的區(qū)塊:

{
  difficulty: 1390302857940436,
  extraData: "0x7563776f6e67",
  gasLimit: 6708771,
  gasUsed: 105000,
  hash: "0xa108580144142887e58cf074d4ea0be93b00c13ed1992d3897edb078fabe7118",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x9435d50503aee35c8757ae4933f7a0ab56597805",
  mixHash: "0xfe8975ce7e272e88243ce9ec91d1a826fa5fe930d9e18de6a72ef57b4f9aa954",
  nonce: "0xf0d4aef0039682a8",
  number: 4100000,
  parentHash: "0xd060e9516fc2a26aab3728d7fad2f2301d9822e6b2100eff58a16abd185881a1",
  receiptsRoot: "0xa36be6a4f6a8e9a63a6b90dfa174d5cc6e7662f0d05007f39ef8a14aab54da95",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 1095,
  stateRoot: "0xf49e0946c05d675cafd607613b009a3121a7e9ed6ed1f614a0c05e3bf6bebea1",
  timestamp: 1501511212,
  totalDifficulty: 595854527970155343606,
  transactions: ["0x5728a5597f1dd7bb3e8843bfd6a8fe4156ae4605408d990c54dced5945e4a7af", "0x902aa2582c63328fcca071296a389b55a1c84983f1a3553ef05b1a14b16bd913", "0x452169cbce264f8d30074d2ddcb8caca2ba7e7b4effdca26301696c6a242ea5f", "0x9dee172d17a82354010ad18c9a7d32e49141b406d4802a6b0d5b25359809a1b3", "0xaa1b5f94f285a344d3e99f85529343daa3f72741752cad946a995e6544bd14ab"],
  transactionsRoot: "0xe3eec697b2dcc74678edff5b022e65263c8428e47f11c25b9d4ba9d518632269",
  uncles: []
}

可以看出從創(chuàng)世區(qū)塊到現(xiàn)在以太坊的block結(jié)構(gòu)都未做更改混弥,表格中是以太坊黃皮書對(duì)塊的數(shù)據(jù)結(jié)構(gòu)的解釋趴乡。黃皮書地址

key value
difficulty 表示當(dāng)前區(qū)塊的難度水平, 這個(gè)值根據(jù)前一個(gè)區(qū)塊的難度水平和時(shí)間戳計(jì)算得到。
extraData 附加數(shù)據(jù)蝗拿,32字節(jié)以內(nèi)的字節(jié)數(shù)組
gasLimit 目前每個(gè)區(qū)塊的燃料消耗上限
gasUsed 當(dāng)前區(qū)塊的所有交易使用燃料之和
hash block hash晾捏,可以理解為這個(gè)block在整個(gè)blockchain中的索引
logsBloom 日記 Bloom 過濾器由可索引信息(日志地址和日志主題)組成,這個(gè)信息包含在每個(gè)日志入口, 來(lái)自交易列表中每個(gè)交易的接受者
miner 打包這一個(gè)block的礦工地址
mixHash 混合哈希, 與一個(gè)與隨機(jī)數(shù) (nonce)相關(guān)的 256 位哈希計(jì)算, 用于證明針對(duì)當(dāng)前區(qū)塊已經(jīng)完成了足夠的計(jì)算
nonce 隨機(jī)數(shù), 一個(gè) 64 位哈希, 和計(jì)算混合哈希相關(guān), 用于證明針對(duì)當(dāng)前區(qū)塊已經(jīng)完成了足夠的計(jì)算
number 區(qū)塊編號(hào), 等于當(dāng)前區(qū)塊的直系前輩區(qū)塊數(shù)量(創(chuàng)始區(qū)塊的區(qū)塊編號(hào)為0)
parentHash 父哈希(創(chuàng)世區(qū)塊沒有父哈希哀托,所以parentHash為0x0000000000000000000000000000000000000000000000000000000000000000)
receiptsRoot 接受者字典樹根節(jié)點(diǎn)哈希: 接受者字典樹根節(jié)點(diǎn)的 Keccak 256 位哈希, 在接受者字典樹含有區(qū)塊中的所有交易信息中的接受者
sha3Uncles ????
size 猜測(cè)為block包體的大小
stateRoot 狀態(tài)字典樹根節(jié)點(diǎn)哈希: 狀態(tài)字典樹根節(jié)點(diǎn)的 Keccak 256 位哈希, 交易打包到當(dāng)前區(qū)塊且區(qū)塊定稿后可以生成這個(gè)值
timestamp 時(shí)間戳, 當(dāng)前區(qū)塊初始化時(shí)的Unix時(shí)間戳
totalDifficulty ???
transactions block所包含的交易
transactionsRoot 交易字典樹根節(jié)點(diǎn)哈希: 交易字典樹根節(jié)點(diǎn)的 Keccak 256 位哈希, 在交易字典樹含有區(qū)塊中的所有交易列表
  • difficulty:是當(dāng)前塊的難度惦辛,值根據(jù)前一個(gè)區(qū)塊的難度水平和時(shí)間戳計(jì)算得到。推薦大家看一下知乎上的一篇文章以太坊是如何計(jì)算難度的仓手。具體計(jì)算公式如下胖齐,有興趣的朋友可以嘗試計(jì)算一下。(以太坊規(guī)定任何區(qū)塊的難度都不可以低于創(chuàng)世區(qū)塊

periodCount = block_num / 100000
diff = (parent_diff + (parent_diff / 2048 * max(1 - (block_timestamp - parent_timestamp) / 10, -99)) ) + 2^(periodCount - 2)

  • transactionsRoot:為了防止數(shù)據(jù)篡改嗽冒,eth沿用的btc的MerkleTree證明呀伙,相關(guān)技術(shù)內(nèi)容后續(xù)會(huì)做單獨(dú)闡述。

Golang數(shù)據(jù)結(jié)構(gòu)源碼

位置:core/types/block.go

// Header represents a block header in the Ethereum blockchain.
type Header struct {
    ParentHash  common.Hash    `json:"parentHash"       gencodec:"required"`
    UncleHash   common.Hash    `json:"sha3Uncles"       gencodec:"required"`
    Coinbase    common.Address `json:"miner"            gencodec:"required"`
    Root        common.Hash    `json:"stateRoot"        gencodec:"required"`
    TxHash      common.Hash    `json:"transactionsRoot" gencodec:"required"`
    ReceiptHash common.Hash    `json:"receiptsRoot"     gencodec:"required"`
    Bloom       Bloom          `json:"logsBloom"        gencodec:"required"`
    Difficulty  *big.Int       `json:"difficulty"       gencodec:"required"`
    Number      *big.Int       `json:"number"           gencodec:"required"`
    GasLimit    *big.Int       `json:"gasLimit"         gencodec:"required"`
    GasUsed     *big.Int       `json:"gasUsed"          gencodec:"required"`
    Time        *big.Int       `json:"timestamp"        gencodec:"required"`
    Extra       []byte         `json:"extraData"        gencodec:"required"`
    MixDigest   common.Hash    `json:"mixHash"          gencodec:"required"`
    Nonce       BlockNonce     `json:"nonce"            gencodec:"required"`
}

// Block represents an entire block in the Ethereum blockchain.
type Block struct {
    header       *Header
    uncles       []*Header
    transactions Transactions

    // caches
    hash atomic.Value
    size atomic.Value

    // Td is used by package core to store the total difficulty
    // of the chain up to and including the block.
    td *big.Int

    // These fields are used by package eth to track
    // inter-peer block relay.
    ReceivedAt   time.Time
    ReceivedFrom interface{}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末添坊,一起剝皮案震驚了整個(gè)濱河市剿另,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贬蛙,老刑警劉巖雨女,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阳准,居然都是意外死亡氛堕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門溺职,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岔擂,“玉大人位喂,你說(shuō)我怎么就攤上這事浪耘。” “怎么了塑崖?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵七冲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我规婆,道長(zhǎng)澜躺,這世上最難降的妖魔是什么蝉稳? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮掘鄙,結(jié)果婚禮上耘戚,老公的妹妹穿的比我還像新娘。我一直安慰自己操漠,他們只是感情好收津,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浊伙,像睡著了一般撞秋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嚣鄙,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天吻贿,我揣著相機(jī)與錄音,去河邊找鬼哑子。 笑死舅列,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卧蜓。 我是一名探鬼主播剧蹂,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼烦却!你這毒婦竟也來(lái)了宠叼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤其爵,失蹤者是張志新(化名)和其女友劉穎冒冬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摩渺,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简烤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摇幻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片横侦。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绰姻,靈堂內(nèi)的尸體忽然破棺而出枉侧,到底是詐尸還是另有隱情,我是刑警寧澤狂芋,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布榨馁,位于F島的核電站,受9級(jí)特大地震影響帜矾,放射性物質(zhì)發(fā)生泄漏翼虫。R本人自食惡果不足惜屑柔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珍剑。 院中可真熱鬧掸宛,春花似錦、人聲如沸招拙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)迫像。三九已至劈愚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闻妓,已是汗流浹背菌羽。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留由缆,地道東北人注祖。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像均唉,于是被迫代替她去往敵國(guó)和親是晨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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