public Web3.Web3 GetWeb3()
        {
            var web3 = new Web3.Web3(_ethereumClientIntegrationFixture.GetWeb3().TransactionManager.Account,
                                     "http://localhost:8545", LogManager.GetLogger <ILog>());

            return(web3);
        }
Exemplo n.º 2
0
        public async void ShouldBeAbleToHandleNoncesOfMultipleTxnSingleWeb3SingleThreaded()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var privateKey    = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var abi           =
                @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3.Web3(new Account(privateKey), ClientFactory.GetClient());

            var txn1 = await
                       web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), null,
                                                                multiplier);

            var txn2 = await
                       web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), null,
                                                                multiplier);

            var txn3 = await
                       web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), null,
                                                                multiplier);

            var pollService = new TransactionReceiptPollingService(web3.TransactionManager);

            var receipt1 = pollService.PollForReceiptAsync(txn1);
            var receipt2 = pollService.PollForReceiptAsync(txn2);
            var receipt3 = pollService.PollForReceiptAsync(txn3);

            Assert.NotNull(receipt1);
            Assert.NotNull(receipt2);
            Assert.NotNull(receipt3);
        }
        public async Task <bool> SetUrl(string url, int networkId = 1)
        {
            Ensure.ArgumentCondition(Nethereum.UI.Util.Utils.IsValidUrl(url), "Invalid url", "Url");
            var web3 = new Web3.Web3(url);

            try
            {
                var blockNumber = await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();

                Url             = url;
                SelectedNetwork = networkId;

                if (NetworkChanged != null)
                {
                    await NetworkChanged(networkId);
                }

                _enabledCallback.OnNext(Enabled);
                return(true);
            }
            catch // toasts and other stuff
            {
                Url = null;
                _enabledCallback.OnNext(Enabled);
                return(false);
            }
        }
Exemplo n.º 4
0
        public async Task ShouldBeAbleToTransferBetweenAccountsUsingThePrivateKey()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var addressTo     = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var password      = "******";

            var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";


            // The default account is an account which is mananaged by the user

            var account = new Account(privateKey);
            var web3    = new Web3.Web3(account);

            //The transaction receipt polling service is a simple utility service to poll for receipts until mined
            var transactionPolling = new TransactionReceiptPollingService(web3);

            var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            //assumed client is mining already

            //when sending a transaction using an Account, a raw transaction is signed and send using the private key
            var transactionReceipt = await transactionPolling.SendRequestAsync(() =>
                                                                               web3.TransactionManager.SendTransactionAsync(account.Address, addressTo, new HexBigInteger(20))
                                                                               );

            var newBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            Assert.Equal(currentBalance.Value + 20, newBalance.Value);
        }
Exemplo n.º 5
0
 public StorageProcessor(string url, IUnitOfWork repositoryBase)
 {
     web3                  = new Web3.Web3(url);
     blockProcessor        = new BlockProcessor(web3, repositoryBase);
     transactionsProcessor = new TransactionsProcessor(web3, repositoryBase);
     this.repositoryBase   = repositoryBase;
 }
Exemplo n.º 6
0
        public async Task ShouldBeAbleToTransferBetweenAccountsLoadingEncryptedPrivateKey()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var addressTo     = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var password      = "******";

            var keyStoreEncryptedJson =
                @"{""crypto"":{""cipher"":""aes-128-ctr"",""ciphertext"":""b4f42e48903879b16239cd5508bc5278e5d3e02307deccbec25b3f5638b85f91"",""cipherparams"":{""iv"":""dc3f37d304047997aa4ef85f044feb45""},""kdf"":""scrypt"",""mac"":""ada930e08702b89c852759bac80533bd71fc4c1ef502291e802232b74bd0081a"",""kdfparams"":{""n"":65536,""r"":1,""p"":8,""dklen"":32,""salt"":""2c39648840b3a59903352b20386f8c41d5146ab88627eaed7c0f2cc8d5d95bd4""}},""id"":""19883438-6d67-4ab8-84b9-76a846ce544b"",""address"":""12890d2cce102216644c59dae5baed380d84830c"",""version"":3}";

            //this is your wallet key  file which can be found on

            //Linux: ~/.ethereum/keystore
            //Mac: /Library/Ethereum/keystore
            //Windows: %APPDATA%/Ethereum

            //if not using portable or netstandard (^net45) you can use LoadFromKeyStoreFile to load the file from the file system.

            var account = Account.LoadFromKeyStore(keyStoreEncryptedJson, password);
            var web3    = new Web3.Web3(account);

            //The transaction receipt polling service is a simple utility service to poll for receipts until mined
            var transactionPolling = new TransactionReceiptPollingService(web3);

            var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            //assumed client is mining already
            //when sending a transaction using an Account, a raw transaction is signed and send using the private key
            var transactionReceipt = await transactionPolling.SendRequestAsync(() =>
                                                                               web3.TransactionManager.SendTransactionAsync(account.Address, addressTo, new HexBigInteger(20))
                                                                               );

            var newBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            Assert.Equal(currentBalance.Value + 20, newBalance.Value);
        }
Exemplo n.º 7
0
        public async void ShouldDeployAContractWithConstructor()
        {
            using (var testrpcRunner = new TestRPCEmbeddedRunner())
            {
                try
                {
                    testrpcRunner.RedirectOuputToDebugWindow = true;
                    testrpcRunner.StartTestRPC();

                    var web3        = new Web3.Web3();
                    var addressFrom = (await web3.Eth.Accounts.SendRequestAsync())[0];

                    var transactionService     = new TransactionReceiptPollingService(web3.TransactionManager);
                    var previousVersionAddress = "0x12890d2cce102216644c59dae5baed380d84830c";
                    var registrySevice         = await UportRegistryService.DeployContractAndGetServiceAsync(transactionService,
                                                                                                             web3,
                                                                                                             addressFrom,
                                                                                                             previousVersionAddress,
                                                                                                             new HexBigInteger(4712388));

                    Assert.Equal(previousVersionAddress, await registrySevice.PreviousPublishedVersionAsyncCall());
                }
                finally
                {
                    testrpcRunner.StopTestRPC();
                }
            }
        }
        private async void BtnGetAccoutns_OnClick(object sender, RoutedEventArgs e)
        {
            var web3    = new Web3.Web3("https://mainnet.infura.io");
            var balance = await web3.Eth.GetBalance.SendRequestAsync("0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe");

            this.Dispatcher.Invoke(() => { txtAccounts.Text = Web3.Web3.Convert.FromWei(balance.Value).ToString(); });
        }
Exemplo n.º 9
0
        public async void ShouldTransferWholeBalanceInEther()
        {
            var web3            = _ethereumClientIntegrationFixture.GetWeb3();
            var privateKey      = EthECKey.GenerateKey();
            var newAccount      = new Account(privateKey.GetPrivateKey(), EthereumClientIntegrationFixture.ChainId);
            var toAddress       = newAccount.Address;
            var transferService = web3.Eth.GetEtherTransferService();

            var receipt = await web3.Eth.GetEtherTransferService()
                          .TransferEtherAndWaitForReceiptAsync(toAddress, 0.1m, gasPriceGwei: 2).ConfigureAwait(false);

            var balance = await web3.Eth.GetBalance.SendRequestAsync(toAddress).ConfigureAwait(false);

            Assert.Equal(0.1m, Web3.Web3.Convert.FromWei(balance));

            var totalAmountBack =
                await transferService.CalculateTotalAmountToTransferWholeBalanceInEtherAsync(toAddress, 2m).ConfigureAwait(false);

            var web32       = new Web3.Web3(newAccount, web3.Client);
            var receiptBack = await web32.Eth.GetEtherTransferService()
                              .TransferEtherAndWaitForReceiptAsync(EthereumClientIntegrationFixture.AccountAddress, totalAmountBack, gasPriceGwei: 2).ConfigureAwait(false);

            var balanceFrom = await web32.Eth.GetBalance.SendRequestAsync(toAddress).ConfigureAwait(false);

            Assert.Equal(0, Web3.Web3.Convert.FromWei(balanceFrom));
        }
        private string TransferEventKeccak = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; //keccak of transfer event

        public TransactionsProcessor(Web3.Web3 web3, IUnitOfWork _repositoryBase)
        {
            this.web3             = web3;
            this.repositoryBase   = _repositoryBase;
            transactionRepository = _repositoryBase.GetRepository <NodeTransaction>();
            blockRepository       = _repositoryBase.GetRepository <NodeBlock>();
        }
Exemplo n.º 11
0
        private BlockchainProcessor CreateBlockChainProcessor(TRepositoryFactory repoFactory)
        {
            var web3 = new Web3.Web3(TargetConfiguration.BlockchainUrl);

            var steps = new BlockProcessingSteps();

            steps.BlockStep.AddProcessorHandler((b) => { log.Info($"Processing block {b.Number.Value}, Tx Count: {b.Transactions.Length}"); return(Task.CompletedTask); });
            steps.TransactionReceiptStep.AddProcessorHandler((tx) => { log.Info($"\tTransaction: Index: {tx.Transaction.TransactionIndex}, Hash: {tx.TransactionHash}"); return(Task.CompletedTask); });
            steps.FilterLogStep.AddProcessorHandler((l) => { log.Info($"\t\tLog: Index: {l.LogIndex}"); return(Task.CompletedTask); });

            var orchestrator = new BlockCrawlOrchestrator(web3.Eth, steps);

            orchestrator.ContractCreatedCrawlerStep.RetrieveCode = true;

            var lastConfirmedBlockNumberService = new LastConfirmedBlockNumberService(
                web3.Eth.Blocks.GetBlockNumber,
                TargetConfiguration.MinimumBlockConfirmations ?? LastConfirmedBlockNumberService.DEFAULT_BLOCK_CONFIRMATIONS,
                log);

            IBlockProgressRepository progressRepo = repoFactory.CreateBlockProgressRepository();

            var processor = new BlockchainProcessor(orchestrator, progressRepo, lastConfirmedBlockNumberService, log);

            return(processor);
        }
Exemplo n.º 12
0
        public async void ShouldResolveNameFromMainnet()
        {
            var web3 = new Web3.Web3("https://mainnet.infura.io");

            var fullNameNode = new EnsUtil().GetNameHash("nickjohnson.eth");

            var ensRegistryService = new ENSRegistryService(web3, "0x314159265dd8dbb310642f98f50c066173c1259b");
            //get the resolver address from ENS
            var resolverAddress = await ensRegistryService.ResolverQueryAsync(
                new ResolverFunction()
            {
                Node = fullNameNode.HexToByteArray()
            });

            Assert.Equal("0x1da022710df5002339274aadee8d58218e9d6ab5", resolverAddress);
            //using the resolver address we can create our service (should be an abstract / interface based on abi as we can have many)
            var resolverService = new PublicResolverService(web3, resolverAddress);


            //and get the address from the resolver
            var theAddress =
                await resolverService.AddrQueryAsync(new AddrFunction()
            {
                Node = fullNameNode.HexToByteArray()
            });

            //Owner address
            var expectedAddress = "0xfdb33f8ac7ce72d7d4795dd8610e323b4c122fbb";

            Assert.Equal(expectedAddress.ToLower(), theAddress.ToLower());
        }
        public async Task FilterLogsWithCriteria()
        {
            const string INDEX_NAME = "filter-logs-with-criteria";

            //surround with "using" so that anything in a buffer is sent on dispose
            using (var azureSearchService = new AzureSearchService(AzureSearchServiceName, _azureSearchApiKey))
            {
                try
                {
                    // create an index - if an existing index is required: azureSearchService.GetIndexAsync()
                    var index = await azureSearchService.CreateIndexForLogAsync(INDEX_NAME);

                    var indexer = azureSearchService.CreateIndexerForLog(
                        index.Name,
                        documentsPerBatch: 1);

                    var web3 = new Web3.Web3(BlockchainUrl);

                    var blockchainProcessor = web3.Processing.Logs.CreateProcessor(
                        action: log => indexer.IndexAsync(log),
                        criteria: log => AddressUtil.Current.AreAddressesTheSame(log.Address, "0x9edcb9a9c4d34b5d6a082c86cb4f117a1394f831"));

                    var cancellationTokenSource = new CancellationTokenSource();
                    await blockchainProcessor.ExecuteAsync(3146685, cancellationTokenSource.Token, 3146684);

                    await Task.Delay(5000); // allow time to index

                    Assert.Equal(2, await azureSearchService.CountDocumentsAsync(INDEX_NAME));
                }
                finally
                {
                    await azureSearchService.DeleteIndexAsync(INDEX_NAME);
                }
            }
        }
Exemplo n.º 14
0
        public async void ShouldBeAbleTransferTokensUsingTheHdWallet()
        {
            var wallet  = new Wallet(Words, Password);
            var account = wallet.GetAccount(0);

            var web3 = new Web3.Web3(account, _ethereumClientIntegrationFixture.GetWeb3().Client);

            ulong totalSupply      = 1000000;
            var   contractByteCode =
                "0x6060604052341561000f57600080fd5b604051602080610711833981016040528080519150505b60018054600160a060020a03191633600160a060020a0390811691909117918290556000838155911681526002602052604090208190555b505b6106a28061006f6000396000f300606060405236156100a15763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100a6578063095ea7b31461013157806318160ddd1461016757806323b872dd1461018c578063313ce567146101c857806370a08231146101f15780638da5cb5b1461022257806395d89b4114610251578063a9059cbb146102dc578063dd62ed3e14610312575b600080fd5b34156100b157600080fd5b6100b9610349565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156100f65780820151818401525b6020016100dd565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561013c57600080fd5b610153600160a060020a0360043516602435610380565b604051901515815260200160405180910390f35b341561017257600080fd5b61017a6103ed565b60405190815260200160405180910390f35b341561019757600080fd5b610153600160a060020a03600435811690602435166044356103f4565b604051901515815260200160405180910390f35b34156101d357600080fd5b6101db610510565b60405160ff909116815260200160405180910390f35b34156101fc57600080fd5b61017a600160a060020a0360043516610515565b60405190815260200160405180910390f35b341561022d57600080fd5b610235610534565b604051600160a060020a03909116815260200160405180910390f35b341561025c57600080fd5b6100b9610543565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156100f65780820151818401525b6020016100dd565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102e757600080fd5b610153600160a060020a036004351660243561057a565b604051901515815260200160405180910390f35b341561031d57600080fd5b61017a600160a060020a0360043581169060243516610649565b60405190815260200160405180910390f35b60408051908101604052601a81527f4578616d706c6520466978656420537570706c7920546f6b656e000000000000602082015281565b600160a060020a03338116600081815260036020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000545b90565b600160a060020a0383166000908152600260205260408120548290108015906104445750600160a060020a0380851660009081526003602090815260408083203390941683529290522054829010155b80156104505750600082115b80156104755750600160a060020a038316600090815260026020526040902054828101115b1561050457600160a060020a0380851660008181526002602081815260408084208054899003905560038252808420338716855282528084208054899003905594881680845291905290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a3506001610508565b5060005b5b9392505050565b601281565b600160a060020a0381166000908152600260205260409020545b919050565b600154600160a060020a031681565b60408051908101604052600581527f4649584544000000000000000000000000000000000000000000000000000000602082015281565b600160a060020a0333166000908152600260205260408120548290108015906105a35750600082115b80156105c85750600160a060020a038316600090815260026020526040902054828101115b1561063a57600160a060020a033381166000818152600260205260408082208054879003905592861680825290839020805486019055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060016103e7565b5060006103e7565b5b92915050565b600160a060020a038083166000908152600360209081526040808320938516835292905220545b929150505600a165627a7a72305820ec01add6c7f9d88976180c397e2a5b2e9f8fc1f95f5abb00e2a4c9dbf7bcfaf20029";
            var abi =
                "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]";

            var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, contractByteCode,
                                                                                          account.Address, new HexBigInteger(3000000), null, totalSupply);

            var standarErc20Service = new StandardTokenService(web3, receipt.ContractAddress);

            var pollingService = new TransactionReceiptPollingService(web3.TransactionManager);

            var transactionHash = await standarErc20Service.TransferRequestAsync(
                "0x98f5438cDE3F0Ff6E11aE47236e93481899d1C47", 10);

            var receiptSend = await pollingService.PollForReceiptAsync(transactionHash);

            var balance =
                await standarErc20Service.BalanceOfQueryAsync("0x98f5438cDE3F0Ff6E11aE47236e93481899d1C47");

            Assert.Equal(10, balance);
        }
        public async Task FilterLogs()
        {
            const string INDEX_NAME = "filter-logs";

            //surround with "using" so that anything in a buffer is sent on dispose
            //to clear the buffer manually - searchIndexProcessor.EventIndexer.SubmitPendingItemsAsync()
            using (var azureSearchService = new AzureSearchService(AzureSearchServiceName, _azureSearchApiKey))
            {
                try
                {
                    // create an index - if an existing index is required: azureSearchService.GetIndexAsync()
                    var index = await azureSearchService.CreateIndexForLogAsync(INDEX_NAME);

                    var indexer                 = azureSearchService.CreateIndexerForLog(index.Name, documentsPerBatch: 1);
                    var web3                    = new Web3.Web3(BlockchainUrl);
                    var blockchainProcessor     = web3.Processing.Logs.CreateProcessor(log => indexer.IndexAsync(log));
                    var cancellationTokenSource = new CancellationTokenSource();
                    await blockchainProcessor.ExecuteAsync(3146685, cancellationTokenSource.Token, 3146684);

                    await Task.Delay(5000); // allow time to index

                    Assert.Equal(25, await azureSearchService.CountDocumentsAsync(INDEX_NAME));
                }
                finally
                {
                    await azureSearchService.DeleteIndexAsync(INDEX_NAME);
                }
            }
        }
Exemplo n.º 16
0
        public async Task ShouldBeAbleToDeployAContractUsingPrivateKey()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var privateKey    = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var abi           =
                @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3.Web3(new Account(privateKey));

            var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), null,
                                                                                          multiplier);


            var contract = web3.Eth.GetContract(abi, receipt.ContractAddress);

            var multiplyFunction = contract.GetFunction("multiply");

            var result = await multiplyFunction.CallAsync <int>(7);

            Assert.Equal(49, result);
        }
Exemplo n.º 17
0
        public async Task Run()
        {
            var web3 = new Web3.Web3(TestConfiguration.BlockchainUrls.Infura.Rinkeby);
            var transactionHandler = new SimpleTransactionHandler();
            var handlers           = new HandlerContainer {
                TransactionHandler = transactionHandler
            };

            //only tx sent to this address
            var transactionFilter = TransactionFilter.To("0xc0e15e11306334258d61fee52a22d15e6c9c59e0");

            var filter = new FilterContainer(transactionFilter);

            var blockProcessor = BlockProcessorFactory.Create(
                web3,
                handlers,
                filter,
                processTransactionsInParallel: false);

            var processingStrategy  = new ProcessingStrategy(blockProcessor);
            var blockchainProcessor = new BlockchainProcessor(processingStrategy);

            var result = await blockchainProcessor.ExecuteAsync(2830143, 2830153);

            Assert.True(result);
            Assert.Equal(12, transactionHandler.TransactionsHandled.Count);
            Assert.Empty(transactionHandler.ContractCreationTransactionsHandled);
        }
Exemplo n.º 18
0
        public async Task ShouldBeAbleToDeployAContract()
        {
          var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
          var password = "******";
          var abi = @"[{""constant"":false,""inputs"":[{""name"":""a"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""r"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
          var byteCode = "0x606060405260405160208060ae833981016040528080519060200190919050505b806000600050819055505b5060768060386000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480631df4f144146037576035565b005b604b60048080359060200190919050506061565b6040518082815260200191505060405180910390f35b6000600060005054820290506071565b91905056";
          var multiplier = 7;
          var web3 = new Web3.Web3();
          var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, new HexBigInteger(60));
          Assert.True(unlockResult);

          var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, multiplier);

          var miningResult = await web3.Miner.Start.SendRequestAsync(6);
          Assert.True(miningResult);
          
          var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);

          while(receipt == null){
              Thread.Sleep(1000);
              receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
          }
          var contractAddress = receipt.ContractAddress;

          var contract = web3.Eth.GetContract(abi, contractAddress);

          var multiplyFunction = contract.GetFunction("multiply");

          var result = await multiplyFunction.CallAsync<int>(7);

          Assert.Equal(49, result);
        }
Exemplo n.º 19
0
        public async Task StartHere()
        {
            var web3 = new Web3.Web3(TestConfiguration.BlockchainUrls.Infura.Rinkeby);

            //create an in-memory context and repository factory
            var context     = new InMemoryBlockchainStorageRepositoryContext();
            var repoFactory = new InMemoryBlockchainStoreRepositoryFactory(context);

            //create our processor
            var processor = web3.Processing.Blocks.CreateBlockStorageProcessor(repoFactory);

            //if we need to stop the processor mid execution - call cancel on the token
            var cancellationToken = new CancellationToken();

            //crawl the required block range
            await processor.ExecuteAsync(
                toBlockNumber : new BigInteger(2830145),
                cancellationToken : cancellationToken,
                startAtBlockNumberIfNotProcessed : new BigInteger(2830144));

            Assert.Equal(2, context.Blocks.Count);
            Assert.Equal(25, context.Transactions.Count);
            Assert.Equal(5, context.Contracts.Count);
            Assert.Equal(55, context.AddressTransactions.Count);
            Assert.Equal(28, context.TransactionLogs.Count);
        }
Exemplo n.º 20
0
        public async void ShouldTransferWholeBalanceInEther()
        {
            var web3            = _ethereumClientIntegrationFixture.GetWeb3();
            var privateKey      = EthECKey.GenerateKey();
            var newAccount      = new Account(privateKey.GetPrivateKey());
            var toAddress       = newAccount.Address;
            var transferService = web3.Eth.GetEtherTransferService();

            var receipt = await web3.Eth.GetEtherTransferService()
                          .TransferEtherAndWaitForReceiptAsync(toAddress, 1000, 2);

            var balance = await web3.Eth.GetBalance.SendRequestAsync(toAddress);

            Assert.Equal(1000, Web3.Web3.Convert.FromWei(balance));

            var totalAmountBack =
                await transferService.CalculateTotalAmountToTransferWholeBalanceInEther(toAddress, 2);

            var web32       = new Web3.Web3(newAccount, web3.Client);
            var receiptBack = await web32.Eth.GetEtherTransferService()
                              .TransferEtherAndWaitForReceiptAsync(AccountFactory.Address, totalAmountBack, 2);

            var balanceFrom = await web32.Eth.GetBalance.SendRequestAsync(toAddress);

            Assert.Equal(0, Web3.Web3.Convert.FromWei(balanceFrom));
        }
Exemplo n.º 21
0
        public Web3.Web3 GetWeb3()
        {
            var web3 = new Web3.Web3(_ethereumClientIntegrationFixture.GetWeb3().TransactionManager.Account,
                                     _ethereumClientIntegrationFixture.GetHttpUrl(), LogManager.GetLogger <ILog>());

            return(web3);
        }
        public async Task ShouldBeAbleToTransferBetweenAccountsUsingManagedAccount()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var addressTo     = "0x13f022d72158410433cbd66f5dd8bf6d2d129924";
            var password      = "******";
            // A managed account is an account which is maintained by the client (Geth / Parity)
            var account = new ManagedAccount(senderAddress, password);
            var web3    = new Web3.Web3(account);

            //The transaction receipt polling service is a simple utility service to poll for receipts until mined
            var transactionPolling = (TransactionReceiptPollingService)web3.TransactionManager.TransactionReceiptService;

            var currentBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            //assumed client is mining already

            //When sending the transaction using the transaction manager for a managed account, personal_sendTransaction is used.

            var txnHash =
                await web3.TransactionManager.SendTransactionAsync(account.Address, addressTo, new HexBigInteger(20));

            var receipt = await transactionPolling.PollForReceiptAsync(txnHash);

            var newBalance = await web3.Eth.GetBalance.SendRequestAsync(addressTo);

            Assert.Equal(currentBalance.Value + 20, newBalance.Value);
        }
Exemplo n.º 23
0
        public static async Task TestTransferTokenSigning()
        {
            using (var trezorManager = await TrezorFactory.GetWindowsConnectedLedgerManagerAsync(GetPin))
            {
                await trezorManager.InitializeAsync();

                var signer = new TrezorExternalSigner(trezorManager, 0);

                var account = new ExternalAccount(signer);
                await account.InitialiseAsync();

                var rpcClient = new RpcClient(new Uri("http://localhost:8545"));
                account.InitialiseDefaultTransactionManager(rpcClient);
                var web3 = new Web3.Web3(account, rpcClient);
                var tx   = new TransferFunction()
                {
                    Nonce       = 10,
                    GasPrice    = 10,
                    Gas         = 21000,
                    To          = "0x689c56aef474df92d44a1b70850f808488f9769c",
                    Value       = 100,
                    FromAddress = "0x6A1D4583b83E5ef91EeA1E591aD333BD04853399"
                };

                var signature = await web3.Eth.GetContractTransactionHandler <TransferFunction>().SignTransactionAsync("0x6810e776880c02933d47db1b9fc05908e5386b96", tx);

                var web32 = new Web3.Web3(new Account("0x2e14c29aaecd1b7c681154d41f50c4bb8b6e4299a431960ed9e860e39cae6d29"));
                var signatureNethereum = await web32.Eth.GetContractTransactionHandler <TransferFunction>()
                                         .SignTransactionAsync("0x6810e776880c02933d47db1b9fc05908e5386b96", tx);

                System.Console.WriteLine("Trezor: " + signature);
                System.Console.WriteLine("Nethereum: " + signatureNethereum);
            }
        }
        public async Task <TransactionReceipt[]> SendTransactionsAsync(Web3.Web3 web3, string addressFrom,
                                                                       string pass, params Func <Task <string> >[] transactionsTask)
        {
            var result = await web3.Personal.UnlockAccount.SendRequestAsync(addressFrom, pass, new HexBigInteger(600000));

            if (result != true)
            {
                throw new Exception("Acccount not unlocked");
            }

            var txIds = new List <string>();

            foreach (var transactionTask in transactionsTask)
            {
                var txId = await transactionTask();

                txIds.Add(txId);
            }

            var receipts = new List <TransactionReceipt>();

            foreach (var txId in txIds)
            {
                receipts.Add(await GetTransactionReceipt(web3, txId));
            }

            return(receipts.ToArray());
        }
        public async Task <TransactionReceipt> SendTransactionAsync(Web3.Web3 web3, string addressFrom,
                                                                    string pass, Func <Task <string> > transactionTask)
        {
            var receitps = await SendTransactionsAsync(web3, addressFrom, pass, transactionTask);

            return(receitps[0]);
        }
Exemplo n.º 26
0
        public async Task WithCriteria()
        {
            var web3 = new Web3.Web3(TestConfiguration.BlockchainUrls.Infura.Rinkeby);

            //create an in-memory context and repository factory
            var context     = new InMemoryBlockchainStorageRepositoryContext();
            var repoFactory = new InMemoryBlockchainStoreRepositoryFactory(context);

            //create our processor - we're only interested in tx from a specific address
            var processor = web3.Processing.Blocks.CreateBlockStorageProcessor(repoFactory, configureSteps: steps => {
                steps.TransactionStep.SetMatchCriteria(t => t.Transaction.IsFrom("0x1cbff6551b8713296b0604705b1a3b76d238ae14"));
            });

            //if we need to stop the processor mid execution - call cancel on the token
            var cancellationToken = new CancellationToken();

            //crawl the required block range
            await processor.ExecuteAsync(
                toBlockNumber : new BigInteger(2830145),
                cancellationToken : cancellationToken,
                startAtBlockNumberIfNotProcessed : new BigInteger(2830144));

            Assert.Equal(2, context.Blocks.Count);
            Assert.Equal(2, context.Transactions.Count);
            Assert.Equal(4, context.TransactionLogs.Count);
        }
        public async Task OneEvent()
        {
            const string INDEX_NAME = "transfer-logs";

            //surround with "using" so that anything in a buffer is sent on dispose
            using (var azureSearchService = new AzureSearchService(AzureSearchServiceName, _azureSearchApiKey))
            {
                try
                {
                    //setup
                    var index = await azureSearchService.CreateIndexForEventLogAsync <TransferEvent_ERC20>(INDEX_NAME);

                    var indexer = azureSearchService.CreateIndexerForEventLog <TransferEvent_ERC20>(index.Name, documentsPerBatch: 1);

                    var web3 = new Web3.Web3(BlockchainUrl);
                    var blockchainProcessor     = web3.Processing.Logs.CreateProcessor <TransferEvent_ERC20>((transfer) => indexer.IndexAsync(transfer));
                    var cancellationTokenSource = new CancellationTokenSource();

                    //execute
                    await blockchainProcessor.ExecuteAsync(3146694, cancellationTokenSource.Token, 3146684);

                    //assert
                    await Task.Delay(5000); // allow time to index

                    Assert.Equal(19, await azureSearchService.CountDocumentsAsync(INDEX_NAME));
                }
                finally
                {
                    await azureSearchService.DeleteIndexAsync(INDEX_NAME);
                }
            }
        }
Exemplo n.º 28
0
        public async Task <Address> HandleAsync(GetAddress query)
        {
            var web3    = new Web3.Web3("https://remote.akroma.io");
            var balance = 0m;

            try
            {
                var block = await web3.Eth.GetBalance(query.Address);

                balance = block.Result;
            }
            catch
            {
                // ignored
            }


            var transactionCount = await _repository.GetAddressTransactionCountAsync(query.Address);

            var minedCount = await _repository.GetAddressMinedAsync(query.Address);

            var addressTo = await _repository.GetAddressToAsync(query.Address);

            var addressFrom = await _repository.GetAddressFromAsync(query.Address);

            return(new Address(query.Address, balance, minedCount, transactionCount, addressFrom.Count, addressFrom.Value, addressTo.Count, addressTo.Value));
        }
Exemplo n.º 29
0
        public override async Task <JObject> ExecuteAsync(IClient client)
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var privateKey    = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var abi           =
                @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3.Web3(new Account(privateKey), client);

            var receipt = await
                          web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, byteCode, senderAddress,
                                                                                    new HexBigInteger(900000), null, multiplier);

            var contract = web3.Eth.GetContract(abi, receipt.ContractAddress);

            var function         = contract.GetFunction("multiply");
            var transactionInput = function.CreateTransactionInput(senderAddress, null, null, 7);
            var signer           = new LegacyTransactionSigner();
            var nonce            = await web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress);

            var signedTransaction = signer.SignTransaction(privateKey, transactionInput.To, 0, nonce.Value,
                                                           LegacyTransaction.DEFAULT_GAS_PRICE, 900000,
                                                           transactionInput.Data);

            var traceTransaction = new TraceRawTransaction(client);

            return(await traceTransaction.SendRequestAsync(signedTransaction.EnsureHexPrefix(),
                                                           new[] { TraceType.vmTrace }, BlockParameter.CreateLatest()));
        }
Exemplo n.º 30
0
        public async Task ShouldBeAbleToDeployAContractUsingPersonalUnlock()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var password      = "******";
            var abi           =
                @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3.Web3(new ManagedAccount(senderAddress, password));

            //assumed client is mining already

            var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), null,
                                                                                          multiplier);


            var contract = web3.Eth.GetContract(abi, receipt.ContractAddress);

            var multiplyFunction = contract.GetFunction("multiply");

            var result = await multiplyFunction.CallAsync <int>(7);

            Assert.Equal(49, result);
        }
        public async Task <Tuple <bool, DateTime> > DoesHashExistInTxn(Diploma_model diploma)
        {
            try
            {
                var web3   = new Web3.Web3(infuraURL);
                var result = await web3.Eth.Transactions.GetTransactionByHash.SendRequestAsync(diploma.transactionHash);

                var result2 = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(result.BlockNumber);

                DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
                dtDateTime = dtDateTime.AddSeconds((long)result2.Timestamp.Value).ToLocalTime();
                if (result.Input.Contains(diploma.Hash))
                {
                    return(new Tuple <bool, DateTime>(true, dtDateTime));
                }
                else
                {
                    return(new Tuple <bool, DateTime>(false, DateTime.Now));
                }
            }
            catch (Exception)
            {
                // does not exist
                return(new Tuple <bool, DateTime>(false, DateTime.Now));
            }
        }
Exemplo n.º 32
0
 private async void BtnGetAccoutns_OnClick(object sender, RoutedEventArgs e)
 {
     var web3 = new Web3.Web3();
     var accounts = await web3.Eth.Accounts.SendRequestAsync();
     this.Dispatcher.Invoke(() => {
                                      txtAccounts.Text = string.Join(",", accounts);
     });
 }
Exemplo n.º 33
0
        public async Task ShouldBeAbleCallAndReadEventLogs()
        {
          var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
          var password = "******";
          
          var abi = @"[{'constant':false,'inputs':[{'name':'a','type':'int256'}],'name':'multiply','outputs':[{'name':'r','type':'int256'}],'type':'function'},{'inputs':[{'name':'multiplier','type':'int256'}],'type':'constructor'},{'anonymous':false,'inputs':[{'indexed':true,'name':'a','type':'int256'},{'indexed':true,'name':'sender','type':'address'},{'indexed':false,'name':'result','type':'int256'}],'name':'Multiplied','type':'event'}]";
          
          var byteCode = "0x6060604052604051602080610104833981016040528080519060200190919050505b806000600050819055505b5060ca8061003a6000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480631df4f144146037576035565b005b604b60048080359060200190919050506061565b6040518082815260200191505060405180910390f35b60006000600050548202905080503373ffffffffffffffffffffffffffffffffffffffff16827f841774c8b4d8511a3974d7040b5bc3c603d304c926ad25d168dacd04e25c4bed836040518082815260200191505060405180910390a380905060c5565b91905056";

          var multiplier = 7;
          
          var web3 = new Web3.Web3();
          
          var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, new HexBigInteger(120));
          Assert.True(unlockResult);

          var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), multiplier);
          var receipt = await MineAndGetReceiptAsync(web3, transactionHash);
          
          var contractAddress = receipt.ContractAddress;

          var contract = web3.Eth.GetContract(abi, contractAddress);

          var multiplyFunction = contract.GetFunction("multiply");

          var multiplyEvent = contract.GetEvent("Multiplied");

          var filterAll = await multiplyEvent.CreateFilterAsync();
          var filter7 = await multiplyEvent.CreateFilterAsync(7);
          
          transactionHash = await multiplyFunction.SendTransactionAsync(senderAddress, 7);
          transactionHash = await multiplyFunction.SendTransactionAsync(senderAddress, 8);
          
          receipt = await MineAndGetReceiptAsync(web3, transactionHash);

          
          var log = await multiplyEvent.GetFilterChanges<MultipliedEvent>(filterAll);
          var log7 = await multiplyEvent.GetFilterChanges<MultipliedEvent>(filter7);

          Assert.Equal(2, log.Count);
          Assert.Equal(1, log7.Count);
          Assert.Equal(7, log7[0].Event.MultiplicationInput);
          Assert.Equal(49, log7[0].Event.Result);
        
          

        }
Exemplo n.º 34
0
        public async Task ShouldBeAbleToDeployAContract()
        {
            var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
            var password = "******";
            var abi = @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""int256""}],""type"":""constructor""}]";
            var byteCode =
                "0x60606040526040516020806052833950608060405251600081905550602b8060276000396000f3606060405260e060020a60003504631df4f1448114601a575b005b600054600435026060908152602090f3";

            var multiplier = 7;

            var web3 = new Web3.Web3();
            var unlockAccountResult =
                await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, new HexBigInteger(120));
            Assert.True(unlockAccountResult);

            var transactionHash =
                await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, multiplier);

            var mineResult = await web3.Miner.Start.SendRequestAsync(6);

            Assert.True(mineResult);

            var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);

            while (receipt == null)
            {
                Thread.Sleep(5000);
                receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash);
            }

            mineResult = await web3.Miner.Stop.SendRequestAsync();
            Assert.True(mineResult);

            var contractAddress = receipt.ContractAddress;

            var contract = web3.Eth.GetContract(abi, contractAddress);

            var multiplyFunction = contract.GetFunction("multiply");

            var result = await multiplyFunction.CallAsync<int>(7);

            Assert.Equal(49, result);

        }
Exemplo n.º 35
0
        public async Task ShouldBeAbleToEncodeDecodeComplexInputOutput()
        {
          var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
          var password = "******";
          
          var abi = @"[{'constant':false,'inputs':[{'name':'key','type':'bytes32'},{'name':'name','type':'string'},{'name':'description','type':'string'}],'name':'StoreDocument','outputs':[{'name':'success','type':'bool'}],'type':'function'},{'constant':true,'inputs':[{'name':'','type':'bytes32'},{'name':'','type':'uint256'}],'name':'documents','outputs':[{'name':'name','type':'string'},{'name':'description','type':'string'},{'name':'sender','type':'address'}],'type':'function'}]";
          
          var byteCode = "0x6060604052610659806100126000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480634a75c0ff1461004457806379c17cc5146100fe57610042565b005b6100e86004808035906020019091908035906020019082018035906020019191908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050909091908035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509090919050506102c9565b6040518082815260200191505060405180910390f35b61011d600480803590602001909190803590602001909190505061025b565b6040518080602001806020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352868181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156101c65780601f1061019b576101008083540402835291602001916101c6565b820191906000526020600020905b8154815290600101906020018083116101a957829003601f168201915b50508381038252858181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156102495780601f1061021e57610100808354040283529160200191610249565b820191906000526020600020905b81548152906001019060200180831161022c57829003601f168201915b50509550505050505060405180910390f35b600060005060205281600052604060002060005081815481101561000257906000526020600020906003020160005b9150915050806000016000509080600101600050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60006060604051908101604052806020604051908101604052806000815260200150815260200160206040519081016040528060008152602001508152602001600081526020015060606040519081016040528085815260200184815260200133815260200150905060006000506000868152602001908152602001600020600050805480600101828181548183558181151161049257600302816003028360005260206000209182019101610491919061037f565b8082111561048d57600060008201600050805460018160011615610100020316600290046000825580601f106103b557506103f2565b601f0160209004906000526020600020908101906103f191906103d3565b808211156103ed57600081815060009055506001016103d3565b5090565b5b5060018201600050805460018160011615610100020316600290046000825580601f1061041f575061045c565b601f01602090049060005260206000209081019061045b919061043d565b80821115610457576000818150600090555060010161043d565b5090565b5b506002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161037f565b5090565b5b5050509190906000526020600020906003020160005b8390919091506000820151816000016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061050357805160ff1916838001178555610534565b82800160010185558215610534579182015b82811115610533578251826000505591602001919060010190610515565b5b50905061055f9190610541565b8082111561055b5760008181506000905550600101610541565b5090565b50506020820151816001016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106105b657805160ff19168380011785556105e7565b828001600101855582156105e7579182015b828111156105e65782518260005055916020019190600101906105c8565b5b50905061061291906105f4565b8082111561060e57600081815060009055506001016105f4565b5090565b505060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555050505060019150610651565b50939250505056";

        
          
          var web3 = new Web3.Web3();
          
          var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, new HexBigInteger(120));
          Assert.True(unlockResult);

          var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(byteCode, senderAddress, new HexBigInteger(900000));
          var receipt = await MineAndGetReceiptAsync(web3, transactionHash);
          
          var contractAddress = receipt.ContractAddress;

          var contract = web3.Eth.GetContract(abi, contractAddress);

          var storeFunction = contract.GetFunction("StoreDocument");
          var documentsFunction = contract.GetFunction("documents");

        
          transactionHash = await storeFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), null, "key1", "hello", "solidity is great");
          transactionHash = await storeFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), null,  "key1", "hello again", "ethereum is great");
          
          receipt = await MineAndGetReceiptAsync(web3, transactionHash);
          
          var result = await documentsFunction.CallDeserializingToObjectAsync<Document>("key1", 0);
          var result2 = await documentsFunction.CallDeserializingToObjectAsync<Document>("key1", 1);
        
           Assert.Equal("hello", result.Name);
           Assert.Equal("solidity is great", result.Description);
           
           Assert.Equal("hello again", result2.Name);
           Assert.Equal("ethereum is great", result2.Description);

        }
Exemplo n.º 36
0
 public DaoService(Web3.Web3 web3, string address)
 {
     this.web3 = web3;
     this.contract = web3.Eth.GetContract(abi, address);
 }
Exemplo n.º 37
0
 public PublicResolverService(Web3.Web3 web3, string address)
 {
     this.web3 = web3;
     this.contract = web3.Eth.GetContract(ABI, address);
 }