【鏈塊技術46期】智能合約基礎語言(十一)——創建和調用合約

 

智能合約基礎語言(十一)——創建和調用合約

一、目錄

☞創建合約

☞調用合約

二、創建合約

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章