From 9aed691dbe6d0a77bb61cd3838302b4795cef067 Mon Sep 17 00:00:00 2001 From: JackyLHH Date: Fri, 22 Dec 2023 10:55:08 +0800 Subject: [PATCH 1/5] Add the zh version Signed-off-by: JackyLHH --- bitcoin_script_(explainCKBot)/index_zh.md | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 bitcoin_script_(explainCKBot)/index_zh.md diff --git a/bitcoin_script_(explainCKBot)/index_zh.md b/bitcoin_script_(explainCKBot)/index_zh.md new file mode 100644 index 0000000..a5cf47b --- /dev/null +++ b/bitcoin_script_(explainCKBot)/index_zh.md @@ -0,0 +1,61 @@ +--- +title: '比特币脚本简介' +coverImage: 'images/image1.png' +category: Popular +subtitle: '比特币,作为数字货币革命的先驱,不仅颠覆了传统金融体系,更代表了一种全新的货币形态。这场创新的核心是比特币脚本——一种独特的编程语言,它巧妙地驱动着比特币网络中的交易过程。' +date: '2023-12-11T16:00:00.000Z' +author: +- github:explainCKBot +--- + +本文旨在深入剖析比特币脚本的复杂性与魅力,探讨其技术细节、历史发展及未来趋势。 + + + + +## 比特币脚本的技术介绍 + +比特币脚本(Bitcoin Script),通常被视为比特币繁华世界的幕后力量,实则是维护比特币交易安全与效率的关键要素。这种基于堆栈的编程语言,采用 [Reverse-Polish Notation](https://en.wikipedia.org/wiki/Reverse_Polish_notation) (RPN) 进行操作,其特点在于运算符紧随操作数之后,与众多编程语言形成了鲜明对比,很容易让人联想到 [Forth](https://en.wikipedia.org/wiki/Forth_(programming_language)) 编程语言。 + +比特币脚本最引人注目的特性莫过于图灵不完备性。不同于能执行无限循环的图灵完备语言,比特币脚本的这种设计限制,是一种刻意的设计选择,提高了系统的安全性,有效避免了无限循环所可能引发的风险。 + +深入其核心,我们发现各种操作码(Opcodes)构成了比特币脚本的基础,比如 OP_ADD(加法)或 OP_EQUAL(等值)等。更复杂的操作码,如 OP_CHECKSIG 和 OP_CHECKMULTISIG,则用于验证交易签名,确保交易的真实性。 + + + +## 比特币脚本的历史演变 + +比特币脚本的起源可追溯至比特币核心(Bitcoin Core)0.1 版本,源自神秘创始人中本聪的杰作。尽管早期版本在现实应用中存在局限,但随着时间的推移和技术的发展,比特币脚本已经成长为一种专为比特币网络设计的高效脚本语言。 + + + + +## 真实交易中的比特币脚本应用 + +每一笔比特币交易都像一场精心编排的交响乐,其中比特币脚本扮演着指挥家的角色。交易的核心包括锁定和解锁脚本,即 scriptPubKey 和 scriptSig。这些脚本确保交易的安全性,保障资金只能被授权人士访问。 + +例如,在一个标准的 "Pay To PubKey Hash"(P2PKH)交易中,比特币脚本负责验证交易过程中的所有步骤,确保其安全、高效地完成。 + + + +## 比特币脚本与其他脚本语言的比较 + +比特币脚本的独特性在于其图灵不完备性,这既是其优势也是其与众不同之处。这一特性带来的高安全性,是许多图灵完备语言所不具备的。 + +另一方面,[Komodo](https://komodoplatform.com/en/) 等区块链平台在编程功能上取得了显著进步。例如,通过引入 OP_CHECKCRYPTOCONDITION(OP_CCC)等新功能,Komodo 扩展了传统比特币脚本的能力,展现了区块链技术的新可能。 + + + +## 比特币脚本的未来展望 + +作为一个不断进化的技术,比特币脚本的未来发展充满期待。预计其将进一步增强功能,与其他区块链技术更加紧密地集成。展望未来,比特币脚本将成为推动数字货币生态系统创新和持续发展的关键力量。 + + + + +## 总结 + +虽然常被比特币的光芒所掩盖,比特币脚本却是加密世界中的一个不可忽视的核心。它的独特功能、历史演进和在交易中的关键作用,使其成为数字货币革命的重要推手。 + +面对数字时代的挑战和机遇,比特币脚本的重要性将日益凸显,引领我们迈向一个更加安全、高效、无缝的交易世界。 + From 8f41ce6c93c7177b6d674171a6bba596e38b4a5a Mon Sep 17 00:00:00 2001 From: JackyLHH Date: Fri, 22 Dec 2023 10:55:49 +0800 Subject: [PATCH 2/5] Add the zh version Signed-off-by: JackyLHH --- .../index_zh.md | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 block_time_in_blockchain_(explainCKBot)/index_zh.md diff --git a/block_time_in_blockchain_(explainCKBot)/index_zh.md b/block_time_in_blockchain_(explainCKBot)/index_zh.md new file mode 100644 index 0000000..bbab4b2 --- /dev/null +++ b/block_time_in_blockchain_(explainCKBot)/index_zh.md @@ -0,0 +1,59 @@ +--- +title: '一文读懂区块时间' +coverImage: 'images/image1.png' +category: Popular +subtitle: '区块链技术因其潜在的行业变革能力而长期受到瞩目。' +date: '2023-12-18T16:00:00.000Z' +author: +- github:explainCKBot +--- + +在区块链这项技术中,"区块时间" 这一概念在区块链网络的运作和效率方面扮演着核心角色。本文旨在深入探讨区块时间的定义、重要性以及它对区块链网络的影响。 + + + +## 区块时间的定义 + +区块时间是指在基于区块链的系统中生成新区块所需的平均时间。区块时间是连接区块链网络各个方面的关键要素,对交易确认时间、网络安全性、处理能力、挖矿奖励以及去中心化有着深远的影响。在区块链网络的设计过程中,精心考虑区块时间至关重要,因为它有助于在快速交易确认和网络安全性之间找到平衡点。 + + + + +## 影响区块时间的因素 + +区块时间受多种因素影响,其中包括网络拥堵和挖矿难度。例如,在采用工作量证明(PoW)的区块链中,通过不断调整挖矿难度,可以维持区块时间在一个相对稳定的范围。此外,网络拥堵情况也在决定交易的确认时间中起着关键作用。 + + + +## 不同区块链的区块时间 + +通过对主流区块链的区块时间进行比较研究,可以发现它们的区块时间长短不一。这些差异凸显了不同区块链网络固有的不同设计原则和操作协议。以下是部分区块链的平均区块时间: + +* 比特币(BTC):10 分钟 +* 以太坊(ETH):12 秒 +* BNB:3 秒 +* Solana (SOL):400-800 毫秒 +* Cardano (ADA):20 秒 +* 波卡(DOT): 6 ~ 12 秒(取决于网络配置) +* CKB:视网络情况而定,平均为 11 秒 + + + +## 区块时间对用户和开发者的影响 + +区块链网络中的区块时间对用户和开发者都有多方面的重大影响。对于用户来说,区块时间最直接的影响之一就是交易确认时间。区块时间基本上决定了新区块添加到区块链的时间间隔,因此也决定了交易何时得到确认。区块时间越短,交易确认速度越快,这对于时间敏感的交易来说至关重要。不过,缩短区块时间的一个显著缺点是可能会导致更频繁的区块重组,这可能会暂时误导用户对区块链状态的认识。 + +此外,区块时间对网络安全起着至关重要的作用。区块时间越长,验证过程就越彻底,从而降低了无效交易被纳入区块的可能性,增强了网络的安全性。不过,较长的区块时间也可能降低网络对特定攻击的响应能力,因为需要更长的时间来确认交易并将其加入到区块链中。 + +区块时间对用户体验也有很大影响。用户通常更喜欢较短区块时间带来的更快交易确认时间,因为它们能提供更快的反馈,提升整体用户体验。 + +对开发者而言,区块时间会影响智能合约的执行速度。较短的区块时间可以加快智能合约的执行速度,这对于需要实时或接近实时交互的应用来说至关重要。不过,极短的出块时间可能会导致更频繁的竞争条件,即结果取决于其他不可控事件的顺序或时间,这可能是智能合约执行中出现错误和意外行为的根源。 + +此外,开发者在设计和调整区块链网络时必须考虑区块时间。区块时间是影响网络吞吐量、安全性和可用性的关键参数。开发人员可能需要在这些方面进行权衡,以实现所需的网络性能。例如,缩短区块时间可能会提高吞吐量,但代价可能是降低安全性。 + + + + +## 总结 + +总之,区块时间是区块链网络中的一个关键因素,对交易确认时间、网络安全、用户体验、智能合约执行和网络设计都有重大影响。用户和开发者在与区块链网络交互或设计基于区块链的新系统时,都需要了解并考虑区块时间的影响。 \ No newline at end of file From 45905f6bd1517284c9636c4bdff428e20b4eaa44 Mon Sep 17 00:00:00 2001 From: JackyLHH Date: Fri, 22 Dec 2023 10:56:34 +0800 Subject: [PATCH 3/5] Add the zh version Signed-off-by: JackyLHH --- slashing_in_PoS_(explainCKBot)/index_zh.md | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 slashing_in_PoS_(explainCKBot)/index_zh.md diff --git a/slashing_in_PoS_(explainCKBot)/index_zh.md b/slashing_in_PoS_(explainCKBot)/index_zh.md new file mode 100644 index 0000000..c5f218a --- /dev/null +++ b/slashing_in_PoS_(explainCKBot)/index_zh.md @@ -0,0 +1,98 @@ +--- +title: '详解 PoS 协议中的罚没机制' +coverImage: 'images/image1.png' +category: Popular +subtitle: '在区块链技术领域,权益证明(PoS)是一种有别于工作量证明(PoW)的共识算法。' +date: '2023-12-13T16:00:00.000Z' +author: +- github:explainCKBot +--- + +PoS 为去中心化网络如何达成共识提供了一套更环保、更高效的解决方案。PoS 的核心是一种被称为 "Slash(罚没)" 的机制,它能确保网络的完整性和安全性。本文将深入探讨罚没机制的复杂性,研究其定义、重要性、技术机制以及区块链社区对其的讨论。 + + + + +## 罚没机制的起源 + +在 PoS 区块链中,"Slash(罚没)" 是惩罚的同义词。它要求对恶意或疏忽行为、危害网络安全的验证者采取惩罚措施。罚没机制起源于 PoS 实施的早期,作为对验证者不诚实行为的一种威慑。 + + + + +## 罚没机制的目的和重要性 + +罚没机制的目的有两个:鼓励验证者的诚实行为和加强网络安全。通过让验证者对自己的行为负责,罚没机制可以阻止恶意行为和疏忽,确保网络基础设施的稳健和可信。罚没机制的影响超出了单个验证者的范围,它培养了一种责任和信任的文化,而这种文化对于网络生态系统的蓬勃发展是不可或缺的。 + + + + +## 罚没机制的技术原理 + +深入到技术领域,罚没机制的原理是对违反协议规则的行为进行惩罚。罚没机制的标准在 PoS 区块链协议中进行了详细定义。尽管不同区块链网络的规定可能略有不同,但核心原则基本相似。以下是罚没的常见理由: + + +### 罚没的标准 + +**双重签名:** 区块链领域中,双重签名(验证者在同一高度签名多个区块)被视为一项严重的罪行。这种行为会导致网络分叉,造成区块链状态的分裂,从而破坏其安全性。 + +**长程攻击:** 验证者如果试图改写区块链的历史,从较远的历史点创建另一条链,就会造成所谓的长程攻击。罚没机制是为了阻止此类恶意行为。 + +**环绕投票:**在 PoS 系统中,验证者需要对提议区块的有效性进行投票。当验证者对事实的一个版本进行验证,然后又对另一个版本进行验证,但以一种不明确的方式表明他们不再相信第一个版本时,这样的证明(对区块投票)就是环绕投票。环绕投票违反了协议规则。 + +**审查:** 有些 PoS 系统虽然不一定在协议中明文规定,但可能会采用罚没的方式来阻止验证者进行审查,从而促进网络的公平和开放。 + + +### 对验证者的影响 + +被发现违反协议规则的验证者将受到严厉处罚,其中一些惩罚后果可能包括: + +**损失质押资产:** 验证者面临的主要惩罚是损失部分或全部的质押资产。这种经济损失是对不当行为的有力威慑。 + +**从验证着名单中删除:** 被罚没的验证者可能会被从验证者名单中删除,失去参与共识过程的特权和相关奖励。 + +**声誉损失:** 造成的声誉损失可能非常严重,会使其他网络参与者今后不再将其资产委托给被罚没过的验证者。 + +**收入减少: **即使没有被驱逐,被罚没的验证者也会因为失去委托资产和在验证者名单中排名靠后而减少收入。 + + + +## 预防罚没 + +有效预防罚没的关键在于深入理解协议规则并妥善运用相关工具。一个重要策略是构建和利用本地预防罚没数据库,这有助于确保验证者的行为不会触发协议中的罚没条款。此外,避免复杂的验证者配置和接受一定程度的停机时间,也是降低罚没风险的实际做法。 + + + + +## 社交惩罚 + +区块链社区,特别是以太坊的爱好者们,最近热议 “社交惩罚” 的概念。虽然这一惩罚形式尚未在协议中正式确立,但它的出现标志着对罚没措施的深入思考。社交惩罚的核心观点是,验证者不仅应承担技术职责,还应维护网络的社会价值观,并通过社交惩罚来抵制和处罚审查行为,以促进网络的开放性和公正性。 + + +### UASF(用户激活的软分叉) + +社交惩罚的实际执行是一项复杂的工作。传统的罚没规则是在协议中规定的,而社交惩罚的规则则不同,它可能需要社区协调来执行。一种建议的方法是通过用户激活软分叉(UASF),即网络参与者集体同意执行社交惩罚规则。 + +UASF 方法需要网络参与者之间协调一致,在不需要硬分叉或协议升级的情况下达成并执行新的社交惩罚规则。这种方法强调了区块链网络的去中心化精神,使社区有能力通过集体行动来执行社会标准。 + +### 挑战与批评 + +社交惩罚虽然令人感兴趣,但也面临着一些挑战和批评。与客观的技术规则相比,社会标准具有主观性,这给社交惩罚规则的定义和执行带来了巨大挑战。此外,某些社区派别可能会滥用权力或集中权力,这也是一个令人担忧的问题。 + +批评者还指出了在区块链社区内形成惩罚性文化的风险——可能会扼杀创新和开放性。如何找到平衡点,既维护社会价值观,又保持有利于创新和参与的环境,是社交惩罚讨论中的关键。 + + + + +## 批评与争议 + +尽管罚没在区块链共识机制中发挥着关键作用,但它也不免遭受批评和争议。这些讨论通常围绕着惩罚的严厉程度、机制的公平性以及权力集中的可能性。每次争议都激发了社区对机制的反思,推动了罚没规则的持续进化。 + + + + +## 总结 + +PoS 的罚没机制展示了区块链技术的复杂和迷人之处,彰显了区块链共识算法的创新与进步。围绕罚没的讨论不仅展示了技术的精妙,还反映了区块链社区对安全、高效和公平的去中心化网络生态系统的追求。这些讨论中透露出的问责和集体责任精神,不断推动着区块链叙事的发展,同时也揭示了维护这一新兴技术生态的重要性和复杂性。 + +总之,PoS 罚没机制不仅是区块链技术创新的体现,更是社区共识和进步的象征。通过不断的讨论与改进,我们可以期待一个更加安全、高效和公正的去中心化网络环境的到来。 \ No newline at end of file From 2a4d9eb63a206bd358605da21b79cfc939be61d3 Mon Sep 17 00:00:00 2001 From: JackyLHH Date: Fri, 22 Dec 2023 10:57:47 +0800 Subject: [PATCH 4/5] Add the zh version Signed-off-by: JackyLHH --- what_is_secp256r1/index_zh.md | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 what_is_secp256r1/index_zh.md diff --git a/what_is_secp256r1/index_zh.md b/what_is_secp256r1/index_zh.md new file mode 100644 index 0000000..893e288 --- /dev/null +++ b/what_is_secp256r1/index_zh.md @@ -0,0 +1,42 @@ +--- +title: '什么是 Secp256r1?' +coverImage: 'images/image1.png' +category: Popular +subtitle: 'Secp256r1 又称为 "P-256",是数字签名和密钥转换常用的椭圆曲线,在区块链行业的应用日益广泛。 ' +date: '2023-12-10T16:00:00.000Z' +author: +- github:explainCKBot +--- + +Secp256r1 曲线是加密应用中用于数字签名的常用椭圆曲线。它以椭圆曲线的数学特性为基础,在素数的有限域中运行,提供 256 位安全级别,这意味着它可以抵御试图以当前计算能力解决底层数学问题(椭圆曲线离散对数问题)的攻击。 + + + +## 密码学中的应用 + +Secp256r1 通常用于各种加密应用,如创建数字证书和生成用于 TLS 和 SSL 等安全通信协议的公私密钥对。 + +Secp256r1 也是 WebAuthn 的一个关键组件,WebAuthn 是由万维网联盟(W3C)和 FIDO 联盟制定的网络标准,旨在为网络应用程序和在线服务提供安全、易用的身份验证机制。 + +由于笔记本电脑和手机等消费类硬件广泛支持 Secp256r1,WebAuthn 可实现无密码身份验证,用户登录网站和在线服务时无需使用传统密码,而是使用设备中嵌入的安全硬件内的私人密钥进行身份验证。 + + + +## 区块链中的应用 + +对 Secp256r1 的支持可以提高区块链的可用性和用户界面,创建直观的界面和清晰的说明,帮助新用户更轻松地浏览区块链生态系统。 + +Secp256r1 钱包不需要助记词,助记词对新用户来说是一个复杂的新概念。要保持对钱包的访问权限,用户只需确保他们仍拥有自己的设备。 + +少数区块链支持 Secp256r1: + +* EOS:旨在为去中心化应用程序(dApp)的开发者提供高性能、可扩展性和易用性的区块链平台。EOS 的智能合约采用 DPoS 共识机制 WebAssembly(WASM),允许开发人员使用各种编程语言编写代码。 +* Tezos:自我修正的区块链,利用链上治理允许利益相关者参与协议的演变。其主要特点包括形式验证(一种确保智能合约正确性的技术)和社区治理。 +* Dfinity:去中心化的开放式互联网计算机,旨在为直接在区块链上托管 dApp 和服务提供可扩展的高效环境。 +* CKB:利用 RISC-V 指令集执行智能合约的高度安全、去中心化和灵活的底层公链。CKB 的区块链状态采用 "Cell 模型",使开发人员能够通过创建相互交互的 Cell(类似于比特币中的UTXO)来创建复杂的应用程序。 + + + +## 总结 + +Secp256r1 在促进区块链的采用方面发挥了关键作用,让用户可以直接上手,感觉就像使用其他网络应用程序一样。通过消除对助记词的需求和备份它们的负担,Secp256r1 必将成为区块链行业未来的重要组成部分。 \ No newline at end of file From 3a181432f7e3d1156017dc9f961203cd873ce377 Mon Sep 17 00:00:00 2001 From: JackyLHH Date: Fri, 22 Dec 2023 10:58:30 +0800 Subject: [PATCH 5/5] Add the zh version Signed-off-by: JackyLHH --- ultimate_guide_to_light_clients/index_zh.md | 163 ++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 ultimate_guide_to_light_clients/index_zh.md diff --git a/ultimate_guide_to_light_clients/index_zh.md b/ultimate_guide_to_light_clients/index_zh.md new file mode 100644 index 0000000..90a86f6 --- /dev/null +++ b/ultimate_guide_to_light_clients/index_zh.md @@ -0,0 +1,163 @@ +--- +title: '区块链轻客户端终极指南' +coverImage: 'images/cover.png' +category: Popular +subtitle: '轻客户端为用户提供了一种信任最小化的方式,使其能够轻松便捷地访问区块链,而无需依赖第三方。' +date: '2023-10-02T16:00:00.000Z' +--- + +虽然去中心化可能是区块链的基本属性,但去中心化本身并不是最终目标。相反,去中心化往往以牺牲其他理想属性(如可扩展性)为代价,追求其带来的新属性:无需信任、无需许可和抗审查。这些属性赋予了加密货币用户对所有权的牢牢掌握,以及对其财富和数据的访问权——至少在理论上是这样。 + +实际上,目前大多数加密货币用户通过一个由中心化实体维护的 [RPC](https://en.wikipedia.org/wiki/Remote_procedure_call) 提供商连接到节点,连接到区块链中。 + +这样做虽然方便,但却违背了去中心化的初衷。中本聪推出比特币是为了解决根深蒂固的金融体系对可信第三方的依赖。他在《比特币白皮书》中写道:“传统货币的根本问题在于,它的运作需要信任。人们必须相信中央银行不会让货币贬值,但法定货币的历史充满了背信弃义。” + +在这一点上,中心化和依赖可信第三方的危险并不只是理论上或未来才会出现的,而是在今天已经具体化了。例如,在 2022 年 8 月 OFAC [制裁](https://home.treasury.gov/news/press-releases/jy0916)了隐私协议 TornadoCash 后,托管了超过 60% 以太坊节点的中心化 RPC 提供商 [Alchemy](https://www.alchemy.com/) 和 [Infura](https://www.infura.io/) 立即阻止用户与 TornadoCash 进行交互。这意味着,任何使用流行的加密钱包 [MetaMask](https://metamask.io/) 的用户在默认设置下都无法访问运行在最大的智能合约平台以太坊上的去中心化应用程序 TornadoCash。 + +![alt_text](images/eth_nodes.png "image_tooltip") + _图:Alchemy 和 Infura 完全依赖 AWS 来托管其节点,来源 [ethernodes.org](https://www.ethernodes.org/network-types)_ + +除了审查之外,依赖中心化的 RPC 访问区块链还会使用户面临数据收集和各种类型的数据篡改攻击,这不仅有碍隐私,还可能导致资金损失。这就是运行一个完整节点如此重要的原因:它能让用户直接、无信任地访问区块链,增强网络和用户的安全性。然而,由于需要大量资源,运行全节点并不总是像听起来那么简单。因此,开发人员投入了大量资源来研究轻客户端,并使其尽可能轻量,这也是本文要介绍的内容。 + + + +## 客户端与节点的区别 + +要了解节点和客户端的区别以及后者的工作原理,首先要了解一些区块链基础知识。 + +区块链是在分布式计算机网络中更新和复制的公共数据库。区块链中的 "区块" 一词是指存储交易和状态信息的标准化、经过验证的数据批次。当某人向其他人发送加密货币时,该交易需要被包含在一个区块中才能得到 "确认" 或最终结算。这里的最终结算是指包含交易的区块已被矿工或验证者验证,并被网络中的所有其他计算机认可。术语 "链" 指的是区块在分类账中的记录方式,其中每个后续区块都与前一个父区块以加密方式链接,形成不可更改的区块链。之所以说链的历史是不可变的,是因为如果不改变所有后续区块,就无法改变区块中的数据,而这需要网络中大多数计算机达成[共识](https://www.nervos.org/knowledge-base/what_is_nakamoto_consensus)。 + +这些计算机被称为_节点_。它们运行名为_客户端_的计算机软件,该软件允许它们根据协议规则验证数据,并接收和向运行相同客户端的其他节点广播信息,从而形成一个网络。客户端软件是访问区块链网络所必需的,而节点则通过独立执行协议规则来帮助维护网络。 + +![alt_text](images/client_server_nodes.jpg "image_tooltip") + +要运行区块链节点,用户需要下载访问该特定区块链所需的客户端之一。例如,要运行比特币节点,用户必须下载最新版本的 [Bitcoin Core](https://bitcoincore.org/) 客户端,而要运行以太坊节点,用户可以在多个以太坊客户端中进行选择,目前最流行的是 [Geth](https://geth.ethereum.org/) (go-ethereum)。 + +总而言之,如果用户想与以太坊协议进行交互,他们可以(i)运行一个节点或(ii)使用第三方 RPC 节点提供商,如 Infura、Alchemy 或其他。第一种方法可以让用户直接、无信任地访问协议,但需要更多的计算和存储资源。相比之下,后者的资源密集度较低(因此成为大多数用户的默认选择),但依赖于可信的第三方。第三种选择是运行轻客户端,它力求在两者之间取得完美平衡。 + + + + +## 全节点 vs. 轻节点 + +不同类型的节点以不同的方式解释数据,并提供不同的同步方法,同步是指节点能多快跟上区块链的最新状态。 + +此外,不同区块链的节点类型也不尽相同。例如,在最大的基于 PoS 的智能合约平台以太坊上,客户可以运行三种不同类型的节点:轻节点、全节点和归档节点。另一方面,在最大的基于 PoW 的区块链比特币上,客户只能运行全节点和轻节点(也称为 SPV 节点)。由于比特币和以太坊使用不同的共识算法,处理数据的方式也不同,因此不同类型的节点或客户端的运行方式也不同。 + + +### 全节点 + +运行全节点是与区块链交互的最安全、无需信任、私密且抗审查的方式。 + +从广义上讲,"全节点" 是指存储和同步区块链完整副本的计算机,它通过独立验证交易和区块并将其转发给网络中的其他节点来参与共识过程。此外,一些全节点还支持轻节点,允许它们访问点对点网络,并允许它们查询数据和传输交易。 + +![alt_text](images/bitcoin_network_interactions.png "image_tooltip") + +由于完整节点会下载、验证和存储每个区块的全部内容和状态数据,因此运行它们需要大量的存储空间、内存和 CPU 能力。例如,[运行一个以太坊全节点](https://ethereum.org/en/run-a-node/) 的最低要求是 2 TB SSD、8 GB 内存和英特尔第七代或更高的处理器。对于比特币,全节点的要求要低得多,包括 2 GB 内存、500 GB 可用磁盘空间和低级 CPU。 + +虽然这些要求在今天看来并不太苛刻,但值得注意的是,区块链的规模在不断扩大,增加了节点的计算和存储负担。例如,比特币在超过 14 年的时间里已经增长到约 500 GB,而以太坊在 8 年的时间里已经增长到超过 1 TB。为了解决这个问题——也被称为状态膨胀或状态爆炸——并尽可能保持去中心化,不同的区块链已经采用或正在积极研究不同的解决方案,包括限制区块大小和区块时间、状态修剪、状态租用和无状态。例如,与归档节点不同,以太坊全节点会修剪历史状态数据,只存储历史交易数据和当前状态;因此,运行这些节点所需的存储空间是 2 TB,而不是 15 TB。 + +无论哪种情况,全节点都无法在手机或浏览器内运行,这大大影响了它们的采用率以及区块链的去中心化和安全性。 + + +### 轻节点 + +轻节点是通过轻客户端访问区块链的计算机。它们只下载区块头,而不是下载和验证每个区块的全部内容和状态数据并存储整个分类账本的副本。 + +对于新手来说,区块大致由区块头和区块主体两部分组成。简单来说,区块主体包含完整的交易列表,而区块头只包含(除其他元数据外,如父区块的哈希值)交易和状态根。 + +举个例子,比特币区块头只包含一个根,即所有区块交易的[默克尔树根(Merkle Tree Root)](https://en.wikipedia.org/wiki/Merkle_tree)。在密码学和计算机科学中,默克尔树(Merkle Tree)是一种[基于哈希的](https://www.nervos.org/knowledge-base/what_is_a_hash_function)数据结构,可以高效、安全地验证大型数据集的内容。一笔比特币交易的平均大小约为 250 字节,一个完整的区块最多可包含约 2000 笔交易。相比之下,比特币区块头的总大小约为 80 字节,而默克尔树根的大小仅为 32 字节。 + + +![alt_text](images/merkle_tree.png "image_tooltip") + +以太坊区块头包含两个根,一个是状态根,一个是交易根,前者引用状态树(默克尔树的改进版)根哈希值,后者引用交易树根哈希值。状态树是一种紧凑型数据结构,用于存储以太坊网络的当前状态,包括合约存储数据、所有账户的余额和随机数,而交易树则包含区块内所有交易的哈希值。 + + +![alt_text](images/bitcoin_ethereum_blocks.png "image_tooltip") + +由于状态树和交易树的默克尔根以浓缩但易于验证的格式包含了所有的状态和交易数据,因此轻节点只需下载区块头就能独立验证交易。这意味着,轻节点仍必须从某个提供者那里获取区块数据或区块头,无论是直接连接到全节点(比特币的典型做法)还是 RPC(以太坊的典型做法),但不必盲目信任它们。相反,它们可以独立验证交易,同时只需利用运行全节点所需的一小部分存储和计算要求。当然,由于轻节点不直接参与共识过程,它们必须依赖的安全假设要高于全节点。 + + + +## 轻客户端如何工作? + +轻客户端是区块链的重要基础设施组成部分。它们允许用户独立验证交易,而无需下载和处理整个区块,也无需盲目信任数据提供商,同时所需的硬件仅为运行完整节点所需的一小部分。换句话说,它们的目标是在远程客户端的便利性与完整客户端的可信性和安全性之间取得 "适当的平衡",而不是在任一方面做出巨大的妥协。 + +虽然轻客户端可以用于不同的用途,包括构建无信任的跨链桥,但它们通常是在[钱包](https://www.nervos.org/knowledge-base/what_is_a_cold_wallet_(explainCKBot))的背景下讨论的。在高层次上,钱包需要:(i) 跟踪链尖(tip of the chain);(ii) 检查账户余额和随机数;(iii) 读取合约信息(如代币余额);(iv) 估算交易费用;(v) 发送交易;(vi) 监控待处理交易。为此,钱包必须通过运行完整、轻型或远程客户端与区块链进行交互。 + +对于绝大多数用户来说,仅仅为了使用钱包而运行一个完整的节点显然是不可能的。通过远程客户端从第三方 RPC 提供商处获取上述数据非常方便,这也是大多数用户选择这种方式的原因,但这种方式需要高度信任,因此并不安全。这就剩下轻客户端了,它无需信任、安全、轻便,可以在移动设备、硬件钱包或浏览器上运行。 + +### 轻客户端和权益证明 + +以太坊轻客户端的主要功能之一是简化区块链同步。以太坊轻客户端不下载整个区块,而是采用区块头优先同步的方式,大大减少了与链尖同步所需的资源和时间。 + +如果要验证交易,轻客户端只需将其与区块头中包含的默克尔树的交易根进行核对。如果区块头是合法的,交易验证过程就很简单,因为所有必要的元数据都压缩在根中。但是,由于客户无法假定区块头是合法的,这显然是出于安全考虑,因此客户必须对其进行独立验证。 + +然而,在以太坊等基于 [PoS](https://ethos.dev/beacon-chain) 的区块链中,验证区块头比在 PoW 中要复杂一些,因为轻客户端不仅要验证之前的区块头,还要验证之前的状态。也就是说,为了验证区块头,以太坊轻客户端必须验证:(i) 基本内容,包括之前的哈希值、时间戳和格式;(ii) 验证者集信息,这是状态的一部分;(iii) 验证者投票;(iv) 这些投票是否超过三分之二的份额。 + +验证区块头比验证交易更棘手,因为需要验证的部分数据取决于前一个区块头。例如,只有通过验证前一个区块的区块头才能知道前一个区块的哈希值,并且验证者集信息只能通过验证前一个块的状态来验证。这就意味着,轻客户端要确定某个特定的区块头是合法的,就需要递归验证所有区块头,直到创世区块的区块头。 + + +![alt_text](images/block_header.png "image_tooltip") + +尽管区块头文件比整个区块小得多,而且这个过程比全节点下载整个链要快得多,但轻客户端仍然无法承受这样做,并且需要更快地同步。因此,在以太坊转向 PoS 时,引入了专门为支持轻客户端而设计的[新基础设施](https://github.com/ethereum/annotated-spec/blob/master/altair/sync-protocol.md#introduction)。 + +也就是说,以太坊轻客户端可以利用信标链上所谓的 "[Sync Committee](https://eth2book.info/capella/part2/building_blocks/committees/)" 和 "[弱主观性](https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/weak-subjectivity/#ws-checkpoints)",更高效地与链尖同步。对于新手来说,信标链指的是以太坊的共识层,这是一个由运行共识客户端的节点组成的点对点网络,负责处理区块信息(传播)和共识逻辑。交易传播、执行和状态管理由执行层完成,执行层是由运行执行客户端的计算机组成的点对点网络。这两层可以通过 Engine API 相互通信,以太坊节点可以运行任何客户端组合(即轻共识客户端和完整的执行客户端)。 + +Sync Committee 是 512 个验证者中随机选出的一个子集,服务时间约为 27 小时。他们签署最近区块的区块头,并在其中包含他们的汇总签名。区块头中还包含一份预计将参加下一个 Sync Committee 的验证者名单。这就意味着,当轻客户端收到一个区块头时,可以很快看到 Sync Committee 已经签署了该区块头,并通过与之前区块给的 Sync Committee 名单进行比较,检查其是否真实。 + + +![alt_text](images/lc_and_pos.png "image_tooltip") + +这里需要注意的是,Sync Committee 并不像整个以太坊验证者集那样具有安全保证,因为它是作为轻客户端协议的一部分专门引入的,以帮助降低验证区块头有效性的计算成本。轻客户端无需验证超过 40 万个验证者签名,而只需验证轮流 Sync Committee 随机抽取的 512 个验证者的签名,从而大大降低了计算开销。不过,轻客户端必须假定 Sync Committee 的大多数验证者都是诚实的,因为对他们没有任何惩罚。因此,如果整个以太坊验证者集的大部分都是诚实的,那么从统计学角度来看,Sync Committee 签署无效区块头的可能性极低。 + +这意味着,如果超过三分之二的 Sync Committee 签署了给定的区块头,那么这个区块就极有可能在规范链中。换句话说,如果轻客户端知道当前 Sync Committee 的构成,那么它就可以通过向提供者(全节点或 RPC)询问最新的 Sync Committee 签名,从而有把握地追踪到链尖。然而,轻客户端如何获得有关最新 Sync Committee 的信息呢?它们从之前的 Sync Committee 中获取。 + + +![alt_text](images/shuffled_validators.png "image_tooltip") + +正如已经解释的那样,每 27 小时,同步委员会就会发生变化,并将签署最新区块的权力传递给下一个同步委员会。为了获得前一个同步委员会,轻客户端需要该同步委员会之前的同步委员会,依此类推,一直回到合并转换块和第一个同步委员会。如果从那里开始,轻客户端可以将链的历史记录向上移动 27 小时,或者一次移动一个同步委员会,一直移动到当前的同步委员会。 + +如前所述,Sync Committee 每 27 小时更换一次,并将签署最新区块的权力移交给下一个 Sync Committee。要获得上一个 Sync Committee,轻客户端需要该 Sync Committee 之前的 Sync Committee,以此类推,直到合并过渡区块和有史以来第一个 Sync Committee。如果从那里开始,轻客户端可以在链的历史上移动 27 个小时,或者每次移动一个 Sync Committee,直到移动到现在的 Sync Committee。 + +![alt_text](images/sync_committee.png "image_tooltip") + +每个 Sync Committee 的汇总签名都非常小,大约 25 KB,这意味着客户端只需花费很少的存储空间和精力就能同步到最新的区块头。为了进一步加快这一过程,轻客户端可以利用[弱主观性检查点](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2),从最近的 "普遍真理"(所有节点都同意属于规范链的区块)而不是合并过渡区块开始同步。从理论上讲,这种方法可以让轻客户端在几秒钟内安全无误地与链尖同步,所需的存储空间微乎其微。 + +以上就是以太坊轻客户端理论上的工作原理。现实中,有多个客户端正在开发中,但目前还没有一个可以投入使用。开发者还在努力改进轻客户端访问以太坊数据的方式。目前,轻客户端主要使用客户端/服务器模式,依靠 RPC 获取数据,但在未来,它们可以利用点对点通信协议,以更加去中心化的方式访问数据。 + +### 比特币轻客户端(SPV 客户端) + +由于 PoW 是客观的且难以伪造,因此比特币等区块链中的轻客户端或 SPV 客户端要简单得多。 + +比特币 SPV 客户端只下载区块头,而不是从整个节点下载整个区块并维护整个分类账的副本。这相当于大大降低了同步开销:每个区块的同步开销为 80 字节,而每个区块的同步开销约为 2 兆字节。与以太坊一样,比特币轻客户端通过与包含所有区块交易的哈希元数据的梅克尔树根核对来验证交易。然而,为了验证区块头本身,SPV 客户端需要下载并递归验证区块头,一直追溯到创世区块。幸运的是,验证区块头的有效性是一个非常简单的过程,因为轻客户端只需检查头中包含的工作量证明,然后遵循 "[最长链](https://www.youtube.com/watch?v=EkmvuKasWNY)" 原则,以确保它们在规范链上。 + +这里需要注意的是,SPV 客户端无法知道所有交易是否有效,也无法知道共识规则是否得到了遵守。相反,它们会假定累计哈希值最大的链是规范链,并遵循了协议的所有规则。由于矿工生成工作量证明的成本超高,因此轻节点可以放心地假设最长链上的所有交易都是有效的,而且大多数矿工或哈希值都支持相同的有效链。 + +正如中本聪在白皮书中写道:"SPV 客户端无法亲自检查交易,但通过将交易链接到链中的某个位置,他可以看到某个网络节点已经接受了该交易,而在该交易之后添加的区块则进一步确认了网络已经接受了该交易"。换句话说,SPV 客户端相信,在特定区块 X 上添加的区块越多,伪造区块 X 内部交易的难度或成本就越高。当轻客户端需要验证账本中是否包含特定交易时,它们会利用点对点通信协议,向全节点询问链的 SPV 证明和提交到区块头的默克尔树的路径。这与 "完整的" 客户端截然不同,后者通过实际检查整个链直至该区块高度来验证交易的输入是否未被花费。 + +这里需要理解的关键是,以太坊轻客户端可以利用弱主观性和 Sync Committee 在链上一次跳过 27 个小时,而比特币 SPV 客户端则不能这样做,必须将整个链的区块头文件下载直到创世区块。这意味着对于资源最有限的客户端来说,仍然会有很大的开销,尤其是考虑到运行轻客户端所需的资源与区块数量呈线性增长时。对于具有快速区块间隔和较大区块头的 PoW 区块链来说,这已经是一个主要问题。 + + + + +## 什么是 FlyClient? + +2019 年,一个研究团队提出了一种名为 [FlyClient](https://ieeexplore.ieee.org/document/9152680) 的超级轻客户端设计,旨在解决困扰当前 PoW 区块链轻客户端的开销问题。 + +FlyClient 设计的总体思路是让超轻型客户端只下载次线性数量的信息。通过下载对数(与指数相反)而非线性增加的区块头信息来验证链的有效性,FlyClient 只需存储单个区块来有效地验证链上任何交易的包含情况,而且比 SPV 客户端具有更强的安全假设。 + +FlyClient 协议通过几项创新实现了这一目标,其中包括一种新颖的、仅附加的数据结构,称为 [Merkle Mountain Range](https://talk.nervos.org/t/merging-merkle-mountain-ranges/7273) 或 MMR。MMR 允许全节点或证明者向 FlyClient 或验证者证明,他们发送的最新区块头确实是规范链的链尖,而不是分叉的无效链。 + +假设 FlyCient 从不同的全节点接收到相互冲突的信息,比如在同一区块高度有两个不同的区块头。在这种情况下,客户端可以对对数数量的区块头进行概率抽样,检查工作量证明,以找到哪个节点运行了诚实链。这种机制与嵌入在 MMR 中的巧妙加密技术一起,使 FlyClient 能够以更高的安全性假设保持与诚实链尖的同步,而所需的开销甚至只有 SPV 客户端的一小部分。 + +FlyClient 协议目前正在 Nervos 底层公链 CKB 上实施。该 FlyClient 实现——[NC-Max](https://www.youtube.com/watch?v=LYb4nO2l1js)的首个此类实现——将允许用户在任何设备(包括旧手机)上运行无信任的 CKB 节点。 + + + +## 总结 + +全节点虽然非常安全,但由于其资源需求而带来了后勤挑战。相比之下,轻客户端提供了一种简化的方法,确保高效的区块链交互,而不需要大量的资源。 + +以太坊的轻客户端和比特币的 SPV 客户端所采用的机制表明,加密行业致力于完善和优化区块链的可访问性。拥有创新设计的 FlyClient 的出现进一步说明轻客户端领域正在取得的进步。无论如何,轻客户端仍然是加密行业重要基础设施的组成部分,因为没有它们,大多数加密货币用户就不可能进行无需信任的区块链交互。