當前位置:
首頁 > 知識 > 使用Go語言與Ethereum智能合約進行交互

使用Go語言與Ethereum智能合約進行交互

點擊上方「CSDN」關注我們

作者丨[zupzup]

翻譯丨Diwei


譯者註:本文主要介紹使用Go語言與Ethereum智能合約進行交互。以下為譯文

儘管最近出現了麻煩,但Ethereum仍然是區塊鏈空間中實現智能合約最重要的系統,而且這種情況似乎不太可能很快改變。

在我看來,技術本身具有很大的潛力,從學術的角度來看是非常有趣的,但正如前面提到的問題,之前展示出來了很多問題,區塊鏈技術,智能合約,特別是帶有Solidity的Ethereum生態系統是非常不成熟的,而且也沒有準備好的黃金時段/生產用例。

然而,這是學習和了解這種技術的一個很好的機會,能夠在應用程序奔潰前提前做準備。

在我之前的一篇文章中,我創建了一個小型應用程序,其中包含一個簡單的Winner-Takes-All Crowdfunding合約。在這篇文章中,我們將接受這份合約,並且去引用contract.sol這個合約,看看我們是否可以使用Go語言進行部署和交互。

為什麼用GO語言?其中一個原因是,GO語言的作用很強大。最廣泛使用的Ethereum客戶端是用Go語言寫的,這意味著有一個很好的生態系統,可以與Ethereum和智能契約進行交互,如從共享庫生成可重用的代碼。

在這個示例中,我們不會使用真正的區塊鏈作為部署目標,而是使用go - ethereum提供的模擬後端,這樣我們就可以安全地進行測試和實驗,而不用花任何錢。

智能合約本身很簡單(我不會詳細介紹紹它的功能或工作原理),只要解釋合約中部署了3個參數就夠了,3個參數如下:

  • 項目最低入會費

  • 提交新項目的最後期限

  • 支持項目的最後期限

在第一階段,項目可以使用名稱和網址提交,參數至少包括最低費用。 在第二階段,可以通過向合作夥伴的發送地址來支持項目。

然而,在這篇文章中,我們將關注:

  • 部署合約

  • 從合約中讀取數據

  • 與合約(交易)的交互

  • 通過地址實例化已部署的合約

我們會用70行代碼完成這些。讓我們開始吧!

為了能夠跟上,你需要一些東西。首先,最重要的是,您需要solc Solidity編譯器。

然後,使用go - ethereum並建立它:

使用Go語言與Ethereum智能合約進行交互

我們可以通過solc和geth devtools,然後從生成合約的go - version開始。我們的智能合同的sol文件:

使用Go語言與Ethereum智能合約進行交互

生成的代碼看起來像這樣。

如您所見,我們有部署和實例化合約的方法,以及所有公共合約方法的映射。

下一步是將合約部署到模擬後端。

為此,需要進行一些設置。如上所述,為了簡單起見,我們將使用SimulatedBackend作為我們的目標塊鏈,在這篇文章的最後,將有一個關於如何使用testnet甚至是真實的Etherey塊鏈接的簡短部分。

使用一些go - ethereum的依賴項,我們可以開始設置:

使用Go語言與Ethereum智能合約進行交互

我們只需創建一個密鑰,創建一個乙太網的Genesis帳戶,並啟動模擬後端,該後端返回一個bind.ContractBackend。現在我們可以使用生成的DeployWinnerTakesAll方法開始部署合約。

我們傳遞的是一個auth對象,它代表我們的身份,參數包括the backend sim和 Minimum Entry Fee,Project Deadline和 Campaign Deadline,這些參數每一項都使用一個bigInt。該方法返回合約將被部署到的地址,以及合約的句柄和一個錯誤。還會返回一個事務對象,但我們不會在這裡處理它。

既然已經部署了合約,我們就應該能夠與它交互。例如,我們可以檢查我們發送的最後期限是否正確地設置在合約中:

使用Go語言與Ethereum智能合約進行交互

但是,如果執行此操作,則返回< nil >。那是因為我們的合約還沒有真正開採。如果我們使用真實的網路作為後端,我們就必須等到它發生,但是在我們的模擬後端,我們可以這樣做:

使用Go語言與Ethereum智能合約進行交互

我們回到我們部署的日期:

使用Go語言與Ethereum智能合約進行交互

好了。這樣我們就可以閱讀合約公開的數據。現在我們想要和它互動。

在這種情況下,最簡單的方法是,通過發送一個項目的名稱和url來提議一個新項目,該項目至少具有最低的輸入費用:

使用Go語言與Ethereum智能合約進行交互

當然,我們需要再次開採:

使用Go語言與Ethereum智能合約進行交互

但是我們得到以下輸出:

使用Go語言與Ethereum智能合約進行交互

太棒了——這意味著我們的項目被創建了。這樣我們就可以部署、讀和寫合約。

但如果合約已經部署了,我們只是想和它互動呢?幸運的是,所生成的代碼包括一個NewWinnerTakesAll方法,它僅使用部署的契約的地址,讓我們實例化合約:

使用Go語言與Ethereum智能合約進行交互

我們得到與我們部署的合約相同的返回值,並可以以與此版本相同的方式進行交互,這個版本是通過地址實例化實現的。

我們已經完成了所有的步驟,我們需要有意義地與一個合約進行交互,但只需要在模擬的後端。為了使用testnet或real Ethereum區塊鏈,我們只需要適應以下幾件事:

使用Go語言與Ethereum智能合約進行交互

這將產生我們在上面創建的auth對象。當然,請不要在代碼中使用明文或密碼,而是以安全的方式載入它們。

如果已經部署了合約,我們不需要創建NewIPCClient,但是可以直接撥號到節點:

使用Go語言與Ethereum智能合約進行交互

你可以在這裡找到代碼和完整的例子。

總結

正如我在這篇文章的開頭所說的,在我看來,要依賴可靠的智能合同來處理應用程序奔潰還為時過早,但這和其他一些基於區塊的智能合同的方法的潛力是巨大的,因此了解它周圍的技術當然是值得的。

Go語言適合於與基於ethereumbased的智能合約交互的任務,因為有很多來自geth的可重用代碼,甚至還有一些關於如何開始的文檔。這當然可以用其他語言來實現。(使用web3),但如果你喜歡的話,這似乎是一個可靠的選擇。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

開發過程中的必然產物,劣質代碼產生的五個原因
優化網站性能必備的6種架構方案,你知道嗎?
神秘的Mac惡意軟體「果蠅」曝光,已感染受害者多年
成為一名更好前端開發人員的9個技巧
Juggernaut:由Rust語言實現的試驗性神經網路

TAG:CSDN |

您可能感興趣

谷歌 Google Home Mini 智能音箱使用體驗報告Soomal
Yandex聯合Fraunhofer IIS推出俄語智能音箱
Cheerble Studio推出智能骨頭Wickerbone,可以與寵物進行互動
LMI Technologies正式發布Gocator三維智能感測器 應用於橡膠和輪胎行業
Google Android Wear智能手錶操作系統更名為Wear OS by Google
谷歌 Google Home Mini 智能音箱使用體驗報告 [Soomal]
使用Lightroom智能調整照片
Etherparty用戶友好型智能合約編譯平台
Google Assistant 語音助手將支持更多語言,比 Siri 更加智能
Ceilometer和Monasca 能幫OpenStack實現智能運維
WeWork收購SEO和營銷智能平台Conductor
首款Android Oreo Go Edition智能機Alcatel 1X上手
智能合約Bug湧現,Okex、Poloniex、Coinone交易所暫停ERC20存款
watchOS 5 發布!對講機功能、自動 workout、Siri 更智能
Roaming Mantis:通過Wi-Fi路由器感染智能手機
谷歌智能手錶操作系統更名為Wear OS by Google
Google 推出 Android 版官方播客應用,支持 AI 智能推薦
智能營銷計劃的解決方案Gagapay Network
Google Home、Amazon Echo、HomePod三套智能家居對比
數學家:「Scriptless Scripts」可代替智能合約