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);
        }
Exemple #3
0
        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));
        }
Exemple #7
0
        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);
        }
Exemple #9
0
        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));
            }));
        }
Exemple #10
0
        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);
            }));
        }