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; //a managed account uses personal_sendTransanction with the given password, this way we don't need to unlock the account for a certain period of time var account = new ManagedAccount(senderAddress, password); //using the specific geth web3 library to allow us manage the mining. var web3 = new Geth.Web3Geth(account); var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, multiplier); var miningResult = await web3.Miner.Start.SendRequestAsync(6); 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); }
public async Task ShouldBeAbleToCallAndReadEventLogs() { 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; //a managed account uses personal_sendTransanction with the given password, this way we don't need to unlock the account for a certain period of time var account = new ManagedAccount(senderAddress, password); //using the specific geth web3 library to allow us manage the mining. var web3 = new Geth.Web3Geth(account); // start mining await web3.Miner.Start.SendRequestAsync(6); var gas = new HexBigInteger(1100000); var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, byteCode, senderAddress, new HexBigInteger(900000), null, multiplier); 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); var transactionHash = await multiplyFunction.SendTransactionAsync(senderAddress, gas, null, 7); receipt = await multiplyFunction.SendTransactionAndWaitForReceiptAsync(senderAddress, gas, null, null, 8); var miningResult = await web3.Miner.Stop.SendRequestAsync(); 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); }
public async Task ShouldBeAbleToDeployAContract() { /*var senderAddress = "0xacF5dc45172202D2Ed9721AA48030A9d0FB0f0b8"; * var password = "******";*/ var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c"; senderAddress = "0xacF5dc45172202D2Ed9721AA48030A9d0FB0f0b8"; var password = "******"; var abi = @"[{'constant':false,'inputs':[{'name':'val','type':'int256'}],'name':'multiply','outputs':[{'name':'d','type':'int256'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'inputs':[{'name':'multiplier','type':'int256'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'}]"; var byteCode = "0x6060604052341561000f57600080fd5b6040516020806100f283398101604052808051906020019091905050806000819055505060b1806100416000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631df4f144146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60008054820290509190505600a165627a7a723058200dfd1138ee1b70e240253d56f9253b3c82bc9f1058e3cb18c2cf7a86691d60b60029"; var multiplier = 7; /* Localhost * var account = new ManagedAccount(senderAddress, password);*/ var privateKey = "0x410A096CB9A795B5AF3BC77008916B5B42DF4BC7F2C07F882E01042ECED1437D"; var account = new Account(privateKey); var web3 = new Geth.Web3Geth(account, "https://ropsten.infura.io/v3/1fd409b1b2df4a6cae70090e46ec91c5"); try { var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, byteCode, senderAddress, new Hex.HexTypes.HexBigInteger(900000), null, multiplier); var contractAddress = receipt.ContractAddress; var contract = web3.Eth.GetContract(abi, contractAddress); var multiplyFunction = contract.GetFunction("multiply"); var result = await multiplyFunction.CallAsync <int>(7); File.WriteAllText("d:\\eth.txt", "" + result); Console.WriteLine(result + ""); Assert.AreEqual(49, result); } catch (Exception e) { File.WriteAllText("D:\\h.txt", e.ToString()); Console.Read(); } }
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"; //a managed account uses personal_sendTransanction with the given password, this way we don't need to unlock the account for a certain period of time var account = new ManagedAccount(senderAddress, password); //using the specific geth web3 library to allow us manage the mining. var web3 = new Geth.Web3Geth(account); 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); }
public async Task <TransactionReceipt> MineAndGetReceiptAsync(Geth.Web3Geth web3, string transactionHash) { var miningResult = await web3.Miner.Start.SendRequestAsync(6); var receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); while (receipt == null) { Thread.Sleep(1000); receipt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); } miningResult = await web3.Miner.Stop.SendRequestAsync(); Assert.True(miningResult); return(receipt); }
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'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'inputs':[{'name':'multiplier','type':'int256'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'}]"; var byteCode = "0x6060604052341561000f57600080fd5b6040516020806100f283398101604052808051906020019091905050806000819055505060b1806100416000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631df4f144146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60008054820290509190505600a165627a7a723058200dfd1138ee1b70e240253d56f9253b3c82bc9f1058e3cb18c2cf7a86691d60b60029"; var multiplier = 7; //a managed account uses personal_sendTransanction with the given password, this way we don't need to unlock the account for a certain period of time var account = new ManagedAccount(senderAddress, password); //using the specific geth web3 library to allow us manage the mining. var web3 = new Geth.Web3Geth(account); var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(abi, byteCode, senderAddress, new HexBigInteger(3000000), null, multiplier); //assumed we are mining already, no need to manage it using Nethereum // start mining // await web3.Miner.Start.SendRequestAsync(6); 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); }
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; //a managed account uses personal_sendTransanction with the given password, this way we don't need to unlock the account for a certain period of time var account = new ManagedAccount(senderAddress, password); //using the specific geth web3 library to allow us manage the mining. var web3 = new Geth.Web3Geth(account); // start mining await web3.Miner.Start.SendRequestAsync(6); var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(abi, byteCode, senderAddress, new Hex.HexTypes.HexBigInteger(900000), null, multiplier); var 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); }