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 提供商的区块范围限制