以太坊环境搭建

admin 2023年6月19日00:14:09评论73 views字数 16662阅读55分32秒阅读模式

文章前言

以太坊作为一个开源的区块链平台,已经在区块链领域中占有重要地位,对于想要了解和使用以太坊的人来说搭建一个以太坊开发环境是必不可少的步骤,本文将介绍如何搭建以太坊开发环境帮助读者更好地理解以太坊的工作原理和开发流程

搭建流程

更新系统

Step 1:更新Ubuntu系统

sudo apt-get update sudo apt-get upgrade

以太坊环境搭建

GO语言环境

Step 1:下载Go语言安装包

https://golang.org/dl/

以太坊环境搭建

Step 2:安装go语言环境

sudo tar -C /usr/local -xzf go1.20.4.linux-amd64.tar.gz

以太坊环境搭建

Step 3:然后将Go语言的bin目录添加到系统环境变量中

export PATH=$PATH:/usr/local/go/bin

以太坊环境搭建

此时上面的环境变量只是临时有效,我们可以将上述命令添加到.bashrc文件中使其永久生效

export GOROOT=/usr/local/go  export PATH=$PATH:$GOROOT/bin

以太坊环境搭建

Step 4:创建全局工作目录

mkdir $HOME/go

以太坊环境搭建

Step 5:将Go语言的工作目录添加到系统环境变量中

以太坊环境搭建

Step 6:验证Go语言安装是否成功

go version

以太坊环境搭建

Node.js/Npm
sudo apt install curlcurl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -sudo apt-get install -y nodejscurl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -sudo apt-get update && sudo apt-get install yarn

以太坊环境搭建

以太坊环境搭建

安装solc编译器
sudo snap install solc

以太坊环境搭建

Ethereum安装

Step 1:下载Ethereum的客户端

https://geth.ethereum.org/downloads

以太坊环境搭建

Step 2:解压文件并将geth复制到/usr/bin目录下

以太坊环境搭建

Step 3:执行客户端查看帮助说明

以太坊环境搭建

Step 3:执行客户端查看帮助说明

以太坊环境搭建

详细内容如下:

blockchain@ubuntu:~/geth-linux-amd64-1.11.6-ea9e62ca$ geth helpNAME:   geth - the go-ethereum command line interface
USAGE: geth [global options] command [command options] [arguments...]
VERSION: 1.11.6-stable-ea9e62ca
COMMANDS: account Manage accounts attach Start an interactive JavaScript environment (connect to node) console Start an interactive JavaScript environment db Low level database operations dump Dump a specific block from storage dumpconfig Export configuration values in a TOML format dumpgenesis Dumps genesis block JSON configuration to stdout export Export blockchain into file export-preimages Export the preimage database into an RLP stream import Import a blockchain file import-preimages Import the preimage database from an RLP stream init Bootstrap and initialize a new genesis block js (DEPRECATED) Execute the specified JavaScript files license Display license information makecache Generate ethash verification cache (for testing) makedag Generate ethash mining DAG (for testing) removedb Remove blockchain and state databases show-deprecated-flags Show flags that have been deprecated snapshot A set of commands based on the snapshot verkle A set of experimental verkle tree management commands version Print version numbers version-check Checks (online) for known Geth security vulnerabilities wallet Manage Ethereum presale wallets help, h Shows a list of commands or help for one command
GLOBAL OPTIONS: --log.rotate (default: false) Enables log file rotation ACCOUNT --allow-insecure-unlock (default: false) Allow insecure account unlocking when account-related RPCs are exposed by http --keystore value Directory for the keystore (default = inside the datadir) --lightkdf (default: false) Reduce key-derivation RAM & CPU usage at some expense of KDF strength --password value Password file to use for non-interactive password input --pcscdpath value (default: "/run/pcscd/pcscd.comm") Path to the smartcard daemon (pcscd) socket file --signer value External signer (url or path to ipc file) --unlock value Comma separated list of accounts to unlock --usb (default: false) Enable monitoring and management of USB hardware wallets ALIASED (deprecated) --nousb (default: false) Disables monitoring for and managing USB hardware wallets (deprecated) --whitelist value Comma separated block number-to-hash mappings to enforce (<number>=<hash>) (deprecated in favor of --eth.requiredblocks) API AND CONSOLE --authrpc.addr value (default: "localhost") Listening address for authenticated APIs --authrpc.jwtsecret value Path to a JWT secret to use for authenticated RPC endpoints --authrpc.port value (default: 8551) Listening port for authenticated APIs --authrpc.vhosts value (default: "localhost") Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. --exec value Execute JavaScript statement --graphql (default: false) Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started if an HTTP server is started as well. --graphql.corsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced) --graphql.vhosts value (default: "localhost") Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. --header value, -H value Pass custom headers to the RPC server when using --remotedb or the geth attach console. This flag can be given multiple times. --http (default: false) Enable the HTTP-RPC server --http.addr value (default: "localhost") HTTP-RPC server listening interface --http.api value API's offered over the HTTP-RPC interface --http.corsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced) --http.port value (default: 8545) HTTP-RPC server listening port --http.rpcprefix value HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths. --http.vhosts value (default: "localhost") Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. --ipcdisable (default: false) Disable the IPC-RPC server --ipcpath value Filename for IPC socket/pipe within the datadir (explicit paths escape it) --jspath value (default: .) JavaScript root path for `loadScript` --preload value Comma separated list of JavaScript files to preload into the console --rpc.allow-unprotected-txs (default: false) Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC --rpc.enabledeprecatedpersonal (default: false) Enables the (deprecated) personal namespace --rpc.evmtimeout value (default: 5s) Sets a timeout used for eth_call (0=infinite) --rpc.gascap value (default: 50000000) Sets a cap on gas that can be used in eth_call/estimateGas (0=infinite) --rpc.txfeecap value (default: 1) Sets a cap on transaction fee (in ether) that can be sent via the RPC APIs (0 = no cap) --ws (default: false) Enable the WS-RPC server --ws.addr value (default: "localhost") WS-RPC server listening interface --ws.api value API's offered over the WS-RPC interface --ws.origins value Origins from which to accept websockets requests --ws.port value (default: 8546) WS-RPC server listening port --ws.rpcprefix value HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths. DEVELOPER CHAIN --dev (default: false) Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled --dev.gaslimit value (default: 11500000) Initial block gas limit --dev.period value (default: 0) Block period to use in developer mode (0 = mine only if transaction pending) ETHASH --ethash.cachedir value Directory to store the ethash verification caches (default = inside the datadir) --ethash.cachesinmem value (default: 2) Number of recent ethash caches to keep in memory (16MB each) --ethash.cacheslockmmap (default: false) Lock memory maps of recent ethash caches --ethash.cachesondisk value (default: 3) Number of recent ethash caches to keep on disk (16MB each) --ethash.dagdir value (default: /home/blockchain/.ethash) Directory to store the ethash mining DAGs --ethash.dagsinmem value (default: 1) Number of recent ethash mining DAGs to keep in memory (1+GB each) --ethash.dagslockmmap (default: false) Lock memory maps for recent ethash mining DAGs --ethash.dagsondisk value (default: 2) Number of recent ethash mining DAGs to keep on disk (1+GB each) ETHEREUM --bloomfilter.size value (default: 2048) Megabytes of memory allocated to bloom-filter for pruning --config value TOML configuration file --datadir value (default: /home/blockchain/.ethereum) Data directory for the databases and keystore --datadir.ancient value Root directory for ancient data (default = inside chaindata) --datadir.minfreedisk value Minimum free disk space in MB, once reached triggers auto shut down (default = --cache.gc converted to MB, 0 = disabled) --db.engine value (default: "leveldb") Backing database implementation to use ('leveldb' or 'pebble') --eth.requiredblocks value Comma separated block number-to-hash mappings to require for peering (<number>=<hash>) --exitwhensynced (default: false) Exits after block synchronisation completes --gcmode value (default: "full") Blockchain garbage collection mode ("full", "archive") --goerli (default: false) Görli network: pre-configured proof-of-authority test network --mainnet (default: false) Ethereum mainnet --networkid value (default: 1) Explicitly set network id (integer)(For testnets: use --rinkeby, --goerli, --sepolia instead) --override.shanghai value (default: 0) Manually specify the Shanghai fork timestamp, overriding the bundled setting --rinkeby (default: false) Rinkeby network: pre-configured proof-of-authority test network --sepolia (default: false) Sepolia network: pre-configured proof-of-work test network --snapshot (default: true) Enables snapshot-database mode (default = enable) --syncmode value (default: snap) Blockchain sync mode ("snap", "full" or "light") --txlookuplimit value (default: 2350000) Number of recent blocks to maintain transactions index for (default = about one year, 0 = entire chain) GAS PRICE ORACLE --gpo.blocks value (default: 20) Number of recent blocks to check for gas prices --gpo.ignoreprice value (default: 2) Gas price below which gpo will ignore transactions --gpo.maxprice value (default: 500000000000) Maximum transaction priority fee (or gasprice before London fork) to be recommended by gpo --gpo.percentile value (default: 60) Suggested gas price is the given percentile of a set of recent transaction gas prices LIGHT CLIENT --light.egress value (default: 0) Outgoing bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited) --light.ingress value (default: 0) Incoming bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited) --light.maxpeers value (default: 100) Maximum number of light clients to serve, or light servers to attach to --light.nopruning (default: false) Disable ancient light chain data pruning --light.nosyncserve (default: false) Enables serving light clients before syncing --light.serve value (default: 0) Maximum percentage of time allowed for serving LES requests (multi-threaded processing allows values over 100) --ulc.fraction value (default: 75) Minimum % of trusted ultra-light servers required to announce a new head --ulc.onlyannounce (default: false) Ultra light server sends announcements only --ulc.servers value List of trusted ultra-light servers LOGGING AND DEBUGGING --fakepow (default: false) Disables proof-of-work verification --log.backtrace value Request a stack trace at a specific logging statement (e.g. "block.go:271") --log.compress (default: false) Compress the log files --log.debug (default: false) Prepends log messages with call-site location (file and line number) --log.file value Write logs to a file --log.format value Log format to use (json|logfmt|terminal) --log.maxage value (default: 30) Maximum number of days to retain a log file --log.maxbackups value (default: 10) Maximum number of log files to retain --log.maxsize value (default: 100) Maximum size in MBs of a single log file --log.vmodule value Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4) --nocompaction (default: false) Disables db compaction after import --pprof (default: false) Enable the pprof HTTP server --pprof.addr value (default: "127.0.0.1") pprof HTTP server listening interface --pprof.blockprofilerate value (default: 0) Turn on block profiling with the given rate --pprof.cpuprofile value Write CPU profile to the given file --pprof.memprofilerate value (default: 524288) Turn on memory profiling with the given rate --pprof.port value (default: 6060) pprof HTTP server listening port --remotedb value URL for remote database --trace value Write execution trace to the given file --verbosity value (default: 3) Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail METRICS AND STATS --ethstats value Reporting URL of a ethstats service (nodename:secret@host:port) --metrics (default: false) Enable metrics collection and reporting --metrics.addr value Enable stand-alone metrics HTTP server listening interface. --metrics.expensive (default: false) Enable expensive metrics collection and reporting --metrics.influxdb (default: false) Enable metrics export/push to an external InfluxDB database --metrics.influxdb.bucket value (default: "geth") InfluxDB bucket name to push reported metrics to (v2 only) --metrics.influxdb.database value (default: "geth") InfluxDB database name to push reported metrics to --metrics.influxdb.endpoint value (default: "http://localhost:8086") InfluxDB API endpoint to report metrics to --metrics.influxdb.organization value (default: "geth") InfluxDB organization name (v2 only) --metrics.influxdb.password value (default: "test") Password to authorize access to the database --metrics.influxdb.tags value (default: "host=localhost") Comma-separated InfluxDB tags (key/values) attached to all measurements --metrics.influxdb.token value (default: "test") Token to authorize access to the database (v2 only) --metrics.influxdb.username value (default: "test") Username to authorize access to the database --metrics.influxdbv2 (default: false) Enable metrics export/push to an external InfluxDB v2 database --metrics.port value (default: 6060) Metrics HTTP server listening port. Please note that --metrics.addr must be set to start the server. MINER --mine (default: false) Enable mining --miner.etherbase value 0x prefixed public address for block mining rewards --miner.extradata value Block extra data set by the miner (default = client version) --miner.gaslimit value (default: 30000000) Target gas ceiling for mined blocks --miner.gasprice value (default: 0) Minimum gas price for mining a transaction --miner.newpayload-timeout value (default: 2s) Specify the maximum time allowance for creating a new payload --miner.notify value Comma separated HTTP URL list to notify of new work packages --miner.notify.full (default: false) Notify with pending block headers instead of work packages --miner.noverify (default: false) Disable remote sealing verification --miner.recommit value (default: 2s) Time interval to recreate the block being mined --miner.threads value (default: 0) Number of CPU threads to use for mining MISC --help, -h (default: false) show help --synctarget value File for containing the hex-encoded block-rlp as sync target(dev feature) --version, -v (default: false) print the version NETWORKING --bootnodes value Comma separated enode URLs for P2P discovery bootstrap --discovery.dns value Sets DNS discovery entry points (use "" to disable DNS) --discovery.port value (default: 30303) Use a custom UDP port for P2P discovery --identity value Custom node name --maxpeers value (default: 50) Maximum number of network peers (network disabled if set to 0) --maxpendpeers value (default: 0) Maximum number of pending connection attempts (defaults used if set to 0) --nat value (default: "any") NAT port mapping mechanism (any|none|upnp|pmp|pmp:<IP>|extip:<IP>) --netrestrict value Restricts network communication to the given IP networks (CIDR masks) --nodekey value P2P node key file --nodekeyhex value P2P node key as hex (for testing) --nodiscover (default: false) Disables the peer discovery mechanism (manual peer addition) --port value (default: 30303) Network listening port --v5disc (default: false) Enables the experimental RLPx V5 (Topic Discovery) mechanism PERFORMANCE TUNING --cache value (default: 1024) Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode) --cache.blocklogs value (default: 32) Size (in number of blocks) of the log cache for filtering --cache.database value (default: 50) Percentage of cache memory allowance to use for database io --cache.gc value (default: 25) Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode) --cache.noprefetch (default: false) Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data) --cache.preimages (default: false) Enable recording the SHA3/keccak preimages of trie keys --cache.snapshot value (default: 10) Percentage of cache memory allowance to use for snapshot caching (default = 10% full mode, 20% archive mode) --cache.trie value (default: 15) Percentage of cache memory allowance to use for trie caching (default = 15% full mode, 30% archive mode) --cache.trie.journal value (default: "triecache") Disk journal directory for trie cache to survive node restarts --cache.trie.rejournal value (default: 1h0m0s) Time interval to regenerate the trie cache journal --fdlimit value (default: 0) Raise the open file descriptor resource limit (default = system fd limit) TRANSACTION POOL --txpool.accountqueue value (default: 64) Maximum number of non-executable transaction slots permitted per account --txpool.accountslots value (default: 16) Minimum number of executable transaction slots guaranteed per account --txpool.globalqueue value (default: 1024) Maximum number of non-executable transaction slots for all accounts --txpool.globalslots value (default: 5120) Maximum number of executable transaction slots for all accounts --txpool.journal value (default: "transactions.rlp") Disk journal for local transaction to survive node restarts --txpool.lifetime value (default: 3h0m0s) Maximum amount of time non-executable transaction are queued --txpool.locals value Comma separated accounts to treat as locals (no flush, priority inclusion) --txpool.nolocals (default: false) Disables price exemptions for locally submitted transactions --txpool.pricebump value (default: 10) Price bump percentage to replace an already existing transaction --txpool.pricelimit value (default: 1) Minimum gas price limit to enforce for acceptance into the pool --txpool.rejournal value (default: 1h0m0s) Time interval to regenerate the local transaction journal VIRTUAL MACHINE --vmdebug (default: false) Record information useful for VM and contract debugging
COPYRIGHT: Copyright 2013-2023 The go-ethereum Authors

这条命令的功能包括:

  • 以快速同步的方式启动Geth,通过与以太坊主链进行数据交换,既避免了大量下载历史数据也避免了由此带来的CPU过载

  • 启动了Geth内嵌的交互平台JavaScript控制台,由此可以调用所有官方的Web3函数和Geth自身的应用程序接口

以太坊测试链完全节点方式

这种方式主要是面向开发人员的,在创建真实的合约之前,人们会倾向于在开发、编程、测试过程中不产生真实的资金消耗,因为这样会大幅增加开发成本,但如果在编程和开发期间就采用上述第一种方式直接在以太坊主网络上进行工作,那么由于以太坊的Gas机制将会产生大量的Gas消耗,所以开发人员普遍倾向于在测试网络上开展工作,而在测试网络上合约只使用虚拟的以太币并不产生实际的资金消耗,只有在通过测试网络的验证、完全开发好后,合约才能被部署到以太坊主网络上,这就是基于以太坊测试网络的完全节点方式存在的意义,具体的命令如下

geth --networkid 3 console

以太坊环境搭建

备注:以太坊的networkid参数是一个整数,用于标识特定的以太坊网络,这个参数通常在启动以太坊客户端时指定以确保客户端连接到正确的网络,以下是几个常见的networkid参数值

  • 1:主网(Mainnet) 

  • 2:Morden测试网(Morden Testnet) 

  • 3:Ropsten测试网(Ropsten Testnet) 

  • 4:Rinkeby测试网(Rinkeby Testnet) 

  • 42:Kovan测试网(Kovan Testnet)

Rinkeby测试网络全节点方式

以太坊社区的一些成员开发了Rinkeby测试网络,这是基于"授权证明(Proof-of-Authority)"的,这个网络更轻巧、更安全,但是只支持Geth,具体的进入命令如下:

geth --rinkeby console

以太坊环境搭建

文末小结

搭建以太坊开发环境需要一些基础知识和技能,但是一旦完成就可以开始构建智能合约和开发去中心化应用程序了,通过本文提供的步骤和资源,希望读者能够成功地搭建自己的以太坊开发环境并在以太坊生态系统中发挥创造力和创新精神

原文始发于微信公众号(七芒星实验室):以太坊环境搭建

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月19日00:14:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   以太坊环境搭建http://cn-sec.com/archives/1814763.html

发表评论

匿名网友 填写信息