Contract-Invocation

USDT 的 eth_call 命令中的數據欄位是什麼?

  • February 12, 2020

我正在嘗試使用**eth_call**將USDT **(TetherToken)**從一個帳戶發送到另一個帳戶(儘管我知道這eth_call只是模擬此類交易)。在這方面一切都很清楚,只是數據參數有點模棱兩可。據我所知,它必須是合約的編碼值和其他一些參數。在檢查了許多網頁後,我發現這個值是 ABI-Encoded 並且是這個連結中提到的 Contract 的最後一個字節:

000000000000000000000000000000000000000000000000000000174876e800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a546574686572205553440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045553445400000000000000000000000000000000000000000000000000000000

現在,我的問題是:

  1. 使用此程式碼作為data值是否足以執行eth_call
  2. 上面的值是一個十六進制值。但是文件中給出的範例使用較短的數據值,例如0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675HEX,但格式較短。應用什麼樣的編碼來準備這樣的最終數據值?
  3. 除了契約簽名之外,還有哪些其他參數必須包含在數據價值創造中?
  4. 我找到了一個將契約 JSON 轉換為 ABI 編碼格式的網站。在本網站粘貼TetherToken合約 JSON 並按下解析後,出現了一些新欄位。其中之一是_initialSupply。其他欄位是明確的,並且它們的值是可用的。但我不明白_initialSupply這裡到底是什麼,我在哪裡可以找到它?

我希望你能幫助我找到我的問題的答案。抱歉問了太多問題…

我認為你混淆了不同的事情:

您粘貼的字元串000000000000000000000000000000000000000000000000000000174876e80000...是用於呼叫合約建構子的參數。

  1. 數據參數被傳遞給合約。契約可以以他想要的任何方式解釋它。但通常 Solidity 合約遵循ABI 規範
  2. 你從哪裡得到這個值?我無法在 USDT 中找到它。
  3. 您通常傳遞函式選擇器和所有參數。
  4. “解析”按鈕下的第一個選擇允許選擇您要呼叫的函式,它顯示下面的參數。預設情況下,它選擇建構子,_initialSupply 是參數之一。

例如,如果您使用它呼叫 a9059cbb00000000000000000000000012345678123456781234567812345678123456780000000000000000000000000000000000000000000000000000000000000017它會被解釋為:

  • a9059cbb:傳輸選擇器(地址,uint256)
  • 0000000000000000000000001234567812345678123456781234567812345678: 接受者
  • 0000000000000000000000000000000000000000000000000000000000000017: 代幣數量

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