//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 }