當前位置:編程學習大全網 - 源碼下載 - 智能交易源代碼大全

智能交易源代碼大全

智能合約調用是實現DApp的關鍵。壹個完整的DApp包括前端、後端、智能合約和區塊鏈系統,智能合約的調用是連接前端和後端的區塊鏈的關鍵。

我們先來了解壹下智能合約調用的基本原理。智能合約在以太坊節點的EVM運行。因此,如果要調用契約,就必須訪問壹個節點。

以後端程序為例。如果後端服務想要連接節點,有兩種可能。壹種是雙方在同壹個主機裏。此時,後端連接節點可以采用本地IPC(進程間通信)機制或RPC(遠程過程調用)機制。另壹種情況,雙方不在同壹個主機上,只能使用RPC機制進行通信。

說到RPC,讀者應該對Geth的啟動參數有點印象。Geth啟動時,可以選擇啟動RPC服務,對應的默認服務端口是8545。。

那麽,我們來看看智能合約操作的流程。

智能合約的運行過程是後端服務連接壹個節點,向該節點發送智能合約的調用(事務)。驗證交易合法性後,節點廣播全網,礦工打包成塊表示交易確認,交易完成。

就像數據庫壹樣,每個區塊鏈平臺都會提供主流開發語言的SDK(軟件開發工具包)。由於Geth本身是用Go語言編寫的,如果想用Go語言連接節點,發送事務,可以直接將go-ethereum(Geth源代碼)包導入到項目中,剩下的問題就是流程和API了。

總結壹下,智能合約被調用的兩個關鍵點是節點和SDK。

因為IPC要求後端和節點必須在同壹個主機,所以很多開發者會采用RPC模式。除了RPC,以太坊還為開發者提供了json- rpc接口,本文就不討論了。

接下來介紹了如何使用Go語言,借助go-ethereum源代碼庫實現智能合約的調用。有固定的步驟。先說壹般步驟,以下面的合同為例。

步驟01:編譯合同並獲得合同ABI(應用程序二進制接口)。點擊abi按鈕,復制合同abi信息,粘貼到calldemo.abi文件中(文件可以使用Go語言IDE創建,文件名可以自定義,後綴最好是ABI)。

最好將calldemo.abi保存在單個目錄下,輸入“ls”命令只能看到calldemo.abi文件。參考效果如下:

步驟02:獲取合同地址。註意,契約將被部署到Geth節點。因此,選擇環境作為Web3提供者。

在環境選項框中選擇“Web3 Provider ”,然後單擊部署按鈕。

部署後,合同地址為0xa 09209 c 28 AEF 59 a 4653 b 905792 a 910 e 78 e 7407。

步驟03:使用abigen工具(Geth toolkit中的可執行程序)將智能合約編譯成Go代碼。Abigen工具用於將abi文件轉換成Go代碼,命令如下:

每個參數的含義如下。(1)abi:指定傳入的abi文件。(2)類型:指定輸出文件中的基本結構類型。(3)pkg:指定輸出文件包的名稱。(4)out:指定輸出文件名。執行後會在代碼目錄中看到funcdemo.go文件,讀者可以打開文件欣賞,但註意不要修改。

步驟04:創建main.go並填寫以下代碼。註意代碼中HexToAddress函數中部署後契約的地址,該地址是在步驟01中獲取的。

步驟04:設置go mod自動識別項目。

如前所述,如果想用Go語言調用智能合約,需要下載go-ethereum項目,可以使用以下指令:

這個指令會自動把go-ethereum下載到“$ gopath/src/github . com/ether eum/go-ether eum”,還不錯。但是Go語言從1.11版本開始增加了模塊管理項目的模式。只要設置了go mod,就不用關心下載依賴項目了。

接下來,設置模塊生效,GOPROXY。這些命令如下所示:

在項目中,執行初始化,calldemo可以自定義名稱。

步驟05:運行代碼。執行代碼,妳會看到下面的效果和2020年的最終輸出。

從上面的輸出信息可以看出,Go語言會自動下載依賴文件,這就是go mod的神奇之處。看到2020,相信讀者也知道,跑分結果是正確的。

  • 上一篇:請大神幫幫忙,python神經網絡代碼運行出錯,程序找不到訓練集,請問如何讓程序找到MNIST訓練集的位置?
  • 下一篇:通過源代碼解釋視頻
  • copyright 2024編程學習大全網