基于以太坊网络的智能合约开发、部署和测试(入门)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
基本概念:
- 以太坊是一個(gè)開(kāi)放的、公開(kāi)的區(qū)塊鏈平臺(tái),允許用戶構(gòu)建自己的去中心化應(yīng)用在上面運(yùn)行
- Solidity是一種語(yǔ)法類(lèi)似JavaScript的高級(jí)語(yǔ)言。它被設(shè)計(jì)成以編譯的方式生成以太坊虛擬機(jī)代碼。因此以太坊智能合約代碼又該語(yǔ)言開(kāi)發(fā)
- Remix是基于瀏覽器的Solidity IDE,可以用于開(kāi)發(fā)一些比較簡(jiǎn)單的智能合約,當(dāng)然還有很多其他IDE,此處暫不敖述
- MIST客戶端是以太坊的客戶端(可用于管理錢(qián)包、轉(zhuǎn)賬、部署和管理智能合約,鏈接測(cè)試以太坊網(wǎng)絡(luò),搭建虛擬的以太坊區(qū)塊鏈平臺(tái)等)
? ? 更多資源信息可關(guān)注前兩天剛寫(xiě)的文章(整理的一些關(guān)于以太坊學(xué)習(xí)資源),初學(xué)者會(huì)遇到很多各種各樣的概念,以及網(wǎng)上的一些資料有些是比較過(guò)時(shí)的了,學(xué)習(xí)起來(lái)會(huì)顯得比較凌亂。 主要把握以下幾點(diǎn)就行。
- 以太坊技術(shù)原理
- 智能合約(DAPP)概念
- 開(kāi)發(fā)語(yǔ)言
- 開(kāi)發(fā)工具
- 開(kāi)發(fā)環(huán)境
- 開(kāi)發(fā)框架
準(zhǔn)備工作:?
- 了解以太坊基本技術(shù)原理以及DAPP概念,本文不做分析
- 開(kāi)發(fā)語(yǔ)言選定solidity,可去學(xué)習(xí)solidity語(yǔ)法和樣例代碼。http://wiki.jikexueyuan.com/project/solidity-zh/ 或官網(wǎng)教程http://solidity.readthedocs.io/en/develop/
- 開(kāi)發(fā)工具IDE準(zhǔn)備,在線Remix訪問(wèn)地址http://remix.ethereum.org, 簡(jiǎn)單合約開(kāi)發(fā)比較好用。
- 開(kāi)發(fā)環(huán)境,開(kāi)發(fā)環(huán)境及開(kāi)發(fā)的應(yīng)用所運(yùn)行的環(huán)境,其實(shí)也就是以太坊平臺(tái),我們可以直接訪問(wèn)以太坊平臺(tái),但是要把應(yīng)用部署到以太坊平臺(tái)是要以太坊幣的,太貴了。 開(kāi)發(fā)模式下當(dāng)然有開(kāi)發(fā)環(huán)境,下載MIST http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E9%92%B1%E5%8C%85%20Mist%20%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B?? 參照該文檔安裝MIST客戶端,注意因?yàn)槭怯糜陂_(kāi)發(fā)環(huán)境,不需要與以太坊網(wǎng)絡(luò)連接并下載區(qū)塊數(shù)據(jù),直接啟動(dòng)應(yīng)用。然后選擇建立私有網(wǎng)絡(luò)。如下圖所示:
????????啟用之后,客戶端上就會(huì)顯示當(dāng)前是私有網(wǎng)絡(luò):
啟動(dòng)網(wǎng)絡(luò),開(kāi)啟挖礦,因?yàn)椴渴鹬悄芎霞s是需要錢(qián),需要有曠工干活的,咱們就搭建了一個(gè)單節(jié)點(diǎn)的以太坊網(wǎng)絡(luò),這個(gè)節(jié)點(diǎn)也就是礦工,需要干活。
開(kāi)啟挖礦之后,創(chuàng)世區(qū)塊,以太坊幣就不斷產(chǎn)生了。 所有的數(shù)字貨幣都將被自己挖到。
可惜不是真的以太坊,否則就發(fā)了!o(* ̄︶ ̄*)o。?
至此,個(gè)人的以太坊網(wǎng)絡(luò),也就是開(kāi)發(fā)運(yùn)行環(huán)境就搭建好了,為了后續(xù)的測(cè)試,可以創(chuàng)建多個(gè)賬號(hào)。
?
智能合約應(yīng)用舉例:
為了開(kāi)發(fā)、部署、和測(cè)試一個(gè)智能合約(DAPP),我們列舉一個(gè)簡(jiǎn)單的應(yīng)用場(chǎng)景。 開(kāi)發(fā)一個(gè)應(yīng)用,該應(yīng)用可以由我控制發(fā)行虛擬貨幣,并且能夠?qū)⒇泿虐l(fā)送給別人。就這么簡(jiǎn)單。(當(dāng)然以太坊平臺(tái)很強(qiáng)大,這只是萬(wàn)里長(zhǎng)征第一步,類(lèi)似HelloWorld)
?
代碼開(kāi)發(fā)與解釋:
? 我們開(kāi)發(fā)智能合約使用的IDE是 基于瀏覽器的Remix,訪問(wèn)該工具如下圖所示:
?代碼解釋如下:
pragma solidity ^0.4.0;contract Coin{// 聲明 一個(gè) address 類(lèi)型 變量 256 bits, 用于 存儲(chǔ)啟動(dòng)該智能合約的賬戶地址。address public minter; // 聲明 mapping 類(lèi)型 變量 類(lèi)似于 java map ,用于存儲(chǔ)賬戶的資產(chǎn)信息mapping(address => uint) public balances;// 聲明 一個(gè)事件 ,客戶端可以來(lái)監(jiān)聽(tīng)該事件event Sent(address from, address to , uint value);//構(gòu)造函數(shù),在合約啟動(dòng)的時(shí)候執(zhí)行一次,因此minter保存的是啟動(dòng)該智能合約的賬戶地址function Coin() public{minter = msg.sender;}//為當(dāng)前啟動(dòng)合約賬號(hào) ,也就是自己發(fā)幣。每次加20function go() public{//如果不是啟動(dòng)合約的賬號(hào) 則返回,即別人無(wú)法給自己發(fā)幣if(msg.sender != minter) return; balances[msg.sender] += 20;} //為指定賬號(hào)發(fā)幣function mint(address receiver) public{//只有自己可以發(fā)幣 其他賬號(hào)調(diào)用無(wú)效if(msg.sender != minter) return;balances[receiver] += 15;}//賬號(hào)之間發(fā)送貨幣function send(address receiver) public{uint amount = 15;if(balances[msg.sender]<amount) return;balances[msg.sender] -= amount;balances[receiver] += amount;Sent(msg.sender, receiver, amount);} }代碼編譯:
使用Remix對(duì)代碼進(jìn)行編譯
?
代碼調(diào)試與測(cè)試:
選擇右上角run標(biāo)簽,模擬參數(shù)都采用默認(rèn)(默認(rèn)會(huì)生成一個(gè)賬號(hào)),點(diǎn)擊create,即模擬部署智能合約代碼。create成功后,右下角則會(huì)出現(xiàn)部署好的合約(包括合約地址以及合約方法)
測(cè)試為自己發(fā)幣:
點(diǎn)擊go方法按鈕,控制端會(huì)顯示已經(jīng)調(diào)用成功
為了驗(yàn)證查看是否成功給自己發(fā)幣,可以通過(guò)查詢balances變量,在balances按鈕右側(cè)輸入我的賬號(hào)地址,進(jìn)行查詢,如下圖,由于我點(diǎn)了八次(每次發(fā)幣20),所以我的賬號(hào)余額是160.
注意,此處需要了解如何獲取賬號(hào),個(gè)人賬號(hào)其實(shí)就在,如下圖所示:點(diǎn)擊右側(cè)復(fù)制按鈕可以獲取賬號(hào)字符串。該賬號(hào)也是部署合約的賬號(hào)。當(dāng)時(shí)復(fù)制到的賬號(hào)信息只有20個(gè)字節(jié),而address類(lèi)型是需要32個(gè)字節(jié)的(因?yàn)閍ddress的地址是256bits的),那么我們就需要對(duì)該地址進(jìn)行補(bǔ)全去查詢,在地址前端補(bǔ)24個(gè)0即最終用于查詢的賬號(hào)地址是0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733c
測(cè)試為別人發(fā)幣:
點(diǎn)擊mint按鈕,隨意寫(xiě)一個(gè)別人的賬號(hào),比如為0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b
驗(yàn)證發(fā)幣結(jié)果:
在balances右側(cè)輸入別人賬號(hào)0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b,點(diǎn)擊查詢,如下圖所示,發(fā)幣15.
?
測(cè)試發(fā)送數(shù)字貨幣:
由當(dāng)前合約部署者(自己)給別人轉(zhuǎn)幣,在send按鈕輸入別人賬號(hào)0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b,點(diǎn)擊send按鈕,轉(zhuǎn)15個(gè)幣過(guò)去。
驗(yàn)證轉(zhuǎn)幣結(jié)果,之前自己有160個(gè)幣,別人有15個(gè)幣。? 轉(zhuǎn)15個(gè)幣過(guò)去后自己有145,別人有30.如下圖所示。
?
部署到以太坊平臺(tái)(搭建的單點(diǎn)開(kāi)發(fā)環(huán)境):
打開(kāi)MIST平臺(tái),創(chuàng)建兩個(gè)演示賬號(hào)A,B 。其中A賬號(hào)用來(lái)部署智能合約, B賬號(hào)為別人的賬號(hào)。用于測(cè)試發(fā)幣,和傳輸貨幣。打開(kāi)MIST的智能合約界面
點(diǎn)擊DEPLOY NEW CONTRACT創(chuàng)建新的智能合約:
代碼拷貝完成之后,就會(huì)進(jìn)行自動(dòng)編譯,并生成合約,如下圖所示,合約名稱(chēng)為Coin:
選擇該合約,然后再頁(yè)面最下角,點(diǎn)擊部署,部署的時(shí)候需要輸入賬號(hào)密碼:
部署成功后,點(diǎn)擊智能合約界面即可查看到:
測(cè)試部分 就不做了,跟Remix很類(lèi)似。
?
?
?
?
轉(zhuǎn)載于:https://my.oschina.net/yjwxh/blog/1626312
超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的基于以太坊网络的智能合约开发、部署和测试(入门)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: awk合并相加输出
- 下一篇: Oracle Purge和drop的区别