智能合約調(diào)用是實(shí)現(xiàn)一個(gè) DApp 的關(guān)鍵,一個(gè)完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)十年堅(jiān)持,服務(wù)企業(yè)網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站建設(shè)服務(wù)。成百上千企業(yè)的合作經(jīng)驗(yàn),幫助我們?yōu)榉?wù)企業(yè)不斷提升價(jià)值。為企業(yè)建設(shè)開(kāi)發(fā)網(wǎng)站和維護(hù),主推個(gè)性化定制型網(wǎng)站設(shè)計(jì)
我們先來(lái)了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運(yùn)行在以太坊節(jié)點(diǎn)的 EVM 中。因此要 想調(diào)用合約必須要訪問(wèn)某個(gè)節(jié)點(diǎn)。
以后端程序?yàn)槔蠖朔?wù)若想連接節(jié)點(diǎn)有兩種可能,一種是雙 方在同一主機(jī),此時(shí)后端連接節(jié)點(diǎn)可以采用 本地 IPC(Inter-Process Communication,進(jìn) 程間通信)機(jī)制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)機(jī)制;另 一種情況是雙方不在同一臺(tái)主機(jī),此時(shí)只能采用 RPC 機(jī)制進(jìn)行通信。
提到 RPC, 讀者應(yīng)該對(duì) Geth 啟動(dòng)參數(shù)有點(diǎn)印象,Geth 啟動(dòng)時(shí)可以選擇開(kāi)啟 RPC 服務(wù),對(duì)應(yīng)的 默認(rèn)服務(wù)端口是 8545。。
接著,我們來(lái)了解一下智能合約運(yùn)行的過(guò)程。
智能合約的運(yùn)行過(guò)程是后端服務(wù)連接某節(jié)點(diǎn),將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點(diǎn),節(jié)點(diǎn)在驗(yàn)證了交易的合法性后進(jìn)行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。
就像數(shù)據(jù)庫(kù)一樣,每個(gè)區(qū)塊鏈平臺(tái)都會(huì)提供主流 開(kāi)發(fā)語(yǔ)言的 SDK(Software Development Kit,軟件開(kāi)發(fā)工具包),由于 Geth 本身就是用 Go 語(yǔ)言 編寫的,因此若想使用 Go 語(yǔ)言連接節(jié)點(diǎn)、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問(wèn)題就是流程和 API 的事情了。
總結(jié)一下,智能合約被調(diào)用的兩個(gè)關(guān)鍵點(diǎn)是節(jié)點(diǎn)和 SDK。
由于 IPC 要求后端與節(jié)點(diǎn)必須在同一主機(jī),所以很多時(shí)候開(kāi)發(fā)者都會(huì)采用 RPC 模式。除了 RPC,以太坊也為開(kāi)發(fā)者提供了 json- rpc 接口,本文就不展開(kāi)討論了。
接下來(lái)介紹如何使用 Go 語(yǔ)言,借助 go-ethereum 源碼庫(kù)來(lái)實(shí)現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來(lái)說(shuō)一下總體步驟,以下面的合約為例。
步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語(yǔ)言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。
最好能將 calldemo.abi 單獨(dú)保存在一個(gè)目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:
步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點(diǎn)。因此 Environment 選擇為 Web3 Provider。
在【Environment】選項(xiàng)框中選擇“Web3 Provider”,然后單擊【Deploy】按鈕。
部署后,獲得合約地址為:0xa09209c28AEf59a4653b905792a9a910E78E7407。
步驟 03:利用 abigen 工具(Geth 工具包內(nèi)的可執(zhí)行程序)編譯智能合約為 Go 代碼。abigen 工具的作用是將 abi 文件轉(zhuǎn)換為 Go 代碼,命令如下:
其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結(jié)構(gòu)類型。 (3)pkg:指定輸出文件 package 名稱。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開(kāi)該文件欣賞一下,注意不要修改它。
步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。
步驟 04:設(shè)置 go mod,以便工程自動(dòng)識(shí)別。
前面有所提及,若要使用 Go 語(yǔ)言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:
該指令會(huì)自動(dòng)將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯(cuò)。不過(guò),Go 語(yǔ)言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴工程的事情就不必關(guān)心了。
接下來(lái)設(shè)置 module 生效和 GOPROXY,命令如下:
在項(xiàng)目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。
步驟 05:運(yùn)行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。
上述輸出信息中,可以看到 Go 語(yǔ)言會(huì)自動(dòng)下載依賴文件,這就是 go mod 的神奇之處。看到 2020,相信讀者也知道運(yùn)行結(jié)果是正確的了。
做ide不是那么容易的,Go的核心團(tuán)隊(duì)人數(shù)不多忙不過(guò)來(lái)。android現(xiàn)在是google的重心,不也沒(méi)有專門從頭開(kāi)發(fā)一款ide么。ide真不是這么容易弄得,關(guān)鍵是要花大量時(shí)間。
另
一個(gè)原因就是Go的開(kāi)發(fā)者unix,plan9的背景很深,所以更喜歡命令行環(huán)境,它不是也沒(méi)有X的庫(kù)么,不過(guò)以后可能會(huì)往這方面發(fā)展。Go官方的態(tài)度
是,我們不負(fù)責(zé)開(kāi)發(fā)ide,但我們會(huì)盡量開(kāi)發(fā)出一系列的工具鏈來(lái)支持ide(比如格式化器,靜態(tài)分析器,調(diào)試器這些,現(xiàn)在已有的:Gofmt
,Golist,pprof,gofix,Go oracle,以后可能還會(huì)開(kāi)發(fā)一個(gè)debugger,gdb對(duì)goroutine支持的太差
等等)。
比如說(shuō)Go的開(kāi)發(fā)者基數(shù)到達(dá)一定程度后,jetbrains這個(gè)ide專業(yè)戶就會(huì)為Go開(kāi)發(fā)ide(它現(xiàn)在為oc開(kāi)發(fā)了ide,正在為c/c++開(kāi)發(fā)ide),它所做的就是把Go已有的工具鏈用圖形界面的形式整合起來(lái)就行。
go 可以開(kāi)發(fā)桌面應(yīng)用,但并不是很舒適。
可以使用的GUI庫(kù)有:
1、goqt,LiteIDE作者出品,Go和QT的綁定,還未發(fā)布
2、go.uik,純Go實(shí)現(xiàn)的并發(fā)UI工具
3、walk,Windows Application Library Kit
4、gform,Windows GUI framework
目前的話walk用得比較多
不過(guò)go的GUI庫(kù)用起來(lái)沒(méi)有C#、C/C++的那么順手。
這個(gè)問(wèn)題不久之后應(yīng)該會(huì)有所改善,畢竟用Go開(kāi)發(fā)桌面的需求在不斷增加。
目前我采用的是用go http 做后端,Webkit+HTML5 做界面,表現(xiàn)力很好,前端不需要學(xué)習(xí)新知識(shí),一般的管理類應(yīng)用都能搞定。
LiteIDE是一款專門為Go語(yǔ)言開(kāi)發(fā)的跨平臺(tái)輕量級(jí)集成開(kāi)發(fā)環(huán)境(IDE),由QT編寫。LiteIDE主要特點(diǎn):支持主流操作系統(tǒng)WindowsLinuxMacOSXGo編譯環(huán)境管理和切換管理和切換多個(gè)Go編譯環(huán)境支持Go語(yǔ)言交叉編譯與Go標(biāo)準(zhǔn)一致的項(xiàng)目管理方式基于GOPAT
LiteIDE是一款開(kāi)源,跨平臺(tái)的輕量級(jí)Go語(yǔ)言集成開(kāi)發(fā)環(huán)境。操作簡(jiǎn)單,提示迅速!當(dāng)然不足之處也有很多,不過(guò)除了golad之外,個(gè)人覺(jué)得比vscode,eclipse等用的更舒心一點(diǎn)(ps:指的是編寫golang,每個(gè)人的感受不一樣,勿噴)
目前本人使用的LiteIDE版本號(hào)是:x36.1
其中讓我感受不是很好的兩個(gè)點(diǎn)是:1.沒(méi)有自動(dòng)go lint檢測(cè),需要手動(dòng)。2.更改鍵盤映射不能捕獲按鍵的內(nèi)容,需要自己粘貼復(fù)制比方說(shuō)Ctrl+C之類的上去,如果不能接受這兩點(diǎn)需要考慮考慮。當(dāng)然也有可能是我玩的不夠透徹,如果有人知道,請(qǐng)?jiān)u論告知,感激不敬:)。
那么,接下來(lái)就讓我們來(lái)學(xué)習(xí)一下LiteIDE這款國(guó)人開(kāi)發(fā)的編輯器的簡(jiǎn)單用法:
當(dāng)我們使用一款I(lǐng)DE的時(shí)候,首先當(dāng)然是配置一下環(huán)境,其次是快捷鍵,界面布局之類的了。所以,我們先來(lái)
1.配置環(huán)境:
LiteIDE給我們提供了多種的環(huán)境,目的是為了讓我們能將程序編譯成不同的系統(tǒng)所能執(zhí)行的文件,例如我目前使用的是windows64系統(tǒng),而且我的服務(wù)器也是windows64,那我只需要選擇system的環(huán)境就可以,這樣在我執(zhí)行編譯執(zhí)行后,編譯器將會(huì)自動(dòng)生成windows中可執(zhí)行的.exe文件。
1.1配置管理GOPATH/Modules/GOPROXY
在我們項(xiàng)目是需要使用GOPATH或者是Modules的時(shí)候可以點(diǎn)擊旁邊的倒三角選項(xiàng),on表示使用mod,off表示不使用,auto表示根據(jù)檢測(cè),有的話使用。
底下的GOPROXY可以設(shè)置代理,畢竟我們大中華的墻不設(shè)置代理還是很給力得。設(shè)置代理得另外一種方法是點(diǎn)擊 工具-編輯當(dāng)前環(huán)境,然后在里面輸入代理,我一般用得是阿里云得代理:GOPROXY=,編輯當(dāng)前環(huán)境得作用其實(shí)就跟我們?cè)诿钚兄休斎雊o env然后去設(shè)置是一個(gè)道理。
2.設(shè)置快捷鍵
點(diǎn)擊查看-選項(xiàng)-LiteApp中點(diǎn)擊鍵盤,然后就可以設(shè)置快捷鍵了,當(dāng)然目前我這個(gè)版本需要粘貼復(fù)制進(jìn)去
3.使用
3.1現(xiàn)在我們一般都是使用mod來(lái)管理,當(dāng)然首先要設(shè)置GOPATH了。
將自己本地得GOPATH添加進(jìn)去就可以了,如圖所示可以添加多個(gè)。
3.2編輯器自動(dòng)生成go.mod文件
點(diǎn)擊M鍵,會(huì)彈出下拉菜單,選擇go module init將會(huì)自動(dòng)生成mod文件
3.3獲取第三方包
可以使用M里面得go mod tidy也可以使用G鍵里面得Get按鈕
目前記起來(lái)得就這么多,后續(xù)想起來(lái)后再添加。::)
文章題目:go語(yǔ)言用ide go語(yǔ)言用什么寫的
新聞來(lái)源:http://m.newbst.com/article6/doojjog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、電子商務(wù)、域名注冊(cè)、商城網(wǎng)站、Google、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)