Transaktion mit Metamask signieren (nicht senden)

Ich verwende den folgenden Code, um eine Transaktion in meinem Backend zu signieren und zu senden:

var txData = {
    nonce: nonceHex,
    gasPrice: gasPriceHex,
    gas: gasHex,
    data: contractData,
    from: ctx.mainAccount,
};

var tx = new EthTx(txData);
tx.sign(new Buffer(pKey, 'hex'));
var txHex = tx.serialize().toString('hex');

web3.eth.sendSignedTransaction(`0x${txHex}`)
    .on('receipt', receipt => { ... }); 

Jetzt möchte ich anstelle des privaten Schlüssels hier Metamask verwenden, um die Transaktion nur zu signieren (und nicht zu senden).

Ist es möglich? Mit anderen Worten, hat Metamask eine Möglichkeit, etwas Ähnliches zu tun, wie tx.sign(new Buffer(pKey, 'hex'));ich möchte, dass mein Backend die signierte Transaktion sendet, nicht Metamask.

Ich habe versucht, web3.eth.personal wie folgt zu verwenden:

//backend
var tx = new EthTx(txData);
var txHash = tx.hash();
var txUnsignedHex = txHash.toString('hex');

//browser
web3.personal.sign('0x' + txUnsignedHex, ethAccount, (err, result) => {  ... } );

Aber das Ergebnis, das ich bekomme, funktioniert nicht, wenn ich web3.eth.sendSignedTransaction ausführe

Antworten (1)

MetaMask unterstützt derzeit nicht das Signieren, aber das Senden einer Transaktion nicht, obwohl die Idee bereits vorgeschlagen wurde:

https://github.com/MetaMask/metamask-extension/issues/2506

Sie könnten Ihren Anwendungsfall dort teilen, um ihm zu helfen, Priorität zu erlangen.