1. 程式人生 > >以太坊開發--geth的使用入門

以太坊開發--geth的使用入門

一、環境配置和程式安裝1.1 安裝 gethMAC OSX首先確保已安裝 homebrew,沒有安裝過的可以在命令列下執行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 進行安裝brew tap ethereum/ethereumbrew install ethereumWINDOWS訪問 https://geth.ethereum.org/downloads/下載並安裝 Geth for WindowsLINUXgit clone https://github.com/ethereum/go-ethereumsudo apt-get install -y build-essential golangcd go-ethereummake geth在命令列下輸入 geth -h , 有如下回顯表示成功

1.2 安裝 solc首先確保安裝過npm, 沒有安裝過的可以訪問 npm網站下載安裝npm install -g solc在命令列下輸入 solc --help , 有如下回顯表示成功

二、配置私鏈節點2.1 創世塊設定新建資料夾,命名隨意,在此資料夾下建立genesis.json檔案和data資料夾genesis.json 的內容如下:{"config": {        "chainId": 123456,        "homesteadBlock": 0,        "eip155Block": 0,        "eip158Block": 0},"nonce": "0x0000000000000042","difficulty": "0x020000","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","
coinbase
": "0x0000000000000000000000000000000000000000","timestamp": "0x00","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa","gasLimit": "0x4c4b40","alloc": {}}2.2 初始化在命令列下進入剛才建立的資料夾,輸入如下命令:geth --datadir data init genesis.json各引數代表的含義如下:init 表示初始化區塊,後面跟著創世塊的配置檔案genesis.jsondatadir 資料存放的位置2.3 啟動節點
geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console各引數代表的含義如下:networkid 設定當前區塊鏈的網路ID,用於區分不同的網路,1表示公鏈rpc 表示啟動rpc通訊,可以進行智慧合約的部署和除錯console 表示啟動命令列模式,可以在Geth中執行命令執行成功後將進入區塊鏈的JavaScript控制檯環境

2.4 Geth JavaScript控制檯環境使用說明建立新賬號personal.newAccount()或者 personal.newAccount("123456")檢視節點資訊admin.nodeInfo挖礦開始挖礦 miner.start(1)停止挖礦 miner.stop()檢視當前礦工賬號eth.coinbase 預設為第一個賬戶修改礦工賬號miner.setEtherbase(eth.accounts[1])檢視賬戶資訊eth.accounts[0]檢視賬戶餘額eth.getBalance(eth.accounts[0])或者 web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")解鎖賬號personal.unlockAccount(eth.accounts[0])使用賬戶資金前都需要先解鎖賬號轉賬eth.sendTransaction({from:eth.accounts[0],to:"0x587e57a516730381958f86703b1f8e970ff445d9",value:web3.toWei(3,"ether")})使用 txpool.status 可以看到交易狀態檢視區塊資料eth.blockNumbereth.getTransaction("0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825")eth.getBlock(1) 通過區塊號檢視區塊三、智慧合約3.1 編輯合約程式碼建立一個 Token.sol 檔案,內容如下:contract Token {    address issuer;    mapping (address => uint) balances;    event Issue(address account, uint amount);    event Transfer(address from, address to, uint amount);    function Token() {        issuer = msg.sender;    }    function issue(address account, uint amount) {        if (msg.sender != issuer) throw;        balances[account] += amount;    }    function transfer(address to, uint amount) {        if (balances[msg.sender] < amount) throw;        balances[msg.sender] -= amount;        balances[to] += amount;        Transfer(msg.sender, to, amount);    }    function getBalance(address account) constant returns (uint) {        return balances[account];    }}這份程式碼實現了一個簡單的Token合約功能。issue 函式可以向充值以太到合約賬戶transfer 函式可以向其他賬號傳送tokengetBalance 函式可以獲取某個賬號的token餘額3.2 編譯與部署壓縮合約程式碼命令列下執行 cat Token.sol | tr '\n' ' '這條命令將程式碼中的換行符替換成空格,這樣我們的程式碼就只有一行了。命令執行成功後將回顯複製下來。將合約程式碼儲存為一個變數回到Geth JavaScript 控制檯,執行如下命令,等於號後面的內容就是我們剛才複製下來的壓縮後的合約程式碼。var tokenSource = 'contract Token { address issuer; mapping (address => uint) balances; event Issue(address account, uint amount); event Transfer(address from, address to, uint amount); function Token() { issuer = msg.sender; } function issue(address account, uint amount) { if (msg.sender != issuer) throw; balances[account] += amount; } function transfer(address to, uint amount) { if (balances[msg.sender] < amount) throw; balances[msg.sender] -= amount; balances[to] += amount; Transfer(msg.sender, to, amount); } function getBalance(address account) constant returns (uint) { return balances[account]; } }';編譯var tokenCompiled = eth.compile.solidity(tokenSource);若不成功,請參考https://ethereum.stackexchange.com/questions/15435/how-to-compile-solidity-contracts-with-geth-v1-6提供的替代方案檢視二進位制程式碼tokenCompiled['<stdin>:Token'].code檢視ABItokenCompiled['<stdin>:Token'].info.abiDefinition建立合約物件var contract = eth.contract(tokenCompiled['<stdin>:Token'].info.abiDefinition);var initializer = {from: web3.eth.accounts[0], data: tokenCompiled['<stdin>:Token'].code, gas: 300000};var token = contract.new(initializer)輸入命令 token 可以看到此時的token有transactionHash 但是沒有address執行 miner.start(1) 一段時間後停止,我們的合約就釋出到了鏈上3.3 與合約進行互動充值personal.unlockAccount(eth.accounts[0])token.issue.sendTransaction(eth.accounts[0], 100, {from: eth.accounts[0]});miner.start(1)miner.stop()傳送 tokentoken.transfer(eth.accounts[1], 30, {from: eth.accounts[0]})miner.start(1)miner.stop()檢視餘額token.getBalance()

命令用法

geth [選項] 命令 [命令選項] [引數…]

版本:

1.7.3-stable

命令:

account    管理賬戶

attach    啟動互動式JavaScript環境(連線到節點)

bug        上報bug Issues

console    啟動互動式JavaScript環境

copydb    從資料夾建立本地鏈

dump      Dump(分析)一個特定的塊儲存

dumpconfig 顯示配置值

export    匯出區塊鏈到檔案

import    匯入一個區塊鏈檔案

init      啟動並初始化一個新的創世紀塊

js        執行指定的JavaScript檔案(多個)

license    顯示許可資訊

makecache  生成ethash驗證快取(用於測試)

makedag    生成ethash 挖礦DAG(用於測試)

monitor    監控和視覺化節點指標

removedb  刪除區塊鏈和狀態資料庫

version    列印版本號

wallet    管理Ethereum預售錢包

help,h    顯示一個命令或幫助一個命令列表

ETHEREUM選項:

--config value          TOML 配置檔案

--datadir “xxx”        資料庫和keystore金鑰的資料目錄

--keystore              keystore存放目錄(預設在datadir內)

--nousb                禁用監控和管理USB硬體錢包

--networkid value      網路識別符號(整型, 1=Frontier, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby) (預設: 1)

--testnet              Ropsten網路:預先配置的POW(proof-of-work)測試網路

--rinkeby              Rinkeby網路: 預先配置的POA(proof-of-authority)測試網路

--syncmode "fast"      同步模式 ("fast", "full", or "light")

--ethstats value        上報ethstats service  URL (nodename:[email protected]:port)

--identity value        自定義節點名

--lightserv value      允許LES請求時間最大百分比(0 – 90)(預設值:0)

--lightpeers value      最大LES client peers數量(預設值:20)

--lightkdf              在KDF強度消費時降低key-derivation RAM&CPU使用

開發者(模式)選項:

--dev              使用POA共識網路,預設預分配一個開發者賬戶並且會自動開啟挖礦。

--dev.period value  開發者模式下挖礦週期 (0 = 僅在交易時) (預設: 0)

ETHASH 選項:

--ethash.cachedir                        ethash驗證快取目錄(預設 = datadir目錄內)

--ethash.cachesinmem value              在記憶體儲存的最近的ethash快取個數  (每個快取16MB ) (預設: 2)

--ethash.cachesondisk value              在磁碟儲存的最近的ethash快取個數 (每個快取16MB) (預設: 3)

--ethash.dagdir ""                      存ethash DAGs目錄 (預設 = 使用者hom目錄)

--ethash.dagsinmem value                在記憶體儲存的最近的ethash DAGs 個數 (每個1GB以上) (預設: 1)

--ethash.dagsondisk value                在磁碟儲存的最近的ethash DAGs 個數 (每個1GB以上) (預設: 2)

交易池選項:

--txpool.nolocals            為本地提交交易禁用價格豁免

--txpool.journal value      本地交易的磁碟日誌:用於節點重啟 (預設: "transactions.rlp")

--txpool.rejournal value    重新生成本地交易日誌的時間間隔 (預設: 1小時)

--txpool.pricelimit value    加入交易池的最小的gas價格限制(預設: 1)

--txpool.pricebump value    價格波動百分比(相對之前已有交易) (預設: 10)

--txpool.accountslots value  每個帳戶保證可執行的最少交易槽數量  (預設: 16)

--txpool.globalslots value  所有帳戶可執行的最大交易槽數量 (預設: 4096)

--txpool.accountqueue value  每個帳戶允許的最多非可執行交易槽數量 (預設: 64)

--txpool.globalqueue value  所有帳戶非可執行交易最大槽數量  (預設: 1024)

--txpool.lifetime value      非可執行交易最大入隊時間(預設: 3小時)

效能調優的選項:

--cache value                分配給內部快取的記憶體MB數量,快取值(最低16 mb /資料庫強制要求)(預設:128)

--trie-cache-gens value      保持在記憶體中產生的trie node數量(預設:120)

帳戶選項:

--unlock value              需解鎖賬戶用逗號分隔

--password value            用於非互動式密碼輸入的密碼檔案

API和控制檯選項:

--rpc                      啟用HTTP-RPC伺服器

--rpcaddr value            HTTP-RPC伺服器介面地址(預設值:“localhost”)

--rpcport value            HTTP-RPC伺服器監聽埠(預設值:8545)

--rpcapi value              基於HTTP-RPC介面提供的API

--ws                        啟用WS-RPC伺服器

--wsaddr value              WS-RPC伺服器監聽介面地址(預設值:“localhost”)

--wsport value              WS-RPC伺服器監聽埠(預設值:8546)

--wsapi  value              基於WS-RPC的介面提供的API

--wsorigins value          websockets請求允許的源

--ipcdisable                禁用IPC-RPC伺服器

--ipcpath                  包含在datadir裡的IPC socket/pipe檔名(轉義過的顯式路徑)

--rpccorsdomain value      允許跨域請求的域名列表(逗號分隔)(瀏覽器強制)

--jspath loadScript        JavaScript載入指令碼的根路徑(預設值:“.”)

--exec value                執行JavaScript語句(只能結合console/attach使用)

--preload value            預載入到控制檯的JavaScript檔案列表(逗號分隔)

網路選項:

--bootnodes value    用於P2P發現引導的enode urls(逗號分隔)(對於light servers用v4+v5代替)

--bootnodesv4 value  用於P2P v4發現引導的enode urls(逗號分隔) (light server, 全節點)

--bootnodesv5 value  用於P2P v5發現引導的enode urls(逗號分隔) (light server, 輕節點)

--port value        網絡卡監聽埠(預設值:30303)

--maxpeers value    最大的網路節點數量(如果設定為0,網路將被禁用)(預設值:25)

--maxpendpeers value    最大嘗試連線的數量(如果設定為0,則將使用預設值)(預設值:0)

--nat value            NAT埠對映機制 (any|none|upnp|pmp|extip:) (預設: “any”)

--nodiscover            禁用節點發現機制(手動新增節點)

--v5disc                啟用實驗性的RLPx V5(Topic發現)機制

--nodekey value        P2P節點金鑰檔案

--nodekeyhex value      十六進位制的P2P節點金鑰(用於測試)

礦工選項:

--mine                  開啟挖礦

--minerthreads value    挖礦使用的CPU執行緒數量(預設值:8)

--etherbase value      挖礦獎勵地址(預設=第一個建立的帳戶)(預設值:“0”)

--targetgaslimit value  目標gas限制:設定最低gas限制(低於這個不會被挖?) (預設值:“4712388”)

--gasprice value        挖礦接受交易的最低gas價格

--extradata value      礦工設定的額外塊資料(預設=client version)

GAS價格選項:

--gpoblocks value      用於檢查gas價格的最近塊的個數  (預設: 10)

--gpopercentile value  建議gas價參考最近交易的gas價的百分位數,(預設: 50)

虛擬機器的選項:

--vmdebug        記錄VM及合約除錯資訊

日誌和除錯選項:

--metrics            啟用metrics收集和報告

--fakepow            禁用proof-of-work驗證

--verbosity value    日誌詳細度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)

--vmodule value      每個模組詳細度:以 =的逗號分隔列表 (比如 eth/*=6,p2p=5)

--backtrace value    請求特定日誌記錄堆疊跟蹤 (比如 “block.go:271”)

--debug                    突出顯示呼叫位置日誌(檔名及行號)

--pprof                    啟用pprof HTTP伺服器

--pprofaddr value          pprof HTTP伺服器監聽介面(預設值:127.0.0.1)

--pprofport value          pprof HTTP伺服器監聽埠(預設值:6060)

--memprofilerate value      按指定頻率開啟memory profiling    (預設:524288)

--blockprofilerate value    按指定頻率開啟block profiling    (預設值:0)

--cpuprofile value          將CPU profile寫入指定檔案

--trace value              將execution trace寫入指定檔案

WHISPER實驗選項:

--shh                        啟用Whisper

--shh.maxmessagesize value  可接受的最大的訊息大小 (預設值: 1048576)

--shh.pow value              可接受的最小的POW (預設值: 0.2)

棄用選項:

--fast    開啟快速同步

--light    啟用輕客戶端模式

其他選項:

–help, -h    顯示幫助

相關推薦

開發--geth的使用入門

一、環境配置和程式安裝1.1 安裝 gethMAC OSX首先確保已安裝 homebrew,沒有安裝過的可以在命令列下執行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins

Nethereum開發快速入門

Nethereum基本上是目前唯一可用的.NET平臺下的web3.js移植包。在這個教程中,我們將首先編寫並部署一個簡單的智慧合約,然後建立一個簡單的.NET應用,並使用Nethereum來訪問以太坊上的智慧合約。Nethereum是通過以太坊節點旳標準RPC介面訪問智慧合約,因此使用N

開發geth的使用入門

geth的全稱是go-ethereum,是一個以太坊客戶端,用go語言編寫,應該是目前最常用的客戶端。當然以太坊客戶端還有用C++,Ruby,Python,Java等其他多種語言編寫的,不同型別的客戶端是為了滿足不同的需求場景。今天我們主要來介紹geth(發音同guess )

是什麽 - 開發入門指南

以太坊 以太坊 入門 很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基於以太坊平臺,以通俗的方式介紹以太坊開發中涉及的各晦澀的概念,輕松帶大家入門。寫在前面閱讀本文前,你應該大概了解區塊鏈是什麽,如果你還不了解,歡迎訂閱專欄:區塊鏈技術指引你從頭開始學區塊鏈技術。以太坊

開發入門

智能合約 合約 以太坊 以太坊開發 ethereum truffle solidity 區塊鏈 區塊鏈開發 blockchain 以太坊開發入門 目標讀者: 專業的程序員;

開發入門,完整入門

pragma solidity ^0.4.11; contract BasicToken { mapping(address => uint256) balances; function transfer(address _to, uint256 _value) returns () {    

區塊鏈技術開發開發入門教程——一個去中心化DApp應用投票系統。

第一節 課程概述本課程面向初學者,內容涵蓋以太坊開發相關的基本概念,並將手把手地教大家如何構建一個 基於以太坊的完整去中心化應用 —— 區塊鏈投票系統。通過本課程的學習,你將掌握:以太坊區塊鏈的基本知識開發和部署以太坊合約所需的軟體環境使用高階語言(solidity)編寫以太

開發學習二:探索Geth Javascript Console

以太坊的JavaScript物件    當啟動一個私有鏈節點後如下:就會進入以太坊私有節點的geth互動式JavaScript執行環境$ geth --datadir data0 --networkid 1108 console    這個環境裡內建了一些用來操作以太坊的Ja

開發實戰:geth客戶端安裝

geth是以太坊的官方客戶端,它是一個命令列工具,提供很多命令和選項,可以執行以太坊節點、建立和管理賬戶、傳送交易、挖礦、部署智慧合約等。 下面介紹geth的三種安裝方法: 直接下載可執行檔案 線上安裝 從原始碼編譯安裝 方法一 直接下載可執行檔案

開發入門,如何搭建一個區塊鏈DApp投票系統

點選關注 非同步圖書,置頂公眾號每天與你分享 IT好書 技術乾貨 職場知識第一節 概述對於初學者,需要了解以太坊開發相關的基本概念,另外就是如何構建一個基於以太坊的完整去中心化應用例如一個區塊鏈投票系統。移除點選此處新增圖片說明文字​通過學習,你將掌握:    以太坊區塊鏈的

區塊鏈開發開發的技術資料資源匯總

以太坊 以太坊開發 ethereum truffle solidity 以太坊入門 區塊鏈入門 區塊鏈 區塊鏈開發 blockchain 一個適合區塊鏈新手的以太坊DApp開發教程: http://xc.hubwiz.com/course/5a952991adb

開發DApp實戰教程——用區塊鏈、星際文件系統(IPFS)、Node.js和MongoDB來構建電商平臺

IPFS 區塊鏈電商 區塊鏈開發 以太坊開發 以太坊dapp 以太坊教程 智能合約 以太坊 星際文件系統 區塊鏈 第一節 簡介 歡迎和我們一起來用以太坊開發構建一個去中心化電商DApp!我們將用區塊鏈、星際文件系統(IPFS)、Node.js和Mong

開發環境搭建

適合 extra limit class ref acc difficult 發現 就是 Geth安裝 全稱 Go Ethereum, 官網地址:https://github.com/ethereum/go-ethereum/wiki/geth 安裝指令: brew tap

EthBox開發套件,一鍵安裝開發環境

百度雲 技術 aid 驗證 cli nac 下載到本地 ejs 11.2 EthBox是匯智網為了方便以太坊開發學習者快速安裝本地開發環境而 制作的開發套件,可以一鍵安裝以下必備開發工具: nodejs:8.11.2 git:2.17.1.2 geth:1.8.10 ga

python開發dapp的實戰教程

智能合約 合約 EOS 區塊鏈 Dapp blockchain 以太坊作為最流行區塊鏈平臺,最大的特點是運行各種智能合約。我們已經出過node.js、java、php的以太坊開發實戰教程,這一次是python。Python官方提供了一系列的Python包用於支持在Pyth

開發實戰:私有鏈搭建操作指南

雖然以太坊是一個公有鏈系統,但是我們可以通過設定一些引數來執行自己的私有鏈節點,在自己的私有鏈上進行開發和測試不需要同步公有鏈資料,也不需要花錢來買以太幣,節省儲存空間和成本,而且很靈活很方便。本文介紹使用geth客戶端搭建私有鏈的操作步驟,同時會解釋在這個過程中用到的各個命令及選項的含

分享實錄|開發需知

1 以太坊開發與傳統應用開發的差異 相比起傳統應用而言,以太坊開發引入了新的基礎設施,由此必不可少的帶來了部署和運維的複雜度,比如作為系統設計者,我們需要做出選擇: 自建節點,還是信任第三方節點? 公有鏈、聯盟鏈、私有鏈? 由於加入了新的設計

這30個開發示例,讓你成為80萬都挖不走的區塊鏈人才!

2018年已過了大半,幣圈跌跌蕩蕩,而鏈圈的人在等待鳳凰涅槃,熊市專心做技術,牛市才能一展身手、衝破雲霄! 本文主要告訴你,如何成為一名優秀的以太坊開發者! 如果你是以太坊開發者中的“老司機”,請直接看最後一部分:30個為你量身定做的挑戰示例! 如果你是以太坊

開發教程(二) 利用truffle發布寵物商店 DAPP 到 測試環境Ropsten

ini 寵物 func on() append localhost -c success compile 1.環境安裝 1) node安裝 設置鏡像地址: curl --silent --location https://rpm.nodesource.com/s

開發生態

區塊鏈中級.以太坊開發 From:JamesZou & 傳智播客研究院 & 傳智播客區塊鏈 以太坊開發生態 課程介紹 1.五個模組 什麼是以太坊:以太坊介紹、常見概念、測試 … 如何與以太坊節點網路:錢包、瀏覽器、web