ETH開發1——私有鏈搭建與基本操作


環境安裝過程詳見前一篇。

這里利用geth命令創建一個私有區塊鏈,然后自己挖礦,可以通過這個操作過程更深入理解以太坊和區塊鏈的概念。

一、創建目錄結構

創建完成后目錄結構
geth
├── Private1
└── Block.json

 Block.json文件,一個完整的區塊描述文件比較復雜,這里是一些基本設置,這些設置項的描述如下:

{
        "config": {
                "chainId": 15,
                "homesteadBlock": 0,
                "eip155Block": 0,
                "eip158Block": 0
        },
        "coinbase" : "0x0000000000000000000000000000000000000000",
        "difficulty" : "0x40000",
        "extraData" : "",
        "gasLimit" : "0xffffffff",
        "nonce" : "0x0000000000000042",
        "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp" : "0x00",
        "alloc": { }
 }

 

二、初始化命令

geth init Block.js --datadir Private1

 執行后,產生的目錄如下:

有兩個子目錄:geth和keystore。其中geth目錄保存了同步區塊鏈以及相關的數據,keystore目錄保存了賬戶文件。由於私有鏈剛創建,還沒有創建賬戶,所以keystore目錄為空。

三、啟動私有鏈

geth --datadir "Private1" --dev --dev.period 1 --nodiscover console 2>>geth.log

 啟動后進入javascript命令行控制台,顯示 :
    Welcome to the Geth JavaScript console!

 以太坊的javascript控制台中內置了一些以太坊交互對象:

    eth:提供了操作區塊鏈相關的方法
    net:提供了查看p2p網絡狀態的方法
    admin:提供了管理節點相關的方法
    miner:提供啟動和停止挖礦的方法
    personal:提供了管理賬戶的方法
    txpool:提供了查看交易內存池的方法
    web3:除了包含以上對象中有的方法,還包含了一些單位換算的方法
    ————————————————

四、以太坊私有鏈上的基本操作

1. 創建賬號

查看賬號列表:eth.accounts

創建賬號密碼:personal.newAccount("xxxxxxx")

2. 查看余額

以太幣的最小單位為wei,1 ether = 10(18) wei,打不出來~

eth.getBalance(eth.accounts[0])

3. 賬戶與礦工綁定

綁定:miner.setEtherbase(eth.accounts[0])

查看:eth.coinbase

4. 開始挖礦

開挖:miner.start()

停止:miner.stop()

查看:eth.getBalance(eth.accounts[0])

5. 解鎖賬戶

personal.unlockAccount(eth.accounts[2],"333333",300)

三個參數,三種方式

6. 交易

eth.sendTransaction({from: eth.accounts[2], to: eth.accounts[3],value: web3.toWei(1,"ether")})


五、參數說明參考

 1. block.json參數

chainID 指定了獨立的區塊鏈網絡 ID。網絡 ID 在連接到其他節點的時候會用到,以太坊公網的網絡 ID 是 1,為了不與公有鏈網絡沖突,運行私有鏈節點的時候要指定自己的網絡 ID。不同 ID 網絡的節點無法相互連接
homesteadBlock

取值為0表示正在使用homesteadBlock版本。

以太坊的發展分成了四個階段:(每個階段進步到下一個階段都是通過硬分叉的方式實現的)

1.Frontier(前沿):2015年7月30日,以太坊發布了Frontier階段,此時的軟件還不太成熟,但可以進行基本的挖礦測試去中心化應用(Dapps),該階段參與者主要為開發者。

2.HomesteadBlock(家園):在2016年3月14日(圓周率節),以太坊發布了HomesteadBlock階段。以太坊開始平穩運行,提供了圖形界面的錢包,普通用戶也可以體驗和使用以太坊。

3.Metropolis(大都會):Metropolis被分成了兩個階段:Byzantium(拜占庭)和Constantinople (居士坦丁堡)。

2017.10.16,以太坊拜占庭硬分叉成功,引入了包括:zk-SNARKs(簡明非交互零知識證明)、revert功能、return和抽象賬戶。

2019年2月底,以太坊區塊鏈的第7,080,000區塊作為激活點正式開啟君士坦丁堡硬分叉,點在於將以太坊的共識機制由PoW向PoW+PoS混合機制過渡,從而使整個以太坊網絡更加的輕盈、快捷與安全。按官方說法,具體在現有以太坊PoW主網上進行升級的有以下5個方面:

(1).EIP 145:給EVM增加移位相關指令,包括左移SHL,邏輯右移SHR,算術右移SAR

(2).EIP 1014:產生合約地址的一種新規則,與狀態通道有關。規則為keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]

(3).EIP 1052:為EVM增加EXTCODEHASH指令,這個指令可以獲得一個合約bytecode的keccak256的hash值;

(4).EIP 1283:修改EVM的SSTORE指令gas計算方式,預計會減少許多合約的gas消耗,需要硬分叉支持;

(5).EIP 1234:將是潛在最有爭議的提案,也需要硬分叉支持,它包括難度炸彈(Difficulty Bomb)協議推遲12個月和挖礦獎勵調整,難度炸彈使挖礦難度隨時間推移越來越高,挖礦獎勵調整將挖礦獎勵從3個降低到2個;

4.Serenity(寧靜)
————————————————
版權聲明:本文為CSDN博主「GDUYT」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/GDUYT_gduyt/article/details/88807348

eip155Block eip是ethereum improvement proposal的縮寫,你的鏈不會因為因為這些提議分叉,故設置為“0”即可
eip158Block eip是ethereum improvement proposal的縮寫,你的鏈不會因為因為這些提議分叉,故設置為“0”即可
mixhsah 與nonce配合用於挖礦,由上一個區塊的一部分生成的哈希。注意它和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。
difficulty 設置設置當前區塊難度,如果難度過大,CPU挖礦就很難
alloc 給某個賬戶預分配以太幣
coinbase 礦工帳號
timestamp 創世塊的時間戳
parentHash 上一個區塊的哈希值,由於是創世區塊,所以值為0
extraData 可以寫入32Byte大小的任意數據,每個block都會有,由挖出block的miner來決定要不要在里面寫什么
gasLimit 該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總

 2. geth啟動參數詳解:

identity 區塊鏈的標識,用於標識目前網絡的名字
datadir 指明當前區塊鏈私鑰和網絡數據存放的位置
port 指定以太坊網絡監聽端口,默認為30303
rpc 開啟HTTP-RPC服務,可以進行智能合約的部署和調試
rpcaddr 指定HTTP-RPC服務監聽地址,默認為“localhost”
rpcapi 設置允許連接的rpc的客戶端,一般為db、eth、net、web3
rpcport 指定HTTP-RPC服務監聽端口,默認為8545
networkid 指定以太坊id,其實就是區塊鏈網絡的身份標識,共有鏈為1,測試鏈為3,默認啟動id為1
etherbase 指定礦工帳號,默認為keystory中首個帳號
mine 開啟挖礦,默認為CPU挖礦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM