javascript - 测试 Solidity 合约时如何从 Javascript 初始化结构?
问题描述
如何初始化Item
结构并分配给变量?
contract ArbitrableBlacklist {
enum ItemStatus {
Absent,
Cleared,
}
struct Item {
ItemStatus status;
uint lastAction;
}
}
使用 Truffle 测试上述合约(为问题而简化),但我找不到初始化Item
结构的方法。
我试过了:
let x = ArbitrableBlacklist.Item({
status: 0,
lastAction: 0
});
并得到
TypeError:ArbitrableBlacklist.Item 不是函数
编辑:忘了提,我正在用 Javascript 编写测试。
解决方案
检查此示例以在合同中创建结构的实例。
pragma solidity ^0.4.22;
contract ArbitrableBlacklist {
enum ItemStatus {
Absent,
Cleared
}
struct Item {
ItemStatus status;
uint lastAction;
}
}
contract test{
ArbitrableBlacklist.Item public item;
function create() public {
item = ArbitrableBlacklist.Item({
status: ArbitrableBlacklist.ItemStatus.Absent,
lastAction: 0
});
}
}
如果您尝试从 javascript 初始化,那么它可能是不可能的 - 至少现在是这样。但是您可以将结构成员的值作为参数传递给函数并创建一个实例,如此处所示。
function create(ArbitrableBlacklist.ItemStatus _status, uint _action) public {
item = ArbitrableBlacklist.Item({
status: _status,
lastAction: _action
});
}
对于 Enum,从 javascript 传递索引 0、1 等
推荐阅读
- bash - 什么是“0G”端序
- python - 提取管道和日文字符之间的字母,并用逗号替换空格
- css - 换位产品_Title Woocommerce
- pymc - PyMC3:当使用时间序列的形状参数时,时间是在行轴还是列轴上?
- ios - 视图中的 UIButton 动画未检测到触摸
- pip - 如何在不删除依赖包的情况下修复 anaconda 中损坏的 pip?
- python - 使用spark python按键从json字典RDD中选择和分组字典条目
- elasticsearch - 在 Laravel v5.6 上将过滤后的数据传递给 Datatables v8
- python - 多线程和无限循环如何协同工作
- spring - Spring Boot JUnit 和 @TestPropertySource 使用多个属性文件