区块链学习笔记

简介:                      区块链学习笔记     一 .  区块链介绍     从技术角度来说, 这加密货币的账本,如比特币可以被看作为一个状态转移的系统, 在这个系统里,有一个包含了现在所有已存在的比特币的持有者的状态,并且有一个“状态转移函数”可以使用一个状态和一个交易来产生一个新的状态。

 

 

                   区块链学习笔记


 

 

一 .  区块链介绍

 

  从技术角度来说, 这加密货币的账本,如比特币可以被看作为一个状态转移的系统, 在这个系统里,有一个包含了现在所有已存在的比特币的持有者的状态,并且有一个“状态转移函数”可以使用一个状态和一个交易来产生一个新的状态。在一个标准的银行体系里, 这状态就是一个资产负债表,当一个交易要求把 X$的钱,从 A 转移到 B 时, 那么它的状态转移函数就会从 A 的账户中减去数量为$X 的金额,然后在 B 的账户中增加数量为$X 的金额。如果 A 的账户中没有$X 的钱,那么状态转

移函数就会返回一个错误。所以,我们可以做如下定义:

  //使用一个状态和一个交易才生一个新状态,或者返回错误

  APPLY(S,TX) ->  S' or ERROR     //   S为状态,交易后会产生一个新的状态S‘或者ERROR

  在银行系统中的表示:

    APPLY( { Make:$50 , Tony:$50 } , "send $20 from Make to Tony")= APPLY( { Make:$30 , Tony:$70 } )    

            // 成功

    APPLY( { Make:$50 , Tony:$50 } , "send $80 from Make to Tony")= ERROR 

            // 失败,UTXO没有被花掉的交易产出  

    这“状态” 在比特币中是指所有的已经被挖出的但是还没消费的硬币的集合 (技术上, “没有被花掉的交易的产出(unspent transaction outputs)” 或 UTXO) ,每个 UTXO 都有一个面值和一个持有者 (持有者是由 20 个字节组成的地址,其本质是一个加密的公钥). 一个交易包含了一个或多个输入,每一个输入都包含了对一个已存在的 UTXO 的引用,和用持有者的地址所关联着的私钥来产生的一个加密签名, 并且会产生一个或多个输出, 每一个输出包含一个用于添加到状态的新的 UTXO。这状态转移函数 APPLY(S,TX) -> S' 可以被大概的定义如下:

        1. 在 TX 中的每个输入:
          o 如果被引用的 UTXO 不在 S 里,返回一个错误.
          o 如果提供的签名和 UTXO 的所有者匹配不上, 返回一个错误.  
          2. 如果所有的输入的 UTXO 的面值的和少于所有输出的 UTXO 的面值的和,返回一个错误.
          3. 返回一个所有输入的 UTXO 都被移除的,所有输出的 UTXO 都被加进的新的 S' .

 

 

    如果我们有一个可信任的中央服务器, 那么实现这个系统是一件很简单的事情; 就按照需求所描述的去编写代码即可,把状态记录在中央服务器的硬盘上。 然而,与比特币一样,我们试图去建立一个去中心化的货币系统, 所以,我们需要把状态转移系统和一致性系统结合起来,以确保每个人都同意这交易的顺序。比特币的去中心化的一致性处理进程要求网络中的节点连续不断的去尝试对交易进行打包,这些被打成的包就称为“区块”。 这个网络会故意的每隔 10 分钟左右就创建一个区块, 每一个区块里都包含一个时间戳,一个随机数,一个对上一个区块的引用 ,和从上一个区块开始的所有交易的列表。随着时间的推移,这会创建一个持久的,不断增长的区块链,这个区块链不断的被更新,使其始终代表着最新的比特币总账的状态。

    在这个范例中,用来验证一个区块是否有效的算法如下:

        1. 检查其引用的上一个区块是否存在并且有效.

        2. 检查这个区块的时间戳是否大于上一个区块的时间戳 并且小于 2 小时之内

           3. 检查这区块上的工作证明是否有效.

                      4. 让 S[0] 成为上一个区块的最末端的状态.

       5.假设 TX 是这个区块的交易列表,且有 n 个交易。 做 for 循环,把 i 从 0 加到到 n-1, 设
         置 S[i+1] = APPLY(S[i],TX[i]) 如果任何一个应用(APPLY)返回错误,则退出并且返回。
         
6. 返回 true,并且把 S[n] 设置成这个区块最末端的状态。  

  乍看上去,这种方法似乎效率很低,因为它需要将整个状态存储在每个块中,但在现实中,效率应该与比特币相当。原因在于,状态存储在树结构中,并且每个块后,只需要修改树的一小部分。此外,由于所有的状态信息都是最后一个区块的一部分,所以不需要存储整个区块链的历史——这一策略,如果它可以应用于比特币,那么它的磁盘空间将节省 5-20 倍。以太坊网络中交易会被验证这网络的节点收集起 来。这些“矿工”在以太坊网络中收集、传播、验证和执行交易,然后整理归档这些交易,打包成一个区块,与别的矿工竞争将区块添加到区块链中,添加成功的矿工将收到奖励。通过这样的措施,鼓励人们为区块链全网提供更多的硬件和电力支持。

    

 

目录
相关文章
|
Kubernetes Cloud Native 微服务
企业级容器部署实战:基于ACK与ALB灵活构建云原生应用架构
这篇内容概述了云原生架构的优势,特别是通过阿里云容器服务Kubernetes版(ACK)和应用负载均衡器(ALB)实现的解决方案。它强调了ACK相对于自建Kubernetes的便利性,包括优化的云服务集成、自动化管理和更强的生态系统支持。文章提供了部署云原生应用的步骤,包括一键部署和手动部署的流程,并指出手动部署更适合有技术背景的用户。作者建议在预算允许的情况下使用ACK,因为它能提供高效、便捷的管理体验。同时,文章也提出了对文档改进的建议,如添加更多技术细节和解释,以帮助用户更好地理解和实施解决方案。最后,展望了ACK未来在智能化、安全性与边缘计算等方面的潜在发展。水文一篇,太忙了,见谅!
|
分布式计算 DataWorks 对象存储
全链路数据湖开发治理解决方案2.0重磅升级,全面增强数据入湖、调度和治理能力
阿里云全链路数据湖开发治理解决方案能力持续升级,发布2.0版本。解决方案包含开源大数据平台E-MapReduce(EMR) , 一站式大数据数据开发治理平台DataWorks ,数据湖构建DLF,对象存储OSS等核心产品。支持EMR新版数据湖DataLake集群(on ECS)、自定义集群(on ECS)、Spark集群(on ACK)三种形态,对接阿里云一站式大数据开发治理平台DataWorks,沉淀阿里巴巴十多年大数据建设方法论,为客户完成从入湖、建模、开发、调度、治理、安全等全链路数据湖开发治理能力,帮助客户提升数据的应用效率。
1879 1
|
Unix Linux 网络安全
林帆:Docker运行GUI软件的方法
欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 继上周的“Kubernetes v1.0特性解析”分享之后,本周我们邀请到ThoughtWorks咨询师林帆为大家带来主题为“Docker运行GUI软件的方法”的分享。
4086 0
|
弹性计算
ECS独享型实例,享受独占快感
新一代独享型的 ECS 实例类型,拥有全新一代的 CPU 和内存,计算能力更强,I/O 能力更快,对固定性能计算能力进行优化。让客户尽情享受独占快感。
12808 9
|
安全 数据库 NoSQL
|
Web App开发 Ubuntu Linux
Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)
Linux基础:https://www.cnblogs.com/dunitian/p/4822808.html#linux 之前看到朋友还动不动 apt-get update upgrade,就很纳闷,后来发现原来他只是知道这个更新命令却不知其意,所以每次安装个包就把所有apt-get的常用清除+...
3203 0
MongoDB readConcern 原理解析
MongoDB 可以通过 writeConcern 来定制写策略,3.2版本后又引入了 readConcern 来灵活的定制读策略。 readConcern vs readPreference MongoDB 控制读策略,还有一个 readPreference 的设置,为了避免混淆,先简单说明下
|
负载均衡 Oracle 网络协议
|
Web App开发 编解码 算法
WebRTC的拥塞控制和带宽策略
网络的波动带来的卡顿直接影响着用户的体验,在WebRTC中设计了一套基于延迟和丢包反馈的拥塞机制(GCC)和带宽调节策略来保证延迟、质量和网路速度之间平衡,本文中重点是介绍基于trendline滤波的评估模型。
3840 0

热门文章

最新文章