是否可以通过转换到地址来调用合同函数

时间:2016-06-08 13:32:43

标签: ethereum

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

实施例: 我执行下面的代码,接收者地址也是一个合同的地址。现在应该在接收器功能上执行一个特定的功能。

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

2 个答案:

答案 0 :(得分:2)

您应该在智能合约中创建无名应付账款功能。

如果有人在您的合同地址发送原始交易,那么这将是执行的默认功能。

function() payable public {

}

另外,这里的另一个答案是,你需要知道合同ABI与合同沟通,但这不是真的。

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

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

答案 1 :(得分:1)

如果您知道ABI是应用程序二进制接口,则只能与合同进行通信。

通常,ABI是两个程序模块之间的接口,其中一个通常处于机器代码级别。接口是用于将数据编码/解码到机器代码中/从机器代码中解码的事实上的方法。在以太坊中,基本上如何编码EVM的可靠性合同,以及如何从事务中读取数据。

如果您拥有合同的JSON ABI,您仍然需要决定是否要进行通话或交易。呼叫和交易之间的区别如下:

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

调用对于调试智能合约非常有用,因为它们不需要支付交易费或燃气费。

因此,如果您只在不使用任何界面的情况下向合约发送交易,您将无法在合约上执行任何代码。