版本指令
pragma solidity ^0.4.19;
它告訴我們源代碼是為[0.4.19,0.5.0] 版本撰寫的
pragma solidity >=0.4.22 <0.7.0;
它告訴我們源代碼是為[0.4.22,0.7.0] 版本撰寫的
合約
contract 合約名字{}
值型別
int uint uint8/32/64...256
bool
fixed/ufixed 定點數
address 地址 .balance獲取余額 .transfer轉移 判空 !=address(0)
型別轉換
隱式轉換
顯式轉換 :轉化后型別 新變數 = (轉化后型別)原變數;
uint轉bytes
function toBytes(uint256 x) returns (bytes b) {
b = new bytes(32);
assembly {
mstore(add(b, 32), x)
}
}
string轉bytes 顯示轉換
stirng轉bytes32
function stringToBytesVer2(string memory source) returns (bytes32 result) {
assembly {
result := mload(add(source, 32))
}
}
資料位置
Storage 永久資料,高成本
Memory 臨時資料,函式內生效
Calldata 不可修改的非持久性資料位
Stack 由EVM維護的非持久性數
陣列
動態:未確定空間大小
靜態:確定空間大小
方法:push(回傳值為新的索引),length
初始化:uint a[3]=[1,2,3]
結構體
同型別的資料連續的存盤可以節省gas
映射
mapping(_KeyType => _ValueType)
特殊全域變數
msg.sender
指的是當前調?用者(或智能合約)的 address
錯誤處理
無腦用require就完事了
//assert 式例外消耗了所有可用的呼叫 gas ,而從 Metropolis 版本起 require 式的例外不會消耗任何 gas
assert(bool condition)
?如果不滿足條件,此方法呼叫將導致一個無效的操作碼,
對狀態所做的任何更改將被還原,
這個方法是用來處理內部錯誤的,
require(bool condition)
?如果不滿足條件,此方法呼叫將恢復到原始狀態,
此方法用于檢查輸入或外部組件的錯誤,
require(bool condition, string memory message)
?如果不滿足條件,此方法呼叫將恢復到原始狀態,
此方法用于檢查輸入或外部組件的錯誤,
它提供了一個提供自定義訊息的選項,
revert()
?此方法將中止執行并將所做的更改還原為執行前狀態,
revert(string memory reason)
?此方法將中止執行并將所做的更改還原為執行前狀態,
它提供了一個提供自定義訊息的選項,
字串的哈希映射
keccak256(string)
函式語法
function + 函式的名字
+(傳遞給函式的引數,包括引數的名稱和型別)
+函式可見性
+函式修飾符
+returns (回傳的型別,若有多個,以逗號分隔)
函式可見性 :public、private、internal、external
用于設定函式的可見范圍
public:public 是默認值,設定為 public 的函式可以被其他合約和本合約內部呼叫,
external:類似于 public 函式,唯?一的區別在于不能在合約內部呼叫,除非在呼叫時申明關鍵字 this,
internal:internal 函式只能被合約內部的函式呼叫,
private:類似于 internal 函式,唯一的區別在于 private 函式不能被當前合約所派生的子合約呼叫,
函式修飾符:view/constant、pure、payable、modifier
影響函式的行為
view/constant: 當函式被定義為 view,意味著它不對任何狀態進行修改,只能讀取資料不能更改資料,
pure:pure 函式不會讀取或寫入任何資料,函式只能處理引數,回傳值給呼叫方,
payable:payable 函式用于接受外部的支付,
modifier :可以像函式一樣接收引數,修飾符的最后一行為 _;,表示修飾符呼叫結束后回傳,并執行呼叫函式余下的部分
建構式
constructor(變數型別和變數名) 函式可見性 {
函式陳述句;
}
事件
宣告事件 event 事件名(元素型別 元素);
觸發事件 emit 事件名(元素型別 元素);
合約繼承
Solidity支持單繼承和多繼承
contract 合約名字 is 繼承的父類 { }
介面
在solidity 0.6.x 版本之后,介面類似于抽象合約,可以使用interface關鍵字創建
interface Calculator {
function getResult() external view returns(uint);
}
在之前的版本直接用contact代替interface
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/253954.html
標籤:區塊鏈
上一篇:記錄下Mac環境下使用AndroidStudio接入融合SDK(Allin)出現的部分問題
下一篇:Vue環境變數和模式
