[英](ethereum/solidity/truffle) calling smart contract method from test/client question
我正在上 udemy 课程,遇到这样的代码
我很困惑为什么直接调用方法而不是 using.call 或其他方法,其中如果我使用 google,调用合同方法的方法是 using.call 或 .send 但此时作者只是直接调用,这样可以吗,为什么?
或多或少,在这里从松露测试调用智能合约方法的上下文是什么? 是不是像真实环境一样等待交易被挖掘后再返回,还是像普通的 function 一样直接调用它进行测试?
我把它贴在这里是因为 udemy 课程的作者没有回应,而且它将近一周和十几个问答问题没有得到回答,所以作者可能很忙或者已经忘记了这门课程(因为它有点老了)但审查得很好)。
在 Truffle 返回合约instance
( 第 41 行)之前,它使用 ABI 接口(由 Solidity 编译器提供)构建一个 map 的 JS 函数用于与合约交互,包括receiveEthers()
。
从这里的松露测试调用智能合约方法的上下文是什么
尽管 Truffle JS 测试可以连接到公共测试网或主网,但它通常与另一个 Truffle 工具 - 本地 EVM 和名为Ganache的区块链模拟器一起使用(参见配置文件,其中作者定义了与本地区块链的连接)。 默认情况下,Ganache 在每笔交易后挖掘一个区块,因此您(作为开发人员或测试人员)无需担心设置网络时的挖掘和其他过程,并且本地区块链的响应几乎立即返回。
如果我用谷歌搜索,调用合约方法的方法是 using.call 或 .send
只回答松露。 Web3js 或 Ethers.js 等其他包的规则可能略有不同。 Solidity 中有 .call( .call()
和.send()
方法(用于与其他合约或地址交互),它们的行为也与此处解释的不同:
您可以通过两种不同的方式与合约交互:
默认情况下,如果您不指定是要进行事务还是调用,Truffle 会进行事务。 您可以使用.call()
方法覆盖此决定并进行调用。
.send()
方法仅用于低级构建事务。 一个常见的用例是发送 ETH - 您需要构建交易data
字段,填写 (ETH) value
,并调用.send()
方法(假设您已将 Truffle 配置为使用您的私钥来签署交易)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.