91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

第一行代碼:以太坊(2)-使用Solidity語言開發和測試智能合約

發布時間:2020-08-06 12:02:27 來源:網絡 閱讀:1944 作者:androidguy 欄目:web開發

智能合約是以太坊的核心之一,用戶可以利用智能合約實現更靈活的代幣以及其他DApp。不過在深入講解如何開發智能合約之前,需要先介紹一下以太坊中用于開發智能合約的Solidity語言,以及相關的開發和測試環境。

智能合約就是運行在以太坊上的程序。客戶端可以通過Web3.js API調用智能合約,而智能合約本身又可以直接訪問以太坊網絡,也就是說,智能合約前面連接著客戶端,后面連接著以太坊網絡,起到了承前啟后的作用,而且通過智能合約,可以讓整個以太坊網絡更靈活,可控性更強。其實智能合約的作用相當于微軟Office中的VBA,一個功能強大的領域腳本語言。智能合約的開發語言是Solidity,那么Solidity是什么呢?應該如何在以太坊網絡上運行用Solidity語言編寫的智能合約呢?本文將會揭曉這些問題的答案。

1. 什么是Solidity語言

Solidity是一種用于編寫智能合約的高級語言,運行在Ethereum虛擬機(以太坊虛擬機,EVM)之上。那么Solidity到底是怎樣一種編程語言呢?或者說Solidity語言的主要特性是什么呢?請繼續往下看。

Solidity語言的語法接近于JavaScript,是一種面向對象的語言。但作為一種真正意義上運行在網絡上的去中心智能合約,它又有很多的不同,下面列舉一些Solidity語言的主要特性。

  • 以太坊底層是基于帳戶的,因此在Solidity語言中有一個特殊的Address數據類型。用于定位用戶,定位合約,定位合約的代碼(合約本身也是一個帳戶)。
  • 由于Solidity語言內嵌框架是支持支付的,所以提供了一些關鍵字,如payable,可以在語言層面直接支持支付。
  • Solidity語言可以將數據存儲在區塊鏈上,數據的每一個狀態都可以永久存儲,所以需要確定變量使用的是內存,還是區塊。
  • 運行環境是在去中心化的網絡上,會比較強調合約或函數執行的調用的方式。因為原來一個簡單的函數調用變為了一個網絡上的節點中的代碼執行。
  • 最后一個非常大的不同則是Solidity語言的異常機制,一旦出現異常,所有的執行都將會被回撤,這主要是為了保證智能合約執行的原子性,以避免中間狀態出現的數據不一致。有點類似于數據庫中的事務回滾。

2. 用Solidity語言開發智能合約

Solidity是一種圖靈完備的編程語言,所以編程的方式與Java、C++類似。不過Solidity語言中并沒有類的概念,但有一個合約的概念,用關鍵字contract表示。任何一個Solidity程序,都必須至少有一個合約(contract)。在合約中可以編寫Solidity函數,類似于類中的方法。Solidity源代碼文件的擴展名是sol,下面的例子給出了一個簡單的使用Solidity語言編寫的智能合約的例子,以便讀者對Solidity語言和智能合約有一個感性的認識。

下面的例子給出了一個名為Calc的智能合約程序,在該智能合約中有一個add函數,用于將兩個無符號整數相加,并返回相加的結果。

pragma solidity ^0.4.0;
contract Calc{
    function add(uint a,uint b) returns (uint){
        return a + b;
    }
}

盡管現在還沒有正式講解Solidity語言和智能合約,不過從這段簡單的智能合約代碼也可以了解Solidity語言的結構。首先,智能合約的第1行需要使用pragma solidity指定Solidity編譯器的最低版本,本例是0.4.0,也就是說,要編譯這段Solidity程序,Solidity編譯器的版本不能低于0.4.0。要記住,在版本號前面要加上“^”。

接下來就是用contract關鍵字聲明智能合約,語法與類非常接近,智能合約的名字跟在contract關鍵字后面,智能合約中的代碼用一對花括號括起來。

最后是在智能合約中聲明若干個函數,函數的語法與JavaScript類似(都是使用function關鍵字聲明函數),不過也不完全相同,因為Solidity是強類型的編程語言,而JavaScript是弱類型的編程語言。也就是說,聲明Solidity變量需要指定數據類型,如本例的uint,表示無符號整數類型。函數的返回值類型需要在函數聲明的結尾通過returns關鍵字指定。如本例的returns(uint),函數返回值與C風格的編程語言相同,仍然使用return語句指定函數返回值。Solidity語言的每一條語句后面都要跟分號(;)。

3. 使用Remix運行智能合約

學習編寫智能合約最重要的一步就是運行智能合約,否則無法知道我們編寫的智能合約程序是否正確。在正常情況下,應該將智能合約部署在以太坊網絡上,然后通過以太坊客戶端調用,不過現在還沒有講如何將智能合約部署到以太坊網絡上,以及如何調用智能合約。所以目前只能使用最簡單的方式測試智能合約。以太坊官方提供了一個在線的智能合約編寫和測試環境:Remix,通過這個工具,可以用不同的方式測試智能合約。
在瀏覽器地址欄輸入如下的Url后,會進入Remix頁面。

https://remix.ethereum.org

Remix頁面主要包含如下4部分。

  • 智能合約列表區域,位于Remix頁面的左側,如果第一次使用Remix,這個區域只有browser和config兩個節點,如果以前使用Remix創建過智能合約,會在browser節點下方顯示曾經創建過的智能合約文件(.sol文件)。
  • 代碼區域,位于Remix頁面的中上部,用于編寫智能合約代碼。
  • 日志區域,位于Remix頁面的中下部,運行智能合約后,會將日志信息輸出到這一區域。
  • 設置區域,位于Remix頁面右側,在這一區域可進行各種設置,如將智能合約部署在以太坊網絡上,運行智能合約等。

除了這4部分外,在Remix頁面左上角還有一排按鈕,其中最左側的加號按鈕用于新建智能合約,最右側的加號和減號按鈕分別用于增加和減少智能合約代碼的字號。Remix頁面的整體布局如下圖所示。

第一行代碼:以太坊(2)-使用Solidity語言開發和測試智能合約

接下來單擊Remix頁面左上角的加號按鈕,會彈出一個如下圖所示的頁面,在“File Name”文本框輸入“Calc.sol”,然后單擊“OK”按鈕創建新的智能合約。

第一行代碼:以太坊(2)-使用Solidity語言開發和測試智能合約

將上一節給出的智能合約代碼輸入代碼區域,可以點擊加號和減號按鈕將代碼字體調整到自己感覺舒服的程度,效果如下圖所示。在設置區域會出現一些警告,并不需要管它們。

第一行代碼:以太坊(2)-使用Solidity語言開發和測試智能合約

在設置區域切換到“Run”頁面,所有的設置保持默認值即可,然后點擊中間的“Deploy”部署Calc合約。成功部署Calc合約后,會在“Run”頁面下方根據Calc合約中的函數顯示相應的按鈕,如本例中只有一個add函數,并且該函數有兩個參數,所以在“Run”頁面下方會出現一個“add”按鈕,在按鈕旁邊的文本框輸入“3,4”,表示add函數的兩個參數值,如下圖所示。

第一行代碼:以太坊(2)-使用Solidity語言開發和測試智能合約

最后單擊“add”按鈕執行add函數,會在日志區域顯示相應的信息,然后單擊日志區域輸出信息的向下箭頭,會在日志區域顯示一個表格,在“decoded output”行會顯示add函數的返回值(計算結果),如下圖所示。

第一行代碼:以太坊(2)-使用Solidity語言開發和測試智能合約

通過本節的若干步驟,終于成功運行了Calc智能合約的add函數,并獲得了add函數的返回值(本例是7),不過這個智能合約程序并沒有部署在以太坊網絡上,而是在本地運行的,也就是說,本節其實是通過模擬的方式運行了本地合約,這種運行方式只能測試智能合約中的函數的邏輯是否正確,并不能將以太坊客戶端、以太坊網絡和智能合約放到一起聯調,所以在實際的場景中,需要將智能合約部署到以太坊網絡上才能完整地對其進行測試。

向AI問一下細節

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

AI

宿迁市| 玉田县| 迭部县| 延安市| 仙居县| 宜良县| 渭南市| 蒙山县| 方城县| 永丰县| 灯塔市| 奉贤区| 沧州市| 增城市| 肃南| 澄迈县| 湖南省| 响水县| 湟中县| 友谊县| 兴宁市| 修文县| 武清区| 封丘县| 宁陵县| 洛阳市| 黄石市| 枝江市| 石台县| 阿拉善左旗| 淮南市| 广灵县| 青海省| 苍梧县| 吉林市| 黄陵县| 成武县| 馆陶县| 新化县| 晋城| 汤阴县|