首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从测试/客户问题中调用智能合同方法

从测试/客户问题中调用智能合同方法
EN

Stack Overflow用户
提问于 2021-04-26 07:04:52
回答 1查看 964关注 0票数 0

我正在上一门udemy课程,我遇到了这样的代码

payable.js#L45

我搞不懂为什么对方法的调用是直接调用的,而不是使用.call或其他什么的。如果我使用谷歌,那么调用合同方法的方法要么是使用.call,要么是.send,但此时作者只是直接调用它,这是允许的吗,为什么?

以下是合同代码https://github.com/acloudfan/Blockchain-Course-Basic-Solidity/blob/master/contracts/ConstantsPayable.sol

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-26 08:03:42

在返回契约instance (第41行)之前,它使用ABI接口(由Solidity编译器提供)构建用于与契约交互的JS函数映射,包括receiveEthers()

从松露测试中调用智能契约方法的上下文是什么?

尽管Truffle测试可以连接到公共测试网或主板网,但它通常与另一个Truffle -本地EVM和称为加纳奇的块链仿真器一起使用(参见作者定义到本地块链连接的配置文件 )。默认情况下,Ganache在每个事务之后挖掘一个块,这样您(作为开发人员或测试人员)在设置网络时不需要担心挖掘和其他进程,并且它几乎立即返回了来自本地块链的响应。

如果我使用google,调用合同方法的方法要么使用.call,要么使用.send。

只回答特弗莱的问题。其他软件包,如Web3js或Ethers.js,可能会有一些不同的规则。.call() 和和方法在中(用于与其他契约或地址交互),的行为也与这里解释的不同:

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

  • 事务(可以进行状态更改-更改合同存储、发出事件)
  • 调用(只读取合同数据-没有状态更改)

默认情况下,如果不指定要进行事务处理还是调用,请使用Truffle 进行交易。您可以通过使用打个电话方法来重写此决定和.call()

.send()方法仅用于低级别构建的事务。一个常见的用例是发送ETH --您需要构建transaction data字段,填充(ETH) value,并调用.send()方法(假设您已经配置了信托基金来使用私钥对事务进行签名)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67262182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档