文章前言
以太坊作为一个开源的区块链平台,已经在区块链领域中占有重要地位,对于想要了解和使用以太坊的人来说搭建一个以太坊开发环境是必不可少的步骤,本文将介绍如何搭建以太坊开发环境帮助读者更好地理解以太坊的工作原理和开发流程
搭建流程
更新系统
Step 1:更新Ubuntu系统
sudo apt-get updatesudo 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/goexport 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 interfaceUSAGE:geth [global options] command [command options] [arguments...]VERSION:1.11.6-stable-ea9e62caCOMMANDS:account Manage accountsattach Start an interactive JavaScript environment (connect to node)console Start an interactive JavaScript environmentdb Low level database operationsdump Dump a specific block from storagedumpconfig Export configuration values in a TOML formatdumpgenesis Dumps genesis block JSON configuration to stdoutexport Export blockchain into fileexport-preimages Export the preimage database into an RLP streamimport Import a blockchain fileimport-preimages Import the preimage database from an RLP streaminit Bootstrap and initialize a new genesis blockjs (DEPRECATED) Execute the specified JavaScript fileslicense Display license informationmakecache Generate ethash verification cache (for testing)makedag Generate ethash mining DAG (for testing)removedb Remove blockchain and state databasesshow-deprecated-flags Show flags that have been deprecatedsnapshot A set of commands based on the snapshotverkle A set of experimental verkle tree management commandsversion Print version numbersversion-check Checks (online) for known Geth security vulnerabilitieswallet Manage Ethereum presale walletshelp, h Shows a list of commands or help for one commandGLOBAL OPTIONS:--log.rotate (default: false)Enables log file rotationACCOUNT--allow-insecure-unlock (default: false)Allow insecure account unlocking when account-related RPCs are exposed by http--keystore valueDirectory for the keystore (default = inside the datadir)--lightkdf (default: false)Reduce key-derivation RAM & CPU usage at some expense of KDF strength--password valuePassword file to use for non-interactive password input--pcscdpath value (default: \\\"/run/pcscd/pcscd.comm\\\")Path to the smartcard daemon (pcscd) socket file--signer valueExternal signer (url or path to ipc file)--unlock valueComma separated list of accounts to unlock--usb (default: false)Enable monitoring and management of USB hardware walletsALIASED (deprecated)--nousb (default: false)Disables monitoring for and managing USB hardware wallets (deprecated)--whitelist valueComma 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 valuePath 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 (serverenforced). Accepts \\\'*\\\' wildcard.--exec valueExecute JavaScript statement--graphql (default: false)Enable GraphQL on the HTTP-RPC server. Note that GraphQL can only be started ifan HTTP server is started as well.--graphql.corsdomain valueComma 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 (serverenforced). Accepts \\\'*\\\' wildcard.--header value, -H valuePass custom headers to the RPC server when using --remotedb or the geth attachconsole. 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 valueAPI\\\'s offered over the HTTP-RPC interface--http.corsdomain valueComma 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 valueHTTP path path prefix on which JSON-RPC is served. Use \\\'/\\\' to serve on allpaths.--http.vhosts value (default: \\\"localhost\\\")Comma separated list of virtual hostnames from which to accept requests (serverenforced). Accepts \\\'*\\\' wildcard.--ipcdisable (default: false)Disable the IPC-RPC server--ipcpath valueFilename for IPC socket/pipe within the datadir (explicit paths escape it)--jspath value (default: .)JavaScript root path for `loadScript`--preload valueComma 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 valueAPI\\\'s offered over the WS-RPC interface--ws.origins valueOrigins from which to accept websockets requests--ws.port value (default: 8546)WS-RPC server listening port--ws.rpcprefix valueHTTP 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, miningenabled--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 valueDirectory 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 valueTOML configuration file--datadir value (default: /home/blockchain/.ethereum)Data directory for the databases and keystore--datadir.ancient valueRoot directory for ancient data (default = inside chaindata)--datadir.minfreedisk valueMinimum 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 valueComma 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 oneyear, 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 berecommended by gpo--gpo.percentile value (default: 60)Suggested gas price is the given percentile of a set of recent transaction gaspricesLIGHT 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-threadedprocessing 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 valueList of trusted ultra-light serversLOGGING AND DEBUGGING--fakepow (default: false)Disables proof-of-work verification--log.backtrace valueRequest 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 valueWrite logs to a file--log.format valueLog 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 valuePer-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 valueWrite 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 valueURL for remote database--trace valueWrite execution trace to the given file--verbosity value (default: 3)Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detailMETRICS AND STATS--ethstats valueReporting URL of a ethstats service (nodename:secret@host:port)--metrics (default: false)Enable metrics collection and reporting--metrics.addr valueEnable 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 setto start the server.MINER--mine (default: false)Enable mining--miner.etherbase value0x prefixed public address for block mining rewards--miner.extradata valueBlock 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 valueComma 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 miningMISC--help, -h (default: false)show help--synctarget valueFile for containing the hex-encoded block-rlp as sync target(dev feature)--version, -v (default: false)print the versionNETWORKING--bootnodes valueComma separated enode URLs for P2P discovery bootstrap--discovery.dns valueSets DNS discovery entry points (use \\\"\\\" to disable DNS)--discovery.port value (default: 30303)Use a custom UDP port for P2P discovery--identity valueCustom 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 valueRestricts network communication to the given IP networks (CIDR masks)--nodekey valueP2P node key file--nodekeyhex valueP2P 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) mechanismPERFORMANCE TUNING--cache value (default: 1024)Megabytes of memory allocated to internal caching (default = 4096 mainnet fullnode, 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% fullmode, 0% archive mode)--cache.noprefetch (default: false)Disable heuristic state prefetch during block import (less CPU and disk IO, moretime 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% fullmode, 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 valueComma 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 journalVIRTUAL MACHINE--vmdebug (default: false)Record information useful for VM and contract debuggingCOPYRIGHT: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
文末小结
搭建以太坊开发环境需要一些基础知识和技能,但是一旦完成就可以开始构建智能合约和开发去中心化应用程序了,通过本文提供的步骤和资源,希望读者能够成功地搭建自己的以太坊开发环境并在以太坊生态系统中发挥创造力和创新精神
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34153.html