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(); }
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; } } }
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 }); }
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 }); }); }
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); }
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(); } }
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); }
public IEnumerator SendRequest(System.String address, Nethereum.RPC.Eth.DTOs.BlockParameter block) { var request = _ethGetTransactionCount.BuildRequest(address, block); yield return(SendRequest(request)); }
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)); }
public IEnumerator SendRequest(Nethereum.RPC.Eth.DTOs.BlockParameter blockParameter, Nethereum.Hex.HexTypes.HexBigInteger uncleIndex) { var request = _ethGetUncleByBlockNumberAndIndex.BuildRequest(blockParameter, uncleIndex); yield return(SendRequest(request)); }
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)); }
public IEnumerator SendRequest(Nethereum.RPC.Eth.DTOs.BlockParameter block) { var request = _ethGetBlockTransactionCountByNumber.BuildRequest(block); yield return(SendRequest(request)); }
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()); }
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); }