Solidity語(yǔ)言介紹

Solidity是一種智能合約高級(jí)語(yǔ)言,運(yùn)行在Ethereum虛擬機(jī)(EVM)之上。

語(yǔ)言特性

它的語(yǔ)法接近于Javascript,是一種面向?qū)ο蟮恼Z(yǔ)言。但作為一種真正意義上運(yùn)行在網(wǎng)絡(luò)上的去中心合約,它又有很多的不同,下面列舉一些:

  • 以太坊底層是基于帳戶(hù),而非UTXO的,所以有一個(gè)特殊的Address的類(lèi)型。用于定位用戶(hù),定位合約,定位合約的代碼(合約本身也是一個(gè)帳戶(hù))。
  • 由于語(yǔ)言?xún)?nèi)嵌框架是支持支付的,所以提供了一些關(guān)鍵字,如payable,可以在語(yǔ)言層面直接支持支付。
  • 存儲(chǔ)是使用網(wǎng)絡(luò)上的區(qū)塊鏈,數(shù)據(jù)的每一個(gè)狀態(tài)都可以永久存儲(chǔ),所以需要確定變量使用內(nèi)存,還是區(qū)塊鏈。
  • 運(yùn)行環(huán)境是在去中心化的網(wǎng)絡(luò)上,會(huì)比較強(qiáng)調(diào)合約或函數(shù)執(zhí)行的調(diào)用的方式。因?yàn)樵瓉?lái)一個(gè)簡(jiǎn)單的函數(shù)調(diào)用變?yōu)榱艘粋€(gè)網(wǎng)絡(luò)上的節(jié)點(diǎn)中的代碼執(zhí)行。
  • 最后一個(gè)非常大的不同則是它的異常機(jī)制,一旦出現(xiàn)異常,所有的執(zhí)行都將會(huì)被回撤,這主要是為了保證合約執(zhí)行的原子性,以避免中間狀態(tài)出現(xiàn)的數(shù)據(jù)不一致。

例子

語(yǔ)法層面可謂中規(guī)中矩。下面一個(gè)幾乎無(wú)意義的簡(jiǎn)單合約HelloWorld的例子:

pragma solidity ^0.4.0;

contract HelloWorld{
    uint balance;
    function update(uint amount) returns (address, uint){
        balance += amount;
        return (msg.sender, balance);
    }
}

通過(guò)讀取參數(shù)輸入的新值,并將之累加至合約的變量中,返回發(fā)送人的地址,和最終的累計(jì)值。

使用無(wú)需安裝的Web編譯器Brower-Based Compiler。打開(kāi)后,如下圖所示:

1.jpg

點(diǎn)擊Create按鈕,就能在瀏覽器的內(nèi)存中創(chuàng)建合約。在update函數(shù)旁的小框中輸入入?yún)?,再點(diǎn)擊update,就能執(zhí)行函數(shù)調(diào)用,執(zhí)行后會(huì)打印函數(shù)返回的結(jié)果。

2.jpg

備注

如果出現(xiàn)錯(cuò)誤,可以等待瀏覽器資源加載完成,或強(qiáng)制刷新后再試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容