您好,登錄后才能下訂單哦!
本篇內容主要講解“Solidity是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Solidity是什么”吧!
Solidity是一種類似Javascript的高級語言。它被設計成以編譯的方式生成以太坊虛擬機的代碼
contract SimpleStorage { uint storedData; function set(uint x) { storedData = x; } function get() constant returns (uint retVal) { return storedData; } }
這是一段最簡單的Solidity合約,聲明了一個變量storedData,以及一個set一個get兩個方法去進行讀寫。Solidity中訪問變量不需要this關鍵字
Solidity的合約的定義與面向對象語言的類的定義有些相似。每個合約包括了狀態變量,函數,函數修飾符,事件,結構類型和枚舉類型,且合約也能從其他合約那里繼承。
狀態變量是在合約存儲器中永久存儲的值
函數是合約中可執行單位的代碼
函數修飾符可以在聲明中補充函數的語義
事件是和evm日志設施的方便接口
結構類型是一組用戶定義的變量
枚舉是用來創建一個特定值的集合類型
Solidity是一種靜態語言,也就是說每個變量在編譯的時候必須要定義類型。Solidity還支持通過組合提供的幾種簡單類型構建復雜類型。
與其他語言一樣布爾類型的值就是真或假,支持的操作符有!,&&,||,==,!=
整型分int以及uint,其中支持長度為8-256,步長為8,即存在uint8,uint16....uint256 另外int = int256 uint=uint8 支持的操作符有<=,>=,==,<,>,!=,&,|,^,~,+,-,*,/,%,**,+=,-=
地址即Ethereum地址,也可以擁有成員,長度為20字節,是所有合約的base 支持的操作符 <=,>=,>,<,==,!= 十六進制字符串凡是通過地址合法性驗證就會被認為是地址。需要注意的是39到41位長的沒有通過地址合法性驗證 的會得到一個警告,但會被視為普通的有理數字面量 地址的成員有balance以及send,即賬戶余額以及發送 如果想要獲得當前合約的balance可以直接通過this.balance來獲取,因為對于合約來說,地址代表的就是合約本身,合約對象默認繼承自地址對象 地址有一個send方法用來向某個地址發送貨幣(貨幣單位為wei),需要注意的是:
調用遞歸的深度不能超過1024
如果gas不夠,執行會失敗
執行該操作需要判斷是否成功
bytes1...bytes32,允許值以1為步長遞增,byte默認表示byte1 支持的操作符<=,<,>=,>,==,!=,&,|,^,~以及序號訪問 字節數組存在一個成員變量length,表示這個字節數組的長度,且只讀
小數還未被完全支持,可以被定義但不能被引用或傳遞 小數分為fixed以及ufixed,有符號小數與無符號小數 支持操作符<=,<,>=,>,==,!=,+,-,*,/,%,+=,-+等操作符
由hex關鍵字打頭,后面緊跟單引號或雙引號字符串,內部會被表示成二進制流 由于一個字節為8位,因此一個hex是由兩個[0-9a-f]字符組成的 hex可以隱式轉為bytes
可以將一個函數賦值給一個變量,一個函數類型的變量,還可以將函數作為參數進行傳遞,也可以在函數調用中返回一個函數。該類型分為兩類:internal以及extrnal internal只能在當前合約的上下文環境意外的地方執行 external包括地址與函數方法簽名兩部分,可作為外部函數調用的參數或有外部函數返回 完整的函數定義:
默認函數為internal 如果沒有返回值則必須省略returns function (<parameters types>){internal|external}[constant][payable][returns (<return types>)]
數組聲明時可以是變長的也可以指定長度,對于storage數組來說元素類型可以是任意的,而對于memory數組來說,如果函數對外可見,那么函數參數不能是映射類型,只能支持ABI類型 聲明多維數組時,solidity的長度聲明與其他語言是相反的,例如我聲明一個長度為5的二維數組,每個元素是變長數組,那么我的聲明應是uint[][5] x 類型為數組的狀態變量可以標記public類型,從而讓Solidity來構造一個訪問器 變長數組可以通過修改length來調整數組長度
在eth中調用方法進行寫操作時使用sendTransaction來請求,且需要在參數中寫入操作賬戶以及gas,讀操作使用call,并且執行完寫操作之后需要進行一次挖礦將數據保存。
contract.funcName.sendTransaction(args...,{from:eth.accounts[0],gas:200000})
到此,相信大家對“Solidity是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。