Solidity全局屬性和方法

由於版本更新比較快。過去一部分寫法,現在使用0.5.10版本開發合約時,部分報錯。再去翻翻官方的最新的文檔。

一、特殊變量

msg

  • msg.sender(address) 消息發送者(當前調用)
  • msg.value (uint) 隨消息發送的 wei 的數量
  • msg.data (bytes) 完整的 calldata
  • msg.gas (uint) 剩餘 gas ,( 棄!)推薦使用gasleft()
  • msg.sig (bytes4) calldata 的前 4 字節(也就是函數標識符)

tx

  • tx.gasprice (uint) 交易的 gas 價格
  • tx.origin (address) 交易發起者(完全的調用鏈)

block

  • block.blockhash(uint blockNumber) (bytes32) 指定區塊的區塊哈希,僅可用於最新的 256 個區塊且不包括當前區塊,( 棄!)推薦使用blockhash(uint blockNumber)
  • block.coinbase (address): 挖出當前區塊的礦工地址
  • block.difficulty (uint): 當前區塊難度
  • block.gaslimit (uint): 當前區塊 gas 限額
  • block.number (uint): 當前區塊號
  • block.timestamp (uint): 自 unix epoch 起始當前區塊以秒計的時間戳

address

  • <address>.balance (uint256): 以 Wei 爲單位的地址類型的餘額。
  • <address payable>.transfer(uint256 amount): 向地址類型發送數量爲 amount 的 Wei,失敗時拋出異常,發送 2300 gas 的礦工費,不可調節。
  • <address payable>.send(uint256 amount) returns (bool):向地址類型發送數量爲 amount 的 Wei,失敗時返回 false,發送 2300 gas 的礦工費用,不可調節。
  • <address>.call(...) returns (bool): 發出低級函數 CALL,失敗時返回 false,發送所有可用 gas,可調節。
  • <address>.callcode(...) returns (bool):已禁止使用。
  • <address>.delegatecall(...) returns (bool):發出低級函數 DELEGATECALL,失敗時返回 false,發送所有可用 gas,可調節。

alias

  • now (uint): 目前區塊時間戳(block.timestamp
  • blockhash(uint blockNumber)returns(bytes32) 指定區塊的區塊哈希,限制256個之內
  • gasleft() returns(uint) 剩餘的 gas, (msg.gas)
  • staticcall()

type

doc

  • type(C).name The name of the contract.
  • type(C).creationCode
  • type(C).runtimeCode

二、ABI編碼

decode

abi.decode(bytes memory encodedData, (...)) returns (...)

解碼一份已壓縮的數據,類型在括號中作爲第二個參數給出。

示例 (uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uint, uint[2], bytes))

encode

abi.encode(...) returns (bytes memory)

對給定參數進行編碼

encodePacked

abi.encodePacked(...) returns (bytes memory)

對給定參數執行 緊打包編碼

encodeWithSelector

abi.encodeWithSelector(bytes4 selector, ...) returns (bytes memory)

對給定參數進行編碼,並以給定的函數選擇器作爲起始的 4 字節數據一起返回

encodeWithSignature

abi.encodeWithSignature(string signature, ...) returns (bytes memory)

等價於 abi.encodeWithSelector(bytes4(keccak256(signature), ...)

三、錯誤處理

assert導致的交易失敗,會扣取剩餘的gas,其他的會返回剩餘的gas

assert

  • assert(bool condition) 條件不滿足,則使當前交易沒有效果,用於檢查內部錯誤。

require

  • require(bool condition)條件不滿足則撤銷狀態更改,用於檢查由輸入或者外部組件引起的錯誤。
  • require(bool condition, string message),上同,可以同時提供一個錯誤消息。

revert

  • revert() 終止運行並撤銷狀態更改。
  • revert(string reason)終止運行並撤銷狀態更改,可以同時提供一個解釋性的字符串。

四、合約相關

this

代表本合約的地址

super

使用繼承層次結構中更高一級(父類)的合約的方法。

selfdestruct

selfdestruct(address payable recipient)

銷燬合約,並把餘額發送到指定地址。

五、數學和密碼學函數

addmod

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

計算 (x + y) % k,加法會在任意精度下執行,並且加法的結果即使超過 2**256 也不會被截取。從 0.5.0 版本的編譯器開始會加入對 k != 0 的校驗(assert)。

mulmod

mulmod(uint x, uint y, uint k) returns (uint) 

計算 (x * y) % k,乘法會在任意精度下執行,並且乘法的結果即使超過 2**256 也不會被截取。從 0.5.0 版本的編譯器開始會加入對 k != 0 的校驗(assert)。

keccak256

keccak256(bytes memory) returns (bytes32)

計算Ethereum-SHA-3 (Keccak-256)哈希。(sha3已放棄使用)

sha256

sha256(bytes memory) returns (bytes32)

計算 SHA-256 哈希。

ripemd160

ripemd160(bytes memory) returns (bytes20)

計算 RIPEMD-160 哈希。地址本身是用這個生成的。

Solidity官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章