一些重要概念

账户

        比特币系统是基于交易的,而以太坊是基于账户的。以太坊中,有两种类型的账户,分别是外部账户(externally owned account)、合约账户(smart contract account)。
        外部账户就是普通的账户,系统需要为其维护balance(余额)、nonce(交易)两个数据。
        合约账户就是普通用户需要调用的智能合约,系统需要为其维护balance、nonce、code(代码)、storage(存储)等数据。
        普通用户创建合约时,系统会返回一个地址,用户根据地址就可以调用该合约。

区块生成速度

        以太坊每15秒左右生成一个区块。

地址长度

        以太坊中的地址长度为160位,表示成40位十六进制数字。

区块

  • 区块头结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
type Header struct {
//指向父区块的hash
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"`
//本块Gas上限(区块中所有交易所能够消耗汽油的上限)
    GasLimit    uint64         `json:"gasLimit"         gencodec:"required"`
//区块中所有交易的Gas使用量  
GasUsed     uint64         `json:"gasUsed"          gencodec:"required"`
//本块的产生时间戳
Time        *big.Int       `json:"timestamp"        gencodec:"required"`
//附加数据
Extra       []byte         `json:"extraData"        gencodec:"required"`
//一个哈希值,用Nonce组合用于计算工作量
MixDigest   common.Hash    `json:"mixHash"          gencodec:"required"`
//区块产生的随机值,每个用户必须单调步长为1递增 
Nonce       BlockNonce     `json:"nonce"            gencodec:"required"`
}
  • 区块结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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{}
}
  • 发布出去的区块数据
1
2
3
4
5
6
  //Block的前三项
type extblock struct{
Header *Header
Txs []*Transaction
Uncles []*Header
}

最后更新: 2019年03月28日 14:27

原始链接: http://yoursite.com/2019/03/23/以太坊中的重要概念及区块结构/