Web3js

在發送交易之前或不發送交易的情況下從智能合約互動中獲取數據

  • April 18, 2021

我與 ABI 簽訂了契約,目前正在 ropsten 網路上與它進行互動。

我有這個要求元遮罩簽署交易的功能,這是一個智能合約互動,我將一個 NFT 令牌轉移到另一個地址:

async function transferToken(index) {
   let address = document.getElementById("inputTransferAddress").value;
   const account = await getCurrentAccount();
   const tx = await MyContract.methods.transfertoken(address, index).send({ from: account })
   }
}

Metamask 要求我簽署交易,以及此智能合約互動的數據:

GAS FEE 0.000281
etc.

FUNCTION TYPE:Contract Interaction
HEX DATA: 68 BYTES
0x215e2325000000000000000000000000607065f59bdb0cdba95..........000078

是否可以在不將它們發送到 metamask 的情況下讀取此“十六進制數據”?

我想在 FUTURE 交易中執行此操作,因為我想使用原始交易製作可掃描的 QRCODE。

問題中的十六進制數據是data用於 Ethereun 智能合約的欄位。:

transfertoken(address, index)

  • 4 個字節用於雜湊transfertoken(address,index)字元串 - 選擇呼叫哪個智能合約函式
  • 256 位(32 字節)address
  • 256 字節(32 字節)index

您可以使用 Web3.js 的 ABI 編碼和解碼工具自己創建事務有效負載,這正是methods.xxxx.send內部所做的。

但是,您對未來交易的想法很可能基於錯誤的假設,因為不了解區塊鏈交易的工作原理。製作二維碼更容易進入使用者可以使用WalletConnect 連結進行交易的網頁。沒有支持從 QR 碼簽署原始交易的錢包,您的問題聽起來像XY 問題

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