跳至主要内容

Contract(合約)

Contract 資源提供與以太坊區塊鏈上智能合約互動的操作。

操作

Read Contract(讀取合約)

呼叫智能合約上的唯讀(view/pure)函數。

所需憑證:Ethereum RPC

參數

  • Contract Address(合約地址)(必需):智能合約地址
  • ABI(必需):合約 ABI(應用程式二進位介面)JSON 格式
  • Function Name(函數名稱)(必需):要呼叫的函數名稱
  • Function Arguments(函數參數)(可選):函數的參數,JSON 陣列格式
  • Block(區塊)(可選):要查詢的區塊號(預設:latest)

範例

{
"contractAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"abi": "[{\"name\":\"balanceOf\",\"type\":\"function\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}]}]",
"functionName": "balanceOf",
"args": "[\"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\"]"
}

輸出

{
"result": "1000000000000000000"
}

Write Contract(寫入合約)

在智能合約上執行狀態變更函數。

所需憑證:Ethereum RPC、Ethereum Account

參數

  • Contract Address(合約地址)(必需):智能合約地址
  • ABI(必需):合約 ABI JSON 格式
  • Function Name(函數名稱)(必需):要呼叫的函數名稱
  • Function Arguments(函數參數)(可選):函數的參數,JSON 陣列格式
  • Value(價值)(可選):隨交易發送的 ETH(以 ether 為單位)
  • Gas Limit(Gas 限制)(可選):使用的最大 Gas
  • Max Fee Per Gas(每 Gas 最大費用)(可選):每 Gas 的最大總費用
  • Max Priority Fee Per Gas(每 Gas 最大優先費用)(可選):每 Gas 的最大優先費用

範例

{
"contractAddress": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"abi": "[{\"name\":\"transfer\",\"type\":\"function\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}]}]",
"functionName": "transfer",
"args": "[\"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\", \"1000000000000000000\"]"
}

輸出

{
"hash": "0x1234567890abcdef...",
"from": "0xYourAddress...",
"to": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
}

Deploy Contract(部署合約)

將新智能合約部署到區塊鏈。

所需憑證:Ethereum RPC、Ethereum Account

參數

  • Bytecode(字節碼)(必需):合約字節碼(來自編譯)
  • ABI(必需):合約 ABI
  • Constructor Arguments(建構函數參數)(可選):建構函數的參數
  • Value(價值)(可選):隨部署發送的 ETH
  • Gas Limit(Gas 限制)(可選):使用的最大 Gas

範例

{
"bytecode": "0x608060405234801561001057600080fd5b50...",
"abi": "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_name\",\"type\":\"string\"}]}]",
"args": "[\"MyToken\"]"
}

輸出

{
"hash": "0x1234567890abcdef...",
"contractAddress": "0xNewContractAddress..."
}

Multicall(多重呼叫)

將多個讀取操作批次處理為單一呼叫以提高效率。

所需憑證:Ethereum RPC

參數

  • Calls(呼叫)(必需):要執行的呼叫陣列
    • 每個呼叫包含:合約地址、ABI、函數名稱、參數

使用場景

  • 在單一呼叫中從一個或多個合約讀取多個值
  • 減少 RPC 呼叫並提高效能
  • 確保所有讀取都來自同一區塊

Simulate Contract(模擬合約)

在不發送交易的情況下測試合約呼叫。

所需憑證:Ethereum RPC

參數

  • Contract Address(合約地址)(必需):智能合約地址
  • ABI(必需):合約 ABI
  • Function Name(函數名稱)(必需):函數名稱
  • Function Arguments(函數參數)(可選):函數的參數
  • Value(價值)(可選):模擬發送的 ETH
  • From(發送者)(可選):模擬呼叫的地址

使用場景

  • 發送前測試交易
  • 驗證合約行為
  • 檢查回退原因

Get Logs(取得日誌)

從智能合約查詢歷史事件日誌。

所需憑證:Ethereum RPC

參數

  • Contract Address(合約地址)(可選):按合約地址篩選
  • Event ABI(事件 ABI)(必需):要解碼的事件 ABI
  • From Block(起始區塊)(可選):起始區塊號
  • To Block(結束區塊)(可選):結束區塊號
  • Topics(主題)(可選):按索引事件參數篩選

使用場景

  • 查詢歷史事件
  • 追蹤代幣轉帳
  • 監控合約活動

常見使用場景

讀取合約狀態

[Schedule Trigger] → [Read Contract] → [儲存資料]

執行合約函數

[Trigger] → [Write Contract] → [Wait For Transaction] → [成功處理器]

部署並初始化合約

[Trigger] → [Deploy Contract] → [Wait For Transaction] → [Write Contract] → [初始化]

查詢歷史事件

[Schedule Trigger] → [Get Logs] → [處理事件] → [儲存到資料庫]

ABI 格式

ABI(應用程式二進位介面)定義合約的介面。您可以從以下位置取得:

  • Etherscan 上的合約驗證
  • 編譯器輸出(Hardhat、Foundry 等)
  • 合約文檔

最小 ABI 範例

[
{
"name": "transfer",
"type": "function",
"inputs": [
{"name": "to", "type": "address"},
{"name": "amount", "type": "uint256"}
],
"outputs": [
{"name": "", "type": "bool"}
]
}
]

提示

  • ABI 需求:ABI 中只包含您需要的函數/事件
  • 參數格式:始終以 JSON 陣列字串提供參數
  • Gas 估算:對於寫入操作,除非有特定要求,否則讓節點估算 Gas
  • Multicall:用於批次讀取以節省 RPC 呼叫並確保一致性
  • 事件篩選:在事件中使用索引參數以實現高效篩選
  • 模擬:在執行前始終模擬複雜交易
  • 區塊號:對於歷史查詢,請注意 RPC 提供商的區塊範圍限制