Kia mutu ai te mutunga ki te poraka, ehara i te mea he putunga raraunga anake, me tapiri e 3 nga waahanga nui ki ta maatau kaupapa:
- Whakaahuatanga o te hanganga raraunga poraka me nga tikanga
- Whakaahuatanga o te hanganga raraunga me nga tikanga tauwhitinga
- Ko nga mahi Poraka Poraka ka penapena poraka i roto i te papaa raraunga ka kitea ki reira ma o ratou hash, teitei ranei (he mea ke atu ranei).
Koinei te tuhinga tuarua mo te poraka mo te ahumahi, te tuatahi
Ma te mahara ki nga paatai i pataihia e nga kaipanui mo te tuhinga o mua o tenei raupapa, me tohu: i tenei keehi, ka whakamahia te papaarangi LevelDB ki te penapena i nga raraunga poraka, engari kaore he mea e aukati i a koe ki te whakamahi i tetahi atu, penei, MySQL. Inaianei me titiro ki te hanganga o enei raraunga.
Me timata ma nga tauwhitinga:
Anei tana hanganga raraunga:
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
}
Ka penapenahia e TX te momo raraunga (mo te tauwhitinga 2), te hash o taua tauwhitinga, te momo o te tauwhitinga ake, he tohu waahi, me nga whakaurunga me nga putanga. Ko nga whakaurunga TxIn e rongoa ana i te hash o te tauwhitinga kua tohutorohia tona putanga, te maha o tenei putanga me te bytecode, me nga putanga TxOut kei te penapena etahi uara me te bytecode hoki.
Inaianei kia kite tatou he aha nga mahi ka taea e te tauwhitinga te mahi i runga i ona raraunga, ara. Kia titiro tatou ki nga tikanga.
Hei hanga tauwhitinga, whakamahia te tauwhitinga.NewTransaction(txtype byte) *TX mahi.
Ko te AddTxIn(thattxhash []byte, txoutn int, code []byte) (*TxIn, hapa) ka taapirihia he whakauru ki te tauwhitinga.
Ko te aratuka AddTxOut(uara int, raraunga []paita) (*TxOut, hapa) ka taapiri i tetahi putanga ki te tauwhitinga.
Ko te tikanga ToPaita() []paita ka huri te tauwhitinga ki te poro paita.
Ko te mahi o roto preByteHash(paita []paita) aho e whakamahia ana i roto i te Hanga() me te Tiro() kia hototahi ai te hash tauwhitinga i hangaia me nga hashes tauwhitinga i hangaia mai i nga tono JavaScript.
Ko te tikanga Hanga() e whakatakoto ana i te hash tauwhitinga e whai ake nei: tx.TxHash = preByteHash(tx.ToBytes()).
Ko te tikanga aho ToJSON() ka huri i te tauwhitinga ki te aho JSON.
Ko te tikanga hapa FromJSON(raraunga []paita) ka utaina he tauwhitinga mai i te whakatakotoranga JSON i tukuna hei poro paita.
Ko te tikanga bool Taki() ka whakatairite i te hua o te hash mai i te mara hash tauwhitinga me te hash i riro mai na te hashing i tenei tauwhitinga (kaore e aro ki te mara hash).
Ka taapirihia nga whakawhitinga ki te poraka:
He puhoi ake te hanganga raraunga paraka:
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
}
RaraungaMomo te momo raraunga, ka whakamahia e te node me te wehewehe i te poraka mai i te tauwhitinga me etahi atu raraunga. Mo te poraka he 1 tenei uara.
Ko te BlockHeight te pupuri i te teitei o te poraka.
Waitohu Waima.
Ko te Rahi Pane te rahi paraka i roto i nga paita.
Ko PrevBlockHash te hash o te poraka o mua, a ko SelfBlockHash te hash o te waa o naianei.
Ko te TxsHash he hash whanui o nga whakawhitinga.
Ko MerkleRoot te putake o te rakau Merkle.
I tua atu i nga mara kei reira te kii whanui o te kaihanga o te poraka, te hainatanga o te kaihanga, te putanga o te poraka, te maha o nga whakawhitinga i roto i te poraka, me enei whakawhitinga ake.
Kia titiro tatou ki ona tikanga:
Hei hanga poraka, whakamahia te mahi poraka.NewBlock(): NewBlock(prevBlockHash string, height int) *Poraka, e tango ana i te hash o te poraka o mua me te huinga teitei mo te poraka i hangaia i roto i te poraka. Ko te momo paraka ka tautuhia mai i nga momo mokihi tonu:
b.DataType = types.BLOCK_TYPE.
Ko te tikanga AddTx(tx *transaction.TX) he taapiri i tetahi tauwhitinga ki tetahi poraka.
Ko te tikanga Hanga() ka utaina nga uara ki roto i nga mara o te poraka, ka whakaputa me te tautuhi i tana waahi o naianei.
Ko te tikanga ToBytesHeader() []paita ka huri i te pane paraka (kare he whakawhitinga) ki te poro paita.
Ko te tikanga aho ToJSON() ka huri i te poraka ki te whakatakotoranga JSON i roto i te tohu aho o te raraunga.
Ko te tikanga hapa FromJSON(raraunga []paita) ka utaina nga raraunga mai i JSON ki roto i te hanganga paraka.
Ko te tikanga bool Taki() ka whakaputa i te poraka Hash me te whakataurite ki te mea kua tohua i roto i te mara Hash poraka.
Ko te tikanga aho GetTxsHash() ka whakahoki i te katoa o nga korero i roto i te poraka.
Ko te tikanga GetMerkleRoot() e tohu ana i te putake o te rakau Merkle mo nga whakawhitinga i roto i te poraka.
Ko te tikanga Waitohu(privk string) ka haina i tetahi poraka me te ki motuhake o te kaihanga paraka.
Ko te tikanga SetHeight(height int) ka tuhi i te teitei o te poraka ki te mara hanganga paraka.
Ko te tikanga GetHeight() int ka whakahoki i te teitei o te poraka kua tohua ki te mara e rite ana ki te hanganga paraka.
Ko te tikanga ToGOBBytes() []paita he whakawaehere i tetahi paraka ki te whakatakotoranga GOB ka whakahoki ano hei poro paita.
Ko te tikanga hapa FromGOBBytes(raraunga []paita) ka tuhi raraunga paraka ki te hanganga paraka mai i te poro paita kua paahitia ki te whakatakotoranga GOB.
Ko te tikanga aho GetHash() ka whakahokia te hash o te poraka kua hoatu.
Ko te aratuka aho GetPrevHash() ka whakahoki i te hash o te poraka o mua.
Ko te tikanga SetPublicKey(whare pubk) ka tuhi i te taviri whanui o te kaihanga poraka ki te poraka.
Na, ma te whakamahi i nga tikanga o te ahanoa Poraka, ka taea e taatau te huri ki te whakatakotoranga mo te tuku i runga i te whatunga me te penapena ki te papaarangi LevelDB.
Ko nga mahi o te kete poraka he kawenga mo te penapena ki te poraka:
Hei mahi i tenei, me whakauru te poraka i te atanga IBlock:
type IGOBBytes interface {
ToGOBBytes() []byte
FromGOBBytes(data []byte) error
}
type IBlock interface {
IGOBBytes
GetHash() string
GetPrevHash() string
GetHeight() int
Check() bool
}
Ka waihangahia te hononga pātengi raraunga i te wa i arawhitia ai te kete i roto i te mahi init():
db, err = leveldb.OpenFile(BLOCKCHAIN_DB_DEBUG, nil).
Ko CloseDB() he takai mo db.Cloce() - ka karangahia i muri i te mahi me nga mahi a te kete ki te kati i te hononga ki te papaarangi.
Ko te mahi hapa SetTargetBlockHash(hash string) ka tuhi i te hash o te poraka o naianei me te taviri kua tohua e te BLOCK_HASH tonu ki te paataka raraunga.
Ko te mahi GetTargetBlockHash() (aho, hapa) ka whakahoki i te hash o te paraka o naianei kua rongoa ki te papaunga raraunga.
Ko te mahi hapa SetTargetBlockHeight(height int) ka tuhi ki te papaaarangi te uara o te teitei poraka mo te node me te taviri kua tohua e te BLOCK_HEIGHT tonu.
Ko te mahi GetTargetBlockHeight() (int, error) ka whakahoki i te teitei o te poraka mo te node kua tohua, ka rongoa i roto i te papanga raraunga.
Ko te mahi a CheckBlock(block IBlock) bool he tirotiro i tetahi poraka mo te tika i mua i te taapiri i tenei poraka ki te poraka.
Ko te mahi hapa AddBlock(block IBlock) he taapiri poraka ki te poraka.
Ko nga mahi mo te tiki me te tiro poraka kei roto i te konae explore.go o te kete poraka:
Ko te mahi GetBlockByHash(hash string) (*block.Block, error) ka hangaia he ahanoa paraka kau, ka utaina he paraka ki roto mai i te putunga raraunga, ka tukuna atu te hash ki a ia, ka whakahoki i te tohutoro ki reira.
Ko te hanganga o te poraka ira ka mahia e te Genesis() hapa mahi mai i te konae genesis.go o te kete poraka.
Ko te tuhinga e whai ake nei ka korero mo te hono i nga kaihoko ki tetahi node ma te whakamahi i te tikanga WebSocket.
Source: will.com