N ethereum C# FilterInput.GetAllChanges всегда пусто - PullRequest
0 голосов
/ 05 мая 2020

Я использую N ethereum в своем проекте, чтобы получить все незавершенные транзакции по указанному c адресу смарт-контракта. Чтобы сделать это на основе существующих документов и N ethereum игрового поля, я пробую следующее:

private async Task MonitorPendingTransactions()
{
    var web = new Web3Geth("http://***.***.***.***:8545");
    var transferEventHandler = web3.Eth.GetEvent<TransferEventDTO>(contractAddr);
    var filterAllTransferEventsForContract = transferEventHandler.CreateFilterInput();
    var allTransferEventsForContract = await transferEventHandler.GetAllChanges(filterAllTransferEventsForContract);
    Thread.Sleep(10000);
    allTransferEventsForContract = await transferEventHandler.GetAllChanges(filterAllTransferEventsForContract);
}

Мой TransferEventDTO такой же, как и в официальных документах в том же месте:

[Event("Transfer")]
public class TransferEventDTO : IEventDTO
{
    [Parameter("address", "_from", 1, true)]
    public string From { get; set; }

    [Parameter("address", "_to", 2, true)]
    public string To { get; set; }

    [Parameter("uint256", "_value", 3, false)]
    public BigInteger Value { get; set; }
}

Пока у меня 2 проблемы:

  1. Я не могу указать начальный блок, из которого я хотел бы получить вывод, например, ожидающий вместо последнего
  2. GetAllChanges() всегда возвращает 0, независимо от того, как долго я жду, делаю ли я что-то не так в конфигурации фильтра или ожидающие транзакции должны запрашиваться другим способом?

1 Ответ

0 голосов
/ 20 мая 2020

Можете ли вы перейти на использование Web3? Пожалуйста, обратитесь к моему коду!

   var _web3 = new Web3("https://ropsten.infura.io/v3/APIKEY");
        var _transactionRpcResult = _web3.Eth.Transactions.GetTransactionByHash.SendRequestAsync("0x02fca948c467b0247030d12f4e1bb6811a626f5b55013d3dbec10cea82f72110");
        var blockNumberResult = _web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();
        blockNumberResult.Wait();
        ulong _currentblockNumber = (ulong)blockNumberResult.Result.Value;
        var transferEventHandler = _web3.Eth.GetEvent<TransferEventDTO>("0xfc420e5a883d3b08ab1fd8299a9fcc18cab74527");
        var filter = transferEventHandler.CreateFilterInput(fromBlock: new BlockParameter(_transactionRpcResult.Result.BlockNumber), toBlock: new BlockParameter(_currentblockNumber));
        var logsresult = transferEventHandler.GetAllChanges(filter);
        logsresult.Wait();
        var logs = logsresult.Result;

TransferEventDTO

[Event("Transfer")]
public class TransferEventDTO : IEventDTO
{
    [Parameter("address", "_from", 1, true)]
    public string From { get; set; }

    [Parameter("address", "_to", 2, true)]
    public string To { get; set; }

    [Parameter("uint256", "_value", 3, false)]
    public BigInteger Value { get; set; }
}
...