如何使用 C# 簽署交易?
我想使用 C# 創建一個簽名交易,稍後 Nethereum 將通過 JSON-RPC 使用它來呼叫 eth_sendRawTransaction。
我有原始交易和私鑰,現在如何使用密鑰對數據進行簽名?
要擴展其他響應,在 Nethereum 中提供離線交易簽名,您可以執行以下操作:
首先,您將需要您的私鑰和發件人地址。
Nethereum.Core.Signing.Crypto.EthECKey.GetPublicAddress(privateKey);
如果您只有私鑰,您可以從您的私鑰中檢索發件人地址。
var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"; var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";
現在首先使用 web3,您需要檢索發件人地址的交易總數。
var web3 = new Web3(); var txCount = await web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress);
txCount 將用作對交易進行簽名的 nonce。
現在再次使用 web3,您可以建構一個編碼事務,如下所示:
var encoded = web3.OfflineTransactionSigning.SignTransaction(privateKey, receiveAddress, 10, txCount.Value);
如果您需要包含數據和氣體,則會出現過載。
您可以驗證編碼交易:
Assert.True(web3.OfflineTransactionSigning.VerifyTransaction(encoded));
或者從編碼交易中獲取發件人地址:
web3.OfflineTransactionSigning.GetSenderAddress(encoded);
要發送編碼交易,您將“SendRawTransaction”
var txId = await web3.Eth.Transactions.SendRawTransaction.SendRequestAsync("0x" + encoded);
你可以在單元測試中看到這個例子
或遊戲範例上的“真實”實現