中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

使用Go語言與Ethereum智能合約進(jìn)行交互

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

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

盡管最近出現(xiàn)了 麻煩 ,但Ethereum仍然是區(qū)塊鏈空間中實(shí)現(xiàn)智能合約最重要的系統(tǒng),而且這種情況似乎不太可能很快改變。

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

然而,這是學(xué)習(xí)和了解這種技術(shù)的一個很好的機(jī)會,能夠在應(yīng)用程序奔潰前提前做準(zhǔn)備。

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

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

在這個示例中,我們不會使用真正的區(qū)塊鏈作為部署目標(biāo),而是使用go - ethereum提供的模擬后端,這樣我們就可以安全地進(jìn)行測試和實(shí)驗(yàn),而不用花任何錢。

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

  • 項(xiàng)目最低入會費(fèi)
  • 提交新項(xiàng)目的最后期限
  • 支持項(xiàng)目的最后期限

在第一階段,項(xiàng)目可以使用名稱和網(wǎng)址提交,參數(shù)至少包括最低費(fèi)用。 在第二階段,可以通過向合作伙伴的發(fā)送地址來支持項(xiàng)目。

然而,在這篇文章中,我們將關(guān)注:

  • 部署合約
  • 從合約中讀取數(shù)據(jù)
  • 與合約(交易)的交互
  • 通過地址實(shí)例化已部署的合約

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

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

然后,使用go - ethereum并建立它:

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

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

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

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

為此,需要進(jìn)行一些設(shè)置。 如上所述,為了簡單起見,我們將使用SimulatedBackend作為我們的目標(biāo)塊鏈,在這篇文章的最后,將有一個關(guān)于如何使用testnet甚至是真實(shí)的Etherey塊鏈接的簡短部分。

使用一些go - ethereum的依賴項(xiàng),我們可以開始設(shè)置:

我們只需創(chuàng)建一個密鑰,創(chuàng)建一個以太網(wǎng)的Genesis帳戶,并啟動模擬后端,該后端返回一個bind.ContractBackend,F(xiàn)在我們可以使用生成的DeployWinnerTakesAll方法開始部署合約。

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

既然已經(jīng)部署了合約,我們就應(yīng)該能夠與它交互。例如,我們可以檢查我們發(fā)送的最后期限是否正確地設(shè)置在合約中:

但是,如果執(zhí)行此操作,則返回< nil >。那是因?yàn)槲覀兊暮霞s還沒有真正開采。如果我們使用真實(shí)的網(wǎng)絡(luò)作為后端,我們就必須等到它發(fā)生,但是在我們的模擬后端,我們可以這樣做:

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

好了。這樣我們就可以閱讀合約公開的數(shù)據(jù),F(xiàn)在我們想要和它互動。

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

當(dāng)然,我們需要再次開采:

但是我們得到以下輸出:

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

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

我們得到與我們部署的合約相同的返回值,并可以以與此版本相同的方式進(jìn)行交互,這個版本是通過地址實(shí)例化實(shí)現(xiàn)的。

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

這將產(chǎn)生我們在上面創(chuàng)建的auth對象。當(dāng)然,請不要在代碼中使用明文或密碼,而是以安全的方式加載它們。

如果已經(jīng)部署了合約,我們不需要創(chuàng)建NewIPCClient,但是可以直接撥號到節(jié)點(diǎn):

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

總結(jié)

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

Go語言適合于與基于ethereumbased的智能合約交互的任務(wù),因?yàn)橛泻芏鄟碜詆eth的可重用代碼,甚至還有一些關(guān)于如何開始的文檔。這當(dāng)然可以用其他語言來實(shí)現(xiàn)。(使用web3),但如果你喜歡的話,這似乎是一個可靠的選擇。

 

來自:http://www.iteye.com/news/32581

 

標(biāo)簽: 安全 代碼 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:用Python爬取微博數(shù)據(jù)生成詞云圖片

下一篇:【譯】Python3中進(jìn)行HTTP請求的4種方式