Metamask
使用 web3 的元交易
我只是想知道。元交易是否與原始交易不同,原始交易由使用者在前端簽名並發送到部署交易的後端?
sendRawTransaction()
元交易是不同的,因為如果使用者簽署交易並將其轉發到元交易中繼,該中繼將其廣播到網路(元交易的目的是通過使無乙太賬戶與智能合約互動來降低採用率。基本上,另一個帳戶充當轉發交易的中繼並承擔交易費用(gas)的成本。
**範例:**一個無乙太幣賬戶
account_x
想要通過一個 funded 的 meta-tx 中繼所有者向一個合約account_y
( ) 發送交易。MyContract.myMethod()``account_z
一世。
account_x
從他想要執行的智能合約交易中提取字節碼var txdata = MyContract.myMethod().encodeABI();
ii.
account_x
用他的私鑰簽署消息sha3(txdata)
var signature = await web3.eth.personal.sign(message, account_x);
iii.
account_x
將以下資訊發送到中繼POST https://metatx-relay.net/sendtx { "txdata": txdata, "from": account_x, "to": account_y, "msg": message, "signature": signature }
iv. 中繼後端獲取消息並檢查簽名
var accountRecovered = web3.eth.accounts.recover(req.body.message,req.body.signature) if(accountRecovered == req.body.from) { // good to go }
account_y
v. 中繼後端使用它的資金賬戶將交易發送到 MyContract ( )account_z
web3.eth.sendTransaction({ from: account_z, to: req.body.to, data: req.body.txdata }).then(function(receipt){ ... });
**警告:**這是一個非常簡化的流程!!!
- 不可能
msg.sender
_交易由中繼發送和支付,因此無法使用
msg.sender
智能合約中的別名來辨識原始發送者account_x
。
- 元交易中繼是中心化的,交易請求可能會被審查
建立一個具有獎勵機制的中繼網路將是我相信交易請求被隨機分配給中繼的方式。
- 列入白名單的帳戶。
參考:
- 感謝 Austin Griffith的工作:具有獎勵機制(經濟激勵)和白名單地址的元交易中繼網路的工作原型。