《比特币技术分享精编版》由会员分享,可在线阅读,更多相关《比特币技术分享精编版(24页珍藏版)》请在金锄头文库上搜索。
1、BUSINESSREPORT PRESENTEDBYOfficePLUS 比特币技术分享 比特币 一种点对点的电子现金系统 中本聪提出了一种完全通过点对点技术实现的电子现金系统 它使得在线支付能够直接由一方发起并支付给另外一方 中间不需要通过任何的金融机构 虽然数字签名 DigitalSignatures 部分解决了这个问题 但是如果仍然需要第三方的支持才能防止双重支付 double spending 的话 那么这种系统也就失去了存在的价值 CONTENTS 比特币解决的问题 交易流程 共识机制 网络运行过程 攻击与算力竞争 其它特性 点对点支付 去中心化 防止双重支付 交易记录不可更改 比特
2、币解决的问题 1 比特币是一种数字货币 通过网络来支付 相比纸币等传统货币具有很大的灵活性 数字货币 比特币可以像纸币一样进行点对点支付 无需可信的第三方介入 点对点支付 传统的数字货币难以在没有可信第三方的情况下防止双重支付 防止双重支付 交易一旦成功 就永远无法撤销或更改 保障收款方的利益 交易记录不可更改 私钥 公钥 散列值 地址 交易流程 2 比特币账户 地址 的产生 通过随机数发生器生成一个256bit的随机数 并使用该随机数作为账户的私钥 比特币采用椭圆曲线签名算法 ECDSA 来对数据进行签名和验证 具体使用的是secp256k1曲线 通过ECC乘法可以计算出对应的公钥 对公钥进
3、行两次散列运算 得到公钥的散列值 公钥散列值加上版本号和校验码后 进行base58编码可得到地址 总结 通过私钥可以推导出一切 是操纵该比特币账户的所有权利 所以必须妥善保管好私钥 不能泄漏 公钥的散列值与地址之间通过base58编码来相互转换 所以两者是等价的 比特币的发送者使用私钥来对交易进行签名 接收者使用公钥来对交易进行验证 1 2 3 发送者对交易进行签名 签名 发送者将签名后的交易广播到比特币网络 广播 接收者对交易及签名进行验证 验证 通过数字签名虽然可以证明一笔交易的合法性 但是仍然无法阻止支付者构造两笔或多笔同时具有合法签名的交易 把同一笔钱支付多次 有一个问题 双重支付怎么
4、办 通常的解决方案 引入信得过的第三方权威 或者类似于造币厂的机构 来对每一笔交易进行检验 以防止双重支付 造币厂获悉所有的交易 并且决定了交易完成的先后顺序 该解决方案的问题在于 整个货币系统的命运完全依赖于运作造币厂的公司 因为每一笔交易都要经过该造币厂的确认 比特币的解决方案 交易信息应当被公开宣布 publiclyannounced 整个系统内的所有参与者 都有唯一公认的历史交易序列 收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现 如何防止双重支付 工作量证明 可追溯不可篡改 挖矿 共识机制 3 将一段时间内的交易放入一个区块中通过不断改变区块中的随机数 来尝试碰撞出一个
5、符合要求的区块散列值一旦找到符合要求的散列值 即认为完成了一次工作量证明 该区块中的交易将被记录在账本中将上一个区块的散列值放入下一个区块中 形成一个链条 区块链 比特币是一种分布式账本 由于网络延迟 地域原因 不诚实节点等问题 每个参与者的视角都不一样 需要一种共识机制来确保所有参与者都具有统一的账本和相同的交易序列 5 000 nodes 分布式账本的共识机制 工作量证明 Proof of Work 自动调节 不可更改 激励机制 寻找一个符合难度要求的区块散列值非常困难 需要不断地进行散列碰撞 而检验一个区块的散列值是否符合难度要求 则非常容易 只需要进行一次散列运算即可 硬件的运算速度在
6、高速增长 且节点参与网络的程度会有所起伏 如果区块生成的速度过快 那么系统将自动提高区块的难度 从而保证了每小时生成区块的数量为某一预设的平均数 除非重新完成相当的工作量 否则该区块的信息就不可更改 由于之后的区块是链接在该区块之后的 所以想要更改该区块中的信息 就还需要重新完成之后所有区块的全部工作量 完成工作量证明需要消耗大量的电力 因此对每个区块的第一笔交易进行特殊化处理 该交易产生一枚由该区块创造者拥有的新的电子货币作为奖励 另外一个激励来源则是交易费 比特币的挖矿奖励每四年就会减半 比特币网络的运行过程 网络运行过程 4 2 1 3 4 新的交易向全网进行广播 只要交易能够抵达足够多
7、的节点 那么它们将很快被整合进一个区块中 广播交易 每个节点都尝试在自己的临时区块中找到一个具有足够难度的工作量证明 制造区块 每一个节点都将收到的交易信息纳入内存中的一个临时区块中 收录交易 当一个节点找到了一个工作量证明 它就向全网进行广播 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过 其他节点才认同该区块的有效性 广播区块 如果有两个节点同时广播不同版本的新区块 那么其他节点在接收到该区块的时间上将存在先后差别 当此情形 他们将在率先收到的区块基础上进行工作 但也会保留另外一个链条 以防后者变成最长的链条 该僵局的打破要等到下一个工作量证明被发现 而其中的一条链条被证实为是较
8、长的一条 那么在另一条分支链条上工作的节点将转换阵营 开始在较长的链条上工作 5 链接区块 其它节点将该区块加入到区块链 并以此作为当前区块 制造新的区块以延长该链条 节点始终都将最长的链条视为正确的链条 节点可以诚实也可以不诚实 攻击与算力竞争 5 攻击者无法凭空创造价值或者捏造交易 最多是更改他自己的交易信息 并试图拿回他刚刚付给别人的钱如果攻击者算力小于诚实节点算力 那么攻击成功的概率随区块链的延长而指数化下降激励系统有助于鼓励节点保持诚实 如果有一个贪婪的攻击者能够调集比所有诚实节点加起来还要多的算力 那么他就会发现 诚实工作能够使他拥有更多的电子货币 而不是破坏这个系统使得其自身财富
9、的有效性受损 通过计算我们可以得出 攻击成功的概率因为区块数的增长而呈现指数化下降 由于概率是攻击者的敌人 如果他不能幸运且快速地获得成功 那么他获得成功的机会随着时间的流逝就变得愈发渺茫 攻击者的成功概率 对工作量证明的攻击 0 1 所有节点均独自挖矿不理会其他节点 并将所得收益放入自己口袋 一些节点肯定会联合起来一起挖某个分支 试图成为最长的分支或保持最长分支优势 一旦出现有少量的节点联合 那么其他节点必然会效仿 否则他们收益为零的风险会变大 联合起来的小集团会慢慢合并成大集团 最终 只会存在一个最长的分支 就是主干分支 对于不诚实节点来说 结局是无奈的 能且只能加入主干挖矿 节点可以诚实
10、也可以不诚实 对于不诚实节点来说 结局是无奈的 能且只能加入主干挖矿 即转变为诚实节点 701 437 605 GH s 全网算力庞大 算力竞争 按照规则运作的节点 称为诚实节点 节点可以诚实也可以不诚实 我们假定 所有节点都是理性的 追求收益最大化 且都是不诚实的 不惜任何手段获取利益 那么 挖矿是一项专业劳动 最后必然会交给最专业的人或团队 因为这样才能实现资源配置最优 效率最高 看似中心化的背后其实依然是分散的 矿业公司的背后是无数分散的投资人矿池背后是无数分散的个体算力既得利益使得算力巨头倾向于维护系统而不是破坏 因其收益均建立在比特币系统之上 既得利益者断然不会搬石头砸自己脚 甚至很
11、多巨头在达到一定算力占比后会主动控制算力增长 使得低于某阈值内 全网算力的上升对比特币是极其有利的 这是毫无疑问的 但目前大矿池与矿业巨头使得算力高度集中化 这与中本聪所设想的一CPU一票 one CPU one vote 的分散局面背道而驰 或许是他未曾预料的 全网算力分布 算力巨头 比特币所具备的其它有用特性 其它特性 6 交易信息被随机散列时 被构建成Merkle树 通过剔除Merkle树的分支来压缩区块 不含交易信息的区块头大小仅有80字节 每年产生的数据为4 2MB 足以放入内存 如果最近的交易已经被纳入了足够多的区块之中 那么就可以丢弃该交易之前的数据 以回收硬盘空间 为了同时确保
12、不损害区块的随机散列值 交易信息被随机散列时 被构建成一种Merkle树 Merkletree 的形态 使得只有根 root 被纳入了区块的随机散列值运算 从区块中剔除古老的交易 回收硬盘空间 为了使得价值易于组合与分割 交易被设计为可以纳入多个输入和输出 一般而言是某次价值较大的前次交易构成的单一输入 或者由某几个价值较小的前次交易共同构成的并行输入 但是输出通常只有两个 一个用于支付 另一个用于找零 虽然一笔交易依赖于之前的多笔交易 这些交易又各自依赖于多笔交易 但这个工作机制并不需要展开检验之前发生的所有交易历史 价值的组合与分割 节点之间的工作大部分是彼此独立的 只需要很少的协同 节点
13、可以随时离开网络 而想重新加入网络也非常容易 只需要补充接收离开期间的工作量证明链条即可 灵活性 公众得知的信息仅仅是某个人将一定数量的货币发送给了另外一个人 但是难以将该交易同某个特定的人联系在一起 也就是说 公众难以确信 这些人究竟是谁 隐私性 比特币可以在一定程度上实现智能合约 此时 接收比特币的收款地址将是一个合约脚本的散列值 而不是公钥的散列值 而验证合约地址发出的交易 需要执行合约的脚本内容 智能合约 比特币的区块链可以承载一部分的外部数据信息 通过构造特定的交易输出额 将数字摘要的Hash作地址输入 利用比特币脚本的OP RETURN指令等方式 都可以将额外的数据保存到区块链 此外 新的区块链应用通常都会在交易结构中预留一个外部数据的字段供用户使用 信息载体 还有什么 THANKYOU PresentedbyAntShares 感谢聆听