<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77877841" target="_blank">【Solidity】1.一個Solidity源檔案的布局</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77892188" target="_blank">【Solidity】2.合約的結構體</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77930835" target="_blank">【Solidity】3.類型</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77942459" target="_blank">【Solidity】4.機關和全局可變量</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77964409" target="_blank">【Solidity】5.表達式和控制結構</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77981249" target="_blank">【Solidity】6. 合約</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/77989384" target="_blank">【Solidity】7. 部件</a>
<a href="http://blog.csdn.net/diandianxiyu_geek/article/details/78016231" target="_blank">【Solidity】8. 雜項</a>
一個字面上的數字可以帶有wei,finney,szabo或者以太網的字尾,可以在以太網的子目錄之間進行轉換,其中沒有字尾的以太網貨币号被假定為魏。 2 ether == 2000 finney評估為true。
可以使用文字數字後的秒,分,小時,天,周和年份進行字尾轉換,其中以秒為機關,以下列方式将機關視為天真的時間機關:
<code>1 == 1 seconds</code>
<code>1 minutes == 60 seconds</code>
<code>1 hours == 60 minutes</code>
<code>1 days == 24 hours</code>
<code>1 weeks == 7 days</code>
<code>1 years == 365 days</code>
如果您使用這些機關執行月曆計算,請小心,因為不是每年等于365天,甚至每天都沒有24小時,因為閏秒。 由于無法預測閏秒的事實,必須由外部的oracle更新精确的月曆庫。
這些字尾不能應用于變量。 如果你想解釋某些輸入變量,例如。 天,你可以通過以下方式做到:
有一些特殊的變量和函數總是存在于全局命名空間中,主要用于提供關于塊鍊的資訊。
<code>block.blockhash(uint blockNumber) returns (bytes32)</code> 給定塊的哈希 - 僅适用于256個不包括目前最新塊
<code>block.coinbase (address)</code> 目前塊礦工位址
<code>block.difficulty (uint)</code> 目前塊難度
<code>block.gaslimit (uint)</code> 目前塊gaslimit
<code>block.number (uint)</code> 目前資料塊号
<code>block.timestamp (uint)</code> 目前塊時間戳從unix紀元開始為秒
<code>msg.data (bytes)</code> 完整的calldata
<code>msg.gas (uint)</code> 剩餘gas
<code>msg.sender (address)</code> 該消息(目前呼叫)的發送者
<code>msg.sig (bytes4)</code> 呼叫資料的前四個位元組(即功能辨別符)
<code>msg.value (uint)</code> 發送的消息的數量
<code>now (uint)</code> 目前塊時間戳(block.timestamp的别名)
<code>tx.gasprice (uint)</code> gas價格的交易
<code>tx.origin (address)</code> 交易的發送者(全調用鍊)
msg的所有成員的值(包括msg.sender和msg.value)可以針對每個外部函數調用進行更改。 這包括對庫函數的調用。
如果要使用msg.sender在庫函數中實作通路限制,則必須手動提供msg.sender的值作為參數。
<code>assert(bool condition)</code>:
如果條件不滿足,則抛出 - 用于内部錯誤。
<code>require(bool condition)</code>:
如果條件不滿足,則抛出 - 用于輸入或外部元件中的錯誤。
<code>revert()</code>:
中止執行并恢複狀态更改
<code>addmod(uint x, uint y, uint k) returns (uint)</code>
計算(x + y)%k,其中以任意精度執行加法,并且不在2 ** 256處圍繞
<code>mulmod(uint x, uint y, uint k) returns (uint)</code>
計算(x * y)%k,其中乘法以任意精度執行,并且不會在2 ** 256處循環。
<code>keccak256(...) returns (bytes32)</code>
計算的(緊湊)參數的Ethereum-SHA-3(Keccak-256)的散列
<code>sha256(...) returns (bytes32)</code>
計算(緊密包裝)參數的SHA-256散列
<code>sha3(...) returns (bytes32)</code>
keccak256的别名
<code>ripemd160(...) returns (bytes20)</code>
計算(緊密包裝)參數的RIPEMD-160哈希值
<code>ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)</code>
在上面,“緊密包裝”意味着參數是無連接配接的連接配接。 這意味着以下内容完全相同:
如果需要填充,可以使用顯式類型轉換:<code>keccak256("\x00\x12")</code> 與<code>keccak256(uint16(0x12))</code>相同。
請注意,常量将使用存儲它們所需的最少位元組數來打包。 這意味着,例如<code>keccak256(0) == keccak256(uint8(0))</code>和<code>keccak256(0x12345678) == keccak256(uint32(0x12345678))</code>
這可能是你在一個私人的塊上遇到了sha256,ripemd160或ecrecover的Out-of-Gas。 這樣做的原因是那些被實作為所謂的預編譯合同,這些合同在收到第一條消息之後才真正存在(盡管他們的合同代碼是寫死的)。 對非現有合約的消息更昂貴,是以執行将會進入“Out-of-Gas”錯誤。 這個問題的解決方法是首先發送例如 在您将實際合同中使用這些合約之前,每個合約1 Wei。 官網或測試網不是問題。
<code><address>.balance (uint256)</code>
<code><address>.transfer(uint256 amount)</code>
發送一定量wei向位址,抛出失敗
<code><address>.send(uint256 amount) returns (bool)</code>
發送一定量wei向位址,失敗時傳回false
<code><address>.call(...) returns (bool)</code>
發出低級CALL,失敗傳回false
<code><address>.callcode(...) returns (bool)</code>
發出低級CALLCODE,失敗時傳回false
<code><address>.delegatecall(...) returns (bool)</code>
發出低級DELEGATECALL,失敗傳回false
使用send有一些危險:如果調用堆棧深度為1024(這可以始終被呼叫者強制),則傳輸失敗,如果接收方耗盡gas,則傳輸失敗。 是以為了使安全的以太網傳輸,始終檢查發送的傳回值,使用轉移甚至更好:使用接收方提取錢的模式。
不鼓勵使用callcode,将來會被删除。
<code>this</code>
目前合約,明确轉換為位址
<code>selfdestruct(address recipient)</code>
摧毀目前的合同,将資金送到給定的位址
<code>suicide(address recipient)</code>
selfdestruct的别名
此外,目前合約的所有功能都可以直接調用,包括目前的功能。