public async Task <byte[]> CallAsync(Transaction transaction, long blockNumber)
        {
            var result = await _proxy.eth_call(CallTransactionModel.FromTransaction(transaction),
                                               BlockParameterModel.FromNumber(blockNumber));

            return(result?.IsValid == true ? result.Result ?? Array.Empty <byte>() : Array.Empty <byte>());
        }
Exemplo n.º 2
0
        public async Task eth_call_should_invoke_client_method()
        {
            var callTransaction = new CallTransactionModel();
            var blockParameter  = BlockParameterModel.Latest;
            await _proxy.eth_call(callTransaction, blockParameter);

            await _client.Received().SendAsync <byte[]>(nameof(_proxy.eth_call),
                                                        callTransaction, blockParameter.Type);
        }
Exemplo n.º 3
0
        private async Task RenderBalanceAsync()
        {
            var addressLabel = new Label(1, 1, $"Address: {_address}");
            var balanceLabel = new Label(60, 1, "Balance:");

            _syncingInfoLabel = new Label(70, 1, "Syncing...");

            _window.Add(addressLabel, balanceLabel, _syncingInfoLabel);

            var balanceResult = await _ethJsonRpcClientProxy.eth_getBalance(_address);

            _balance           = WeiToEth(balanceResult.Result.ToString());
            _balanceValueLabel = new Label(70, 1, $"{_balance} ETH");

            _window.Remove(_syncingInfoLabel);
            _window.Add(_balanceValueLabel);

            var quitButton     = new Button(1, 11, "Quit");
            var transferButton = new Button(12, 11, "Transfer");

            quitButton.Clicked = () =>
            {
                Application.Top.Running = false;
                Application.RequestStop();
            };

            transferButton.Clicked = () =>
            {
                TransferClicked?.Invoke(this, new TransferClickedEventArgs(_address, _balance));
            };

            _window.Add(quitButton, transferButton);

            var tokenTransaction = new CallTransactionModel();
            var tokenSignature   = "0x70a08231";
            var tokenData        = tokenSignature + "000000000000000000000000" + _address.ToString().Substring(2);

            tokenTransaction.Data = Bytes.FromHexString(tokenData);

            var tokens = InitTokens();
            var y      = 1;

            foreach (var token in tokens)
            {
                y += 2;
                tokenTransaction.To = token.Address;
                var call = await _ethJsonRpcClientProxy.eth_call(tokenTransaction, BlockParameterModel.Latest);

                var resultHex = call.Result.ToHexString();
                token.Balance = UInt256.Parse(resultHex, NumberStyles.HexNumber);
                var tokenBalanceLabel = new Label(1, y, $"{token.Name}: {WeiToEth(token.Balance.ToString())}");
                _window.Add(tokenBalanceLabel);
            }
        }
        public async Task call_should_invoke_proxy_eth_call_with_transaction_argument()
        {
            var transaction = Build.A.Transaction.TestObject;
            var data        = new byte[] { 0, 1, 2 };
            var callModel   = CallTransactionModel.FromTransaction(transaction);

            _proxy.eth_call(Arg.Is <CallTransactionModel>(x => x.From == callModel.From &&
                                                          x.To == callModel.To &&
                                                          x.Gas == callModel.Gas &&
                                                          x.GasPrice == callModel.GasPrice &&
                                                          x.Value == callModel.Value &&
                                                          x.Data.SequenceEqual(callModel.Data)))
            .Returns(RpcResult <byte[]> .Ok(data));
            var result = await _ndmBridge.CallAsync(transaction);

            await _proxy.Received().eth_call(Arg.Any <CallTransactionModel>());

            result.Should().BeSameAs(data);
        }
        public async Task call_with_transaction_number_should_invoke_proxy_eth_call_and_return_data()
        {
            const int blockNumber = 1;
            var       transaction = Build.A.Transaction.TestObject;
            var       data        = new byte[] { 0, 1, 2 };
            var       callModel   = CallTransactionModel.FromTransaction(transaction);

            _proxy.eth_call(Arg.Is <CallTransactionModel>(x => x.From == callModel.From &&
                                                          x.To == callModel.To &&
                                                          x.Gas == callModel.Gas &&
                                                          x.GasPrice == callModel.GasPrice &&
                                                          x.Value == callModel.Value &&
                                                          x.Data.SequenceEqual(callModel.Data)),
                            Arg.Is <BlockParameterModel>(x => x.Number == blockNumber))
            .Returns(RpcResult <byte[]> .Ok(data));
            var result = await _ndmBridge.CallAsync(transaction, blockNumber);

            await _proxy.Received().eth_call(Arg.Any <CallTransactionModel>(),
                                             Arg.Is <BlockParameterModel>(x => x.Number == blockNumber));

            result.Should().BeSameAs(data);
        }
Exemplo n.º 6
0
 public Task <RpcResult <byte[]> > eth_call(CallTransactionModel transaction,
                                            BlockParameterModel blockParameter = null)
 => _proxy.SendAsync <byte[]>(nameof(eth_call), transaction, MapBlockParameter(blockParameter));
        public async Task <byte[]> CallAsync(Transaction transaction)
        {
            var result = await _proxy.eth_call(CallTransactionModel.FromTransaction(transaction));

            return(result?.IsValid == true ? result.Result ?? Array.Empty <byte>() : Array.Empty <byte>());
        }