solidity語言是一種可以編寫智慧型合約的高階語言,當然編寫智慧型合約不止這一種,但是學習以太坊最好還是學會這一種語言就差不多了。在以太坊平台上,solidiy編寫的智慧型合約會執行在以太坊虛擬機器evm之上,變成位元組碼執行。
新手入門建議使用官方ide開發工具remix。
solidity語言中的合約結構和物件導向程式設計的類相似。乙個合約就幾乎是乙個類,結構基本一致。包括宣告變數(如狀態變數,函式,函式修改器,事件),合約繼承等。
contract ******contract
address public creater; // 建立者位址
function ******contract()
modifier onlycreater()
function abort() onlycreater()
event deposit(address _from, uint _amount); // 事件
function donate() payable()
}
1. 值型別
跟c++ 極為相似。簡要說明。
布林型別。 true false,支援 ! && || == !=
列舉型別。enum someenum
整數型別。int uint,uint為無符號整數。變數支援通過字尾指明變數使用多少位進行儲存,字尾範圍是8~256之內8的整數倍。如int8 int16... int256, 預設為int256 uint256。address位址型別。智慧型合約獨有的變數型別,長度為20位元組,和以太坊賬戶位址長度一致。原本屬於合約的基類,擁有一些成員方法和變數。從solidity0.5.0版本開始,合約不再繼承自address位址型別,但仍然可以通過顯式型別轉換將合約轉換為位址型別。
重點介紹address的一些方法和變數。
1. .balance 賬戶餘額2. 引用型別2. .transfer(uint256 amount) 轉賬,失敗會丟擲異常,終止**
3. .send(uint256 amount) return (bool) 轉賬,失敗會返回false
4. .call(...) return (bool)
5. .callcode(....) return (bool)
6. .delegate(...) return (bool)
4 5 6 與合約進行互動。
4 接收任何長度型別的引數,每個引數被填充為32位元組並拼接在一起。
6 與4的區別是 6僅執行diamagnetic,而諸如轉賬儲存,餘額等其他方面都是使用當前合約資料,這是為了用另外乙個合約的**。
5 屬於早期介面,許可權較低,無法訪問msg.sender, msg.value等變數。
陣列:t[k]型別為t長度為k的定長陣列,t[ ] 則宣告了乙個動態陣列
成員變數和函式:
bytes和string,一種特殊的陣列。bytes屬於任意長度的位元組資料,string用於表示任意長度的utf8字元資料。
push方法,陣列尾部新增新元素,返回新陣列長度。
length 陣列長度,賬戶儲存中的陣列長度可以修改,而記憶體中的陣列建立後length成員已經確定了無法修改。外部呼叫無法返回乙個動態陣列的長度,做法是需要將返回的內容放在乙個長度足夠的定長陣列。
結構體。與c極為相似。
struct
鍵型別keytpye可以是除了對映,動態陣列,智慧型合約,列舉型別,結構體以外的任何型別。
值型別valuetype可以是任意型別,包括對映本身。
對映可以看作乙個雜湊表,鍵輸入雜湊,得到值。對映不儲存鍵的值,而是儲存其keccak-256雜湊值。
3. 型別轉換
顯示型別轉換和隱式型別轉換。
uint16 a = uint16(b) 顯式轉換。
uint16 a = 0x11111111 32位隱式轉為16位。
4. 運算子
需要注意乙個新的運算子 delete
uint a[3]; 若a[2] = 2, delete a[2] 之後, a[2] = 0;
delete a 則表示將陣列變為長度為0的空陣列。
5. 型別推斷
var a = "asad" 推斷 a的型別為string,用法跟js中的var,c++中的auto一致。
1. 貨幣單位
2. 時間單位
3. 區塊和交易屬性。
4. 異常處理函式
5. 數學加密函式
6. 合約相關的變數和函式。
迴圈,條件語句與c++完全一致。
呼叫同一合約的函式,內部呼叫
呼叫其他合約例項的方法,屬於外部呼叫。
命名呼叫 !!!
函式可用性:external, public, internal, private
特殊函式
constant, 唯讀
fallback函式, 不接收引數,無返回值。
待更新。。。
Go語言http包簡易入門
說道go語言web程式設計,必不可少的會使用到net http包。go語言將web開發需要使用到的很多內容都放在了標準庫中 net http。如何寫乙個簡單的web程式很容易。如下 其中使用了http包。使用http.handlefunc就是使用了乙個處理器函式。處理器函式是乙個簽名和serveht...
Solidity語言學習 (三)
使用var關鍵字時,第一次賦值給變數,編譯器會自動推斷變數的型別,而且推斷後不能更改這個變數的型別了,如果更改了就會出錯,還有就是不能在函式引數中使用。注意 有時候var會推斷出乙個錯誤的型別。案例 pragma solidity 0.4.18 contract var 結果為 solidity中v...
CMake簡易入門
首發於fxm5547的部落格 cmake minimum required version 2.6 project itest c 標準 set cmake cxx standard 11 指定參與編譯的原始檔 add executable itest src main.cpp src cal ca...