《精通比特币》读书笔记

  可以是任意值尽管UTXO,创造出来了但只要它被,的硬币一样不可再分了就像不能被切成两半。比一笔交易所需量大如果一个UTXO,个整体而消耗掉它仍会被当作一,易中生成零头但同时会在交。易都会产生找零大部分比特币交。

  定脚本一个锁,是“障碍”也被当作,足的条件以“锁住”这笔总提出支付输出所必须被满额

  11位的不同集合4。把顺序分解成,定义的2048个单词字典做对并用这些集合去和一个预先已经应

   查看我们钱包中所有剩余的从之前交易中已确认的支bitcoin-cli listunspent出

  n命令显示的交易格式为简化格式用gettransactio。代码并且将之解码若要得到整个交易,用两个命令我们将使:

  殊的钱包管理染色币由特,附在染色币上的元信息这类钱包存储和解析依。类钱包的时候用户在使用这,特殊含义的标签的方式可以通过增加有着某种,票证明、优惠券信息、实际财产、商品或者可收集的代币等等将一般的比特币“染色”为染色币这种标签的内容可以表示股。解读这类标签如何书写和,比特币“染色”的人完全取决于给这枚,分比特币上的元信息属性他可以决定附着在这部。再分割、某种符号或描述比如信息类型、能不能,的相关信息或者其他。币一旦被染色这部分比特,分割、合并和获取利息等这些币可以用来交易、。通过删除附着信息的方式被染色的比特币也可用,特币恢复为普通比特币也能将“被染色的”比。

  量证明(proof-of-work)算法挖矿节点通过运行在特殊硬件设备上的工作,式创建新的区块以相互竞争的方。同时也是全节点一些挖矿节点,的完整拷贝保有区块链;矿的节点是轻量级节点还有一些参与矿池挖,器维护的全节点进行工作它们必须依赖矿池服务。

  维护一份未确认交易的临时列表比特币网络中几乎每个节点都会,池或交易池被称为内存。络所知晓、但还未被区块链所包含的交易节点们利用这个池来追踪记录那些被网。已经接收但还未被确认的、属于该用户钱包的预支付信息保存用户钱包的节点会利用这个交易池来记录那些网络。

  XO被称为交易输入被交易消耗的UT,XO被称为交易输出由交易创建的UT。种方式通过这,在不同所有者之间转移一定量的比特币价值,耗和创建UTXO并在交易链中消。有者的签名来解锁UTXO一笔比特币交易通过使用所,币地址来锁定并创建UTXO并通过使用新的所有者的比特。

  或多个连接后当建立一个,的addr消息发送给其相邻节点新节点将一条包含自身IP地址。依次转发给它们各自的相邻节点相邻节点再将此条addr消息,节点所接收、保证连接更稳定从而保证新节点信息被多个。外另,节点发送getaddr消息新接入的节点可以向它的相邻,等节点的IP地址列表要求它们返回其已知对。种方式通过这,连接到的对等节点节点可以找到需,息以便其他节点查找并向网络发布它的消。

  大账簿——区块链的一部分时才会被确认有效网络中产生的一笔交易直到成为整个比特币。

  例子举个,生成100个随机私钥比特币核心客户端预先,钥并且每把钥匙只使用一次从最开始就生成足够多的私。ch Of Keys(一堆私钥)”简称JBOK这种类型的钱包有一个昵称“Just a Bun。

  merkle树根第三组元数据是,块中所有交易的数据结一种用来有效地总结区构

  特币核心客户端上在0。9版的比,rn操作符最终实现了妥协通过采用OP_Retu。易输出上增加40字节的非交易数据OP_Return允许开发者在交。后然,UTXO不同与伪交易型的,种明确的可复查的非交易型输出OP_Return创造了一,存储于UTXO此类数据无需集

  议协调成百上千的矿工矿池通过专用挖矿协。立矿池账号后个人矿工在建,连接到矿池服务器设置他们的矿机。保持和矿池服务器的连接他们的挖矿设备在挖矿时,步各自的工作和其他矿工同。样这,分享挖矿任务矿池中的矿工,享奖励之后分。

  一个单独的孤立交易池有些节点的实现还维护。与某未知的交易有关如果一个交易的输入,父交易相关如与缺失的,立交易池中直到父交易的信息到达该孤立交易就会被暂时储存在孤。

  一笔交易到下一个区块中的一种鼓励交易费可当作是为了包含(挖矿),易和任何种类的系统滥用也可当作是对于欺诈交,小成本的税而造成的一种妨碍在每一笔交易上通过征收一笔。个区块的矿工得到交易费被挖出这,交易的区块链中并且记录在这个。

  H交易中在P2S,由哈希取代锁定脚本,是赎回脚本哈希指代的。现而不是以锁定脚本模式出现因为它在系统中是在赎回时出。

  定性确,离散方程而可从公共的种子生成的私钥或者“种子”钱包包含通过使用单项。

  收到一个新区块时矿工一旦从网络上,的解题竞赛已经输掉了会意识到在这个区块上,新区块的挖掘工作会马上开始下一个。字指纹放在一起开始构建下一个新区块它会立刻将一些交易和这个新区块的数,算工作量证明并开始给它计。

  交易都是P2PKH交易比特币网络上的大多数,有一个锁定脚本此类交易都含,实现阻止输出功能该脚本由公钥哈希,人知的比特币地址公钥哈希即为广为。公钥和由相应私钥创设的数字签名得以解锁由P2PKH脚本锁定的输出可以通过键入。

  一对等节点被批量请求所压垮通过分摊工作量的方式防止单。(指那些它已经发出了请求但还没有接收到)的区块数量该节点会追踪记录其每个对等节点连接上“正在传输”,KS_IN_TRANSIT_PER_PEER)且检查该数量有没有超过上限(MAX_BLOC。要更新大量区块如果一个节点需,才发送对新区块的请求它会在上一请求完成后,点控制更新速度从而允许对等节,压垮网络不至于。

  脚本在一个输出上设定的花费条件的脚本解锁脚本是一个“解决”或满足被锁定,许输出被消费同时它将允。特币交易输出的一部分解锁脚本是每一笔比,包(通过用户的私钥)生成的数字签名而且往往含有一个被用户的比特币钱。包含一个数字签名由于解锁脚本常常,criptSig因此它曾被称作S。都一定会包含签名并非所有解锁脚本。

  供了有限的接口硬件钱包:只提,供近乎万无一失的安全等从而可以给非专业用户提级

  V节点从对等节点里收到的交易信息Bloom过滤器被用来过滤SP。节点钱包里的地址匹配的过滤器SPV会建立一个只能和SPV。后随,接中使用的过滤器的filterload消息SPV节点会向对等节点发送一条包含需在该连。建好之后当过滤器,输出值代入过滤器中验证对等节点将每个交易的。被传送回SPV节点那些匹配的交易会。

  易费的交易可能会被推迟交易费不足或者没有交,在几个区块之后被处理基于尽力而为的原则,本不被处理甚至可能根。是强制的交易费不,易也许最终会被处理而且没有交易费的交,是但,提高处理优先级包含交易费将。

  这类攻击为了避免,到全网的6个确认之后再交付商品售卖大宗商品的商家应该在交易得。者或,多方签名的账户进行交易商家应该使用第三方的,全网多个确认之后再交付商品并且也要等到交易账户获得。确认数越多一条交易的,过51%攻击篡改越难被攻击者通。

  言包含许多操作比特币脚本语,或者复杂流控制功能以外的其他条件的流控制但都故意限定为一种重要的方式——没有循环。

  上海这绵绵无期的雨文/温佛佳 谢了,打雨棚雨点敲,酣畅淋漓的梦惊破了我四更。起来我坐,了床下,开帘拉,弥漫雨雾,。。。

  创业者你是个,边等车的巴菲特突然偶遇在路,说些什么你该对他,你? 我脑补了一下这个画面让他在车还没来之前决定投资,。。。

   Buterin写的pybitcointool最全面的比特币Python库是 Vitaliks

  时候任何,最多难度的区块链主链都是累计了。情况下在一般,多区块的那个链主链也是包含最,其中一个有更多的工作量证除非有两个等长的链并且。有一些分支主链也会,上的区块互为“兄弟”区块这些分支中的区块与主链。是有效的这些区块,链的一部分但不是主。它们中的一个延长了并在难度值上超过了主链保留这些分支的目的是如果在未来的某个时刻,块就会引用它们那么后续的区。

  币交易被创建一旦一笔比特,有者(们)签名它会被资金所。创建并签名的如果它是合法,在就是有效的则该笔交易现,金所需要的所有信息它包含了转移这笔资。

  整个网络传送时当一条交易链被,相同的顺序到达目的地他们并不能总是按照。时有,交易之前到达子交易在父。情况下在这种,到一个子交易节点会首先收,参考的父交易而不能找到他。抛弃这个子交易节点不会立即,个临时池中而是放到一,它的父交易并等着接收,子交易给其他节点与此同时广播这个。池被称作孤立交易池没有父交易的交易。

  攻击或其他针对比特币系统的恶意攻击为了避免垃圾信息的滥发、拒绝服务,交易之前均进行独立验证每一个节点在传播每一笔。易所能到达的节点不会超过一个/fontfont color=red一个异常交。

  账户机制(也即区块链)比特币的分发和时间戳,大超越支付领域其潜在运用将大。优势将其运用于电子公证服务、证券认证和智能协议等领域许多开发者试图充分发挥交易脚本语言的安全性和可恢复性。

  这50K字节的时候“挖矿节点在填充,最高优先级的交易会优先考虑这些,包含了矿工费不管它们是否。级交易即便是零矿工费这种机制使得高优先,先被处理也可以优。后然,包含最小矿工费的交易挖矿节点会选出那些,矿工费”进行排序并按照“每千字节,交易来填充剩下的区块优先选择矿工费高的,_BLOCK_SIZE区块大小上限为MAX。

  ore):在比特币p2p网络中核心客户端(bitcoin c,块链数据库、网络路由节点包含钱包、矿工、完整区。

  H160 Cafe Public Key Hash OP_EQUAL OP_CHECKSICafe Signature Cafe Public Key OP_DUP OP_HASG

  为全节点的一部分用户钱包也可以作,客户端中比较常见这在桌面比特币。前当,包都是SPV节点越来越多的用户钱,源受限设备上的比特币钱包应用尤其是运行于诸如智能手机等资;越来越普遍而这正变得。

  特币地址需要多个签名才能支付多重签名管理: 多重签名比,资金的安从而保证全

  输入链来说对于输出和,个例外有一,殊的交易类型它是一种特,base交易称为Coin。中的首个交易这是每个区块。生全新的可用于支付的比特币给“赢家”矿工这种交易存在的原因是作为对挖矿的奖励而产。以在挖矿过程中被创造出来这也就是为什么比特币可。

  挖矿功能、以及比特币p2p网络路由节独立矿工:包含具有完整区块链副本的点

  性钱包中在确定,的已经产生的私钥种子足够收回所有,一个简单备份就足以搞定所以只用在初始创建时的。

  比特币客户端中在最早的一批,生成的私钥集合钱包只是随机。称作零型非确定钱包这种类型的钱包被。

  的是预发行版本带有rc后缀,来测试可以用。以直接在产品环境上运行没有后缀的稳定版本可。

  币地址是P2SH地址以数字3开头的比特,重签名或多重签名地址有时被错误的称谓多。受益人作为哈希的脚本他们指定比特币交易中,钥的所有者而不是公。

  wallet wallet。backubitcoin-cli importp

  的“紧急广播系统”警告消息是比特币,给所有比特币节点发送紧急文本消息比特币核心开发人员可以借此功能。币网络的严重问题通知所有的比特币用户这一功能是为了让核心开发团队将比特,取措施的的严重bug例如一个需要用户采。止只被用过几次警告系统迄今为,是在2013年最严重的一次,币区块链中出现了一个多区块分叉一个关键的数据库缺陷导致比特。

  维克多。帕帕奈克 (Victor papanek) 著 。。Design For The Real World[美] 。

  1hvzSofGwT8cjb8JU7nBsCSfEVQX5u9CL bitcoin-cli getreceivedbyaddress 0

  说就是简单点,出会包含一个脚本支付方的交易输,一个签名和接收方的公开地址匹配上这个脚本说 “这个输出谁能拿出,给谁”就支付。私钥可以匹配这个地址因为只有接收方钱包的,提供这个签名以兑换这笔输出所以只有接收方的钱包可以。收方的签名来包装一个输出因此支付方式会用需要接。

  的交易大小为258字节支付方的钱包应用创建,属需要的全部信息包含了金额未来所。的最后最后,以成为分布式账簿(区块链)的一部分这个交易必须要被传送到比特币网络中。

  因为付的钱很多高交易费不是,很复杂并且尺寸很大而是因为她的交易,易的比特币值无关的交易费是与参加交。

  包输入或者输出种子也足够让钱。钥在钱包之间轻松转移输入这就很容易允许使用者的私。

  应该只受限于比特币的共识机制一个没有漏洞的比特币应用程序,任源于比特币最坚固的部分这意味着其安全体系的信。

  的交易中增加找零的输出如果你忘记了在手动构造,作交易费来处理系统会把找零当。来说举例,UTXO来完成1比特币的付款如果你消耗了一个20比特币的,特币的找零回到你的钱包你必须包含一笔19比。则否,币会被当作交易费那剩下的19比特,到一个区块中的矿工收走并且会被挖出你的交易。高优先级的处理尽管你会受到,矿工喜出望外并且让一个,不是你想要的但这很可能。

  质上本,00到400字节的数据一笔比特币交易只是3,万个比特币节点中的任意一个而且它们必须被发送到成千上。特币节点来确保这笔交易被传播只要发送者能使用多于一个比,来传播该笔交易的单一节点那么发送者并不需要信任用。

  到比特币客户端软件里因为创世区块被编入,少包含一个区块的区块链所以每一个节点都始于至,区块不会被改变这能确保创世。、结构、被创建的时间和里面的一个交易每一个节点都“知道”创世区块的哈希值。此因,作为区块链的首区块每个节点都把该区块,的、可信的区块链的根从而构建了一个安全。

  钥以及加密算法(ECDSA)共识攻击也不会影响用户的私。特币、重新分配比特币、改变过去的交易或者改变比特币持有纪录共识攻击也不能从其他的钱包那里偷到比特币、不签名地支付比。多10个)并且通过拒绝服务来影响未来区块的生成共识攻击能够造成的唯一影响是影响最近的区块(最。

  包含一系列的密钥对一个比特币钱包中,个私钥和一个公钥每个密钥对包括一。是一个数字私钥(k),机选出的通常是随。私钥有了,线乘法/font这个单向加密函数产生一个公钥(K)我们就可以使用font color=red椭圆曲。

  可以有任意数值一笔比特币交易,UTXO中创建出来但必须从用户可用的。TXO进一步细分用户不能再把U,开而继续当货币使用一样就像不能把一元纸币撕。用的个体来拼凑出一个大于或等于一笔交易所需的比特币量用户的钱包应用通常会从用户可用的UTXO中选取多个可。

  10分钟平均每,生的所有交易生成一个新的区块矿工会将自上一个区块以来发。

  定账户作为资金来源的一张支票是指定一个特,的一笔交易作为其资金来源但是比特币交易指定以往,个特定账户而不是一。

  一个脚本进行验证如果您的系统对,中的其他系统也将对其进行验证可以确信的是每一个比特币网络,对每个人而言都是有效的这意味着一个有效的交易,都明白这一点而且每一个人。预见性是比特币系统的一项重要良性特征/fontfont color=red这种对于结果的可。

  同样可以使用getblockhash命令通过区块高度来检索一个区块bitcoin-cli getblockhash ${高度} 我们,块高度作为参数这样需要将区,块的区块哈希值并返回那个区。

  款基于Python库pycoin 是一,的操作和交易的客户端并可以支持比特币密钥,言从而处理非标准交易甚至可以支持编译语。

   A Public Key A OP_CHECKSISignature from Private KeyG

  交易数量是有限制的内存中储存的孤立,点的拒绝服务攻击(DoS)这是为了防止针对比特币节。的MAX_ORPHAN_TRANSACTIONS这个限制被定义在比特币涉及到的客户端的源代码中。

  需下载区块头SPV节点只,个区块中的交易信息而不用下载包含在每。交易信息的区块链由此产生的不含,链的1/1000大小只有完整区块。用于消费的UTXO的全貌SPV节点不能构建所有可,络上所有交易的完整信息这是由于它们并不知道网。

  到对等节点之后一个全节点连接,是构建完整的区块链第一件要做的事情就。一个全新节点如果该节点是,任何区块链信息那么它就不包含,——静态植入在客户端软件中的创世区块/fontfont color=red它只知道一个区块。区块)开始的数十万区块的全部内容新节点需要下载从0号区块(创世,、并重建全区块链才能跟网络同步。

  可用于支付的解锁脚本的特点OP_RETURN不涉及,使用其输出中所锁定的资金OP_RETURN不能,蕴含潜在成本的UTXO集中因此它也就没有必要记录在,RN实际是没有成本的所以OP_RETU。一个金额为0的比特币输出OP_RETURN常为,应的比特币都会永久消失因为任何与该输出相对。

  atoshi创建的P2PKH是由S,使比特币地址更简短主要目的一方面为,之更方便使用另一方面也使。base交易中最为常见P2PK目前在Coin,易由老的采矿软件产生Coinbase交,至P2PKH目前还没更新。

  到不同类型的比特币钱包分散风险:将风险分散。5%)的比特币在一个在线的或手机钱包审慎的用户应该只留一小部分(或许低于,用钱一样就像零,不同存储机制分散开来其余的部分应该采用,线(冷存储)钱包诸如电脑钱包和离。

  方式是另一种,动的节点(该节点不包含任何比特币网络的组成信息)起始时将至少一个比特币节点的IP地址提供给正在启。之后在这,续指令建立新的连接启动节点可以通过后。de”把启动节点“引荐”并连接到一个节点用户可以使用命令行参数“-seedno,作DNS种子并将该节点用。

  哈希值小于难度目标的nonce挖矿的目标是找到一个使区块头。至数万亿个不同的nonce取值挖矿节点通常需要尝试数十亿甚,条件的nonce值直到找到一个满足。

  做ether的货币以太坊内置一种叫,行之费用所必须的该货币是付合约执。录的东西叫做合约以太坊区块链记,合约所谓,级二进制码就是一种低,灵完备语言也是一种图。质上本,系统中各个节点上的程序合约其实是运行在以太坊。

  基于一个不变的模式比特币交易验证并不,脚本语言来实现而是通过运行。多到数不尽的条件变种这种语言可以表达出。编程的货币”所拥有的权力这也是比特币作为一种“可。

  钥以Base58校验和编码格式显示dumpprivkey命令会把私,钱包导入格式(WIF这种私钥格式被称为,ort FormatWallet Imp)

  -1之间的任何数字私钥可以是1和n,=1。158 * 1其中n是一个常数(n0

  币上存储信息的一种元协议染色币:一种在少量比特。染色的”币一个“被,表达另一种资产的比特币是一定数额的重新用于。

  LevelDB数据库存储区块链元数据比特币核心客户端使用Google的。地链接在这个链条里区块被从后向前有序,向前一个区块每个区块都指。为一个垂直的栈区块链经常被视,为栈底的首区块第一个区块作,放置在其他区块之上随后每个区块都被。

  付款时当用户,UTXO来构造一笔交易他的钱包通过选择可用的。如说比,015比特币要支付0。,TXO和一个0。005 UTXO钱包应用会选择一个0。01 U,来得到想要的付款额使用它们加在一起。

  易的支付环节在比特币交,过其数字指纹表示的收件人的公钥是通,特币地址称为比,的名字(即“收款方”)就像支票上的支付对象。情况下一般,生成并对应于这个公钥比特币地址由一个公钥。而然,币地址都是公钥并非所有比特;表其他支付对象他们也可以代,脚本譬如。一来这样,款方抽象起来了比特币地址把收。

  “双重支付”攻击共识攻击中除了,某个特定的比特币地址提供服务还有一种攻击场景就是拒绝对。大多数算力的攻击者一个拥有了系统中绝,某一笔特定的交易可以轻易地忽略。一个矿工所产生的区块中如果这笔交易存在于另,以故意分叉该攻击者可,生这个区块然后重新产,易从这个区块中移除并且把想忽略的交。成的结果就是这种攻击造,系统中的绝大多数算力只要这名攻击者拥有,某一批特定钱包地址产生的所有交易那么他就可以持续地干预某一个或,些地址服务的目的从而达到拒绝为这。

  出了一个通用标准BIP0038提,58Check对加密的私钥进行编码使用一个口令加密私钥并使用Base,安全地保存在备份介质里这样加密的私钥就可以,钱包间传输安全地在,被暴露情况下的安全性保持密钥在任何可能。

  现是用于多重签名地址脚本P2SH函数最常见的实。思义顾名,签名来证明所有权底层脚本需要多个,消费资金此后才能。密钥中需要M个签名(也被称为“阈值”)设计比特币多重签名特性是需要从总共N个,-N多签名被称为M,于或小于N其中M是等。

  输出被记录在区块链上OP_Return,耗磁盘空间它们会消,链规模的增加也会导致区块,在UTXO集中但它们不存储,UTXO内存膨胀因此也不会使得,存为代价使全节点都不堪重负更不会以消耗代价高昂的内。

  是如果你生成很多随机钥匙的缺点就,们所有的副本你必须保存它。必须被经常性地备份这就意味着这个钱包。都必须备份每一把钥匙,包不可访问时否则一旦钱,资金就付之东流钱包所控制的。

  个或者多个签名加密比特币交易会被一,向的比特币资金的使用许可这些签名标志着对该交易指。

  值获取一笔交易通过交易哈希。确认之前并不权威txid在交易。并不意味着此笔交易没有进行区块链中找不到交易哈希值。交易延展性”这被称作“,确认之前是可以更改的因为交易哈希值在区块。d是不变且权威的在确认之后txi。

  语言的全节点比特币工具btcd是一款基于Go。前目,则(包括bugs)它通过使用精准的规,和服务区块链下载、验证。来的区块来维持交易池它同时依靠新发掘出,成区块的单独交易同时依赖没有形。则以及检查下在缜密的规,立交易的安全确保了每笔独,于矿工需求的交易并且可以过滤基。区别是btcd不包含比特币钱包的功能btcd与bitcoind的一个主要,个精心的设计其实这是一。btcd进行比特币交易这意味着你不能直接通过。allet与btcgui两个项目提供然而这项功能可以由正在研发的btcw。tcoind)与推荐使用的Websockets两种通信协议的请求另一个显著的区别是btcd同时支持HTTP POST(比如bi。接默认设置为TLS-开启并且btcd的RPC连。

  特币里在比,的完全去中心化的公开账本共识系统创建了一个可信,用创世块作为信任的根源一个正确验证过的区块使,前区块的可信任链建立一条直至当。区块链作为它们的信任根源比特币系统可以并应该使用。务机制的比特币应用时在设计一个多系统服,确认安全体系你应该仔细,信任能有据可依以确保对它的。终最,一条完全有效的区块链唯一可确信无疑的是。地信赖于区块链以外的东西如果你的应用程序或明或暗,起重视就该引,会引入漏洞因为它可能。的安全体系:单独考量每个组件一个不错的方法评估你应用程序,破并被坏人掌控的场景设想该组件被完全攻。程序的每个组件依次取出应用,对整体安全的影响并评估它被攻破时。性在该组件沦陷后大打折扣如果你的应用程序的安全,这些组件过度信任了那就说明你已经对。

  意一个已联接到互联网的比特币客户端钱包应用可以发送新的交易给其它任。连着接收方的比特币钱包支付方的钱包不必直接。过的有效交易时会立刻将它转发给联接到自身的其它节点任何比特币网络节点(其它客户端)收到一个之前没见。此因,2P网络中传播开来这个交易迅速地从P,达大多数节点几秒内就能到。

  花费的UTXO的“块龄”决定交易的优先级是由交易输入所,新的、输入值小的交易拥有更高的优先级交易输入值高、“块龄”大的交易比那些。有足够的空间如果区块中,为将不需要矿工费高优先级的交易行。

  CoinBit,(区块链)的一份完整拷贝比特币核心拥有交易账簿,明以来发生在比特币网络上的每一笔交易里面记录了自2009年比特币网络被发。

  BIP0038加密过的私钥许多钱包APP现在能够识别,令解码并导入密钥会要求用户提供口。

  链进行独立选择每个节点对区块,red选择累计工作量最大的区块链/fon在工作量证明机制下font color=t

  与直接向比特币地址支付一样简单P2SH旨在使复杂脚本的运用能。H支付中在P2S,被电子指纹所取代复杂的锁定脚本,密码学哈希电子指纹为。支付UTXO时当一笔交易试图,支付脚本要解锁,希相匹配的脚本它必须含有与哈。

  添加到交易池中当一个交易被,孤立交易池会同时检查,了此交易的输出(子交易)看是否有某个孤立交易引用。交易会被进行验证任何匹配的孤立。证有效如果验,交易池中删除它们会从孤立,交易池中并添加到,始的链变得完整使以其父交易开。池的交易来说对新加入交易,孤立交易它不再是。寻找进一步的后代前述过程重复递归,后代都被找到直至所有的。一过程通过这,交易和它们的父级交易重新结合在一起一个父交易的到达把整条链中的孤立,交易链进行级联重构从而触发了整条独立。

  定接收方发送一个指定数额一笔比特币交易只授权向指,修改或伪造并且不能被。任何个人信息它不会透露,人的身份例如当事,权限外的支付也不能用于。此因,需要加密或防窃听保护比特币的支付网络并不。

  UTXO的指针交易输入是指向。定的UTXO它们指向特,录UTXO的序列号作为参考并被交易哈希和在区块链中记。

  SHA256( public key )比特币地址A = RIPEMD160()

  比特币余额”“一个用户的,币钱包应用创建的派生之物这个概念是一个通过比特。于该用户的UTXO来计算该用户的余额比特币钱包通过扫描区块链并聚合所有属。

  生成器来产生256位的熵(随机性)比特币软件使用操作系统底层的随机数。情况下通常,人工的随机源进行初始化操作系统随机数生成器由,停晃动鼠标等方式进行初始化也可能需要通过几秒钟内不。

  输入值和输出值的数据结构一笔比特币交易是一个含有,入值)转移至目标地址(输出值)的代码信息该数据结构植入了将一笔资金从初始点(输。

  进行加密签名警告通过公钥。团队的一些特定成员所持有对应的私钥是由核心开发。虚假警告不会在网络中传播这样的数字签名可以确保。

  的getdata信息为回应来自SPV节点,过滤器匹配的区块的区块头信息对等节点会发出一条只含有和,易的merkle树以及与之相匹配的交。条相匹配的交易的tx消息这一对等节点还会发出一。

  :要么是在交易被确认之前双重支付可以有两种方式,块链分叉来完成要么攻击者通过。%攻击的人进行51,叉上的交易记录可以取消在旧分,成一个同样金额的交易然后在新分叉上重新生,双重支付从而实现。

  证比特币交易:一个锁定脚本和一个解锁脚本比特币的交易验证引擎依赖于两类脚本来验。

  ”(1亿分之1个比特币)来表示的交易输入的值是由比特币单位“聪。被记录到区块链为止所经历过的区块数UTXO的“块龄”是自该UTXO,在区块链中的深度即这个UTXO。

  近最,产生51%攻击的担忧下在集中式矿池已经接近,的份额增长显著P2Pool。

  终最,个挖矿节点验证比特币交易被一,录着许多比特币交易的区块中并被添加到区块链上一个记。

  常被忽视的安全性考虑是可用性存活能力:一个非常重要却又常,工作能力或死亡的情况下尤其是在密钥持有者丧失。

  会有不止一个子区块尽管一个区块可能,有一个父区块但每一区块只,哈希值”字段可以指向它的唯一父区块这是因为一个区块只有一个“父区块。让区块链的历史不可改变一个长区块链的存在可以,性的一个关键特征这也是比特币安全。

  内建的简易随机数生成器来获得一个随机数一定不要使用自己写的代码或使用编程语言。伪随机数生成器(CSPRNG)我们建议读者使用密码学安全的,有足够熵值的源的种子并且需要有一个来自具。生器的程序库时使用随机数发,读其文档需仔细研,加密安全的以确保它是。现是密钥安全性的关键所在对CSPRNG的正确实。

  中包含一个特殊的交易每个矿工会在他的区块,特币)作为报酬支付到他自己的比特币地址将新生成的比特币(当前每区块为25比。新区块有效的解法如果他找到了使得,到这笔报酬他就会得,加入到了总区块链中因为这个新区块被,易也会变成可消费的他添加的这笔报酬交。

  le树是二叉树因为Merk,数个叶子节点所以它需要偶。个交易需要归纳如果仅有奇数,一份以构成偶数个叶子节点那最后的交易就会被复制,的树也被称为平衡树这种偶数个叶子节点。

  初起,的一个固定常数交易费是网络中。渐地渐,构被放宽了交易费的结,量和交易量而强制影响以便被市场基于网络容。千字节0。0001比特币目前最小交易费被固定在每,节万分之一比特币或者说是每千字,一比特币减少到这个数值的最近一次改变是从千分之。少于一千字节大多数交易,输出的交易尺寸可能更大但是那些包含多个输入和。币协议修订版中在未来的比特,使用统计学分析钱包应用预计会,交易的平均费用基于最近的几笔,费用并附在交易上来计算最恰当的。

  过该区块在区块链中的位置第二种识别区块的方式是通,ck height)”即“区块高度(blo。个区块第一,高度为0其区块,46a2a6c172b3f1b60a8ce26f所引用的区块为同一个区块和之前哈希值9d6689c085ae165831e934ff763ae。

  ase58check编码过的加密私钥BIP0038加密方案的输出一个由b,为6前缀P

  协议节点(S)或者矿池挖矿协议节点(P)的挖矿功挖矿节点:包含不具有区块链、但具备stratum能

  结果显示为线})如果堆栈顶部的,本执行后堆栈为空情形即为任何非零值或脚,易有效则交。显示为假(0字节空值如果堆栈顶部的结果,本执行被操作符禁止标记为{})或脚。

  先首,擎执行解锁脚本使用堆栈执行引。未报错(没有悬空操作符)如果解锁脚本在执行过程中,堆栈)将被复制主堆栈(非其它,将被执行然后脚本。的数据执行锁定脚本的结果为真如果采用从解锁脚本处复制而来,足了锁定脚本所设置的条件那么解锁脚本就成功地满,而因,该UTXO的有效授权该输入是一个能使用。脚本后的结果不是真如果在执行完组合,不是有效的那么输入就,所设置的使用该笔资金的条件因为它并未能满足UTXO中。

  wallet wallet。backubitcoin-cli backupp

  终保持机密私钥必须始,泄露给第三方因为一旦被,的比特币也拱手相让了相当于该私钥保护之下。

  行锁定和解锁脚本来验证一笔交易每一个比特币客户端会通过同时执。中的每一个输入对于比特币交易,入所指向的UTXO验证软件会先检索输。义了花费条件的锁定脚本这个UTXO包含一个定。下来接,TXO的输入中所包含的解锁脚本验证软件会读取试图花费这个U,两个脚本并执行这。

  twallet ${passwordbitcoin-cli encryp}

  与用户钱包相关交易的数据库比特币核心默认建立包含仅。action的命令访问所有交易若你想使用类似gettrans,建立一个完整的交易索引你需要配置比特币核心去,index选项实现这个可以通过tx。赋值为1(通常在安装目录的f中可以找到)在比特币核心配置文件中将txindex。变了此参数一旦你改,itcoind你需要重启b,重建索引并等待其。

  Alice付给Bob”的形式存在的大多数经比特币网络处理的交易是以“。时同,-Public-Key-Hash)脚本为基础的它们是以一种称为“P2PKH”(Pay-to。而然,锁输入意味着通过使用编程语言通过使用脚本来锁定输出和解,含无限数量的条件比特币交易可以包。

  下的数千个区块来保证这个UTXO没有被支付完整的区块链节点是通过检查整个链中在它之,证交易从而验。区块将它压在下面的深度来验证交易而SPV节点是通过检查在其上面的。

  nf个确认的交易加和后的余额显示所有经过至少minco。了交易在余额中体现的最少确认数“配置项“minconf”决定。

  也衍生出一个风险这样的处理机制,来不能被花费的P2SH中你能将比特币锁定在一个未。会接受这一P2SH因为比特币网络本身,回脚本哈希没有对其所表征的脚本给出指令即便它与无效的赎回脚本所对应(因为该赎)

  图灵完备的平台以太坊是一种,块链账簿基于区,处理和执行用于合约的。币的一个克隆它不是比特,的一种设计和实现而是完完全全独立。

   Public Key B Public Key C 3 OP_CHECKMULTISIOP_0 Signature B Signature C 2 Public Key AG

  方的地址上假如支付,比特币的输出形式金额是0。10,付0。015比特币而此次交易只需要支,85比特币的零钱就需要找0。0。成了两个支付:一个给接收方支付方的钱包将自己的金额分,给自己一个。里消费这笔零钱输出她可以在以后的交易。

  是去中心化核心准则,性具有重要意义这一点对安全。作量证明而非访问控制网络的安全性是基于工,以对所有人开放比特币网络可,币流量进行加密也无需对比特。

  单的规则通过异步交互自发形成的产物共识是数以千计的独立节点遵守了简。特币属性所有的比,和信任的安全模型等都是这个机制的衍生物包括货币、交易、支付以及不依靠中心机构。节点的4种独立过程相互作用而产生比特币的去中心化共识由所有网络:

  的是单个节点的本地视角交易池和孤立交易池代表。动时间或重启时间取决于节点的启,容可能有很大差别不同节点的两池内。反地相,是网络的突显共识UTXO池代表的,此因,O池的内容差别不大不同节点间UTX。外此,池只包含未确认交易交易池和孤立交易,只包含已确认交易而UTXO池之。

  2SH输出时才会在比特币网络中出现因为赎回脚本只有在你试图发送一个P,无效的交易哈希锁定假如你将输出与一个,会被忽略则它将。用该笔资金你将不能使,含有赎回脚本因为交易中,的脚本而不能被接受该脚本因是一个无效。

  证明机制只有一个目的:维护比特币系统的安全font color=red比特币的工作量。个传统货币系统比起来/font跟维护一,本并不高挖矿的成。而然,这一行为是一种浪费某些批评者认为挖矿。

  址从数字1开头传统的比特币地,于公钥来源,源于私钥而公钥来。币发送到一个1开头的地址虽然任何人都可以将比特,钥签名和公钥哈希值后才能消费但比特币只能在通过相应的私。

  的一定数量的比特币交易输出把用聪表示,所必须被满足的条件的障碍和特定的定义了支付输出,锁定脚本或者叫,了一起关联到。数情况下在大多,一个特定的比特币地址上锁定脚本会把输出锁在,所有权转移到新的所有者上从而把一定数量的比特币的。

  连接时在建立,version消息开始“握手”通信过程该节点会通过发送一条包含基本认证内容的,ocalServices(一组该节点支持的本地服务列表包括以下字段:PROTOCOL_VERSION、nL,P地址)、addrMe(本地节点所发现的本机IP地址)、subver(指示当前节点运行的软件类型的子版本号当前仅支持NODE_NETWORK)、nTime(当前时间)、addrYou(当前节点可见的远程节点的I,BaseHeight(当前节点区块链的区块高度例如:/Satoshi!0。9。2。1/)、)

  个包含这笔数额的脚本的形式交易的输出会被创建成为一,的一个解答后才能兑换只能被引入这个脚本。

  所去中心化的过程挖矿是一种将结算,交易进行验证和结算每个结算所对处理的。特币系统的安全挖矿保护了比,中心机构的情况下并且实现了在没有,币网络达成共识也能使整个比特。

  池服务器的功能去中心化P2Pool通过将矿,类似区块链的系统实现一个并行的,份额链名叫。在矿池中采矿要复杂的多P2Pool采矿方式比,机来支持一个比特币的完整节点和P2Pool节点软件因为它要求矿工运行空间、内存、带宽充足的专用计算。矿硬件到本地P2Pool节点P2Pool矿工连接他们的采,来模拟一个矿池服务器的功能它通过发送区块模板到矿机。

  检查第300一个全节点要,中的某个交易000号区块,回溯到创世区块的300它会把从该区块开始一直,全部都链接起来000个区块,的UTXO数据库并建立一个完整,未被支付来证实交易的有效性通过确认该UTXO是否还。

  会创造新的比特币挖矿在构建区块时,发新的纸币很类似和一个中央银行印。特币数量是固定的每个区块创造的比,会渐渐减随时间少

  HA256加密哈希对每个区块头进行S,个哈希值可生成一。个哈希值通过这,链中的对应区块可以识别出区块。时同,区块哈希值”字段引用前一区块(父区块每一个区块都可以通过其区块头的“父)

  过期、超时的概念比特币交易中没有,现在有效一笔交易,永远有效那么它就。而然,在全网广播了一次如果一笔交易只,个挖矿节点的内存中那么它只会保存在一。式保存在挖矿节点存储器中的因为内存池是以未持久化的方,节点重新启动所以一旦这个,就会被完全擦除内存池中的数据。且而,易被传播到了全网即便一笔有效交,时间未处理如果它长,的内存池中消失它将从挖矿节点。时间内被处理而实际没有如果交易本应该在一段,交易或重新支付更高的矿工费那么钱包软件应该重新发送。

  担从输出方(存储于UTXO集P2SH将长脚本数据存储的负,方(仅存储于区块链)影响内存)转移至输入。

  与首区块之间的距离“高度”表示区块;表示最新添加的区块“顶部”或“顶端”。

  全网络的路由功能每个节点都参与,包含其他功能同时也可能。并传播交易及区块信息每个节点都参与验证,对等节点的连接发现并维持与。

  统计模型得出的结论是一些安全研究组织利用,就足以发动51%攻击了算力达到全网的30%。

  包含全部交易信息的比特币区块链拷贝完整区块链节点保有完整的、最新的,进行建立并校验区块链这样的节点可以独立地,直建立到网络中最新的区块从第一区块(创世区块)一。自主地校验任何交易信息完整区块链节点可以独立,他节点或其他信息来源而不需要借助任何其。

  一种通用语言脚本并不是,创造无限循环或其它类型的逻辑炸弹施加的这些限制确保该语言不被用于,植入在一笔交易中这样的炸弹可以,方式攻击比特币网络通过引起拒绝服务的。

  有限精力,ithub为主后期修订以g,ub链接阅读更新版本建议大家移步gith,理解感谢:

  个区块链未来的共识共识攻击只能影响整,者说或,的共识(最多影响过去10个块)最多能影响不久的过去几个区块。时间的推移而且随着,改的可能性越来越低整个比特币块链被篡。

  头哈希值和区块高度区块标识符:区块。它的加密哈希值区块主标识符是,进行二次哈希计算而得到的数字指纹一个通过SHA256算法对区块头。值被称为区块哈希值产生的32字节哈希,是:区块头哈希值但是更准确的名称,头被用于计算因为只有区块。

  哈希的结果是由Base58Check编码前缀为5的版本、编码后得到开头为3的编码地址script hash = RIPEMD160(SHA256(script)) 脚本。

  中没有特殊节点虽然比特币网络,维持一个列表但是客户端会,期稳定运行的节点那里列出了那些长。(seed nodes)”这样的节点被称为“种子节点。与种子节点建立连接新节点并不一定需要,种子节点来快速发现网络中的其他节点但连接到种子节点的好处是可以通过。心客户端中在比特币核,-dnsseed”控制的是否使用种子节点是通过“。情况下默认,设为1该选项,用种子节点即意味着使。

  维护了一个地址池比特币参考客户端,命令keypoolsize参数获取地址池的大小可以用getinfo。自动生成的这些地址是,收地址或零钱地址可以被用作公开接。

  一种是连接到主链上的节点维护三种区块:第,生分支的(备用链)第二种是从主链上产,没有找到已知父区块的最后一种是在已知链中。过程中在验证,符合标准的地方一旦发现有不,会失败验证就,被节点拒绝这样区块会,到任何一条链中所以也不会加入。

  值与账号或者身份信息无关比特币交易的输入值和输出。密信息锁定的一定数量的比特币应该将它们理解成一种被特定秘。秘密信息的人可以解锁只有拥有者或知晓这个。

  金到传统1开头的比特币地址不同于P2PKH交易发送资,3开头的地址时资金被发送到,一个公钥的哈希值需要的不仅仅是,签名作为所有者证明同时也需要一个私钥。址的时候在创建地,定义在脚本中这些要求会被,都会被这些要求阻隔所有对地址的输入。

  个输出值上的“障碍”锁定脚本是一个放在一,花费这笔输出的条件同时它明确了今后。

  成本从发送方转移至接收方P2SH将长脚本的交易费,金时必须含有赎回脚本接收方在使用该笔资。

  随时加入和离开由于节点可以,是不可靠的通讯路径。此因,续进行两项工节点必须持作

  d在比特币的世界里既没有账户font color=re,有余额也没,的UTXO/font只有分散到区块链里。是一“聪”的任意倍一个UTXO可以。

  中的各个节点相互对等尽管比特币P2P网络,供的功能不同但是根据所提,有不同的分工各节点可能具。数据库、挖矿、钱包服务的功能集合每个比特币节点都是路由、区块链。

  心化安全消息服务的比特币竞争币区块链Bitmessage是一个实现了去中,器的加密电子邮件系统其本质上是一个无服务。Bitmessage地址来编写和发送消息Bitmessage可以让用户通过一个。与比特币交易大致相同这些消息的运作方式,如果超过两天还没被传送至目的节点但区别在于消息是短暂瞬态的——,会丢失消息将。收方都是假名发送方和接,essage地址外除了一个bitm,他的身份标识他们没有其。

  包和应用流入比特币网络新交易不断地从用户钱。节点看到这些交易时当比特币网络上的,一个临时的未经验证的交易池中会先将它们放到各自节点维护的。一个新区块时当矿工构建,中拿出来放到这个新区块中会将这些交易从这个交易池,叫工作量证明)以证明这个新区块的合法性然后通过尝试解决一个非常困难的问题(也。

  到矿池的比特币地址成功出块的奖励支付,个矿工的而不是单。一个特定的阈值一旦奖励达到,奖励到矿工的比特币地址矿池服务器便会定期支付。情况下通常,服务收取一个百分比的费用矿池服务器会为提供矿池。

  何人在线上或线下创建比特币交易可以被任,是这个账户的授权签字人即便创建这笔交易的人不。似于类,员可以创建比特币交易一个负责应付账款的柜,它进行数字签名然后让CEO对,之有效从而使。

  区块链的钱包、运行stratum协议的网络节轻量(SPV)Stratum钱包:包含不具有点

  包含在区块的数据结构里区块哈希值实际上并不,在网络上传输时不管是该区块,储在某节点的永久性存储设备上时抑或是它作为区块链的一部分被存。反相,被接收时由每个节点计算出来的区块哈希值是当该区块从网络。一部分被存储在一个独立的数据库表中区块的哈希值可能会作为区块元数据的,地从磁盘检索区块以便于索引和更快。

  钥(K)有了公,哈希函数生成比特币地址(A我们就可以使用一个单向加密)

  造了一种抗通胀的货币供应模式总量有限并且发行速度递减创。无限制地印刷出来法币可被中央银行,超额印发而出现通胀而比特币永远不会因。

  给诸如合同、名字注册和其他一些应用提供服务竞争块链通过实现一致性和分布式账簿机制来。特币一样的创建块的机制竞争块链使用的是和比,或代币的支付机制有时也会采用货币,为了维持一个货币系统但它们的主要目的不是。

  ef5ec2a8685660fdbf7a8bd365524c2e1fc66c309acbae2c14ae3bitcoin-cli createrawtransaction [{txid ! 9ca8f969bd3,19Jwscj1T8LR3MVe3JDb! 0。025vout ! 0}] {1LnfTndy3qzXGN,sCSfEVQX5u9CL! 0。02451hvzSofGwT8cjb8JU7nB}

  从数结构所生成的钥匙分层确定性钱包包含。生成子钥匙的序列这种母钥匙可以。以衍生出孙钥匙这些子钥匙又可,穷类推以此无。

  编译为地址脚本能被,包不需要复杂工序就可以执行P2SH支付指令的发出者和支付者的比特币钱。

  识机制指的是比特币的共,的算力实行欺骗或破坏的难度很大被矿工(或矿池)试图使用自己,上是这样至少理论。前面讲的就像我们,依赖于这样一个前提比特币的共识机制,多数的矿工那就是绝大,最大化的考虑出于自己利益,来维持整个比特币系统都会通过诚实地挖矿。而然,统中大量算力的矿工出现之后当一个或者一群拥有了整个系,到破坏比特币网络的安全性和可靠性的目的他们就可以通过攻击比特币的共识机制来达。

  节点会验证该消息收到警告消息的,否过期检查是,所有对等节点并传播给其,网络中的快速传播从而保证了整个。

  币网络中在比特,纳一个区块中的所有交易Merkle树被用来归,易集合的数字指纹同时生成整个交,否存在某交易的高效途径且提供了一种校验区块是。

  张上的比特币私钥纸钱包是打印在纸。也包括对应的比特币地址有时纸钱包为了方便起见,是必要的但这并不,从私钥中导出因为地址可以。

  须要等10分钟后被确认加进一个新区块一个对比特币交易的常见误解是它们必,六次确认后才是有效的或等60分钟以得到。交易已被整个网络接受虽然这些确认可以确保,来说就没有必要等待那么长时间了但对于像一杯咖啡这样的小额商品。来接受比特币小额支付一个商家可以免确认。份证领取或没有签名的信用卡的风险更大这样做的风险不比接受一个不是用有效身,商家常做的事情而后者是现在。

  “Base58Check”编码的通常用户见到的比特币地址是经过,Base58数字系统)和校验码这种编码使用了58个字符(一种,止了在地址转录和输入中产生的错误提高了可读性、避免歧义并有效防。码也被用于比特币的其它地方Base58Check编,加密的密钥和脚本哈希中例如比特币地址、私钥、,和录入的正确性用来提高可读性。

  了区块链的一部分一些节点只保留,(SPV)”的方式来完成交易验证它们通过一种名为“简易支付验证。为“SPV节点”这样的节点被称,量级节点”又叫“轻。

  际上实,地址或账户余额的地点并不存在储存比特币,的、分散的UTXO只有被所有者锁住。

  钥的容器钱包是私,者简单的数据库实现通常通过有序文件或。径是 确定性密钥生成另外一种制作私钥的途。用原先的私钥在这里你可以,生成每一个新的私钥通过单向哈希函数来,密钥按顺序连接并将新生成的。新创建这个序列只要你可以重,种子、主私钥)来生成它们你只需要第一个私钥(称作。

  此地址已经接收到的比特币数额询问bitcoind客户端,到余额中所需要的确认数以及指定该数额要被加,定确认数为0其中本例中指。个命令后面的0如果我们忽略这,nf个确认之后才能看到数额我们将只能在至少minco,出现在余额中所设置的最少确认数minconf是想要某笔交易。tcoind配置文件指定minconf设置在bi。

  相冲突——每个比特币地址只能用一次交易这种情况直接与避免地址重复使用的原则。方的地址重复使用会减少隐私地址通过关联多重交易和对。

  能无意中透露了钱包里的地址信息SPV节点对特定数据的请求可。如例,V节点上的钱包所请求的全部交易信息监控网络的第三方可以跟踪某个SP,币地址和钱包的用户关联起来并且利用这些交易信息把比特,用户的隐私从而损害了。

  置了这样一个条件多重签名脚本设,中的公钥个数为N假如记录在脚本,M个公钥才可以解锁则至少需提供其中的。M-N组合这也被称为,中其,中的公钥总个数N是记录在脚本,的公钥数阀值(最少数目M是使得多重签名生效)

  未经使用的一个交易输出比特币交易的基本单位是,TXO简称U。中的并被整个网络识别成货币单位的一定量的比特币货币UTXO是不能再分割、被所有者锁住或记录于区块链。

  整节点中独立自动发生的难度的调整是在每个完。所有节点都会调整难度每2016个区块中的。式是由最新2难度的调整公,与20160分钟(两周016个区块的花费时长,所期望花费的时长)比较得出的即这些区块以10分钟一个速率。值进行相应调整的(或变难或变易)难度是根据实际时长与期望时长的比。来说简单,比10分钟要快时会增加难度如果网络发现区块产生速率。钟慢时则降低难度如果发现比10分。

  比特币系统之上的协议层合约币是另一个建立在。手段、去中心化财产交易和其他一些功能合约币拥有用户货币、可交易代币、金融。E操作符记录元信息来增加比特币交易的额外信息合约币利用比特币脚本语言中的OP_RETUR。代币维持整个系统的运行合约币使用名为XCP的。

  。一第,把交易哈希值(txid)当做一个参数getrawtransaction,”的十六进制字符串的形式返回并且把整个交易以一个“原始,特币网络上存在的形式而这也正是交易在比,六进制字符串要解码这个十,transaction命令我们使用decoderaw。action的第一个参数以将整个内容解读为JSON数据格式复制粘贴这个十六进制字符串作为decoderawtrans。

  生成的数字种子是随机。码或者可生成私钥的“链码这个数字也含有比如索引号”

  意一个连接至比特币网络的节点一旦一笔比特币交易被发送到任,被该节点验证这笔交易将会。被验证有效如果交易,到这个节点所连接的其他节点该节点将会将这笔交易传播;时同,交易有效并被接受的返回信息交易发起者会收到一条表示。被验证为无效如果这笔交易,给交易发起者一条表示交易被拒绝的信息这个节点会拒绝接受这笔交易且同时返回。

  节点、stratum节点)连接至p2p网络的网关路由矿池协议服务器:将运行其他协议的节点(例如矿池挖矿器

  2P协议中在比特币P,的节点类型之外除了这些主要,点也在运行着其他协议还有一些服务器及节,轻量级客户端访问协议等例如特殊矿池挖矿协议、。

  建信任挖矿创。区块上贡献了足够的计算量后挖矿确保只有在包含交易的,才被确认这些交易。越多区块,算量越大花费的计,更多的信意味着任

  者复制钱包更容易一些助记码代码可以让使用,随机数字顺序来说因为它们相比较,读出来并且正确抄可以很容易地被写

  个网络中存在的节点并建立连接新的网络节点必须发现至少一。3端口(该端口号通常是比特币所使用的节点通常采用TCP协议、使用833,他端口)与已知的对等节点建立连接除8333端口外也可以指定使用其。

  需要一个连接节点启动时只,它引荐给它的对等节点因为第一个节点可以将,进一步提供引荐而这些节点又会。节点一个,的其他对等节点如果连接到大量,没必要这既,资源的浪费也是对网络。完成后在启动,成功连接的对等节点节点会记住它最近;此因,前的对等节点网络重新建立连接当重新启动后它可以迅速与先。节点对连接请求无应答如果先前的网络的对等,子节点进行重启动该节点可以使用种。

  达90分钟没有任何通信如果节点持续某个连接长,经从网络中断开它会被认为已,一个新的对等节点网络将开始查找。此因,节点及网络问题进行动态调整比特币网络会随时根据变化的,进行规模增、减的有机调整不需经过中心化的控制即可。

  存储的机制作为一个冷,并永久不在电脑系统中存储如果纸钱包密钥在线下生成,对黑客攻击他们在应,记录器键盘,欺骗更有安全性或其他在线电脑。

  络中建立通向比特币网络的种类各异的路径(path节点必须连接到若干不同的对等节点才能在比特币网)

  点上线一个节,locks消息开始会从发送getb,inv响应收到一个,库存清单和区块广播协议接着开始下载缺失的区块。

  立在比特币之上的协议万事达币是另一个建,对比特币系统的扩展该协议支持多个平台。

  6P开头的的密钥如果你看到一个,密钥是被加密过这就意味着该,被用在任何钱包WIF格式的私钥(前缀为5)并需要一个口令来转换(解码)该密钥回到可。

  充难度目标值节点需要填,该区块有效为了使得,足的工作量证明的难度这个字段定义了所需满。尾数-指数”的格式难度在区块中以“,并存储编码,作“难度位”这种格式称。字节表示指数这种编码的首,示尾数(系数)后面的3字节表。7316为例以区块27,1903a30c难度位的值为0x,的十六进制格式0x19是指数,a30c是系数后半部0x03。

  几个其他比特币客户端组成的P2P网络比特币网络是由参与的比特币客户端联接。易和区块传播给所有参与者比特币网络的目的是将交。

  区块哈希值的数据首先是一组引用父,与区块链中前一区块相连这组元数据用于将该区块接

  )用作种子对应所确定性钱包的随机数助记码词汇是英文单词序列代表(编码。以重新创建种子单词的序列足,创造钱包以及所有私钥并且从种子那里重新。

  为“较高优先级”一个交易想要成,优先值大于57需满足的条件:,006,000,币(即1亿聪)相当于一个比特,144个区块)年龄为一天(,250个字节交易的大小为。

  包含交易费大多数交易,面给比特币矿工一种补偿这是为了在网络安全方。计算并计入交易费大多数钱包自动。是但,程构造交易如果你编,命令行接口或者使用,并计入这些费用你必须手动计算。

  度的变化过快为了防止难,小于一个因子(值为4)每个周期的调整幅度必须。幅度大于4倍如果要调整的,倍调整则按4。下一个2由于在,平衡的情况会继续存在016区块的周期不,整会在下一周期进行所以进一步的难度调。巨大差异有可能需要花费几个2因此平衡哈希计算能力和难度的,周期才会完成016区块。

  叉是有可能的两个区块的分,叉而相互对立起来的矿工这种情况发生在因先前分,两个不同区块的解又几乎同时发现了。而然,的几率是很低的这种情况发生。每周都会发生单区块分叉,则非常罕见而双块分叉。

  比特币私钥输入一个,IF编码过通常使用W,k字符串的前缀“5base58che”

  还维护一个UTXO数据库有些比特币客户端的实现,TXO池也称U,支付交易输出的集合是区块链中所有未。字听上去与交易池相似“UTXO池”的名,不同的数据集但它代表了。和孤立交易池的地方在于UTXO池不同于交易池,化时不为空它在初始,的未支付交易输出条目而是包含了数以百万计,可以追溯至2009年有些条目的历史甚至。被安置在本地内存UTXO池可能会,库表安置在永久性存储设备中或者作为一个包含索引的数据。

  能唯一地识别出一个特定区块一个区块的区块哈希值总是。有特定的区块高度一个区块也总是。是但,是能唯一地识别出一个特定区块一个特定的区块高度并不一定总。切地说更确,为了区块链中的一个位置而竞争两个或者更多数量的区块也许会。

  表累计了最大工作量证明的区块链每一个节点总是选择并尝试延长代,最大累计难度的链也就是最长的或。区块中的难度加总起来节点通过将记录在每个,出的工作量证明的总量得到建立这个链所要付。最长累计难度的区块链只要所有的节点选择,会收敛到一致的状态整个比特币网络最终。链间发生的临时差异分叉即在不同区块,加到了某个分叉中当更多的区块添,会迎刃而解这个问题便。

  法(scrypt)的加密货币莱特币使用了其他工作量证明算,密码遭暴力破解而设计的这种算法起初是为了防止,一种不依赖GPU和ASIC芯片的电子货币目标是通过使用这种消耗内存的算法来实现。

  r以及执行无穷范围(因此才叫图灵完备)的计算行为这些程序可以存储数据、支付及收取、存储ethe,心化的自治软件代理在系统中充当去中。

  币交易中在比特,需的签名以证明资金的所有权私钥用于生成支付比特币所必。

  6)25,线 椭圆曲线密码学解释)并由比特币所使用的椭圆曲。的一个私钥要生成这样,个256位的数字我们随机选择一,否小于n-1并检查它是。角度来看从编程的,的随机源中取出一长串随机字节一般是通过在一个密码学安全,6哈希算法进行运算对其使用SHA25,生一个256位的数字这样就可以方便地产。果小于n-1如果运算结,个合适的私钥我们就有了一。则否,随机数再重复一次我们就用另一个。

  言是无国家主权的比特币交易脚本语,驾于脚本之上没有国家能凌,被执行后对其进行保存也没有国家会在脚本。有信息都已包含在脚本中所以需要执行脚本的所。

  没有交易费的字段交易的数据结构。反地相,有输入的总和交易费通过所,和之间的差来表示以及所有输出的总。后的多余的量会被矿工收集走从所有输入中扣掉所有输出之。

  使用BIP0038加密的私钥一个更复杂的纸钱包存储系统。所有者记住的一个口令保护起来打印在纸钱包上的这些私钥被其。口令没有,钥也是毫无用处的这些被加密过的密。

  ${password} ${time_in_secondsbitcoin-cli walletpassphrase }

  函数检验的)只能有一个OP_RETURN输出一笔标准交易(通过了isStandard()。能与任意类型的输出交易进行组合但是单个OP_RETURN输出。

  键词组合而不必精确表述的基于概率的过滤方法Bloom过滤器是一个允许用户描述特定的关。键词的同时保护他们的隐私它能让用户在有效搜索关。V节点里在SP,点发送交易信息查询请求这一方法被用来向对等节,址不会被暴露同时交易地。

  理人作弊的可能托管矿池存在管,行双重支付或使区块无效管理人可以利用矿池进。外此,器代表着单点故障中心化的矿池服务。服务器挂了或者被减慢如果因为拒绝服务攻击,就不能采矿池中矿工。

  语言的图灵非完备性这样就保证了脚本,的复杂性有限这意味着脚本,次数也可预见交易可执行的。

  不断地对区块头和一个随机数字进行哈希计算工作量证明算法指的用SHA256加密算法,预设值相匹配的直到出现一个和解

  erinfo 列出对等节点的连接信bitcoin-cli getpe息

  XO被选中一旦UT,生成包含签名的解锁脚本钱包会为每个UTXO,足锁定脚本的条件来被支付由此让它们变得可以通过满。TXO作为参考钱包把这些U,起作为输入加到交易中并且连同解锁脚本一。

  是“托管的”大部分矿池,个人经营一个矿池服务器意思是有一个公司或者。有者叫矿池管理员矿池服务器的所,收取一个百分比的费用同时他从矿工的收入中。

  特币之上实现的软件层元币和元块链是在比,币系统之上的平台/协议也可以认为是覆盖在比特,币中币的实现或者是在一个。ck 技巧把元数据添加到比特币块链中元币的第一个实现利用了大量的 ha,币地址编码数据比如使用比特,放新协议层增加的这些元数据或者利用空白的交易字段存。

  了防止被盗窃平衡风险:为,列复杂的操作去加密备份其主人曾之前采取了一系。失了加密的密钥结果他们不慎丢,得毫无价值使得备份变,一大笔财富白白失去了。

  后最,尽快地被网络处理为了让这笔交易,多付一小笔费用支付方的钱包会。包含在交易中的这个不是明显地,出的差值所隐含的而是通过输入和输。交易费放到区块的交易里这个差值会就被矿工当作,块链帐薄中最终放进区。

  考交易在区块链中的深度简易支付验证是通过参,是高度而不,证它们来验。节点会构造一条验证链一个拥有完整区块链的,追溯到创世区块的数千区块及交易组成这条链是由沿着区块链按时间倒序一直。区块的链(但不是所有的交易)而一个SPV节点会验证所有,有关交易链接起来并且把区块链和。

  KH相比与P2P,式更为简单P2PK模。有公钥哈希的模式不同与P2PKH模式含,脚本模式中在P2PK,储在锁定脚本中公钥本身已经存,长度也更短而且代码。

  终最,须能接入比特币网络有效的比特币交易必,能被传送从而使之,总账薄(区块链)的挖矿节点直至抵达下一个登记在公共。

  断减慢的速率被铸造出来比特币以一个确定的但不。产生一个新区块大约每十分钟,数量从无到有的全新比特币每一个新区块都伴随着一定。

  下来接,播到比特币网络中比特币交易被广。币网络中在比特,验证、并将交易在网络中进行广播每一个节点(比特币交易参与者),络中大多数节点接收直到这笔交易被网。

  ChirP、条形码或者复制粘贴至一个网页表格)被发送到比特币网络比特币交易因此可以通过未加密网络(例如WiFi、蓝牙、NFC、。端情况下在一些极,、扩频或跳频以避免被侦测或阻塞通信的方式进行传输一笔比特币交易可以通过封包无线电、卫星或“短波。息中的表情符号并被发表到在线论坛一笔比特币交易甚至可被编为文字信,一条Skype聊天信息或被发送成一条短信或。变成了一种数据结构因为比特币将金钱,何人创建并执行比特币交易的所以在本质上是不可能阻止任。

  需要递归地对哈希节点对进行哈希生成一棵完整的Merkle树,插入到Merkle树中并将新生成的哈希节点,个哈希节点直到只剩一,rkle树的根该节点就是Me。

  易脚本语言比特币交,为脚本也称,法的基于堆栈的执行语言是一种基于逆波兰表示。

  代码的首个克隆产物域名币是比特币源,链的去中心化平台它是一种使用区块,转让键-值对用来注册和。球的域-名注册域名币支持全,域-名注册系统类似因特网上的。的替代性域名服务(DNS)使用目前域名币作为根域名。bit。空间下的名称和键-值对也可以用来注册其他命名,、文件签名、投票系统和股票凭证之类例如存储邮件地址、密钥、SSL证书,其他应用以及许多。

  大程度上将权力移交到用户手上比特币的去中心化安全模型很,们保管好密钥的责任随之而来的是用户。

  UTXO是否还未被支付SPV节点则不能验证。反地相,e路径(见“7。7 Merkle 树”)建立一条链接SPV节点会在该交易信息和它所在区块之间用merkl。节点一直等待然后SPV,从300直到序号,到300001,在该交易所在的区块之上006的六个区块堆叠,深度是在第300并通过确立交易的,~第300006区块,验证交易的有效性001区块之下来。

  记录在区块中的方式被确认一旦我们接收到的交易以,ion命令将返回附加信息gettransact,的区块的哈希值显示包含交易。

  块”的区块哈希值获得了“创世区,挖的第一个区块这是被中本聪所,度为高0

  付方发过来的交易节点时接受者的钱包接收到支,是一个收入支付会立即确认交易,己私钥兑换的输出因为它包含能用自。未消费输入来确认这个交易是正确构建的接收方的钱包应用也能够独立地用之前,会被下一个区块包含进去并且由于包含足够交易费。定这个交易会很快被加到区块且被确认这时接收方就可以以一个很小的风险假。

  自比特币源代码的克隆绝大多数的山寨币都来,比特币的任何源码少数则没有使用,的模型后自己实现仅仅是借鉴了块链。是运行在自己块链上的独立的块链实现竞争币或竞争块链(下一节会讲到)都。命名区分之所以以,币主要用做货币主要是因为竞争,链则不是而竞争块。

  的、最新的区块链拷贝一些节点保有一份完整,称为“全节点”这样的节点被。主地校验所有交易全节点能够独立自,任何外部参照而不需借由。

  的含义是P2SH,配的脚本支付向与该哈希匹,被支付时当输出,在后续呈现该脚本将。

  URN遇到脚本验证软件假如一笔OP_RET,和标记交易的行为无效它将立即导致验证脚本。N的输出作为另一笔交易的输入如果你碰巧将OP_RETUR,是无效的则该交易。

  莱特币8考虑到,和相对更快的确认速度400万的货币总量,相信与比特币相比很多莱特币的拥趸,合零售业的交莱特币更适易

  能将脚本哈希编译为一个地址P2SH的另一重要特征是它。码的一个含有20个字节哈希的脚本P2SH地址是基于Base58编,8编码的一个含有20个字节的公钥就像比特币地址是基于Base5。址采用5作为前缀由于P2SH地,编码的地址以“3”开头这导致基于Base58。

  以证实某个交易的存在性SPV节点毫无疑问可,一个UTXO的双重支付)不存在但它不能验证某个交易(譬如同,一份关于所有交易的记录这是因为SPV节点没有。

  4bytes字段:版本(,、输入量(1-9bytes明确这笔交易参照的规则),、输入(不定bytes被包含的输入的数量),输出量(1-9bytes一个或多个交易输入)、,、输出(不定bytes被包含的输出的数量),时钟时间(4bytes一个或多个交易输出)、,时间戳或区块号一个UNIX)

  存款到纸钱包中虽然你可以多次,一次性提款但是你最好,面所有的资金一次性提取里。额少于其中的金额的话因为如果你提取的金,个找零地址会生成一。且并,可能被病毒感染你所用的电脑,能泄露私钥那么就有可。少私钥泄露的风险一次性提款可以减,的金额比较少如果你所需,到另一个纸钱包中那么请把余额找零。

  入P2SH赎回脚本不能将P2SH植,H不能自循环因为P2S。用OP_RETURN也不能在赎回脚本中使,N的定义即显示不能赎回因为OP_RETUR。

  例来说按惯,”时就被认为是不可撤销的了一个区块获得六次以上“证明,个区块需要巨量的计算因为要撤销和重建六。

  率递减的货币发行模式会导致货币通货紧缩(简称通缩)最重要并且最有争议的一个结论是一种事先确定的发行速。求不匹配导致的货币增值的现象通缩是一种由于货币的供应和需。胀相反它与通,时间有越来越强的购买力价格通缩意味着货币随着。

  链的钱包以及比特币p2p网络路由节点轻量(SPV)钱包:包含不具有区块。

  交易被验证时当一笔比特币,应的锁定脚本同时(互不干扰地)执行每一个输入值中的解锁脚本被与其对,是否满足使用条件从而查看这笔交易。

  须进行备份私钥还必,外丢失以防意,丢失就难以复原因为私钥一旦,币也将永远丢失其所保护的比特。

  者线下存储比特币(即冷钱包)的方式纸钱包是一个非常有效的建立备份或。份机制作为备,以提供安全性一个纸钱包可,外删除的情况下造成密钥的的丢失以防在电脑硬盘损坏、失窃或意。

  只有一个父区块虽然每个区块,有多个子区块但可以暂时拥。一区块作为其父区块每个子区块都将同,中具有相同的(父区块)哈希值并且在“父区块哈希值”字段。情况被称为“区块链分叉”一个区块出现多个子区块的。只是暂时状态区块链分叉,被不同的矿工发现时才会发生只有当多个不同区块几乎同时。

  子货币中的金币的话如果把比特币看作电,当电子货币系统中的银币那么莱特币的愿景就是,一种轻量的替代货币谋求成为比特币的。

  th脚本语言编写的脚本验证比特币交易比特币客户端通过执行一个用类For。写入UTXO锁定脚本被,同种脚本语言编写的签名同时它往往包含一个用。

分享: