因此,我想使用类型记录来测试这个可靠的代码,但是面临一个类型转换问题。
uint16 base;
function addNumberToBase(uint16 number_) {
// This number must be between 1 ~ 5
require(number_ < 1 && number_ >= 5, "This number must be between 1 ~ 5");
base += number_;
}这是TS测试代码,我在这里尝试了很多类型,但是没有工作。
it("Should add a number between 1 ~ 5 to base", async () => {
const number_ : Number = 4;
await contract.addNumberToBase(number_);
// But here getting this error:
// Error: VM Exception while processing transaction: revert This number must be between 1~5
});使用Uint16Array和BigNumberish类型也是如此。
我的建议是,这是因为在两种语言的类型之间转换的问题。那么,请有任何有用的库来转换uint16吗?
谢谢。
发布于 2021-03-10 18:59:40
这一行:
require(number_ < 1 && number_ >= 5, "This number must be between 1 ~ 5");这是不可能的。
它应该说:
require(number_ >= 1 && number_ <= 5, "This number must be between 1 ~ 5");如果你能得到一个JavaScript号码或一个BigNumber,我就不是100%了,因为uint16可以由JavaScript处理。对于BigNumber原生类型来说,uint256类型总是太大了。
如果返回的值看起来像一个奇怪的对象,请使用toString(10)解析它,例如var value = parseInt(response.toString(10));
希望能帮上忙。
发布于 2021-03-10 18:59:30
require中的第一个参数必须是true才能继续。目前,您的代码检查的数字小于1,大于或等于5。如果您将require调用更改为以下内容,它应该可以工作:
require(number >= 1 && number <= 5, "This number must be between 1 - 5");这并不是将数字转换为uint16的问题,因为Web3.js和Ethers.js可以自动做到这一点。
https://ethereum.stackexchange.com/questions/94472
复制相似问题