2

目前我正在尝试学习以太坊和智能合约。我读了这个教程:初学者的 Dapps 我现在只是想知道,如果我每次都必须从合约中调用一个函数(如上面的教程中所示),或者当我只是将一些以太坊转移到时是否可能执行特定函数那个合约地址?

例子:我执行下面的代码,接收方地址也是一个有合约的地址。现在应该在接收器功能处执行一项特定功能。

eth.sendTransaction({from:sender, to:receiver, value: amount})

4

2 回答 2

2

你应该在你的智能合约中创建一个无名的应付函数。

如果有人在你的合约地址发送原始交易,这将是默认执行的函数。

function() payable public {

}

此外,此处的另一个答案指出,您需要知道合同 ABI 才能与合同进行通信,但这不是真的。

你需要知道合约地址、函数名和输入输出参数类型。(您可以使用Web3的 method.call 或 method.sendTransaction 在交易对象中发送编码数据并与合约进行交互。)

ABI 可能有此信息,但 ABI 本身不是必需的。

于 2017-09-01T13:12:12.430 回答
0

如果您知道作为应用程序二进制接口的 ABI,您只能与合约进行通信。

一般来说,ABI 是两个程序模块之间的接口,其中一个模块通常处于机器代码级别。该接口是将数据编码/解码到机器代码中/从机器代码中取出的事实上的方法。在以太坊中,这基本上是您如何为 EVM 编码可靠合约以及如何从交易中读取数据。

如果你有合约的 JSON ABI,你仍然需要决定是否要进行调用或交易。调用和事务之间的区别如下:

  • 交易由您的客户创建、签名并广播到网络。他们最终将改变区块链的状态,例如,通过操纵智能合约中的余额或价值。
  • 呼叫仅在您的计算机上本地执行,不会广播到网络,例如,试运行

调用对于调试智能合约很有用,因为它们不需要交易费用或 gas。

因此,如果您只向合约发送交易而不使用任何接口,您将无法执行合约上的任何代码。

于 2016-06-26T08:37:44.083 回答