日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ethereum Bootstrap 以太坊本地私有链开发环境搭建

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ethereum Bootstrap 以太坊本地私有链开发环境搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

倉庫中包含的工具有:

  • 一個測試賬戶導入腳本,在首次部署時將五個測試賬戶私鑰導入以太坊節點。
  • 一個genesis.json配置文件,為對應的五個測試賬戶提供初始資金(以太幣),方便開發測試。
  • 一個快速啟動私有鏈節點并進入交互模式的腳本。
  • 一個合約樣例:contracts/Token.sol。這是一個使用合約語言Solidity編寫的智能合約。Token合約的功能是發行一種token(可以理解為貨幣,積分等等),只有合約的創建者有發行權,token的擁有者有使用權,并且可以自由轉賬。

測試賬戶私鑰是放在Github上的公開數據,千萬不要用于正式環境中或者公有鏈上。如果在測試環境之外的地方使用這些私鑰,你的資金將會被竊取!

準備

  • 在本地安裝好go-ethereum和solc, 可以執行geth和solc命令。如果操作系統是ubuntu, 安裝官方的ethereum安裝包即可。
  • 將本倉庫通過git clone命令下載到本地。
  • 安裝expect,工具腳本用它來自動化一些過程。例如在ubuntu上:?sudo apt-get install expect
  • 啟動geth

  • 進入本倉庫目錄:?cd ethereum-bootstrap
  • 導入測試賬戶私鑰:?./bin/import_keys.sh
  • 初始化blockchain:?./bin/private_blockchain_init.sh?輸出的結果類似如下, $(DIR))代表你的下載路徑: INFO [09-25|11:07:26] Allocated cache and file handles database=$(DIR)/ethereum-bootstrap/data/geth/chaindata cache=16 handles=16INFO [09-25|11:07:26] Successfully wrote genesis state database=chaindata hash=194258…f0efa3INFO [09-25|11:07:26] Allocated cache and file handles database=$(DIR)/ethereum-bootstrap/data/geth/lightchaindata cache=16 handles=16INFO [09-25|11:07:26] Successfully wrote genesis state database=lightchaindata hash=194258…f0efa3
  • 為解決之后操作賬戶鎖定問題,修改本目錄下bin/private_blockchain.sh文件,在$geth后添加--unlock 0 --password value. ? 其中0表示解鎖第0個賬戶,value為包含你第2步設置的密碼的文件的地址路徑,需要你建立。這樣下面就不需要再解鎖賬戶的操作。
  • 啟動私有鏈節點:?./bin/private_blockchain.sh. 啟動成功后可以看到類似如下輸出:?
  • 此時以太坊交互式控制臺已經啟動,我們可以開始測試和開發了。
  • 注意:工具腳本假設你的geth安裝在默認位置, 可以直接通過geth執行。如果geth命令安裝在非標準的位置,可以設置GETH環境變量指定geth可執行文件的路徑。例如:

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

    通過挖礦來為account發放ether

    查看賬號余額:

    > web3.eth.getBalance(web3.eth.accounts[0]) 2e+30

    可以通過挖礦的方式給第一個賬號發行ether:

    > miner.start(1) I0822 17:17:43.496826 miner/miner.go:119] Starting mining operation (CPU=1 TOT=3) I0822 17:17:43.497379 miner/worker.go:573] commit new work on block 30 with 0 txs & 1 uncles. Took 527.407μs

    需要調用miner.stop來停止挖礦:

    > miner.stop() true > web3.eth.getBalance(web3.eth.accounts[0]) 2.000000000105e+30

    使用賬號前先解鎖:

    > personal.unlockAccount(web3.eth.accounts[0])

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

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

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

    第一步,我們先編譯合約代碼.新建一個ssh session, 切換到geth用戶環境su - geth, 然后輸入:echo "var tokenCompiled=`solc --optimize --combined-json abi,bin,interface contracts/Token.sol`" > token.js.(此步為編譯合約代碼,并將生成的內容放入當前路徑下的token.js文件)

    切換到以太坊控制臺,把js文件加載進來:

    loadScript("token.js")

    通過tokenCompiled.contracts["contracts/Token.sol:Token"].bin可以看到編譯好的二進制代碼,通過tokenCompiled.contracts["contracts/Token.sol:Token"].abi可以看到合約的ABI.

    以變量的形式取出合約的二進制代碼和ABI。

    var tokenContractsBin = "0x" + tokenCompiled.contracts["contracts/Token.sol:Token"].bin; var tokenContractsAbi = tokenCompiled.contracts["contracts/Token.sol:Token"].abi;

    接下來我們要把編譯好的合約部署到網絡上去.

    首先我們用ABI來創建一個javascript環境中的合約對象:

    var contract = web3.eth.contract(JSON.parse(tokenContractsAbi));

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

    var initializer = {from: web3.eth.accounts[0], data: tokenContractsBin, gas: 300000};var token = contract.new(initializer);

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

    contract.new方法的第二個參數設置了一個回調函數,可以告訴我們部署是否成功.

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

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

    miner.start(1)

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

    :hammer:mined potential block

    的信息,這說明挖到了一個塊,合約已經部署到以太坊網絡上了!此時我們可以把挖礦關閉:

    miner.stop()

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

    // 本地錢包的第一個地址所持有的token數量 > web3.eth.getBalance(web3.eth.accounts[0]) 0// 發行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"// 發行token是一個transaction, 因此需要挖礦使之生效 > miner.start(1) :hammer:mined potential block > miner.stop()// 再次查詢本地錢包第一個地址的token數量 > token.getBalance(web3.eth.accounts[0]) 100// 從第一個地址轉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) :hammer:mined potential block > miner.stop() > token.getBalance(web3.eth.accounts[0]) 70 > token.getBalance(web3.eth.accounts[1]) 30

    其他

    私有鏈的所有數據都會放在倉庫根目錄下的data目錄中,刪除這個目錄可以清除所有數據,重新啟動新環境。solidity_compiler_helper,可以使用這個小工具來部署,更方便。

    獲取關于以太坊的更多信息請訪問EthFans.


    原文地址:https://github.com/cryptape/ethereum-bootstrap

    總結

    以上是生活随笔為你收集整理的Ethereum Bootstrap 以太坊本地私有链开发环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。