第01部分—何跃(444715148)odim校对_第1页
第01部分—何跃(444715148)odim校对_第2页
第01部分—何跃(444715148)odim校对_第3页
第01部分—何跃(444715148)odim校对_第4页
第01部分—何跃(444715148)odim校对_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、翻译 第1部分 Find detailed information about the Bitcoin protocol and related specifications.比特币协议和相关规范的细节说明The Developer Guide aims to provide the information you need to start building Bitcoin-based applications. To make the best use of this guide, you may want to install the current version of Bitcoin

2、 Core, either from source or from a pre-compiled executable.这个开发者指南的目标是为了在你开发一个比特币周边应用的时候提供,给你提供足够的信息。为了更好地使用这个指南,你需要安装最新的bitcoin内核的客户端,可以下载github里面的源码或者官网的预编译版本 。Once installed, youll have access to three programs: bitcoind, bitcoin-qt, and bitcoin-cli. When run with no arg

3、uments, all three programs default to Bitcoins mainnetwork (mainnet) which will require you purchase satoshis in order to generate transactions.一旦安装完毕,你将有以下的三个可执行程序:bitcoind, bitcoin-qt, andbitcoin-cli。 如果你启动的时候没带参数,所有的程序都会默认连接到比特币主网络network (mainnet)。这样要在网络上创建就你在交易,你的时候就需要支

4、付比特币才能创建交易。比特币的最小单位是“聪(satoshis)”,0.00000001 BTC = 1 satoshis。However, for development, its safer and cheaper to use Bitcoins test network (testnet) where the satoshis spent have no real-world value. Testnet also relaxes some restrictions (such as standard tra

5、nsaction checks) so you can test functions which might currently be disabled by default on mainnet.但是,为了开发,使用比特币测试网络更为安全和便宜 network (testnet) ,在测试网络中的比特币没有真实世界的价值。 测试网络 对有些限制有所放松,(如对标准交易的检测),它能测试一些在主网络中被禁止的一些函数,对有些限制有所放松,(比如标准交易 交易是否标准检测)。To use testnet, use t

6、he argument -testnet with each program or add testnet=1 to your bitcoin.conf file. To get free satoshis for testing, use Piotr Piaseckis testnet faucet. Testnet is a public resource provided for free by members of the community, so please dont a

7、buse it.如果要使用测试网络testnet, 启动的时候需要添加参数 -testnet 或者添加testnet=1到你的bitcoin.conf 文件里面. 在Piotr Piaseckis testnet faucet,你这里可以获得一些免费的测试比特币Piotr Piaseckis testnet faucet。测试网络是社区人员免费提供的公共资源,请不要滥用。You can speed up development further using the regression test mode which creates a new&

8、#160;testnet local to your computer. This regtest mode will let you generate blocks almost instantly with a RPC command so you can generate your own satoshis and add transactions to the block chain immediately.你可以进一步使用regression test mode(回归测试模式)来加快你的开发,这个模式可以

9、在你的电脑上创建一个本地的测试网络。 回归测试模式可以让你通过RPC命令快速很快地创建blocks、获取测试比特币、即刻在生成交易到block chain上生成交易。 bitcoin-qt provides a combination full Bitcoin peer and wallet frontend. From the Help menu, you can access a console where you can enter the RPC commands used throughout this docum

10、ent. bitcoin-qt 提供了一个完整的Bitcoin peer 和钱包的前端.在帮助菜单中钱包里面,你可以找到一个敲RPC 命令的终端 bitcoind is more useful for programming: it provides a full peer which you can interact with through RPCs to port 8332 (or 18332 for testnet). bitcoind 是个更有用的程序: 它提供了一个完整的&

11、#160;peer(节点) 你可以使用RPCs命令和它交流,正式端口默认8332 (测试网络默认端口18332). bitcoin-cli allows you to send RPC commands to bitcoind from the command line. For example, bitcoin-cli help bitcoin-cli 允许你通过命令行发送 RPC 命令给bitcoind . 举个例子,bitcoin-cli help All three progr

12、ams get settings from bitcoin.conf in the Bitcoin application directiory:这三个程序都会从Bitcoin程序目录里的bitcoin.conf中读取参数设置配置文件bitcoin.conf,这个文件在Bitcoin程序目录里面: Windows: %APPDATA%Bitcoin OSX: $HOME/Library/Application Support/Bitcoin/ Linux: $HOME/.bitcoin/Questions about Bit

13、coin development are best sent to the Bitcoin Forum and IRC channels. Errors or suggestions related to documentation on B can be submitted as an issue or posted to the bitcoin-documentation mailing list.关于比特币开发的问题最好发送到比特币论坛 和IRC 频道. 对于B的文档的错误和建议,请以提案

14、的方式提交提交一个提案或者发送到 bitcoin-documentation 邮件列表.In the following guide, some strings have been shortened or wrapped: “” indicates extra data was removed, and lines ending in a single backslash “” are continued below. If you hover your mouse over a paragraph, cross-reference links will be shown in b

15、lue. If you hover over a cross-reference link, a brief definition of the term will be displayed in a tooltip.在以下下面的指南书里面, 某些字符串被缩写成: “” ,标表示明额外的数据被删除了, 以 “” 结束的行表标明下面的还有. 如果你把你的鼠标移动到一个段落,有链接的文字会变成蓝色。如果你移动到有链接的文字上,在工具提示上会出现有一个简明的简介。在上面Block Chain区块链The block chain provides Bitcoins public l

16、edger, a timestamped record of all confirmed transactions. This system is used to protect against double spending and modification of previous transaction records, using proof of work verified by the peer-to-peer network to maintain a global consensus.区块链提供了比特币的所有公

17、开总账本, 这个总账本由所有有时序的已确定的交易组成。这个系统被用于防止保护双花双发和修改以前的交易记录, 通过由被全球P2P网络验证的 工作量证明POW 来保证全球的的一致性.Block Chain Overview区块链概览The illustration above shows a simplified version of a block chain. A block of one or more new transactions is collected into the transaction data part of a 

18、;block. Copies of each transaction are hashed, and the hashes are then paired, hashed, paired again, and hashed again until a single hash remains, the Merkle root of a Merkle tree.上面的这个插图展示了一个简化版本的区块链. 一个包含一个或者多个交易的区块 的会被收集一个或者多个交易到区块的交易数据部分. 每个交易的副本都会被哈希hashed,然后将哈希值进行hash配对,然后再

19、进行哈希hash,再配对,再哈系hash,直到只、配对到只剩下一个哈希hash值,这个剩下的哈希hash值就是 Merkle tree(Merkle 树)的Merkle root(根节点)。The Merkle root is stored in the block header. Each block also stores the hash of the previous blocks header, chaining the blocks together. This ensures a

20、transaction cannot be modified without modifying the block that records it and all following blocks.Merkle根节点 被存储在 区块头. 每个区块 也会存储上一个区块的头的哈希值, 以用于把所有的区块链接在一起. 这保证了在如果你不修改把当前和后面的所有区块都修改的情况下,你是不可能修改交易记录是不会被修改的。Transactions are also chained together. Bitcoin wallet

21、0;software gives the impression that satoshis are sent from and to addresses, but bitcoins really move from transaction to transaction. Each standard transaction spends the satoshis previously spent in one or more earlier transactions, so the input&#

22、160;of one transaction is the output of a previous transaction.交易记录也被链接在一起。. 比特币钱包 软件只记录了比特币的发送接收从一个地址发送到另外一个地址, 但是比特币确实真实的在一个交易间和一个交易之间转移。. 每个标准交易花费的satoshis 的是前一个交易转移过来的币, 所以一个交易的 输入的交易是上一个交易的输出。A single transaction can spend bitcoins to multiple outputs, as

23、 would be the case when sending satoshis to multiple addresses, but each output of a particular transaction can only be used as an input once in the block chain. Any subsequent reference is a forbidden double spendan attempt to spend the same satoshi

24、s twice.单个比特币比交易能把比特币 发送到不同的输出中, 就像你把比特币一次发送到不同的比特币地址一样,但是一次输出只能在区块链中只能使用一次 所有的后续引用都禁止的双花发一种把比特币花两次的尝试。Outputs are not the same as Bitcoin addresses. You can use the same address in multiple transactions, but you can only use each output once. Outputs

25、0;are tied to transaction identifiers (TXIDs), which are the hashes of signed transactions.输出不同于比特币 地址。你可以在多个交易中使用同一个地址 在复合交易中, 但是输出 只能被使用一次。输出 被绑定在交易id上与交易id(TXIDs)绑定, txid就是交易签名交易的哈希值Because each output of a particular transaction can only be spent once, all transacti

26、ons included in the block chain can be categorized as either Unspent Transaction Outputs (UTXOs) or spent transaction outputs. For a payment to be valid, it must only useUTXOs as inputs.因为每个交易的输出只能被使用一次, 所有在区块链 中的输出能被分类为未使用交易输出Unspent Transaction Outputs (UTXO

27、s) 或者已使用输出. 为了让了一个支付是有效的, 必须使用 未使用输出UTXOs 来作为输入.Satoshis cannot be left in a UTXO after a transaction or they will be irretrievably lost, so any difference between the number of satoshis in a transactions inputs and outputs is given as a

28、60;transaction fee to the Bitcoin miner who creates the block containing that transaction. For example, in the illustration above, each transaction spends 10,000satoshis fewer than it receives from its combined inputs, effectively paying a 10,000satoshi transa

29、ction fee.比特币在产生交易之后,不能留在UTXO中, 否则这个余额会永久的丢失掉, 所以有在输入和输出之间的差值就是交易费,都是对给把这个交易打包到一个区块的矿工的奖励。举例如,在上面的插图中,每次交易收到的都比发出的会少1000聪, 这10000聪就是交易费Proof Of WorkProof Of Work 工作量证明The block chain is collaboratively maintained on a peer-to-peer network, so Bitcoin requires each block prov

30、e a significant amount of work was invested in its creation to ensure that untrustworthy peers who want to modify past blocks have to work harder than trustworthy peers who only want to add new blocks to the block chain.区块链 是由P2P网络(peer-to-peer netwo

31、rk)协作维护的, 比特币网络要求在创建区块的时候要提供一定的工作量证明,以用来保证那些想改变历史区块的不诚实的节点必须付出比那些仅仅想在链上加一个新区块的诚实节点更多的资源。Chaining blocks together makes it impossible to modify transactions included in any block without modifying all following blocks. As a result, the cost to modify a particular block increa

32、ses with every new block added to the block chain, magnifying the effect of the proof of work.如果不修改后面所有的区块,修改改变已经打包到区块中的交易成为一件不可能的事情,这也是把区块链接到一起的用处。 因此,修改一个一个区块链的费用数据会随着新区块链的增加而增加,增加了工作量证明的作用也就随之变大。The proof of work used in Bitcoin takes advantage of the apparently rand

33、om nature of cryptographic hashes. A good cryptographic hash algorithm converts arbitrary data into a seemingly-random number. If the data is modified in any way and the hash re-run, a new seemingly-random number is produced, so there is no way to modify the data to make the hash number predictable.

34、用在比特币网络中的工作量证明利用了密码学哈希算法的伪随机性。一个好的密码学哈希可以把任意的数据转换成一个看起来随机的数字。如果这个原始数据的更改任何地方被更改,然后重新计算哈希,有将会生成一个完全不同的新的哈希结果。所以没有办法可以让一个修改数据以预知哈希的结果是不可能的可以预测。To prove you did some extra work to create a block, you must create a hash of the block header which does not exceed a certain value. For example, if

35、 the maximum possible hash value is 22561, you can prove that you tried up to two combinations by producing a hash value less than 22561.为了证明你已经做了一些创建区块的工作,你需要计算出一个不大于某个特定值的去块头的哈希值。举个例子: 如果这个最大哈希值是22561,你只需要证明你做了两2次组合就可以使哈希值小于22561。In the example given above, you will almost certainly prod

36、uce a successful hash on your first try. You can even estimate the probability that a given hash attempt will generate a number below the target threshold. Bitcoin itself does not track probabilities but instead simply assumes that the lower it makes the target threshold, the mor

37、e hash attempts, on average, will need to be tried.在上面的例子中,你很有可能在第一次尝试的时候就产生成了一个成功的哈希值在你第一次尝试的时候。你甚至可以估算评估你需要达到的某个阈值所,你需要的尝试的次数。比特币本身并不能控制这个可能性,但是单纯假设这个阈值越小,需要尝试的次数越多,差不多平均下起来也就是个平均数(这个是概率平均)。New blocks will only be added to the block chain if their hash is at least as challengin

38、g as a difficulty value expected by the peer-to-peer network. Every 2,016 blocks, the network uses timestamps stored in each block header to calculate the number of seconds elapsed between generation of the first and last of those last 2,016 blocks. The ideal

39、value is 1,209,600 seconds (two weeks).只有当哈系值至少跟P2P网络预期的难度值难度相当的时候,算出的在期待阈值以下最小的那个哈希值的节点才能把新的区块才会被加到区块链上。, 比特币网络使用储存在存在2016个区块头的时间戳的差值来计算下一轮的难度。这个差值的理想的间隔是1,209,600秒(两周)。 If it took fewer than two weeks to generate the 2,016 blocks, the expected difficulty value is increased proportionally

40、 (by as much as 300%) so that the next 2,016 blocks should take exactly two weeks to generate if hashes are checked at the same rate. 如果产生2016个区块需要的时间小于两周,预期期待的难度将成比例地提高(大约300%)以便于下一个块能够准确地在两周生成10分钟左右,前提是保证在当前的HASH在同一算力. If it took more than two weeks to generate the blocks, the expected&#

41、160;difficulty value is decreased proportionally (by as much as 75%) for the same reason. 如果产生2016个块的时间超过两周,同样地,预期期待的难度将降低(75%左右)。(Note: an off-by-one error in the Bitcoin Core implementation causes the difficulty to be updated every 2,016 blocks using timestamps from only 2

42、,015 blocks, creating a slight skew.)(注意: 由于比特币内核实现的一个实现差一错误,导致每到造成了要在2016区块的时候,因为使用了第2015块的时间戳,难度就会更新难度很难,因为使用了第2015块的时间戳,这导致了轻微的偏差。Because each block header must hash to a value below the target threshold, and because each block is linked to the block t

43、hat preceded it, it requires (on average) as much hashing power to propagate a modified block as the entire Bitcoin network expended between the time the original block was created and the present time. Only if you acquired a majority of the networks hashing power

44、could you reliably execute such a 51 percent attack against transaction history.由于每一块的头的部哈希值必须小于某个阈值,而且每一所有的区块也必须链接到它前面的一个这个区块的前面一个。要在原始区块生成到当前这段时间里传送一个已修改的区块,(一般来说)需要消耗和整个比特币网络消耗的算力一样多的哈系算力。it requires (on average) as much hashing power to propagate a modified block as the entire Bitcoin

45、network expended between the time the original block was created and the present time。只有你掌握了全网大多数哈希算力,例你才能有效地实现对交易历史进行的51%的攻击。The block header provides several easy-to-modify fields, such as a dedicated nonce field, so obtaining new hashes doesnt require waiting for new transactions. Also,

46、 only the 80-byte block header is hashed for proof-of-work, so adding more bytes of transaction data to a block does not slow down hashing with extra I/O.区块头提供了一些容易改的字段,例比如dedicated nonce field,所以获取新块的哈希不需要等新的交易的到来。同样,. 只有80字节的区块头会被计算到POW的哈希中,因此所以添加更多的交易信息不会降低让伴有额外IO的哈希计算降低速

47、度和额外的IO.Block Height And Forking区块高度及分叉Any Bitcoin miner who successfully hashes a block header to a value below the target threshold can add the entire block to the block chain. (Assuming the block is otherwise valid.) These blocks are com

48、monly addressed by their block heightthe number of blocks between them and the first Bitcoin block (block 0, most commonly known as the genesis block). For example, block 2016 is where difficulty could have been first adjusted.任何所有成功计算出小于阈值的哈系值的矿工可以能把整这个区

49、块加到区块链中(假设这个区块是有效的)。这些区块被标记为当前区块的高度-就是当前区块到第一个块(genesis block)的差值. 比如,第2016块是第一个调整难度的块。Multiple blocks can all have the same block height, as is common when two or more miners each produce a block at roughly the same time. This creates an apparent fork in the&

50、#160;block chain, as shown in the illustration above.多个区有很多块可以会有同样的区块高度,这在两个或两个以上的矿工几乎在同一时间创建了一个区块的情况下是很常见的。当两个或者多个矿工几乎在同一时间创建了一个区块. 这就正如上图所示,区块链上出现了显然的在区块链上分叉了,就像上面的插图一样。When miners produce simultaneous blocks at the end of the block chain, each peer individually choos

51、es which block to trust. (In the absence of other considerations, discussed below, peers usually trust the first block they see.)当矿工同时在区块链的末端生成区块的时候创建了一个块在区块链的最后的时候,每个节点都独立地选择相信哪个区块。.(在没有其他考虑的情况下,节点通常选择相信他们接收到的第一个块)。Eventually a miner produces another blo

52、ck which attaches to only one of the competing simultaneously-mined blocks. This makes that side of the fork longer than the other side. Assuming a fork only contains valid blocks, normal peers always follow the longestfork (the most difficult chain

53、to recreate) and throw away (orphan) blocks belonging to shorter forks.最终,矿工会创建一个新块,这个区块附在其中一个竞争的会在并行区块链的一条后面添加一个新块。,这会使这个分支比别的分支更长。假设一个分支只包括有效的区块,正常所有的节点将选择最长的那个分支(最难创建的一个链),然后抛弃比它短的分支。Long-term forks are possible if different miners work at cross-purposes, such as somemine

54、rs diligently working to extend the block chain at the same time other miners are attempting a 51 percent attack to revise transaction history.长期的分叉是可能的,如果这些矿工有其他意图,比如一些矿工在分叉之后的一条分支上奋力计算,尝试51%攻击去修改交易历史。Since multiple blocks can have the same height during

55、 a block chain fork, block heightshould not be used as a globally unique identifier. Instead, blocks are usually referenced by the SHA256(SHA256() hash of their header.由于很多区块在分叉的时候会有同样的高度,所以高度不能作为唯一的区分。通常,都用它的SHA256的哈希值来表示这个区块。Transaction DataEvery block must inclu

56、de one or more transactions. The first one of these transactions must be a coinbase transaction which should collect and spend the block reward and any transaction fees paid by transactions included in this block.每个区块必须包含一个或者多个交易记录,第一个交易记录必须是coinbase(币基)记录,这个记录包含了区

57、块奖励和本区块的所有的交易费。The UTXO of a coinbase transaction has the special condition that it cannot be spent (used as an input) for at least 100 blocks. This temporarily prevents a miner from spending the transaction fees and block reward from a

58、0;block that may later be orphaned (destroyed) after a block chain fork.由挖矿出来的币有一个特殊的使用条件,就是在此后的100块只能不能使用。这个可以部分防止有的矿工花费可能以后被抛弃的区块奖励(分叉之后,这个矿工的这条链被抛弃)。Blocks are not required to include any non-coinbase transactions, but miners almost always do include additional trans

59、actions in order to collect their transaction fees.区块不是必须包含所有的非-coinbase的交易,但是矿工们通常会为了他们的交易费把这些交易记录给收录进来。All transactions, including the coinbase transaction, are encoded into blocks in binaryrawtransaction format prefixed by a block transaction sequence numbe

60、r.所有的交易记录,包含coinbase记录,会在前面加上交易队列的编报,并被编码为rawtransaction格式的二进制进行存储。The rawtransaction format is hashed to create the transaction identifier (txid). From these txids, the Merkle tree is constructed by pairing each txid with one other txid and then hashing them together. If there are

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论