在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 單位和全局可用變量
簡介
編程規(guī)范
雜項(xiàng)
源文件的布局
單位和全局可用變量
合約的結(jié)構(gòu)
通用模式
常見問題
深入理解 Solidity
安裝Solidity
智能合約介紹
合約
Solidity 編程實(shí)例
http://solidity.readthedocs.io/en/latest/security-considerations
類型
表達(dá)式和控制結(jié)構(gòu)

單位和全局可用變量

以太單位

數(shù)詞后面可以有一個(gè)后綴, wei, finney, szabo 或 ether 和 ether 相關(guān)量詞 之間的轉(zhuǎn)換,在以太幣數(shù)量后若沒有跟后綴,則缺省單位是“wei“,?? 如? 2 ether? == 2000 finney?? (這個(gè)表達(dá)式)計(jì)算結(jié)果為true。?

時(shí)間單位

后綴的秒,分,小時(shí),天,周,年,? 數(shù)量詞的時(shí)間單位之間可以用來轉(zhuǎn)換,秒是基本單位。下面是常識:

  • 1 = 1秒????????????? (原文使用了兩個(gè)==,可能有誤 --譯者注)
  • 1分鐘 = 60秒???? (原文使用了兩個(gè)==,可能有誤 --譯者注)
  • 1小時(shí) = 60分鐘 (原文使用了兩個(gè)==,可能有誤 --譯者注)
  • 1天=24小時(shí)?????? (原文使用了兩個(gè)==,可能有誤 --譯者注)
  • 1周= 7天
  • 1年= 365天

如果你使用這些單位執(zhí)行日歷計(jì)算,要注意以下問題。?? 因?yàn)殚c秒,所以每年不總是等于365天,甚至每天也不是都有24小時(shí),。由于無法預(yù)測閏秒,一個(gè)精確的日歷庫必須由外部oracle更新。

這些后綴不能用于變量。如果你想解釋一些輸入變量, 如天,你可以用以下方式:

function?f(uint?start,?uint?daysAfter) {

??if?(now?>=?start?+?daysAfter?*?1 days) { ... }}

Special Variables and Functions

特殊的變量和函數(shù)

有特殊的變量和函數(shù)總是存在于全局命名空間,主要用于提供關(guān)于blockchain的信息。

塊和交易屬性

  • block.coinbase (address): :當(dāng)前塊的礦工的地址
  • block.difficulty (uint):當(dāng)前塊的難度系數(shù)
  • block.gaslimit (uint):當(dāng)前塊汽油限量
  • block.number (uint):當(dāng)前塊編號
  • block.blockhash (function(uint) returns (bytes32)):指定塊的哈希值——最新的256個(gè)塊的哈希值
  • block.timestamp (uint):當(dāng)前塊的時(shí)間戳
  • msg.data (bytes):完整的calldata
  • msg.gas (uint):剩余的汽油
  • msg.sender (address):消息的發(fā)送方(當(dāng)前調(diào)用)
  • msg.sig (bytes4):calldata的前四個(gè)字節(jié)(即函數(shù)標(biāo)識符)
  • msg.value (uint):所發(fā)送的消息中wei的數(shù)量
  • now (uint):當(dāng)前塊時(shí)間戳(block.timestamp的別名)
  • tx.gasprice (uint):交易的汽油價(jià)格
  • tx.origin (address):交易發(fā)送方(完整的調(diào)用鏈)

請注意

msg的所有成員的值,包括msg.sender和msg.value可以在每個(gè) external函數(shù)調(diào)用中改變。這包括調(diào)用庫函數(shù)。

如果你想在庫函數(shù)實(shí)現(xiàn)訪問限制使用msg.sender, 你必須手動設(shè)置msg.sender作為參數(shù)。

請注意

由于所有塊可伸縮性的原因,(所有)塊的Hash值就拿不到。你只能訪問最近的256塊的Hash值,其他值為零。

數(shù)學(xué)和加密功能

addmod(uint x, uint y, uint k) returns (uint):

計(jì)算 (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)

計(jì)算compute (x * y) % k?

sha3(...) returns (bytes32):

計(jì)算(緊湊排列的)參數(shù)的Ethereum-SHA-3 的Hash值值

sha256(...) returns (bytes32):

計(jì)算(緊湊排列的)參數(shù)的SHA-256 的Hash值

ripemd160(...) returns (bytes20):

計(jì)算(緊湊排列的)參數(shù)的 RIPEMD-160 的Hash值

ecrecover(bytes32, byte, bytes32, bytes32) returns (address):

恢復(fù)橢圓曲線特征的公鑰-參數(shù)為(data, v, r, s)

在上述中,“緊湊排列”,意思是沒有填充的參數(shù)的連續(xù)排列,也就是下面表達(dá)式是沒有區(qū)別的

sha3("ab", "c")

sha3("abc")

sha3(0x616263)

sha3(6382179)

sha3(97, 98, 99)

如果需要填充,要用顯示的形式表示: sha3(“x00x12”) 和 sha3(uint16(0x12))是相同的。

在一個(gè)私有的blockchain里,你可能(在使用)sha256, ripemd160 或 ecrecover (的時(shí)候) 碰到"Out-of-Gas"(的問題)??。原因在于這個(gè)僅僅是預(yù)編譯的合約,合約要在他們接到的第一個(gè)消息以后才真正的生成(雖然他們的合約代碼是硬編碼的)。對于沒有真正生成的合約的消息是非常昂貴的,這時(shí)就會碰到“Out-of-Gas”的問題。 這一問題的解決方法是事先把1wei 發(fā)送到各個(gè)你當(dāng)前使用的各個(gè)合約上。這不是官方或測試網(wǎng)的問題。

合約相關(guān)的

this (current contract’s type):

當(dāng)前的合約,顯示可轉(zhuǎn)換地址

selfdestruct(address)::

銷毀當(dāng)前合約,其資金發(fā)送給指定的地址

此外,當(dāng)前合同的所有函數(shù)均可以被直接調(diào)用(包括當(dāng)前函數(shù))。

? Copyright 2015, Ethereum. Revision 37381072.

Built with?Sphinx?using a?theme?provided by?Read the Docs.