从契约读取属性或属性



在一个例子中,我有一个简单的合约:

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++;
}
}

相关内容

  • 没有找到相关文章

最新更新