環境安裝過程詳見前一篇。
這里利用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(寧靜) |
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挖礦 |