public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] Models.NewData contract, TraceWriter log) { // You need to have the geth running while running this code. command: c:\geth\>geth --testnet var _getAddress = "./geth.ipc"; var hashedContent = Hash(contract.Content); var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); // this will leave the account unlucked for 2 minutes Nethereum.Hex.HexTypes.HexBigInteger accountUnlockTime = new Nethereum.Hex.HexTypes.HexBigInteger(120); var accountPublicKey = "ACCOUNT_PUBLIC_KEY"; var accountPassword = "******"; // Unlock the caller's account with the given password var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(accountPublicKey, accountPassword, accountUnlockTime); var abi = @"[{""constant"":true,""inputs"":[],""name"":""Url"",""outputs"":[{""name"":"""",""type"":""string""}],""payable"":false,""stateMutability"":""view"",""type"":""function""},{""constant"":false,""inputs"":[{""name"":""url"",""type"":""string""},{""name"":""hashContent"",""type"":""string""}],""name"":""AddPostContract"",""outputs"":[],""payable"":false,""stateMutability"":""nonpayable"",""type"":""function""},{""constant"":true,""inputs"":[],""name"":""HashContent"",""outputs"":[{""name"":"""",""type"":""string""}],""payable"":false,""stateMutability"":""view"",""type"":""function""}]"; var byteCode = "6060604052341561000f57600080fd5b6104578061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638d21df8c1461005c578063a2da9d08146100ea578063b0e4a8601461018a575b600080fd5b341561006757600080fd5b61006f610218565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100af578082015181840152602081019050610094565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156100f557600080fd5b610188600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506102b6565b005b341561019557600080fd5b61019d6102e8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101dd5780820151818401526020810190506101c2565b50505050905090810190601f16801561020a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102ae5780601f10610283576101008083540402835291602001916102ae565b820191906000526020600020905b81548152906001019060200180831161029157829003601f168201915b505050505081565b81600090805190602001906102cc929190610386565b5080600190805190602001906102e3929190610386565b505050565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b505050505081565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106103c757805160ff19168380011785556103f5565b828001600101855582156103f5579182015b828111156103f45782518255916020019190600101906103d9565b5b5090506104029190610406565b5090565b61042891905b8082111561042457600081600090555060010161040c565b5090565b905600a165627a7a72305820eb77a018bf2acdb7f9ea0a12c1ca4c23cfc215fa49cbdb1152c79814db0dbef60029"; var compiledContract = web3.Eth.GetContract(abi, byteCode); var function = compiledContract.GetFunction("AddPostContract"); var ret = function.CallAsync <>(contract.Url, hashedContent); }
static void Main(string[] args) { //Web3 web3 = new Web3(); var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient("./geth.ipc"); Web3 web3 = new Web3(ipcClient); //Web3 web3 = new Web3("https://mainnet.infura.io/hZeiirtHOLO11uuyLySi"); ulong startBlockNumber = 0; ulong endBlockNumber = 100 * 1000; DateTime dtStart = DateTime.Now; for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++) // BLOCKS { var taskGetBlockWithTx = GetBlockWithTx(web3, blockNumber); taskGetBlockWithTx.Wait(1000); var block = taskGetBlockWithTx.Result; if (blockNumber % 1000 == 0) { Console.Write("."); } } Console.WriteLine(); DateTime dtEnd = DateTime.Now; TimeSpan tsElapsed = dtEnd - dtStart; double fElapsedMinutes = tsElapsed.TotalMinutes; Console.WriteLine("fElapsedMinutes:\t" + fElapsedMinutes.ToString()); Console.WriteLine("Press Enter to exit..."); Console.ReadLine(); }
public async Task <ActionResult> ContractDetails(string transactionHash, string fromAddress) { var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); var reciept = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); var contractAddress = "Contract Creation Transaction not mined yet."; if (reciept != null) { contractAddress = reciept.ContractAddress; //var contract = web3.Eth.GetContract(_abi, contractAddress); //reciept. } var model = new ContractDetailsModel() { TransactionHash = transactionHash, ContractAddress = contractAddress, //ContractBalance = "0", //ContractPrice = "10", //DestinationAddress = "0xblahblah", State = "Created", FromAddress = fromAddress }; return(View(model)); }
static Web3 GetWeb3Client() { //Web3 web3 = new Web3(); //Web3 web3 = new Web3("https://mainnet.infura.io/hZeiirtHOLO11uuyLySi"); var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient("./geth.ipc"); Web3 web3 = new Web3(ipcClient); return(web3); }
public async Task <ActionResult> GetState(string contractAddress) { var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); var contract = web3.Eth.GetContract(_abi, contractAddress); var abortFunction = contract.GetFunction("getState"); var result = await abortFunction.CallAsync <int>(); var model = new GetStateViewModel() { ContractState = MapToContractStateEnum(result) }; return(View(model)); }
public async Task <ActionResult> CreateContract(RouteCoinContractModel model) { var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); var gas = new Nethereum.Hex.HexTypes.HexBigInteger(300000); var balance = new Nethereum.Hex.HexTypes.HexBigInteger(120); // Unlock the caller's account with the given password var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(model.BuyerPublicKey, model.BuyerAccountPassword, _accountUnlockTime); var transactionHash = await web3.Eth.DeployContract.SendRequestAsync(_abi, _byteCode, model.BuyerPublicKey, gas, model.ContractPrice * 10, model.DestinationAddress, model.ContractGracePeriod, model.ContractPrice); return(RedirectToAction("ContractCreated", new { transactionHash = transactionHash })); }
public async Task <ActionResult> PostDestinationAddressRouteConfirmed(DestinationAddressRouteConfirmedViewModel model) { var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); var contract = web3.Eth.GetContract(_abi, model.ContractAddress); var destinationAddressRouteFoundFunction = contract.GetFunction("destinationAddressRouteConfirmed"); // Unlock the caller's account with the given password var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(model.CallerAddress, model.CallerPassword, _accountUnlockTime); var transactionHash = await destinationAddressRouteFoundFunction.SendTransactionAsync(model.CallerAddress); model.TransactionHash = transactionHash; model.Message = "Route Confrimation Transaction Sent."; return(View("DestinationAddressRouteConfirmed", model)); }
public async Task <ActionResult> AbortContract(AbortViewModel model) { var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); var contract = web3.Eth.GetContract(_abi, model.ContractAddress); var abortFunction = contract.GetFunction("abort"); //var result = await abortFunction.CallAsync<int>(); // Unlock the caller's account with the given password var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(model.CallerAddress, model.CallerPassword, _accountUnlockTime); var transactionHash = await abortFunction.SendTransactionAsync(model.CallerAddress); model.TransactionHash = transactionHash; model.Message = "Abort Transaction Sent."; return(View("Abort", model)); }
public async Task <ActionResult> ContractCreated(string fromAddress, string transactionHash, string contractAddress) { if (string.IsNullOrEmpty(contractAddress)) { var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var web3 = new Web3(ipcClient); var reciept = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(transactionHash); if (reciept != null) { contractAddress = reciept.ContractAddress; } } return(View(new ContractCreatedModel() { TransactionHash = transactionHash, ContractAddress = contractAddress, FromAddress = fromAddress })); }
static void Main(string[] args) { var resultIdentity = string.Empty; var ipcClient = new Nethereum.JsonRpc.IpcClient.IpcClient(_getAddress); var shh = new ShhNewIdentity(ipcClient); Task.Run(async() => { resultIdentity = await shh.SendRequestAsync(); }).GetAwaiter().GetResult(); Console.WriteLine("Identity:"); Console.WriteLine(resultIdentity); var topics = new[] { "0x68656c6c6f20776f726c64" }; var loop = true; while (true) { var command = Console.ReadLine(); switch (command) { case "post": Task.Run(async() => { var parameters = new[] { new { from = resultIdentity, to = "0x0415ea5c7448f7eacd93f01352c8d26222ba0a4d36dfabcb4d38e9f02e4391381f16b8e0d45cd8246c84e308d8699f5e1b26faa9be99a092b94e1e274367f9b8bc", topics = topics, payload = "0x68656c6c6f20776f726c64", ttl = "0x64", priority = "0x64" }, }; var rpcRequest = new EdjCase.JsonRpc.Core.RpcRequest(73, "shh_post", parameters); var resultPost = await shh.Client.SendRequestAsync(rpcRequest); Console.WriteLine("shh_post has errors:"); Console.WriteLine(resultPost.HasError.ToString()); }).GetAwaiter().GetResult(); break; case "get": Task.Run(async() => { var parameters = new[] { "0x7" }; var rpcRequest = new EdjCase.JsonRpc.Core.RpcRequest(73, "shh_getMessages", parameters); var resultPost = await shh.Client.SendRequestAsync(rpcRequest); Console.WriteLine("shh_getMessages has errors:"); Console.WriteLine(resultPost.HasError.ToString()); Console.WriteLine($"Count: {resultPost.Result?.Count()}"); }).GetAwaiter().GetResult(); break; case "filter": Task.Run(async() => { var parameters = new[] { new { to = resultIdentity, topics = topics, } }; var rpcRequest = new EdjCase.JsonRpc.Core.RpcRequest(73, "shh_newFilter", parameters); var resultPost = await shh.Client.SendRequestAsync(rpcRequest); Console.WriteLine("shh_newFilter has errors:"); Console.WriteLine(resultPost.HasError.ToString()); Console.WriteLine($"Count: {resultPost.Result?.Count()}"); }).GetAwaiter().GetResult(); break; default: loop = false; break; } } Console.WriteLine("Enter to quit"); Console.ReadLine(); }