超详细的DFINITY底层原理分析:(一)概念解释

2023-10-14 13:40

本文主要是介绍超详细的DFINITY底层原理分析:(一)概念解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

概念概述:

ICP :

定义: Dfinity发行代币(非算法稳定币)。

主要职能:1.质押:客户端质押ICP才能成为会员。 2.维持数据中心运行:数据中心容器中需要cycle作为“燃料”运行软件。而cycle为ICP置换而来。

客户端与会员:

客户端 : Dfinity网络中的活跃参与者称为client(客户端),客户端具有永久匿名身份并且可以通过质押有一段锁定期的ICP成为会员。会员可以参与神经元网络治理,以及成为矿工,参与随机数灯塔进行输出并有可能被随机数灯塔选为一次区块公证流程中的委员会成员。

P.S. :会员作恶会被惩罚,惩罚代价除取消所得利益以外,还会被扣除所有质押的ICP。

随机数灯塔与委员会:

委员会为什么要存在:类似于DPOS算法,委员会的存在是因为随着网络的拓展,消息处理复杂性越来越大。 不同的是,EOS中使用的DPOS算法产生的委员几乎不变,而Dfinity中的委员会成员在每次共识都会随机改变。

委员会分为两种:公证委员会与提议委员会。两个委员会可以为同一组成员也可以是不同组成员。提议委员会成员对区块进行打包与提议,公证委员会成员对区块进行公证与传播。

随机数灯塔是Dfinity共识环节的重要一员,由本轮区块提议,公证的委员会运行,每个委员会都会运行一个随机数灯塔。(关于随机数灯塔的详细介绍将在第二节展开)

随机数灯塔职能为: 产生一个随机数组,这个随机数组用于指定下一任委员会成员(委员会之间进行接力,每个委员会均会如此进行),以及指定委员会成员各自提议区块的权重。

纪元 & 注册表区块(关键帧) :

Dfinity中将区块链上x个区块为一个纪元(x为系统参数),每个纪元的第一个区块为注册表区块,这个区块中记录了再上个纪元中新注册与撤销注册的副本。(创世区块也为一个注册表区块,注册表区块又称关键帧 key frame)

副本与罐 :

罐: Canister,是InternetComputer上运行智能合约(dapp)的容器,本质为WebAssembly。罐中包含智能合约编译后的字节码和数据的状态。
副本:每个Internet Computer(DFINITY)网络中的节点,都是其承载的罐(canister)的副本。

共识机制:

以第r轮区块公证为例:

一轮区块公证时间内 : 用户 -> 交易发生 -> 副本记录

首先:由第r-1轮区块高度的委员会共同运行随机数灯塔协议(主要是VRF函数),产生第r层区块高度的委员会(公证委员会与提议委员会)

然后: 产生委员会后,提议委员会成员开始从用户处获取交易,打包区块,将自身权重,区块(以及个人签名),提交给公证委员会成员

然后:公证委员会成员进行签名公证并在公证后进行广播

再然后:提议委员会收到公证区块 运行随机数灯塔产生下一代委员会

一次共识结束
在这里插入图片描述

随机数灯塔:

定义:

去中心化的随机数灯塔(DRB Decentralized Random Beacon)是Dfinity网络的随机性来源,其通过让委员会成员共同运行VRF函数来对Dfinity的随机性与安全性负责。

解释:

VRF(verifiable random function) 底层为TBLS算法,其输出的随机数在其被使用之前,无法被任何一个人(参与者或非参与者)得知,也不可以被预测(在知道所有之前的输出之后依然无法预测)

职能:

随机数灯塔由委员会的所有客户端一起运行,通过阈值接力机制,产生下一代委员会,并且赋予下一代委员会成员权重。

随机数灯塔使用之阈值接力:

阈值接力:一轮区块公证结束后,本轮次委员会根据随机数灯塔协议共同运行VRF函数产生新随机数组Er,根据这个随机数组决定下一届委员会成员并赋予提议委员会成员区块提议权重。这个过程成为阈值接力。

随机数灯塔底层 - 阈值签名与分布式密钥生成(DKG):

阈值签名:

在Dfinity中使用t-of-n方案作为阈值签名方案。采用的算法为BLS算法的阈值签名版本,称为TBLS。

(t,n)模型:

n个成员共同维护一个组密钥,有t个成员用各自的密钥进行签名后,第三方可以不再与剩下n-t个成员进行交互的情况下,还原组密钥签名。

因此,在公证环节,只要有t个公证委员会成员对一个区块进行公证后,即可对该区块进行组密钥签名,广播给其余副本,其余副本(客户端)可以将此区块添加至本地区块链副本。

解释:

TBLS算法加密具有唯一性:对一份明文,任意T(T >= t)个成员签名后进行还原得到的组签名是唯一的
组密钥:每个Group中的成员共同运行DKG来创造本委员会的组密钥。

委员会细节介绍:

委员会:

公证与随机数灯塔由所有副本中的x个规模为n的组来实现,这些组成为委员会,根据职能不同,分为提议区块的提议委员会与公证区块的公证委员会。两种委员会可以为同一组成员,也可以为不同组成员。设立委员会是因为随着成员拓展,消息的复杂度会越来越大,因此由部分委员会来执行这些职能。

解释:

对于委员会的个数:如果为数量比较小的一系列副本组成Dfinity网络,那么可能只有一组委员会,由所有副本共同运行。如果副本数量比较多,那么会考虑恶意节点导致的共识失败概率,结合失败概率计算的算法得到一个可抗攻击的规模x与n。

Reference

[1] DFINITY Technology Overview Series, Consensus System

这篇关于超详细的DFINITY底层原理分析:(一)概念解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/210878

相关文章

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程