这些术语定义和解释了区块链和Substrate生态系统中常见的概念。公投人数自适应调整(adaptive quorum biasing (AQB))允许更灵活的治理,它取消了为投票目的而设置的任意法定人数的要求。而这种要求会导致不良的治理机制。公投人数自适应调整机制在Democracy pallet中实现。Democracy pallet为链上实体(如集体或者个人代币持有者)提供了一个接口,他们可以以积极、消极或者中立的态度召集公投。
如果针对某一项提议的投票率偏正,则提议被通过的门槛会随着参与投票的人数增加而降低,因此较高的投票率会增加公投通过的可能性。如果投票率偏负有时候也被称为默认同意,因为当投票者不参与时会算作默认通过。投票率偏中性时,则是简单的哪方投票多,哪方获胜。
aggregation常用在和FRAME相关的上下文中,aggregation或者pallet aggregation指的是把来自于多个运行时模块中相似的类型聚合成一个单个类型的过程。Pallet aggregation可以代表每个类型的相似类型。对包含了聚合类型的调用有时候叫做外部调用或者对外部对象的调用。目前,有六种数据类型可以被聚合:Call :使用一些参数调用的已发布函数;Error:函数调用失败的描述信息;Event:描述状态改变的pallet- emitted事件信息;Log:可扩展的header 项目;Metadata:用于检查上述信息;Origin:函数调用的来源。
赞成投票(approval voting)是指投票系统支持投票者投票给多个候选人(项目),到期得票数最多的人(项目)会获胜。在投赞成票时,需要注意以下几点:给所有候选人(项目)投票等同于未投票;可以通过把票投其他所有候选人的方式来反对你不赞成的候选人;FRAME Elections Phragmen pallet 在一些以Substrate为基础的链上使用同意投票作为管理委员会。author指负责创建区块的节点,区块author也叫区块生产者,在工作量证明的区块链中,这些节点叫做矿工;authority指的是节点的集合体,管理区块链网络的共识。在权益证明的区块链中,例如,在一条使用FRAME的Staking pallet 的区块链中,权限通过代币加权提名和投票系统决定。
在区块链中,authorities和validators有时指的是同一件事,但是实际上validators是一个更广泛的概念,它包含了链维护的其它方面,例如平行链的验证。一般而言,validators包含authorities(并不是很严格),也就意味着许多validators是authorities。
Aura协议通常和GRANDPA被用于混合共识协议中。Aura被用于区块的产生和短期的probabilistic finality,而GRANDPA用于提供deterministic finality。
关于区块链扩展盲分配 (blind assignment of blockchain extension (BABE)),它是一个和Aura是相似的区块生产协议。但是,在区块链扩展盲分配协议下,authorities可以基于可验证的随机函数赢得插槽,而不是通过轮流选择的方式。获胜者可以选择一条链并为其提交一个新区块。
节点故障超过达成共识所需的节点比例而导致的网络服务不可用。实现拜占庭容错的早期方法是practical byzantine fault tolerance (pBFT)。pBFT系统可以容忍多达1/3的参与者不靠谱。此系统的通信开销是n^2,n是系统中节点(参与者)的数量。
在区块链上下文中,共识是一个节点就链的规范分叉达成一致的过程。共识由authorship, finality,和fork-choice rule组成。在Substrate生态系统中,这三个要素彼此独立,并且共识通常特指authorship。在Substrate节点的上下文中,共识引擎指的是为共识任务担保的节点子系统。另见hybrid consensus。
共识算法是一个能确保参与者在彼此不互信的情况下就计算结果的状态达成一致意见的算法。因为大多数共识算法都假定达到1/3的参与者或者节点不诚实网络仍旧能正常运行是拜占庭容错的。共识算法主要关注两个重要的方面:安全性和liveness。安全性是指所有诚实节点最终都同意链的状态;liveness是指链具有持续更新的能力。关于 Polkadot network 共识策略的更多详细信息请参考Polkadot Consensus系列博客,也可以了解hybrid consensus。
密码学原语通常是用来描述基本加密概念的术语,如签名方案和哈希算法。密码学原语对于Substrate生态系统中的很多概念来说非常重要。例如:哈希算法产生哈希数据blocks,并且每个区块引用它的父区块;使用哈希加密state并且构成trie数据结构,以实现有效验证;数字签名方案用来确保不同consensus模型的安全,如authorities;密码学方案用于识别和验证在Substrate运行时执行交易的accounts。
council如果Collective pallet是网络基于FRAME运行时的一部分,那council大多数情况下指的是基于Substrate网络的Collective pallet实例,如Kusama or Polkadot 。council主要的工作是优化和平衡更具包容性的公投系统。database backend
Substrate是一个区块链开发框架,它提供了一种简单的方法来构建和管理区块链网络。以下是关于Substrate的一些关键概念:
1. 助记词(Mnemonic):用于生成随机数的一组单词,这些单词可以用于恢复加密的密钥和私钥。例如,助记词“bottom drive obey lake curtain smoke basket hold race lonely fit walk”可以用于生成多个账户,如Alice、Bob、Charlie等。
2. digest:区块头中的可扩展字段,编码了多个区块链网络中的参与者需要的信息。
3. dispatch:执行带有一组预定义参数的函数。在使用FRAME进行运行时开发的上下文中,dispatch采用纯数据,该类型就是之前所讲的Call,并且使用该数据用预定义的参数调用运行时模块中已发布的函数,已发布的函数使用了额外的参数,如origin。它允许函数安全地确定其执行的来源。
4. equivocating:一种错误或恶意行为,涉及在consensus机制中支持多个互斥选项。
5. ethash:一些proof-of-work consensus系统中所使用的一个功能。比如以太坊区块链。它由Tim Hughes带领的团队开发。
6. events:一种记录链下世界利益的方法,尤其是一些state交易的发生。在FRAME上下文中,events是组合数据类型,每个pallet可以自定义。在FRAME中,events被作为一系列暂存项目执行,在区块执行后会立即检查这些临时存储项,并且在区块初始化的时候重置。
7. executor:在给定的运行时中执行函数调用的方法,这些运行时有一系列依赖。Substrate有两个executor实现:WebAssembly和native。native executor使用嵌入在节点中原生编译的运行时来执行调用,最新的节点可以使用它来优化性能。
总之,Substrate是一个强大的区块链开发框架,可以帮助开发者快速构建和部署区块链网络。通过利用Substrate提供的各种工具和服务,开发者可以更轻松地实现各种高级功能,如去中心化应用程序(DApps)、智能合约和治理机制等。
WebAssembly执行器使用Wasm二进制文件和Wasm编译器来执行调用,无论区块链节点的版本如何,二进制文件都是最新的,因为它的更新是基于Substrate链的。
在区块链中,外部数据被包含在extrinsic中,通常分为已签名的transactions和区块创建者嵌入的inherents。此外,还存在existential deposit,即账户的最低余额。如果存款金额低于此金额,Balances pallet会使用FRAME System API丢弃账户的引用。如果一个账户的所有引用都被丢弃,可以重新获取。
finality是区块链持续进程不可逆转共识的一部分。当一个区块完成后,在不硬分叉的情况下,它封装的所有改变都是不可逆的。共识算法必须保证最后完成的区块不需要逆转,但是不同的共识算法可以定义不同的区块完成方式。在一个使用deterministic finality的共识协议中,协议保证区块链中的每个块都是规范块。在完整的链无法获得的情况下,使用deterministic finality是可取的,例如轻客户端。GRANDPA是波卡网络使用的deterministic finality协议。
在使用probabilistic finality的共识协议中,finality被用概率术语p表示,由B表示的提议块将保留在规范链中,随着B上区块的增加,p接近1。在使用instant finality的共识协议中,finality在区块产生后立即会得到保证。这种类型的非概率共识倾向于使用practical byzantine fault tolerance (pBFT)并且它的通信要较高。
fork表明区块链可以选择的不同路径。如果两个或者两个以上的区块的父块相同但是它们本身状态却不同,在这个问题没有解决之前,区块链无法继续更新。分叉不解决将会把链分裂成两条独立的链,但通过解决分叉问题,可以保证只有一条规范的链存在。
Flaming Fir是一个基于Substrate的区块链测试网络,主要用来开发和测试Substrate区块链开发框架。更多信息请参考Substrate网络和Flaming Fir, Polkadot wiki。
FRAME是一个用于构建智能合约的框架,它提供了一种简单、高效的方式来编写和部署智能合约。
以下是重构后的内容:
FRAME(Framework for Runtime Aggregation of Modularized Entities)是一种可以让开发者用一系列叫做 pallets 的组件创建区块链运行时环境的方法。它提供了一组宏,如 #[pallet::event]、#[pallet::error]、#[pallet::storage] 和 #[frame_support::pallet],以帮助开发者定义个性化的 pallet。此外,还提供了一个名为 construct_runtime! 的宏,用于构建 pallet 以创建可用的运行时并将其部署在基于 Substrate 的区块链上。
在 Substrate 代码库中,使用惯例是在核心模块前面加上 pallet_*。例如,之前的宏都定义在 frame_support 模块中,所有基于 FRAME 的运行时必须包含在 frame_system 模块中。当 frame_support::construct_runtime 宏被用作创建包含 frame_system 模块的运行时后,可以使用其他 pallets(如 Balances pallet)来扩展运行时的核心功能。
全节点客户端(full client)是一种可以以安全的方式同步区块链的节点。这种安全的方式是通过执行和验证所有逻辑来实现的,与轻客户端(light client)正好相反。轻客户端只负责验证交易,而不需要执行整个区块链上的逻辑。
genesis configuration 是指定区块链初始状态的一种机制。初始状态或第一个区块通常被称为创世状态或创世区块。基于 Substrate 的链的 genesis configuration 通过 chain specification 文件完成,该文件使得使用单个的 Substrate 代码库作为多个独立配置的链变得很容易。
GRANDPA 是区块链的 deterministic finality 机制,由 Rust 语言实现。其 formal specification 由 Web3 基金会维护。
header 是汇总区块信息的结构,主要包含轻客户端使用的加密信息。尽管 header 获得的是最小安全性,但它能够实现链的高效同步。
hybrid consensus 是区块链的一种共识机制,结合了权益证明(PoS)和委托证明(DPoS)的特点。在这种机制下,节点需要质押一定数量的代币作为保证金,以便参与到区块链的安全验证和出块过程中。
Substrate是一个由波卡网络开发团队开发的区块链框架,它采用了类似于React的组件化设计,使得开发者可以更加方便地构建自己的区块链。Substrate提供了一些核心组件,包括共识协议、JSON-RPC、keystore、Kusama、libp2p、light client、macro、metadata和node等,这些组件可以帮助开发者快速构建自己的区块链。
其中,共识协议是Substrate的核心之一,它由用于生成区块和确定finality的独立或者耦合的机制构成。Hybrid consensus既可以让链像概率共识协议一样快速发展,比如 Aura,又可以让链保持像deterministic finality 共识协议那样的安全性,比如GRANDPA。通常而言,区块生成算法比 finality 机制更快。将区块的生成和最终化分开让Substrate 开发者可以更好的控制其链的性能。
JSON-RPC是一种以JSON格式编码的无状态的、轻量级的远程调用协议。JSON-RPC提供了一种使用JavaScript对象符号的标准方式在远程系统上调用函数,对于Substrate,这个协议通过 Parity JSON-RPC 库实现。
keystore是Substrate上的一个子系统,用于管理用来产生新区块的密钥。
Kusama是一条基于Substrate的区块链,它采用了和波卡网络相似的设计。它是一个 canary网络,被称为波卡网络的”野表亲“, 作为canary网络,Kusama预计会比像Westend这样的测试网络更加稳定,但是不会像波卡这样的生产网络稳定。作为canary网络,Kusama由它的网络参与者控制,主要为了让其变得更稳定以促进有意义的实验。
libp2p是一个点对点的网络堆栈,允许使用多种传输机制,包括WebSockets(在Web浏览器中使用)。Substrate使用的是 libp2p 网络堆栈的Rust实现。
light client是一种不会存储链状态和产生区块的区块链节点。一个轻客户端能够验证加密原语并暴露一个远程调用(RPC)服务器,能够让区块链用户和区块链进行交互。
macro是编程语言的一种特性,能够让开发者编写一系列可以一起被命名和执行的命令。FRAME开发环境为Rust提供了几种宏,可以用来编译一个运行时。
metadata提供了关于系统多个方面的信息,metadata展示了关于Substrate 区块链的信息,它能够让你和系统交互。
node则是运行Substrate应用程序所必需组件之一。
区块链客户端运行的实例是每个客户端都是对等网络的一部分,它能够让区块链参与者彼此交流。Substrate节点可以在区块链网络中扮演很多角色,比如,产生区块的节点可以充当区块链验证者的角色。运行轻客户端的节点能够在资源受限制的环境中如 user interfaces或在嵌入式设备中促进交互。
nominated proof-of-stake (NPoS) 是一种确定validators or authorities 的方式,基于他们stake的意愿,这能够维持一个或者多个区块链节点正常运行。
origin 是一种FRAME原语,用来标记调用进运行时的函数来源,FRAME系统模块定义了三个内置的来源来源,作为一个pallet开发者,你可以自定义origin,就像在Collective pallet定义的那些origin一样。
pallet 是一个可用于扩展基于FRAME运行时的能力的模块,它和特定领域的逻辑和运行时原语绑定在一起,比如events和storage items。
parachain 是 Polkadot network。波卡是一个区块链网络,充当异构区块链网络的中心枢纽,作为中继链,它通过提供基础设施和安全性来支持其它链—如平行链。
proof-of-finality 是可用于证明特定区块已完成的数据。
proof-of-work 是一种共识机制,通过要求网络参与者的工作量来阻止攻击。例如,一些工作量证明系统要求参与者使用Ethash函数计算一个哈希值作为已完成工作量的证明。
relay chain 是多个区块链异构网络的中心枢纽,中继链是在网络中为其它链提供基础设施和安全性的区块链,尤其是为了提供共识,中继链可以让平行链相互交流和交换数字资产而无需彼此信任。
remote procedure call (RPC) 是一种和计算机程序交互的机制,remote procedure call能够让开发者请求远程计算机程序和用他们提供的参数调用程序逻辑,Substrate节点在HTTP和WebSocket端点上暴露了一个RPC服务器。
rhododendron 即instant finality、byzantine fault tolerant (BFT) 共识算法。众多采用pBFT共识协议的区块链采用的共识算法之一。rococo 则是一种基于Vue.js 2.0构建可复用UI组件库的方法论和最佳实践。
波卡网络平行链测试网络是一个基于Substrate的不断发展的系统,用于测试异构区块链网络的性能。在区块链中,区块的执行逻辑被称为runtime,它为节点提供了状态转换功能。在Substrate中,运行时以ebAssembly二进制文件的形式存储在连状态中。
Slot是一种时间间隔,类似于Aura和BABE等共识引擎使用的固定、相等的时间间隔。在每个插槽中,可以创建或必须创建权限子集来创建区块。stake-weighted voting是一种民主投票系统,其中每个Token有一票,而不是一人一票。
State是在区块与区块之间长久存在的加密数据,作为块状态转换函数的一部分,可以用来创建新区块。在以Substrate为基础的区块链中,状态存放在支持高效创建增量摘要的trie数据结构中。这个trie作为一种简单的键值map暴露给了运行时,其中键和值都可以是任意字节数组。
State transition function (STF) 是区块链的逻辑决定如何在处理区块时改变state。在Substrate中,状态转换函数实际上等同于运行时。Storage item是Substrate,一个用于构建模块化、高效和可升级区块链的灵活框架。它由Rust语言构建,并由Parity Technologies维护。
Transaction是一种可以在网络节点间安全传播的extrinsic,可以被签名和签名扩展来验证。Transaction era是一段被定义的时间,用于描述一系列区块的数字。在此期间,交易包含在区块中,transaction eras用来防止交易重复攻击。在这种情况下,账户会被重置,防止双重支付的随机数会被重置为0。
Transaction pool是一系列虽然还没包括在区块中但是已经被认定有效的交易集合。标记交易池是一个交易池的实现。它允许运行时指定给定的交易是否有效、应该如何确定它的优先级以及它与池中的其他事务在依赖性和互斥性方面的关系。标记交易池实现被设计为可扩展的和通用的,足以表达未花费的交易支出UTXO模型和基于账户的交易模型。
Trie(Patricia Merkle Tree)是一种表示键值对的数据结构。
Substrate是一个基于区块链的应用框架,它提供了一些内置的数据结构和库,以帮助开发人员构建高性能的区块链应用程序。其中之一是Patricia Merkle Trie数据结构,它可以让使用加密哈希存储和检索数据组合中的项目。这种数据结构可以高效地检索数据集,即使数据集非常大。
Substrate还提供了validator来帮助维护区块链网络的半可信或者不可信的参与者,他们在激励机制下会做出有益于整个网络的行为。在Polkadot中,validators也管理着一些其它事务,比如保证数据的可用性和验证平行链的候选区块。
WebAssembly(Wasm)是一种执行架构,可以高效、跨平台地表示确定的、机器可以执行的逻辑。WebAssembly可以用很多语言编译,包括Rust语言。基于Substrate的区块链使用WebAssembly二进制文件提供可移植的运行时,这些运行时可以作为链状态的一部分。
Westend是一个由Parity维护的基于Substrate的区块链,并且作为一个测试网络服务于波卡网络。