數(shù)詞后面可以有一個后綴, wei, finney, szabo 或 ether 和 ether 相關(guān)量詞 之間的轉(zhuǎn)換,在以太幣數(shù)量后若沒有跟后綴,則缺省單位是“wei“,?? 如? 2 ether? == 2000 finney?? (這個表達式)計算結(jié)果為true。?
后綴的秒,分,小時,天,周,年,? 數(shù)量詞的時間單位之間可以用來轉(zhuǎn)換,秒是基本單位。下面是常識:
如果你使用這些單位執(zhí)行日歷計算,要注意以下問題。?? 因為閏秒,所以每年不總是等于365天,甚至每天也不是都有24小時,。由于無法預(yù)測閏秒,一個精確的日歷庫必須由外部oracle更新。
這些后綴不能用于變量。如果你想解釋一些輸入變量, 如天,你可以用以下方式:
function?f(uint?start,?uint?daysAfter) {
??if?(now?>=?start?+?daysAfter?*?1 days) { ... }}
Special Variables and Functions
有特殊的變量和函數(shù)總是存在于全局命名空間,主要用于提供關(guān)于blockchain的信息。
msg的所有成員的值,包括msg.sender和msg.value可以在每個 external函數(shù)調(diào)用中改變。這包括調(diào)用庫函數(shù)。
如果你想在庫函數(shù)實現(xiàn)訪問限制使用msg.sender, 你必須手動設(shè)置msg.sender作為參數(shù)。
由于所有塊可伸縮性的原因,(所有)塊的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):
計算(緊湊排列的)參數(shù)的Ethereum-SHA-3 的Hash值值
sha256(...) returns (bytes32):
計算(緊湊排列的)參數(shù)的SHA-256 的Hash值
ripemd160(...) returns (bytes20):
計算(緊湊排列的)參數(shù)的 RIPEMD-160 的Hash值
ecrecover(bytes32, byte, bytes32, bytes32) returns (address):
恢復(fù)橢圓曲線特征的公鑰-參數(shù)為(data, v, r, s)
在上述中,“緊湊排列”,意思是沒有填充的參數(shù)的連續(xù)排列,也就是下面表達式是沒有區(qū)別的
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"(的問題)??。原因在于這個僅僅是預(yù)編譯的合約,合約要在他們接到的第一個消息以后才真正的生成(雖然他們的合約代碼是硬編碼的)。對于沒有真正生成的合約的消息是非常昂貴的,這時就會碰到“Out-of-Gas”的問題。 這一問題的解決方法是事先把1wei 發(fā)送到各個你當前使用的各個合約上。這不是官方或測試網(wǎng)的問題。
this (current contract’s type):
當前的合約,顯示可轉(zhuǎn)換地址
selfdestruct(address)::
銷毀當前合約,其資金發(fā)送給指定的地址
此外,當前合同的所有函數(shù)均可以被直接調(diào)用(包括當前函數(shù))。
? Copyright 2015, Ethereum. Revision 37381072.
Built with?Sphinx?using a?theme?provided by?Read the Docs.