I want to create a signed transaction using C#, which will later be used by Nethereum via JSON-RPC to call eth_sendRawTransaction.
I have the raw transaction and the private key, now how do I sign the data with the key?
I want to create a signed transaction using C#, which will later be used by Nethereum via JSON-RPC to call eth_sendRawTransaction.
I have the raw transaction and the private key, now how do I sign the data with the key?
Nethereum now supports offline transaction signing, so there is no longer a need to use EdgeJs or similar to run node scripts inside the .NET environment.
To expand the other response, to provide offline transaction signing in Nethereum you can do the following:
First, you will need your private key, and sender address. You can retrieve the sender address from your private key using Nethereum.Core.Signing.Crypto.EthECKey.GetPublicAddress(privateKey); if you only have the private key.
var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
Now using web3 first you will need to retrieve the total number of transactions of your sender address.
var web3 = new Web3();
var txCount = await web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress);
The txCount will be used as the nonce to sign the transaction.
Now using web3 again, you can build an encoded transaction as following:
var encoded = web3.OfflineTransactionSigning.SignTransaction(privateKey, receiveAddress, 10, txCount.Value);
If you need to include the data and gas there are overloads for it.
You can verify an encoded transaction:
Assert.True(web3.OfflineTransactionSigning.VerifyTransaction(encoded));
Or get the sender address from an encoded transaction:
web3.OfflineTransactionSigning.GetSenderAddress(encoded);
To send the encoded transaction you will "SendRawTransaction"
var txId = await web3.Eth.Transactions.SendRawTransaction.SendRequestAsync("0x" + encoded);
You can see this example on the unit test
Or a "real" implementation on the Game sample