Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ethereum 仅仅通过对地址进行转换就可以调用契约函数吗_Ethereum - Fatal编程技术网

Ethereum 仅仅通过对地址进行转换就可以调用契约函数吗

Ethereum 仅仅通过对地址进行转换就可以调用契约函数吗,ethereum,Ethereum,目前我正在努力学习以太坊和智能合约。我阅读了本教程: 我现在想知道的是,我是否每次都要从合同中调用一个函数(如上面的教程所示),或者当我只是将一些以太坊转移到该合同地址时,是否有可能执行一个特定的函数 例如: 我执行下面的代码,接收方地址也是一个带有合同的地址。现在应该在接收方函数中执行一个特定函数 eth.sendTransaction({from:sender,to:receiver,value:amount})只有知道作为应用程序二进制接口的ABI时,才能与合同通信 通常,ABI是两个程序

目前我正在努力学习以太坊和智能合约。我阅读了本教程: 我现在想知道的是,我是否每次都要从合同中调用一个函数(如上面的教程所示),或者当我只是将一些以太坊转移到该合同地址时,是否有可能执行一个特定的函数

例如: 我执行下面的代码,接收方地址也是一个带有合同的地址。现在应该在接收方函数中执行一个特定函数


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

只有知道作为应用程序二进制接口的ABI时,才能与合同通信

通常,ABI是两个程序模块之间的接口,其中一个模块通常位于机器代码级别。接口实际上是将数据编码/解码到机器代码中或从机器代码中解码出来的方法。在以太坊中,最基本的问题是如何为EVM编码实体合同,以及如何从事务中读取数据

如果您拥有契约的JSON ABI,那么您仍然需要决定是否要进行调用或事务。调用和事务之间的区别如下:

  • 事务由客户端创建、签名并广播到网络。它们最终将改变区块链的状态,例如,通过操纵智能合约中的余额或价值
  • 呼叫仅在您的计算机上本地执行,而不会广播到网络,例如,试运行
调用用于调试智能合约,因为它们不需要支付交易费或汽油费


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

您应该在智能合同中创建一个无名支付功能

如果有人在您的合同地址发送原始事务,那么这将是要执行的默认函数

function() payable public {

}
另外,这里的另一个答案指出,您需要了解合同ABI才能与合同沟通,但这不是事实。

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


ABI可能有这些信息,但ABI本身并不需要。

您可能会在找到答案时,首先尝试理解,然后阅读有关的用法。希望这有帮助。