本文详细介绍了如何运行BNB Smart Chain(BSC)节点,包括节点的类型、硬件要求、配置步骤以及如何启动和同步节点。
BNB Smart Chain(简称 BSC)是一条区块链,旨在为以太坊区块链提供替代方案和扩展。它通过在构建平台期间进行的几项巧妙的实现达成了这一目标。本指南将引导你通过如何运行自己的 BSC 节点的过程。
先决条件:
摘自 BNB Smart Chain 文档 的节点需求
<1ms
。(如果选择与快照/快速同步启动,则需要 NVMe SSD)好问题!BSC 是一个独立的区块链,旨在借用以太坊生态系统中的一些成熟工具,例如 以太坊虚拟机(EVM)。它从以太坊中提取了这个单一的区块,并在其上进行了构建,心中有几个目标。
它希望变得更加环保;并通过将共识协议转变为混合型的 权威证明(Proof-of-Authority) 和 委托权益证明(Delegated Proof of Stake) 来实现这一目标。他们将这一新协议命名为 “权威抵押证明(Proof of Staked Authority)”。BSC 的设计师们还希望他们的新区块链的性能优于以太坊。
该项目的整体目标是减少区块时间,缩短交易确认时间,使用基于抵押的治理网络,并实现与以太坊的跨兼容性。BSC 于 2019 年 4 月推出了其主网。
如果你想获得更多关于影响系统设计和决策或底层算法的详细信息,你可以查看他们的 白皮书。
也许在看到 BNB Smart Chain 的目标后,你想参与到网络中。要完成这一高尚的行为,你需要运行一个 BSC 完全节点。完全节点有两种不同的类型:见证节点和验证节点。
见证节点 观察 但不 参与 共识过程。它们用于复制数据,并作为网络中的额外通讯者,以提供当前链的状态。
验证节点 则不同,它们除了执行见证节点的所有操作外,还负责验证交易。除了交易验证外,它们还工作以生成新区块。你可以将验证节点想象成以太坊/比特币“矿工”的对应体。在下一部分中,我将引导你如何设置和运行一个见证节点。
运行验证节点的过程与运行见证节点相似。在本指南中,我们将运行一个见证节点,因为它更易于实现。这是因为验证节点的硬件要求高于其见证节点的同类。你可以在此处找到两者的硬件要求 这里。
以下所有命令应在你的 VPS 上执行,而不是在本地计算机上。
你需要做的第一件事是安装最新版本的 Go。
以下是在 Linux 64 位系统上安装 Golang 的命令:
wget https://golang.org/dl/go1.16.5.darwin-amd64.pkg
## 设置你的 GOPATH
export PATH=$PATH:/usr/local/go/bin
## 通过运行来确认它是否有效
go version
安装 Go 后,你将需要设置项目目录。运行以下命令来完成此操作:
git clone https://github.com/binance-chain/bsc
cd bsc
make geth
接下来,你需要下载最新链数据的快照并将其放置在你的主文件夹中。你可以在 这里 找到数据。下载后,运行以下命令,替换 “NAME_OF_YOUR_HOME” 为你的主目录。
unzip geth.zip -d /NAME_OF_YOUR_HOME/node &
快照将大大加快你的节点同步;BSC 节点与其他区块链节点相比庞大得多。如果你没有执行此步骤,同步一个节点到最新状态可能需要数周。
在项目目录设置完成并下载好快照后,你现在将下载配置文件并进行设置。
以下命令将根据你是想在主网还是测试网上运行节点,下载相关文件。
## 主网
wget https://github.com/binance-chain/bsc/releases/download/v1.1.0-beta/mainnet.zip
unzip mainnet.zip
## 测试网
wget https://github.com/binance-chain/bsc/releases/download/v1.1.0-beta/testnet.zip
unzip testnet.zip
这将提取一个 config.toml 和一个 genesis.json 文件到你的项目目录中。
完成所有初始配置后,是时候运行节点了!
下一步是通过以下命令将你的创世状态写入你的 VPS。
geth --datadir node init genesis.json
运行上面的命令后,你应该会看到类似以下内容的输出:
INFO [07-02|18:28:08.337] 最大对等节点数 ETH=50 LES=0 总计=50
INFO [07-02|18:28:08.337] 找不到智能卡套接字,已禁用 err="stat /run/pcscd/pcscd.comm: no such file or directory"
INFO [07-02|18:28:08.337] 设置全球限额 cap=50,000,000
INFO [07-02|18:28:08.337] 分配缓存和文件Handle database=/root/bsc/node/geth/chaindata cache=16.00MiB handles=16
INFO [07-02|18:28:08.353] 从内存数据库持久化的默克尔树 nodes=15 size=2.32KiB time="70.575µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [07-02|18:28:08.353] 成功写入了创世状态 database=chaindata ha=0d2184..d57b5b
INFO [07-02|18:28:08.354] 分配缓存和文件Handle database=/root/bsc/node/geth/lightchaindata cache=16.00MiB handles=16
INFO [07-02|18:28:08.366] 从内存数据库持久化的默克尔树 nodes=15 size=2.32KiB time="29.71µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [07-02|18:28:08.366] 成功写入了创世状态 database=lightchaindata ha=0d2184..d57b5b
运行上述命令后,你需要打开你的 config.toml 文件,并将其替换为以下内容:
[Eth]
NetworkId = 56
NoPruning = false
NoPrefetch = false
LightPeers = 100
UltraLightFraction = 75
TrieTimeout = 100000000000
EnablePreimageRecording = false
EWASMInterpreter = ""
EVMInterpreter = ""
[Eth.Miner]
GasFloor = 30000000
GasCeil = 40000000
GasPrice = 1000000000
Recommit = 10000000000
Noverify = false
[Eth.TxPool]
Locals = []
NoLocals = true
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1000000000
PriceBump = 10
AccountSlots = 512
GlobalSlots = 10000
AccountQueue = 256
GlobalQueue = 5000
Lifetime = 10800000000000
[Node]
IPCPath = "geth.ipc"
HTTPHost = "localhost"
NoUSB = true
InsecureUnlockAllowed = false
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["eth", "net", "web3", "txpool", "parlia"]
WSPort = 8546
WSModules = ["net", "web3", "eth"]
[Node.P2P]
MaxPeers = 30
NoDiscovery = false
BootstrapNodes = ["enode://1cc4534b14cfe351ab740a1418ab944a234ca2f702915eadb7e558a02010cb7c5a8c295a3b56bcefa7701c07752acd5539cb13df2aab8ae2d98934d712611443@52.71.43.172:30311","enode://28b1d16562dac280dacaaf45d54516b85bc6c994252a9825c5cc4e080d3e53446d05f63ba495ea7d44d6c316b54cd92b245c5c328c37da24605c4a93a0d099c4@34.246.65.14:30311","enode://5a7b996048d1b0a07683a949662c87c09b55247ce774aeee10bb886892e586e3c604564393292e38ef43c023ee9981e1f8b335766ec4f0f256e57f8640b079d5@35.73.137.11:30311"]
StaticNodes = ["enode://f3cfd69f2808ef64838abd8786342c0b22fdd28268703c8d6812e26e109f9a7cb2b37bd49724ebb46c233289f22da82991c87345eb9a2dadeddb8f37eeb259ac@18.180.28.21:30311","enode://ae74385270d4afeb953561603fcedc4a0e755a241ffdea31c3f751dc8be5bf29c03bf46e3051d1c8d997c45479a92632020c9a84b96dcb63b2259ec09b4fde38@54.178.30.104:30311","enode://d1cabe083d5fc1da9b510889188f06dab891935294e4569df759fc2c4d684b3b4982051b84a9a078512202ad947f9240adc5b6abea5320fb9a736d2f6751c52e@54.238.28.14:30311","enode://f420209bac5324326c116d38d83edfa2256c4101a27cd3e7f9b8287dc8526900f4137e915df6806986b28bc79b1e66679b544a1c515a95ede86f4d809bd65dab@54.178.62.117:30311","enode://c0e8d1abd27c3c13ca879e16f34c12ffee936a7e5d7b7fb6f1af5cc75c6fad704e5667c7bbf7826fcb200d22b9bf86395271b0f76c21e63ad9a388ed548d4c90@54.65.247.12:30311","enode://f1b49b1cf536e36f9a56730f7a0ece899e5efb344eec2fdca3a335465bc4f619b98121f4a5032a1218fa8b69a5488d1ec48afe2abda073280beec296b104db31@13.114.199.41:30311","enode://4924583cfb262b6e333969c86eab8da009b3f7d165cc9ad326914f576c575741e71dc6e64a830e833c25e8c45b906364e58e70cdf043651fd583082ea7db5e3b@18.180.17.171:30311","enode://4d041250eb4f05ab55af184a01aed1a71d241a94a03a5b86f4e32659e1ab1e144be919890682d4afb5e7afd837146ce584d61a38837553d95a7de1f28ea4513a@54.178.99.222:30311","enode://b5772a14fdaeebf4c1924e73c923bdf11c35240a6da7b9e5ec0e6cbb95e78327690b90e8ab0ea5270debc8834454b98eca34cc2a19817f5972498648a6959a3a@54.170.158.102:30311","enode://f329176b187cec87b327f82e78b6ece3102a0f7c89b92a5312e1674062c6e89f785f55fb1b167e369d71c66b0548994c6035c6d85849eccb434d4d9e0c489cdd@34.253.94.130:30311","enode://cbfd1219940d4e312ad94108e7fa3bc34c4c22081d6f334a2e7b36bb28928b56879924cf0353ad85fa5b2f3d5033bbe8ad5371feae9c2088214184be301ed658@54.75.11.3:30311","enode://c64b0a0c619c03c220ea0d7cac754931f967665f9e148b92d2e46761ad9180f5eb5aaef48dfc230d8db8f8c16d2265a3d5407b06bedcd5f0f5a22c2f51c2e69f@54.216.208.163:30311","enode://352a361a9240d4d23bb6fab19cc6dc5a5fc6921abf19de65afe13f1802780aecd67c8c09d8c89043ff86947f171d98ab06906ef616d58e718067e02abea0dda9@79.125.105.65:30311","enode://bb683ef5d03db7d945d6f84b88e5b98920b70aecc22abed8c00d6db621f784e4280e5813d12694c7a091543064456ad9789980766f3f1feb38906cf7255c33d6@54.195.127.237:30311","enode://11dc6fea50630b68a9289055d6b0fb0e22fb5048a3f4e4efd741a7ab09dd79e78d383efc052089e516f0a0f3eacdd5d3ffbe5279b36ecc42ad7cd1f2767fdbdb@46.137.182.25:30311","enode://21530e423b42aed17d7eef67882ebb23357db4f8b10c94d4c71191f52955d97dc13eec03cfeff0fe3a1c89c955e81a6970c09689d21ecbec2142b26b7e759c45@54.216.119.18:30311","enode://d61a31410c365e7fcd50e24d56a77d2d9741d4a57b295cc5070189ad90d0ec749d113b4b0432c6d795eb36597efce88d12ca45e645ec51b3a2144e1c1c41b66a@34.204.129.242:30311","enode://bb91215b1d77c892897048dd58f709f02aacb5355aa8f50f00b67c879c3dffd7eef5b5a152ac46cdfb255295bec4d06701a8032456703c6b604a4686d388ea8f@75.101.197.198:30311","enode://786acbdf5a3cf91b99047a0fd8305e11e54d96ea3a72b1527050d3d6f8c9fc0278ff9ef56f3e56b3b70a283d97c309065506ea2fc3eb9b62477fd014a3ec1a96@107.23.90.162:30311","enode://4653bc7c235c3480968e5e81d91123bc67626f35c207ae4acab89347db675a627784c5982431300c02f547a7d33558718f7795e848d547a327abb111eac73636@54.144.170.236:30311","enode://c6ffd994c4ef130f90f8ee2fc08c1b0f02a6e9b12152092bf5a03dd7af9fd33597d4b2e2000a271cc0648d5e55242aeadd6d5061bb2e596372655ba0722cc704@54.147.151.108:30311","enode://99b07e9dc5f204263b87243146743399b2bd60c98f68d1239a3461d09087e6c417e40f1106fa606ccf54159feabdddb4e7f367559b349a6511e66e525de4906e@54.81.225.170:30311","enode://1479af5ea7bda822e8747d0b967309bced22cad5083b93bc6f4e1d7da7be067cd8495dc4c5a71579f2da8d9068f0c43ad6933d2b335a545b4ae49a846122b261@52.7.247.132:30311","enode://43562d35f274d9e93f5ccac484c7cb185eabc746dbc9f3a56c36dc5a9ef05a3282695de7694a71c0bf4600651f49395b2ee7a6aaef857db2ac896e0fcbe6b518@35.73.15.198:30311","enode://08867e57849456fc9b0b00771f53e87ca6f2dd618c23b34a35d0c851cd484a4b7137905c5b357795025b368e4f8fe4c841b752b0c28cc2dbbf41a03d048e0e24@35.74.39.234:30311"]
ListenAddr = ":30311"
EnableMsgEvents = false
[Node.HTTPTimeouts]
ReadTimeout = 30000000000
WriteTimeout = 30000000000
IdleTimeout = 120000000000
需要注意的一件事是,如果你已知有几个其他可靠的节点,你可以将它们放在 StaticNodes 数组下。该数组中的任何节点将在节点启动时自动连接。
然后,要启动你的见证节点,你将运行以下命令。
## 启动一个完全节点
geth --config ./config.toml --datadir ./node --cache 18000 --rpc.allow-unprotected-txs --txlookuplimit 0
如果你满足硬件要求,运行以下命令将启动一个验证节点,而不是见证节点:
## 生成共识密钥并输入密码
geth account new --datadir ./node echo {your-password} > password.txt
geth --config ./config.toml --datadir ./node --syncmode snap -unlock {your-validator-address} --password password.txt --mine --allow-insecure-unlock --cache 18000
运行这些后,你应该在终端的日志中看到你开始寻找对等节点,并将开始同步它们的数据。你需要一些耐心,因为同步一个节点到最新状态可能需要数小时。
恭喜你!如果按照所有步骤进行操作,并且你能够连接到其他对等节点以同步你的节点,则你将成功运行自己的 BSC 完全节点。根据你当地的地区,你可能会发现找到对等节点以共享数据以将链同步到最新状态简单或困难。这个过程的关键是耐心。
如果让程序顺其自然,你最终应该会获得成功。你现在是自己区块链命运的掌控者。你可以向区块链发送待确认的交易,而不依赖他人,因为你可以将所有流量路由到你个人运行的节点上!
订阅我们的 新闻通讯 以获取更多有关以太坊的文章和指南。如果你有任何反馈,请随时通过 Twitter 联系我们。你永远可以在我们的 Discord 社区服务器上与我们聊天,那里有一些你见过的最酷的开发者 :)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!