Json-Rpc

如何使用 C# 簽署交易?

  • March 12, 2018

我想使用 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);

你可以在單元測試中看到這個例子

或遊戲範例上的“真實”實現

引用自:https://ethereum.stackexchange.com/questions/3823