区块链入门:数据如何上链

  • A+
所属分类:区块链

一、区块链剖析

区块链是比特币等数字虚拟货币的底层技术,通过去中心化的数据记录,由全网所有的节点共同维护数据,实现安全地存储数据,具有不可伪造性、不可篡改性、可追溯性、匿名性等特点。

区块链的去中心化技术方案是以区块为基本单位来管理和存储数据。区块由两个部分的数据结构组成,分别为区块头部和梅克尔树结构。区块的头部包括矿工可以修改的临时随机数、前序区块的哈希值、时间戳、挖矿难度、交易树的树根等数据。区块的另一部分是梅克尔树,用来存储有效交易。当包含交易数据信息的区块有序链接时,就形成了区块链。

区块链入门:数据如何上链

二、区块链“上链”究竟上的什么

区块链的本质其实是一个分布式数据库。当然,它的特点在于除了物理上的分布式外,逻辑上也是“分布式”的。既然是数据库,那么它里面记录的肯定是“数据”。那么都可以存些什么数据在里面呢?

最早的区块链——BTC区块中主要就是记录的BTC交易数据。是的,在它的每个区块中真的是记录得一条条的转账交易记录,也就是说BTC这个货币仅仅是作为一种数据记录在区块链中。

虽然它本身并不是构成区块链的前提条件,但它在区块链体系中又是不可或缺的一环,因为要靠它来促进新区块的产生(也就是挖矿)。因为数据是记录在区块中的,如果没有新的区块产生,那么就无法记录新数据,整个区块链就几乎失去了生命。(为什么说几乎,因为已经上链的数据还是有价值的,相当于一份可靠的存档),所以现在的每种区块链,基本上都有自己的货币,以至于很多小白用户直接把区块链和币划等号。区块链,货币,傻傻分不清楚~_~

区块链入门:数据如何上链

在2009年1月3日中本聪创造的第一个区块,即创世区块中,就记录了一句话:

TheTimes 03/Jan/2009 Chancellor on brink of secondbailout for banks

(2009年1月3日,财政大臣正处于实施第二轮银行紧急援助的边缘)

中本聪将这一事件在第一个区块链中永久的保留了下来。这也算是后来一些BTC刻字服务的鼻祖了。区块链最主要的作用是能够保证上面的数据不被篡改。现在通常我们检验数据是否有改动,会通过对原始数据做md5之类的hash摘要,然后通过对比前后摘要值,来判断原始数据是否被修改过。而hash值又是很小的一个字符串(md5是32字节,sha1是40字节),这就完全可以写到区块中啦。

说的这里,相信就不用再多说了吧,遗嘱公证、财产公证、版权问题等等,大家应该可以自行继续广开脑洞了。

至于不被毁灭嘛,这个只能做到上链数据本身不被毁灭,链外数据由于不在分部署数据库中,所以也没办法。

区块链入门:数据如何上链

区块链能够解决链上数据的真实性问题,不是说防篡改,而是篡改成本极高,导致不去篡改。但是不能解决数据上链之前的准确性问题,这并不仅仅是区块链技术所面临的问题,这是所有的技术都面临的一个问题,所以不能单靠区块链去解决。

另外一个就是数据上链过程中,如何保证在各个环节不被遗漏?如果有人为因素在里面,就很容易或出错或遗漏或篡改。这就需要结合其他的技术手段来帮助我们将数据准确的传递到区块中。

三、数据上链意义

数据上链是指用户将自己的数据加密上传到基于ipfs的公网侧链,并在公信链形成数据索引的过程。数据一旦上链,除了你本人的Data_key授权解密外,任何个人或组织都没有能力获取到你的数据,从而保证数据的绝对安全。

3.1上链对个人

1、数据即资产,用户的数据中蕴藏着巨大的价值,数据被使用过程中产生的经济利益,将直接回馈给用户本人;

2、数据上链后,任何数据使用的请求,都必须通过你本人的授权才能实现,确保个人拥有数据所有权,不必担心数据被盗用而不知情的状况了;

3、基于多维度的数据,你可以构建可信的数字身份,在与人协作时、寻找资源时,大大降低别人信任、了解你的成本,提升了“连接”的效率。

区块链入门:数据如何上链

3.2上链对公众

提高数据传输速度——传统的云存储系统允许你将数据上传到云服务器。之后,服务提供者负责在其数据中心保存这些信息。除非特别要求,否则数据中心与你或你的客户通常不会在同一个地方。根据地理区域的不同,数据访问可能会出现延迟,因为在到达你的服务器之前,信息要在不同的服务器之间传输。

降低社会信任成本——利用区块链技术,经过用户的授权,公信宝帮助用户采集自己的数据并加密保存至区块链上,同时将数据私钥Data-Key交给用户本人管理,由用户完全掌握所有权和支配权,用户将数据上传到区块链上,通过私钥掌控自己的数据,分享自己数据使用产生价值,并生成自己的可信数字身份(G-ID),在与人协作中大大降低信任成本。

提升数据安全和隐私保护——利用区块链分布式记账技术将数据分割成许多块,存放在网络中的不同节点上时,作为整体它们是难以被破坏的,这意味着对数据安全和隐私保护的提升。去中心化网络中的文件被分解并分布到各个节点上,这个过程叫做分片。这些文件还使用私钥加密,以确保其他参与节点无法查看你的文件。分片也使得任何人都不可能访问整个内容,因为文件是分开的。这会让你的数据变得极为安全和稳定。

四、区块链上链四个层次

科技上链——用区块链技术,就分布式计算、哈希加密、通识分发等的一些特性来改进自身的信息系统和智能平台。降本增效指数级提升,效能最大化让企业科技型始终跟随科技的一个前端。

经济上链——利用区块链基础上的智能合约和通证,来改善客户员工、股东之间的一个利益分配关系,使各方更好的组成合理,合理的激励体系,最大化的发挥员工和社会化的一个合作人士的积极性,实现共建共赢。

商业上链——利用区块链技术背后的哲学和社会学原理来感性和升级企业家经营企业和产业链的一个指导思想,重构商业模式,结合了人工智能云计算、大数据、5G等科技,全面解决生产力和生产关系,打造无人公司虚拟股权社会化经营的新商业模式。

金融上链——海外的企业可以通过企业资产和权益的数字化,进而进行数字资产的金融市场化,让更多的资金能够参与投资、融资、分红等。

区块链入门:数据如何上链

五、上链方式

链接存证——相当于哈希存证基础上有添加了文件的URI地址,这样区块链上上就存储了“文件地址+文件数字指纹”这两套东西了。这两套可以互相印证。例如某个银行的安全插件,需要我们必须到其官网上进行下载安全插件,便可以采用这有的手段。

隐私存证——所谓隐私存证就是把数据进行加密之后存储在区块链之上,这是为了应对区块链上的数据都是公开透明而采取的策略。一般对数据加密都采用的是对称加密,所谓对称加密是指加密和解密的秘钥是一个,这样的加密方案比较简单、快速,可以适合大量数据的加密。

区块链入门:数据如何上链

分享隐私存证——相当于隐私存证的更进一步,把文件进行加密之后,同时还要把加密的秘钥再使用非对称加密再加密一次。也就是说,第一次对文件内容的加密是采用对称加密,第二次对秘钥加密就是非对称加密。所谓非对称加密就是有两把钥匙:公钥和私钥。

哈希存证——所谓哈希存证就是把文件内容的哈希值进行保存上链。文件内容的哈希值我们也通常称为文件的“数字指纹”,可以通过对文件内容进行哈希运算得到。因为哈希值的长度都比较有限,例如一部几万字的内容的SHA256的哈希值也只是256位的字符,这样的长度的内容存储上链对区块链来讲毫无压力。

内容存证——所谓内容存证,就是指直接把我们要存储的内容直接放入到区块链之中,不过,大家都知道,区块链上的存储空间是极其宝贵和有限,所以这些内容一般不会太大。举个最简单的例子,我们目前发现,在区块链上执行的应用程序,也就是我们常说的“智能合约”一般功能都不会很强大,而且采用的编程语言一般编译后的代码量都很小,就是这个原因。功能不强就代表代码量比较少,编译后比较小说明占用的空间比较少,这一些都是为了节省区块链上的链上空间。

六、区块链处理的流程

区块链处理的流程大致分为三个阶段,分别是:

1、上链前准备阶段

2、链上处理阶段

3、智能合约执行阶段

6.1上链前准备阶段

上链前三步走:

第一步,根据企业所在的上下游产业,设计一条链的起点和终点。理论上讲,所有产业链的起点都是大自然,终点都是消费者。但在设计一条具体的链时,不一定要覆盖到大自然,终点也未必一定要延伸到消费者。要根据每一条不同的链的特点灵活设定链的长短、起点与终点。

第二步,起点终点确定后,在每一个环节或者行业选择哪些企业上链?选择的标准又是什么?一条产业链的设计,不一定是每个环节都要选最好的企业上链,链就是最好的。这和球队选球员的逻辑类似,一个球队如果前锋、中锋、后卫都是最好的,这个球队就是最好的吗?未必!

第三步,Token的设计,包括Token的价值支撑、应用场景。股票的价值来自单个公司全部利润的分红,Token的价值则来自链上的各个环节、各个企业的贡献。比如,有的公司按照销售额,有的按利润,有的按贡献产品或服务,各种方式都可以。贡献即挖矿,都可以获得Token。

业务数据上链前需要将业务数据处理,并且对信息进行签名。这些过程可以通过对应的工具,比如序列化工具和各种椭圆曲线的签名工具来完成,不过更多的时候是通过将各种工具集成的SDK来完成,以太坊的web3就是比较典型的上链前处理的开发工具。

数据层的一大功能是存储,存储系统的选择原则是性能和易用性。一个网络系统的整体性能,主要取决于网络或本地数据存储系统的I/O性能,比如比特币用的是谷歌的LevelDB,据说这个数据库读写性能很好,但是很多功能需要开发者自己实现。

区块链入门:数据如何上链

数据库的历史:在IT界,其实一个特别古老的研究领域。从最初的文件系统,到后来的ER实体关系模型。实体关系模型的提出催生了一系列伟大的数据库公司和软件,例如IBM的DB2,Sybase,Oracle,微软的SQLServer,MySQL等等。以及,由此引发了传统数据库的三大成就,关系模型、事务处理、查询优化。再到后来随着互联网的盛行,MangoDB为典型代表的NOSQL数据库崛起。数据库技术本身在不停的演进,且一直是热门的方向,也包括XML为代表的半结构化,基于文本、语音和图像的非结构化数据处理等。

伴随着现实的需求不断升级,数据库也在不断发展的,我们通过ER实体关系模型、通过NOSQL,能很好的解决数据存储和数据访问的Scalability问题。我们通过NOSQL数据库、云存储等技术解决了互联网海量数据的处理问题后,下一个问题接踵而至。那就是如何以一种规模化的方式解决数据真实性和有效性的问题。

6.2链上处理阶段

一笔交易从产生到完成的流程:

验证——在比特币区块链中,当一笔交易经由某个节点或钱包产生时,这笔交易需要被传送给其它节点来作验证。验证的做法是将交易资料经由数位签章加密并经由Hash函数得出一串代表此交易的唯一Hash值后,再将这个Hash值广播(Broadcast)给比特币区块链网络中的其它参与节点进行验证。

产生一笔新交易—— 一笔新交易产生时,会先被广播到区块链网络中的其它参与节点,各节点将数笔新交易放进区块,每个节点会将数笔未验证的交易Hash值收集到区块中,每个区块可以包含数百笔或上千笔交易。

决定由谁来验证这些交易?——各节点进行工作量证明的计算来决定谁可以验证交易,由最快算出结果的节点来验证交易,这就是取得共识的做法。

广播-——取得验证权的节点将区块广播给所有节点,最快完成POW的节点,会将自己的区块广播给其他节点,各节点验证并接上新区块,其他节点会确认这个区块所包含的交易是否有效,确认没被重复花费且具有效数位签章后,接受该区块,此时区块才正式接上区块链,无法再窜改资料。

交易验证完成——所有节点一旦接受该区块后,先前没算完POW工作的区块会失效,各节点会重新建立一个区块,继续下一回POW计算工作。

区块链入门:数据如何上链

节点始终都将最长的区块链视为正确的链,并持续以此为基础验证和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别,它们将在先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成长的链条。该僵局的打破需要共识算法的进一步运行,当其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。以上就是防止区块链分叉的整个过程。

搞懂区块链运作原理,可先区分出交易(Transaction)与区块(Block)两个部分,这里我们分别从区块链中一笔交易产生到完成验证的流程,以及图解一个区块,来了解区块链的运作原理,并进一步拆解5大区块链关键技术,看它到底怎么做到大家口中的基于零信任基础、去中心化、可追踪又不可窜改。

6.3智能合约执行阶段

智能合约是运行在区块链公链上的一种代码,该代码由Solidity编写,并通过区块链的智能合约虚拟机来执行,以达到对区块链编程的目标。可以将区块链公联理解为操作系统,Solidity是编写该操作系统应用程序的编程语言,智能合约虚拟机则是编程语言编译之后的代码运行环境。

区块链入门:数据如何上链

智能合约的执行条件是,当其他账户给这个合约账户转账(BU原生资产或者asset资产)的时候触发执行。上链处理完成后,业务数据已经记录在链上了,对于单纯存证的业务来说,将业务信息写入区块已经完成了这笔业务处理,只需记录存证业务的交易哈希并在取的时候通过交易哈希查询即可。但是大部分业务场景都需要进行一定的逻辑处理,因此通过智能合约处理是必须的。智能合约处理包括合约逻辑处理以及修改状态梅克尔树等流程。

6.3.1智能合约执行过程

1)用户A发起签名交易,目标账户为B,B为一个智能合约账户,里面存储着智能合约代码。假定此时交易被广播且被打包,节点需要将该交易存储在区块链上,需要对该交易进行回放和演算。

2)客户端调用交易记录,并把合约代码加载到交易里执行,在执行的过程中如果遇到内置的接口,就会产生回调函数,调用客户端代码,此时实现了双向交互功能。

3)合约在执行过程中,有可能产生新的交易,如合约账户B在合约内部通过接口对账户C进行转账操作,如果账户C仅是普通账户,那么只需进行普通转账操作即可;如果账户C是一个合约账户,那么将会再次触发新的合约形成一次递归调用。

合约调用合约的递归深度为3层,超过3层将会出错并回退整个交易,这是出于合约实现的复杂度和区块链底层的安全性来考虑与设计的。

区块链入门:数据如何上链

6.3.2智能合约的安全

智能合约的执行需要考虑更多的安全性,要注意以下几个原则:

智能合约在执行过程中可能出现安全问题,比如CPU、内存、堆栈等资源过度消耗和节点执行结果不一致等。为了便于描述,定义如下变量:合约执行步数为Step,合约栈使用量为Stack,合约堆使用量为Heap,合约执行时间为Time,合约字节数为Byte,合约间调用深度为Deep。

(1)如果合约字节数超过Max(Byte),那么校验参数失败,无法交易。

(2)如果合约执行步数超过Max(Step),那么抛出异常。

(3)如果合约栈使用量超过Max(Stack),那么抛出异常。

(4)如果合约堆使用量超过Max(Heap),那么抛出异常。

(5)如果合约执行时间超过Max(Time),那么抛出异常。

(6)如果合约间调用深度超过Max(Deep),那么执行失败。

(7)如果合约抛出异常,那么整个交易失败。

(8)当虚拟机加载智能合约执行环境时,删除不确定因素函数,如随机函数、时间函数。

总而言之,区块链作为21世纪最前言的高科技领域,随着区块链技术的不断革新,越来越多的传统企业开始利用这一技术来解决各种各样的问题。而数据上链是利用区块链技术跨入区块链行业,再深度探索行业的发展。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: