您好,登錄后才能下訂單哦!
這篇文章主要講解了“Solidity的基礎特性是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Solidity的基礎特性是什么”吧!
任何編程語言都有其規范的代碼結構,用于表達在一個代碼文件中如何組織和編寫代碼,Solidity也一樣。
本節,我們將通過一個簡單的合約示例,來了解智能合約的代碼結構。 智能合約編寫階段將從Solidity基礎特性、高級特性、設計模式以及編程攻略分別展開,帶讀者認識Solidity并掌握其運用,更好地進行智能合約開發。
和java不同的是,構造函數不支持重載,只能指定一個構造函數。
函數
函數被用來讀寫狀態變量。對變量的修改將會被包含在交易中,經區塊鏈網絡確認后才生效。生效后,修改會被永久的保存在區塊鏈賬本中。
函數簽名定義了函數名、輸入輸出參數、訪問修飾符、自定義修飾符。
function setState(uint value) public onlyAdmin;
函數還可以返回多個返回值:
如果在view函數中嘗試修改狀態變量,或者在pure函數中訪問狀態變量,編譯器均會報錯。
事件
事件類似于日志,會被記錄到區塊鏈中,客戶端可以通過web3訂閱這些事件。
定義事件
event SetState(uint value);
構造事件
emit SetState(value);
這里有幾點需要注意:
事件的名稱可以任意指定,不一定要和函數名掛鉤,但推薦兩者掛鉤,以便清晰地表達發生的事情.
構造事件時,也可不寫emit,但因為事件和函數無論是名稱還是參數都高度相關,這樣操作很容易筆誤將事件寫成函數調用,因此不推薦。
值得注意的是,定義在修飾符中的下劃線“_”,表示函數的調用,指代的是開發者用修飾符修飾的函數。在本例中,表達的是setState函數調用的意思。
了解了上述的智能合約示例的結構,就可以直接上手運行,運行合約的方式有多種,大家可以任意采取其中一種:
方法一:可以使用FISCO BCOS控制臺的方式來部署合約
方法二:使用FISCO BCOS開源項目WeBASE提供的在線ide WEBASE-front運行
方法三:通過在線ide remix來進行合約的部署與運行
本例中使用remix作為運行示例。
編譯
首先,在remix的文件ide中鍵入代碼后,通過編譯按鈕來編譯。成功后會在按鈕上出現一個綠色對勾:
setState
合約部署后,我們來調用setState(4)。在執行成功后,會產生一條交易收據,里面包含了交易的執行信息。
getState
調用getState后,可以直接看到所得到的值為4,正好是我們先前setState所傳入的值:
定長bytes系列
Solidity提供了bytes1到bytes32的類型,它們是固定長度的字節數組。
用戶可以讀取定長bytes的內容。
這里有一個關鍵細節,Solidity采取大端序編碼,高地址存的是整數的小端。例如,b[0]是低地址端,它存整數的高端,所以值為0;取b[31]才是1。
要注意的是,當將string轉換成bytes時,數據內容本身不會被拷貝,如上文中,str和b變量指向的都是同一個字符串abc。
address
address表示賬戶地址,它由私鑰間接生成,是一個20字節的數據。同樣,它也可以被轉換為bytes20。
數組
如果數組是狀態變量,那么支持push等操作:
struct
Solidity允許開發者自定義結構對象。結構體既可以作為狀態變量存儲,也可以在函數中作為局部變量存在。
示例合約代碼的構造函數中,包含msg.sender。它屬于全局變量。在智能合約中,全局變量或全局方法可用于獲取和當前區塊、交易相關的一些基本信息,如塊高、塊時間、合約調用者等。
比較常用的全局變量是msg變量,表示調用上下文,常見的全局變量有以下幾種:
msg.sender:合約的直接調用者。
由于是直接調用者,所以當處于 用戶A->合約1->合約2 調用鏈下,若在合約2內使用msg.sender,得到的會是合約1的地址。如果想獲取用戶A,可以用tx.origin.
tx.origin:交易的"始作俑者",整個調用鏈的起點。
msg.calldata:包含完整的調用信息,包括函數標識、參數等。calldata的前4字節就是函數標識,與msg.sig相同。
msg.sig:msg.calldata的前4字節,用于標識函數。
block.number:表示當前所在的區塊高度。
now:表示當前的時間戳。也可以用block.timestamp表示。
感謝各位的閱讀,以上就是“Solidity的基礎特性是什么”的內容了,經過本文的學習后,相信大家對Solidity的基礎特性是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。