最近想給同事做一次以太坊智能合約編寫(xiě)的分享思杯,PPT寫(xiě)著寫(xiě)著越來(lái)越多。想想還算是把它弄成文章挠进。
1.1 ETH介紹
???? ETH 是我們的V神發(fā)起的一個(gè)開(kāi)源的去中心化的數(shù)字貨幣項(xiàng)目色乾。ETH在比特幣的基礎(chǔ)上提出了“智能合約”(Smart Contract)的概念。ETH更像是一個(gè)底層的操作系統(tǒng)领突。就像IOS 和安卓一樣杈湾,提供豐富的API接口。 學(xué)習(xí)ETH 的相關(guān)的地址如下:
白皮書(shū):https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-White-Paper
官方網(wǎng)站:https://www.ethereum.org
區(qū)塊查詢:https://etherscan.io/ https://etherchain.org/
1.2 ETC 介紹
????老有朋友問(wèn)ETC 和ETH是什么關(guān)系攘须。其實(shí)他們就是親兄弟漆撞。ETH 是ETC出現(xiàn)了一次BUG,導(dǎo)致有人損失了資產(chǎn)以后分裂出來(lái)的項(xiàng)目于宙。但是有一些認(rèn)為數(shù)字貨幣就是去中心化浮驳,是民主的,BUG的產(chǎn)生本身也是系統(tǒng)規(guī)則本身捞魁。 于是他們堅(jiān)持在了ETC社區(qū)至会。
2.2 私有鏈搭建
- 代碼安裝方式
- 創(chuàng)世塊配置
- 編譯代碼
2.2.1 代碼安裝方式
初學(xué)者我們推薦使用 Installing from PPA 安裝
本人的安裝目錄 : ~/Library/Ethereum/geth
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
2.2.2 機(jī)器環(huán)境
localhost:~ lei$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.2
BuildVersion: 17C88
2.2.3 GO 環(huán)境安裝
這里先不介紹GO的環(huán)境配置,請(qǐng)自行查詢谱俭。
版本需求為: version 1.7+ 本人使用的GO版本
localhost:~ lei$ go version
go version go1.9.3 darwin/amd64
2.3 私有鏈數(shù)據(jù)準(zhǔn)備
2.3.1 初始化文件 genesis.json
{
“config”: {“
chainId”: 88888,
“homesteadBlock”: 0,
“eip155Block”: 0,
“eip158Block”: 0
},
“coinbase”: “0x0000000000000000000000000000000000000000”,
“difficulty”: “0x1”,
“extraData”: “0x00”,
“gasLimit”: “0x47e7c5”,
“nonce”: “0x0000000000000042”,
“mixhash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“parentHash”: “0x0000000000000000000000000000000000000000000000000000000000000000”,
“timestamp”: “0x00”,
“alloc”: {
“430e986e0cca10a174baad96871ec9cb308c6d05”: {
“balance”: “111111”
}
}
}
2.3.2參數(shù)說(shuō)明
參數(shù) | 解釋說(shuō)明 |
---|---|
mixhash | 與nonce配合用于挖礦奉件,由上一個(gè)區(qū)塊的一部分生成的hash宵蛀。注意他和nonce的設(shè)置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity,(44)章節(jié)所描述的條件。. |
nonce | nonce就是一個(gè)64位隨機(jī)數(shù)县貌,用于挖礦术陶,注意他和mixhash的設(shè)置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節(jié)所描述的條件。 |
difficulty | 設(shè)置當(dāng)前區(qū)塊的難度煤痕,如果難度過(guò)大梧宫,cpu挖礦就很難,這里設(shè)置較小難度 |
alloc | 用來(lái)預(yù)置賬號(hào)以及賬號(hào)的以太幣數(shù)量摆碉,因?yàn)樗接墟溚诘V比較容易塘匣,所以我們不需要預(yù)置有幣的賬號(hào),需要的時(shí)候自己創(chuàng)建即可以巷帝。 |
coinbase | 礦工的賬號(hào)忌卤,(可以隨便填寫(xiě)) |
timestamp | 設(shè)置創(chuàng)世塊的時(shí)間戳 |
parentHash | 上一個(gè)區(qū)塊的hash值,因?yàn)槭莿?chuàng)世塊楞泼,所以這個(gè)值是0 |
Data | 附加信息驰徊,隨便填,可以填你的個(gè)性信息 |
gasLimit | 該值設(shè)置對(duì)GAS的消耗總量限制现拒,用來(lái)限制區(qū)塊能包含的交易信息總和,因?yàn)槲覀兪撬接墟溚蓿蕴钭畲蟆?/td> |
3啟動(dòng)步驟
初始化數(shù)據(jù)
geth --datadir "./" init genesis.json
運(yùn)行以后會(huì)出現(xiàn)兩個(gè)目錄
geth中保存的是區(qū)塊鏈的相關(guān)數(shù)據(jù)
keystore中保存的是該鏈條中的用戶信息
image.png
啟動(dòng)控制臺(tái)
geth --datadir "./" --nodiscover console 2>>geth.log
在這個(gè)環(huán)境里也內(nèi)置了一些用來(lái)操作以太坊的Javascript對(duì)象印蔬,可以直接使用這些對(duì)象。這些對(duì)象主要包括:
- eth:包含一些跟操作區(qū)塊鏈相關(guān)的方法
- net:包含以下查看p2p網(wǎng)絡(luò)狀態(tài)的方法
- admin:包含一些與管理節(jié)點(diǎn)相關(guān)的方法
- miner:包含啟動(dòng)&停止挖礦的一些方法
- personal:主要包含一些管理賬戶的方法
- txpool:包含一些查看交易內(nèi)存池的方法
- web3:包含了以上對(duì)象脱衙,還包含一些單位換算的方法