Nethereum.Playground icon indicating copy to clipboard operation
Nethereum.Playground copied to clipboard

Example: Transactions Contract, generate txn input and sign in other server.

Open juanfranblanco opened this issue 5 years ago • 0 comments

using Nethereum.Web3;
using Nethereum.ABI.FunctionEncoding.Attributes;
using Nethereum.Contracts.CQS;
using Nethereum.Util;
using Nethereum.Web3.Accounts;
using Nethereum.Hex.HexConvertors.Extensions;
using Nethereum.Contracts;
using Nethereum.Contracts.Extensions;
using System;
using System.Numerics;
using System.Threading;
using System.Threading.Tasks;

public class FunctionMessageSigning
{

	[Function("transfer", "bool")]
	public class TransferFunction : FunctionMessage
	{
		[Parameter("address", "_to", 1)]
		public string To { get; set; }

		[Parameter("uint256", "_value", 2)]
		public BigInteger TokenAmount { get; set; }
	}

	///*** THE MAIN PROGRAM ***
	public static async Task Main()
	{
		
				 var url = "http://testchain.nethereum.com:8545";
        var web3 = new Web3(url);

// ### Signing a Function / Deployment message online / offline
        var contractAddress = "0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe";
        var receiverAddress = "0x1245695669a9FD93d5F28D9Ec85E40f4cb697BAe";
        var transferHandler = web3.Eth.GetContractTransactionHandler<TransferFunction>();

        var transfer = new TransferFunction()
        {
            To = receiverAddress,
            TokenAmount = 100
        };

				// all other values
				//transfer.Nonce
				//transfer.GasPrice etc
				//to make it fully offline
				//estimate gas
        var transactionInput = await transferHandler.CreateTransactionInputEstimatingGasAsync(contractAddress, transfer);
				//save to file, whatever.
        
				// other computer offline / online.
				var privateKey = "0x7580e7fb49df1c861f0050fae31c2224c6aba908e116b8da44ee8cd927b990b0";
        var account = new Account(privateKey);
				
        var web32 = new Web3(account, url);
				//if nonce is not provided / gas price etc will go to the chain to complete these
				web32.TransactionManager.SendTransactionAsync(transactionInput);

	}
}

juanfranblanco avatar Mar 08 '21 15:03 juanfranblanco