เปเบเบเบตเปเบชเบธเบเปเบเบทเปเบญเบชเบดเปเบเบชเบธเบเบเปเบงเบ blockchain เปเบฅเบฐเบเปเปเบเบฝเบเปเบเปเบเบฒเบเบเปเปเบกเบนเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบก 3 เบญเบปเบเบเบฐเบเบญเบเบเบตเปเบชเปเบฒเบเบฑเบเปเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
- เบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบฅเบฑเบญเบเปเบฅเบฐเบงเบดเบเบตเบเบฒเบ
- เบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบ เปเบฅเบฐเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ
- เบเบฑเบเบเบฑเบ Blockchain เบเบตเปเบเปเบงเบเบเบฐเบขเบฑเบเบเบฑเบเปเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเบเบญเบเบซเบฒเบเบงเบเบกเบฑเบเบขเบนเปเบเบตเปเบเบฑเปเบเบเปเบงเบ hash เบซเบผเบทเบเบงเบฒเบกเบชเบนเบเบเบญเบเบเบงเบเปเบเบปเบฒ (เบซเบผเบทเบชเบดเปเบเบญเบทเปเบ).
เบเบตเปเปเบกเปเบเบเบปเบเบเบงเบฒเบกเบเบตเบชเบญเบเบเปเบฝเบงเบเบฑเบ blockchain เบชเปเบฒเบฅเบฑเบเบญเบธเบเบชเบฒเบซเบฐเบเปเบฒ, เบเปเบฒเบญเบดเบ
เบเบทเปเบเปเบฒเบเปเบฒเบเบฒเบกเบเบตเปเบเบนเปเบญเปเบฒเบเบเบฒเบกเบเปเบญเบเบเปเบฝเบงเบเบฑเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบกเบฒเปเบเบเบธเบเบเบตเป, เบเบงเบเบชเบฑเบเปเบเบเบงเปเบฒ: เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบฒเบเบเปเปเบกเบนเบ LevelDB เบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเปเบเบฑเบเบเปเปเบกเบนเบ blockchain, เปเบเปเบเปเปเบกเบตเบซเบเบฑเบเบเปเบญเบเบเบฑเบเบเปเบฒเบเบเบฒเบเบเบฒเบเบเปเบฒเปเบเปเบญเบทเปเบเป, เปเบงเบปเปเบฒ, MySQL. เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเปเบเบเบชเปเบฒเบเบเบญเบเบเปเปเบกเบนเบเบเบตเป.
เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบธเบฅเบฐเบเปเบฒ:
เบเบตเปเปเบกเปเบเปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบญเบเบกเบฑเบ:
type TX struct {
DataType byte
TxHash string
TxType byte
Timestamp int64
INs []TxIn
OUTs []TxOut
}
type TxIn struct {
ThatTxHash string
TxOutN int
ByteCode string
}
type TxOut struct {
Value int
ByteCode string
}
TX เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฐเปเบเบเบเปเปเบกเบนเบ (เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ 2), hash เบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเปเบ, เบเบฐเปเบเบเบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบปเบงเบกเบฑเบเปเบญเบ, timestamp, เปเบฅเบฐ inputs เปเบฅเบฐ outputs. เบงเบฑเบเบชเบฐเบเบธเบเปเบญเบ TxIn เปเบเบฑเบเบฎเบฑเบเบชเบฒ hash เบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบตเปเบเบปเบเบเบฐเบฅเบดเบเปเบเปเบเบทเบเบญเปเบฒเบเบญเบตเบ, เบเปเบฒเบเบงเบเบเบญเบเบเบปเบเบเบฐเบฅเบดเบเบเบตเปเปเบฅเบฐ bytecode, เปเบฅเบฐเบเบปเบเบเบฐเบฅเบดเบ TxOut เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฒเบเบกเบนเบเบเปเบฒเปเบฅเบฐ bytecode.
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบงเปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเปเบกเบนเบเบเบญเบเบกเบฑเบเปเบเป, i.e. เปเบซเปเปเบเบดเปเบเบงเบดเบเบตเบเบฒเบ.
เปเบเบทเปเบญเบชเปเบฒเบเบเบธเบฅเบฐเบเปเบฒ, เปเบซเปเปเบเปเบเบฑเบเบเบฑเบ transaction.NewTransaction(txtype byte) *TX.
AddTxIn(thattxhash []byte, txoutn int, code []byte) (*TxIn, error) เบงเบดเบเบตเบเบฒเบเปเบเบตเปเบกเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ.
เบงเบดเบเบตเบเบฒเบ AddTxOut(value int, data []byte) (*TxOut, error) เบเบฐเปเบเบตเปเบกเบเบปเบเบเบฐเบฅเบดเบเปเบซเปเบเบฑเบเบเบธเบฅเบฐเบเปเบฒ.
เบงเบดเบเบตเบเบฒเบ ToBytes() []byte เบเบฐเบเปเบฝเบเบเบธเบฅเบฐเบเปเบฒเปเบซเปเปเบเบฑเบ byte slice.
เบเบฑเบเบเบฑเบเบเบฒเบเปเบ preByteHash(bytes []byte) string เบเบทเบเบเปเบฒเปเบเปเปเบ Build() เปเบฅเบฐ Check() เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเป hash เบเบธเบฅเบฐเบเปเบฒเบเบตเปเบเบฐเบฅเบดเบเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ hashes เบเบตเปเบชเปเบฒเบเบเบถเปเบเบเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ JavaScript.
เบงเบดเบเบตเบเบฒเบ Build() เบเปเบฒเบเบปเบ hash เบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเปเบเบเปเปเปเบเบเบตเป: tx.TxHash = preByteHash(tx.ToBytes()).
เบงเบดเบเบตเบเบฒเบเบชเบฐเบเบฃเบดเบ ToJSON() เบเปเบฝเบเบเบธเบฅเบฐเบเบณเปเบเบฑเบเบชเบฐเบเบฃเบดเบ JSON.
เบงเบดเบเบตเบเบฒเบเบเบดเบเบเบฒเบ FromJSON(data []byte) เปเบซเบผเบเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเบฎเบนเบเปเบเบ JSON เบเปเบฒเบเปเบเบฑเบ byte slice.
เบงเบดเบเบตเบเบฒเบ Check() bool เบเบฝเบเบเบฝเบ hash เบเบปเบเปเบเปเบฎเบฑเบเบเบฒเบเบเปเบญเบ hash เบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเบ hash เบเบตเปเปเบเปเบฎเบฑเบเบเบปเบเบกเบฒเบเบฒเบเบเบฒเบ hashing เบเบธเบฅเบฐเบเปเบฒเบเบตเป (เบเปเปเบชเบปเบเปเบเบเปเบญเบ hash).
เบเบธเบฅเบฐเบเปเบฒเบเบทเบเปเบเบตเปเบกเปเบชเปเบเบฅเบฑเบญเบ:
เปเบเบเบชเปเบฒเบเบเปเปเบกเบนเบเบเบญเบเบเบฅเบฑเบญเบเปเบกเปเบเบกเบตเบเบงเบฒเบกเบชเบฐเบซเบงเปเบฒเบเบซเบผเบฒเบ:
type Block struct {
DataType byte
BlockHeight int
Timestamp int64
HeaderSize int
PrevBlockHash string
SelfBlockHash string
TxsHash string
MerkleRoot string
CreatorPublicKey string
CreatorSig string
Version int
TxsN int
Txs []transaction.TX
}
DataType เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฐเปเบเบเบเปเปเบกเบนเบ, node เปเบเปเบกเบฑเบเปเบฅเบฐเบเปเบฒเปเบเบเบเบฑเบเบเบฒเบเบเบธเบฅเบฐเบเปเบฒเบซเบผเบทเบเปเปเบกเบนเบเบญเบทเปเบเป. เบชเปเบฒเบฅเบฑเบ block เบเปเบฒเบเบตเปเปเบกเปเบ 1.
BlockHeight เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเบชเบนเบเบเบญเบเบเบฑเบ.
เบชเบฐเปเบเบกเปเบงเบฅเบฒ.
HeaderSize เปเบกเปเบเบเบฐเบซเบเบฒเบเบเบญเบเบเบฑเบเปเบ bytes.
PrevBlockHash เปเบกเปเบ hash เบเบญเบเบเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒ, เปเบฅเบฐ SelfBlockHash เปเบกเปเบ hash เบเบญเบเบเบฐเบเบธเบเบฑเบ.
TxsHash เปเบเบฑเบ hash เบเบปเปเบงเปเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ.
MerkleRoot เปเบกเปเบเบฎเบฒเบเบเบญเบเบเบปเปเบเปเบกเป Merkle.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบเบปเบเปเบเบเบกเบตเบฅเบฐเบซเบฑเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบญเบเบเบนเปเบชเปเบฒเบเบเบฅเบฑเบญเบ, เบฅเบฒเบเปเบเบฑเบเบเบญเบเบเบนเปเบชเปเบฒเบ, เบชเบฐเบเบฑเบเบเบญเบเบเบฅเบฑเบญเบ, เบเปเบฒเบเบงเบเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบเบเบฅเบฑเบญเบ, เปเบฅเบฐเบเบธเบฅเบฐเบเปเบฒเปเบซเบผเบปเปเบฒเบเบตเปเปเบญเบ.
เปเบซเปโเปเบเบดเปเบโเบงเบดโเบเบตโเบเบฒเบโเบเบญเบโเบเบปเบโ:
เปเบเบทเปเบญเบชเปเบฒเบเบเบฅเบฑเบญเบ, เปเบซเปเปเบเปเบเบฑเบเบเบฑเบ block.NewBlock(): NewBlock(prevBlockHash string, height int) *Block, เปเบเบดเปเบเปเบเป hash เบเบญเบเบเบฅเบฑเบญเบเบเปเบญเบเปเปเบฒ เปเบฅเบฐเบฅเบฐเบเบฑเบเบเบงเบฒเบกเบชเบนเบเบเบตเปเบเบณเบเบปเบเปเบงเปเบชเบณเบฅเบฑเบเบเบฅเบฑเบญเบเบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบ blockchain. เบเบฐเปเบเบเบเบฅเบฑเบญเบเบเบฑเบเบเบทเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบฐเปเบเบเบเบญเบเบเบธเบเบเบปเบเบเบตเป:
b.DataType = types.BLOCK_TYPE.
เบงเบดเบเบตเบเบฒเบ AddTx(tx *transaction.TX) เปเบเบตเปเบกเบเบธเบฅเบฐเบเปเบฒเปเบชเปเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ Build() เปเบซเบผเบเบเปเบฒเปเบเบปเปเบฒเปเบเปเบเบเปเบญเบเบเปเปเบกเบนเบเบเบญเบเบเบฅเบฑเบญเบเปเบฅเบฐเบชเปเบฒเบเปเบฅเบฐเบเปเบฒเบเบปเบ hash เบเบฐเบเบธเบเบฑเบเบเบญเบเบกเบฑเบ.
เบงเบดเบเบตเบเบฒเบ ToBytesHeader() []byte เบเบฐเบเปเบฝเบเบชเปเบงเบเบซเบปเบงเบเบญเบเบเบฅเบฑเบญเบ (เปเบเบเบเปเปเบกเบตเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒ) เปเบเบปเปเบฒเปเบเปเบเปเบเบ byte.
เบงเบดเบเบตเบเบฒเบเบชเบฐเบเบฃเบดเบ ToJSON() เบเปเบฝเบเบเบฅเบฑเบญเบเปเบเบฑเบเบฎเบนเบเปเบเบ JSON เปเบเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเปเปเบกเบนเบ.
เบงเบดเบเบตเบเบฒเบเบเบดเบเบเบฒเบ FromJSON(data []byte) เปเบซเบผเบเบเปเปเบกเบนเบเบเบฒเบ JSON เปเบเบปเปเบฒเปเบเปเบเปเบเบเบชเปเบฒเบเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ Check() bool เบชเปเบฒเบ block hash เปเบฅเบฐเบเบฝเบเบเบฝเบเบกเบฑเบเบเบฑเบเบซเบเบถเปเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเปเบญเบ block hash.
เบงเบดเบเบตเบเบฒเบเบชเบฐเบเบฃเบดเบ GetTxsHash() เบเบฑเบเบเบทเบ hash เบเบฑเบเบซเบกเบปเบเบเบญเบเบเบธเบฅเบฐเบเปเบฒเบเบฑเบเบซเบกเบปเบเปเบเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ GetMerkleRoot() เบเปเบฒเบเบปเบเบฎเบฒเบเบเบญเบเบเบปเปเบเปเบกเป Merkle เบชเปเบฒเบฅเบฑเบเบเบธเบฅเบฐเบเปเบฒเปเบเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ Sign(privk string) เปเบเบฑเบเบเบฅเบฑเบญเบเบเปเบงเบเบเบฐเปเบเบชเปเบงเบเบเบปเบงเบเบญเบเบเบนเปเบชเปเบฒเบเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ SetHeight(height int) เบเบฐเบเบฝเบเบเบงเบฒเบกเบชเบนเบเบเบญเบเบเบผเบฑเบญเบเปเบชเปเบเบฒเบเบชเบฐเบซเบเบฒเบกเปเบเบเบชเปเบฒเบเบเบญเบเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ GetHeight() int เบชเบปเปเบเบเบทเบเบเบงเบฒเบกเบชเบนเบเบเบญเบเบเบฅเบฑเบญเบเบเบฒเบกเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเบเบญเบเปเบเบเบชเปเบฒเบเบเบฅเบฑเบญเบ.
เบงเบดเบเบตเบเบฒเบ ToGOBBytes() []byte เบเบฐเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเบฅเบฑเบญเบเปเบเบฎเบนเบเปเบเบ GOB เปเบฅเบฐเบชเบปเปเบเบเบทเบเบกเบฑเบเปเบเบฑเบ byte slice.
เบงเบดเบเบตเบเบฒเบเบเบดเบเบเบฒเบ FromGOBBytes(data []byte) เบเบฝเบเบเปเปเบกเบนเบเบเบฅเบฑเบญเบเปเบเบซเบฒเปเบเบเบชเปเบฒเบเบเบฅเบฑเบญเบเบเบฒเบเปเบเบ byte เบเปเบฒเบเปเบเบฎเบนเบเปเบเบ GOB.
เบงเบดเบเบตเบเบฒเบเบชเบฐเบเบฃเบดเบ GetHash() เบเบฑเบเบเบทเบ hash เบเบญเบเบเบฅเบฑเบญเบเบเบตเปเปเบซเป.
เบงเบดเบเบตเบเบฒเบเบชเบฐเบเบฃเบดเบ GetPrevHash() เบเบฑเบเบเบทเบ hash เบเบญเบเบเบฅเบฑเบญเบเบเบตเปเบเปเบฒเบเบกเบฒ.
เบงเบดเบเบตเบเบฒเบ SetPublicKey(pubk string) เบเบฝเบเบฅเบฐเบซเบฑเบเบชเบฒเบเบฒเบฅเบฐเบเบฐเบเบญเบเบเบนเปเบชเปเบฒเบเบเบฅเบฑเบญเบเปเบชเปเบเบฅเบฑเบญเบ.
เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบเปเบฒเปเบเปเบงเบดเบเบตเบเบฒเบเบเบญเบ Block object, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเปเบฝเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเบฎเบนเบเปเบเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเปเบฒเบเปเบเบทเบญเบเปเบฒเบเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบเปเบฅเบฐเบเบฐเบซเบเบฑเบเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ LevelDB.
เบซเบเปเบฒเบเบตเปเบเบญเบเบเบธเบ blockchain เปเบกเปเบเบฎเบฑเบเบเบดเบเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบซเบเบฑเบเบเบฑเบ blockchain:
เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเบฑเบเบเปเบญเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเปเบเบญเบ IBlock:
type IGOBBytes interface {
ToGOBBytes() []byte
FromGOBBytes(data []byte) error
}
type IBlock interface {
IGOBBytes
GetHash() string
GetPrevHash() string
GetHeight() int
Check() bool
}
เบเบฒเบโเปเบเบทเปเบญเบกโเบเปเปโเบเบฒเบโเบเปเปโเบกเบนเบโเปเบกเปเบโเปเบเปโเบเบทเบโเบชเปเบฒเบโเบเบถเปเบโเบเบฑเปเบโเบเบฝเบงโเปเบโเปเบงโเบฅเบฒโเบเบตเปโเบเบธเบโเปเบกเปเบโเปเบเปโเปเบฅเบตเปเบกโเบเบปเปเบโเปเบโเบเบฒเบโเบเปเบฒโเบเบฒเบ init()โ:
db, err = leveldb.OpenFile(BLOCKCHAIN_DB_DEBUG, nil).
CloseDB() เปเบกเปเบ wrapper เบชเปเบฒเบฅเบฑเบ db.Cloce() - เปเบญเบตเปเบเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบซเบเปเบฒเบเบตเปเบซเบธเปเบกเบซเปเปเปเบเบทเปเบญเบเบดเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ.
เบเบฑเบเบเบฑเบเบเปเปเบเบดเบเบเบฒเบ SetTargetBlockHash(hash string) เบเบฝเบ hash เบเบญเบเบเบฅเบฑเบญเบเบเบฑเบเบเบธเบเบฑเบเบเปเบงเบเบฅเบฐเบซเบฑเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบ BLOCK_HASH เบเบปเบเบเบตเปเปเบชเปเบเบฒเบเบเปเปเบกเบนเบ.
เบเบฑเบเบเบฑเบ GetTargetBlockHash() (string, error) เบเบฑเบเบเบทเบ hash เบเบญเบเบเบฅเบฑเบญเบเบเบฑเบเบเบธเบเบฑเบเบเบตเปเปเบเบฑเบเปเบงเปเปเบเบเบฒเบเบเปเปเบกเบนเบ.
เบเบฑเบเบเบฑเบเบเปเปเบเบดเบเบเบฒเบ SetTargetBlockHeight(height int) เบเบฝเบเปเบชเปเบเบฒเบเบเปเปเบกเบนเบเบเปเบฒเบเบญเบเบเบงเบฒเบกเบชเบนเบเบเบญเบ blockchain เบชเปเบฒเบฅเบฑเบ node เบเบตเปเบกเบตเบฅเบฐเบซเบฑเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบ BLOCK_HEIGHT เบเบปเบเบเบตเป.
เบเบฑเบเบเบฑเบ GetTargetBlockHeight() (int, error) เบชเบปเปเบเบเบทเบเบเบงเบฒเบกเบชเบนเบเบเบญเบ blockchain เบชเปเบฒเบฅเบฑเบ node เบเบตเปเปเบซเป, เปเบเบฑเบเปเบงเปเปเบเบเบฒเบเบเปเปเบกเบนเบ.
เบเบฑเบเบเบฑเบ CheckBlock(block IBlock) bool เบเบงเบเปเบเบดเปเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเปเบญเบเบเบตเปเบเบฐเปเบเบตเปเบกเบเบฅเบฑเบญเบเบเบตเปเปเบชเป blockchain.
เบเบฑเบเบเบฑเบเบเปเปเบเบดเบเบเบฒเบ AddBlock(block IBlock) เปเบเบตเปเบกเบเบฑเบเปเบซเปเบเบฑเบ blockchain.
เบซเบเปเบฒเบเบตเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบถเบเปเบฅเบฐเปเบเบดเปเบ blocks เปเบกเปเบเบขเบนเปเปเบเปเบเบฅเป explore.go เบเบญเบเบเบธเบ blockchain:
เบเบฑเบเบเบฑเบ GetBlockByHash(hash string) (*block.Block, error) เบชเปเบฒเบ object block เบซเบงเปเบฒเบเปเบเบปเปเบฒ, เปเบซเบผเบ block เปเบเบปเปเบฒเปเบเปเบเบกเบฑเบเบเบฒเบเบเบฒเบเบเปเปเบกเบนเบ, hash เบเบญเบเบเบตเปเบชเบปเปเบเปเบเปเบซเปเบกเบฑเบ, เปเบฅเบฐเบชเบปเปเบ pointer เบเบฑเบเบกเบฑเบ.
เบเบฒเบเบชเปเบฒเบ genesis block เปเบกเปเบเบเปเบฒเปเบเบตเบเปเบเบ Genesis () เบซเบเปเบฒเบเบตเปเบเบดเบเบเบฒเบเบเบฒเบเปเบเบฅเป genesis.go เบเบญเบเบเบธเบ blockchain.
เบเบปเบเบเบงเบฒเบกเบเปเปเปเบเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบฅเบนเบเบเปเบฒเบเบฑเบ node เปเบเบเปเบเปเบเบปเบเปเบ WebSocket.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com