uint256 不足以满足 weis 中的数量要求吗?
Isn't uint256 enough for quantities in weis?
我制作了一个存钱罐,我希望能够进行支票。但事实证明,我无法支付超过 15 个零的款项。这正常吗?
这是我注册支票的功能:
function setdebtor(address _address, uint _checkId, uint256 _amount) segurity public {
check[_checkId] = _amount;
debtor[_address] = true;
}
我的映射:
mapping(uint => uint256) check;
mapping(address => bool) debtor;
和我的支付功能:
function paycheck(uint _check) public {
require(debtor[msg.sender]);
msg.sender.transfer(check[_check]);
debtor[msg.sender] = false;
}
但是如果我检查的金额大于 15 个零,我会收到以下错误:
transact to Hucha.setdebtor errored: Error encoding arguments: Error: invalid number value (arg="", coderType="uint256", value=30000000000000000, version=4.0.37)
>
这是 uint256 类型的限制?
没有多大意义,因为在这个函数中我引入了带有 18 个零的数量没有问题...
function enterFunds(uint amount) public payable {
require(msg.value == amount);
emit operations("Ingreso realizado de: ", amount);
}
全部代码:
pragma solidity ^0.5.11;
contract Hucha {
address owner;
mapping(address => bool) debtor;
mapping(uint => uint) check;
event operations(string msg, uint amount);
modifier segurity {
require(msg.sender == owner);
_;
}
constructor() public {
owner = msg.sender;
}
function getbalance() view public returns(uint) {
return address(this).balance;
}
function enterFunds(uint amount) public payable {
require(msg.value == amount);
emit operations("Ingreso realizado de: ", amount);
}
function extractFunds(uint amount) segurity public {
msg.sender.transfer(amount);
emit operations("Se han sacado: ", amount);
}
function kill() segurity public {
selfdestruct(msg.sender);
}
function paycheck(uint _check) public {
require(debtor[msg.sender]);
require(check[_check] != 0); // si no existe el cheque devolvera cero.
msg.sender.transfer(check[_check]);
debtor[msg.sender] = false;
}
function setdebtor(address _address, uint _checkId, uint256 _amount) segurity public {
check[_checkId] = _amount;
debtor[_address] = true;
}
}
因为javascript里面的数字比较大,你可以直接在你的值"30000000000000000"
后面加上双引号
我制作了一个存钱罐,我希望能够进行支票。但事实证明,我无法支付超过 15 个零的款项。这正常吗?
这是我注册支票的功能:
function setdebtor(address _address, uint _checkId, uint256 _amount) segurity public {
check[_checkId] = _amount;
debtor[_address] = true;
}
我的映射:
mapping(uint => uint256) check;
mapping(address => bool) debtor;
和我的支付功能:
function paycheck(uint _check) public {
require(debtor[msg.sender]);
msg.sender.transfer(check[_check]);
debtor[msg.sender] = false;
}
但是如果我检查的金额大于 15 个零,我会收到以下错误:
transact to Hucha.setdebtor errored: Error encoding arguments: Error: invalid number value (arg="", coderType="uint256", value=30000000000000000, version=4.0.37)
>
这是 uint256 类型的限制?
没有多大意义,因为在这个函数中我引入了带有 18 个零的数量没有问题...
function enterFunds(uint amount) public payable {
require(msg.value == amount);
emit operations("Ingreso realizado de: ", amount);
}
全部代码:
pragma solidity ^0.5.11;
contract Hucha {
address owner;
mapping(address => bool) debtor;
mapping(uint => uint) check;
event operations(string msg, uint amount);
modifier segurity {
require(msg.sender == owner);
_;
}
constructor() public {
owner = msg.sender;
}
function getbalance() view public returns(uint) {
return address(this).balance;
}
function enterFunds(uint amount) public payable {
require(msg.value == amount);
emit operations("Ingreso realizado de: ", amount);
}
function extractFunds(uint amount) segurity public {
msg.sender.transfer(amount);
emit operations("Se han sacado: ", amount);
}
function kill() segurity public {
selfdestruct(msg.sender);
}
function paycheck(uint _check) public {
require(debtor[msg.sender]);
require(check[_check] != 0); // si no existe el cheque devolvera cero.
msg.sender.transfer(check[_check]);
debtor[msg.sender] = false;
}
function setdebtor(address _address, uint _checkId, uint256 _amount) segurity public {
check[_checkId] = _amount;
debtor[_address] = true;
}
}
因为javascript里面的数字比较大,你可以直接在你的值"30000000000000000"
后面加上双引号