public async Task <ITransationData> PriKeyQueryAsync(string gethConnectionUrl, IndexDBContext dbContext, ITransationData transationData, string ID, Func <ITransationData, IndexDB.IndexDBs, ITransationData> requiredData) { string IdPhotoData = null; //从索引数据库拿到交易哈希列表字符串 var dataIndex = await GetTxHashFormIndexDBAsnyc(dbContext, ID); //拆分成交易哈希字符串数字 string[] TxHashs = dataIndex.TransationHash.Trim().Split(' '); //使用交易哈希得到私链中保存的图片数据片段 var web3 = new Web3Geth(gethConnectionUrl); foreach (var Txhash in TxHashs) { var result = await web3.Eth.Transactions .GetTransactionByHash .SendRequestAsync(Txhash); //拼接片段 IdPhotoData += new Nethereum.Hex.HexConvertors .HexUTF8StringConvertor() .ConvertFromHex(result.Input); } //将数据转换成传输模型 transationData.IdPhotoData = IdPhotoData; transationData.ID = dataIndex.ID; transationData.Address = dataIndex.AccountAddress; //如果没有委托,直接返回 if (requiredData == null) { return(transationData); } //使用委托使得用户可以实现传输模型接口,自定义需要获得的数据 transationData = requiredData.Invoke(transationData, dataIndex); return(transationData); }
public async Task <bool> ShouldSignAndSendRawTransaction() { var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"; var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c"; var receiveAddress = "0x13f022d72158410433cbd66f5dd8bf6d2d129924"; var web3 = new Web3Geth(); var txCount = await web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress); var encoded = Web3.OfflineTransactionSigner.SignTransaction(privateKey, receiveAddress, 10, txCount.Value); Assert.True(Web3.OfflineTransactionSigner.VerifyTransaction(encoded)); Debug.WriteLine(Web3.OfflineTransactionSigner.GetSenderAddress(encoded)); Assert.Equal(senderAddress.EnsureHexPrefix().ToLower(), Web3.OfflineTransactionSigner.GetSenderAddress(encoded).EnsureHexPrefix().ToLower()); var txId = await web3.Eth.Transactions.SendRawTransaction.SendRequestAsync("0x" + encoded); await web3.Miner.Start.SendRequestAsync(4); var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txId); while (receipt == null) { Thread.Sleep(1000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txId); } await web3.Miner.Stop.SendRequestAsync(); Assert.Equal(txId, receipt.TransactionHash); return(true); }
public async Task ProdContract() { var account = "0x12890d2cce102216644c59daE5baed380d84830c"; var pass = "******"; var byteCode = "0x606060405260405161069d38038061069d833981016040528080518201919060200150505b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055508060036000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009e57805160ff19168380011785556100cf565b828001600101855582156100cf579182015b828111156100ce5782518260005055916020019190600101906100b0565b5b5090506100fa91906100dc565b808211156100f657600081815060009055506001016100dc565b5090565b50505b506105918061010c6000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480632d202d24146100685780634ba200501461009b578063893d20e81461011b578063a0e67e2b14610159578063d5d1e770146101b557610063565b610002565b346100025761008360048080359060200190919050506101df565b60405180821515815260200191505060405180910390f35b34610002576100ad600480505061027a565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561010d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b346100025761012d6004805050610336565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b346100025761016b6004805050610365565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b34610002576101c760048050506103f7565b60405180821515815260200191505060405180910390f35b60003373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156102415760009050610275565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555060019050610275565b919050565b602060405190810160405280600081526020015060036000508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103275780601f106102fc57610100808354040283529160200191610327565b820191906000526020600020905b81548152906001019060200180831161030a57829003601f168201915b50505050509050610333565b90565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610362565b90565b602060405190810160405280600081526020015060006000508054806020026020016040519081016040528092919081815260200182805480156103e857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103b4575b505050505090506103f4565b90565b60003373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610459576000905061058e565b600060005080548060010182818154818355818115116104ab578183600052602060002091820191016104aa919061048c565b808211156104a6576000818150600090555060010161048c565b5090565b5b5050509190906000526020600020900160005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055506001905061058e565b9056"; var abi = @"[{""constant"":false,""inputs"":[{""name"":""nextOwner"",""type"":""address""}],""name"":""setNextOwner"",""outputs"":[{""name"":""set"",""type"":""bool""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getProduct"",""outputs"":[{""name"":""product"",""type"":""string""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getOwner"",""outputs"":[{""name"":""owner"",""type"":""address""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getOwners"",""outputs"":[{""name"":""owners"",""type"":""address[]""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[],""name"":""confirmOwnership"",""outputs"":[{""name"":""confirmed"",""type"":""bool""}],""payable"":false,""type"":""function""},{""inputs"":[{""name"":""productDigest"",""type"":""string""}],""type"":""constructor""}]"; var w3 = new Web3Geth(new ManagedAccount(account, pass)); //var accUnlocked = await w3.Personal.UnlockAccount.SendRequestAsync(account, pass, new HexBigInteger(1000)); //issue ran out of gas (putting 900 * 1000 instead of 200 * 1000 fixes this) var contractHash = await w3.Eth.DeployContract.SendRequestAsync(abi, byteCode, account, new HexBigInteger(900 * 1000), "My product"); var receipt = await w3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(contractHash); while (receipt == null) { await Task.Delay(1000); receipt = await w3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(contractHash); } var contract = w3.Eth.GetContract(abi, receipt.ContractAddress); var code = await w3.Eth.GetCode.SendRequestAsync(receipt.ContractAddress); Assert.True(!string.IsNullOrEmpty(code) && code.Length > 3); var function = contract.GetFunction("getProduct"); var result = await function.CallAsync <string>(); Assert.Equal("My product", result); }
public async Task ShouldSendSignTransaction() { var contractByteCode = "0x6060604052604060405190810160405280600a81526020017f4d756c7469706c6965720000000000000000000000000000000000000000000081526020015060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008c57805160ff19168380011785556100bd565b828001600101855582156100bd579182015b828111156100bc57825182600050559160200191906001019061009e565b5b5090506100e891906100ca565b808211156100e457600081815060009055506001016100ca565b5090565b5050604051602080610303833981016040528080519060200190919050505b806000600050819055505b506101e2806101216000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806340490a901461004f57806375d0c0dc14610072578063c6888fa1146100ed5761004d565b005b61005c6004805050610119565b6040518082815260200191505060405180910390f35b61007f6004805050610141565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156100df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610103600480803590602001909190505061012b565b6040518082815260200191505060405180910390f35b60006000600050549050610128565b90565b60006000600050548202905061013c565b919050565b60016000508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101da5780601f106101af576101008083540402835291602001916101da565b820191906000526020600020905b8154815290600101906020018083116101bd57829003601f168201915b50505050508156"; var abi = @"[{""constant"":true,""inputs"":[],""name"":""getMultiplier"",""outputs"":[{""name"":""d"",""type"":""uint256""}],""type"":""function""},{""constant"":true,""inputs"":[],""name"":""contractName"",""outputs"":[{""name"":"""",""type"":""string""}],""type"":""function""},{""constant"":false,""inputs"":[{""name"":""a"",""type"":""uint256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""uint256""}],""type"":""function""},{""inputs"":[{""name"":""multiplier"",""type"":""uint256""}],""type"":""constructor""}]"; var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"; var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c"; var web3 = new Web3Geth(new Account(privateKey)); var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, contractByteCode, senderAddress, new HexBigInteger(900000), null, 7); var contractAddress = receipt.ContractAddress; var contract = web3.Eth.GetContract(abi, contractAddress); var multiplyFunction = contract.GetFunction("multiply"); var transactions = new Func <Task <string> >[] { () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 69), () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 7), () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 8), () => multiplyFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), 8) }; var transactionsReceipts = await web3.TransactionManager.TransactionReceiptService.SendRequestsAsync(transactions); Assert.Equal(4, transactionsReceipts.Count); }
public static async Task <bool> Login(string username, string password) { try { await using (db = new DropCoinDbContext()) { User = await db.Users.FirstOrDefaultAsync(p => p.UserName == username); Account = new ManagedAccount(User.DrpAddress, password); Web3 = new Web3Geth(Account, RpcUrl); if (await Web3.Personal.UnlockAccount.SendRequestAsync(Account.Address, Account.Password, 120)) { return(true); } return(false); } } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); return(false); } }
public async System.Threading.Tasks.Task <ActionResult> CreateAsync(EthereumContractViewModel ethereumContractViewModelViewModel) { string fileHash; if (ModelState.IsValid) { using (var md5 = MD5.Create()) { var hash = md5.ComputeHash(ethereumContractViewModelViewModel.FileUpload.InputStream); fileHash = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); } var senderAddress = "0xCBE60Eaea0cB3fb07348c72F68D8ec9a604aa941"; var password = "******"; var abi = @"[{'constant':true,'inputs':[],'name':'getActive','outputs':[{'name':'','type':'bool'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'_active','type':'bool'}],'name':'setActive','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[],'name':'getDocument','outputs':[{'name':'','type':'string'}],'payable':false,'stateMutability':'view','type':'function'},{'inputs':[{'name':'_requester','type':'address'},{'name':'_recipient','type':'address'},{'name':'_document','type':'string'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'}]"; var byteCode = "608060405234801561001057600080fd5b506040516103443803806103448339810160409081528151602080840151928401516001805461010060a860020a031916610100600160a060020a03808716919091029190911790915560028054600160a060020a03191691861691909117905590930180519193909161008a9160009190840190610093565b5050505061012e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100d457805160ff1916838001178555610101565b82800160010185558215610101579182015b828111156101015782518255916020019190600101906100e6565b5061010d929150610111565b5090565b61012b91905b8082111561010d5760008155600101610117565b90565b6102078061013d6000396000f3006080604052600436106100555763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416629ebb10811461005a578063acec338a14610083578063b6f3f14d1461009f575b600080fd5b34801561006657600080fd5b5061006f610129565b604080519115158252519081900360200190f35b34801561008f57600080fd5b5061009d6004351515610132565b005b3480156100ab57600080fd5b506100b4610145565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100ee5781810151838201526020016100d6565b50505050905090810190601f16801561011b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60015460ff1690565b6001805460ff1916911515919091179055565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156101d15780601f106101a6576101008083540402835291602001916101d1565b820191906000526020600020905b8154815290600101906020018083116101b457829003601f168201915b50505050509050905600a165627a7a723058200425d4931a5ca733f20ef9228d18cb0c8d3e62f794101a25813ca3fcb04d8d070029"; var account = new ManagedAccount(senderAddress, password); var web3 = new Web3(account); web3.TransactionManager.DefaultGas = BigInteger.Parse("290000"); web3.TransactionManager.DefaultGasPrice = Transaction.DEFAULT_GAS_PRICE; var webGeth = new Web3Geth(account); webGeth.TransactionManager.DefaultGas = BigInteger.Parse("290000"); webGeth.TransactionManager.DefaultGasPrice = Transaction.DEFAULT_GAS_PRICE; var unlockAccount = await web3.Personal.UnlockAccount.SendRequestAsync(senderAddress, password, 120); await webGeth.Miner.Start.SendRequestAsync(6); var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new Nethereum.Hex.HexTypes.HexBigInteger(120), new Nethereum.Hex.HexTypes.HexBigInteger(120), "0xCBE60Eaea0cB3fb07348c72F68D8ec9a604aa941", "0xCBE60Eaea0cB3fb07348c72F68D8ec9a604aa941", fileHash); var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); while (receipt == null) { Thread.Sleep(5000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); } var mineResult = await webGeth.Miner.Stop.SendRequestAsync(); var contractAddress = receipt.ContractAddress; var contract = web3.Eth.GetContract(abi, contractAddress); EthereumContractViewModel EthereumContractViewModel = new EthereumContractViewModel() { ContractID = ethereumContractViewModelViewModel.ContractID }; _EthereumContractRepository.Add(EthereumContractViewModel); return(RedirectToAction("Index")); } return(View(ethereumContractViewModelViewModel)); }
public EthereumOracleConnector(string secret, string endpoint, string contractAddress) { this.contractAddress = contractAddress; account = new Account(secret); web3 = new Web3Geth(new Account(secret), endpoint); contract = web3.Eth.GetContract(abi, contractAddress); }
protected virtual async Task <TransactionReceipt> MineAndGetReceiptAsync(Web3 web3, string transactionHash, bool isMining) { bool miningResult = true; var web3Geth = new Web3Geth(); if (isMining) { miningResult = await web3Geth.Miner.Start.SendRequestAsync(20); // geth 1.6+ this is not working //miningResult.Should().BeTrue(); } var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); while (receipt == null) { Thread.Sleep(1000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(AccountAddress, PassPhrase, 120); unlockResult.Should().BeTrue(); } if (isMining) { miningResult = await web3Geth.Miner.Stop.SendRequestAsync(20); //miningResult.Should().BeTrue(); } return(receipt); }
public async Task <BigInteger> GetTransactionCountAsync(string senderAddress) { Web3Geth Web3 = new Web3Geth(url); var result = await Web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress); return(result.Value); }
public static void BindCommonServices(this ContainerBuilder ioc) { ioc.Register(x => { var resolver = x.Resolve <IComponentContext>(); var settings = resolver.Resolve <BaseSettings>(); var web3 = new Web3(settings.EthereumUrl); web3.Client.OverridingRequestInterceptor = new SignatureInterceptor(resolver.Resolve <ISignatureApi>(), web3, settings); return(web3); }).SingleInstance(); ioc.Register(x => { var resolver = x.Resolve <IComponentContext>(); var web3 = new Web3Geth(resolver.Resolve <BaseSettings>().EthereumUrl); return(web3); }).SingleInstance(); ioc.RegisterType <ContractService>().As <IContractService>(); ioc.RegisterType <PaymentService>().As <IPaymentService>(); ioc.RegisterType <TransactionService>().As <ITransactionService>(); ioc.RegisterType <UserContractQueueService>().As <IUserContractQueueService>().SingleInstance(); ioc.BindApiProviders(); }
async Task <string> DeployContract() { var web3 = new Web3(_providerUrl); web3.TransactionManager.DefaultGas = BigInteger.Parse(_defaultGas); web3.TransactionManager.DefaultGasPrice = Nethereum.Signer.Transaction.DEFAULT_GAS_PRICE; var unlockAccountResult = await web3.Personal.UnlockAccount.SendRequestAsync(_senderAddress, _password, _unlockAccountDuration); var web3Geth = new Web3Geth(web3.Client); var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(_abi, _byteCode, _senderAddress, GetSmartContractArgs()); var mineResult = await web3Geth.Miner.Start.SendRequestAsync(6); var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); while (receipt == null) { Thread.Sleep(2000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); } mineResult = await web3Geth.Miner.Stop.SendRequestAsync(); return(receipt.ContractAddress); }
public async void ShouldBeAbleToReplaceContractToAccessState() { if (_ethereumClientIntegrationFixture.EthereumClient == EthereumClient.Geth) { var account = EthereumClientIntegrationFixture.GetAccount(); var web3 = new Web3Geth(account, _ethereumClientIntegrationFixture.GetHttpUrl()); var deploymentMessage = new SimpleStorageDeployment() { Owner = EthereumClientIntegrationFixture.AccountAddress }; var deploymentHandler = web3.Eth.GetContractDeploymentHandler <SimpleStorageDeployment>(); var deploymentReceipt = await deploymentHandler.SendRequestAndWaitForReceiptAsync(deploymentMessage); var stateChanges = new Dictionary <string, StateChange>(); stateChanges.Add(deploymentReceipt.ContractAddress, new StateChange() { Code = SimpleStorage2DeployedByteCode.EnsureHexPrefix() }); var result = await web3.GethEth.Call.SendRequestAsync( new GetOwnerFunction().CreateTransactionInput(deploymentReceipt.ContractAddress), BlockParameter.CreateLatest(), stateChanges); var output = new GetOwnerFunctionOutput(); output = output.DecodeOutput(result); Assert.True(output.Owner.IsTheSameAddress(EthereumClientIntegrationFixture.AccountAddress)); } }
public async Task <bool> SaveDataAsync(string gethConnectionUrl, IAccountUnlock accuntUnlock, IndexDBContext dbContext, IndexDBs indexDB, ITransationData transationData) { ISuitableBlockData suitableData = new SuitableBlockData(31744); //获取适合保存到以太坊区块中的字符串长度 var photoStrings = suitableData.GetArrayListForSaving(transationData.IdPhotoData); //保存到以太坊网络中 var web3 = new Web3Geth(gethConnectionUrl); string resultHashs = null; foreach (var photoString in photoStrings) { var input = new TransactionInput(new HexUTF8String(photoString).HexValue, new HexBigInteger("0xffffff"), transationData.Address); await accuntUnlock.UnlockAccountAsync(gethConnectionUrl, transationData.Address, transationData.Password); resultHashs += await web3.Eth.Transactions .SendTransaction .SendRequestAsync(input) + " "; } //将交易哈希与个人信息保存到索引数据库 var isSuccessful = await SaveTxHashToIndexDB(dbContext, indexDB, transationData, resultHashs); if (!isSuccessful) { return(false); } return(true); }
private static async Task TestService(string fromAddress, string password) { var account = new ManagedAccount(fromAddress, password); var web3 = new Web3Geth(account, Endpoint); bool deployNewContract = true; string contractAddress = null; if (deployNewContract) { var gasForDeployContract = new HexBigInteger(3000000); Console.WriteLine("Deploying contract"); contractAddress = await SimpleStorageContractService.DeployContractAsync(web3, fromAddress, 1, "mstack.nl", null, gasForDeployContract); Console.WriteLine($"Deploying contract done, address = {contractAddress}"); } // Create an instance from the SimpleStorageContractService service which abstracts all calls to the SmartContract. ISimpleStorageContractService service = new SimpleStorageContractService(web3, contractAddress); var setNumberResult = await service.ExecuteTransactionAsync(srv => srv.SetNumberAsync(fromAddress, 500)); var getNumberValue = await service.GetNumberCallAsync(fromAddress); Console.WriteLine($"The stored number value is '{getNumberValue}'."); var setStringResult = await service.ExecuteTransactionAsync(srv => srv.SetStringAsync(fromAddress, "mstack.nl test")); var getStringValue = await service.GetStringCallAsync(fromAddress); Console.WriteLine($"The stored string value is '{getStringValue}'."); }
public EthereumConnector(string oracleAddress, string endpoint) { web3 = new Web3Geth(endpoint); contract = web3.Eth.GetContract(abi, oracleAddress); logDepositEvent = contract.GetEvent("logDeposit"); logWithdrawEvent = contract.GetEvent("logWithdrawal"); }
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(new ManagedAccount(senderAddress, password), ClientFactory.GetClient()); var transactionPolling = new TransactionReceiptPollingService(web3); var web3Geth = new Web3Geth(ClientFactory.GetClient()); await web3Geth.Miner.Start.SendRequestAsync(); var contractAddress = await transactionPolling.DeployContractAndGetAddressAsync( () => web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), multiplier) ); await web3Geth.Miner.Stop.SendRequestAsync(); var contract = web3.Eth.GetContract(abi, contractAddress); var multiplyFunction = contract.GetFunction("multiply"); var result = await multiplyFunction.CallAsync <int>(7); Assert.Equal(49, result); }
public async void ShouldDeployUsingMultipleParameters() { var contractByteCode = "0x606060408181528060bd833960a090525160805160009182556001556095908190602890396000f3606060405260e060020a60003504631df4f1448114601c575b6002565b34600257608360043560015460005460408051918402909202808252915173ffffffffffffffffffffffffffffffffffffffff33169184917f841774c8b4d8511a3974d7040b5bc3c603d304c926ad25d168dacd04e25c4bed9181900360200190a3919050565b60408051918252519081900360200190f3"; var abi = @"[{'constant':false,'inputs':[{'name':'a','type':'int256'}],'name':'multiply','outputs':[{'name':'r','type':'int256'}],'payable':false,'type':'function'},{'inputs':[{'name':'multiplier','type':'int256'},{'name':'another','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 web3 = new Web3Geth(ClientFactory.GetClient()); var gethTester = GethTesterFactory.GetLocal(web3); var transaction = await gethTester.Web3.Eth.DeployContract.SendRequestAsync(abi, contractByteCode, gethTester.Account, new HexBigInteger(900000), 7, 8); var receipt = await gethTester.GetTransactionReceipt(transaction); var contract = web3.Eth.GetContract(abi, receipt.ContractAddress); //get the function by name var multiplyFunction = contract.GetFunction("multiply"); //do a function call (not transaction) and get the result var callResult = await multiplyFunction.CallAsync <int>(69); Assert.Equal(3864, callResult); }
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(new Account(privateKey), ClientFactory.GetClient()); var web3Geth = new Web3Geth(ClientFactory.GetClient()); await web3Geth.Miner.Start.SendRequestAsync(); var transactionPolling = new TransactionReceiptPollingService(web3); //assumed client is mining already var contractAddress = await transactionPolling.DeployContractAndGetAddressAsync( () => web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), multiplier) ); await web3Geth.Miner.Stop.SendRequestAsync(); var contract = web3.Eth.GetContract(abi, contractAddress); var multiplyFunction = contract.GetFunction("multiply"); var result = await multiplyFunction.CallAsync <int>(7); Assert.Equal(49, result); }
public async Task <TransactionReceipt> TransferEther(string fromAddr, string password, string toAddr, decimal amount) { var web3 = new Web3Geth(_ethUrl); var receipt = await _ethereumServices.TransferFund(web3, fromAddr, password, toAddr, amount); return(receipt); }
public async Task <string> IncreaseDisapprovalsAsync(string hash, string contractAddress, string contractABI) { string result = string.Empty; for (int i = 0; i <= ITERATIONS_TO_RETRY; i++) { try { var account = new Account(MASTER_PRIVATEKEY); var web3 = new Web3Geth(account, RPC_CLIENT); var contract = web3.Eth.GetContract(contractABI, contractAddress); var function = contract.GetFunction("IncreaseDisapprovals"); Bytes32TypeEncoder enc = new Bytes32TypeEncoder(); byte[] bhash = hash.HexToBytes(2, hash.Length); BigInteger gasPrice = UnitConversion.Convert.ToWei(new BigDecimal(41), UnitConversion.EthUnit.Gwei); HexBigInteger hgasPrice = new HexBigInteger(gasPrice); result = await function.SendTransactionAsync(MASTER_ADDRESS, new HexBigInteger(150000), hgasPrice, new HexBigInteger(0), new object[] { bhash }); break; } catch (Exception ex) { telemetryClient.TrackException(ex); telemetryClient.TrackTrace($"Retry #{i}, EXCEPTION: {ex.Message}. STACKTRACE: {ex.StackTrace}"); Thread.Sleep(TIME_TO_SLEEP_FOR_RETRY); continue; } } return(result); }
//Create new account, returns account address //Triba se riješit plaintexta public async Task CreateNew(int userID, string password) { var web3 = new Web3Geth(); await web3.Personal.NewAccount.SendRequestAsync(password); //save account and password on new database }
public async Task <string> CreateAccountAsync(string gethConnectionUrl, string password) { Web3Geth web3 = new Web3Geth(gethConnectionUrl); var result = await web3.Personal.NewAccount.SendRequestAsync(password); return(result); }
public Contract(string senderAddress, string password) { this.AccountAddress = senderAddress; this.Password = password; this.Web3 = new Web3Geth(); }
public async Task <string> NewAccountAsync(string Password) { Web3Geth Web3 = new Web3Geth(url); var result = await Web3.Personal.NewAccount.SendRequestAsync(Password); return(result); }
public static async void Registration(string username, string password) { try { Web3 = new Web3Geth(RpcUrl); var address = await Web3.Personal.NewAccount.SendRequestAsync(password); await using (db = new DropCoinDbContext()) { var newUser = new Users() { UserName = username, Password = password, DrpAddress = address }; await db.Users.AddAsync(newUser); await db.SaveChangesAsync(); } MessageBox.Show($"Регистрация прошла успешно.", "Информация", MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception e) { MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); } }
private async Task VerificaExistenciaSmartContract() { if (contractAddress == string.Empty) { account = new ManagedAccount(senderAddress, password); geth = new Web3Geth(account, "http://localhost:8501"); try { var transactionHash = await geth.Eth.DeployContract.SendRequestAsync(abi, bytecode, senderAddress, new Nethereum.Hex.HexTypes.HexBigInteger(900000), 5); var receipt = await geth.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); while (receipt == null) { Thread.Sleep(5000); receipt = await geth.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); } contractAddress = receipt.ContractAddress; } catch (Exception chingadamadre) { Console.WriteLine("Message: " + chingadamadre.Message); Console.WriteLine("InnerException: " + chingadamadre.InnerException); Console.WriteLine("Source: " + chingadamadre.Source); } } }
static void Main(string[] args) { _dic = args.Where(arg => arg != "DeployApp.csproj") .Aggregate(new Dictionary <string, string>(), (dic, arg) => { dic.Add(arg.Split("=")[0], arg.Split("=")[1]); return(dic); }); //EV.Clear(); EV.WalletAddress = _dic["-wa"]; EV.WalletPassword = _dic["-wp"]; if (!_dic.ContainsKey("-afn")) { _dic.Add("-afn", "Admin"); } if (!_dic.ContainsKey("-aln")) { _dic.Add("-aln", "Admin"); } if (_dic.ContainsKey("-rcp")) { EV.RcpClient = _dic["-rcp"]; } if (_dic.ContainsKey("-lib")) { EV.LibraryAddress = _dic["--lib"]; } if (_dic.ContainsKey("-gas")) { EV.Gas = new HexBigInteger(_dic["-gas"]); } _web3 = new Web3Geth(EV.GetNotNull(EV.DOCCHAIN_RCP_CLIENT)); _gas = new HexBigInteger(EV.GetNotNull(EV.DOCCHAIN_GAS)); admin = new[] { _dic["-al"], _dic["-ap"], _dic["-afn"], _dic["-aln"], _dic.ContainsKey("-ai") ? _dic["-ai"] : " " }; WriteLog("============ Deploy Contract App ===============", clear: true); WriteLog("\n\n------------ Library Deploying ------------------\n"); if (_dic.ContainsKey("--lib")) { WriteLog("\nUse deployed library\n" + $">>> Library Address: {EV.LibraryAddress}"); } else { DeployLibrary().Wait(); } WriteLog("\n\n------------ Contract Deploying ------------------\n"); DeployContract().Wait(); WriteLog("\n==================== Done ======================"); Console.ReadKey(); }
public async Task ShouldIntereceptAndSendRawTransaction() { var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"; var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c"; var receiveAddress = "0x13f022d72158410433cbd66f5dd8bf6d2d129924"; var web3 = new Web3Geth(); var transactionInterceptor = new TransactionRequestToOfflineSignedTransactionInterceptor(senderAddress, privateKey, web3); web3.Client.OverridingRequestInterceptor = transactionInterceptor; var txId = await web3.Eth.Transactions.SendTransaction.SendRequestAsync(new RPC.Eth.DTOs.TransactionInput() { From = senderAddress, To = receiveAddress, Value = new Hex.HexTypes.HexBigInteger(10) }); await web3.Miner.Start.SendRequestAsync(4); var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txId); while (receipt == null) { Thread.Sleep(1000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(txId); } await web3.Miner.Stop.SendRequestAsync(); Assert.Equal(txId, receipt.TransactionHash); }
private static async Task TestService(string fromAddress, string password) { var account = new ManagedAccount(fromAddress, password); var web3 = new Web3Geth(account); var gas = new HexBigInteger(900000); Console.WriteLine("DeployContract"); string contractAddress = await UUIDProviderContractService.DeployContractAsync(web3, fromAddress, null, gas); IUUIDProviderContractService service = new UUIDProviderContractService(web3, contractAddress); byte[] uuid1 = await service.GenerateUUID4CallAsync(fromAddress, gas); var guid1 = new Guid(uuid1); Console.WriteLine($"guid1 = {guid1}"); string trans = await service.GenerateUUID4Async(fromAddress, gas); var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(trans); while (receipt == null) { Thread.Sleep(1000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(trans); } byte[] uuid2 = await service.GenerateUUID4CallAsync(fromAddress, gas); var guid2 = new Guid(uuid2); Console.WriteLine($"guid2 = {guid2}"); }
public async Task ShouldOutputAllData() { var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c"; var password = "******"; var abi = @"[{""constant"":false,""inputs"":[{""name"":""val"",""type"":""int256""}],""name"":""multiply"",""outputs"":[{""name"":""d"",""type"":""int256""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""customerName"",""type"":""string""},{""name"":""mobileNumber"",""type"":""int256""},{""name"":""serviceProvider"",""type"":""string""}],""name"":""addCustomer"",""outputs"":[{""name"":"""",""type"":""bool""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""getAllCustomers"",""outputs"":[{""name"":""mobile"",""type"":""int256[]""},{""name"":""customerName"",""type"":""bytes32[]""},{""name"":""serviceProvider"",""type"":""bytes32[]""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[{""name"":""mobileNumber"",""type"":""int256""}],""name"":""get"",""outputs"":[{""name"":""mobile"",""type"":""int256""},{""name"":""customerName"",""type"":""bytes32""},{""name"":""serviceProvider"",""type"":""bytes32""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""mobileNumber"",""type"":""int256""}],""name"":""getCustomersByMobileNumber"",""outputs"":[{""name"":""mobile"",""type"":""uint256""},{""name"":""customerName"",""type"":""bytes32""},{""name"":""serviceProvider"",""type"":""bytes32""}],""payable"":false,""type"":""function""},{""inputs"":[],""type"":""constructor""}]"; var byteCode = "606060405260006001556104f1806100176000396000f3606060405260e060020a60003504631df4f144811461004a5780634f5d64ce146100675780637da67ba814610121578063846719e0146102e15780638babdb681461034a575b610002565b346100025760076004350260408051918252519081900360200190f35b34610002576103746004808035906020019082018035906020019191908080601f0160208091040260200160405190810160405280939291908181526020018383808284375050604080516020604435808b0135601f81018390048302840183019094528383529799893599909860649850929650919091019350909150819084018382808284375094965050505050505060408051606081018252600060208201819052918101829052838152610448855b6020015190565b34610002576040805160208082018352600080835283518083018552818152845180840186528281528551808501875283815286518086018852848152875180870189528581528851606081018a5286815296870186905286890186905285549851610388999597949693949293919290869080591061019e5750595b9080825280602002602001820160405280156101b5575b509450856040518059106101c65750595b9080825280602002602001820160405280156101dd575b509350856040518059106101ee5750595b908082528060200260200182016040528015610205575b509250600091505b858260ff1610156104e3576002600050600060006000508460ff168154811015610002579060005260206000209001600050548152602080820192909252604090810160002081516060810183528154808252600183015494820194909452600290910154918101919091528651909250869060ff8516908110156100025760209081029091018101919091528101518451859060ff851690811015610002576020908102909101015260408101518351849060ff851690811015610002576020908102909101015260019091019061020d565b34610002576004357f61626300000000000000000000000000000000000000000000000000000000007f53330000000000000000000000000000000000000000000000000000000000005b60408051938452602084019290925282820152519081900360600190f35b3461000257600080546004358252600260208190526040909220600181015492015490919061032c565b604080519115158252519081900360200190f35b604051808060200180602001806020018481038452878181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018481038352868181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050018481038252858181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001965050505050505060405180910390f35b60208201526104568361011a565b604082015260008054600181018083558281838015829011610499576000838152602090206104999181019083015b808211156104df5760008155600101610485565b5050506000928352506020808320909101869055948152600280865260409182902083518155958301516001808801919091559290910151940193909355509092915050565b5090565b50929791965094509250505056"; var web3 = new Web3Geth(new ManagedAccount(senderAddress, password)); var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(1999990)); var receipt = await WaitForReceiptAsync(web3, transactionHash); var contractAddress = receipt.ContractAddress; var contract = web3.Eth.GetContract(abi, contractAddress); var addCustomerFunction = contract.GetFunction("addCustomer"); var getCustomersByMobileNumberFunction = contract.GetFunction("getCustomersByMobileNumber"); var resultHash = await addCustomerFunction.SendTransactionAsync(senderAddress, new HexBigInteger(900000), new HexBigInteger(0), "Mahesh", 111, "Airtel"); receipt = await WaitForReceiptAsync(web3, resultHash); var results = await getCustomersByMobileNumberFunction.CallDeserializingToObjectAsync <CustomerData>(111); Assert.Equal(results.customerName, "Mahesh"); var getAllCustomers = contract.GetFunction("getAllCustomers"); var results2 = await getAllCustomers.CallDeserializingToObjectAsync <AllCustomerData>(); }