Quomodo constitui caudices et transactiones in meo Ite blockchain

Ad ultimum finem cum clausula et non tantum database, opus est elementa 3 magna ad propositum nostrum addere:

  • Description of the block data structure and methodi
  • Description of notitia structura et transactionis modi
  • Obstructionum functionum quae in datorum stipitibus servant et ibi per nullam vel altitudinem (vel aliquid aliud) inveniunt.

Quomodo constitui caudices et transactiones in meo Ite blockchain

Hic est secundus articulus de scandalo industriae, primus hic.

Recordantes quaestiones quas lectores a me petierunt de superiore articulo in hac serie, notandum est: hoc in casu, the LevelDB database adhibetur ad clausuram datam, sed nihil obstat quominus quavis alia utere, inquam, MySQL. Nunc inspice structuram huius notitiae.

Sit scriptor satus cum transactions: github.com/Rusldv/bcstartup/blob/master/transaction/builder.go

Hic est eius notitia structura;

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 notitiarum genus (pro transactionis 2), Nullam illius negotii, rationem ipsius negotii, tempus stamp, et initibus et outputibus reponit. TxIn inputs reponunt Nullam transactionis cuius output referuntur, numerum huius output et bytecode, et TxOut outputs reponunt aliquid pretii et etiam bytecode.

Nunc videamus quid actiones in sua notitia transactionem praestare possint, i.e. Intueamur modos.

Transactionem creare, transaction.NewTransaction(txtype byte) * TX utere munus.

The AddTxIn (thattxhash []byte, txoutn int, code []byte) (*TxIn, error) methodum initus addit rei transactionis.

The AddTxOut (value int, data []byte) (*TxOut, error) modum addit rei gestionis.

Methodus byte ToBytes() transactionem in segmentum byte vertit.

Munus internum preByteHash (bytes []byte) chorda in aedifica () et perscriptio () adhibetur ut transaction generatae Nullam compatible cum transactione hashes generatae ex JavaScript applicationibus.

Constructum () modum transactionis Nullam ut sequitur: tx.TxHash = preByteHash(tx.ToBytes()).

ToJSON () methodus chordae transactionis in chorda JSON vertit.

The FromJSON (data []byte) error methodi transactionem ex forma JSON latae quasi segmentum byte onerat.

Perscriptio () methodum bool comparat consequens Nullam ex transactione campi Nullam cum Nullam consecuti ob hanc rem hashing (neglectis agro Nullam).

Acta additae sunt ad scandalum: github.com/Rusldv/bcstartup/blob/master/block/builder.go

Obstructionum notitiae structurae magis copiosae sunt;

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 datorum genus reponit, nodi utitur eo et scandalum ab transactione vel alia notitia discernit. Ad truncum haec utilitas 1 est.

BlockHeight addit altitudinem scandalum.
Indicatione indicatione temporis.
HeaderSize est obstructionum amplitudo in bytes.
PrevBlockHash est fasciculus clausus prioris, et SelfBlockHash est Nullam currentis.
TxsHash generale est de transactionibus.
MerkleRoot est radix arboris Merkle.

Praeterea in campis clavis publica creatoris clausus est, subscriptio creatoris, versio scandali, numerus negotiorum in stipite, et ipsae res gestae.

Intueamur eius modi:
Ad truncum creare, stipitem uti.NewBlock() functionem: NewBlock (prevBlockHash chorda, altitudo int) * Clausus, qui Nullam prioris truncum sumit et altitudinem positam pro trunco ​​creato in clausura. Genus impedimentum etiam e sarcina specierum constante constituit:

b.DataType = types.BLOCK_TYPE.

AddTx (tx *transaction.TX) modum addit transactionem ad scandalum.

Modus aedificandi valores in agris obstructionum stipitibus onerat et generat et currentem detrahendum ponit.

ToBytesHeader() [] byte methodus stipitem (sine transactionibus) in scalpere byte convertit.

ToJSON () methodus chordae scandalum ad JSON format in chorda repraesentationis notitiae convertit.

FromJSON (data []byte) erroris methodi onera ab JSON in structuram stipitem datam onerat.

Perscriptio () methodus bool Nullam truncum generat et eam comparat cum eo qui in agro stipiti condito.

GetTxsHash () modum filum refert summam omnium transactionum in scandalum.

Modus GetMerkleRoot() modum dat radicem arboris Merkle pro transactionibus in trunco.

Insigne (privk string) methodum truncum signat cum clave trunci privati ​​creatoris.

SetHeight (int height) methodus scribit altitudinem scandali ad structuram clausus campi.

GetHeight() int methodus altitudinem clausus refert ut in congruente campo obstructionum structurae definitum.

ToGOBBytes () [] methodum byte in GOB format truncum encodes et eum ut frustum byte reddit.

The FromGOBBytes (data []byte) erroris methodum scribit datam clausuram ad structuram obstruendam e segmento in GOB formato transeunte.

GetHash () modum chordae Nullam dati scandali reddit.

GetPrevHash () Nullam filum prioris scandali redit ratio.

The SetPublicKey (linea pubk) methodum scribit clavem publicam clausuram creatoris ad scandalum.

Ita, rationibus obiecti obiectionis adhibitis, facile eam in formam convertere possumus ad transmissionem per retiaculum et salvis ad database LevelDB.

Munera involucri claustri responsales sunt ad impedimentum reservandum: github.com/Rusldv/bcstartup/tree/master/blockchain

Ad hoc faciendum, scandalum interfaciendi IBlock efficiendum est;

type IGOBBytes interface {
	ToGOBBytes() []byte
	FromGOBBytes(data []byte) error
}

type IBlock interface {
	IGOBBytes
	GetHash() string
	GetPrevHash() string
	GetHeight() int
	Check() bool

}

Connexio database semel creatur cum sarcina initialized in functione init()

db, err = leveldb.OpenFile(BLOCKCHAIN_DB_DEBUG, nil).

CloseDB() fascia est pro db.Cloce() - vocatus postquam laborat cum functionibus sarcinarum ad nexum datorum claudendum.

Munus erroris functionis SetTargetBlockHash scribit Nullam stipes currentis cum clavem ab BLOCK_HASH constantem datorum specificatam.

Munus GetTargetBlockHash() (nervum, error) munus redit stipitem currentis in datorum repositum.

Munus erroris SetTargetBlockHeight(int) error datorum valorem claustri altitudinis pro nodi cum clave ab BLOCK_HEIGHT constanti determinatum scribit.

Munus GetTargetBlockHeight(int, error) redit altitudinem claustri pro nodo dato, in datorum reposito.

The CheckBlock (block IBlock) munus bool impedit truncum ad rectitudinem antequam hoc addendo ad scandalum.

The AddBlock(block IBlock) error munus addit truncum ad impedimentum.

Munera recuperandi et spectandi caudices sunt in explora.go fasciculi fasciculi claustri:

Munus GetBlockByHash (*block.Block, error) munus obiecto vacuam creat, truncum in eo onerat e datorum, cujus Nullam latam ad eum, et monstratorem ad illud reddit.

Creatio scandali genesis exercetur per errorem functionis genesis.go fasciculi genesis.

Proximus articulus loquetur de clientibus connectendis cum nodi utendo mechanismo WebSocket.

Source: www.habr.com

Add a comment