最近想給同事做一次以太坊智能合約編寫的分享,PPT寫著寫著越來(lái)越多。想想還算是把它弄成文章。
1.1 ETH介紹
???? ETH 是我們的V神發(fā)起的一個(gè)開源的去中心化的數(shù)字貨幣項(xiàng)目。ETH在比特幣的基礎(chǔ)上提出了“智能合約”(Smart Contract)的概念。ETH更像是一個(gè)底層的操作系統(tǒng)。就像IOS 和安卓一樣,提供豐富的API接口。 學(xué)習(xí)ETH 的相關(guān)的地址如下:
白皮書: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 介紹
????老有朋友問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ù)說明
| 參數(shù) | 解釋說明 |
|---|---|
| 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ū)塊的難度,如果難度過大,cpu挖礦就很難,這里設(shè)置較小難度 |
| alloc | 用來(lái)預(yù)置賬號(hào)以及賬號(hào)的以太幣數(shù)量,因?yàn)樗接墟溚诘V比較容易,所以我們不需要預(yù)置有幣的賬號(hào),需要的時(shí)候自己創(chuàng)建即可以。 |
| coinbase | 礦工的賬號(hào),(可以隨便填寫) |
| 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ì)象,還包含一些單位換算的方法