Ethereum Offline-Unterzeichner c#

Gibt es eine C#-Version des Offline-Unterzeichners für die Transaktion. wie ethereumjs-tx

var Tx = require('ethereumjs-tx') var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')

var rawTx = { nonce: '0x00', gasPrice: '0x09184e72a000', gasLimit: '0x2710', to: '0x0000000000000000000000000000000000000000', value: '0x00', data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057' }

var tx = new Tx(rawTx) tx.sign(privateKey)

var serializedTx = tx.serialize() console.log(serializedTx.toString('hex'))

brauche ähnliches in c # ich versuche nethereum diese implementierung funktioniert nicht

Wie kann ich eine Transaktion mit c# signieren?

var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"; var senderAddress = "0x12890d2cce102216644c59daE5baed380d84830c";

Wenn Sie jetzt web3 verwenden, müssen Sie zuerst die Gesamtzahl der Transaktionen Ihrer Absenderadresse abrufen.

var web3 = neues Web3 (); var txCount = await web3.Eth.Transactions.GetTransactionCount.SendRequestAsync(senderAddress);

Der txCount wird als Nonce zum Signieren der Transaktion verwendet.

Wenn Sie jetzt wieder web3 verwenden, können Sie eine verschlüsselte Transaktion wie folgt erstellen:

var encoded = web3.OfflineTransactionSigning.SignTransaction(privateKey, ReceiveAddress, 10, txCount.Value);

Wenn Sie die Daten und das Gas einschließen müssen, gibt es dafür Überladungen.

Sie können eine verschlüsselte Transaktion überprüfen: Assert.True(web3.OfflineTransactionSigning.VerifyTransaction(encoded));

Oder erhalten Sie die Absenderadresse aus einer verschlüsselten Transaktion:

web3.OfflineTransactionSigning.GetSenderAddress (codiert);

Um die verschlüsselte Transaktion zu senden, geben Sie "SendRawTransaction" ein.

var txId = await web3.Eth.Transactions.SendRawTransaction.SendRequestAsync("0x" + codiert);

Antworten (2)

Im Grunde hast du dir deine Frage selbst beantwortet.

https://nethereum.readthedocs.io/en/latest/introduction/web3/

Sie haben eine Offline-Transaktionssignierungsfunktion, aber die Dokumente wurden nicht aktualisiert. Der Methodenaufruf sieht jetzt anders aus, weil er in den statischen Kontext oder so ähnlich verschoben wurde:

Web3.OfflineTransactionSigner.SignTransaction.....

Weitere Informationen finden Sie hier: https://github.com/Nethereum/Nethereum/issues/151

Wenn Sie einen Unterzeichner basierend auf secp256k1lib anstelle von Bouncy Castle möchten, möchten Sie wahrscheinlich den Unterzeichner aus dem Nethermind-Projekt verwenden:

Proxy für secp256k1lib: https://github.com/tkstanczak/nethermind/tree/master/src/Nethermind/Nethermind.Secp256k1

Tatsächliche Verwendung mit den Besonderheiten des Ethereum-Protokolls, auf die Sie sich möglicherweise als Grundlage für Ihre Lösung beziehen sollten: https://github.com/tkstanczak/nethermind/blob/master/src/Nethermind/Nethermind.Core/Crypto/EthereumSigner.cs