public async Task<List<Deposit>> StartupDeposits(string blockNumber) { List<Deposit> deposits = null; try { var startupLog = new List<Nethereum.Contracts.EventLog<Bizanc.io.Matching.Infra.Connector.LogDepositEvent>>(); var parameter = BlockParameter.CreateEarliest(); if (!string.IsNullOrEmpty(blockNumber)) { Log.Information("Reading Eth Events from block " + blockNumber); currentBlockDeposits = new HexBigInteger(blockNumber); parameter = new BlockParameter(currentBlockDeposits); } var lastBlock = new HexBigInteger((await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync()).Value - 5); depositFilter = logDepositEvent.CreateFilterInput(parameter, new BlockParameter(lastBlock)); deposits = await GetDeposits(depositFilter); currentBlockDeposits = lastBlock; } catch (Exception e) { Log.Error("Ethereum Connector Startp Failed: " + e.ToString()); } return deposits; }
public override async Task <string> GetCredentialsAsync( VASPId vaspId, VASPCredentialsRef vaspCredentialsRef, ConfirmationLevel minimalConfirmationLevel = default) { var vaspCredentialsRefString = vaspCredentialsRef.ToString(); if (!_vaspCredentialsRefRegex.IsMatch(vaspCredentialsRefString)) { throw new FormatException("Specified VASP credentials ref is not properly formatted to be used with a VASP directory."); } var credentialsInsertedEventHandler = Web3.Eth.GetEvent <CredentialsInsertedEvent>(ContractAddress); var credentialsInsertedEventFilter = credentialsInsertedEventHandler.CreateFilterInput ( firstIndexedParameterValue: (byte[])vaspId, secondIndexedParameterValue: vaspCredentialsRefString.HexToByteArray(), fromBlock: BlockParameter.CreateEarliest(), toBlock: await Web3.GetBestTrustedBlockAsync(minimalConfirmationLevel) ); var latestCredentials = (await credentialsInsertedEventHandler.GetAllChanges(credentialsInsertedEventFilter)) .OrderBy(x => x.Log.BlockNumber) .Select(x => x.Event.Credentials) .LastOrDefault() ?? string.Empty; return(latestCredentials); }
public static Tuple <BlockParameter, BlockParameter> getBlockParameterConfiguration(ulong requestFromBlock, ulong requestToBlock, bool useDefaultSetting) { // Create from and to Block parameter for the request BlockParameter fromBlock = BlockParameter.CreateEarliest(); BlockParameter toBlock = BlockParameter.CreateLatest(); // If from and to block parameters are provided set them if (requestFromBlock != 0) { fromBlock = new BlockParameter(requestFromBlock); } if (requestToBlock != 0) { toBlock = new BlockParameter(requestToBlock); } // If no filter parameter and neither from or to block are supplied set retrieve only the latest log files if ((useDefaultSetting == true) && (requestFromBlock == 0) && (requestToBlock == 0)) { // Get the current block number long currentBlockNr = Convert.ToInt64(AppServices.web3.Eth.Blocks.GetBlockNumber.SendRequestAsync().Result.HexValue, 16); // Set the from Block to a value of latest Block minus defaultBlockRangeForEventLogLoading parameter fromBlock = new BlockParameter((ulong)Math.Max(0, currentBlockNr - (long)AppModelConfig.defaultBlockRangeForEventLogLoading)); } return(Tuple.Create(fromBlock, toBlock)); }
// This method will check all blocks for new Events. private async Task <Dictionary <string, ChangeRequest> > checkCREvents(string contractAdress) { ChangeManagerService changeManagerService = new ChangeManagerService(new Web3(), contractAddress); Event newVoteEventLog = changeManagerService.ContractHandler.GetEvent <NewVoteEventDTO>(); Event newChangeRequestEventLog = changeManagerService.ContractHandler.GetEvent <NewChangeRequestEventDTO>(); Dictionary <string, ChangeRequest> result = new Dictionary <string, ChangeRequest>(); BlockParameter firstBlock = BlockParameter.CreateEarliest(); BlockParameter lastBlock = BlockParameter.CreateLatest(); NewFilterInput filterCR = newChangeRequestEventLog.CreateFilterInput(firstBlock, lastBlock); NewFilterInput filterVote = newVoteEventLog.CreateFilterInput(firstBlock, lastBlock); List <EventLog <NewChangeRequestEventDTO> > logCR = await newChangeRequestEventLog.GetAllChanges <NewChangeRequestEventDTO>(filterCR); List <EventLog <NewVoteEventDTO> > logVote = await newVoteEventLog.GetAllChanges <NewVoteEventDTO>(filterVote); // Get confirmation for CR creation. Then add CR to table and combobox for management vote. Debug.WriteLine("Checking for CR Events: " + logCR.Count); foreach (EventLog <NewChangeRequestEventDTO> cr in logCR) { ChangeRequest changeRequest; String gitHash = Converter.ByteArrayToBinHex(cr.Event.GitHash); HexBigInteger blocknumber = cr.Log.BlockNumber; Block block = await web3.Eth.Blocks.GetBlockWithTransactionsHashesByNumber.SendRequestAsync(blocknumber); if (result.ContainsKey(gitHash)) { changeRequest = result[gitHash]; } else { changeRequest = new ChangeRequest(this.contractAddress); result.Add(gitHash, changeRequest); } changeRequest.updateChangeRequest(gitHash, cr.Event.AdditionalInformation, cr.Event.Costs, cr.Event.Estimation, block.Timestamp.Value); } // Get vote confirmation. Then update State of the vote. Debug.WriteLine("Checking for Vote Events: " + logVote.Count); foreach (EventLog <NewVoteEventDTO> vote in logVote) { String gitHash = Converter.ByteArrayToBinHex(vote.Event.GitHash); ChangeRequest changeRequest = result[gitHash]; HexBigInteger blocknumber = vote.Log.BlockNumber; Block block = await web3.Eth.Blocks.GetBlockWithTransactionsHashesByNumber.SendRequestAsync(blocknumber); if (!changeRequest.votes.ContainsKey(vote.Event.Voter)) { changeRequest.updateVotes((State)vote.Event.CurrentState, vote.Event.VoteInfo, vote.Event.VotesLeft, vote.Event.Voter, vote.Event.Vote, block.Timestamp.Value); } } return(result); }
public static NewFilterInput GetDefaultFilterInput(string[] addresses, BlockParameter fromBlock = null, BlockParameter toBlock = null) { var ethFilterInput = new NewFilterInput { FromBlock = fromBlock ?? BlockParameter.CreateEarliest(), ToBlock = toBlock ?? BlockParameter.CreateLatest(), Address = addresses }; return(ethFilterInput); }
//Get all for now since infura doesnt support filters (commented line) public async Task <List <EventLog <ContentEventDTO> > > GetAddContentEvents() { var contract = GetContract(); var contentEventHandler = contract.GetEvent("ContentAddedViaEvent"); var firstBlock = BlockParameter.CreateEarliest(); var lastBlock = BlockParameter.CreateLatest(); var filterAllEventsForContract = contentEventHandler.CreateFilterInput(firstBlock, lastBlock); //var filterAllEventsForContract = await contentEventHandler.CreateFilterAsync(2, 2, firstBlock, lastBlock); return(await contentEventHandler.GetAllChanges <ContentEventDTO>(filterAllEventsForContract)); }
public Task <TransactionModel[]> GetTransactionsAsync(bool sent = false) { return(Task.Run(async delegate { var transferEvent = standardTokenService.GetTransferEvent(); var paddedAccountAddress = DefaultAccountAddress.RemoveHexPrefix() .PadLeft(64, '0') .EnsureHexPrefix(); var filter = transferEvent.CreateFilterInput( new object[] { sent?paddedAccountAddress: null }, new object[] { sent?null: paddedAccountAddress }, BlockParameter.CreateEarliest(), BlockParameter.CreateLatest()); var changes = await transferEvent.GetAllChanges(filter); var timestampTasks = changes.Select(x => Task.Factory.StartNew(async(state) => { var log = (EventLog <TransferEventDTO>)state; var block = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(log.Log.BlockNumber); return new TransactionModel { Sender = log.Event.From, Receiver = log.Event.To, Amount = (decimal)log.Event.Value, Inward = false == sent, Timestamp = (long)block.Timestamp.Value }; }, x)); return await Task.WhenAll(timestampTasks).ContinueWith(tt => { return tt.Result.Select(x => x.Result).ToArray(); }); })); }
public MainWindow(string contractAddress, string gitProject) { InitializeComponent(); tabControl.Items.Remove(responsibleTab); tabControl.Items.Remove(managementTab); this.contractAddress = contractAddress; changeRequests = new Dictionary <string, ChangeRequest>(); web3 = new Web3(); ChangeManagerService changeManagerService = new ChangeManagerService(web3, contractAddress); newVoteEventLog = changeManagerService.ContractHandler.GetEvent <NewVoteEventDTO>(); newChangeRequestEventLog = changeManagerService.ContractHandler.GetEvent <NewChangeRequestEventDTO>(); firstBlock = BlockParameter.CreateEarliest(); timer = new DispatcherTimer(); timer.Tick += new EventHandler(checkEventsAndUpdateTable); timer.Interval = new TimeSpan(0, 0, 2); timer.Start(); this.gitProject = gitProject; getGitCommits(gitProject); }
public IEnumerator LogsGetAllChangesFilteredTest() { return(ContractTest(async() => { await this.contract.CallAsync("emitTestIndexedEvent1", 1); await this.contract.CallAsync("emitTestIndexedEvent1", 2); await this.contract.CallAsync("emitTestIndexedEvent1", 3); EvmEvent <TestIndexedEvent1> event1 = this.contract.GetEvent <TestIndexedEvent1>("TestIndexedEvent1"); List <EventLog <TestIndexedEvent1> > decodedEvents = await event1.GetAllChanges(event1.CreateFilterInput(new object[] { 2 }, BlockParameter.CreateEarliest(), BlockParameter.CreatePending())); Assert.NotZero(decodedEvents.Count); decodedEvents.ForEach(log => Assert.AreEqual(2, log.Event.Number1)); Debug.Log(JsonConvert.SerializeObject(decodedEvents, Formatting.Indented)); })); }
public IEnumerator LogsGetAllChangesTest() { return(ContractTest(async() => { await this.contract.CallAsync("emitTestIndexedEvent1", 1); await this.contract.CallAsync("emitTestIndexedEvent1", 2); await this.contract.CallAsync("emitTestIndexedEvent1", 3); EvmEvent <TestIndexedEvent1> event1 = this.contract.GetEvent <TestIndexedEvent1>("TestIndexedEvent1"); List <EventLog <TestIndexedEvent1> > decodedEvents = await event1.GetAllChanges(event1.CreateFilterInput(BlockParameter.CreateEarliest(), BlockParameter.CreatePending())); Assert.AreEqual(1, decodedEvents[decodedEvents.Count - 3].Event.Number1); Assert.AreEqual(2, decodedEvents[decodedEvents.Count - 2].Event.Number1); Assert.AreEqual(3, decodedEvents[decodedEvents.Count - 1].Event.Number1); })); }