羅韭菜的超詳細(xì)dapp從零實(shí)戰(zhàn)(一)-- 如何1分鐘獲得5k以太幣

寫在前面:
標(biāo)題誤:其實(shí)就是以太坊私鏈搭建(圍笑)

image.png

本幣圈小韭菜,借寫dapp畢設(shè)之名實(shí)發(fā)簡(jiǎn)書交友帖,同時(shí)作為畢設(shè)文字與圖片記錄來(lái)源
如果有一起在寫以太坊dapp的小伙伴請(qǐng)猛烈地戳筆者??加v??信??

由于網(wǎng)上基于以太坊dapp開發(fā)的中文教程較雜且簡(jiǎn)略(小白不友好),甚至大多已過時(shí),故整合并根據(jù)實(shí)戰(zhàn)整理之,有些地方有疑問,求高手賜教。

注:由于本文作者為二級(jí)代碼殘廢,實(shí)戰(zhàn)時(shí)基本遇到了所有教程里有或者沒有的報(bào)錯(cuò),因此本文將列舉可能會(huì)遇到的所有的報(bào)錯(cuò)及解決方案,內(nèi)容較繁,可能引起大神不適,請(qǐng)繞道。

本系列需要你了解區(qū)塊鏈和以太坊基本常識(shí)(不了解跟著做也ojbk),可關(guān)注本文作者的其他文章(也許沒有)

本系列均為mac系統(tǒng)上操作

1. 寫dapp為什么要搭私鏈?

因?yàn)樵谝蕴还墟溕弦悄芎霞s,而智能合約要發(fā)起交易就要花費(fèi)gas。但如果搭私鏈,通過修改配置,就可以隨心所欲更改所有行為的gas費(fèi)用。既不用同步公有鏈的龐大數(shù)據(jù),也不用花錢購(gòu)買以太幣,很方便測(cè)試智能合約,也可以很容易切換接口部署到以太坊公有鏈上。

2. 工具準(zhǔn)備

  • mac os包管理工具 homebrew here(很重要,安裝geth的時(shí)候不會(huì)走彎路)

  • geth :即go-ethereum, 以太坊的客戶端 here(別嘗試下面的方法)

3. 運(yùn)行以太坊節(jié)點(diǎn)

  • 查看當(dāng)前geth節(jié)點(diǎn):
    geth account list
  • 打開終端,以開發(fā)方式啟動(dòng)geth
    geth --datadir “~/ethdev” --dev
  • 輸入以下命令,若成功顯示輸出幫助,則表示已安裝成功
    geth -h

4. 建立創(chuàng)世塊

  • 創(chuàng)建一個(gè)private的根目錄(這里會(huì)存入所有私鏈的內(nèi)容),在里面新建創(chuàng)世genesis.json文件。具體內(nèi)容here

超級(jí)重要的創(chuàng)世文件!網(wǎng)上有很多genesis.json, 但是一定要從官網(wǎng)下最新的,因?yàn)橥粋€(gè)網(wǎng)絡(luò)中,創(chuàng)世塊必須是一樣的,否則無(wú)法聯(lián)通。

因此如何配置genesis.json,是非常關(guān)鍵的,如果產(chǎn)生錯(cuò)誤,有些會(huì)導(dǎo)致無(wú)法初始化私鏈,也會(huì)發(fā)生很多奇怪的錯(cuò)誤。

以下格式j(luò)son文件適用geth (v 1.8.1)


image.png

其中將chainId 從0改成10,否則后面部署智能合約會(huì)有問題!!

需要注意的參數(shù):

  • difficulty: 設(shè)置當(dāng)前區(qū)塊的難度,如果難度過大,cpu挖礦就很難,這里設(shè)置較小難度。以太坊公有鏈15s出一個(gè)塊,一個(gè)塊5個(gè)以太幣,這里隨心所欲地改,屆時(shí)就可享受如標(biāo)題所述快感
  • coinbase: 礦工的賬號(hào),隨便填,反正也可以改。
  • timestamp: 設(shè)置創(chuàng)世塊的時(shí)間戳
  • gasLimit: 設(shè)置對(duì)gas消耗總量的限制,用來(lái)限制區(qū)塊能包含的交易信息總和,因?yàn)樗接墟湥钭畲蠹纯?/li>

5. 創(chuàng)建私有鏈

geth --datadir "./" init genesis.json
在這一步,你可能會(huì)遇到以下我都遇到過的報(bào)錯(cuò)!!!

(1) Fatal: invalid genesis file: missing 0x prefix for hex data
解決:16進(jìn)制數(shù)據(jù)需要加上0x前綴,也就是coinbase difficulty gaslimit 之類的地方。

(2) Fatal: invalid genesis file: hex string has odd length
解決:從v1.6開始,設(shè)置的十六進(jìn)制數(shù)值,不能是奇數(shù)位, 比如不能是0x0,而應(yīng)該是0x00。

(3) Error: invalid sender undefined
解決:這個(gè)錯(cuò)誤不會(huì)導(dǎo)致初始化失敗,但是會(huì)在以后的轉(zhuǎn)賬(eth.sendTransaction),或者部署智能合約的時(shí)候產(chǎn)生。解決方法就是chainId 不能設(shè)置為0。 如果你完全按照github上給的官方配置文件,就會(huì)產(chǎn)生這個(gè)錯(cuò)誤。

(4) Fatal: failed to write genesis block: genesis has no chain configuration
解決: 這個(gè)錯(cuò)誤信息,就是說(shuō),你的json文件中,缺少config部分。看到這個(gè)信息,那就是你下的是過時(shí)教程里的json文件了hiahia。

結(jié)果:(目錄結(jié)構(gòu))
private
├── chain
│ ├── geth
│ │ └── chaindata
│ │ │ ├── 000055.log
│ │ │ ├── CURRENT
│ │ │ ├── LOCK
│ │ │ ├── LOG
│ │ │ └── MANIFEST-000000
│ │ ├── lightchaindata
│ │ ├── LOCK
│ │ └── nodekey
│ └── keystore
└── genesis.json

6.啟動(dòng)

  • geth --datadir "./" --nodiscover console 2>>geth.log
    注意,這一句是輸入了log日志,之后啟動(dòng)挖礦時(shí)會(huì)返回null。
    不要慌!!!要查看輸出,需要進(jìn)入到private目錄:tail -f geth.log
  • 如果直接要在終端看輸出,去掉尾部即可: geth --datadir "./" --nodiscover console,但是一會(huì)兒我們要部署智能合約,為了看合約部署成功日志方便起見,建議采用輸入日志的方法。
  • 啟動(dòng)成功結(jié)果:


    image.png

這是一個(gè)交互式的 JavaScript 執(zhí)行環(huán)境,在這里面可以執(zhí)行 JavaScript 代碼,其中 > 是命令提示符。在這個(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ì)象,還包含一些單位換算的方法。

7.創(chuàng)建賬戶及相關(guān)

  • 查看賬戶

> personal.listAccounts
[]

  • 創(chuàng)建賬戶

>personal.newAccount('密碼')

  • 也可以用以下命令查看賬戶,默認(rèn)eth.accounts[0]是coinbase,也就是挖礦獲得的以太幣獎(jiǎng)勵(lì)會(huì)自動(dòng)轉(zhuǎn)入coinbase賬戶


    image.png
  • 查看賬戶余額

    image.png

    -getBalance()返回值的單位是wei,wei是以太幣的最小單位,1個(gè)以太幣=10的18次方個(gè)wei。要查看有多少個(gè)以太幣,可以用web3.fromWei()將返回值換算成以太幣。

  • 啟動(dòng)&停止挖礦
    啟動(dòng):miner.start()

    image.png

其中start的參數(shù)表示挖礦使用的線程數(shù)。第一次啟動(dòng)挖礦會(huì)先生成挖礦所需的DAG文件,這個(gè)過程有點(diǎn)慢,不要慌!!等進(jìn)度達(dá)到100%后,就會(huì)開始挖礦,此時(shí)屏幕會(huì)被挖礦信息刷屏。

停止挖礦:miner.stop()
輸入的字符會(huì)被挖礦刷屏信息沖掉,沒關(guān)系!!

  • 這時(shí)候再查看一下eth.accounts[0]的余額,有驚喜!

8.發(fā)送交易

amount = web3.toWei(5,'ether')
"5000000000000000000"
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
Error: account is locked
at web3.js:3119:20
at web3.js:6023:15
at web3.js:4995:36
at <anonymous>:1:1
報(bào)錯(cuò)是因?yàn)橘~戶**每隔一段時(shí)間就會(huì)被鎖住,要發(fā)送交易,必須先解鎖賬戶,因此我們要解鎖賬戶:
personal.unlockAccount(eth.accounts[要解鎖的賬戶索引],'密碼')

正確的情況下返回交易的哈希值

> eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
"0xed629a75b4127d0a075393f667b62b5ebc578bd358ce8000029deb6d66e9696b"

若要查看該筆交易的內(nèi)容,則復(fù)制上面的哈希值,使用getTransaction查看具體內(nèi)容

> eth.getTransaction("0xed629a75b4127d0a075393f667b62b5ebc578bd358ce8000029deb6d66e9696b")
{
  blockHash: "0x1f126ad8efc32b82fc078e2b0fac9954f62642a593d06f6e4780f8e9faed0826",
  blockNumber: 1,
  from: "0xcffe5bd058e725e8ee3d0a1d9bb7a5794a9ddc7b",
  gas: 90000,
  gasPrice: 1,
  hash: "0xed629a75b4127d0a075393f667b62b5ebc578bd358ce8000029deb6d66e9696b",
  input: "0x",
  nonce: 0,
  r: "0x155833eb7260c79dc910b66b6c3b32058f7245c0ea25a24c2e575d3f9f8c42ed",
  s: "0x6b4a5f97262b8ea32d9c58be3360377a64373ef468f526860f672c76c76f7427",
  to: "0xc2dec5a4c6e0e55651baaf9be4f91dbf2aadc017",
  transactionIndex: 0,
  v: "0xa96",
  value: 5000000000000000000
}
> 

本來(lái)想日更三篇,寫到智能合約與web的交互,但是筆者實(shí)在太累了(女大學(xué)生的日常放棄)...

感謝下浙大炒幣團(tuán)楊老板,如果有一起在寫以太坊dapp的小伙伴請(qǐng)猛烈地戳筆者??加v??信??

ref:
here
here

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本文是對(duì)以太坊文檔 Ethereum Frontier Guide 和 Ethereum Homestead 的整...
    趁風(fēng)卷閱讀 9,580評(píng)論 0 16
  • 一、區(qū)塊鏈 1. 分布式去中心化 比特幣設(shè)計(jì)的初衷就是要避免依賴中心化的機(jī)構(gòu),沒有發(fā)行機(jī)構(gòu),也不可能操縱發(fā)行數(shù)量。...
    Tenny1225閱讀 33,841評(píng)論 5 35
  • 害羞會(huì)阻礙很多事情發(fā)生 我因?yàn)樾睦镂窇?已經(jīng)錯(cuò)過很多進(jìn)步
    仝流蘇閱讀 235評(píng)論 0 0
  • 我的快樂老家
    軍劍許閱讀 136評(píng)論 0 0
  • 過目不忘讀書法的三項(xiàng)基本原則: 1.1 10年也不會(huì)忘記------留在記憶深處的讀書法 一周輸出三次來(lái)強(qiáng)...
    雪域毒花閱讀 430評(píng)論 0 0