溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行Ethereum Bootstrap本地私有鏈開發(fā)環(huán)境搭建

發(fā)布時間:2021-12-10 17:39:59 來源:億速云 閱讀:152 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關(guān)如何進行Ethereum Bootstrap本地私有鏈開發(fā)環(huán)境搭建,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Ethereum Bootstrap

通過本文所述方法和項目中的腳本,我們可以快速的搭建好自己的私鏈進行開發(fā)測試。

倉庫中包含的工具有:

  • 一個測試賬戶導(dǎo)入腳本,在首次部署時將五個測試賬戶私鑰導(dǎo)入以太坊節(jié)點。

  • 一個genesis.json配置文件,為對應(yīng)的五個測試賬戶提供初始資金(以太幣),方便開發(fā)測試。

  • 一個快速啟動私有鏈節(jié)點并進入交互模式的腳本。

  • 一個合約樣例:contracts/Token.sol。這是一個使用合約語言Solidity編寫的智能合約。Token合約的功能是發(fā)行一種token(可以理解為貨幣,積分等等),只有合約的創(chuàng)建者有發(fā)行權(quán),token的擁有者有使用權(quán),并且可以自由轉(zhuǎn)賬。

測試賬戶私鑰是放在Github上的公開數(shù)據(jù),千萬不要用于正式環(huán)境中或者公有鏈上。如果在測試環(huán)境之外的地方使用這些私鑰,你的資金將會被竊?。?/strong>

準(zhǔn)備

  1. 在本地安裝好go-ethereum和solc, 可以執(zhí)行gethsolc命令。如果操作系統(tǒng)是ubuntu, 安裝官方的ethereum安裝包即可。

  2. 將本倉庫通過git clone命令下載到本地。

  3. 安裝expect,工具腳本用它來自動化一些過程。例如在ubuntu上: sudo apt-get install expect

啟動geth

  1. 進入本倉庫目錄: cd ethereum-bootstrap

  2. 導(dǎo)入測試賬戶私鑰: ./bin/import_keys.sh

  3. 啟動私有鏈節(jié)點: ./bin/private_blockchain.sh. 啟動成功后可以看到類似如下輸出: 如何進行Ethereum Bootstrap本地私有鏈開發(fā)環(huán)境搭建

  4. 此時以太坊交互式控制臺已經(jīng)啟動,我們可以開始測試和開發(fā)了。

注意:工具腳本假設(shè)你的geth安裝在默認(rèn)位置, 可以直接通過geth執(zhí)行。如果geth命令安裝在非標(biāo)準(zhǔn)的位置,可以設(shè)置GETH環(huán)境變量指定geth可執(zhí)行文件的路徑。例如:

GETH=/some/weird/dir/geth ./bin/import_keys.sh

使用以太坊控制臺編譯和部署智能合約

contracts目錄下有一個智能合約樣例文件Token.sol, 通過Solidity語言實現(xiàn)了基本的代幣功能, 合約持有者可以發(fā)行代幣, 使用者可以互相轉(zhuǎn)賬.

我們可以使用以太坊控制臺來編譯部署這個合約.以太坊控制臺是最基本的工具,使用會比較繁瑣.社區(qū)也提供了其他更加方便的部署工具,此處不做討論.

第一步,我們先把合約代碼壓縮為一行.新建一個ssh session, 切換到geth用戶環(huán)境su - geth, 然后輸入:cat contracts/Token.sol | tr '\n' ' '.

切換到以太坊控制臺,把合約代碼保存為一個變量:

var tokenSource = 'contract Token {     address issuer;     mapping (address => uint) balances;      event Issue(address account, uint amount);     event Transfer(address from, address to, uint amount);      function Token() {         issuer = msg.sender;     }      function issue(address account, uint amount) {         if (msg.sender != issuer) throw;         balances[account] += amount;     }      function transfer(address to, uint amount) {         if (balances[msg.sender] < amount) throw;          balances[msg.sender] -= amount;         balances[to] += amount;          Transfer(msg.sender, to, amount);     }      function getBalance(address account) constant returns (uint) {         return balances[account];     } }';

然后編譯合約代碼:

var tokenCompiled = web3.eth.compile.solidity(tokenSource);

通過tokenCompiled.Token.code可以看到編譯好的二進制代碼,通過tokenCompiled.Token.info.abiDefinition可以看到合約的ABI.

接下來我們要把編譯好的合約部署到網(wǎng)絡(luò)上去.

首先我們用ABI來創(chuàng)建一個javascript環(huán)境中的合約對象:

var contract = web3.eth.contract(tokenCompiled.Token.info.abiDefinition);

我們通過合約對象來部署合約:

var initializer = {from: web3.eth.accounts[0], data: tokenCompiled.Token.code, gas: 300000};

var callback = function(e, contract){
    if(!e) {
      if(!contract.address) {
        console.log("Contract transaction send: TransactionHash: ">

contract.new方法的第一個參數(shù)設(shè)置了這個新合約的創(chuàng)建者地址from, 這個新合約的代碼data, 和用于創(chuàng)建新合約的費用gasgas是一個估計值,只要比所需要的gas多就可以,合約創(chuàng)建完成后剩下的gas會退還給合約創(chuàng)建者.

contract.new方法的第二個參數(shù)設(shè)置了一個回調(diào)函數(shù),可以告訴我們部署是否成功.

contract.new執(zhí)行時會提示輸入錢包密碼.執(zhí)行成功后,我們的合約Token就已經(jīng)廣播到網(wǎng)絡(luò)上了.此時只要等待礦工把我們的合約打包保存到以太坊區(qū)塊鏈上,部署就完成了.

在公有鏈上,礦工打包平均需要15秒,在私有鏈上,我們需要自己來做這件事情.首先開啟挖礦:

miner.start(1)

此時需要等待一段時間,以太坊節(jié)點會生成挖礦必須的數(shù)據(jù),這些數(shù)據(jù)都會放到內(nèi)存里面.在數(shù)據(jù)生成好之后,挖礦就會開始,稍后就能在控制臺輸出中看到類似:

:hammer:Mined block

的信息,這說明挖到了一個塊,合約已經(jīng)部署到以太坊網(wǎng)絡(luò)上了!此時我們可以把挖礦關(guān)閉:

miner.stop(1)

接下來我們就可以調(diào)用合約了.先通過token.address獲得合約部署到的地址, 以后新建合約對象時可以使用.這里我們直接使用原來的contract對象:

// 本地錢包的第一個地址所持有的token數(shù)量
> token.getBalance(web3.eth.accounts[0])
0

// 發(fā)行100個token給本地錢包的第一個地址
> token.issue.sendTransaction(web3.eth.accounts[0], 100, {from: web3.eth.accounts[0]});
I1221 11:48:30.512296   11155 xeth.go:1055] Tx(0xc0712460a826bfea67d58a30f584e4bebdbb6138e7e6bc1dbd6880d2fce3a8ef) to: 0x37dc85ae239ec39556ae7cc35a129698152afe3c
"0xc0712460a826bfea67d58a30f584e4bebdbb6138e7e6bc1dbd6880d2fce3a8ef"

// 發(fā)行token是一個transaction, 因此需要挖礦使之生效
> miner.start(1)
:hammer:Mined block
> miner.stop(1)

// 再次查詢本地錢包第一個地址的token數(shù)量
> token.getBalance(web3.eth.accounts[0])
100

// 從第一個地址轉(zhuǎn)30個token給本地錢包的第二個地址
> token.transfer.sendTransaction(web3.eth.accounts[1], 30, {from: web3.eth.accounts[0]})
I1221 11:53:31.852541   11155 xeth.go:1055] Tx(0x1d209cef921dea5592d8604ac0da680348987b131235943e372f8df35fd43d1b) to: 0x37dc85ae239ec39556ae7cc35a129698152afe3c
"0x1d209cef921dea5592d8604ac0da680348987b131235943e372f8df35fd43d1b"
> miner.start(1)
> miner.stop(2)
> token.getBalance(web3.eth.accounts[0])
70
> token.getBalance(web3.eth.accounts[1])
30

其他

私有鏈的所有數(shù)據(jù)都會放在倉庫根目錄下的data目錄中,刪除這個目錄可以清除所有數(shù)據(jù),重新啟動新環(huán)境。

以上就是如何進行Ethereum Bootstrap本地私有鏈開發(fā)環(huán)境搭建,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI