从结构中获取数组



所以我有这个合同

pragma solidity >=0.7.0 <0.9.0;
struct Universe{
uint256 year;
uint64[3] space;        
}
contract myContract {
mapping(address => Universe) public myUni;

function setSomething(uint256 _year, uint64[3] memory _space) public {
Universe memory testUni = Universe({
year: _year,
space: _space
});
myUni[msg.sender] = testUni;
}
}

我目前正在尝试用块菌测试阵列是否正确通过

pragma solidity >=0.7.0 <0.9.0;
const myContract = artifacts.require("./1_Storage.sol");
contract('myContract', (accounts) => {

it('checks if setSomething works', async () => {
const myContractInstance = await myContract.new();
const spaceData = [6000, 6000, 6000];
await myContractInstance.setSomething(2543,spaceData,{from: accounts[1]});
const myPassedData = (await myContractInstance.myUni(accounts[1]));
console.log(myPassedData);
console.log(spaceData);
});
});

问题是,我无法将spaceData传递到函数中,我不知道为什么。console.log(myPassedData);只显示年份,当我尝试类似console.log(myPassedData.spaceData);的东西时,它会显示未定义。

感谢@sms的链接。如稳固性文件所述:

如果您有一个数组类型的公共状态变量,那么您只能通过生成的getter检索数组的单个元素作用这种机制的存在是为了避免返回时的高气体成本整个阵列。

所以我不得不在合同中写一个Getter函数才能访问数组:

function getUniverseArray(address _address) public view returns (uint64[3] memory) {
return myUni[_address].space;
}

最新更新