Me pehea taku hoahoa poraka me nga whakawhitinga i roto i taku Go blockchain

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).

Me pehea taku hoahoa poraka me nga whakawhitinga i roto i taku Go blockchain

Koinei te tuhinga tuarua mo te poraka mo te ahumahi, te tuatahi konei.

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: github.com/Rusldv/bcstartup/blob/master/transaction/builder.go

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: github.com/Rusldv/bcstartup/blob/master/block/builder.go

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: github.com/Rusldv/bcstartup/tree/master/blockchain

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

Tāpiri i te kōrero