1. 程式人生 > >智慧合約基礎語言(十一)——建立和呼叫合約

智慧合約基礎語言(十一)——建立和呼叫合約

 

智慧合約基礎語言(十一)——建立和呼叫合約

一、目錄

☞建立合約

☞呼叫合約

二、建立合約

我們寫好一個合約後,一個合約如何部署到以太坊網路,並實現合約函式的呼叫呢?合約部署到以太坊網路上,也是一個交易的過程。首先向全網傳送一個合約建立的交易,待礦工打包交易,並獲得全網的認可從而生效後,則得到合約的地址;既而向這個地址傳送訊息呼叫,實現呼叫合約的某個函式。

2.1 初始建立合約

建立合約主要有以下幾種方式:

• solidity建立合約

• truffle框架建立合約

• web3.js建立合約

2.2 建立合約的準備事項

Testrpc:

testrpc是在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,testrpc不同於geth,geth是真正的以太坊環境。

Truffle:

truffle是本地的用來構建專案、編譯、部署智慧合約的工具

安裝testrpc和truffle的命令:

如果網路原因卡住,需要安裝cnpm:

安裝好cnpm之後:

2.3 合約中建立合約

在Solidity中建立一個合約非常簡單,但建立者必須知道要建立的合約原始碼。通過下面的例子,我們來看下如何在合約中建立合約。

下面是一個要被建立的合約的原始碼:

在建立者合約中,使用new關鍵字建立合約,由於建立者合約必須要知道原始碼。我們可以把多個合約寫到同一個檔案,或使用import關鍵字來引入關聯合約,下面是引入Test合約,並建立的一個例項的具體實現:

上述實現中,我們首先引入了Test.sol原始碼檔案。需要注意的是,使用./說明兩個檔案是放在同級目錄下,不以.開頭預設是以絕對路徑定址。在合約NewContract中,我們使用new關鍵字部署了一個Test.sol合約。成功呼叫後,我們不止可以得到合約部署的地址,也可以直接呼叫合約提供的函式。

2.4 初始建立合約

新建一個資料夾,作為truffle的開發目錄,我這裡取名為helloWorld。另開一個終端,命令列進入helloWorld件夾,執行truffle init命令。 然後在生成的contracts目錄裡新建一個合約檔案(字尾是.sol),然後在migrations目錄裡新建一個部署指令碼(字尾是.js)。 分別編寫剛才新建的合約和部署指令碼,然後執行truffle compile, 如果在控制檯裡沒有報錯,則說明合約沒有語法錯誤可以部署到測試鏈上。 然後執行truffle migrate部署合約。之後就可以執行truffle console開啟truffle自己的控制檯來呼叫合約了。

呼叫方法: 嘗試在truffle控制檯裡輸入:

僅僅是在控制檯裡呼叫合約還不足以完成專案, 還需要前端介面來展示合約資料以及與合約互動。如何讓使用者通過DApp介面來呼叫合約中定義的方法來完成互動呢?這就需要用到一個js庫名字叫做web3。

三、web3.js呼叫合約

web3.js是以太坊提供的一個Javascript庫,它封裝了以太坊的JSON RPC API,提供了一系列與區塊鏈互動的Javascript物件和函式,包括檢視網路狀態,檢視本地賬戶、檢視交易和區塊、傳送交易、編譯/部署智慧合約、呼叫智慧合約等,其中最重要的就是與智慧合約互動的API。

3.1 在專案中安裝web3.js:

以上命令會將web3.js下載到web3test/node_modules目錄下,其中–save引數會web3.js新增到package.json配置檔案中。

3.2 建立web3物件

要使用web3.js與區塊鏈互動,需要先建立web3物件,然後連線到以太坊節點。 在web3test目錄下新建index.js檔案,在其中輸入以下程式碼:

3.3 獲取已部署的合約例項

要使用智慧合約,必須先從區塊鏈中獲取到合約例項,獲取合約例項需要合約的ABI和合約的地址, ABI在truffle專案中的build目錄裡,合約地址會在執行完truffle migrate之後顯示在控制檯裡:

之後就可以通過DAppInstance物件來呼叫合約中的函數了。

 

-END-

附上鍊塊學院網課學習平臺連結:連結:http://wk.liankuai.tech/

助教衛星:lkxy007