亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Solidity的基礎特性是什么

發布時間:2021-12-07 15:13:12 來源:億速云 閱讀:171 作者:iii 欄目:互聯網科技

這篇文章主要講解了“Solidity的基礎特性是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Solidity的基礎特性是什么”吧!

智能合約代碼結構

任何編程語言都有其規范的代碼結構,用于表達在一個代碼文件中如何組織和編寫代碼,Solidity也一樣。

本節,我們將通過一個簡單的合約示例,來了解智能合約的代碼結構。 智能合約編寫階段將從Solidity基礎特性、高級特性、設計模式以及編程攻略分別展開,帶讀者認識Solidity并掌握其運用,更好地進行智能合約開發。

Solidity的基礎特性是什么

和java不同的是,構造函數不支持重載,只能指定一個構造函數。

函數

函數被用來讀寫狀態變量。對變量的修改將會被包含在交易中,經區塊鏈網絡確認后才生效。生效后,修改會被永久的保存在區塊鏈賬本中。

函數簽名定義了函數名、輸入輸出參數、訪問修飾符、自定義修飾符。

function setState(uint value) public onlyAdmin;

函數還可以返回多個返回值:

Solidity的基礎特性是什么

如果在view函數中嘗試修改狀態變量,或者在pure函數中訪問狀態變量,編譯器均會報錯。

事件

事件類似于日志,會被記錄到區塊鏈中,客戶端可以通過web3訂閱這些事件。

定義事件

event SetState(uint value);

構造事件

emit SetState(value);

這里有幾點需要注意:

  • 事件的名稱可以任意指定,不一定要和函數名掛鉤,但推薦兩者掛鉤,以便清晰地表達發生的事情.

  • 構造事件時,也可不寫emit,但因為事件和函數無論是名稱還是參數都高度相關,這樣操作很容易筆誤將事件寫成函數調用,因此不推薦。

Solidity的基礎特性是什么

值得注意的是,定義在修飾符中的下劃線“_”,表示函數的調用,指代的是開發者用修飾符修飾的函數。在本例中,表達的是setState函數調用的意思。

智能合約的運行

了解了上述的智能合約示例的結構,就可以直接上手運行,運行合約的方式有多種,大家可以任意采取其中一種:

  • 方法一:可以使用FISCO BCOS控制臺的方式來部署合約

  • 方法二:使用FISCO BCOS開源項目WeBASE提供的在線ide WEBASE-front運行

  • 方法三:通過在線ide remix來進行合約的部署與運行

本例中使用remix作為運行示例。

編譯

首先,在remix的文件ide中鍵入代碼后,通過編譯按鈕來編譯。成功后會在按鈕上出現一個綠色對勾:

Solidity的基礎特性是什么

setState

合約部署后,我們來調用setState(4)。在執行成功后,會產生一條交易收據,里面包含了交易的執行信息。

Solidity的基礎特性是什么

getState

調用getState后,可以直接看到所得到的值為4,正好是我們先前setState所傳入的值:

Solidity的基礎特性是什么

定長bytes系列

Solidity提供了bytes1到bytes32的類型,它們是固定長度的字節數組。

用戶可以讀取定長bytes的內容。

Solidity的基礎特性是什么

這里有一個關鍵細節,Solidity采取大端序編碼,高地址存的是整數的小端。例如,b[0]是低地址端,它存整數的高端,所以值為0;取b[31]才是1。

Solidity的基礎特性是什么

要注意的是,當將string轉換成bytes時,數據內容本身不會被拷貝,如上文中,str和b變量指向的都是同一個字符串abc。

address

address表示賬戶地址,它由私鑰間接生成,是一個20字節的數據。同樣,它也可以被轉換為bytes20。

Solidity的基礎特性是什么

數組

如果數組是狀態變量,那么支持push等操作:

Solidity的基礎特性是什么

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的基礎特性是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

萨迦县| 柏乡县| 台湾省| 德令哈市| 新河县| 汾西县| 外汇| 水城县| 靖宇县| 民勤县| 甘南县| 鄂州市| 城市| 五常市| 乐业县| 沙河市| 溧水县| 合江县| 山东| 鄂托克旗| 芜湖市| 呼和浩特市| 博爱县| 汉寿县| 仁寿县| 潮州市| 田东县| 灵璧县| 望城县| 池州市| 平定县| 车致| 习水县| 梁山县| 常山县| 宁河县| 德阳市| 买车| 黄梅县| 宣武区| 泗水县|