public string GetPaymentId() { return(Outpoint.ToString()); }
public void AddToStorageBatch(StorageBatch storageBatch, SyncBlockTransactionsOperation item) { storageBatch.TotalSize += item.BlockInfo.Size; storageBatch.BlockTable.Add(item.BlockInfo.Height, mongoBlockToStorageBlock.Map(item.BlockInfo)); int transactionIndex = 0; foreach (Transaction trx in item.Transactions) { string trxHash = trx.GetHash().ToString(); storageBatch.TransactionBlockTable.Add( new TransactionBlockTable { BlockIndex = item.BlockInfo.HeightAsUint32, TransactionId = trxHash, TransactionIndex = transactionIndex++, }); if (configuration.StoreRawTransactions) { storageBatch.TransactionTable.Add(new TransactionTable { TransactionId = trxHash, RawTransaction = trx.ToBytes(syncConnection.Network.Consensus.ConsensusFactory) }); } int outputIndex = 0; foreach (TxOut output in trx.Outputs) { ScriptOutputInfo res = scriptInterpeter.InterpretScript(syncConnection.Network, output.ScriptPubKey); string addr = res != null ? (res?.Addresses != null && res.Addresses.Any()) ? res.Addresses.First() : res.ScriptType : "none"; var outpoint = new Outpoint { TransactionId = trxHash, OutputIndex = outputIndex++ }; storageBatch.OutputTable.Add(outpoint.ToString(), new OutputTable { Address = addr, Outpoint = outpoint, BlockIndex = item.BlockInfo.HeightAsUint32, Value = output.Value, ScriptHex = output.ScriptPubKey.ToHex(), CoinBase = trx.IsCoinBase, CoinStake = syncConnection.Network.Consensus.IsProofOfStake && trx.IsCoinStake, }); } if (trx.IsCoinBase) { continue; //no need to check the inputs for that transaction } foreach (TxIn input in trx.Inputs) { var outpoint = new Outpoint { TransactionId = input.PrevOut.Hash.ToString(), OutputIndex = (int)input.PrevOut.N }; storageBatch.OutputTable.TryGetValue(outpoint.ToString(), out OutputTable output); storageBatch.InputTable.Add(new InputTable() { Outpoint = outpoint, TrxHash = trxHash, BlockIndex = item.BlockInfo.HeightAsUint32, Address = output?.Address, Value = output?.Value ?? 0, }); } } // allow any extensions to add ot the batch. OnAddToStorageBatch(storageBatch, item); }