dir : core/types/block.go
새 block 인스턴스를 생성하고, header만을 복사해옴.
b := &Block{header : CopyHeader(header)}
block 인스턴스에 tx 관련 값들을 추가
// tx가 없는 경우 EmptyRootHash 추가
if len(txs) == 0 {
b.header.TxHash = EmptyRootHash
} else {
b.header.TxHash = DeriveSha(Transactions(txs), hasher)
b.transactions = make(Transactions, len(txs)
copy(b.transactions, txs)
}
Receipt, bloom 추가
if len(receipts) == 0 {
b.header.receipthash = EmptyRootHash
} else {
b.header.Receipthash = DeriveSha(Receipts(receipts), hasher)
b.header.Bloom = CreateBloom(receipts)
}
uncle 추가
// poa의 경우 uncle이 없으므로 항상 이리로 빠짐
if len(uncles) == 0 {
b.header.ReceiptHash = EmptyRootHash
} else {
b.header.UncleHash = CalcUncleHash(uncles)
b.uncles = make([]*Header, len(uncles)
for i := range uncles {
b.uncles[i] = CopyHeader(uncles[i])
}
}
생성된 block 반환
return b
clique.FinalizeAndAssemble()