Пример #1
0
 public void Fetch(BigInteger from, BigInteger to)
 {
     EthUtils.RunSync(() =>
                      processor.ExecuteAsync(
                          startAtBlockNumberIfNotProcessed: from,
                          toBlockNumber: (to != BigInteger.Zero) ? to : from,
                          cancellationToken: cancellationToken)
                      );
 }
Пример #2
0
        public List <EventLog <TransferEventDTO> > GetTransferEvents(string contract, HexBigInteger start, HexBigInteger end)
        {
            var transferEventHandler = GetWeb3Client().Eth.GetEvent <TransferEventDTO>(contract);

            var filter = transferEventHandler.CreateFilterInput(
                fromBlock: new BlockParameter(start),
                toBlock: new BlockParameter(end));

            var logs = EthUtils.RunSync(() => transferEventHandler.GetAllChanges(filter));

            return(logs);
        }
Пример #3
0
        public TransactionReceipt GetTransactionReceipt(string tx)
        {
            TransactionReceipt receipt = null;

            if (!tx.StartsWith("0x"))
            {
                tx = "0x" + tx.ToLower();
            }

            receipt = EthUtils.RunSync(() => GetWeb3Client().Eth.Transactions.GetTransactionReceipt.SendRequestAsync(tx));

            return(receipt);
        }
Пример #4
0
        public EthTransferResult TryTransferAsset(string platform, string symbol, string toAddress, decimal amount,
                                                  int decimals, out string result)
        {
            if (symbol.Equals("ETH", StringComparison.InvariantCultureIgnoreCase) || symbol.Equals("BNB", StringComparison.InvariantCultureIgnoreCase))
            {
                var bytes    = Nexus.GetOracleReader().Read <byte[]>(DateTime.Now, Domain.DomainExtensions.GetOracleFeeURL(platform));
                var fees     = Phantasma.Numerics.BigInteger.FromUnsignedArray(bytes, true);
                var gasPrice = Numerics.UnitConversion.ToDecimal(fees / _settings.Oracle.EthGasLimit, 9);

                result = EthUtils.RunSync(() => GetWeb3Client().Eth.GetEtherTransferService()
                                          .TransferEtherAsync(toAddress, amount, gasPrice, _settings.Oracle.EthGasLimit));

                return(EthTransferResult.Success);
            }
            else
            {
                var nativeAsset = false;
                if (symbol == DomainSettings.StakingTokenSymbol || symbol == DomainSettings.FuelTokenSymbol)
                {
                    nativeAsset = true;
                }

                var hash = Nexus.GetTokenPlatformHash(symbol, platform, Nexus.RootStorage);

                if (hash.IsNull)
                {
                    result = null;
                    return(EthTransferResult.Failure);
                }

                var contractAddress = hash.ToString().Substring(0, 40);
                if (string.IsNullOrEmpty(contractAddress))
                {
                    result = null;
                    return(EthTransferResult.Failure);
                }

                string outTransactionHash = null;
                if (nativeAsset)
                {
                    var swapIn = new SwapInFunction()
                    {
                        Source = _account.Address,
                        Target = toAddress,
                        Amount = Nethereum.Util.UnitConversion.Convert.ToWei(amount, decimals)
                    };

                    var swapInHandler = GetWeb3Client().Eth.GetContractTransactionHandler <SwapInFunction>();

                    swapIn.Gas = _settings.Oracle.EthGasLimit;
                    var bytes = Nexus.GetOracleReader().Read <byte[]>(DateTime.Now, Domain.DomainExtensions.
                                                                      GetOracleFeeURL(platform));
                    var fees = Phantasma.Numerics.BigInteger.FromUnsignedArray(bytes, true);
                    swapIn.GasPrice = System.Numerics.BigInteger.Parse(fees.ToString()) / swapIn.Gas;

                    outTransactionHash = EthUtils.RunSync(() => swapInHandler
                                                          .SendRequestAsync(contractAddress, swapIn));
                }
                else
                {
                    var transferHandler = GetWeb3Client().Eth.GetContractTransactionHandler <TransferFunction>();
                    var transfer        = new TransferFunction()
                    {
                        To          = toAddress,
                        TokenAmount = Nethereum.Util.UnitConversion.Convert.ToWei(amount, decimals)
                    };
                    outTransactionHash = EthUtils.RunSync(() => transferHandler
                                                          .SendRequestAndWaitForReceiptAsync(contractAddress, transfer)).TransactionHash;
                }

                result = outTransactionHash;

                return(EthTransferResult.Success);
            }
        }
Пример #5
0
        public Transaction GetTransaction(string tx)
        {
            var transaction = EthUtils.RunSync(() => GetWeb3Client().Eth.Transactions.GetTransactionByHash.SendRequestAsync(tx));

            return(transaction);
        }
Пример #6
0
 public BlockWithTransactions GetBlock(string hash)
 {
     return(EthUtils.RunSync(() => GetWeb3Client().Eth.Blocks.GetBlockWithTransactionsByHash.SendRequestAsync(hash)));
 }
Пример #7
0
 public BlockWithTransactions GetBlock(HexBigInteger height)
 {
     return(EthUtils.RunSync(() => GetWeb3Client().Eth.Blocks.GetBlockWithTransactionsByNumber
                             .SendRequestAsync(new BlockParameter(height))));
 }