рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЧреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдмреНрд▓реЙрдХ рдФрд░ рд▓реЗрдирджреЗрди рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП

рдЕрдВрддрддрдГ рдХреЗрд╡рд▓ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдмреНрд▓реЙрдХрдЪреЗрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ 3 рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗ:

  • рдмреНрд▓реЙрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг
  • рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд▓реЗрдирджреЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг
  • рдмреНрд▓реЙрдХрдЪреЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛ рдмреНрд▓реЙрдХ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреЗ рд╣реИрд╢ рдпрд╛ рдКрдВрдЪрд╛рдИ (рдпрд╛ рдХреБрдЫ рдФрд░) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╣рд╛рдВ рдвреВрдВрдврддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЧреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдмреНрд▓реЙрдХ рдФрд░ рд▓реЗрдирджреЗрди рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП

рдЙрджреНрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИ, рдкрд╣рд▓рд╛ рдпрд╣рд╛рдВ.

рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╛рдардХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореБрдЭрд╕реЗ рдкреВрдЫреЗ рдЧрдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЗрд╡рд▓рдбреАрдмреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд▓реЙрдХрдЪреЗрди рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MySQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЕрдм рдЗрд╕ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦреЗрдВред

рдЖрдЗрдП рд▓реЗрди-рджреЗрди рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: github.com/Rusldv/bcstartup/blob/master/transaction/builder.go

рдпрд╣рд╛рдБ рдЗрд╕рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

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 рдХреЗ рд▓рд┐рдП), рдЙрд╕ рд▓реЗрди-рджреЗрди рдХрд╛ рд╣реИрд╢, рд▓реЗрди-рджреЗрди рдХрд╛ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдФрд░ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред TxIn рдЗрдирдкреБрдЯ рдЙрд╕ рд▓реЗрди-рджреЗрди рдХреЗ рд╣реИрд╢ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ, рдЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдмрд╛рдЗрдЯрдХреЛрдб, рдФрд░ TxOut рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдорд╛рди рдФрд░ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдИ рд▓реЗрдирджреЗрди рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдкрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЖрдЗрдП рддрд░реАрдХреЛрдВ рдкрд░ рдирдЬрд░ рдбрд╛рд▓реЗрдВ.

рд▓реЗрди-рджреЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, transaction.NewTransaction(txtype byte) *TX рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

AddTxIn(thattxhash []byte, txoutn int, Code []byte) (*TxIn, error) рд╡рд┐рдзрд┐ рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ рдЗрдирдкреБрдЯ рдЬреЛрдбрд╝рддреА рд╣реИред

AddTxOut(value int, data []byte) (*TxOut, error) рд╡рд┐рдзрд┐ рд▓реЗрдирджреЗрди рдореЗрдВ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбрд╝рддреА рд╣реИред

ToBytes() []рдмрд╛рдЗрдЯ рд╡рд┐рдзрд┐ рд▓реЗрдирджреЗрди рдХреЛ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИред

рдЙрддреНрдкрдиреНрди рд▓реЗрдирджреЗрди рд╣реИрд╢ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд▓реЗрдирджреЗрди рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб() рдФрд░ рдЪреЗрдХ() рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реАрдмрд╛рдЗрдЯрд╣реИрд╢ (рдмрд╛рдЗрдЯреНрд╕ []рдмрд╛рдЗрдЯ) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмрд┐рд▓реНрдб() рд╡рд┐рдзрд┐ рд▓реЗрдирджреЗрди рд╣реИрд╢ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд░рддреА рд╣реИ: tx.TxHash = preByteHash(tx.ToBytes())ред

ToJSON() рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рд▓реЗрдирджреЗрди рдХреЛ JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред

FromJSON(рдбреЗрдЯрд╛ []рдмрд╛рдЗрдЯ) рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд JSON рдкреНрд░рд╛рд░реВрдк рд╕реЗ рд▓реЗрдирджреЗрди рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИред

рдЪреЗрдХ() рдмреВрд▓ рд╡рд┐рдзрд┐ рд▓реЗрдирджреЗрди рд╣реИрд╢ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рд╣реИрд╢ рдХреА рддреБрд▓рдирд╛ рдЗрд╕ рд▓реЗрдирджреЗрди рдХреЛ рд╣реИрд╢ рдХрд░рдиреЗ (рд╣реИрд╢ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ) рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдХрд░рддреА рд╣реИред

рд▓реЗрди-рджреЗрди рдмреНрд▓реЙрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ: github.com/Rusldv/bcstartup/blob/master/block/builder.go

рдмреНрд▓реЙрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд╛рд▓ рд╣реИ:

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
}

рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдиреЛрдб рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреНрд▓реЙрдХ рдХреЛ рд▓реЗрдирджреЗрди рдпрд╛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╛рди 1 рд╣реИред

рдмреНрд▓реЙрдХрд╣рд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк.
рд╣реЗрдбрд░ рд╕рд╛рдЗрдЬрд╝ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рд╣реИред
PrevBlockHash рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рд╣реИ, рдФрд░ SelfBlockHash рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рд╣реИред
TxsHash рд▓реЗрдирджреЗрди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрд╢ рд╣реИред
рдорд░реНрдХрд▓реЗрд░реВрдЯ рдорд░реНрдХрд▓ рд╡реГрдХреНрд╖ рдХреА рдЬрдбрд╝ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА, рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рдмреНрд▓реЙрдХ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг, рдмреНрд▓реЙрдХ рдореЗрдВ рд▓реЗрдирджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдпреЗ рд▓реЗрдирджреЗрди рд╕реНрд╡рдпрдВ рд╣реИрдВред

рдЖрдЗрдП рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдирдЬрд░ рдбрд╛рд▓реЗрдВ:
рдПрдХ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХ.рдиреНрдпреВрдмреНрд▓реЙрдХ() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдиреНрдпреВрдмреНрд▓реЙрдХ(prevBlockHash рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдКрдВрдЪрд╛рдИ int) *рдмреНрд▓реЙрдХ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рдФрд░ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдКрдВрдЪрд╛рдИ рд▓реЗрддрд╛ рд╣реИред рдмреНрд▓реЙрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рдХрд╛рд░ рдкреИрдХреЗрдЬ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

b.DataType = types.BLOCK_TYPE.

AddTx(tx *transaction.TX) рд╡рд┐рдзрд┐ рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓реЗрдирджреЗрди рдЬреЛрдбрд╝рддреА рд╣реИред

рдмрд┐рд▓реНрдб() рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рдХреЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди рд▓реЛрдб рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдФрд░ рд╕реЗрдЯ рдХрд░рддреА рд╣реИред

ToBytesHeader() []рдмрд╛рдЗрдЯ рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рд╣реЗрдбрд░ (рд▓реЗрди-рджреЗрди рдХреЗ рдмрд┐рдирд╛) рдХреЛ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред

ToJSON() рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдбреЗрдЯрд╛ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред

FromJSON(рдбреЗрдЯрд╛ []рдмрд╛рдЗрдЯ) рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐ JSON рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдмреНрд▓реЙрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд▓реЛрдб рдХрд░рддреА рд╣реИред

рдЪреЗрдХ() рдмреВрд▓ рд╡рд┐рдзрд┐ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдмреНрд▓реЙрдХ рд╣реИрд╢ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рд╕реЗ рдХрд░рддреА рд╣реИред

GetTxsHash() рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕рднреА рд▓реЗрдирджреЗрди рдХрд╛ рдХреБрд▓ рд╣реИрд╢ рд▓реМрдЯрд╛рддреА рд╣реИред

GetMerkleRoot() рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рдмреНрд▓реЙрдХ рдореЗрдВ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдорд░реНрдХрд▓ рдЯреНрд░реА рдХреА рдЬрдбрд╝ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИред

рд╕рд╛рдЗрди (рдкреНрд░рд╛рдЗрд╡реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреА рд╣реИред

SetHeight(height int) рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рдмреНрд▓реЙрдХ рд╕рдВрд░рдЪрдирд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрддреА рд╣реИред

GetHeight() int рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмреНрд▓реЙрдХ рдХреА рдКрдВрдЪрд╛рдИ рд▓реМрдЯрд╛рддреА рд╣реИред

ToGOBBytes() []рдмрд╛рдЗрдЯ рд╡рд┐рдзрд┐ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ GOB рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИред

FromGOBBytes(data []byte) рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐ GOB рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рдмреНрд▓реЙрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмреНрд▓реЙрдХ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреА рд╣реИред

GetHash() рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рджрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рд▓реМрдЯрд╛рддреА рд╣реИред

GetPrevHash() рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рд▓реМрдЯрд╛рддреА рд╣реИред

SetPublicKey(pubk string) рд╡рд┐рдзрд┐ рдмреНрд▓реЙрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рд┐рдЦрддреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмреНрд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдФрд░ рд▓реЗрд╡рд▓рдбреАрдмреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмреНрд▓реЙрдХрдЪреЗрди рдкреИрдХреЗрдЬ рдХреЗ рдХрд╛рд░реНрдп рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдмрдЪрдд рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ: github.com/Rusldv/bcstartup/tree/master/рдмреНрд▓реЙрдХрдЪреЗрди

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХ рдХреЛ 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() db.Cloce() рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рд╣реИ - рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

SetTargetBlockHash(рд╣реИрд╢ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рддреНрд░реБрдЯрд┐ рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ BLOCK_HASH рд╕реНрдерд┐рд░рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХреЗ рд╣реИрд╢ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред

GetTargetBlockHash() (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рддреНрд░реБрдЯрд┐) рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХрд╛ рд╣реИрд╢ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

SetTargetBlockHeight(height int) рддреНрд░реБрдЯрд┐ рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ BLOCK_HEIGHT рд╕реНрдерд┐рд░рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдиреЛрдб рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХрдЪреЗрди рдКрдВрдЪрд╛рдИ рдХрд╛ рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИред

GetTargetBlockHeight() (int, error) рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдиреЛрдб рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХрдЪреЗрди рдХреА рдКрдВрдЪрд╛рдИ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЪреЗрдХрдмреНрд▓реЙрдХ (рдмреНрд▓реЙрдХ рдЖрдИрдмреНрд▓реЙрдХ) рдмреВрд▓ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

AddBlock(рдмреНрд▓реЙрдХ IBlock) рддреНрд░реБрдЯрд┐ рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХрдЪреЗрди рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдмреНрд▓реЙрдХ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдмреНрд▓реЙрдХрдЪреЗрди рдкреИрдХреЗрдЬ рдХреА explore.go рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВ:

GetBlockByHash(рд╣реИрд╢ рд╕реНрдЯреНрд░рд┐рдВрдЧ) (*рдмреНрд▓реЙрдХ.рдмреНрд▓реЙрдХ, рдПрд░рд░) рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЦрд╛рд▓реА рдмреНрд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЗрд╕рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╣реИрд╢ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЬреЗрдиреЗрд╕рд┐рд╕ рдмреНрд▓реЙрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдмреНрд▓реЙрдХрдЪреЗрди рдкреИрдХреЗрдЬ рдХреА рдЬреЗрдиреЗрд╕рд┐рд╕.рдЧреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЬреЗрдиреЗрд╕рд┐рд╕() рддреНрд░реБрдЯрд┐ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛ рд▓реЗрдЦ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдиреЛрдб рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдЧрд╛ред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ