1.創世鏈
{
“config”: {
“chainId”: 001,
“homesteadBlock”: 0,
“eip150Block”: 0,
“eip155Block”: 0,
“eip158Block”: 0,
“byzantiumBlock”: 0,
“constantinopleBlock”: 0,
“petersburgBlock”: 0,
“istanbulBlock”: 0
},
"alloc": {
"0xaf26BcAFe50c1A9808c1bAd9C9Ad67a8A9100DA4": {
"balance": "10000000000000000000000000000000000"
}
},
“coinbase”: “0x0000000000000000000000000000000000000000”,
“difficulty”: “0x2000”,
“extraData”: “”,
“gasLimit”: “0x2fefd8”,
“nonce”: “0x0000000000000042”,
“mixhash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“timestamp”: “0x00”
}
- alloc: 用來預置賬號以及賬號的以太幣數量,因為私鏈挖礦比較容易,所以我們也可以不預置有幣的賬號,需要的時候自己創建即可,
- chainId:鏈的ID,以太坊公鏈是1,我們要與其不同,以免沖突
- nonce: nonce就是一個64位亂數,用于挖礦,
- mixhash:與nonce配合用于挖礦,由上一個區塊的一部分生成的hash,
- difficulty: 設定當前區塊的難度,如果難度過大,cpu挖礦就很難,這里設定較小難度
- coinbase: 礦工的賬號,隨便填
- timestamp: 設定創世塊的時間戳
- parentHash: 上一個區塊的hash值,因為是創世塊,所以這個值是0
- extraData: 附加資訊,隨便填,可以填你的個性資訊
- gasLimit: 該值設定對GAS的消耗總量限制,用來限制區塊能包含的交易資訊總和,因為我們是私有鏈,所以填最大,
2.啟動geth
geth --datadir ./db/ --rpc --rpcapi “eth,net,web3,personal,admin,txpool,debug,miner” --nodiscover console --dev --dev.period 1 --allow-insecure-unlock
開啟RPC服務!!!
admin.startRPC("0.0.0.0", 8545, "*", "eth,net,web3,admin,personal")
geth --syncmode=full --identity "TestNode0" --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "*" --rpcvhosts "*" --port "30303" --nodiscover --rpcapi "db,eth,net,web3,miner,net,personal,net,txpool,admin,debug" --networkid 1900 --datadir "./testchain" --nat "any" --mine --minerthreads "1" --allow-insecure-unlock
3.創建兩個賬戶
方便后期測驗轉賬,所以創建兩個賬戶
personal.newAccount()
//出現的一串字符,為創建的賬戶地址
后面輸入密碼
4.查詢余額
eth.getBalance(eth.accounts[0])
geth --datadir data init genesis.json
//輸出資訊
提示:
如果在執行上面的命令報錯
先洗掉原來的創世塊geth removedb --datadir data
再初始化創世區塊geth --datadir data init genesis.json
初始化成功后,會在資料目錄 data 中生成 geth 和 keystore 兩個檔案夾,此時目錄結構如下:
tree
//輸出結果
├── data
│ ├── geth
│ │ ├── LOCK
│ │ ├── chaindata
│ │ │ ├── 000001.log
│ │ │ ├── CURRENT
│ │ │ ├── LOCK
│ │ │ ├── LOG
│ │ │ └── MANIFEST-000000
│ │ ├── lightchaindata
│ │ │ ├── 000001.log
│ │ │ ├── CURRENT
│ │ │ ├── LOCK
│ │ │ ├── LOG
│ │ │ └── MANIFEST-000000
│ │ ├── nodekey
│ │ └── transactions.rlp
│ ├── history
│ └── keystore
│ └── UTC--2020-12-05T14-29-06.010169000Z--785d3383704f4832b85fe0b00892bf9e175e64ff
└── genesis.json
其中 geth/chaindata 中存放的是區塊資料,keystore 中存放的是賬戶資料,
3.進入geth控制臺
geth --datadir data --networkid 100 console
提示:
networkid為上面設定的100
4.轉賬交易
解鎖賬戶
personal.unlockAccount(eth.accounts[0])
true
發送交易
eth.getBalance(eth.accounts[0])
此時查詢賬戶余額沒發生變化,需要進行挖礦確認打包交易
eth.getBalance(eth.accounts[1])
5.啟動&停止挖礦
通過miner.start()啟動挖礦
miner.start(1)
start 的引數表示挖礦使用的執行緒數,第一次啟動挖礦會先生成挖礦所需的 DAG 檔案,這個程序有點慢,等進度達到 100% 后,就會開始挖礦,此時螢屏會被挖礦資訊刷屏,
挖礦完成之后查詢賬戶余額
eth.getBalance(eth.accounts[1])
10000000000000000000
我們可以看到轉賬的10eth已經到賬
通過miner.stop()停止挖礦
miner.stop()
挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的賬戶,這個賬戶叫做coinbase,默認情況下coinbase是本地賬戶中的第一個賬戶:
eth.coinbase

我們可以通過miner.setEtherbase() 將其他賬戶設定成coinbase
miner.setEtherbase(eth.accounts[1])
true
eth.coinbase
“0xaa33b3a596af305e9618777b921570dd1a25215f”
重新啟動挖礦,查看eth.accounts[1]是否獲得以太幣
miner.start(5)
//等待幾秒后
miner.stop()
查詢賬戶余額:
web3.fromWei(eth.getBalance(eth.accounts[0]),‘ether’)
賬戶0和1都比之前的以太幣多,說明挖礦和miner.setEtherbase()設定成功
6.查看交易資訊
查看當前區塊總數:
eth.blockNumber
52
通過區塊號查看區塊資訊:
eth.getBlock(0)
{
difficulty: 8192,
extraData: “0x”,
gasLimit: 4294967295,
gasUsed: 0,
hash: “0x0e8bb0047f80e98089fd81dd4e077af8e43ccee0e1c8e1a7439b8e5b95a5a328”,
logsBloom: “0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000”,
miner: “0xaa33b3a596af305e9618777b921570dd1a25215f”,
mixHash: “0x0000000000000000000000000000000000000000000000000000000000000000”,
nonce: “0x0000000000000042”,
number: 0,
parentHash: “0x0000000000000000000000000000000000000000000000000000000000000000”,
receiptsRoot: “0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421”,
sha3Uncles: “0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347”,
size: 507,
stateRoot: “0x62815262f2efc4e22af8ac64adc029ba4f38a74969ec68de7b0714771ca06190”,
timestamp: 0,
totalDifficulty: 8192,
transactions: [],
transactionsRoot: “0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421”,
uncles: []
}
通過交易hash查看交易,hash可以通過上面的輸出資訊獲取:
eth.getTransaction(“0x0e8bb0047f80e98089fd81dd4e077af8e43ccee0e1c8e1a7439b8e5b95a5a328”)
null
控制臺操作命令介紹
控制臺內置了一些用來操作以太坊的 Javascript 物件,可以直接使用這些物件,
- eth:操作區塊鏈相關的方法;
- net:查看p2p網路狀態的方法;
- admin:與管理節點相關的方法;
- miner:啟動&停止挖礦的方法;
- personal:管理賬戶的方法;
- txpool:查看交易記憶體池的方法;
- web3:包含了以上物件,還包含一些單位換算的方法,
常用命令:
personal.newAccount():創建賬戶;
personal.unlockAccount():解鎖賬戶;
eth.accounts:列舉系統中的賬戶;
eth.getBalance():查看賬戶余額,回傳值的單位是 Wei(Wei 是以太坊中最小單位,類似位元幣中的聰,1 ether = 10^18 Wei);
eth.blockNumber:列出區塊總數;
eth.getTransaction():獲取交易;
eth.getBlock():獲取區塊;
miner.start():開始挖礦;
miner.stop():停止挖礦;
eth.coinbase:挖礦獎勵的賬戶
web3.fromWei():Wei 換算成以太幣;
web3.toWei():以太幣換算成 Wei;
txpool.status:交易池中的狀態;
admin.addPeer():連接到其他節點;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/231045.html
標籤:區塊鏈
上一篇:go語言學習筆記(1)
