使用 ABI 查询或与以太坊合约交互

Querying or interacting with Ethereum contracts using ABI

我有合同 ABI,我想查询合同。我知道存在 web3.js 用于此目的,但我没有使用它。我想大致了解如何使用其 ABI 与已部署的合约进行交互。

  1. 还有其他方法可以使用 ABI 查询合约吗?
  2. 我正在用 C++/Qt 编程,我想使用 ABI 查询合同。有什么想法吗?

我也用过metamask和myetherwallet查询合约,但不是我想要的

如果你有一个 ABI 和一个合约地址,你可以在上面执行方法。

我不确定您如何使用现有的 C++ 库在 C++ 中执行此操作。但是,在 Web3.py 中(在 Web3.js 中也类似),在最基本的层面上,它是相当简单的:

  1. 使用 ABI 和合约地址创建合约实例
  2. 获取你想要的合约函数实例运行
  3. 运行合约方法上的交易,带任何参数
  4. 等待交易哈希(tx_id)
  5. 使用 tx_id 获取收据。收据包含所有好东西,例如使用的汽油、结果数据等。

Python using Web3.py 中,这看起来像:

contract_instance = web3.eth.contract(address, abi)
contract_function = contract_instance.functions["contractMethodToRun"]
tx_hash = contract_function(*params).transact(tx_dict)
receipt = web3.eth.waitForTransactionReceipt(tx_hash)

对于Web3.js 1.0,步骤几乎相同。

对于 C++,here's a popular client。如您所知,以太坊上的大部分工作都是使用 Go、Node 或 Python.

完成的