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

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语