javascript - “TypeError: inst.createZombie(...).send is not a function”用松露测试我的智能合约时
问题描述
我正在使用 truffle 来测试一个用solidity编写的合约,它非常简单,我基本上是在遵循织机教程(加密僵尸)。
这是我在 createzombie.sol 文件中编写的基本功能,
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;
}
这是我用来测试合同的 javascript 文件:
const createZombie = artifacts.require('createzombie');
contract('basic tests', (accounts) => {
it('should create a zombie', async () => {
const inst = await createZombie.new();
let result = await inst.createZombie({from: accounts[0]}).send();
assert.equal(result.receipt.status, true);
});
});
当我在终端中运行 sudo truffle test 时,出现以下错误:
TypeError: inst.createZombie(...).send is not a function
(我准确地说我是一个完整的初学者)
非常感谢您未来的回答!
编辑:另一个可能相关的问题示例,这是一个非常基本的智能合约的另一个示例
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
contract Balek {
mapping(uint => address) public deck;
constructor() {
deck[0] = msg.sender;
}
modifier reallySender(uint _name) {
require(deck[_name] == msg.sender);
_;
}
modifier onlyOwner(uint _name) {
require(deck[0] == deck[_name]);
_;
}
function transfer(address _to, uint _name) public reallySender(_name) {
deck[_name] = _to;
}
function create(uint _name) public onlyOwner(_name) {
deck[_name] = msg.sender;
}
fallback () external {
}
}
我知道我使用 uint 作为名称而不是 Bytes32 或字符串,使用 javascript 时更容易,我只想测试简单的代码。无论如何,当我运行 truffle 控制台并编写 let inst = await Balek.deployed(); 时,truffle 能够编译和部署合约。它可以工作,但我不能从合同中调用任何东西,每次我在控制台中编写以下内容时它都不起作用:
let deck = await inst.deck;
let result = await inst.create(1);
我有错误:未捕获的错误:返回的错误:处理事务时的 VM 异常:还原
事实上,我从来没有成功调用过智能合约的函数。所有这些错误对我来说似乎都是相互关联的,每当我尝试调用成功部署的合约的函数时,它都不起作用,即使我可以部署合约......
WTF:d
解决方案
Truffle 不使用该.send()
函数来执行合约方法。这在web3.js中使用,这是一个不同的库。
直接调用对应的JS函数即可执行合约方法:
let result = await inst.createZombie({from: accounts[0]});
Truffle 自动(基于合约 ABI)识别它是否应该发送(读写)事务或(只读)调用。
推荐阅读
- python - 网络x。图形可视化.Python.圆形布局
- javascript - 如何使用 JavaScript 根据块的颜色更改 div 元素的颜色?
- android - 无法找到 ADB,但 adb.exe 仍然存在于 Sdk Platforms-tool 文件夹中
- angular - 如何使用 Angular 中的范围滑块过滤数据?
- django - 在 GAE flex/custom 中为 django API 应用自定义 nginx.conf
- python - 如何修复这个 qouting 在 python 中读取 csv 文件时必须是整数
- python - 如何单击硒中的按钮?
- ruby-on-rails - 如何处理条带支付成功?
- python - 如何在某些列中组合具有相同值的值
- c# - “IAppBuilder”不包含“UseCookieAuthentication”的定义