Solidity 語言簡易入門,快速上手!

2021-09-01 12:37:26 字數 2915 閱讀 5715

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. .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等變數。

2. 引用型別

陣列: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...