数词后面可以有一个后缀, wei, finney, szabo 或 ether 和 ether 相关量词 之间的转换,在以太币数量后若没有跟后缀,则缺省单位是“wei“, 如 2 ether == 2000 finney (这个表达式)计算结果为true。
后缀的秒,分,小时,天,周,年, 数量词的时间单位之间可以用来转换,秒是基本单位。下面是常识:
如果你使用这些单位执行日历计算,要注意以下问题。 因为闰秒,所以每年不总是等于365天,甚至每天也不是都有24小时,。由于无法预测闰秒,一个精确的日历库必须由外部oracle更新。
这些后缀不能用于变量。如果你想解释一些输入变量, 如天,你可以用以下方式:
function f(uint start, uint daysAfter) { if (now >= start + daysAfter * 1 days) { ... }} Special Variables and Functions
有特殊的变量和函数总是存在于全局命名空间,主要用于提供关于blockchain的信息。
msg的所有成员的值,包括msg.sender和msg.value可以在每个 external函数调用中改变。这包括调用库函数。
如果你想在库函数实现访问限制使用msg.sender, 你必须手动设置msg.sender作为参数。
由于所有块可伸缩性的原因,(所有)块的Hash值就拿不到。你只能访问最近的256块的Hash值,其他值为零。
addmod(uint x, uint y, uint k) returns (uint):计算 (x + y) % k (按指定的精度,不能超过2**256)
mulmod(uint x, uint y, uint k) returns (uint):
compute (x * y) % k where the multiplication is performed with arbitrary precision and does not wrap around at 2256. (按指定的精度,不能超过2**256)
计算compute (x * y) % k
sha3(...) returns (bytes32):
计算(紧凑排列的)参数的Ethereum-SHA-3 的Hash值值
sha256(...) returns (bytes32):
计算(紧凑排列的)参数的SHA-256 的Hash值
ripemd160(...) returns (bytes20):
计算(紧凑排列的)参数的 RIPEMD-160 的Hash值
ecrecover(bytes32, byte, bytes32, bytes32) returns (address):
恢复椭圆曲线特征的公钥-参数为(data, v, r, s)
在上述中,“紧凑排列”,意思是没有填充的参数的连续排列,也就是下面表达式是没有区别的
sha3("ab", "c") sha3("abc") sha3(0x616263) sha3(6382179) sha3(97, 98, 99)
如果需要填充,要用显示的形式表示: sha3(“x00x12”) 和 sha3(uint16(0x12))是相同的。
在一个私有的blockchain里,你可能(在使用)sha256, ripemd160 或 ecrecover (的时候) 碰到"Out-of-Gas"(的问题) 。原因在于这个仅仅是预编译的合约,合约要在他们接到的第一个消息以后才真正的生成(虽然他们的合约代码是硬编码的)。对于没有真正生成的合约的消息是非常昂贵的,这时就会碰到“Out-of-Gas”的问题。 这一问题的解决方法是事先把1wei 发送到各个你当前使用的各个合约上。这不是官方或测试网的问题。
this (current contract’s type):
当前的合约,显示可转换地址
selfdestruct(address)::
销毁当前合约,其资金发送给指定的地址
此外,当前合同的所有函数均可以被直接调用(包括当前函数)。