超详细的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

相关文章

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重