solidity - 这是混音、编译器还是 openzeplin 错误?
问题描述
我刚刚写了一个简单的代码来测试 openzeplin Safemath 库。我正在使用最新版本的 remix ide 并为 ^0.5.0 编译。Remix 使用的是 0.5.0_commit.1d4f565a 编译器环境是 JavaScript VM EVM 版本是编译器默认
add 函数似乎在下面给出的代码中不起作用
我已经尝试过 x.sub(1) 它按预期抛出异常,我也尝试过将 x 初始化为不同的值,但仍然无法正常工作。
pragma solidity ^0.5.0;
import "./SafeMath.sol";
contract SimpleStorage {
using SafeMath for uint;
uint x;
event incremented(uint x);
constructor() public{
x=0;
}
function increment() public {
x.add(1);
emit incremented(x);
}
function get() external view returns (uint) {
return x;
}
}
每次调用函数时,预期输出都会增加 1,但每次都获得相同的值。Emit 也显示相同的值。
解决方案
好吧,这是你的错误:)
而不是x.add(1)
尝试x = x.add(1)
。添加函数未就地,返回新值,您需要将新值分配给x
.
推荐阅读
- reactjs - 使用第三方控件在 Jest/Enzyme/ReactTS 中难以模拟单元测试事件
- android - 尝试在空对象引用上调用虚拟方法 尝试在空对象引用上调用虚拟方法 android.widget.EditText.getText()
- typescript - for..in 循环属性在“字符串”类型上不存在
- biopython - SearchIO.parse xml 爆炸和 & 符号 cElementTree.ParseError: not well-formed (invalid token) 错误
- packet - 如何在痘控制器中阻止数据包?
- swift - Xcode/Swift 代码折叠
- ios - 检测 WebView 何时在 Swift4 中完成加载?
- ethereum - 智能合约能否自动向以太坊区块链中的用户地址发送消息
- google-chrome-extension - 仅在重新启动 Chrome 浏览器后:未发送 chrome.runtime.sendMessage() 或未调用 chrome.runtime.onMessage 侦听器函数
- c++ - 使用windows.h C++时如何避免使用全局变量