敏捷测试转型 聊聊区块链和比特币 下

鼎叔 · 2025年11月18日 · 103 次阅读

这是鼎叔的第一百二十九篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。
欢迎关注公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。
继承上篇聊聊区块链和比特币 上 ,咱们继续聊聊比特币挖矿芯片的演进、交易,以及更多思考。
矿机的演进(普通计算机-GPU-ASIC-矿池)

挖矿最开始用普通计算机,但是这种方式并不合算,因为普通计算机在挖矿过程中很多计算资源是闲置的,在激烈竞争中很快就无利可图了。
于是矿工就转向用 GPU 挖矿,GPU 适合并行运算,但还是不太划算,因为芯片功能还是很通用的。GPU 擅长浮点运算,这在深度学习中很适合,但在挖矿中用不上。

后来又出现了 ASIC 专用芯片,ASIC 是特定应用定制集成电路,针对挖矿提供性价比最高的定制方案,但每个芯片只针对特定加密货币,做不了其他任务,而且整个设计和生产周期长达一年,如果遇到加密货币价格暴跌,可能面临血本无归的结果。即使在货币暴涨的时期,专用芯片的挖矿竞争也是越来越激烈。

一般来说,ASIC 芯片上市的前两个月就能得到整个生命周期的大部分利润。因为 ASIC 效率高,所以矿工要提前预订,如果不能及时拿货,对于挖矿利润是很大的打击。

如果遇到不良的矿机厂商,厂商可能自己先拿 ASIC 矿机挖一段时间,等暴利期过了再交货。

我们从算力变化上可以看到,可能矿机厂商赚取了挖矿利润的大头。

再后来的趋势是形成大型矿池。因为单个矿工挖到新区块的概率越来越低,就像买彩票一样。但如果很多矿工把挖矿设备组合成矿池,就能共担风险。运作原理是矿池的矿主(pool manager)链接到很多矿工(minor),形成分布式结构。

矿主来做全节点,矿工只负责用 ASIC 矿机计算哈希。依照事先的协议,矿主分配计算任务,挖到新区块后分配出块奖励的收益,把很难的任务转化为大量没那么难的任务,解决收入不稳定的问题。

利益具体该怎么分配呢?
显然并不是大锅饭,仍然是靠工作量证明,只是这个工作量的难度远小于挖到新区块(算出前面 N 个 0 的哈希值)的难度。比如计算出前面有(N-10)个 0 就可以接受为 “准有效区块股份”,最后按接受的股份占比做利益分配。

矿工挖到合法区块后,能否不提交给矿主?
不可能,因为是矿主分配的计算任务,收款地址是矿主填的。
不过可能存在故意捣乱的情况(商业上的恶性竞争),矿工挖到合法区块后故意丢掉,但这样损人不利己。

大型矿池发布的区块,占的位置更好,有可能更早被其他节点监测到。
有些观点认为,这种矿机演进集中算力的趋势违背了中心化理念,于是提出了抵制 ASIC 运算优势的挖矿难题,被称为 alternative mining puzzle。我们在后面的文章还会提到。

2014 年一度出现过算力高达 51% 的大型矿池,引发业界对比特币去中心化的信任危机,后来这个矿池主动限制算力扩张,分流了矿工,解除了危机。

目前大型矿池的算力集中度依然很高。而且矿主还可以采用分散手段隐瞒自己的规模。矿工转换矿池是很灵活的,只要管理费便宜就有转换动力。

因此,矿主理论上还是可以发起 51% 算力攻击,利用矿工这群不明真相的群众来分布式完成攻击任务。邪恶矿主借助算力可以封锁某些账户的交易,获得相关区块的记账权。但是它没办法偷走账户里的钱,因为没有密钥。

交易脚本
比特币交易验证采用的是堆栈式脚本语言,所有操作通过压栈、弹栈完成,无需显式指定运算顺序。这个脚本语言的操作种类简单,也不支持循环和复杂分支操作,从根本上规避无限循环攻击。因此也是非图灵完备的语言。
脚本输出的值可以是比特币,也可以是聪(比特币最小的价值单位)。

交易常见的脚本模式有 P2PK(Pay to Public Key, 目前已淘汰),P2PKH(Pay to Public Key Hash,不给地址给哈希,更安全,是目前主流的交易脚本),P2SH(Pay to Script Hash,锁定交易脚本只存储哈希值)。
下面是一段 P2SH 的经典多重签名脚本。

func GenP2SHAddress() {
// 生成 3 个公钥
_, pubKey1 := generateKeys()
_, pubKey2 := generateKeys()
_, pubKey3 := generateKeys()

// 创建多重签名赎回脚本
redeemScript, _ := txscript.MultiSigScript([]*btcutil.AddressPubKey{
address1Pub, address2Pub, address3Pub}, 2)

// 生成 P2SH 地址
redeemScriptHash := btcutil.Hash160(redeemScript)
address, _ := btcutil.NewAddressScriptHashFromHash(redeemScriptHash, &chaincfg.MainNetParams)
fmt.Println("P2SH Address:", address.EncodeAddress())
}

P2SH 支持多重签名,需要多方共同确认比特币的花费,提高了安全性。电商平台也通过 P2SH 提高交易的便利性,收款人在花费时使用赎回脚本。

去中心化的脚本语言如果存在老的 BUG(比如 P2SH 存在堆栈初始化 BUG),修复代价极大,强行修复可能会导致分叉。

脚本中还可能存在无条件返回错误的代码,它可以用于燃烧证明(Proof of Burn)的实现,即通过销毁一定加密货币(如将比特币发送到失效的黑洞地址)获得一定的网络权益。比如销毁一点点比特币(手续费)来证明自己拥有其他数字货币。这个行为被区块链永久记录下来,无法篡改了。

前些年炒作很热的数字加密艺术藏品 NFT,就是用了燃烧证明的原理。

燃烧证明的手段和 Coinbase 的 extra nounce 写入信息有些类似,但前者是谁都可以证明自己的数字权益,后者只有有记账权的人才能写入。

硬分叉 Hard Fork 和 软分叉 Soft Fork

区块链协议的代码缺陷很难修复,软件升级会导致区块链发生硬分叉或软分叉。
软分叉是临时性的,随着时间的流逝最终会回到一条链上,而硬分叉则是长期性的。
比如在去中心化系统中,协议升级(哪怕只修改一个字)后,升级后的新节点能向下兼容,未升级的旧节点也认可新生成的区块,这就是软分叉;如果未升级的旧节点不认可新节点的合法性,就是硬分叉,两条分叉将长期共存。

比特币的更多思考

比特币刚被创建时不需要通知其他人,只有发生第一次交易时其他人才知道它的存在。

比特币交易也是无法取消的,如果转错了,只能和对方商量,没有权威机构背书保护。

每一笔交易的 total inputs 减去 total outputs,就是给本区块矿工的手续费。

当前,区块链上的很多区块并没有装满交易记录,很多区块还是很空的。装满交易的区块大小是 1M 左右,约能装 2000 多笔交易。

哈希指针保存在本地的内存地址,去到其他计算机就没意义了,在实际用的时候,就是个哈希值,没有指针。而区块都在 key-value 数据库里。

有的恋人共同分享比特币的地址,把私钥截断,每人保存一半作为信物,称为 “区块恋”。这样做的弊端是,其中一个人丢了私钥就都取不出来了,而且私钥越短越容易暴力破解,安全性呈指数级降低。相对而言,多重签名才是更安全的。

比特币的匿名性靠谱么

匿名就是不能从交易追溯到具体的人。

这世上没有绝对的匿名产品,只要背后的人和真实世界发生经济往来,就很容易关联到真实的人。

一个反直觉的事实,比特币的匿名性还不如现金。银行账户在实名制出现之前,匿名性也比比特币更强。

比特币把交易地址都公开了,不同的地址可以从交易分析中被关联上,尤其是网上购物交易,有多输入输出和找零钱的动作,导致零钱存放地址很容易被识别。电子钱包软件经常生成很多找零钱的地址,如果搞清楚它的生成方式,就很容易锁定人员。

资金转入和转出区块链的过程,尤其是交易所的场内和场外交易,就是反洗钱的重要场景,最容易把比特币用户和现实社会身份产生关联。

比特币自身交易的特点,交易延迟大,交易费贵,根据交付时机可以精准定位出哪个 hash 对应的是哪个人。

所以,要保障匿名性,最好就是尽量不做交易,如中本聪自己。

暗网上的黑市交易平台,利用比特币和 TOR 网络的匿名性,进行非法交易,警方可以通过交易花费时的 IP 地址漏洞,将交易平台背后的犯罪分子抓获。比特币运行在应用层,而下面的网络层还是可以被追溯的。

如果比特币采用 coin mixing 混币手段,能否增加匿名性?
在线加密货币钱包和交易所,有可能把储户的币混在一起,该支付时再拿出一定数量的币。
通过将多个用户的比特币交易混合,切断区块链上原始资金与最终接收地址的直接关联,能够提高匿名性,但是不能完全保障隐私。我们仍然可以通过算法还原资金路径,比如混币交易和交易所提现的时间接近,仍然可以关联。

简而言之,不可篡改性和匿名性天然有排斥,一个不小心的动作就可能无法抹掉,暴露所有账户信息。只要和现实经济系统产生联系,就没有绝对匿名性。

零知识证明

即:无需给出其他信息的前提下,证明一个陈述是对的。
它的数学基础是同态隐藏,加密函数可以同态进行,比如 F(X+Y)=F(X)+F(Y)。零知识证明可用于区块链的隐私交易,就是在隐藏交易的余额或地址的同时,还能验证余额的合法性。

基于零知识证明,行业已出现专门提升隐蔽性的零币和零钞,但不是主流,因为其性能损失大,对初始化有严格要求,用的随机源要能销毁,否则有安全漏洞。

其实难以普及零币和零钞的真正原因是:有强匿名需求的用户并不多。

聊聊中本聪

中本聪作为比特币协议的创始人,是加密货币历史上最神秘的人物,谁也不知道他的真实身份。他挖出了比特币的创世区块,然后把项目交付出去并从此退出业界。据估计,中本聪持有约 50 万枚比特币,市值超 1000 亿美金,但相关地址从未被操作过,他从未花过这些钱。也许他是真正的信仰者,也许他只是把私钥忘了。

加密货币的支付地址就是通过私钥生成的,最坑爹的就是私钥忘了就彻底忘了,谁也没办法取走钱,据说被遗忘的比特币数量不少,因为哈希函数的计算是不可逆的。不像中心化金融机构,能提供个人密码的找回和重置功能。

当然,你也可以在加密货币平台和交易所的 APP 上保存自己的钱包地址,那这不又变成中心化金融了么?何况,这些平台的安全性远不如传统金融机构,提桶跑路或者被黑客盗破产的例子不少。

中心化金融机构真的不好么

比特币是去中心化的系统,但加密货币的交易所是中心化的,它提供了私钥保管的服务,但也带来了新的安全风险。

中心化金融机构虽然可能作恶,唯利是图,但是它有账户服务,也有正规的员工,可以为用户提供贴心支持,整个中心化金融体系处于完整行业规则的管控下。

激励挖矿者,同时防范贪婪者,这种设计在加密货币中无所不在。中心化金融世界中有大厂团队来负责激励和惩罚,但在加密货币中只能通过精心设计的激励制度来落地。

系统总算力越大,理论上越安全,因为凑齐 51% 的算力发动攻击的难度越大。但是好人往往是很分散的,这也带来潜在的风险。

暫無回覆。
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册