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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

以太坊系列(二)---Ubuntu20.04安装以太坊开发环境并建立私有链

發(fā)布時間:2024/3/13 Ubuntu 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊系列(二)---Ubuntu20.04安装以太坊开发环境并建立私有链 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

    • 安裝版本說明
    • 環(huán)境搭建
      • 搭建以太坊
      • 安裝Nodejs
      • 安裝Solidity
      • 安裝Truffle
      • 以太坊開發(fā)

安裝版本說明

  • Ubuntu版本:20.04

  • Ethereum版本:1.10.1-stable

  • Nodejs版本:v10.19.0

  • Solidity版本:0.7.4

  • Truffle版本:v5.3.0 - a development framework for Ethereum

環(huán)境搭建

搭建以太坊

安裝命令:

sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum

具體安裝過程如下:

圖1 命令行1的執(zhí)行過程

圖2 命令行2的執(zhí)行過程

圖3 命令行3的執(zhí)行過程

使用如下命令查看以太坊版本:

geth version

出現(xiàn)如下圖所示的內(nèi)容則說明安裝成功:

圖4 以太坊安裝成功的標(biāo)志

安裝Nodejs

安裝命令:

sudo apt-get install -y nodejs

出現(xiàn)下圖內(nèi)容則說明已安裝過:

圖5 安裝Nodejs的過程

使用如下命令查看Nodejs版本:

圖6 Nodejs安裝成功的標(biāo)志

安裝Solidity

安裝命令:

sudo apt-get install npm sudo snap install solc

安裝過程如下:

圖7 命令行1的執(zhí)行過程

圖8 命令行2的執(zhí)行過程

出現(xiàn)如下圖所示的內(nèi)容則說明安裝成功:

圖9 Solidity安裝成功的標(biāo)志

安裝Truffle

安裝命令:

sudo npm install -g truffle

安裝過程比較長,出現(xiàn)如下圖所示的內(nèi)容則說明安裝成功:

圖10 Truffle安裝成功的標(biāo)志

以太坊開發(fā)

  • 搭建以太坊私有鏈:創(chuàng)建私有鏈需要定義創(chuàng)世區(qū)塊,下面命令所創(chuàng)建的文件夾及文件均是用來創(chuàng)建創(chuàng)世區(qū)塊。新建blockchian/consortium_blockchain文件夾,在consortium_blockchain文件夾下創(chuàng)建文件genesis.json。
  • 所需命令:

    mkdir blockchain cd blockchain mkdir consortium_blockchain cd consortium_blockchain vim genesis.json

    創(chuàng)建過程比較簡單,故不附上截圖。

    寫入內(nèi)容命令:

    vim genesis.json

    將下面的內(nèi)容寫入genesis.json文件中:

    {"config": {"chainId": 8434,"homesteadBlock": 1,"eip150Block": 2,"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000","eip155Block": 3,"eip158Block": 3,"byzantiumBlock": 4,"alien": {"period": 2,"epoch": 300,"maxSignersCount": 5,"minVoterBalance": 100000000000000000000,"genesisTimestamp": 1536136198,"signers": ["0x393faea80893ba357db03c03ee73ad3e31257469","0x30d342865deef24ac6b3ec2f3f8dba5109351571","0xd410f95ede1d2da66b1870ac671cc18b66a97778"]}},"nonce": "0x0","timestamp": "0x5b8f92c2","extraData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","gasLimit": "0x47b760","difficulty": "0x1","mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000","coinbase": "0x0000000000000000000000000000000000000000","alloc": {"cbfc29c31a31c869f9eb59a084d9019965978a7e": {"balance": "0x31d450f18af132720000000"},"393faea80893ba357db03c03ee73ad3e31257469": {"balance": "0xd3c21bcecceda1000000"},"30d342865deef24ac6b3ec2f3f8dba5109351571": {"balance": "0xd3c21bcecceda1000000"},"d410f95ede1d2da66b1870ac671cc18b66a97778": {"balance": "0xd3c21bcecceda1000000"},"a25dc63609ea7ea999033e062f2ace42231c0b69": {"balance": "0xd3c21bcecceda1000000"}},"number": "0x0","gasUsed": "0x0","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }

    在終端輸入“:wq”保存并退出。

    重要參數(shù)說明:

    參數(shù)名描述
    chainID指定了獨(dú)立的區(qū)塊鏈網(wǎng)絡(luò) ID。網(wǎng)絡(luò) ID 在連接到其他節(jié)點(diǎn)的時候會用到,以太坊公網(wǎng)的網(wǎng)絡(luò) ID 是 1,為了不與公有鏈網(wǎng)絡(luò)沖突,運(yùn)行私有鏈節(jié)點(diǎn)的時候要指定自己的網(wǎng)絡(luò) ID。不同 ID 網(wǎng)絡(luò)的節(jié)點(diǎn)無法相互連接
    homesteadBlock取值為0表示正在使用homesteadBlock版本。以太坊的發(fā)展分成了四個階段:(每個階段進(jìn)步到下一個階段都是通過硬分叉的方式實(shí)現(xiàn)的)1.Frontier(前沿):2015年7月30日,以太坊發(fā)布了Frontier階段,此時的軟件還不太成熟,但可以進(jìn)行基本的挖礦測試去中心化應(yīng)用(Dapps),該階段參與者主要為開發(fā)者。 2.HomesteadBlock(家園):在2016年3月14日(圓周率節(jié)),以太坊發(fā)布了HomesteadBlock階段。以太坊開始平穩(wěn)運(yùn)行,提供了圖形界面的錢包,普通用戶也可以體驗(yàn)和使用以太坊。 3.Metropolis(大都會):Metropolis被分成了兩個階段:Byzantium(拜占庭)和Constantinople (居士坦丁堡)。 2017.10.16,以太坊拜占庭硬分叉成功,引入了包括:zk-SNARKs(簡明非交互零知識證明)、revert功能、return和抽象賬戶。 2019年2月底,以太坊區(qū)塊鏈的第7,080,000區(qū)塊作為激活點(diǎn)正式開啟君士坦丁堡硬分叉,點(diǎn)在于將以太坊的共識機(jī)制由PoW向PoW+PoS混合機(jī)制過渡,從而使整個以太坊網(wǎng)絡(luò)更加的輕盈、快捷與安全。按官方說法,具體在現(xiàn)有以太坊PoW主網(wǎng)上進(jìn)行升級的有以下5個方面:1).EIP 145:給EVM增加移位相關(guān)指令,包括左移SHL,邏輯右移SHR,算術(shù)右移SAR(2).EIP 1014:產(chǎn)生合約地址的一種新規(guī)則,與狀態(tài)通道有關(guān)。規(guī)則為keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:](3).EIP 1052:為EVM增加EXTCODEHASH指令,這個指令可以獲得一個合約bytecode的keccak256的hash值;(4).EIP 1283:修改EVM的SSTORE指令gas計(jì)算方式,預(yù)計(jì)會減少許多合約的gas消耗,需要硬分叉支持;(5).EIP 1234:將是潛在最有爭議的提案,也需要硬分叉支持,它包括難度炸彈(Difficulty Bomb)協(xié)議推遲12個月和挖礦獎勵調(diào)整,難度炸彈使挖礦難度隨時間推移越來越高,挖礦獎勵調(diào)整將挖礦獎勵從3個降低到2個;4.Serenity(寧靜)
    eip155Blockeip是ethereum improvement proposal的縮寫,你的鏈不會因?yàn)橐驗(yàn)檫@些提議分叉,故設(shè)置為“0”即可
    eip158Blockeip是ethereum improvement proposal的縮寫,你的鏈不會因?yàn)橐驗(yàn)檫@些提議分叉,故設(shè)置為“0”即可
    mixhash與nonce配合用于挖礦,由上一個區(qū)塊的一部分生成的hash。注意他和nonce的設(shè)置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。
    noncenonce就是一個64位隨機(jī)數(shù),用于挖礦,注意他和mixhash的設(shè)置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。
    difficulty設(shè)置當(dāng)前區(qū)塊的難度,如果難度過大,cpu挖礦就很難,這里設(shè)置較小難度
    alloc用來預(yù)置賬號以及賬號的以太幣數(shù)量,因?yàn)樗接墟溚诘V比較容易,所以我們不需要預(yù)置有幣的賬號,需要的時候自己創(chuàng)建即可以。
    coinbase礦工的賬號,隨便填
    timestamp設(shè)置創(chuàng)世塊的時間戳
    parentHash上一個區(qū)塊的hash值,因?yàn)槭莿?chuàng)世塊,所以這個值是0
    extraData附加信息,隨便填,可以填你的個性信息
    gasLimit該值設(shè)置對GAS的消耗總量限制,用來限制區(qū)塊能包含的交易信息總和,因?yàn)槲覀兪撬接墟?#xff0c;所以填最大。
  • 創(chuàng)建創(chuàng)世區(qū)塊
  • 執(zhí)行如下命令初始化創(chuàng)世區(qū)塊:

    geth --datadir "./myblockchain" init genesis.json

    具體操作過程如下圖所示:

    圖11 創(chuàng)建創(chuàng)世區(qū)塊成功的標(biāo)志

    創(chuàng)建成功之后,當(dāng)前目錄會新增myblockchain文件夾,同時包含geth和keystore兩個文件夾。

    geth保存的是這條區(qū)塊鏈上的區(qū)塊數(shù)據(jù);
    keystore保存的是這條區(qū)塊鏈上的用戶信息

    可通過下面的命令查看myblockchain文件夾的目錄結(jié)構(gòu):

    sudo apt install tree tree myblockchain

    下圖分別是這兩條命令的執(zhí)行過程:

    圖12 下載tree

    注意:命令行2的執(zhí)行需在myblockchain文件夾的上一級執(zhí)行。如下圖所示:

    圖13 查看myblockchain文件夾的目錄結(jié)構(gòu)
  • 啟動私有鏈
  • 啟動命令:

    geth --identity "myethereum" --rpc --rpcaddr "127.0.0.1" --port 30304 --rpcport "7545" --rpccorsdomain "*" --datadir ./myblockchain --rpcapi "db,eth,net,web3,admin,personal" --networkid 5777 console --allow-insecure-unlock

    啟動命令中的重要參數(shù)說明:

    參數(shù)名描述
    identity區(qū)塊鏈的標(biāo)識,用于標(biāo)識目前網(wǎng)絡(luò)的名字
    rpc啟動rpc通信
    rpcaddr連接rpc的地址,默認(rèn)為localhost,為了方便訪問建議使用本機(jī)IP地址
    port網(wǎng)絡(luò)監(jiān)聽端口,默認(rèn)30303
    rpcport連接rpc的端口,默認(rèn)為8545
    rpccorsdomain指定什么url能連接到你的節(jié)點(diǎn)執(zhí)行rpc定制端任務(wù),如果輸入是“*”,則任何url都可以連接到你的rpc實(shí)例。
    datadir當(dāng)前區(qū)塊鏈數(shù)據(jù)存放的位置
    rpcapi設(shè)置允許rpc的客戶端,一般為db,eth,net,web3
    networkid設(shè)置當(dāng)前區(qū)塊鏈的網(wǎng)絡(luò)ID,用于區(qū)分不同的網(wǎng)絡(luò),是一個數(shù)字,公鏈為1;這個和創(chuàng)世塊文件的chainid沒有直接關(guān)聯(lián)
    console啟動命令行模式,可以在geth中執(zhí)行命令
    init指定創(chuàng)世塊文件的位置,并創(chuàng)建創(chuàng)世塊

    啟動過程截圖:

    圖14 私有鏈啟動過程(部分)
  • 連接第二個geth終端
  • 為了方便使用,經(jīng)常要打開多個終端連接到同一個私鏈節(jié)點(diǎn),可以采用如下命令:

    cd blockchain/consortium_blockchain/myblockchain geth attach geth.ipc

    運(yùn)行效果如下圖所示:

    圖15 連接第二個geth終端的運(yùn)行過程截圖

    以太坊的javascript控制臺中內(nèi)置了一些以太坊對象,通過這些對象我們可以很方便的與以太坊交互:eth:提供了操作區(qū)塊鏈相關(guān)的方法
    net:提供了查看p2p網(wǎng)絡(luò)狀態(tài)的方法
    admin:提供了管理節(jié)點(diǎn)相關(guān)的方法
    miner:提供啟動和停止挖礦的方法
    personal:提供了管理賬戶的方法
    txpool:提供了查看交易內(nèi)存池的方法
    web3:除了包含以上對象中有的方法,還包含了一些單位換算的方法

  • geth創(chuàng)建賬號、啟動挖礦、停止挖礦
  • (1)創(chuàng)建賬戶

    在geth終端就可以執(zhí)行啟動挖礦、創(chuàng)建賬戶等操作,初始化后系統(tǒng)無賬號,需要創(chuàng)建新賬號,才能啟動挖礦:

    eth.accounts

    執(zhí)行效果截圖:

    圖16 查看以太坊賬戶

    目前賬戶為空,故新建賬戶:

    personal.newAccount("12345678");

    執(zhí)行效果截圖:

    圖17 新建賬戶

    獲取該賬戶的余額:

    eth.getBalance(eth.accounts[0])

    執(zhí)行結(jié)果圖:

    圖18 獲取指定賬戶的余額 余額為0。

    (2)挖礦

    挖礦所得的獎勵會進(jìn)入礦工的賬戶,這個賬戶叫做coinbase,默認(rèn)情況下coinbase是本地賬戶中的第一個賬戶,如下圖所示:

    圖19 coinbase賬戶

    現(xiàn)在的coinbase是user1,要想使挖礦獎勵進(jìn)入其他賬戶,通過miner.setEtherbase()將其他賬戶設(shè)置成coinbase即可:

    圖20 將user2設(shè)置為coinbase賬戶

    挖到區(qū)塊以后,user2里面應(yīng)該就有余額了:

    getBalance()返回值的單位是wei,wei是以太幣的最小單位,1個以太幣=10的18次方個wei。

    可以通過發(fā)送一筆交易,從user1轉(zhuǎn)移100個以太幣到user2:

    圖21 要轉(zhuǎn)給他人的錢

    圖22 轉(zhuǎn)賬失敗

    這里報(bào)錯了,原因是賬戶每隔一段時間就會被鎖住,要發(fā)送交易,必須先解鎖賬戶,由于我們要從user1發(fā)送交易,所以要解鎖user1。輸入創(chuàng)建賬戶時設(shè)置的密碼,就可以成功解鎖賬戶:

    圖23 解鎖要轉(zhuǎn)賬給他人的user1

    然后再發(fā)送交易:

    圖24 user1轉(zhuǎn)賬給user2的交易,生成的是交易哈希

    此時,交易已被提交到交易池,可以通過查看txpool來驗(yàn)證:

    圖25 使用該命令來查看交易池中的交易

    pending表示已提交但還未被處理的交易,此處為0說明該交易已被處理。如果是1,則說明還未被處理,需要啟動挖礦(miner.start(1))來進(jìn)行挖礦。

    然后查看user2中的余額:

    圖26 查看user2的余額

    說明轉(zhuǎn)賬成功

    其中,挖礦過程如圖所示:

    圖27 挖礦示意圖

    通過區(qū)塊號查看區(qū)塊:

    圖28 通過區(qū)塊號查看區(qū)塊內(nèi)容

    通過區(qū)塊哈希查看區(qū)塊:

    圖29 通過區(qū)塊哈希值查看區(qū)塊

    (3)停止挖礦

    停止挖礦的命令:

    miner.stop()

    圖30 停止挖礦的操作

    總結(jié)

    以上是生活随笔為你收集整理的以太坊系列(二)---Ubuntu20.04安装以太坊开发环境并建立私有链的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。