微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“TypeError: inst.createZombie(...).send is not a function” 用松露测试我的智能合约时

如何解决“TypeError: inst.createZombie(...).send is not a function” 用松露测试我的智能合约时

我正在使用 truffle 来测试一个solidity 编写的合约,它非常简单,我基本上是在学习织机教程(加密僵尸)。

这是我在 createzombie.sol 文件中编写的一个基本函数

@SpringBootApplication(scanBasePackages = "com.expenses")

这是我用来测试合同的 javascript 文件

@Autowired

当我在终端中运行 sudo truffle test 时,出现以下错误

UserServiceImplementation.userRepository

(我确切地说我是一个完整的初学者)

非常感谢您以后的回答!

编辑:另一个可能相关的问题示例,这是一个非常基本的智能合约的另一个示例

@Repository

我知道我使用 uint 作为名称而不是 Bytes32 或字符串,使用 javascript 时更容易,我只想测试简单的代码。无论如何,当我运行 truffle 控制台并编写时,truffle 能够编译和部署合约 let inst = await Balek.deployed(); 它有效,但我无法从合同中调用任何内容,每次我在控制台中编写以下内容时它都不起作用:

function createZombie() public payable {
  require(msg.value >= feeCreateZombie);
  zombie memory myZombie;
  myZombie.name = "newbie";
  myZombie.dna = uint(keccak256( abi.encodePacked(Now,msg.sender))) % 5;
  myZombie.level = 1;
  myZombie.cooldown = Now;
  zombietoOwner[zombies.push(myZombie) - 1] = msg.sender;
}

我有错误: 未捕获的错误:返回错误:处理事务时出现 VM 异常:恢复

事实上,我从未成功调用过智能合约的函数。所有这些错误对我来说似乎都是相互关联的,每当我尝试调用成功部署的合约的函数时,它都不起作用,即使我可以部署合约......

W T F :d

解决方法

Truffle 不使用 .send() 函数来执行合约方法。这在 web3.js 中使用,这是一个不同的库。

可以直接调用对应的JS函数来执行合约方法:

let result = await inst.createZombie({from: accounts[0]});

Truffle 自动(基于合约 ABI)识别它是应该发送(读写)交易还是(只读)调用。

文档:https://www.trufflesuite.com/docs/truffle/reference/contract-abstractions#making-a-transaction-via-a-contract-function

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。