智能合約調(diào)用是實(shí)現(xiàn)一個(gè) DApp 的關(guān)鍵,一個(gè)完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。
10年積累的網(wǎng)站制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有閩清免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
我們先來了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運(yùn)行在以太坊節(jié)點(diǎn)的 EVM 中。因此要 想調(diào)用合約必須要訪問某個(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)程過程調(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í)可以選擇開啟 RPC 服務(wù),對(duì)應(yīng)的 默認(rèn)服務(wù)端口是 8545。。
接著,我們來了解一下智能合約運(yùn)行的過程。
智能合約的運(yùn)行過程是后端服務(wù)連接某節(jié)點(diǎn),將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點(diǎn),節(jié)點(diǎn)在驗(yàn)證了交易的合法性后進(jìn)行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。
就像數(shù)據(jù)庫一樣,每個(gè)區(qū)塊鏈平臺(tái)都會(huì)提供主流 開發(fā)語言的 SDK(Software Development Kit,軟件開發(fā)工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節(jié)點(diǎn)、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。
總結(jié)一下,智能合約被調(diào)用的兩個(gè)關(guān)鍵點(diǎn)是節(jié)點(diǎn)和 SDK。
由于 IPC 要求后端與節(jié)點(diǎn)必須在同一主機(jī),所以很多時(shí)候開發(fā)者都會(huì)采用 RPC 模式。除了 RPC,以太坊也為開發(fā)者提供了 json- rpc 接口,本文就不展開討論了。
接下來介紹如何使用 Go 語言,借助 go-ethereum 源碼庫來實(shí)現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來說一下總體步驟,以下面的合約為例。
步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語言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 文件,讀者可以打開該文件欣賞一下,注意不要修改它。
步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。
步驟 04:設(shè)置 go mod,以便工程自動(dòng)識(shí)別。
前面有所提及,若要使用 Go 語言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:
該指令會(huì)自動(dòng)將 go-ethereum 下載到“$GOPATH/src/github點(diǎn)抗 /ethereum/go-ethereum”,這樣還算 不錯(cuò)。不過,Go 語言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴工程的事情就不必關(guān)心了。
接下來設(shè)置 module 生效和 GOPROXY,命令如下:
在項(xiàng)目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。
步驟 05:運(yùn)行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。
上述輸出信息中,可以看到 Go 語言會(huì)自動(dòng)下載依賴文件,這就是 go mod 的神奇之處。看到 2020,相信讀者也知道運(yùn)行結(jié)果是正確的了。
Go函數(shù)是指:一段具有獨(dú)立功能的代碼,然后可以在程序中其他地方多次調(diào)用。
Go分為自定義函數(shù),系統(tǒng)函數(shù)。
函數(shù)可以將一個(gè)大的工作拆解成小的任務(wù)。
函數(shù)對(duì)用戶隱藏了細(xì)節(jié)。
Golang函數(shù)特點(diǎn):
支持不定長(zhǎng)參數(shù)
支持多返回值
支持命名返回參數(shù)
支持匿名函數(shù)、閉包
函數(shù)也是類型,可以賦值給變量
一個(gè)package下不得有兩個(gè)同名函數(shù),不支持函數(shù)重載
函數(shù)參數(shù)可以沒有,或者多個(gè)參數(shù)
注意類型在變量名后面
多個(gè)連續(xù)的函數(shù)命名參數(shù)是同一類型,除了最后一個(gè)類型,其余可以省略
函數(shù)可以返回任意數(shù)量的返回值
函數(shù)體中,形參作為局部變量
函數(shù)返回值可以用 _標(biāo)識(shí)符進(jìn)行忽略
main()函數(shù)由編譯器調(diào)用,其他函數(shù)手動(dòng)調(diào)用
Go函數(shù)基本語法:
1)形參:函數(shù)的輸入?yún)?shù)
2)執(zhí)行代碼:實(shí)現(xiàn)函數(shù)功能的代碼塊
3)函數(shù)的返回值可有可無
func 函數(shù)名(形參列表)(返回值列表){
執(zhí)行代碼
return 返回值列表
}
func test(x, y int, z string) (int, string) {
//類型相同的相鄰參數(shù)x,y參數(shù)類型可以合并
//多返回值得用括號(hào)括起來
n := x + y
return n, z
}
根據(jù)Go趨勢(shì)報(bào)告顯示,全球范圍內(nèi)有 110 萬專業(yè)開發(fā)者選擇Go作為其主要開發(fā)語言。如果把以其他編程語言作為主要開發(fā)語言,同時(shí)也在使用Go的開發(fā)者計(jì)算在內(nèi),這一數(shù)字將高達(dá)270萬,中國的Go語言開發(fā)者排名第一,全球占比超過16%。
Go 語言能夠支持并構(gòu)建與微服務(wù)結(jié)合的內(nèi)部工具、架構(gòu)和后端服務(wù)而深受IT企業(yè)歡迎,許多IT架構(gòu)工具由Go構(gòu)建而成,例如大型的Kubernetes、Docker和Vault等。數(shù)據(jù)顯示,有63%的具有統(tǒng)治力的云原生項(xiàng)目都是用Go構(gòu)建。
因此,博睿數(shù)據(jù)在國內(nèi)首發(fā)支持Go語言智能探針,對(duì)于提升業(yè)務(wù)性能,助力企業(yè)數(shù)字化轉(zhuǎn)型有著非常重要的意義。
SmartAgent探針技術(shù)集結(jié)主流編程語言
SmartAgent是博睿數(shù)據(jù)自研的自動(dòng)化部署的一體化探針,在已支持JAVA,PHP,點(diǎn)虐 ,Nodejs,.NET Core,Python的基礎(chǔ)上,新增了對(duì)Go語言的支持。
相較而言,傳統(tǒng)探針技術(shù)需要客戶配合修改應(yīng)用程序代碼,風(fēng)險(xiǎn)不可控,需要客戶重新編譯程序集成探針,耦合度高。
不同于行業(yè)內(nèi)傳統(tǒng)探針技術(shù),博睿數(shù)據(jù)GoAgent探針直接后臺(tái)安裝即可,主動(dòng)注入和嵌碼,降低與客戶程序耦合、無需二次修改代碼、提高 GoAgent 技術(shù)易用性。無論是動(dòng)態(tài)編譯還是靜態(tài)編譯的代碼,博睿數(shù)據(jù)Samrt Agent技術(shù)都可以在不進(jìn)行任何修改的情況下進(jìn)行服務(wù)級(jí)別和代碼級(jí)別的分布式鏈路跟蹤,實(shí)現(xiàn)業(yè)務(wù)的可觀測(cè)性。
GoAgent探針支持六大功能,實(shí)現(xiàn)全鏈路追蹤
文章題目:go語言調(diào)用鏈追蹤 golang鏈?zhǔn)秸{(diào)用
鏈接地址:http://www.rwnh.cn/article6/ddjcgog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、電子商務(wù)、營銷型網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、企業(yè)建站
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)