作者:wer5lcy 2019年5月5日

[TOC]

为什么参与

The existing Visa credit card network processes about 15 million Internet purchases per day worldwide. Bitcoin can already scale much larger than that with existing hardware for a fraction of the cost. It never really hits a scale ceiling. If you’re interested, I can go over the ways it would cope with extreme size.

——Satoshi Reply to Mike Hearn April 12, 2009

比特币不是法币,没有国家暴力机器的支持;它是一种货(商品)币(金钱),比特币的价值来自于它的使用价值,而这种使用价值来源于比特币是一份无可更改、永久可追溯的全球统一账本。如果要实现中本聪愿景,比特币网络的交易承载能力必须以超过摩尔定律的速度发展,在20年内迅速扩容到承载全球交易的水平。

此外,设计好的经济系统规定挖矿奖励的比特币每四年减半,要求币价不变且矿工不减少收入的情况下,网络必须有能力承载足够多的交易,使得减少的区块奖励全部转化为交易手续费。在不到360天后,区块奖励将减少6.25个币,按照1sat/byte的手续费水平,换算恰好为1GB=1Bitcoin,对应625MB的区块容量。若网络承载能力达不到此规模,则会出现以下结果:

  1. 矿工被迫减少收入——矿工是利润非常微薄的行业,平均净利润率仅维持在3%~5%,些许收入降低将导致大量矿工退场,停机而未销毁的SHA256算力,以及网络连通性的降低会降低比特币的安全性。
  2. 矿工不想减少收入——会有以下几种油腻的结果及其组合发生:
  3. “减半行情”,即矿工联手市场操纵者操纵价格使其翻倍。
  4. 手续费大幅提高,如增加至10sat/byte,则区块容量需62.5M。
  5. 确认速度大幅放缓,手续费较低的交易需要等待多个区块后才能被打包。

以上任一结果均导致比特币网络的可用性,即比特币账本的价值,遭到严重遏制。

360天之后,BTC不操纵价格,则手续费需增至625sat/byte,平均一笔1kB体积的交易手续费将超过200元人民币,交易无法为继;如进行市场操纵,7000亿市值且充满深度套牢盘的BTC可不是几个亿就能拉得动,BTC上共计60EHash算力将100%面临经济损失。由于BTC难度调整周期为14天,减半14日内的算力流失将大幅降低出块速度,网络拥堵加剧,导致其很难活过下一轮减半。

BCH-ABC阵营可能三个手段都用,但维持32MB的容量,靠个人用户逐渐填充区块,至多承载BTC+ETH转来的14TPS,约16M,故结果可能是价格翻倍+手续费1sat/byte,每笔交易手续费1毛,仅限补偿BCH现有2EHash算力部分的经济损失。

不要指望nChain操纵价格。SV阵营决定提高区块容量,宣布在7月提高至2GB,2020年2月将上限完全交给矿工。GB级区块,会有企业用户开始试水,乐观估计2GB用满,矿工收入将达到当前的2.14倍。SV链上目前有1EHash,该用量仅可满足来自外部的1.14EHash;因2018分岔前SV阵营共有>3.6EHash,SV矿工同样进入负现金流。

比特币是风险投资!在以上事实和推演的情况下,如果比特币网络承载能力不能在减半来临前达到GB级别,则整个比特币项目会全部失败。要保证所有SHA256d矿工现金流不受损失,需要交易手续费收入达到目前60倍,约合750G;配合币价拉10倍,也需要>70G;拉100倍,还要7G。减半之日一定会有人流血!

作为一个小黄豆规模的个人投资者,由于一手信息的匮乏,我决定切身投入对网络承载能力进行具体的观察,以确保正确判断局势。希望SHA256d矿工、开发者和志同道合的朋友能够一起加入。

什么是比特币扩容测试网络

参考 https://bitcoinscaling.io 或联系 stn@bitcoinsv.io

比特币扩容测试网络 (Bitcoin Scaling Test Network, STN) 是一个专门用于测试更大区块的比特币SV测试网络,是既比特币主网(mainnet)、公共测试网络(testnet)、本地测试网络(regtest)之后的第四个持续性网络。

它已经包括在最新版的Bitcoin SV节点软件中,可以在bitcoin.conf中使用stn=1替换原有公共测试网络的testnet=1或本地测试网络regtest=1进入。

扩容测试网络的实施是为了减少在公共测试网络(testnet)中进行扩容测试对原有公共测试网络用户的冲击,并使得testnet网络成为在比特币SV之上搭建之应用程序的测试网络,同时保证这些应用的测试无需大幅升级硬件。

比特币作为BCH和BSV已经在2018年9月和11月分别进行了两轮主网压力测试,测试结果可以到 https://stresstestbitcoin.cash/ 查阅。在2018年11月,我配置的BitcoinUnlimited个人节点的TPS峰值可达800,略小于交易发送峰值1000TPS,此时i5 6300HQ 4核2.7G达到90%占用,节点软件内存使用约8GB(启用并行签名验证),网络连接共40个,有25个输出和15个输入,消耗上行带宽50Mbit/s、下行带宽30Mbit/s左右。BU特有的GetMiningTemplate输出过程(根据TXID生成MerkleTree、BlockHeader,减少向矿机控制器的数据传输量)需要超过10秒。按此规模,连续64~128MB区块、全部由小交易(不带有op_return)组成时,一般配置的4核、8G内存的云服务器达到承载力峰值。

STN测试网络建立后,已进行多轮更高规模的压力测试,包括:连续64MB、全部小交易超过24h;连续128MB、全部小交易超过24h;连续128M、变规模数据储存交易(带有不同尺寸op_return data),持续进行。

STN测试网络的节点还很少,查阅 https://stn.whatsonchain.com/peers 可知,目前共有约10个网络节点和35个Satoshi Shotgun节点;以我的测试结果,这些节点中我使用addnode添加并可以连上、同步区块链的只有四个,且暂时没有来自中国大陆的IP地址。

在中国加入STN的困难有哪些

综上,比特币的进一步扩容测试网络对参与人的计算机配置、网络连接性能都提出了更高的要求。若按线性比例估算,则当区块尺寸达到512MB且均为小交易时,需要16核心的计算机、32G内存以上,并超过200Mbit/s的网络带宽,当区块尺寸进一步增加至2GB,需要48核心、128G内存和1Gbit/s的带宽。计算机性能要求超越主流家用PC,需要使用多路服务器;网络带宽超越家用宽带上限(除了上海)。

然而,由于中国公有云、骨干网络和出境网络的发展仍处于初级阶段,在中国尝试运营STN节点会遇到一些欧美个体矿工或测试者不会遇到的问题:

  • 公有云租赁成本奇高。以腾讯云、包1年使用为例,32线程、64G内存弹性服务器的费用为61440元,数据盘包年价格5.76元/GB,对应2T磁盘、裁剪区块链,需要11520元。仅1年的硬件成本便足以买下更多的实体硬件,并包含IDC机房托管费用——故比特币网络发展后,矿工一定自建机房、放弃公有云。
  • 公有云上的带宽奇贵。仍以腾讯云为例,由于比特币网络大多数网络数据来源于境外,无法使用CDN加速等廉价流量,使用公共带宽按量计费0.8元/GB,网络节点稍多的话2G区块持续运行一天的网费就超过1000元。

当主网具有如此大规模的时候,手续费带来的经济激励将使运营成本变成九牛一毛;而作为没有法币价格的测试网络,则更需要精简开支,如使用廉价旧硬件组建服务器,并利用家用网络,此时会遇到更多的问题。

  • 带宽上限不足。至2019年1月,中国大陆地区仅有上海市率先完成千兆家用宽带的普及,年费约3000元,其他城市普及产品最大带宽仅100~200Mbit/s,可能会提高孤块率。
  • 上下行带宽不对等。中国家用宽带,存在严重的上下行带宽不对等现状,2019年1月1日起生效的《公众固定宽带接入业务上下行速率配置要求》YD/T 3328-2018规定了上行速率只要达到30MBit/s就一概达标。现实中,上海电信千兆宽带的实际接入速率为1000M下行100M上行,每月超过1T流量后降为300M下行、30M上行;其他城市上行带宽一般不超过30Mbit/s。
  • 骨干网出口带宽不足。上海电信千兆宽带,晚高峰时连接未经链路优化的境外IP地址,下行带宽仅有200kb左右;工作时间勉强可达20Mbps,仅在01:00~07:00左右可以达到接入速率。中国联通和中国移动的家用宽带情况稍微轻一点,但也远远达不到签约接入速率。
  • 丢包与延迟。由于以上原因组合,虽然比特币网络协议不属于国家防火墙的过滤范畴,当出口带宽拥堵时,家用网络的出口丢包率和延迟会显著增加。
  • 动态IP甚至无公网IP。IPv4地址数量受限,导致家用宽带和较低等级的企业专线均不附赠固定IP地址,甚至有些网络处于NAT的内网IP段下。
  • 初始区块链下载超时。比特币节点软件首次启动时会进行区块链的下载,即IBD过程Initial Block Download (参阅CoreCoin Wiki),此过程首先同步区块头,后按每个节点16个块的方式请求区块,此过程对每个节点提出20分钟/块的超时请求。由于它仅向单一节点请求某一批区块,当此节点连接速度不佳,且网络规模过小无其他节点可以用时,节点软件会进入请求-超时-断开-重连-请求同一批区块-超时的死循环。我认为节点软件的IBD过程逻辑有必要进行优化,但这不在本文的主要讨论范围。

作为个人阶段最后的折腾,我找出了一条能够较低成本迅速跟进STN的硬件和网络配置方法,下面是教程。

如何建立你的节点

本方案简单地分为两步。

  1. 在境外设置虚拟私人服务器,作为高速“路由”出口。选择美国/香港/新加坡的CN2 GIA节点均可。
  2. 将节点软件建立在境内的高配置物理服务器上。通过SSH远程转发请求。

1.在境外设置虚拟私人服务器(Virtual Private Server)

这一步的目的是建立一个可以全天满速率连接的境外“路由”,作为BSV节点软件的对外出口。

参考 https://wzfou.com/cn2-gia-vps/ 和 https://www.bwgyhw.cn/bandwagonhost-all-plans/

中国电信有 4 个 IPT 产品,包括CHINANET 163 骨干网、美洲电信 AS36678、电信 CN2 GT和电信 CN2 GIA。后三者的速度和延迟要远好于家用宽带连接境外节点使用的Chinanet163网络。

CN2 英文Chinatelecom Next Carrier Network,中文为中国电信下一代承载网,缩写为CNCN或者CN2。

CN2 GT GT即Global Transit,省级出口为202.97节点,在跨境时才进入CN2骨干网,出国/国际跨境节点为59.43开头。线路总体情况良好,负载较中等,因此可以保证良好的速度和延迟。省级/出国节点为202.97开头,国际骨干节点有59.43开头的CN2节点。在CN2等级低,好于163骨干网。

CN2 GIA GIA即Global Internet Access,等级最高,在速度和延迟上有极好的体验。在部署有CN2节点的省份就近接入该省的省级CN2节点,在暂未部署CN2节点的省份则就近接入部署有CN2节点的省份的CN2节点。

比较便宜的CN2 GIA线路的虚拟私人服务器运营商主要是Bandwagon Host,也有Tripod cloud等等,我们这里就选用BWH设在美国西海岸的机房,套餐年费是120美金,附赠6.25美金的优惠券,名气大、付费可以用支付宝微信,比较方便。每月1TB流量暂时就够了,等到2GB区块的需要更多流量的时候可以线上无缝升级。

套餐名CPU内存SSD流量带宽年费购买链接
CN2 GIA ECOMMERCE2核1 GB20 GB1000 GB2.5 Gbps$119.99立即购买
CN2 GIA ECOMMERCE3核2 GB40 GB2000 GB2.5 Gbps$229.99立即购买

结算的时候输入优惠码 BWH26FXH3HIQ 获得6.25%的折扣。

如果完全不懂英文,注册和结算的过程看这里,https://www.bwgyhw.cn/bandwagonhost-deploy-new/ (这些超链接中都含有推广码,移除推广码并不能获得额外的优惠…)

结算之后,服务会将一系列信息发送到你的邮箱,虚拟主机默认配置为CentOS7操作系统并开机。例如,邮件里写明计算机名special-byte-1.localdomainIP地址173.242.123.123随机生成的Root密钥JNoP1SJLrTLFSSH端口29123。记录下这几个信息,待会用;远程主机不需要做任何额外处理。

2.在中国境内搭建你的服务器

接下来,我们搭建在国内的高配置服务器,用以运行节点软件和外围服务。

我购买了一台2013年出厂的Dell R720XD机架式服务器,规格为2U,有14个3.5寸硬盘槽。整机各个部件均为退役产品,以获得最低的搭建成本。预计本机可以坚持到2G区块、塞满小交易连续运行。具体的配置如下表,在这里买的→ https://pudongfuwuqi.taobao.com

组件规格价格
机箱和主板Dell R720XD1499
CPUIntel E5-2660 v2,两颗,共20核心40线程,2.6G720*2
内存海力士,DDR3 1600 ECC REG,单条16G,共10条150*10
SSDIntel S3500 单块600G,共1块(SSD推荐买新的!)RAID0装系统600
HDDHGST HUS724040ALS640,3.5寸6Gb SAS 7200转,单块4T,共6块,RAID6阵列防止两块同时故障400*6
附件Dell H710P 阵列卡、双80PLUS铂金电源、配齐前面板12个硬盘托架
合计8525

即使算上托管费用,该配置也仅为租腾讯云/阿里云/亚马逊在国内主机的三个月租金。

宿主系统任意,我选用了Windows Server 2016 Datacenter(带桌面体验),管理起来比较方便,虚拟机使用Hyper-V生成,安装Ubuntu 18.04 LTS Server版。

用于运行STN的虚拟机配置中,硬盘不要小于2T,最大占用主机CPU 90%,内存我暂时配置了48GB,用完再说。注意,Hyper-V提供“内存缓冲区”选项,请保留100%以上,以免bitcoind验证大区块时内存占用突然升高、宿主系统内存分配不及时而被结束进程。

3.安装并配置节点软件

具体过程参考 https://bitcoinscaling.io/getting-started

在运行STN的虚拟机中依次执行以下命令

wget http://download.bitcoinsv.io/bitcoinsv/0.1.1/bitcoin-sv-0.1.1-x86_64-linux-gnu.tar.gz
tar -xf bitcoin-sv-0.1.1-x86_64-linux-gnu.tar.gz
cd
mkdir .bitcoin  
touch .bitcoin/bitcoin.conf
echo "stn=1" >> .bitcoin/bitcoin.conf

我们采用SSH方案连接远程主机,因此你还需要在虚拟机上进行以下设置。让SV节点软件使用本地代理。7070端口是是本地未被占用的端口,可以自己选择其他端口,最好大于1000。

echo "proxy=127.0.0.1:7070" >> .bitcoin/bitcoin.conf

如果需要进一步编辑bitcoin.conf配置文件,如调整DataCarrierSize、添加其他节点IP等等,可以使用Ubuntu内置的文本编辑软件nano完成。

nano .bitcoin/bitcoin.conf

4.连接和启动

接下来我们把本地STN虚拟机和远端的VPS连起来。参考https://www.igfw.net/archives/7174。

在本地机器的终端执行命令:

ssh -qTfnN -D 7070 root@173.242.123.123 -p 29123

然后输入密码JNoP1SJLrTLF实现连接,注意Ubuntu系统中输入密码的过程屏幕上没有字符显示***。7070端口为第三步中选用的端口,最后一个端口号29123是远程主机的SSH端口。

这些参数的意思是:

-q :- be very quite, we are acting only as a tunnel.
-T :- Do not allocate a pseudo tty, we are only acting a tunnel.
-f :- move the ssh process to background, as we don’t want to interact with this ssh session directly.
-N :- Do not execute remote command.
-n :- redirect standard input to /dev/null.
-p : Select a specified port.

这样就连接好了,接下来启动Bitcoin SV节点软件,让它开始同步区块链。

./bitcoin-sv-0.1.1/bin/bitcoind -daemon

可以使用bitcoin-cli查看节点的运行情况,其他操作命令,可参考Bitcoin Core软件的Wiki或执行命令bitcoin-cli help获取。

./bitcoin-sv-0.1.1/bin/bitcoin-cli getinfo

同步完成的节点查询结果如下:

1557055389825

退出Bitcoin SV节点软件的命令为:

./bitcoin-sv-0.1.1/bin/bitcoin-cli stop

如果STN所在的系统关机并重新启动,需从本步骤ssh命令开始重新执行。

还有什么可以做

在上述事情做完之后,一个节点已经开始运行了,但是还有这些事情可以做。

  • 加固服务器安全性(设置用户组和访问权限、更改默认密码)
  • 设置服务器宿主系统、虚拟机的远程连接(Remote Desktop/SSH)
  • 设置各项自动启动
  • 设置各项自动报警
  • 使用CPU在STN上挖矿(https://bitcoinscaling.io/stn-mining,获得测试币)
  • 运行外围服务,如ElectrumX、Bitdb、Planaria等(Planaria设置方法参考https://zhuanlan.zhihu.com/p/64697171)

这些步骤非本人专精,本文抛砖引玉,期待他人斧正。

题外话

希望更多参与者快一点加入,哪怕扩容地慢了,比特币项目也即将失败。

区块链技术将彻底沦为骗子赌场的游乐园,然后全球政府介入,连技术带炒作统统消灭。

那样,人类再次错失建立长久稳定的诚实货币的契机。

中本聪已经气的从棺材板里跳出来了!

(wer5lcy,2019年5月5日,上海嘉定)

发表评论

电子邮件地址不会被公开。