public static TransactionContract FromDomain(NeoModules.NEP6.Transactions.Transaction source) { if (source is ContractTransaction) { return(new TransactionContract { Inputs = source.Inputs.Select(CoinReferenceContract.FromDomain), Outputs = source.Outputs.Select(TransferOutputContract.FromDomain), Wittnesses = source.Witnesses.Select(WittnessContract.FromDomain), }); } else if (source is ClaimTransaction) { var claim = (ClaimTransaction)source; return(new TransactionContract { Inputs = claim.Inputs.Select(CoinReferenceContract.FromDomain), Outputs = claim.Outputs.Select(TransferOutputContract.FromDomain), Wittnesses = claim.Witnesses.Select(WittnessContract.FromDomain), Claims = claim.Claims.Select(CoinReferenceContract.FromDomain) }); } else { throw new ArgumentException("Unknown transaction type", nameof(source)); } }
public async Task <NeoModules.NEP6.Transactions.Transaction> BuildGasTransactionAsync(string @from, string to, decimal amount) { var tx = new ContractTransaction { Attributes = new TransactionAttribute[0], Inputs = new CoinReference[0], Outputs = new List <TransferOutput> { new TransferOutput { AssetId = Utils.GasToken, ScriptHash = to.ToScriptHash(), Value = BigDecimal.Parse(amount.ToString(CultureInfo.InvariantCulture), Constants.Assets.Gas.Accuracy) } }.Select(p => p.ToTxOutput()).ToArray(), Witnesses = new Witness[0] }; var unspentOutputs = await _transactionOutputsService.GetUnspentOutputsAsync(from); tx = MakeTransaction(tx, unspentOutputs, from.ToScriptHash(), changeAddress: from.ToScriptHash()); return(tx); }
/// <summary> /// Signs a Transaction object and sends a 'sendrawtransaction' RPC call to the connected node. /// </summary> /// <param name="txInput"></param> /// <returns></returns> private async Task <bool> SignAndSendTransaction(Transaction txInput) { if (txInput == null) { return(false); } var serializedSignedTransaction = SignTransaction(txInput); return(await base.SendTransactionAsync(serializedSignedTransaction.ToHexString())); }
public async Task <(NeoModules.NEP6.Transactions.Transaction tx, decimal fee)> BuildNeoContractTransactionAsync(string from, string to, decimal amount, bool includeFee) { var unspentOutputs = (await _transactionOutputsService.GetUnspentOutputsAsync(from)).ToList(); var tx = new ContractTransaction { Attributes = new TransactionAttribute[0], Inputs = new CoinReference[0], Outputs = new List <TransferOutput> { new TransferOutput { AssetId = Utils.NeoToken, ScriptHash = to.ToScriptHash(), Value = BigDecimal.Parse(amount.ToString("F", CultureInfo.InvariantCulture), Constants.Assets.Neo.Accuracy) } }.Select(p => p.ToTxOutput()).ToArray(), Witnesses = new Witness[0] }; var fee = CalculcateFee(tx, unspentOutputs, from.ToScriptHash()); if (includeFee) { amount -= fee; } tx = MakeTransaction(tx, unspentOutputs, from.ToScriptHash(), changeAddress: from.ToScriptHash(), fee: new Fixed8(fee)); return(tx, fee); }
public abstract byte[] SignTransaction(Transaction txInput, bool signed = true);
/// <summary> /// Signs a Transaction object /// </summary> /// <param name="txInput"></param> /// <param name="signed"></param> public override byte[] SignTransaction(Transaction txInput, bool signed = true) { return(txInput.Sign(_accountKey, signed)); }
public static string Serialize(NeoModules.NEP6.Transactions.Transaction transaction, TransactionType type) { return(TransactionTypeWrapperContract.Create(type, TransactionContract.FromDomain(transaction).ToJson()) .ToJson().ToBase64()); }
public async Task CompleteTxOutputs(Guid operationId, NeoModules.NEP6.Transactions.Transaction tx) { var inputs = tx.Inputs.Select(o => new Output(o)).ToList(); await _spentOutputRepository.InsertSpentOutputsAsync(operationId, inputs); }