目前我正在努力学习以太坊和智能合约。我读了这个教程:Dapps for beginners 我现在只是想知道,如果我必须每次都从合同中调用一个函数(如上面的教程中那样),或者当我只是将一些以太坊转移到该合同地址时,是否可能执行特定的函数?
实施例: 我执行下面的代码,接收者地址也是一个合同的地址。现在应该在接收器功能上执行一个特定的功能。
eth.sendTransaction({from:sender,to:receiver,value:amount})
答案 0 :(得分:2)
您应该在智能合约中创建无名应付账款功能。
如果有人在您的合同地址发送原始交易,那么这将是执行的默认功能。
function() payable public {
}
另外,这里的另一个答案是,你需要知道合同ABI与合同沟通,但这不是真的。
您需要知道合同地址,函数名称以及输入和输出参数类型。 (您可以使用Web3的method.call或method.sendTransaction在事务对象中发送编码数据并与合同进行交互。)
ABI可能有此信息,但ABI本身并不需要。
答案 1 :(得分:1)
如果您知道ABI是应用程序二进制接口,则只能与合同进行通信。
通常,ABI是两个程序模块之间的接口,其中一个通常处于机器代码级别。接口是用于将数据编码/解码到机器代码中/从机器代码中解码的事实上的方法。在以太坊中,基本上如何编码EVM的可靠性合同,以及如何从事务中读取数据。
如果您拥有合同的JSON ABI,您仍然需要决定是否要进行通话或交易。呼叫和交易之间的区别如下:
调用对于调试智能合约非常有用,因为它们不需要支付交易费或燃气费。
因此,如果您只在不使用任何界面的情况下向合约发送交易,您将无法在合约上执行任何代码。