日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

以太坊私链搭建

發(fā)布時(shí)間:2023/12/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊私链搭建 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Window上安裝ubuntu系統(tǒng)搭建私有鏈操作步驟

modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

前提是 geth 已經(jīng)安裝,可以參考上一節(jié)內(nèi)容講解 Step 1: 建立目錄和genesis.json 在命令行模式創(chuàng)建一個(gè)目錄,例如geths ,這里geths目錄命名任意。 命令:mkdir geths 然后在ubuntu目錄下會(huì)出現(xiàn)一個(gè)geths文件夾。 繼續(xù)進(jìn)入到該文件夾目錄下,創(chuàng)建一個(gè)文件,genesis.json, 文件名也可以任意。 genesis.json 文件內(nèi)容: (注意版本太早的復(fù)制進(jìn)去,運(yùn)行會(huì)出錯(cuò),可以適當(dāng)更改內(nèi)容) [html] view plaincopy
  • ???{??
  • ??"config":?{??
  • ????????"chainId":?666,??
  • ????????"homesteadBlock":?0,??
  • ????????"eip155Block":?0,??
  • ????????"eip158Block":?0??
  • ????},??
  • ??"alloc"??????:?{},??
  • ??"coinbase"???:?"0x0000000000000000000000000000000000000000",??
  • ??"difficulty"?:?"0x20000",??
  • ??"extraData"??:?"",??
  • ??"gasLimit"???:?"0x2fefd8",??
  • ??"nonce"??????:?"0x0000000000000042",??
  • ??"mixhash"????:?"0x0000000000000000000000000000000000000000000000000000000000000000",??
  • ??"parentHash"?:?"0x0000000000000000000000000000000000000000000000000000000000000000",??
  • ??"timestamp"??:?"0x00"??
  • }??
  • Step 2: 執(zhí)行命令,創(chuàng)建創(chuàng)世區(qū)塊 切換回命令行,執(zhí)行命令,制造創(chuàng)世區(qū)塊 進(jìn)入到geths 目錄下,執(zhí)行命令 geth --datadir "./" init genesis.json 此時(shí)當(dāng)前geths目錄下面會(huì)新增出兩個(gè)文件夾geth和keystore geth中保存的是區(qū)塊鏈的相關(guān)數(shù)據(jù) keystore中保存的是該鏈條中的用戶信息 Step 3:創(chuàng)建自己的私有鏈條 geth --datadir "./" --nodiscover console 2>>geth.log 注意這里輸出打印日志到log文件中 Step 4:在自己的私有鏈條上創(chuàng)建用戶 輸入命令eth.accounts, 我們會(huì)發(fā)現(xiàn)返回值為[],這是因?yàn)榇藭r(shí)雖然以太坊的私有鏈已經(jīng)被創(chuàng)造出來(lái),但還沒有任何賬戶。 輸入命令personal.newAccount("xxx"),該命令將創(chuàng)造一個(gè)新的用戶,該用戶的密碼是xxx. 當(dāng)然用戶也可以將xxx?改為123,或者123456,或者任意密碼 再次輸入命令?eth.accounts, 我們會(huì)發(fā)現(xiàn)一個(gè)新的用戶被創(chuàng)建了出來(lái),這就代表我們已經(jīng)創(chuàng)建了一個(gè)賬戶,重personal.newAccount()?&?eth.accounts?我們可以創(chuàng)建若干個(gè)賬戶出來(lái) Step 5: 最重要的一步來(lái)了,開始挖礦 在命令行中執(zhí)行命令?miner.start(), 開始在我們的區(qū)塊鏈上進(jìn)行挖礦 一直等到100%。這個(gè)以太坊私有鏈就會(huì)正式啟動(dòng),并持續(xù)不斷的生成出以太坊來(lái)。 注意點(diǎn): 1. 挖礦挖到的ether幣會(huì)默認(rèn)保在第一個(gè)賬戶中,即eth.acccounts[0]中。 2. 挖礦是執(zhí)行智能合約的基礎(chǔ)。如果停止挖礦的話,不僅以太幣會(huì)停止生成,所有智能合約的調(diào)用也會(huì)不起作用。 3. 如果真的要停止挖礦,可以執(zhí)行命令miner.stop()來(lái)停止挖礦 4. 按上面的命令,應(yīng)該是可以實(shí)現(xiàn)以太坊挖礦的。如果不行的話,有可能就是之前有存在的鏈,此時(shí)應(yīng)該刪除之前的數(shù)據(jù)。即刪除~/.ethash文件夾和里面的文件即可。 5. 通常有人出現(xiàn)miner.start()返回null,,并且沒有信息刷屏,就停留在null,, 原因回到step 3 你將輸出結(jié)果打印到日志log,所以無(wú)法顯示,exit 退出, 重新運(yùn)行g(shù)eth --datadir "./" --nodiscover console 即可。 Step6: 挖礦啟動(dòng)后,查看主賬戶的以太幣數(shù)量 acc0 = eth.accounts[0] eth.getBalance(acc0) 結(jié)果只要不為0,那就說(shuō)明挖礦成功! 退出挖礦:miner.stop() 退出當(dāng)前geth ,執(zhí)行:exit 重新運(yùn)行g(shù)eth, 直接進(jìn)入到step 3, 不需要執(zhí)行前兩步了。

    (4)創(chuàng)建一個(gè)新賬戶

    personal.newAccount(‘密碼')

    ?

    (5)賬戶賦值給某一個(gè)變量

    user1 = persnal.account[0]

    ?

    (6)上面提到過(guò)日志文件,我們?cè)僦亻_一個(gè)終端,我們使用以下命令打開日志:

    tail -f? log.log

    (7)在geth控制臺(tái)中啟動(dòng)挖礦:

    miner.start()

    ?

    (8)停止挖礦

    miner.stop()

    ?

    (9)查看賬戶的賬戶余額

    eth.getBalance(user1)

    ?

    (10)

    user1向user2轉(zhuǎn)移以太幣

    eth.sendTransaction({from: user1,to: user2,value: web3.toWei(3,"ether")})

    ?

    (11)解鎖賬戶后

    eth.unlockAccount(user1,"123")

    ?

    ?

    2)下面我們來(lái)實(shí)現(xiàn)下在geth中編譯一個(gè)智能合約

    ?

    [plain]?view plaincopy
  • contract?test?{??
  • ????function?multiply(uint?a)?returns(uint?d)?{??
  • ????????return?a?*?7;???
  • ????}???
  • }??
  • 在geth中執(zhí)行如下:

    ?

    source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"

    然后編譯該合約:

    contract = eth.compile.solidity(source).test

    編譯后的結(jié)果如下:

    code:就是合約編譯后的字節(jié)碼文件,在以太坊虛擬機(jī)EVM上運(yùn)行的就是這個(gè)字節(jié)碼;

    abiDefinition:其實(shí)就是合約的二進(jìn)制接口,可用來(lái)外部調(diào)用;

    其他的一些參數(shù)也都是可以見名知意了。

    ?

    然后就要獲取合約的abi(其實(shí)該真正要用的abi可以通過(guò)https://ethereum.github.io/browser-solidity這個(gè)在線編譯器獲得):

    abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]

    ?

    然后是訪問(wèn)abi接口:

    MyContract=eth.contract(abi)

    ?

    ?

    然后獲得合約的實(shí)例:

    myContract=MyContract.new({from:user1,data:contract.code})

    如果提示你沒有解鎖的話,只要解鎖即可。

    ?

    調(diào)用函數(shù)傳遞參數(shù)

    函數(shù)做了乘以7的操作,輸出符合預(yù)期。合約執(zhí)行成功。

    ?

    ? ? ? 以上就是對(duì)geth最基本的運(yùn)用,我們會(huì)在以后的開發(fā)中學(xué)習(xí)geth更為深入的功能。

    轉(zhuǎn)載于:https://www.cnblogs.com/felixzuo/p/9018803.html

    總結(jié)

    以上是生活随笔為你收集整理的以太坊私链搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。