区块链上的数据库:CovenantSQL

2023-11-03

【引言】

最近对区块链技术有一些兴趣,区块链技术估计这个名字已经被大家所熟知了,但区块链数据库估计还没几个人知道。目前国内有两种数据库RepChain(中科院研发)和CovenantSQL ,本文讲重点讲解CovenantSQL 这一新兴区块链数据库。
区块链数据库的优势主要体现在信任、溯源、数据共享、数据交易、数据交换上。

不懂? 接着往下看。

以下文章转自如下链接,根据本文理解做了适当调整。

https://zhuanlan.zhihu.com/p/42517534​

区块链数据库为什么开头有这样的想法?因为我们相信传统应用中对区块链是有诉求的,不管是信任、溯源、数据共享、数据交易、数据交换,相信这些都是有应用点的。所以把区块链技术和分布式数据库进行结合,希望做出新一代的数据库系统。
CovenantSQL 是应用区块链技术构建的去中心化 SQL 云数据库,

结合了区块链、共享经济、分布式数据库的优势,保障了用户隐私及对数据的所有权。
CovenantSQL 具备以下特点:
SQL接口: 支持 SQL-92 标准,传统 App 几乎0修改即可数据上链
去中心化: 基于独有的高效拜占庭容错共识算法 Kayak 实现的去中心化结构
不可篡改: CovenantSQL 中的 Query 历史记录是可追溯的
隐私: 如果 Bitcoin 是人们的私人钱包,那么 CovenantSQL 就是是人们的去中心化的私密数据库
相信在下一个互联网时代,每个人都应该有完整的数据权利。
CovenantSQL 原理
CovenantSQL 是一个运行在 Internet 上的开放网络,主要有以下三种角色组成:
主链节点:

通过去中心化的架构,DPoS 模式的共识机制对矿工和用户进行撮合、协调、仲裁
侧链矿工:
所有人都可以通过运行 Covenant Miner 来提供数据库服务来赚取奖励
通过 ETLS 传输层加密、应用层签名、落盘加密、端到端加密来保证用户数据隐私
数据库用户:
用户通过一个私钥就可以创建指定数量节点的分布式数据库,存储自己的结构化数据
数据矿工的分布和地址仅对数据库用户可见,防止用户数据被嗅探
通过 去中心化的高可用的架构 和 Miner 押金机制,用户的数据可以在成本和可靠性、可用性上达到平衡可控
image.png

第一层:全局共识层(主链,架构图中的中间环):
整个网络中只有一个主链。
主要负责数据库矿工与用户的合同匹配,交易结算,反作弊,子链哈希锁定等全局共识事宜。

第二层:SQL 共识层(子链,架构图中的两边环):
每个数据库都有自己独立的子链。
主要负责数据库各种事务的签名,交付和一致性。这里主要实现永久可追溯性的数据历史,并且在主链中执行哈希锁定。

第三层:数据储存层(支持 SQL-92 的数据库引擎):
每个数据库都有自己独立的分布式引擎。

主要负责:数据库存储和加密;查询处理和签名;高效索引。

做点有意思的事情

很喜欢Jeff Hammerbacher说过的一句话:
The best minds of my generation are thinking about how to make people click ads.

作为One of the best minds,当你不再需要为了生计而去努力,你最想去做点什么呢?也许人的一生应该办一点事,留一点痕迹。

2017年冬天,freebsd来北京,约我在知春路撸串,还是那个当年一起吃着火锅鄙视着MongoDB用BSON做存储的学长给我描述了一个有意思的想法。又想起了他河畔签名上的那段中二的话:“西天取完了经,东边应该还有,伙伴们好不好让我们再拯救地球……”

这个想法大致就是:
把闲置的计算机利用起来,通过一套Code Law组成一个分散的,支持SQL查询的数据库,用户和数据库矿工可以在Code Law的限制下完成撮合和价值交换。

经历了刚接触Bitcoin这个idea时候的兴奋,把全部身家买了比特币,起起伏伏,最后失望清盘……
经历了Blockchain概念被单独提出时,甚至想过用Blockchain的idea重新写一版Boinc(Berkeley的Volunteer computing框架,能让用户电脑在闲置的时候用于各种科学计算,包括“寻找外星人计划”),但最后还是没能下定决心……

经历了Ethereum横空出世,但现在看来最大的用途竟然是割韭菜……

无奈这个时代,人人都想布局未来,一夜暴富。但思想的碰撞需要时间、理论的成熟需要时间,编码落地需要时间。互联网热潮催生了一波.com泡沫,照目前自媒体的发达程度来看区块链离真正落地,至少还差三波泡沫……
但这一次,我决定为了一个idea全力以赴一次,即使失败了,也希望后世踏着我们倒下的身躯冲上更高的地方。拿着烤串的我当即决定离职,做点有意思的事情……

现在想来,选择去做这么底层的东西,可能部分源自于我们对数据库的中二执念,更多的则是改变数据&隐私混乱现状的愿望:
下一代的互联网,所有人都应该拥有自己数据的完整权益(Data Rights)

Data Rights
数据放在自己的电脑里固然比较安全,但也容易意外丢失,也不方便查阅。无论是Facebook还是微信、各种云盘,用户的数据几乎都是存储在大佬控制的数据库里。数据是你的也是互联网大佬的,但最后还是互联网大佬的,而且还是你自己确认了使用条款的。
网上的各种数据,大致可以分为两类:
个人数据

例如:个人的身份&账号信息;各种私人财产;个人发布的各种内容;在各种应用、网站的历史数据。
现状:隐私泄露,被数据挖掘,被侵犯数字版权。
愿望:每个人都应该拥有个人数据的读取、修改的控制权,以及盈利、授权的权利。

公共数据

例如:Wikipedia等各种共同创作的作品;人类文明沉淀下来的知识;各种被作者分享给所有人的数据。
现状:各种wiki被恶意篡改失去公信力,各种论文、文献被挟持用来盈利,有价值数据的生产者得不到任何好处,有时连署名权都不能保证。
愿望:知识的生产、积累是一个共同创作的过程,每个人的贡献应当被记录。

《硅谷》里Richard描述了一个“去中心化的互联网”,其中必不可少的就是一个去中心化的数据库。传统数据库遇到了区块链,数据的Insert、Update、Delete变成了Append,“追加而不是覆盖”让数据的历史可以被完整记录。
image.png

Blockchain的很多设计和Git有相似之处,比如:Merkle Tree

Read-Only
为了改变现状,有很长的路要走,一个去中心化的数据库,为用户控制自己的数据至少提供了可能性。
举一个简单的例子:未来我们的个人数据,都可以存储在去中心化的云端数据库,像比特币一样,我们可以通过一个密钥完全的控制自己的数据。我们可以制定一个类似信用卡行业PCI DSS的标准,我们暂且叫做GDSS(General Data Security Standard),核心是要求厂商对于用户的数据严格执行 限定用途、用后删除 的原则。例如假设Facebook是我们可信的厂商,遵循GDSS,我们可以给Facebook一个我们授权仅可以读取我们姓名、年龄、朋友列表的密钥。同时,Facebook对于我们数据的每次读取都会被记录,如果我们发现Facebook用我们的数据做了一些我们不希望的事情,可以随时吊销这个密钥并进行追责。
再比如:大数据行业的创业公司或者研究机构最为头疼的事情莫过于没有数据,普通的用户可以通过收费的形式对这些研究机构进行数据授权。这样就可以形成一个双赢的局面,避免存储了大量我们数据的巨头的 数据霸权。
目前欧盟的GDPR是一个在这方面非常领先的标准,非常值得借鉴。
Team Up
做过了无数的大大小小项目,都明白程序开发是个非常复杂的工作,有很多相似经验教训让我们有了共识:
项目开发一定要有清晰、可以量化的细粒度的目标。
不要进行全盘推翻式的重构,重构一定要分模块进行,并且保证接口一致。
项目早期,尽量少写代码来完成功能,而不是写更多代码去面向未来编程。
想到的太多,很乐意在讨论区一起聊聊经历过的项目给你带来的各种感悟……
2018年4月,CovenantSQL开始了第一行代码。创建github项目的时候没啥灵感,就临时取了ThunderDB这个名字。后来才通过引经据典想到了Covenant这个生僻的词,翻译成中文应该叫“契约”。最近这个词被提到还是因为这部电影:Alien: Covenant (2017)
Architecture

熟悉分布式系统原理的同学知道,从CAP theorem的角度出发,Blockchain是一种最终一致性算法。
Bitcoin为典型的Blockchain 1.0使用的PoW主要是为了应对非可信网络、节点的问题。从通俗的角度出发,几乎我们都有这样一个经验:“参与的人越多,决策效率越底下”。
似乎也是意识到同样的问题,以EOS为首的新一代Blockchain系统都采用了类似“内阁制”的DPoS。CovenantSQL在设计之初就考虑到这个问题,采用了下图所示的分层架构:

image.png
CovenantSQL Architecture

CovenantSQL的架构主要分为三层:
结算共识层(主链,架构图中中间的环):
整个网络只会存在一个主链。

主要负责:数据库Miner和使用方的合约撮合、交易结算,反作弊,侧链的锁定哈希等全局共识事务。

SQL共识层(侧链,两侧的环):

每个数据库都会有自己独立的侧链。
主要负责:数据库各种Transaction的签名、传递和一致性的达成,永久可追溯的数据历史主要在这里实现,并在主链进行哈希锁定。

数据库层:

每个Database有自己的独立分布式引擎。
主要负责:数据库的存储&加密,查询处理&签名,高效索引。
三层的设计互相进行哈希锁定保证数据的不可篡改,由顶向下依次根据需求的不同,采用不同的共识算法和更小的共识范围,达成更高的共识效率和性能。
How We Work
观察CovenantSQL的commit history可以发现,CovenantSQL的构建是一个Bottom Up的过程,首先是各个独立的模块,测试工具,经历了4个多月的密集开发,我们才正式构建出一个主程序。这么做的好处是显而易见的:CovenantSQL的模块单测覆盖率基本都在75%以上,很多CovenantSQL的模块可以单独被使用。

image.png
CovenantSQL Coverage Statistics

CovenantSQL/GNTE
image.png

GNTE

为了模拟CovenantSQL节点遍布全球的情况下的网络环境,做了一个叫GNTE(Global Network Topology Emulator)的小工具,只要写一个YAML配置,运行一条命令,就可以模拟一个中国到美国的网络容器,比如:1Mbps带宽、延迟1200ms、1%概率 ±10ms。

这个项目发布两个月,已经171 Star了,Github传送门:CovenantSQL/GNTE

CovenantSQL每个版本的发布都会进行:
接近80%行覆盖率的自动化单元测试
包含线性一致性测试在内的各种集成测试
GNTE模拟全球网络环境进行集成测试

CovenantSQL/HashStablePack

HSP是我们构建的另外一个小工具,可以根据我们定义的golang的各种类型、Struct,自动生成序列化的接口func(v *Type) MarshalHash() ([]byte, error),并且无论多复杂的Struct,只要存的内容是一样的,生成的[]byte都是内容一致的。

主要原理就是分析golang代码,生成AST(抽象语法树),根据AST上不同类型生成不同的MarshalHash函数。这样就避免了运行时用Reflect反射造成的大约两个数量级的程序变慢。CovenantSQL主要用这个工具在生成计算区块哈希的代码。

当然,甚至单元测试代码都是自动生成好的。更详细的使用方式可以看这里:CovenantSQL/HashStablePack

DH-RPC

这部分的文档和示例还没有完全准备好,先简单介绍一下,后面单独写篇文章介绍它。DH-RPC是一套利用DHT替代传统的CA证书,进行去中心化P2P加密通信的RPC框架。

详细介绍可以看这篇文章:https://zhuanlan.zhihu.com/p/43888213
文档和Demo,请移步Github:https://github.com/CovenantSQL/CovenantSQL/tree/develop/rpc

目前CovenantSQL的主要功能大致已经开发了90%,测试网也正在搭建中,可以在Github上关注我们的进展:
https://github.com/CovenantSQL/CovenantSQL

转文至此。

欢迎关注个人微信公众号“一森咖记”
image.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链上的数据库:CovenantSQL 的相关文章

  • Ubuntu设置脚本、程序开机自启动

    Ubuntu设置脚本 程序开机自启动 方法1 修改 etc rc local 方法2 用update rc d命令添加开机执行脚本 方法3 使用 crontab 方法4 使用 systemd 服务 Centos 注 方法1 修改 etc r
  • 提交表单区别

    html按钮有两种
  • C++内存管理

    http blog csdn net zhanghefu article details 5003383 内存管理是C 最令人切齿痛恨的问题 也是C 最有争议的问题 C 高手从中获得了更好的性能 更大的自由 C 菜鸟的收获则是一遍一遍的检查
  • 深入理解AMBA总线——AXI原子访问机制和AXI响应

    本篇文章给大家讲解AXI协议的原子访问机制 1 Atomic访问机制 1 1 Atomic信号 众所周知 操作系统的很多机制需要底层硬件的支持 如并发 虚拟化等 随着多处理器的流行 arm也自然而然的要做其总线上加入和并发相关的信号 以满足
  • 【kubernetes系列】k8s ingress配置websocket支持

    背景 公司的后端同事在代码调试过程中需要上传一个文件 调用的websocket接口 了解同事需求和现象 浏览器上传文件一直卡主 通过浏览器调试模式发现无法正常获取websocket的连接 websocket的接口访问可以通过wscat命令
  • CTFHUB-Cookie注入

    Cookie Cookie 浏览器向服务器发送请求时发送cookie 或者服务器向浏览器附加cookie 就是将cookie附近在这里的 例如 Cookie user admin HackBar Load一下 BurpSuite等工具也可以
  • vuex固化插件的使用

    数据持久化 刷新页面 vuex里面数据丢失 清空 有时候我们需要把一些数据固话到本地 即使刷新也不能清空 第一步 需要先下载插件 npm install vuex persistedstate save 第二步 在 store index
  • linux配置SVN,添加用户,配置用户组的各个权限教程

    前言 今天组长要我给新员工添加svn 的权限 以及赋予他们权限访问指定的目录 于是就顺手写个教程吧 毕竟好记性不如烂笔头 一 xshell登陆服务器 用xshell登陆服务器 cd切换到服务器中svn的项目仓库目录中 然后切换到conf文件
  • java利用freemark和itext出pdf文件

    第一步导包
  • Navicat Premium

    一 简介 Navicat Premium 是一套数据库开发工具 让你从单一应用程序中同时连接 MySQL MariaDB SQL Server Oracle PostgreSQL 和 SQLite 数据库 它与 Amazon RDS Ama
  • 计算机基础汇总

    计算机基础汇总 时间复杂度 https blog csdn net qq 41523096 article details 82142747 数组与链表 https blog csdn net qq 25806863 article det
  • normalize.css在vue中使用

    css样式初始化 normalize在vue中使用 1 Normalize css只是一个很小的css文件 但它在磨人的HTML元素样式上提供了跨浏览器的高度一致性 相比于传统的CSS reset Normalize css是一种现代的 为
  • CUDA - 在CUDA C/C++中使用共享内存

    原文链接 Using Shared Memory in CUDA C C 文章目录 共享内存 线程同步 共享内存示例 静态共享内存 动态共享内存 共享内存bank冲突 配置共享内存数量 总结 在上一篇文章中 我研究了如何将一组线程的全局内存
  • F12复制返回的json

    第一步 打印返回的数据 然后打开控制台 第二步 在打印的res右键出现会出现Store as global variable 然后点击 出现temp 第三步 在控制台输入copy temp 第四步 这个时候已经复制好json了 直接粘贴到t
  • 计算除法java实现

    class Solution public double calcEquation List
  • ROS报错[joint_state_publisher_gui-1] process has died [pid 70747, exit code 1, cmd...

    1 报错 终端里运行 roslaunch mbot description display mbot launch 出现报错如下 joint state publisher gui 1 process has died pid 70747
  • 凹下去的白色按钮

    先看效果 再看代码
  • 关于分页的参数说明

    使用分页 如果Pageable是不是为null 此代码说明如果不为null PageHelper startPage currentPage pageSize true 第一个参数表示从第几页开始 第二个参数表示一页多少条记录 第三个参数表
  • Unity鼠标事件详解

    鼠标事件详解 1 3D物体 OnMouseDown 鼠标按下 OnMouseDrag 鼠标在按下时拖动 OnMouseUp 鼠标抬起 OnMouseEnter 鼠标进入 OnMouseExit 鼠标离开 OnMouseOver 鼠标经过 O
  • bert第三篇:tokenizer

    文章目录 tokenizer基本含义 bert里涉及的tokenizer BasicTokenzer wordpiecetokenizer FullTokenzier PretrainTokenizer 关系图 实操 如何训练 训练自己中文

随机推荐

  • Google Play的QUERY_ALL_PACKAGES或REQUEST_INSTALL_PACKAGES权限问题

    情况1 你的应用需要使用QUERY ALL PACKAGES权限 就按照Google Play政策要求上传这块功能视频了 情况2 应用不需权限 就把自己AndroidManifest xm中两个权限删除
  • 【华为面试题】动态规划

    题目 题目描述 一个充电站有n个不同功率的充电设备 您的任务是从中选取若干个设备 使得他们的总功率最接近但不超过充电站的最大输出功率P max 输入 第一行 一个整数n 代表充电设备的数量 第二行 n个整数 分别代表每个设备的功率 第三行
  • 新的日期和时间( Java 8 )

    为什么我们需要新的Date和Time类 Java8之前所有的日期类都是可变的 这就导致了线程不安全问题 java的日期和时间类的定义不一致 在java util和java sql中都包含日期类 java util Date同时包含日期和时间
  • CAN2.0和J1939协议的关系

    转发自http www cankau cn support help can vs j1939 html 很长时间没搞明白j1939与CAN2 0的关系 这篇文章让我明白了 CAN2 0是一种总线规范 是数据链路层的技术 J1939是SAE
  • Anaconda的升级及环境管理

    Anaconda的升级及环境管理 1 提高conda install的速度 1 添加清华源 conda config add channels https mirrors tuna tsinghua edu cn anaconda pkgs
  • 机房服务器维护表,服务器机房维护记录表

    服务器机房维护记录表 内容精选 换一换 通过内网连接云手机实例时 需要在租户VPC中创建一台弹性云服务器 作为连接云手机的跳板机器 若创建云手机服务器时未使用自定义网络 还需在云手机租户的VPC和服务器所在VPC之间建立对等连接 如图1所示
  • 正则表达式练习

    function region 定义正则表达式 const reg 前端 g test const res reg test 学java 找黑马 console log res exec const res reg exec 学好前端 找黑
  • 从4行代码看右值引用

    从4行代码看右值引用 从4行代码看右值引用 概述 右值引用的概念有些读者可能会感到陌生 其实他和C 98 03中的左值引用有些类似 例如 c 98 03中的左值引用是这样的 int i 0 int j i 这里的int 是对左值进行绑定 但
  • TensorFlow 1.8.0 + TensorRT 4.0 安装过程 (5月11日更新:目前在Ubuntu 18.04不可行)

    在上一篇 基于tar文件的TensorRT 4 0安装过程 中 完成了TensorRT的安装 但由于其语言环境为C 因而无法与TensorFlow结合 TensorFlow 1 7 0 已经集成了TensorRT 但需要从头编译安装 现记录
  • Android 应用详情中修改权限后应用崩溃

    Android 应用详情中修改权限后应用崩溃 一 问题描述 在有fragment 没有空构造函数 或者私有空构造 的页面 应用进入后台 手动进入应用详情修改应用权限 重新打开应用 应用崩溃 二 问题排查 1 经网络查询得知后台修改应用权限后
  • unity3d简单的粒子特效

    实现目标 实现一个简单的粒子效果 实现过程 首先创建一个空的对象 然后添加一个Particle System 编写控制粒子运动的脚本 在Start函数中对需要用到的参数进行初始化 particleArray new ParticleSyst
  • Postman接口测试

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 它提供功能强大的 Web API HTTP 请求调试 B站最通俗易懂 Python接口自动化测试从入门到精通 超详细的进阶教程 看完这套视频就够了 1 环境变量
  • 数据库拆分3--使用sharding-jdbc 支持子查询sql

    最近在使用sharding jdbc来改造项目的时候遇到了一些问题 主要是有关子查询的 记录一下 结论 4 0 0 RC1版本是有限制支持子查询的 主查询和子查询必须保证相同的分片键 4 4 1可以支持子查询 子查询判断条件恒为false
  • Vision Transformers for Dense Prediction

    paper https arxiv org abs 2103 13413 code https github com intel isl DPT Abstract 我们引入了密集视觉转换器 这是一种利用视觉转换器代替卷积网络作为密集预测任务
  • 悬浮球(多机型悬浮窗权限设置,状态栏适配,可自动或手动设置大小,点击跳转WebView,拖拽处理)

    悬浮球 多机型悬浮窗权限设置 状态栏适配 可自动或手动设置大小 点击跳转WebView 拖拽处理 应用内和应用外都可以显示 可设置取消 可做SDK 和依赖类 横竖屏切换处理 项目地址 GitHub https github com gitU
  • kibana使用

    kibana更新6 更新后运行kibana要求elasticsearch5 版本 更新elasticsearch 下载并安装 public signing key rpm import https artifacts elastic co
  • 英飞凌单片机编译器 TASKING TriCore Eclipse IDE

    新建静态库工程 右击新建c c 工程 也可import导入工程 工程名 不要有中文 勾选TC39X 完成工程的创建 在工程右键选择clean 对project先进行clean project 再build project 对于文章出现的任何
  • 第一章、银行会计的基本原理和基本核算方法

    各位技术大牛 这一系列的blog主要是介绍银行会计的操作实务 希望为在初入银行的技术人员提供一些业务逻辑上的帮助 内容分为以下几个章节进行分析 银行会计的基本理论和基本核算方法 人民币存款业务会计核算 人民币贷款业务核算 联行往来业务的核算
  • arcgis表转excel一直失败_Excel表转换为shp格式时属性值丢失问题

    早前在网上扒拉一些数据 放到excel中进行加工 然后加载到arcgis中 生成点要素 然后转为shp格式文件 但是在此过程中遇到了一些小问题 有些字段的信息在转换过程中会丢失 一开始我以为是我的excel编码的问题 但后来捣鼓了好多次 都
  • 区块链上的数据库:CovenantSQL

    引言 最近对区块链技术有一些兴趣 区块链技术估计这个名字已经被大家所熟知了 但区块链数据库估计还没几个人知道 目前国内有两种数据库RepChain 中科院研发 和CovenantSQL 本文讲重点讲解CovenantSQL 这一新兴区块链数