区块链技术知识分享2018年6月9日Agenda•区块链和比特币•以太坊(Ethereum)及智能合约介绍•超级账本(Hyperledger)项目和fabric区块链和比特币•概述•起源•BTC诞生•BTC交易原理•UXTO•区块•脚本•地址生成•MerkelTree•工作量证明•最长链规则•挖矿•分叉•扩展性•安全性•发展方向区块链和比特币(1)-概述•去中心化的账本,一种使用密码学的方法相关联产生的数据块•匿名性+专属所有权•难以篡改•具有自治的能力区块链和比特币(2)-起源•1976年,BaileyW.Diffie和MartinE.Hellman《密码学的新方向》发表(公钥加密理论),次年RSA算法诞生•1980年,MerkleRalf提出Merkle-Tree数据结构和算法(区块中交易校验的手段)•1982年,LeslieLamport等人提出拜占庭将军问题(共识的基础)•1985年,椭圆曲线加密(ECC)算法诞生(加密的基础)•1990年,DavidChaum创立DigitalCash,第一种中心化不可追踪的加密数字现金系统•1992年,ScottVanstone等人提出椭圆曲线加密数字签名算法(ECDSA)•1997年,AdamBack发明Hashcash技术,为一种工作量证明算法(ProofofWork,POW),此算法依赖哈希函数的不可逆特性,达到容易被验证,但很难被破解的特性•1998年,戴伟发布匿名分布式电子现金系统B-money,NickSzabo提出去中心化货币BitGold的理论•2005年,HalFinney提出可重复使用的工作量证明机制(RPOW),结合B-money与AdamBack提出的Hashcash算法进行数字货币试验区块链和比特币(3)-BTC诞生•2008年11月1日,一个署名中本聪(SatoshiNakamoto)的人在一个小型密码学讨论组中发表了论文《比特币:一种点对点的电子现金系统》•2009年1月3日,中本聪在位于芬兰赫尔辛基的一个小型服务器上挖出了第一笔50个比特币(创世区块)区块链和比特币(4)-BTC交易原理区块链和比特币(5)-UTXO•和传统accountbased支付系统不同,比特币系统中使用区块来记录交易往来,本质为一种UXTO(UnspentTransactionOutput)方案、•区块账本记录的是交易(日志),而不是货币;每一笔交易都要消耗(spend)N笔输入,产生N笔输出;但输入总量和输出总量需要保持相等区块链和比特币(6)-区块•完整的区块结构名称字节字段说明MagicNO4魔数表征网络协议,0xD9B4BEF9表示主网,0xDAB5BFFA表示testnetBlocksize4区块大小用字节表示的该字段之后的区块大小Blockheader80区块头组成区块头的几个字段Transactioncounter1-9交易计数器该区块包含的交易数量,包含coinbase交易Transactions不定交易记录在区块里的交易信息,使用原生的交易信息格式,并且交易在数据流中的位置必须与Merkle树的叶子节点顺序一致•区块头(Blockheader)结构名称字节数据类型描述Version4int32_t版本号表示所遵循的规则PreBlockHeaderHash32char[32]SHA256(SHA256())前一块头部的哈希MerkleRootHash32char[32]这块中所有交易的哈希Time4uint32_tUnix时间戳Bits4uint32_t难度系数Nonce4uint32_t随机数区块链和比特币(7)-区块•Transactions结构•Input结构名称字节数据类型描述Version4int32_t交易版本InputsCounter1-9可变integer输入单数量InputsDetail-array输入单列表OutputsCounter1-9可变integer输出单数量OutputsDetail-array输出单列表LockTime4uint32_t锁定时间名称字节数据类型描述Previoustxhash32char[32]引用前一交易的hashPreviousOutputIndex4uint32_t被引用交易的Output的索引InputScriptLength1-9可变integer输入单列表InputScript/scriptSig--输入脚本SequenceNumber4uint32_t•Output结构名称字节数据类型描述Amount/Value8uint32_t比特币数量InputScriptLength1-9uint32_t输出脚本长度OutputScript/scriptPubKey--输出脚本区块链和比特币(8)-脚本Hash:9c50cee8d50e273100987bb12ec46208cb04a1d5b68c9bea84fd4a04854b5eb1输入交易:前导输入的Hash:437b95ae15f87c7a8ab4f51db5d3c877b972ef92f26fbc6d3c4663d1bc750149输入脚本scriptSig:3045022100efe12e2584bbd346bccfe67fd50a54191e4f45f945e3853658284358d9c062ad02200121e00b6297c0874650d00b786971f5b4601e32b3f81afa9f9f8108e93c752201038b29d4fbbd12619d45c84c83c...