Esempio n. 1
0
 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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 5
0
 public abstract byte[] SignTransaction(Transaction txInput, bool signed = true);
Esempio n. 6
0
 /// <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));
 }
Esempio n. 7
0
 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);
 }