您现在的位置是:首页 >其他 >JAVA开发(神乎其神的区块链技术之数据上链)网站首页其他
JAVA开发(神乎其神的区块链技术之数据上链)
这是我第二遍写关于区块链的博文,前一篇文章《神乎其神的区块链概念和技术》主要介绍区块链的由来和基本概念。因为博主最近在做一个区块链项目,所以有时候也遇到一些概念性的知识需要去理解,比如数据的上链。谈到数据上链,我们先了解一下现在都有什么链。
一、区块链的分类:
根据不同的条件划分大致可以分为:
公链、私链,联盟链、主链,测试链、单链、侧链、互联链、基础链、行业链。
- 根据网络范围可分为公链,私链,联盟链
- 根据部署环境可分为主链,测试链
- 根据对接类型可分为单链,侧链,互联链
- 根据应用范围可分为基础链,行业链
博主认为一个分布式的数据库与去中心化存在一定的矛盾,所以上面的链的去中心化都是相对而言。除了所说的公链代表的是整个互联网,其他的链都是小范围的数据存储,严谨的说还是有中心,有专门人管理。
公链:
- 公有链是指任何人都可读取,发送交易,且交易能获得有效确认的,任何人都能参与其共识过程的区块链
- 公有链是完全去中心化的,整个系统的运作规则和数据公开透明,没有人或者机构可以控制,篡改其中的数据,具有保护用户免受开发者影响的作用
- 公有链中程序开发者无权干涉用户,访问门槛低,也就是说,一台能够联网的计算机就能够满足访问的条件,目前市场上比较知名的公有链包括比特币【BTC】,以太坊【ETH】,波卡【DOT】,EOS,币安,索拉纳等等。
私链:
- 私有链是与公有链相对的概念,就是不对外开放,仅在组织内部使用的系统,参与的节点是有限和可控的,因此私有链具有交易速度快,隐私保护强,交易成本更低,不容易被恶意攻击等优势。
- 尤其适合比如企业的票据管理,财务审计,供应链管理等,或者一些政务管理系统等
- 私有链基本是中心化的,严格来讲不算区块链。
联盟链:
- 联盟链是部分去中心化的,介于公有链和私有链之间,其参与者是被提前筛选出来或者直接指定的
- 数据库的读取权限可能是公开的,也可能像写入权限一样仅限于系统的参与者,通常是在多个成员角色的环境中使用,比如银行之间的支付结算,企业之间的物流等
- 联盟链并不一定要完全管控,比如政务系统,有些数据是可以对外公开的。
侧链:
- 侧链是平行于主链的一条区块链,可以理解为是区块链的一种扩展协议,早期“侧链”是为了解决比特币以太坊的限制问题,比如2017年,牛市来袭,链上交易量大幅提升,超出了网络自身的吞吐能力,造成链上大面积的拥堵和延迟,所以就出现了加密猫游戏的火爆使整个以太坊网络瘫痪的事情;
- 现在可以将主链上小额零散的交易全部转移到侧链上进行,大大减缓了主链的交易压力;
- 这样做还有一个好处,就是可以保证一定的安全性,如果你的交易地址中有大量的比特币或者以太坊,相信你也不愿意让其他人知道你是拥有者,侧链也可进行简单支付验证,不需要将所有交易都过一遍比特币的原生区块链系统,所以在交易的处理速度上侧链也具有相当的优势。
测试链:
- 测试链这个很好理解,就是开发者为了方便大家学习和使用,而提供的测试用途的区块链网络,比如比特币,以太坊的测试链等
- 最后部署在生产环境的真正的区块链系统就是主链
- 不管是公链,私链,联盟链,侧链,都没有绝对意义上的优势和劣势,根据不同的应用场景,最合适的才是最好的。
二、区块链的上链:
数据上链是指用户将自己的数据加密上传到基于ipfs的公网侧链,并在公信链形成数据索引的过程。数据一旦上链,除了你本人的Data_key授权解密外,任何个人或组织都没有能力获取到你的数据,从而保证数据的绝对安全。
上链前三步走:
第一步,根据企业所在的上下游产业,设计一条链的起点和终点。理论上讲,所有产业链的起点都是大自然,终点都是消费者。但在设计一条具体的链时,不一定要覆盖到大自然,终点也未必一定要延伸到消费者。要根据每一条不同的链的特点灵活设定链的长短、起点与终点。
第二步,起点终点确定后,在每一个环节或者行业选择哪些企业上链?选择的标准又是什么?一条产业链的设计,不一定是每个环节都要选最好的企业上链,链就是最好的。这和球队选球员的逻辑类似,一个球队如果前锋、中锋、后卫都是最好的,这个球队就是最好的吗?未必!
第三步,Token的设计,包括Token的价值支撑、应用场景。股票的价值来自单个公司全部利润的分红,Token的价值则来自链上的各个环节、各个企业的贡献。比如,有的公司按照销售额,有的按利润,有的按贡献产品或服务,各种方式都可以。贡献即挖矿,都可以获得Token。
业务数据上链前需要将业务数据处理,并且对信息进行签名。这些过程可以通过对应的工具,比如序列化工具和各种椭圆曲线的签名工具来完成,不过更多的时候是通过将各种工具集成的SDK来完成,以太坊的web3就是比较典型的上链前处理的开发工具。
数据层的一大功能是存储,存储系统的选择原则是性能和易用性。一个网络系统的整体性能,主要取决于网络或本地数据存储系统的I/O性能,比如比特币用的是谷歌的LevelDB,据说这个数据库读写性能很好,但是很多功能需要开发者自己实现。
一笔交易从产生到上链完成的流程:
验证——在比特币区块链中,当一笔交易经由某个节点或钱包产生时,这笔交易需要被传送给其它节点来作验证。验证的做法是将交易资料经由数位签章加密并经由Hash函数得出一串代表此交易的唯一Hash值后,再将这个Hash值广播(Broadcast)给比特币区块链网络中的其它参与节点进行验证。
产生一笔新交易—— 一笔新交易产生时,会先被广播到区块链网络中的其它参与节点,各节点将数笔新交易放进区块,每个节点会将数笔未验证的交易Hash值收集到区块中,每个区块可以包含数百笔或上千笔交易。
决定由谁来验证这些交易?——各节点进行工作量证明的计算来决定谁可以验证交易,由最快算出结果的节点来验证交易,这就是取得共识的做法。
广播-——取得验证权的节点将区块广播给所有节点,最快完成POW的节点,会将自己的区块广播给其他节点,各节点验证并接上新区块,其他节点会确认这个区块所包含的交易是否有效,确认没被重复花费且具有效数位签章后,接受该区块,此时区块才正式接上区块链,无法再窜改资料。
交易验证完成——所有节点一旦接受该区块后,先前没算完POW工作的区块会失效,各节点会重新建立一个区块,继续下一回POW计算工作。