0

我做了一个存钱罐,我希望能够进行支票。但事实证明,我无法使用超过 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;

    }





}
4

1 回答 1

2

这是因为 javascript 中的数字很大,您可以将双引号添加"30000000000000000"到您的值

于 2019-09-18T12:17:17.283 回答