签署交易而不用元掩码广播它(不使用私钥)

Sign transaction without broadcasting it with metamask (not using private key)

我正在尝试使用元掩码在不广播的情况下签署交易。我已经尝试过 web3js 和 etherjs (eth_signTransaction) 但都没有用。如何做到这一点?

我认为 opensea 正在对消息进行签名,然后将其用于交易。他们是怎么做到的?

  1. 使用 web3js。我试过这个。但是我得到

MetaMask - RPC Error: Method not supported

const signedTx = await web3.eth.signTransaction(tx, accounts[0])
  1. 使用 etherjs。我试过这个。但是我得到

Error: signing transactions is unsupported (operation="signTransaction", code=UNSUPPORTED_OPERATION

const signedTx = await signer.signTransaction(tx)

Metamask 目前不支持用于签署交易的 RPC 方法。请参阅 GitHub 讨论他们为何选择不实施它的问题:https://github.com/MetaMask/metamask-extension/issues/3475

编辑:

I think opensea is signing message and then using it for transaction. How did they do this?

OpenSea 允许以无气体方式铸造的方式实际上非常简单:他们不会铸造 NFT,直到有人购买它。然后,OpenSea 使用其部署的合约中存在的所有者 'bypass' 自己铸造 NFT。