Esempio n. 1
0
//MapBlockToDBlock maps a block read from the .dat files to a database block
func MapBlockToDBlock(b *block.Block, d *block.DBlock) error {

	d.MagicNumber = int(b.MagicNumber)
	d.BlockLength = int(b.BlockLength)
	d.BlockHash = b.BlockHash
	d.FormatVersion = int(b.Header.FormatVersion)
	d.PreviousBlockHash = b.Header.PreviousBlockHash
	d.MerkleRoot = b.Header.MerkleRoot
	d.TimeStamp = int(b.Header.TimeStamp)
	d.TargetValue = int(b.Header.TargetValue)
	d.Nonce = int(b.Header.Nonce)
	d.TransactionCount = int(b.TransactionCount)

	var dTxs []block.DTransaction

	for t := 0; t < d.TransactionCount-1; t++ {

		var dIns []block.DInput
		var tx block.DTransaction

		tx.TransactionIndex = 0
		tx.Time = d.TimeStamp
		tx.TransactionHash = b.Transactions[t].TransactionHash
		tx.TransactionVersionNumber = int(b.Transactions[t].TransactionVersionNumber)
		tx.InputCount = int(b.Transactions[t].InputCount)

		for i := 0; i < tx.InputCount-1; i++ {

			var in block.DInput

			in.TransactionHash = b.Transactions[t].Inputs[i].TransactionHash
			in.TransactionIndex = int(b.Transactions[t].Inputs[i].TransactionIndex)
			in.InputScriptLength = int(b.Transactions[t].Inputs[i].InputScriptLength)
			in.InputScript = b.Transactions[t].Inputs[i].InputScript
			in.SequenceNumber = int(b.Transactions[t].Inputs[i].SequenceNumber)

			dIns = append(dIns, in)
		}

		tx.OutputCount = int(b.Transactions[t].OutputCount)
		var dOuts []block.DOutput

		for o := 0; o < tx.OutputCount-1; o++ {

			var out block.DOutput

			out.OutputValue = int(b.Transactions[t].Outputs[o].OutputValue)
			out.ChallengeScriptLength = int(b.Transactions[t].Outputs[o].ChallengeScriptLength)
			out.ChallengeScript = b.Transactions[t].Outputs[o].ChallengeScript
			out.KeyType = b.Transactions[t].Outputs[o].KeyType
			out.NumAddresses = len(b.Transactions[t].Outputs[o].Addresses)

			var dAdds []block.DAddress

			for a := 0; a < out.NumAddresses; a++ {

				var add block.DAddress

				add.Address = b.Transactions[t].Outputs[o].Addresses[a].Address

				dAdds = append(dAdds, add)
			}
			out.Addresses = dAdds
			dOuts = append(dOuts, out)
		}

		tx.TransactionLockTime = int(b.Transactions[t].TransactionLockTime)

		tx.Inputs = dIns
		tx.Outputs = dOuts
		dTxs = append(dTxs, tx)

	}
	d.Transactions = dTxs
	return nil
}