コード例 #1
0
ファイル: NethereumUtil.cs プロジェクト: EmilyEdna/KilyCore
        static public async Task ScanBlocksBlock(Web3 web3, ulong startBlockNumber, ulong endBlockNumber)
        {
            Console.WriteLine("ScanBlocksExample:");

            long txTotalCount = 0;

            for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++)
            {
                var blockParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(blockNumber);
                var block          = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);

                var trans   = block.Transactions;
                int txCount = trans.Length;
                txTotalCount += txCount;
                if (blockNumber % 1000 == 0)
                {
                    Console.Write(".");
                }
                if (blockNumber % 10000 == 0)
                {
                    DateTime blockDateTime = HEXHelper.UnixTimeStampToDateTime((double)block.Timestamp.Value);
                    Console.WriteLine(blockNumber.ToString() + " " + txTotalCount.ToString() + " " + blockDateTime.ToString());
                }
            }
            Console.WriteLine();
        }
コード例 #2
0
        static public async Task GetContractValuesHistoryUniqueOffsetValueExample(Web3 web3, string contractAddress, HexBigInteger recentBlockNumber, ulong numberBlocks, int offset)
        {
            Console.WriteLine("GetContractValuesHistoryUniqueOffsetValueExample:");

            string previousValue = "";

            for (ulong blockNumber = (ulong)recentBlockNumber.Value; blockNumber > (ulong)recentBlockNumber.Value - numberBlocks; blockNumber--)
            {
                var blockNumberParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(blockNumber);
                var valueAtOffset        = await web3.Eth.GetStorageAt.SendRequestAsync(contractAddress, new HexBigInteger(offset), blockNumberParameter);

                if (valueAtOffset != previousValue)
                {
                    var block = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockNumberParameter);

                    DateTime blockDateTime = Helpers.UnixTimeStampToDateTime((double)block.Timestamp.Value);
                    Console.WriteLine("blockDateTime:\t" + blockDateTime.ToString());

                    for (int storageOffset = 0; storageOffset < offset + 2; storageOffset++)
                    {
                        var valueAt = await web3.Eth.GetStorageAt.SendRequestAsync(contractAddress, new HexBigInteger(storageOffset), blockNumberParameter);

                        Console.WriteLine("value:\t" + blockNumber.ToString() + " " + storageOffset.ToString() + " " + valueAt + " " + Helpers.ConvertHex(valueAt.Substring(2)));
                    }
                    previousValue = valueAtOffset;
                }
            }
        }
コード例 #3
0
        private async Task IndexEventsInRange(string coinAdapterAddress, Nethereum.Contracts.Event coinCashInEvent, BigInteger from, BigInteger to)
        {
            var fromBlock = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(from));
            var toBlock   = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(to));
            var filter    = await coinCashInEvent.CreateFilterBlockRangeAsync(fromBlock, toBlock);

            var filterByCaller = await coinCashInEvent.GetAllChanges <CoinCashinEvent>(filter);

            filterByCaller.ForEach(async @event =>
            {
                string transactionHash = @event.Log.TransactionHash;
                CoinEventCashinCompletedMessage cashinTransactionMessage = new CoinEventCashinCompletedMessage()
                {
                    TransactionHash = transactionHash
                };

                await _cashinEventRepository.InsertAsync(new CashinEvent()
                {
                    CoinAdapterAddress = coinAdapterAddress,
                    Amount             = @event.Event.Amount.ToString(),
                    TransactionHash    = transactionHash,
                    UserAddress        = @event.Event.Caller
                });

                await _cashinQueue.PutRawMessageAsync(Newtonsoft.Json.JsonConvert.SerializeObject(cashinTransactionMessage));
            });

            await _blockSyncedRepository.InsertAsync(new BlockSynced()
            {
                BlockNumber = to.ToString(), CoinAdapterAddress = coinAdapterAddress
            });
        }
コード例 #4
0
        public async Task IndexEventsForTransaction(string coinAdapterAddress, string trHash)
        {
            var contract        = _web3.Eth.GetContract(_baseSettings.CoinAbi, coinAdapterAddress);
            var coinCashInEvent = contract.GetEvent("CoinCashIn");
            var transaction     = await _web3.Eth.Transactions.GetTransactionByHash.SendRequestAsync(trHash);

            var fromBlock = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(transaction.BlockNumber));
            var toBlock   = new Nethereum.RPC.Eth.DTOs.BlockParameter(new Nethereum.Hex.HexTypes.HexBigInteger(transaction.BlockNumber.Value + 1));
            var filter    = await coinCashInEvent.CreateFilterBlockRangeAsync(fromBlock, toBlock);

            var filterByCaller = await coinCashInEvent.GetAllChanges <CoinCashinEvent>(filter);

            filterByCaller.ForEach(async @event =>
            {
                string transactionHash = @event.Log.TransactionHash;
                CoinEventCashinCompletedMessage cashinTransactionMessage = new CoinEventCashinCompletedMessage()
                {
                    TransactionHash = transactionHash
                };

                await _cashinEventRepository.InsertAsync(new CashinEvent()
                {
                    CoinAdapterAddress = coinAdapterAddress,
                    Amount             = @event.Event.Amount.ToString(),
                    TransactionHash    = transactionHash,
                    UserAddress        = @event.Event.Caller
                });
            });
        }
コード例 #5
0
        static public async Task <bool> MonitorDepositEventsExample(Web3 web3, string contractAddress, string contractAbi, CancellationToken ct)
        {
            Console.WriteLine("MonitorDepositEventsExample:");

            var contract = web3.Eth.GetContract(contractAbi, contractAddress);

            var depositReceiptEvent     = contract.GetEvent("DepositReceipt");
            var blockParameter          = new Nethereum.RPC.Eth.DTOs.BlockParameter(0);
            var filterAllDepositReceipt = await depositReceiptEvent.CreateFilterAsync(blockParameter);

            Console.WriteLine("contractAddress:\t" + contractAddress.ToString());

            for (int iter = 0; iter < 100; iter++)
            {
                Console.Write("m");

                if (ct.IsCancellationRequested == true)
                {
                    Console.WriteLine("Task cancelled");
                    ct.ThrowIfCancellationRequested();
                }

                var logDepositReceipts = await depositReceiptEvent.GetFilterChanges <FunctionOutputHelpers.DepositReceiptArgs>(filterAllDepositReceipt);

                foreach (var dra in logDepositReceipts)
                {
                    var dt = Helpers.UnixTimeStampToDateTime((double)dra.Event.timestamp);
                    Console.WriteLine("DepositReceiptEvent.monitor:\t" +
                                      dt.ToString() + " " + dra.Event.from.ToString() + " " + dra.Event.id.ToString() + " " + dra.Event.value.ToString());
                }
                Thread.Sleep(10 * 1000);
            }
            return(true);
        }
コード例 #6
0
        static public async Task ScanTxExample(Web3 web3, ulong startBlockNumber, ulong endBlockNumber)
        {
            Console.WriteLine("ScanTxExample:");

            long txTotalCount = 0;

            for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++)
            {
                var blockParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(blockNumber);
                var block          = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);

                var trans   = block.Transactions;
                int txCount = trans.Length;
                txTotalCount += txCount;
                foreach (var tx in trans)
                {
                    try
                    {
                        var bn = tx.BlockNumber.Value;
                        var th = tx.TransactionHash;
                        var ti = tx.TransactionIndex.Value;

                        var rpt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(th);

                        var status = rpt.Status.Value;

                        var nc   = tx.Nonce.Value;
                        var from = tx.From;

                        Console.WriteLine(th.ToString() + " " + ti.ToString() + " " + from.ToString() + " " + status.ToString());

                        var to = tx.To;
                        if (to == null)
                        {
                            to = "to:NULL";
                        }
                        var v  = tx.Value.Value;
                        var g  = tx.Gas.Value;
                        var gp = tx.GasPrice.Value;
                        Console.WriteLine(th.ToString() + " " + ti.ToString() + " " + nc.ToString() + " " + from.ToString() + " " + to.ToString() + " " + v.ToString() + " " + g.ToString() + " " + gp.ToString());
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("ScanTxExample.Tx:\t" + ex.ToString());
                        if (ex.InnerException != null)
                        {
                            Console.WriteLine("ScanTxExample.Tx:\t" + ex.InnerException.ToString());
                        }
                    }
                }
                Console.WriteLine();
            }
        }
コード例 #7
0
        static public async Task <long> GetAllChangesExample(Web3 web3, string fromAddress, string fromPassword, string contractAddress, string contractAbi)
        {
            Console.WriteLine("GetAllChangesExample:");

            var contract       = web3.Eth.GetContract(contractAbi, contractAddress);
            var evt            = contract.GetEvent("DepositReceipt");
            var blockParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(0);
            var evtFilter      = await evt.CreateFilterAsync(blockParameter);

            var evtLog = await evt.GetAllChanges <FunctionOutputHelpers.DepositReceiptArgs>(evtFilter);

            foreach (var mea in evtLog)
            {
                var dt = Helpers.UnixTimeStampToDateTime((double)mea.Event.timestamp);
                Console.WriteLine("GetAllChangesExample:\t" +
                                  dt.ToString() + " " + mea.Event.from.ToString() + " " + mea.Event.id.ToString() + " " + mea.Event.value.ToString());
            }
            return(evtLog.Count);
        }
コード例 #8
0
        public IEnumerator SendRequest(System.String address, Nethereum.RPC.Eth.DTOs.BlockParameter block)
        {
            var request = _ethGetTransactionCount.BuildRequest(address, block);

            yield return(SendRequest(request));
        }
コード例 #9
0
        public IEnumerator SendRequest(Nethereum.RPC.Eth.DTOs.CallInput callInput, Nethereum.RPC.Eth.DTOs.BlockParameter block)
        {
            var request = _ethCall.BuildRequest(callInput, block);

            yield return(SendRequest(request));
        }
コード例 #10
0
        public IEnumerator SendRequest(Nethereum.RPC.Eth.DTOs.BlockParameter blockParameter, Nethereum.Hex.HexTypes.HexBigInteger uncleIndex)
        {
            var request = _ethGetUncleByBlockNumberAndIndex.BuildRequest(blockParameter, uncleIndex);

            yield return(SendRequest(request));
        }
コード例 #11
0
        public IEnumerator SendRequest(System.String address, Nethereum.Hex.HexTypes.HexBigInteger position, Nethereum.RPC.Eth.DTOs.BlockParameter block)
        {
            var request = _ethGetStorageAt.BuildRequest(address, position, block);

            yield return(SendRequest(request));
        }
コード例 #12
0
        public IEnumerator SendRequest(Nethereum.RPC.Eth.DTOs.BlockParameter block)
        {
            var request = _ethGetBlockTransactionCountByNumber.BuildRequest(block);

            yield return(SendRequest(request));
        }
コード例 #13
0
        static public async Task DoWork()
        {
            var web3 = new Web3();

            var maxBlock = await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();

            Console.WriteLine("maxBlock: " + maxBlock.Value.ToString());

            var contractAddress2 = "0x9EDCb9A9c4d34b5d6A082c86cb4f117A1394F831";
            //                     "0x1B31d19B6a9a942BBf3c197cA1e5EfEde3fF8fF2";

            string oldVal = "";

            for (ulong b = (ulong)maxBlock.Value; b > (ulong)maxBlock.Value - 5000; b--)
            {
                var bp     = new Nethereum.RPC.Eth.DTOs.BlockParameter(b);
                var stgVal = await web3.Eth.GetStorageAt.SendRequestAsync(contractAddress, new HexBigInteger(3), bp);

                if (stgVal != oldVal)
                {
                    var blK = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(bp);

                    DateTime dtBLK = UnixTimeStampToDateTime((double)blK.Timestamp.Value);
                    Console.WriteLine("DoWork: dtBLK: " + dtBLK.ToString());

                    for (int i = 0; i <= 5; i++)
                    {
                        var stgValue = await web3.Eth.GetStorageAt.SendRequestAsync(contractAddress, new HexBigInteger(i), bp);

                        Console.WriteLine("stgValue: " + b.ToString() + " " + i.ToString() + " " + stgValue + " " + ConvertHex(stgValue.Substring(2)));
                    }
                    oldVal = stgVal;
                }
            }

            var accts = await web3.Personal.ListAccounts.SendRequestAsync();

            foreach (var a in accts)
            {
                Console.WriteLine("a: " + a);

                var b = await web3.Eth.GetBalance.SendRequestAsync(a);

                string sb = Web3.Convert.FromWei(b.Value).ToString();
                Console.WriteLine("DoWork: balance: " + sb);
            }

            var balance = await web3.Eth.GetBalance.SendRequestAsync(senderAddress);

            string sBalance = Web3.Convert.FromWei(balance.Value).ToString();

            Console.WriteLine("DoWork: balance: " + sBalance);

            var blockNumber = await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();

            Console.WriteLine("DoWork: blockNumber: " + blockNumber.Value.ToString());

            var block = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(new HexBigInteger(5));

            DateTime dt = UnixTimeStampToDateTime((double)block.Timestamp.Value);

            Console.WriteLine("DoWork: dt: " + dt.ToString());
            var trans = block.Transactions;

            foreach (var t in trans)
            {
                var bn   = t.BlockNumber;
                var th   = t.TransactionHash;
                var ti   = t.TransactionIndex;
                var nc   = t.Nonce;
                var from = t.From;
                var to   = t.To;
                var v    = t.Value;
                var g    = t.Gas;
                var gp   = t.GasPrice;
                // TODO
            }

            var contract = web3.Eth.GetContract(contractAbi, contractAddress);

            var setMsg = contract.GetFunction("setMsg");
            var getMsg = contract.GetFunction("getMsg");

            string now = DateTime.UtcNow.ToString() + " UTC";

            Console.WriteLine("DoWork: now: " + now);
            //object[] parms = { 2, now };
            //var setResult = await setMsg.CallAsync<int>(parms);

            var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, pwd, 120);

            var txHash1 = await setMsg.SendTransactionAsync(senderAddress, new HexBigInteger(900000), null, 1, "Hello World");

            Console.WriteLine("DoWork: txHash1: " + txHash1.ToString());
            var txHash2 = await setMsg.SendTransactionAsync(senderAddress, new HexBigInteger(900000), null, 2, now);

            Console.WriteLine("DoWork: txHash2: " + txHash2.ToString());

            var txReceipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash2);

            int timeoutCount = 0;

            while (txReceipt == null && timeoutCount < 24)
            {
                Console.WriteLine("DoWork: sleeping...");
                Thread.Sleep(5000);
                txReceipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txHash2);

                timeoutCount++;
            }
            Console.WriteLine("DoWork: timeoutCount " + timeoutCount.ToString());

            var txReceipt3 = await setMsg.SendTransactionAndWaitForReceiptAsync(senderAddress, new HexBigInteger(900000), null, null, 2, now + " Wait");

            Console.WriteLine("DoWork: txReceipt3: " + txReceipt3.TransactionHash.ToString());
            Console.WriteLine("DoWork: txReceipt3: " + txReceipt3.CumulativeGasUsed.Value.ToString());


            var getResult1 = await getMsg.CallAsync <string>(1);

            Console.WriteLine("DoWork: done: " + getResult1.ToString());
            var getResult2 = await getMsg.CallAsync <string>(2);

            Console.WriteLine("DoWork: done: " + getResult2.ToString());
        }
コード例 #14
0
        static public async Task <long> ScanTxExample(Web3 web3, ulong startBlockNumber, ulong endBlockNumber)
        {
            Console.WriteLine("ScanTxExample:");

            long txTotalCount = 0;

            for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++)
            {
                var blockParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(blockNumber);
                var block          = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);

                var trans   = block.Transactions;
                int txCount = trans.Length;
                txTotalCount += txCount;
                //Console.WriteLine("block:\t" + blockNumber.ToString() + " " + txCount.ToString());
                if (txCount > 0)
                {
                    foreach (var tx in trans)
                    {
                        try
                        {
                            var bn = tx.BlockNumber.Value;
                            var th = tx.TransactionHash;
                            var ti = tx.TransactionIndex.Value;

                            var rpt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(th);

                            BigInteger status = 0;
                            if (rpt.Status != null)
                            {
                                status = rpt.Status.Value;
                            }

                            var  nc     = tx.Nonce.Value;
                            var  from   = tx.From;
                            Task taskfr = GetAccountBalanceExample(web3, from);
                            taskfr.Wait();

                            Console.WriteLine(th.ToString() + " bn " + bn.ToString() + " ti " + ti.ToString() + " fr " + from.ToString() + " st " + status.ToString());

                            var to = tx.To;
                            if (to == null)
                            {
                                to = "to:NULL";
                            }
                            else
                            {
                                Task taskto = GetAccountBalanceExample(web3, to);
                                taskto.Wait();
                            }
                            var v  = tx.Value.Value;
                            var g  = tx.Gas.Value;
                            var gp = tx.GasPrice.Value;

                            Console.WriteLine(th.ToString() + " bn " + bn.ToString() + " ti " + ti.ToString() + " nc " + nc.ToString() + " fr " + from.ToString() + " to " + to.ToString() + " v " + v.ToString() + " g " + g.ToString() + " gp " + gp.ToString());
                            var dataHex = tx.Input;
                            if (dataHex != null)
                            {
                                var data = Helpers.ConvertHexToASCII(dataHex);
                                Console.WriteLine("DataHex:\t" + dataHex.ToString() + "\nData:\t" + data.ToString());
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("ScanTxExample.Tx:\t" + ex.ToString());
                            if (ex.InnerException != null)
                            {
                                Console.WriteLine("ScanTxExample.Tx:\t" + ex.InnerException.ToString());
                            }
                        }
                    }
                    Console.WriteLine();
                }
            }
            return(txTotalCount);
        }