在一个例子中,我有一个简单的合约:
contract CryptoCharacters is ERC721Enumerable, Ownable {
uint number;
function setNumber(uint256 n) public {
number = n;
}
}
为了测试这一点,我写了下面的测试:before(async function () {
this.Chars = await ethers.getContractFactory("CryptoCharacters");
});
beforeEach(async function () {
this._chars = await this.Chars.deploy()
await this._chars.deployed()
this.provider = ethers.getDefaultProvider();
});
it('test setting number', async function () {
await this._chars.setNumber.call(OWNER_ADDRESS, 123);
number = await this._chars.number
expect(number ).to.equal(123);
});
主要的问题是,我还没有找到一种方法来读取属性number
从合同没有getter函数。有没有一种方法可以在没有getter函数的情况下读取这个属性?
如果这个属性是另一个契约呢?我能读成myInstance.subcontract.property
吗?
感谢您的帮助!
如果你设置属性public
,它将是只读的,可以通过自动生成的getter函数对其他合约和链下应用程序使用。
uint public number;
number = await this._chars.number()
除非属性是private
,子契约可以读写访问它。
pragma solidity ^0.8;
contract Parent {
// read-only for external contracts and off-chain apps
// read-write for child contracts
uint public number;
}
contract Child is Parent {
function foo() public {
number++;
}
}