You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Remix部署的Solidity合约mint函数仅支持铸造≤53整数是什么原因?

问题根因分析
  • 核心错误是运算符误用:Solidity 中 ^ 符号不是数学幂运算符,而是按位异或运算符。你代码中写的 10^60 实际执行的是 10 和 60 的按位异或计算:
    • 10 二进制:001010
    • 60 二进制:111100
    • 异或结果:110110,换算为十进制就是 54
      所以你的校验条件 require(amount < (1 * (10^60)), ...) 实际等价于 require(amount < 54),因此只有 1~53 的数值可以通过校验,超过就会触发回滚。
修复方案
  1. 将幂运算写法替换为正确的语法:
    若要表示 1 * 10^60,Solidity 支持两种正确写法:
    • 字面量写法:1e60
    • 幂运算符写法:10 ** 60
      替换后mint函数的校验逻辑就符合你的预期了:
    require(amount < 1e60, 'Amount requested too High for minting');
    
  2. 其他代码问题提示:
    • send 函数中 balances[minter] = -amount; 写法错误:uint 是无符号整数类型,不支持负数值赋值,正确的余额扣减写法是 balances[minter] -= amount;
    • 错误信息笔误:Coin balance to low 应为 Coin balance too low
    • 当前 mint 函数是直接覆盖接收地址的余额,若要实现累加铸造,可改为 balances[receiver] += amount;

内容的提问来源于stack exchange,提问作者codelace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:36:03