作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在下面编写了这个简单的 solidity 代码来计算一些数字。但是,以太坊区 block 链在每个函数上给出了不同的输出。我的代码有什么问题还是以太坊区 block 链问题?
我的 solidity 代码:
pragma solidity ^0.4.24;
contract Calculate {
uint balance = 50000000000000000000;
function done() public pure returns (uint) {
return (50000000000000000000 / 3000) * 3000;
}
function fail() public view returns (uint) {
return (balance / 3000) * 3000;
}
}
输出:
done() function returns 50000000000000000000
fail() function returns 49999999999999998000
请在此处查看实时示例: https://ropsten.etherscan.io/address/0xf45a2a66be9835fdc9e1065875808616cb8e752e#readContract
最佳答案
我认为问题是在 done
情况下,编译器实际上并没有发出代码来进行计算。计算在编译时完成,并在其位置放置一个常量。
与运行时的 EVM 不同,编译器确实支持十进制数学。例如。你可以写 0.5 ether
尽管 EVM 没有数字 0.5 的表示。
关于blockchain - 以太坊坚固性计算的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138753/
我正在尝试为我正在编写的智能合约编写一些单元测试,但在弄清楚如何在创建时将参数传递给合约的构造函数时遇到困难。下面是我的代码: const assert = require('assert'); co
我正在尝试编写一个去中心化应用程序来购买音乐会门票。出于某种原因,部分 owner.transfer(this.balance) 一直给我错误。此外,由于 solidity 的版本太多,我找不到最适合
Warning: Using contract member "balance" inherited from the address type is deprecated. Convert the
我是一名优秀的程序员,十分优秀!