рдореИрд▓реЗ рдореЗрд░реЛ рдЧреЛ рдмреНрд▓рдХрдЪреЗрдирдорд╛ рдмреНрд▓рдХрд╣рд░реВ рд░ рд▓реЗрдирджреЗрдирд╣рд░реВ рдХрд╕рд░реА рдбрд┐рдЬрд╛рдЗрди рдЧрд░реЗрдВ

рдЕрдиреНрддрддрдГ рдмреНрд▓рдХрдЪреЗрдирдХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдЧрд░реНрди рд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛ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 рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВрд▓реЗ рдХреЗрд╣реА рдореВрд▓реНрдп рд░ рдмрд╛рдЗрдЯрдХреЛрдб рдкрдирд┐ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджрдЫред

рдЕрдм рд╣реЗрд░реМрдВ рдХрд┐ рд▓реЗрдирджреЗрдирд▓реЗ рдпрд╕рдХреЛ рдбреЗрдЯрд╛рдорд╛ рдХреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реНрди рд╕рдХреНрдЫ, рдЕрд░реНрдерд╛рддреНред рд╡рд┐рдзрд┐рд╣рд░реВ рд╣реЗрд░реМрдВред

рд▓реЗрдирджреЗрди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рд▓реЗрдирджреЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНредNewTransaction(txtype byte) *TX рдкреНрд░рдХрд╛рд░реНрдпред

AddTxIn(thattxhash []byte, txoutn int, code []byte) (*TxIn, рддреНрд░реБрдЯрд┐) рд╡рд┐рдзрд┐ рд▓реЗ рд▓реЗрдирджреЗрдирдорд╛ рдЗрдирдкреБрдЯ рдердкреНрдЫред

AddTxOut(value int, data []byte) (*TxOut, рддреНрд░реБрдЯрд┐) рд╡рд┐рдзрд┐ рд▓реЗ рд▓реЗрдирджреЗрдирдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдердкреНрдЫред

ToBytes() []рдмрд╛рдЗрдЯ рд╡рд┐рдзрд┐рд▓реЗ рд▓реЗрдирджреЗрдирд▓рд╛рдИ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕рдорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрдЫред

рдЖрдиреНрддрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реНрдп preByteHash(рдмрд╛рдЗрдЯ []рдмрд╛рдЗрдЯ) рд╕реНрдЯреНрд░рд┐рдЩрд▓рд╛рдИ Build() рд░ Check() рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд╣рд░реВрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рд▓реЗрдирджреЗрди рд╣реНрдпрд╛рд╕рд╕рдБрдЧ рдорд┐рд▓реНрджреЛ рд▓реЗрдирджреЗрди рд╣реНрдпрд╛рд╕ рдмрдирд╛рдЙрдиред

Build() рд╡рд┐рдзрд┐ рд▓реЗ рд▓реЗрдирджреЗрди рд╣реНрдпрд╛рд╕рд▓рд╛рдИ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдЧрд░реНрджрдЫ: 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
}

DataType рд▓реЗ рдбрд╛рдЯрд╛ рдкреНрд░рдХрд╛рд░ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫ, рдиреЛрдбрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рд░ рдмреНрд▓рдХрд▓рд╛рдИ рд▓реЗрдирджреЗрди рд╡рд╛ рдЕрдиреНрдп рдбрд╛рдЯрд╛рдмрд╛рдЯ рдЫреБрдЯреНрдпрд╛рдЙрдЫред рдмреНрд▓рдХрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдорд╛рди 1 рд╣реЛред

BlockHeight рд▓реЗ рдмреНрд▓рдХрдХреЛ рдЙрдЪрд╛рдЗ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдЫред
рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдкред
HeaderSize рдмрд╛рдЗрдЯ рдорд╛ рдмреНрд▓рдХ рдЖрдХрд╛рд░ рд╣реЛред
PrevBlockHash рдЕрдШрд┐рд▓реНрд▓реЛ рдмреНрд▓рдХрдХреЛ рд╣реНрдпрд╛рд╕ рд╣реЛ, рд░ SelfBlockHash рд╣рд╛рд▓рдХреЛ рд╣реНрдпрд╛рд╕ рд╣реЛред
TxsHash рд▓реЗрдирджреЗрдирдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╣реНрдпрд╛рд╕ рд╣реЛред
MerkleRoot Merkle рд░реВрдЦ рдХреЛ рдЬрд░рд╛ рд╣реЛред

рдердк рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдорд╛ рдмреНрд▓рдХрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛рдХрд░реНрддрд╛рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдЮреНрдЬреА, рд╕рд┐рд░реНрдЬрдирд╛рдХрд░реНрддрд╛рдХреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рдмреНрд▓рдХрдХреЛ рд╕рдВрд╕реНрдХрд░рдг, рдмреНрд▓рдХрдорд╛ рдХрд╛рд░реЛрдмрд╛рд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛, рд░ рдпреА рд▓реЗрдирджреЗрдирд╣рд░реВ рдЖрдлреИрдВ рдЫрдиреНред

рдпрд╕рдХреЛ рд╡рд┐рдзрд┐рд╣рд░реВ рд╣реЗрд░реМрдВ:
рдмреНрд▓рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, block.NewBlock() рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН: NewBlock(prevBlockHash string, height int) *Block, рдЬрд╕рд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдмреНрд▓рдХрдХреЛ рд╣реНрдпрд╛рд╕ рд▓рд┐рдиреНрдЫ рд░ рдмреНрд▓рдХрдЪреЗрдирдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдмреНрд▓рдХрдХреЛ рдЙрдЪрд╛рдЗ рд╕реЗрдЯ рдЧрд░реНрджрдЫред рдмреНрд▓рдХ рдкреНрд░рдХрд╛рд░ рдкрдирд┐ рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░рдмрд╛рдЯ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ:

b.DataType = types.BLOCK_TYPE.

AddTx(tx *transaction.TX) рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХрдорд╛ рд▓реЗрдирджреЗрди рдердкреНрдЫред

Build() рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХрдХреЛ рдлрд┐рд▓реНрдбрд╣рд░реВрдорд╛ рдорд╛рдирд╣рд░реВ рд▓реЛрдб рдЧрд░реНрджрдЫ рд░ рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ рд╣реНрдпрд╛рд╕ рдЙрддреНрдкрдиреНрди рд░ рд╕реЗрдЯ рдЧрд░реНрджрдЫред

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

ToJSON() рд╕реНрдЯреНрд░рд┐рдЩ рд╡рд┐рдзрд┐рд▓реЗ рдбреЗрдЯрд╛рдХреЛ рд╕реНрдЯреНрд░рд┐рдЩ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рдмреНрд▓рдХрд▓рд╛рдИ JSON рдврд╛рдБрдЪрд╛рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдЫред

FromJSON(data []byte) рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐рд▓реЗ JSON рдмрд╛рдЯ рдбреЗрдЯрд╛рд▓рд╛рдИ рдмреНрд▓рдХ рд╕рдВрд░рдЪрдирд╛рдорд╛ рд▓реЛрдб рдЧрд░реНрдЫред

рдЪреЗрдХ() рдмреВрд▓ рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХ рд╣реНрдпрд╛рд╕ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдмреНрд▓рдХ рд╣реНрдпрд╛рд╕ рдлрд┐рд▓реНрдбрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрджрдЫред

GetTxsHash() рд╕реНрдЯреНрд░рд┐рдЩ рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХрдорд╛ рднрдПрдХрд╛ рд╕рдмреИ рдХрд╛рд░реЛрдмрд╛рд░рд╣рд░реВрдХреЛ рдХреБрд▓ рд╣реНрдпрд╛рд╕ рдлрд░реНрдХрд╛рдЙрдБрдЫред

GetMerkleRoot() рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХрдорд╛ рд▓реЗрдирджреЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд░реНрдХрд▓ рд░реВрдЦрдХреЛ рдореВрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫред

рд╕рд╛рдЗрди (privk рд╕реНрдЯреНрд░рд┐рдЩ) рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХ рд╕рд┐рд░реНрдЬрдирд╛рдХрд░реНрддрд╛рдХреЛ рдирд┐рдЬреА рдХреБрдЮреНрдЬреАрд╕рдБрдЧ рдмреНрд▓рдХрд▓рд╛рдИ рд╕рд╛рдЗрди рдЧрд░реНрдЫред

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

GetHeight() int рд╡рд┐рдзрд┐рд▓реЗ рдмреНрд▓рдХ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреНрд╖реЗрддреНрд░рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░ рдмреНрд▓рдХрдХреЛ рдЙрдЪрд╛рдЗ рдлрд░реНрдХрд╛рдЙрдБрдЫред

ToGOBBytes() []рдмрд╛рдЗрдЯ рд╡рд┐рдзрд┐рд▓реЗ GOB рдврд╛рдБрдЪрд╛рдорд╛ рдмреНрд▓рдХрд▓рд╛рдИ рдПрдиреНрдХреЛрдб рдЧрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕рдХреЛ рд░реВрдкрдорд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫред

FromGOBBytes(рдбреЗрдЯрд╛ []рдмрд╛рдЗрдЯ) рддреНрд░реБрдЯрд┐ рд╡рд┐рдзрд┐рд▓реЗ GOB рдврд╛рдБрдЪрд╛рдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕рдмрд╛рдЯ рдмреНрд▓рдХ рд╕рдВрд░рдЪрдирд╛рдорд╛ рдмреНрд▓рдХ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдЫред

GetHash() рд╕реНрдЯреНрд░рд┐рдЩ рд╡рд┐рдзрд┐рд▓реЗ рджрд┐рдЗрдПрдХреЛ рдмреНрд▓рдХрдХреЛ рд╣реНрдпрд╛рд╕ рдлрд░реНрдХрд╛рдЙрдБрдЫред

GetPrevHash() рд╕реНрдЯреНрд░рд┐рдЩ рд╡рд┐рдзрд┐рд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдмреНрд▓рдХрдХреЛ рд╣реНрдпрд╛рд╕ рдлрд░реНрдХрд╛рдЙрдБрдЫред

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

рдпрд╕рд░реА, рдмреНрд▓рдХ рд╡рд╕реНрддреБрдХреЛ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкреНрд░рд╕рд╛рд░рдг рд░ LevelDB рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдмрдЪрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдврд╛рдБрдЪрд╛рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред

рдмреНрд▓рдХрдЪреЗрди рдкреНрдпрд╛рдХреЗрдЬрдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдмреНрд▓рдХрдЪреЗрдирдорд╛ рдмрдЪрдд рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫрдиреН: github.com/Rusldv/bcstartup/tree/master/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() db.Cloce() рдХреЛ рд░реНтАНрдпрд╛рдкрд░ рд╣реЛ - рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЬрдбрд╛рди рдмрдиреНрдж рдЧрд░реНрди рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реЗрдкрдЫрд┐ рдмреЛрд▓рд╛рдЗрдиреНрдЫред

SetTargetBlockHash(hash string) рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ BLOCK_HASH рд╕реНрдерд┐рд░рддрд╛рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдХреБрдЮреНрдЬреАрд╕рдБрдЧ рд╣рд╛рд▓рдХреЛ рдмреНрд▓рдХрдХреЛ рд╣реНрдпрд╛рд╕ рд▓реЗрдЦреНрдЫред

GetTargetBlockHash() (рд╕реНрдЯреНрд░рд┐рдЩ, рддреНрд░реБрдЯрд┐) рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рд╣рд╛рд▓рдХреЛ рдмреНрд▓рдХрдХреЛ рд╣реНрдпрд╛рд╕ рдлрд░реНрдХрд╛рдЙрдБрдЫред

SetTargetBlockHeight(height int) рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ BLOCK_HEIGHT рд╕реНрдерд┐рд░рддрд╛рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдЮреНрдЬреАрдХреЛ рд╕рд╛рде рдиреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдмреНрд▓рдХрдЪреЗрди рдЙрдЪрд╛рдЗрдХреЛ рдорд╛рди рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд▓реЗрдЦреНрдЫред

GetTargetBlockHeight() (int, error) рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдиреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ blockchain рдХреЛ рдЙрдЪрд╛рдЗ рдлрд░реНрдХрд╛рдЙрдБрдЫред

рдЪреЗрдХрдмреНрд▓рдХ (рдмреНрд▓рдХ IBlock) bool рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдмреНрд▓рдХрдЪреЗрдирдорд╛ рдпреЛ рдмреНрд▓рдХ рдердкреНрдиреБ рдЕрдШрд┐ рд╢реБрджреНрдзрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдмреНрд▓рдХ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред

AddBlock (рдмреНрд▓рдХ IBlock) рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ blockchain рдорд╛ рдмреНрд▓рдХ рдердкреНрдЫред

рдмреНрд▓рдХрд╣рд░реВ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рд░ рд╣реЗрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ blockchain рдкреНрдпрд╛рдХреЗрдЬрдХреЛ explore.go рдлрд╛рдЗрд▓рдорд╛ рдЫрдиреН:

GetBlockByHash(hash string) (*block.Block, error) рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЦрд╛рд▓реА рдмреНрд▓рдХ рд╡рд╕реНрддреБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫ, рдбрд╛рдЯрд╛рдмреЗрд╕рдмрд╛рдЯ рддреНрдпрд╕рдорд╛ рдмреНрд▓рдХ рд▓реЛрдб рдЧрд░реНрдЫ, рдЬрд╕рдХреЛ рд╣реНрдпрд╛рд╕рд▓рд╛рдИ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рд░ рддреНрдпрд╕рдорд╛ рдПрдЙрдЯрд╛ рд╕реВрдЪрдХ рдлрд░реНрдХрд╛рдЙрдБрдЫред

рдЬреЗрдиреЗрд╕рд┐рд╕ рдмреНрд▓рдХрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдмреНрд▓рдХрдЪреЗрди рдкреНрдпрд╛рдХреЗрдЬрдХреЛ genesis.go рдлрд╛рдЗрд▓рдмрд╛рдЯ Genesis() рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реНрдпрджреНрд╡рд╛рд░рд╛ рдЧрд░рд┐рдиреНрдЫред

рдЕрд░реНрдХреЛ рд▓реЗрдЦрд▓реЗ WebSocket рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рдиреЛрдбрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди