重要提示: 如果你拥有价值超过 1000 美元的加密货币, 那么你肯定应该使用硬件钱包, 而不是在交易所保留硬币 我推荐使用 Trezor, 你可以直接从他们的网站花费 89 购买
这篇文章是对区块链技术的简单介绍, 并假定最少的技术知识这篇文章试图描述区块链技术是什么而不是为什么我应该关心, 这是未来的职位
这里有几篇对比的简短文章:
你想要使用区块链用在某些地方上吗? 一些常见的误解
区块链困惑? 革命与进化
不, 区块链不是寻找问题的解决方案
区块链不变性的简单介绍
第 1 部分 - 执行摘要
人们使用术语区块链技术来表示不同的东西, 这可能会让人困惑有时他们谈论的是比特币区块链, 有时候是以太坊区块链, 有时候是其他虚拟货币或数字代币, 有时候是智能合约大多数情况下, 他们都在谈论分布式账本, 即跨多台计算机复制的交易列表, 而不是存储在中央服务器上
常见的主题似乎是一个数据存储:
通常包含金融交易
几乎实时地跨多个系统复制
通常存在于对等网络之上
使用密码学和数字签名来证明身份, 真实性和强制读 / 写访问权限
可以由某些参与者编写
可以被某些参与者阅读, 也可以被更广泛的读者阅读, 而且
存在某种机制使其很难改变历史记录, 或者至少当有人试图这样做时可以很容易地检测到
我将区块链技术视为许多技术的集合, 有点像一袋乐高从袋子里, 你可以拿出不同的砖块, 并以不同的方式放在一起, 创造出不同的结果
我将区块链技术看做一袋乐高或砖块
区块链和普通数据库有什么区别? 非常松散的是, 区块链系统是一个包含普通数据库和一些软件的软件包, 这些软件可以添加新节点, 验证新节点是否符合预先约定的规则, 侦听并通过网络向相邻节点广播新节点, 从而确保所有节点的数据库中有相同的数据
第 2 部分 - 比特币下的区块链
比特币区块链生态系统
作为比特币的入门, 它可能有助于回顾比特币简单介绍
比特币区块链生态系统实际上是一个相当复杂的系统, 因为它具有双重目标: 任何人都应该能够写入比特币区块链; 而且不应该有任何集权的权力或控制权放心, 你不需要了解比特币的很多复杂机制
也就是说, 让我们从比特币区块链生态系统开始, 然后尝试从比特币位中挑出区块链
复制的数据库 比特币区块链生态系统行为形似复制数据库网络, 每个数据库都包含比特币交易的相同历史列表网络的重要成员被称为验证者或节点, 它们传递事务数据 (支付) 和块数据 (添加到分类账) 每个节点独立检查支付数据和传递的数据块有一些规则可以使网络按预期运行
比特币的复杂性来自其意识形态比特币的目标是去中心化, 即没有控制中心, 而且是相对匿名的这影响了比特币一直以来的发展并不是所有的区块链生态系统都需要有相同的机制, 特别是如果参与者可以被识别和信任的行为
以下是比特币如何处理一些决定:
公共 vs 私有区块链
根据你是否允许任何人写入你的区块链或允许已知的经过审核的参与者写入你的区块链, 你所需要的技术有很大差异在理论上比特币允许任何人写入账本(但在实践中, 实际上只有大约 20 人 / 组这么做)
公共链 账本是两种意义上的公开:
任何人, 未经任何节点允许, 都可以写入数据
任何人, 未经任何节点允许, 都可以阅读数据
通常, 当人们谈论公共区块链时, 他们指的是任何人都可以写入数据
因为比特币被设计成任何人都可以编写的区块链, 参与者没有经过审查就可以在不需要批准的情况下添加到账本中, 它所需要的是仲裁差异的方法 (没有老板来决定) 和抵抗袭击的防御机制 (如果有财政动机的话, 任何人都可能因有罪不罚而行为不端) 这些都给运行区块链增加了成本以及复杂度
私有链 相反, 私有区块链网络是参与者都知道和信任的地方: 例如, 一个行业组织, 或者具体点说雨伞行业的几家公司组成的团体他们不需要很多机制 - 或者说它们被合法合同取代 - 你会因为你签署了这张纸而表现出色 这改变了用哪块砖解决问题的技术决策
描述公共 / 私有区块链的另一种方式是不被允许的参与者 / 被允许或者匿名的参与者 / 被识别的参与者
有关此主题的更多信息, 请参阅内部区块链的优缺点或分布式账本和区块链之间的区别
第 3 部分 - 深入了解区块链
警告: 这部分内容并不那么简单, 因为它详细描述了上述每个术语我建议喝杯茶
数据存储: 什么是区块链?
区块链只是一个文件 区块链本身就是一种数据结构也就是说, 数据是如何逻辑地放在一起并存储的其他数据结构是数据库(行, 列, 表), 文本文件, 逗号分隔值(csv), 图像, 列表等等这些你可以认为与数据库竞争最为密切的是区块链
链中的块 = 书中的页面 为了比喻, 一本书是一连串的页面书中的每个页面都包含:
文字: 例如故事
关于书中的信息: 在页面的顶部通常有书的标题, 有时是章节号或标题; 页面底部通常是页码, 告诉你书中的位置这个'关于数据的数据'被称为元数据
同样在区块链中, 每个区块都有:
该块的内容, 比如在比特币中, 是比特币交易信息, 还有矿工激励奖励(目前是 25 BTC)
'头部'包含区块的数据信息在比特币中, 头部包含有关块的一些技术信息, 对前一块的引用信息, 以及包含在该块中的数据的指纹 (哈希或散列) 等等这个哈希对于排序非常重要 (译者注: hash 值在应用中又被称为指纹(fingerprint) 摘要(digest))
链中的块指向前一个块, 如同书中的页码表示
查看此图表, 了解比特币区块链中的数据可视化
区块链中的块排序
逐页 通过书籍, 可预测的页码可以轻松了解页面的顺序如果你撕掉了所有的页面并对它们进行了拖拽, 那么很容易将它们放回到使故事有意义的正确顺序
逐块 通过区块链, 每个区块都会引用前一个区块, 不是通过'区块号码'引用, 而是区块的指纹, 这比指定的页码更明智, 因为指纹信息本身是由区块内容决定的
对前面块的引用会创建一个块链 - 区块链!
内部一致性 通过使用指纹而不是时间戳或数字序列, 你还可以获得验证数据的好方法在任何区块链中, 你可以使用某些算法自行生成区块指纹如果指纹与数据一致, 并且指纹在链中, 则可以确定区块链内部一致如果任何人想干涉任何数据, 他们必须从这一点再次产生所有指纹, 区块链看起来会不同
在区块链块内窥视: 指纹对块的内容是唯一的
这意味着如果创建这个指纹很困难或者很慢(请参阅让坏人变得很糟糕一节), 那么重新编写区块链也很困难或者很慢
比特币的逻辑是:
难以生成满足比特币区块链规则的指纹
因此, 如果有人想重新编写比特币区块链的部分内容, 需要很长时间, 并且他们必须赶超过其他诚实网络
这就是为什么人们说比特币区块链是不可变的(不能改变)*
* 这是关于区块链中不变性的一部分
数据分发: 新数据如何传达?
点对点是在网络中分配数据的一种方式另一种方式是客户端 - 服务器你可能听说过 BitTorrent 网络上的文件在用户之间点对点共享, 没有中央服务器控制数据这就是为什么 BitTorrent 作为网络保持弹性的原因: 没有中央服务器可以关闭
客户端 - 服务器 在办公室环境中, 数据通常保存在服务器上, 无论你在何处登录, 都可以访问数据服务器保存 100%的数据, 客户端相信数据是确定的大多数互联网都是客户端 - 服务器, 其中网站在服务器上, 你在访问时是客户端这非常有效, 并且是计算中的传统模型
点对点 在点对点模型中, 它更像是一个八卦网络, 每个点都有 100%的数据(或尽可能接近 100%), 并且更新共享点对点网络在某种程度上比客户机 - 服务器效率低, 因为数据被多次复制; 每台机器一次更改或添加数据, 其他台机器也会更改或添加数据, 这都会产生大量数据但是, 每台机器都是独立的如果某台机器失去与网络其余部分的连接, 在某种程度上网络会继续运行此外, 点对点网络更健壮, 因为没有中央服务器可以控制, 因此关闭点对点网络更困难
左边是客户端 / 服务器模型, 右边是点对点网络模型
点对点模型的问题
点对点模型下, 即使所有点都是可信点, 也可能存在协议或共识问题 - 如果每个点以不同的速度更新并且状态略有不同, 你如何确定数据的真实或正确状态?
更糟糕的是, 在一个'不可信'的点对点网络中, 你不一定信任任何同伴, 你如何确保系统不容易被恶意同伴破坏?
共识: 你如何解决冲突?
一个常见的冲突是多个矿工在大致同一时间创建块因为块需要时间才能在整个网络上共享, 哪一个应该算作合法块呢?
例假设网络上的所有节点都已经同步了它们的区块链, 并且它们全部在区块编号 80 上如果世界上的三个矿工大致同时创建区块 81, 哪个区块 81 应该被认为是有效的? 请记住, 每个'Block 81'看起来都会略有不同: 它们肯定会包含 25 BTC 区块奖励的不同付款地址; 并且它们可能包含不同的集合交易我们称它们为 81a,81b,81c
哪个块应该算作合法的块?
你如何解决这个问题?
最长链规则 在比特币中, 冲突由一条称为最长链规则的规则解决
在上面的例子中, 假设你先看到 81a, 你会假设 Block 81 是有效的你可以开始构建下一个块, 尝试创建 82a:
第一个块你认为是合法的
然而在几秒钟内, 你可能会看到 81b 如果你看到这个, 你就会留意它如果以后你看到 82b, 那么最长连锁规则说你应该把更长的'b'链当作有效的 (80,81b,82b), 忽略更短的链(... 80,81a) 所以你停止尝试创建 82a, 而是开始尝试创建 83b:
最长链规则: 如果你看到多个块, 请将最长链视为合法
最长链规则是比特币区块链生态系统用来解决这些在分布式网络中常见的冲突的规则
但是, 对于更集中或可信的区块链网络, 你可以通过使用可信或高级验证程序在这些情况下进行仲裁来做出决定
有关更多详细信息, 请参阅比特币挖掘的简单介绍
升级: 你如何改变规则?
作为一个整体的网络, 你必须同意什么样的数据才是有效的, 什么不是使用比特币, 交易有技术规则(你是否填写了所有必需的数据字段? 格式是否正确等等), 并且存在业务规则(你是否尝试花费超过你所拥有的比特币? 是否使用过双重支付(译者注: 双重支付也叫做双花)?)
规则改变 随着时间推移规则也在发生变化, 那么网络参与者将如何就变化达成一致? 会不会有一半的网络认为一个交易是有效的, 另一半是因为逻辑差异而不这么认为的情况?
在一个私人控制网络体系中, 这是一个很容易解决的问题: 每个人都必须在 7 月 31 日之前升级到新的逻辑
然而, 在一个公共的, 不受控制的网络中, 这是一个更具挑战性的问题
对于比特币有两部分升级
建议更改 (BIP) 首先, 在建议阶段提出改进建议, 进行讨论和撰写提案被称为 BIP - 比特币改善建议 如果它被写入 Github 上的比特币核心软件, 那么它可以成为升级的一部分 - 下一版本的比特币核心, 是该协议最常见的参考实现
采纳变化 (矿工) 升级可以由节点和块创建者 (矿工) 下载并运行, 但是只有在他们想要的时候才可以(你可以想象, 一个改变将采矿奖励从每块 25 BTC 降低到 0 BTC, 我们会看到有多少矿工选择运行!)
如果大多数网络 (比特币, 大部分是由计算能力决定的) 选择运行新版本的软件, 那么新式块的创建速度会比少数快, 而少数将被迫切换或在区块链中变得无关紧要因此, 拥有大量计算能力的矿工对于实施什么有很多说法
写访问: 你如何控制谁可以写数据?
在比特币网络中, 理论上任何人都可以下载或编写一些软件, 并开始验证交易和创建块只需转到 https://bitcoin.org/en/download 并运行比特币核心软件即可
你的计算机将充当完整节点, 这意味着:
连接到比特币网络
下载区块链
存储区块链
监听交易
验证交易
传递有效的交易
监听块
验证块
传递有效的块
创建块
'挖掘'块
该比特币核心软件的源代码在 Github 上发布: https://github.com/bitcoin/bitcoin 如果你非常喜欢, 你可以检查代码自行编译并运行, 而不是在 bitcoin.org 上下载预先打包的软件只要它符合协议你甚至可以编写你自己的代码
以太坊在这方面的工作方式类似 - 请参阅以太坊简介
无权限
请注意, 你无需注册, 登录或申请加入网络你只需加入即可与 SWIFT 网络进行比较, 你不仅可以下载某些软件并开始监听 SWIFT 消息通过这种方式, 有人称比特币无权限, 而 SWIFT 将被许可
无权限不是唯一的方法
你可能希望在可信私有的网络中使用区块链技术你可能不想公布所有有效交易或区块的规则你可能想要控制网络规则的更改方式控制一个值得信赖的私人网络比一个不受信任的类似免费比特币网络更容易
防守: 你如何阻止恶意破坏?
无权限或开放网络存在的问题是他们可能受到任何人的攻击因此需要有一种使整个网络成为可信赖的方式
恶意破坏者会做什么不会做什么?
不诚实的矿工会:
拒绝将有效的交易传递给其他节点
尝试创建包含或不包含矿工选择的具体交易的块
尝试创建一个较长链的区块, 使以前接受的区块成为孤块而不是成为主链的一部分
他不会:
凭空创造比特币 *
从你的帐户中窃取比特币
以你的名义付款或伪装成你
那是一种解脱
* 他有且只有在他的账本版本才会有这些交易其他节点会拒绝这一点, 这就是为什么跨多个节点确认事务非常重要
通过交易, 不诚实矿工所起的效果非常有限如果网络的其他部分是诚实的, 他们会拒绝来自不诚实矿工的任何无效交易, 并且他们会监听到来自其他诚实节点的有效交易, 即使不诚实矿工拒绝通过它们
区块, 如果不诚实矿工有足够的创建区块的计算能力(而这正是区块所需要的), 他可以通过拒绝将其纳入自己的块耽误你的交易然而, 你的交易仍然会被其他诚实的节点认为是未经确认的交易, 并且他们会将你的交易信息包含在他们的块中
更糟糕的是, 如果不诚实矿工能够创造网络中的最长链, 并且引用最长链规则来剔出更短的链块这会让他放弃一笔交易
你可以这样做:
使用相同比特币创造两种不同付款方式: 一个给在线零售商, 另一个给自己(另一个地址由你自己控制)
只广播支付给零售商的付款信息
当付款信息被添加到一个诚实的块中时, 零售商会向你发货物
秘密创建一个更长链块, 不含有付给零售商的款项, 而是付给你自己的款项
发布这个更长链块如果其他节点按照最长链规则规则运作, 那么他们将忽略零售商支付的诚实块, 并继续构建你的较长链含有付款信息的诚实块被说成是孤块, 它本来的目的将不再存在
含有原始付款给零售商信息的块将被视为无效节点, 因为这些比特币已经花在了(你的秘密长链)
"双花" 问题攻击
这被称为双重支出, 因为相同的比特币花了两次 - 但第二个是成为最终区块链的一部分, 第一个最终被拒绝 你如何让不诚实的矿工挖矿更难?
请记住, 这只是区块创建者不被信任的分类帐的问题
基本上你想让它变得困难, 或者让不诚实矿工添加块而付出代价在比特币中, 需要算力昂贵来完成的计算上的昂贵意味着需要大量的计算机处理能力, 并转化为财务上的昂贵(因为购买计算机需要成本, 然后还要运行和维护)
计算本身是一种猜测游戏, 其中块创建者需要猜测一个数字, 当与块数据内容的其余部分进行比较时, 结果产生小于特定数目的散列 / 指纹这个数字与采矿难度有关, 而采矿难度又和整个网络的算力相关加入计算块的计算机越多, 越难自行调节
每 2,016 块(大约每 2 周), 比特币网络就会根据块的创建速度来调整猜谜游戏的难度
这个猜谜游戏被称为工作量证明通过发布指纹小于目标号码的区块, 证明你已经做了足够的猜测工作以在该时间点满足网络
激励措施: 你如何支付验证者?
交易和块验证是便宜和快速的, 除非你选择使它慢而且昂贵(比特币)
如果你在自己的网络中控制验证器, 或者它们是可信的, 那么
你不需要增加块和昂贵的代价
因此你可以减少激励他们的需要
你可以使用其他方法, 例如我们将支付人员运行验证程序或人员签署运行验证程序和表现的合同
由于比特币的公共结构, 它需要防御歹徒, 因此需要使用工作量证明来使计算困难增加一个块 (参见防御部分) 这增加了采矿成本(设备和运行成本), 因此需要激励
就像黄金价格决定了你可以在金矿上花费多少设备一样, 比特币的价格决定了采用多少算力来保护网络价格越高, 挖掘越多, 歹徒就越需要花费更多破坏网络
所以, 矿工们做了大量的挖矿工作, 增加了难度并且提高了对网络攻击的防范他们根据时间表使用比特币进行奖励, 随着区块奖励的减少, 交易费用成为矿工热衷的激励
比特币理想化情况, 是块奖励被交易费用取代
这在理论上都是非常好的, 但是你越是关注这个问题, 它就越有意思, 而且在比特币解决方案中, 激励可能不会像预期的那样发挥作用这是另一篇文章的内容...
结论
了解比特币背景下的区块链很有用, 但是你不应该假设所有区块链生态系统都需要比特币机制, 例如代币, 工作量证明, 最长链规则等比特币是第一次尝试分布式公共账本, 不受中心节点的控制和管理以太坊是智能合约区块链的下一次迭代这仍然有很多重大挑战
另一方面, 私人或内部分布式帐本和区块链可以用来解决其他一系列问题与以往一样, 每种解决方案都存在优缺点, 你需要针对每个单独的用例分别考虑这些问题
如果你有具体的能被区块链解决的问题, 我会很乐意听到, 请联系我
感谢
感谢 David Moskowitz, Tim Swanson, Roberto Capodieci 如有错误遗漏简化请归咎于我
来源: https://cloud.tencent.com/developer/article/1057745