Solidity8.0
04-Solidity8.0以太单位Gas和全局变量
文章目录
前言
以太和Wei
交易ether.
类似于1美元等于 100 美分,1ether等于 10**18 wei。
Gas
ether您需要为交易支付多少费用?
您支付gas spent * gas price的金额ether,在哪里
gas是一个计算单位
gas spentgas是交易中使用的总金额
gas priceether是你愿意支付多少gas
具有较高gas价格的交易具有更高的优先级被包含在一个块中。
未用完的gas将被退还。
气体限制
您可以花费的汽油量有 2 个上限
gas limit(您愿意为交易使用的最大天然气量,由您设置)
block gas limit(区块中允许的最大气体量,由网络设置)
msg注解
msg的所有成员的值,包括msg.sender和msg.value可以在每个external函数调用中改变。这包括调用库函数。 如果你想在库函数实现访问限制使用msg.sender, 你必须手动设置msg.sender作为参数。
随机源注解
不要依赖block.timestamp,now和block.blockhash作为随机源
时间戳timestamp和区块哈希blockhash在一定程度上会受到矿工的影响。
例如,矿区中的坏节点可以对选定的哈希运行casino payout函数,如果他们没有收到任何钱,只需重试不同的哈希。
当前块时间戳必须严格大于最后一个块的时间戳,但唯一的保证是它将位于规范链中两个连续块的时间戳之间的某处。 由于区块链是增长可变的,所以不能获取整个区块链的哈希值。 您只能访问最近256个区块的哈希值,其他所有值都将为0。
错误处理(Error Handling)
assert(bool condition):如果条件不满足则抛出异常 - 用于内部错误。
require(bool condition):如果条件不满足则抛出异常 - 用于输入或外部组件中的错误。
revert():中止执行并恢复状态更改
数学和加密功能(Mathematical and Cryptographic Functions)
addmod(uint x, uint y, uint k) returns (uint):
计算(x + y)%k的值,其中加法以指定精度执行,并且不超过2 ** 256。从版本0.5.0开始断言k!= 0。
mulmod(uint x, uint y, uint k) returns (uint):
计算(x * y)%k的值,其中乘法以指定精度执行,并且不超过2 ** 256。从版本0.5.0开始断言k!= 0
keccak256(…) returns (bytes32):
计算(紧凑排列的)