Ethereum (以太坊/solidity/truffle)从测试/客户端问题调用智能合约方法

Ethereum (以太坊/solidity/truffle)从测试/客户端问题调用智能合约方法,ethereum,solidity,truffle,Ethereum,Solidity,Truffle,我正在学习我的课程,我遇到了这样的代码 我不明白为什么直接调用一个方法而不是使用.call之类的方法,如果我使用google,调用合同方法的方法是使用.call或.send,但在这一点上,作者只是直接调用它,这允许吗,为什么 这是合同代码 或多或少,从块菌测试中调用智能合约方法的上下文是什么?它是否像真实的环境一样,在返回之前等待挖掘事务,还是像普通函数一样直接调用测试 我之所以把它贴在这里,是因为udemy课程的作者没有回应,而且几乎一周了,十几个问答问题都没有回答,所以作者可能很忙,或者

我正在学习我的课程,我遇到了这样的代码

我不明白为什么直接调用一个方法而不是使用.call之类的方法,如果我使用google,调用合同方法的方法是使用.call或.send,但在这一点上,作者只是直接调用它,这允许吗,为什么

这是合同代码

或多或少,从块菌测试中调用智能合约方法的上下文是什么?它是否像真实的环境一样,在返回之前等待挖掘事务,还是像普通函数一样直接调用测试


我之所以把它贴在这里,是因为udemy课程的作者没有回应,而且几乎一周了,十几个问答问题都没有回答,所以作者可能很忙,或者已经忘记了课程(因为这是一门很老的课程,但复习得很好)。

在块菌返回合同之前
实例
(),它使用ABI接口(由Solidity编译器提供)构建JS函数的映射,用于与契约进行交互,包括
receiveEthers()

从块菌测试调用智能合约方法的上下文是什么

尽管Truffle JS测试可以连接到公共testnet或mainnet,但它通常与另一个Truffle工具一起使用-本地EVM和名为的区块链模拟器(请参阅作者定义连接到本地区块链的位置)。默认情况下,Ganache在每次交易后挖掘一个区块,这样您(作为开发人员或测试人员)就不必担心在建立网络时挖掘和其他过程,以及它几乎立即返回的来自本地区块链的响应

如果我使用google,调用合同方法的方法是使用.call或.send

只回答有关块菌的问题。其他软件包,如Web3js或Ethers.js,可能有稍微不同的规则还有一些稳定的
.call()
.send()
方法(用于与其他合同或地址进行交互),的行为也与此处解释的不同:

您可以通过两种不同的方式与合同进行交互:

  • 事务(可以进行状态更改-更改合同存储、发出事件)
  • 调用(仅读取合同数据-无状态更改)
默认情况下,如果您不指定是要进行交易还是通话,请选择Truffle。您可以使用
.call()
方法替代此决定


.send()
方法仅用于低级生成事务。一个常见的用例是发送ETH-您需要构建事务
数据
字段,填写(ETH)
,并调用
.send()
方法(假设您已配置Truffle使用您的私钥签署事务)。

嘿,谢谢,很抱歉,这里的新手仍然掌握了智能合同编写,那么,直接从契约实例调用receiveEthers()意味着什么呢?在这种情况下(及其配置),契约部署在第41行到本地区块链(很可能是Ganache)。然后在第45行,Truffle进行一个事务(不是调用),该事务执行contract函数
receiveEthers()
。同样在第46行,它对
getBalance()
合同函数进行了
调用(不是tx)。现在知道了,谢谢,我将您的原始答复标记为答案。