亿聪哲史首页

<亿聪哲史 />

"Bitcoin is the signal. Everything else is noise."

Return to Block E05

E05·他在 BDK 写代码

曾汨: 听众朋友们大家好,欢迎收听《亿聪哲史》第五期,我是主播曾汨。

阿剑: 我是主播阿剑。

曾汨: 今天这期播客,我们很高兴能邀请到一位比特币社区的华人开发者志宇来和我们聊聊他的故事和开发工作,这也是做客我们《亿聪哲史》的第一位比特币的开发者。那么首先我想先请志宇和我们的听众朋友打个招呼,介绍一下你自己,你是什么时候接触比特币的。比特币哪些地方吸引了你。

Evan Lin: 大家好,其实最早是 2011 年,当时我在高中。嗯,但是那时候为什么会接触比特币。是因为我那时候开始找到一个东西叫暗网,然后就想了解一下这个暗网,然后就划到一个东西叫 Silk Road,然后发觉它上面卖的一些产品都是用那个比特币来那个估价的,当时就看这个比特币东西蛮有意思的,然后就想买看,但是当时因为年纪还轻,所以就没有信用卡,又不能买比特币,之后就忘掉了。然后大学的时候准备要出社会,然后我在一个 freelancing 的一个平台上找到工作,这是一个加密货币公司,当时他们给我的薪水就是用比特币。

阿剑: 所以那也是你最早就是真的拿到比特币吗。

Evan Lin: 对,这是 2017 年。

曾汨: 哇,你是我接触到的人中唯一一个真正的接触了丝绸之路这个网站的人,这个网站在比特币的历史里面非常非常的有名。

Evan Lin: 对,呵呵,我没有在上面买过东西,只是划一划而已。

曾汨: 那你是什么样的经历让你决定成为一个比特币的开发者。

Evan Lin: 对,在 2017 年,我那时候刚开始接触到一些关于像区块链的一些技术方面的一些东西,当时候的一些说法就可能是说因为比特币太旧了,太老了,速度太慢了,比特币没有希望,那就为什么需要其他这些币。我那时候也相信了,然后就为了这个加密货币公司来开发他们的币,但是做久了就发觉这公司的理念跟我自己的理念不合,然后特别是 COVID 的时候,可能因为在家里呆久就会花很多时间思考,然后当时也接触了 Bitcoin Twitter,然后有找到 Lyn Alden 还有那个 Alex Gladstein 这两位,然后他们的一些说法跟理念触动了我,让我更深入了解比特币。然后最后就发觉比特币才是解决我重视的问题。

阿剑: OK,那我插一个问题。至于刚刚讲的这些,就是他一开始接触到一个所谓的加密货币行业的时候,听到这些说法,其实在很大程度上他确确实实在那个时候非常非常流行,而且甚至可以说占领了很多人的心智,一直到现在。那我就想请问啊志宇了,就是为什么你后来会觉得这些说法是有问题的。然后你还提到说他们好像跟你的理念不是太符合,那能不能麻烦你回答一下我们这两个问题。就是第一,为什么这些说法说啊比特币是一个很老的东西,很旧的东西,很落后的东西,没有用的东西,这种说法是有问题的,以及你自己想在这个东西当中追求什么呢。

Evan Lin: 嗯,因为比特币更新的速度非常慢,然后这是有原因的,因为它彻底是去中心化,不论是技术方面或者是工程的更新方面,它速度慢是因为需要透过共识,然后共识的特质就是速度慢的这是一部分。然后发现其他币他愿意牺牲去中心化,他愿意牺牲安全性而达到扩展性跟增加新功能。当然在比特币因为它的目标,它基本上就不能牺牲这些东西,所以,嗯,开发的方向需要很小心这样,呵呵。

阿剑: 是的。其实至于刚刚讲的是非常重要的一点,也是可能很多人在了解比特币的时候忽略的一点就是因为本身在比特币的世界里面,你没有这样的强制手段能够去强迫他人去选择一个新的版本,或者说强迫他人选择一个不是他自己想要的比特币的这个形态,那么整个过程自然而然就会要涉及到大量的说服,这本身是它的这个去中心化和它稳健性的一个重要上的根源,实际上也是它的保证。就是使得我们要通过说服,然后并且尽可能不牺牲任何我们原本得到的重要的这个属性,然后去推进它。这就是为什么我们现在看到的好像你在比特币上面,你不会看到的时候,比如很快就会出现一个什么硬分叉这个东西,那个东西的一个原因。那其实至于你是在自己的工作这个过程当中去发现这一点的,是吗。

Evan Lin: 对,当然也是因为透过被困了,然后也读了一些文章,这样,对,然后慢慢是慢慢想通的,不是一刹那。因为当时的理念就是依照那个市场的价值而改变。就如果比特币涨了,就突然对比特币有兴趣,有信心,然后比特币跌了,突然对比特币没有信心,然后我觉得这个现象就表示其实自己的了解不够深,然后自己的慢慢现在我就不管他价格了,因为彻底相信他。

阿剑: 好的,那恭喜志宇成为了一个 HODLer。

曾汨: 志宇,你可以给我们介绍一下你现在正在开发的项目。

Evan Lin: 嗯。我现在开发的项目简称为 BDK,就是 Bitcoin Dev Kit。对,然后为什么我会接触到这个项目。是当时就是对我在加密货币领域的这份工作没有兴趣,然后薪水也开始慢慢减少,然后因为当时的老板需要我能增加薪水,然后我不愿意,所以最后我就被 fire 掉,对,然后那时候我就开始想我下一步该做什么,然后因为我当时就发觉自己只有对比特币有兴趣,所以我就想当一个比特币的开发者。所以我下一步就是嗯参加了那个 Chaincode Labs Online Seminars,就是一个互动性的学习课程,然后上完之后我就想我要怎么嗯为比特币领域做一个贡献,然后我就对嗯比特币桌面钱包不满意,所以我想自己开发一个桌面钱包,然后当时就用上了这个 BDK 的这个 library,一开始是这样子,然后嗯用久了就发现它可能缺少了什么,就开始就是开始做一些 PRs,然后慢慢被那个嗯 BDK 的开发人员受认可的这样子。

阿剑: 所以你是先想着开发一个自己要用的一个钱包,然后用了 BDK 的库,然后才开始向它提交代码,成为它的开发者的。厉害厉害厉害。

曾汨: 那么 BDK 它这个东西到底是一个什么的项目。它是为了做什么的。

Evan Lin: 嗯,所以它基本上是处理就是在链上的一些功能,像例如我私钥跟公钥的管理,像 key derivation,私钥派生之类的。当然一个钱包不能只依靠私钥来形容整个钱包,它还有不同的付款策略,例如它有不同地址的格式吗。类似 pay-to-pubkey、pay-to-pubkey-hash、pay-to-script-hash、pay-to-witness-pubkey-hash、pay-to-taproot 有很多,还有一些那个 timelocks,就时间锁方面的,还有那个 multisig。这些策略都能组合的,所以是蛮复杂的,有不同钱包,有不同的付款策略,然后要考虑到蛮多,所以才会有这个叫那个 Miniscript,然后 wallet descriptor 这一部分,然后当然下一部分就是你有你的 wallet descriptor,你有你的私钥公钥,你就可以建立你的 scriptPubKey。然后这时候你就需要下载交易,当然不是大家都能跑一个 full node 的,所以有其他的服务。

阿剑: 服务的供应商。

Evan Lin: 对,能让你下载你的交易,然后基本上有两种分类,一个是 scriptPubKey-based,这种服务基本上是提供一个 scriptPubKey,然后你就能下载你的交易 UTXO 另外一种是 block by block 就是根据一个区块慢慢累积起的,当然就是一个全节点或者是嗯,像如果你在用 compact block filters 这也是一种。对,然后当然 BDK 也支持这两种的两种下载交易的方式,然后 BDK 也处理。嗯,英文是说 persistence,就是嗯你有的交易你要怎么存储它,还有那个怎么建立新的交易要提供,像交易费率,然后怎么控管你的硬币。Coin control,先是 Coin control,像 coin grouping 就是怎么像,例如你很多输出都用同样的 scriptPubKey,为了隐私你想把它组合成一组,然后一次性的把它在一个交易里把它付掉,或者你有些硬币不想跟其他的硬币混起来,这个就是在 coin control 的部分把处理好,然后下个阶段才是 coin selection。中文是选币。

阿剑: 其实说实在的就是没有特别好的中文翻译,我们现在自己是把它翻译成选币了,因为你可以很容易在后面加一个选币算法,告诉大家这个功能是用来干嘛的。但是实际上没有特别好的这个翻译,因为比如说现在我们像 coin selection,这里面有一个很重要的词是 coin,你怎么去翻译这个 coin,对吧。以前的话会有人把它翻译成代币,但是我自己后面我就直接把它翻译成钱币,我也不会翻译成硬币,因为它不是一个硬币,对吧。就是它,只它就是一个币,那就是一个 Coin 的,那我就直接把它翻译成钱币。对,大概是这样子。对,但是你,当然你用英文其实会蛮容易理解的,对吧。Coin control,Coin selection。对,但是在中文里面就其实没有特别好的这个对应。

Evan Lin: 当然那个 coin selection 有两个目的,两个主要的目的其实有,它有很多目的,但一个可能是关于隐私,怎么建立一个,嗯,保护你隐私的交易,另外一个是减少交易费。当然你建立好你的交易,你要提供你的 digital signature 才能广播给比特币网络,然后比特币网络才能接受你的交易。这样子。BDK 大概是处理这些东西。

阿剑: 所以我听下来就是说 BDK,它实际上是它会帮你做到一个钱包几乎能做的所有事情,对吧。

Evan Lin: 对。

阿剑: OK,那其实也就是说开发者用这个东西,其实它就是用来开发一款自己能够用的钱包的,对吧。

Evan Lin: 对。但其实关于像 wallet library 的部分,我觉得目前我看到好像 BDK 我感觉是最完整的,当然我是偏见,我是开发者。对,对,但是我真的感觉是非常完整的一个 library。对,然后我们现在经过一个蛮大的一个更新,因为之前 BDK 虽然这些功能都有,但是它的架构有几个问题。第一个就是如果你想用 BDK,你要用它全部的一起用,你不能把它分割出来一部分这样子用,这是它第一个问题。然后另外一个部分是关于输入输出的部分,它处理的不是很好,就是说如果你在下载交易的时候,或者你要储存资料的时候,你整个钱包就会锁住了,所以这两个部分让它的弹性不够,所以我们现在基本上在重新架构整个项目这样子的一个过程。

阿剑: 我看到这一段信息了,是在的它的 GitHub 页面有写说它的 1.0 版本会有一个很几乎是重构。

Evan Lin: 是吗。对,重构很大部分。对。

曾汨: 我在 BDK 的官网里面看到有一个介绍,就 Why BDK,为什么大家要使用 BDK,然后介绍了 BDK 支持了描述符和 Miniscript,为什么对于钱包的开发者来说,或者用户来说它会比较重要。

Evan Lin: 基本上这个会允许不同的钱包软体看得懂同样的 spending policy。如果你看那个 Bitcoin script,它非常难看得懂。像例如,如果你看一个 scriptPubKey,然后它是 pay-to-script-hash,你在一个 script hash 在那里。但是如果你要把这个 coin 花掉的时候,你的那个输入需要提供那个 redeem script。对,所以你单纯一个 scriptPubKey 是不够的,你要知道要怎么把它花掉。对,所以一个 wallet descriptor 可以形容这个所有,然后 output descriptor 还有其他的特词。像例如你可能一个 spending policy 里面有很多不同的分支。例如,如果你开一个公司,然后可能两个人,然后一个分支可能是我跟你同时签名,然后另外一个分支是,也许,如果我不完全相信你,可能第三者就是可能像一个律师一样,我跟律师透过一个 timelock 能够签名,就是变成有两个 spending policy。当然通常会用到的 spending policy 就是我,我跟你同时签名,比较少用到的是我跟律师签名。所以 Miniscript 你能指定说哪一个比较常用的。它建立你的 Bitcoin script 的时候,比较常用的那个分支的重量就是交易重量会减低,大概是这样。

阿剑: OK,所以总结一下就是,如果我们有 Miniscript 和钱包的描述符的话,这意味着我们正在使用一款钱包软体的时候,其实我们可以更容易使用另外一款钱包软体,只要他们都支持 Miniscript 对吗。哪怕我们在一款钱包软体上使用的非常复杂的条件,就像至于刚刚说到的我的一个比特币的脚本,实际上它蕴藏的两个分支,它其实有两套那个花费的条件,但是这样复杂的这个脚本也不是只能在一款钱包上使用,你把它导入到另外一个钱包的话,假如它们都支持钱包描述符和 Miniscript 的话,那它也能读,一样能读取,然后一样能跨出去,对吧。对,所以这基本上我们可以认为它是钱包的互通性上会有一个提升,对吧。

Evan Lin: 对,没错。

阿剑: 为什么我们需要这样的互通性。比如说原本的话,为什么这个互通性是不够的。

Evan Lin: 太复杂了,太多不同的 spending condition 的。然后其实现在好像大部分大家习惯用的钱包都目前还不支持 Miniscript,甚至 Bitcoin Core 也不是彻底的,所有的每一个 Miniscript policy 都支持,所以好像一段时间才有那个 full adoption 这样。

阿剑: okay。那所以其实原因还是说,比如说我在一款钱包里面,如果我用了一个复杂的 spending policy 的话,我把它导到另外一个钱包里面,我就不一定能用,对吧。所以我们现在需要一个像 Miniscript 这样的东西来保证。说我在一个地方生成的这个复杂的花费条件,其实我到另外一个钱包里面也是能用的,对吗。对,哦,对了,有一个问题还挺有趣或蛮重要的,就是我知道现在的 Miniscript 版本它其实是不支持 Tapscript,也就是我们的 Miniscript,它只能翻译成 P2WSH 这种脚本的格式,但它没有办法翻译成一个 Taproot 输出,然后 Bitcoin Core 上是有 PR,是要去做这个转接了。或者说让它能够去翻译成 Taproot 这个脚本。我不知道这个 BDK 会不会去实现。

Evan Lin: 这个部分我还没有做过深入研究,当然 Miniscript 它还不完整,它目前还不能形容所有的那个策略。

曾汨: 目前有什么市场上在使用的钱包用到了 BDK 吗。

Evan Lin: 有,不知道你们有没有听过 Foundation Devices。

曾汨: 知道一款长得很古典的像功能机一样的硬件钱包。对。

Evan Lin: 对对,还有那个现在有新开发叫一个 Mutiny Wallet,它是它能在你的 browser 里跑的一个 wallet。还有一个,嗯,加拿大的交易所叫 Bull Bitcoin,他们也给我开发一个那个 self-custody 的一个钱包,然后里面你可以直接透过 bug book and for my 比特币,那么也用 BDK。还有两个 RGB wallets 也是用 BDK。对,然后新开发的就是 Block 的那个 Bitkey wallet,他们还没有完成,还没有,他们也在用 BDK,然后他最近在在想测试用我们新版本的 BDK,就是那个我们最新的更新。

曾汨: 给大家介绍一下 Bitkey,就是 Jack Dorsey 推特创始人他想做的那一款硬件钱包的名字,前段时间可能大家也会关注的比较多,然后我在 BDK 的文档里面看到过一些案例,介绍了一些使用 BDK 做钱包的例子,但是让我感觉到很好奇的是,还有利用 BDK 来做价格查询工具和准备金证明的。因为在我的印象里,我以为它只能做一个钱包,但没想到还有人用它来做那个银行的一个准备金的证明。所以我可以理解成 BDK 它不仅仅是只能用来开发钱包,它里面的功能也可以说被其他的一些场景所利用。

Evan Lin: 对,它是一个 library,所以它有一定的弹性。

曾汨: 志宇,你可以给我们介绍一下,就是你现在在开发 BDK 的哪些特性吗。

Evan Lin: 因为 BDK 它有一个英文是说,就是 purely in-memory representation,就是全部都是在记忆体的一个部分。因为之前我们像之前提到 BDK 的问题就是它就是你很难把它分散去使用,所以我们现在把它分成不同的部分,就是一个是,嗯,纯粹就是在记忆体里面的一些一个架构,然后这个架构你可以把交易推进去,就是这些从区块链这些资料直接推进去,不论是交易或者是区块之类的,这些资料可以来自不同的那个服务。然后这些服务我们也有独特的一个 module 给你用,所以就非常非常分散。然后当然 persistence 的部分就是持久化、持久化这部分也是独特的一个 module。对,然后当然之后我们也要做一个独特关于 coin selection module,就是我现在这个 PR coin selection module,我们会整个就是因为建立一个交易,像之前讨论有不同的部分,这整个建立交易的过程会有一个独特的一个 module,所以就我们现在把非常分就是把它模块化这样子。

阿剑: 把它拆开来了,拆开。

Evan Lin: 了。对,对,然后对。之前像设计这个,嗯,独特在那个记忆体的这些架构的部分其实有一点困难性,因为怎么设计一个东西,因为它是个 library,是公用的,因为很容易把它设计成就是让工程师很不小心的把它变成一个 invalid representation。

阿剑: 就是避免他们搬起石头砸自己的脚,对吗。还是说避免他们很容易犯错误。

Evan Lin: 对,避免他们很容易犯错。对,第一个因为之前架构就是如果你在下载了资料之后,你整个那个钱包是锁住的,但我们现在因为没有这个特质,他们下载交易的时候他们也喜欢来做其他的东西,所以很容易把它设计的,导致他们容易犯错。所以我们一个条件就是要怎么把它设计的,就是变成让工程师非常难犯错的一个架构这样。

曾汨: 至于你刚刚提到你自己主要在开发 Coin selection,就是选币算法,对于我们普通用户来说这个算法有多重要。

Evan Lin: 两个部分之前提到就是一个是隐私性,然后另外一个是省交易费。像例如就是原来一个 bitcoin,你需要一次把它花掉全部,所以有的时候如果你要嗯付款给 Sharon,你可能要建立一个找零输出,但也许有一个算法就是你选你的输出,有一个算法能够避免产出一个找零输出,找零输出最有可能会让你的交易费减低,因为少了资料量,然后也能提高你的隐私。对。

曾汨: 所以说就是通过一笔交易里面的不同 UTXO 的安排,可以同时起到保护隐私和节省交易费的作用。

Evan Lin: 对,然后另外一部分是速度,因为像如果你有千万个 UTXO,当然一个很简单的算法是做一个 exhaustive search,就是基本上测试所有的那个 combination 结合,对吧。然后当然这个会非常慢,对吧。所以像,嗯,之前有那个一位非常出名的比特币工程师叫那个 Murch,好像那个德国人他有写一个 paper,然后他推荐大家用那个 branch and bound 的一个算法。

阿剑: 其实 BDK 的这个功能个人用户实际上很少用到,实际上这个功能是要给那些手上 UTXO 数量很多的那种用户用的,比如说那些大型的基础设施服务商、交易所,自己本身做闪电节点的这种闪电网络服务商,这种他手上有很多 UTXO,那这个时候你肯定就有这样的这种选币算法,可以自动的帮他考虑一些问题,对他来说是实际上是非常实用的。但其实对个人来说,因为个人来说,比如说如果你的 UTXO 数量很有限的话,你可以自己浏览一下,然后自己遵循一些基本的规则,比如说如果有地址重用的,你要一次性把它花掉,这种实际上说它的那个重要性会没有那么强。对。

Evan Lin: 但是也是会让这个过程更快一点,因为我没有做一些测试,像如果三十几个 UTXO,如果做个 exhaustive search,可能是要花十几秒来找到最适合、最省费的一个 selection,但是如果透过这个 branch and bound 的这个算法,也许就不到 0.01 秒就找到一个答案了。是差距蛮大的。

阿剑: 这效率提升这么高的吗。

Evan Lin: 对对,呵呵。然后因为我们是 library,所以我们想增加弹性。因为像那个 Murch,它推出的一个东西叫 waste metric,它会基本上有一个 selection,然后它 run selection 给一个分数。然后也许你不想用那个 metric,你想自己创作出你自己的 metric。像我们 BDK 团队有一个另外一个工程师,他推荐一个另外一个算法,然后要测试。然后可能你们发现我觉得常使用这个弹性的一个这个词汇,因为我们是一个 library,对弹性非常重要。

阿剑: 是,确实是,确实是。

曾汨: 那么我们 BDK 的话题先聊到这里,然后我想聊一个就是我们这个节目每一期都会聊的一个话题。至于你在比特币这个开发社区里面所感受到的比特币的社区文化,跟你在其他的以前的一些社区或者加密货币公司里面感到的文化有什么差异。

Evan Lin: 我觉得最大的不一样是在比特币领域有非常强的一个理念,他非常重视守原则。当然我也感觉比特币领域也不完美,也是有很多杂音,有非常多偏见的一些理念,但是我觉得每一个社区、每个文化都会有这个问题。对,但是像 Don't trust, verify 这种理念有觉得不错,然后非常重视这个去中心化的,然后也非常重视那个 technical 的一些东西,就开发方面。

曾汨: 其他加密货币里面有哪一些让你感觉到和这边差别很大的。

Evan Lin: 我觉得很多好像都是非常重视外表,这个项目的形象如何,但是后面基本上没有什么科技的,这是我个人的经历,哈哈哈。

阿剑: 其实志宇刚刚讲的那个用了一个词,那个词是有一点出乎我意料,但是我后来想想确实是这样。就是至于说就是比特币的社区,大家很重视一些原则,就很守原则,这个确实是,我觉得这个表达的确是很准确的,因为你在其他社区里面你观察不到那么多原则,就没有那么多原则可言。就是说,比如说像比特币里面大家会说 Don't trust, verify,然后每次你想出来搞点什么事情的时候,大家问的第一个问题就是你会不会让全节点的运行成本提高,因为这个东西会影响到我到底能不能 verify,对吧。我如果它会影响到我的全节点的运行成本升高的话,那能够 verify 的人就变少了,或者说我 verify 的这个成本就变高了,那这样的想法是就会很难去推行下去,因为大家就很重视这些原则。但是你好像你在别的领域你观察不到那么多原则,就没有那么多不可退让的东西,就包括像比特币里面,就大家还有另外一个很重视的东西就是隐私性,像你每一次升级,你要你基本上都要面对这个问题,就是你这个升级到底能提升隐私性还是会让隐私性进一步恶化,但是你在其他领域你也不会观察到这样的原则就没有那么多。原则是不可牺牲、不可让步的,必须遵循的。所以我确实觉得这个描述是非常准确的。

Evan Lin: 其实我感觉如果一个嗯社区,如果它没有原则,它很难去中心化的达到共识。因为如果你没有原则,你只能追踪一个人或是一群人,让他们做决定。但如果大家都有原则,你才能达到 scientific consensus,这是为什么。我觉得比特币是唯一一个希望,因为它只有它有原则,然后如果大家都了解这个原则的话才能有共识。

阿剑: 呵呵,对,实际上它也是在我看来是一个非常重要的一种文化,就是当你有了原则的时候,大家可以依据这些原则来去进行对话,而不是说你要去诉诸权威,你要去诉诸不可知的力量,或者说你诉诸奇奇怪怪的暗箱操作背后不能见光的一些东西。就大家可以公开的依据这些原则说你这个是不符合这个原则的,然后它才能够形成一种真正的平等交流的这种文化。我觉得这也是我自己非常喜欢比特币的这个地方。OK,我们聊点别的。那你自己现在除了开发 BDK,我其实有在看那个 GitHub,我发现你提交还还蛮多的,工作量非常的充实。那除此之外,你会对比特币领域的什么东西会感兴趣。

Evan Lin: 其实我目前大部分时间是 like have at BDK,因为其实我们目前可是蛮缺工程师的。对,但是因为,嗯,今年那个 HRF 有推出几个 Bounty,总共 20 比特币,然后其中一个是那个 Silent Payments,所以我有花一个周末在研究 Silent Payments。

阿剑: Silent Payments 他们其实进度好像也不慢。我因为 Silent Payments 我记得有一个他们已经在 Bitcoin Core 上去提交,已经提交 PR 了,但是现在应该还没 merge。

Evan Lin: 对,有 PR,但是还没有一个 library,然后还没有其他的钱包在使用。

阿剑: 你能不能先给我们介绍一下什么是 Silent Payments。

Evan Lin: 好 ill do my best。基本上现在如果你想收款的时候,你就提供一个地址,然后这个地址基本上在形容你建立交易的时候,你要怎么建立那个 scriptPubKey,它基本上只有提供这个资料,所以如果你重新使用一个地址的话,你建立的交易虽然是不同交易,但是这些 coins 都会有同样的 scriptPubKey。然后这是会变成一个隐私问题,然后 Silent Payments,它也是一个地址的规模,但是因为它也透过不同的技术让每一个交易的 scriptPubKey 都是独特的。然后一个部分它是因为用这个交易的输入,因为每次你的交易的输入都会指向新的输出,所以这些输入都是独特的资料,所以第一个部分它是会用交易的输入来建立你 scriptPubKey 的样子,这是第一个部分,所以每个 scriptPubKey 会独特,但是这样子不够。因为大家都可以看到你的你交易的输出,所以需要怎么加隐私。就是透过之前的输出的私钥。嗯,我忘记这个加密技术叫什么了。

阿剑: 叫 ECDH.

Evan Lin: 对,ECDH,抱歉抱歉。这个概念就是如果我有一个公钥,私钥,然后你有一个公钥私钥,然后我的公钥跟你的私钥,或者我的私钥跟你的公钥可以建立一个 shared secret。对,然后只有我跟你知道,所以这部分也会用来 tweak 那个 scriptPubKey 的 public key。

曾汨: 对,所以听下来,其实它就是让我们每一个人在接收支付的时候隐私性更强,然后每一次可以变换不同的地址。

Evan Lin: 对,就是用同样的地址,然后能每一次的交易都是建立独特的 coins,独特的那个 scriptPubKey。

阿剑: OK,那听起来就是我只要一个地址,然后每次有人给我发账的时候,它其实都会生成新的地址,对吧。就是即使我公开的是同样的一个一段信息,但是别人每次给我发账,它其实都会生成不同的这个地址,然后这就避免了原来你说的那个因为重复使用相同的 scriptPubKey 或者说地址而产生这个隐私性问题。

曾汨: 对,我们另外一个问题就是最近 Drivechain 其实在推特上引发了非常多的争议,我们看到你在推特上也表示了对 Drivechain 的支持,你可以给我们介绍一下这是什么样的一个项目,为什么。你会喜欢这个项目吗。

Evan Lin: 其实我表示的不是支持,哈哈哈哈,对,其实我对 Drivechain 没有彻底的理解,基本概念有稍微了解一下,但是我看到的我感觉他就是在推 Drivechain 的后面那个公司,好像叫那个 LayerTwo Labs 做什么的。我不太喜欢他们的理念或者他们做事的方式怎么讲。第一个部分是非常骄傲,然后第二部分是跟比特币的理念,跟比特币的原则我觉得有点差距。对。

曾汨: 所以其实是我们误解了你所表达的意思。

Evan Lin: 对,等于他有出一个 meme。就是哇,如果有 Drivechain 就是整个地球会爆炸。我就说对,其实那个我的意思是说甚至他们也对他们的项目没有信心。

阿剑: 原来是这个意思,我没有 get 到,我一开始就是没有 get 到。

Evan Lin: 因为我觉得你们应该也发现就是如果某些工程师他们不支持 Drivechain,所有 Drivechain 的负面的一些讯息,那个从 Drivechain 那边或 LayerTwo Labs 那边会有一个攻击性的一个反应。呵呵,非常强攻击性的反应。对,然后那一个地方就是第一次有一个就是为了 BIP。有一个好像一个 marketing team 在后面一样在推广 BIP。你不需要 marketing team,因为如果大家重视原则,就是像我们之前讨论到就是如果大家都是为了原则得到共识,就根本不需要什么 marketing,就是如果它会让我们的会增加我们的去中心化,或者会对整个比特币的生态系统做一个正面的发展,就讨论技术就。

阿剑: 够了。对,其实你不需要那么多营销的手段,或者说信息的轰炸。我也很认可那个志宇的说法,因为在我这边的话,我对 Drivechain 其实也有一些了解,但是我自己也是会对他们在推广这个想法的时候的所采取的一些行动感觉非常的不理解。因为让我个人不太能接受的一个点是,他们会集中性地批评轰炸闪电网络,认为闪电网络这也不好,那也不好。这在我看来其实很奇怪的一件事情,因为他们的有一些批评是基于闪电网络在结构上的一些特点,这个无可非议,但是认为这些结构上的这个特点就是一种无可救药的缺陷,这就让我觉得很奇怪,因为首先是没有什么技术不会带有自己结构上的一些特点,因此有一些它在某些场景下的这个局限性,对吧。其次是我从来没有看过有人能够证明 Drivechain 会比 Lightning Network 能够给我们带来更大的帮助,或者说带来大的多的好处,在我看来是没有人证明过。

Evan Lin: 对,一个说法是相信你们也听过,就是 Drivechain 也许会那个影响就是挖矿者的激励,因为可能,如果像如果以后我们有 100 多个 Drivechain,当然只有最大的挖矿者才能跑这些节点,能够追踪这么多 Drivechain 的讯息才能那个做 merge mining。所以当然这些比较大的挖矿者他赚到的会比较多,所以可能会就 disincentivize 比较小的挖矿者参与这个。对。

阿剑: 哈哈,对,这是一个大家被提到很多的一个论点,也是当前我觉得可能没有特别清晰的一个解决方案,就是清晰的这个答案,因为我自己也没有很透彻的想过这个问题。

曾汨: 对,我刚刚想到一个问题,因为志宇提到的你的经验,你有一个 Chaincode Labs 的一个学习经历,你也是我们节目邀请的第一位比特币生态的开发者,如果我们听众里面有开发者,他想为比特币生态做开发,你有什么建议。给到我们听众当中有意愿成为比特币开发者的人。

Evan Lin: 让我想想这是一个非常有一点困难的问题,我稍微分享一下我自己的经历,大家的学习方式不太一样,然后我个人是一开始是先读那个 Mastering Bitcoin 这一本书,我觉得 Mastering Bitcoin 写得非常好。之后参与 Chaincode Labs 这样,然后 Chaincode Labs 是一个互动性的学习方式,它有提供一些资料,然后是你的责任,你自己回家去复习,然后准备一些问题,这样一个礼拜可能就有两次,一次是会被嗯跟另外一位一起讨论你准备的一些问题,就是这些问题是需要问给其他人的。第二次是比较就大体一点的,就是大家坐下,然后透过大家准备的问题做一个讨论这样子,然后最后有一个 mentor 会出现,然后他会可能解释的更详细一点这样,因为这些资料都是公共的,你也可以自己花时间去读这些 chaincode 这些资料。但是如果有学习对象,当然也许会给你一些帮助,呵呵。然后可能贡献代码的地方,像 BDK 方面,我觉得如果你想贡献代码给一个 library 的时候,我觉得一开始先用一用看这个 library,先透过用这个 library 来了解这个 library,之后开始看就是有哪些 bug 没有解决,或是哪些功能还没开发的,然后看代码不了解地方就需要问题。这样子其实我觉得不算困难,而是需要花时间,花很多时间。

曾汨: 所以我总结一下,其实首先就是通过比如说 Mastering Bitcoin,精通比特币这样的和 Chaincode Labs 这样的资料来学习和了解这个领域。然后最关键的其实是针对比特币社区里面这些开源项目,我不断去做贡献。

Evan Lin: 对,基本上是这样。

曾汨: 这里提一点就是 Chaincode Labs,它有一个 GitHub,然后里面列出了他所有的大家学习的一些资料,整理得非常详细,每一节课然后各种相关的链接,是一个很好地学习比特币资源的一个仓库。所以我到时候会分享到播客的链接里面,欢迎大家去看。

Evan Lin: 其实我之前有关注就是你们做的那个翻译网站 BTC Study,虽然我中文程度不好,但是我感觉里面翻译到的东西都蛮完整。

阿剑: 的,谢谢认可。其实我有一个更实用的建议,如果开发者听到这期播客的话,直接把这期播客当中我们跟志宇聊到的这些概念,所有英文和中文出现,这些概念全部了解一遍,那应该就是一个不错的入门了,其实这些就是听起来很简单,可能只是一个词,但是它其实背后的话都是比特币的它的这个协议,它的一些内部的一些特点所表现出来的,所以都是非常好的切入点。

曾汨: 好的,那么感谢志宇的精彩分享,我们本期播客到此结束,下期再见。bye bye bye bye。

Follow us:
RSS Feed:

Vires in Numeris
// 以数字铸就力量

Libertas in Cryptographia
// 以密码学捍卫自由