溫馨提示×

溫馨提示×

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

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

Solidity是什么

發(fā)布時間:2021-12-07 15:22:38 來源:億速云 閱讀:192 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內容主要講解“Solidity是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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的合約的定義與面向對象語言的類的定義有些相似。每個合約包括了狀態(tài)變量,函數(shù),函數(shù)修飾符,事件,結構類型和枚舉類型,且合約也能從其他合約那里繼承。

  • 狀態(tài)變量是在合約存儲器中永久存儲的值

  • 函數(shù)是合約中可執(zhí)行單位的代碼

  • 函數(shù)修飾符可以在聲明中補充函數(shù)的語義

  • 事件是和evm日志設施的方便接口

  • 結構類型是一組用戶定義的變量

  • 枚舉是用來創(chuàng)建一個特定值的集合類型

類型

Solidity是一種靜態(tài)語言,也就是說每個變量在編譯的時候必須要定義類型。Solidity還支持通過組合提供的幾種簡單類型構建復雜類型。

布爾類型

與其他語言一樣布爾類型的值就是真或假,支持的操作符有!,&&,||,==,!=

整型

整型分int以及uint,其中支持長度為8-256,步長為8,即存在uint8,uint16....uint256 另外int = int256 uint=uint8 支持的操作符有<=,>=,==,<,>,!=,&,|,^,~,+,-,*,/,%,**,+=,-=

地址

地址即Ethereum地址,也可以擁有成員,長度為20字節(jié),是所有合約的base 支持的操作符 <=,>=,>,<,==,!= 十六進制字符串凡是通過地址合法性驗證就會被認為是地址。需要注意的是39到41位長的沒有通過地址合法性驗證 的會得到一個警告,但會被視為普通的有理數(shù)字面量 地址的成員有balance以及send,即賬戶余額以及發(fā)送 如果想要獲得當前合約的balance可以直接通過this.balance來獲取,因為對于合約來說,地址代表的就是合約本身,合約對象默認繼承自地址對象 地址有一個send方法用來向某個地址發(fā)送貨幣(貨幣單位為wei),需要注意的是:

  • 調用遞歸的深度不能超過1024

  • 如果gas不夠,執(zhí)行會失敗

  • 執(zhí)行該操作需要判斷是否成功

字節(jié)數(shù)組

bytes1...bytes32,允許值以1為步長遞增,byte默認表示byte1 支持的操作符<=,<,>=,>,==,!=,&,|,^,~以及序號訪問 字節(jié)數(shù)組存在一個成員變量length,表示這個字節(jié)數(shù)組的長度,且只讀

小數(shù)

小數(shù)還未被完全支持,可以被定義但不能被引用或傳遞 小數(shù)分為fixed以及ufixed,有符號小數(shù)與無符號小數(shù) 支持操作符<=,<,>=,>,==,!=,+,-,*,/,%,+=,-+等操作符

十六進制字面量

由hex關鍵字打頭,后面緊跟單引號或雙引號字符串,內部會被表示成二進制流 由于一個字節(jié)為8位,因此一個hex是由兩個[0-9a-f]字符組成的 hex可以隱式轉為bytes

函數(shù)類型

可以將一個函數(shù)賦值給一個變量,一個函數(shù)類型的變量,還可以將函數(shù)作為參數(shù)進行傳遞,也可以在函數(shù)調用中返回一個函數(shù)。該類型分為兩類:internal以及extrnal internal只能在當前合約的上下文環(huán)境意外的地方執(zhí)行 external包括地址與函數(shù)方法簽名兩部分,可作為外部函數(shù)調用的參數(shù)或有外部函數(shù)返回 完整的函數(shù)定義:

默認函數(shù)為internal
如果沒有返回值則必須省略returns
function (<parameters types>){internal|external}[constant][payable][returns (<return types>)]
數(shù)組

數(shù)組聲明時可以是變長的也可以指定長度,對于storage數(shù)組來說元素類型可以是任意的,而對于memory數(shù)組來說,如果函數(shù)對外可見,那么函數(shù)參數(shù)不能是映射類型,只能支持ABI類型 聲明多維數(shù)組時,solidity的長度聲明與其他語言是相反的,例如我聲明一個長度為5的二維數(shù)組,每個元素是變長數(shù)組,那么我的聲明應是uint[][5] x 類型為數(shù)組的狀態(tài)變量可以標記public類型,從而讓Solidity來構造一個訪問器 變長數(shù)組可以通過修改length來調整數(shù)組長度

注意

在eth中調用方法進行寫操作時使用sendTransaction來請求,且需要在參數(shù)中寫入操作賬戶以及gas,讀操作使用call,并且執(zhí)行完寫操作之后需要進行一次挖礦將數(shù)據(jù)保存。

contract.funcName.sendTransaction(args...,{from:eth.accounts[0],gas:200000})

到此,相信大家對“Solidity是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

AI