网赚论坛

 找回密码
 免费注册
查看: 716|回复: 0
打印 上一主题 下一主题

深入浅出比特币:第二章

[复制链接]

25

主题

34

帖子

100

积分

Ⅰ级财主

Rank: 1

积分
100
跳转到指定楼层
楼主
发表于 2017-10-22 00:02:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第二章 支付
第二章第一节 匿名
说了这么多,其实最根本的问题还没有聊到,那就是比特岛上的人都是没有名字的,这个账单要怎么写?更重要的是,D 说 D 给了 WM 0.5元,记账的如何知道 D 的账户上有没有0.5元,又如何记录 WM 从此多了0.5元钱呢?比特岛人是通过“发微博”实现的,神奇吧。
假定 D 的微博号是 188Nxs23XGUonU8og9u6n4CNwr5oqqsVjE(以下简写为188N),WM 的微博号是 19XRiapec1aDN4NCJMmLkkp7iXegEQvBGz(以下简写为19XR)。只要 D 在微博上发 “我支付给 @ 19XR 0.5元” 就好了。为什么这句话直接就被判定为真话呢?@罗永浩说自己的ROM比MIUI好,大家都会怀疑他是不是吹牛,但是如果他说自己的ROM比MIUI差,就不会有人质疑他了。同样的道理如果@188说“@19XR支付给我0.5元”,是不会有人直接采信的,但反之则可。
我们来一个案例分析,其中有三名参与者。除了上文提到的 D,WM 外,再加上微博号为 136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr(以下简写为136L)的比特岛居民 DS。DS辛苦挖矿得到25元,然后上交20元给 D, 后来 D 又支付0.5元给WM。
首先是 DS 赢得了某轮的撕纸大赛,那个全岛唯一,人手一份的账单链上的最后一份账单是 DS 生成的。那么这份账单上就有一条写着“比特岛公共基金支付 @136L 25元”。(当然如果这位 DS 真名是雷锋,他就会写成 “比特岛公共基金支付 @188N 25元”,完全把自己的劳动成果奉献给 D,这也是完全可以的。)
然后 DS 通过微博账号@136L 发微博说“我支付 @188N 20元”。这时所有矿工们(也就是记账的)都看到了,要不要记录在册呢?他们首先要去查账单链,看看@136L总共收到多少钱,又送出去多少钱,如果其余额大于20的话,那这笔账就是有效的,可以记下了。矿工们查完发现@136L 只存在于一笔获得25元的交易上,余额就是25元,当前交易有效。
后来 D 又通过微博账号@188N 发微博说“我支付 19XR 0.5元”。同样由于根据账单链发现@188N余额大于0.5元,交易被记录。
总结一下。 第一,一组微博的用户名密码就是承载比特币的一个容器,所谓的“钱包”就是记录你所拥有的所有的微博用户名密码的文本文件。第二,账单链中保存的全部都是“微博用户名”,你根本无法知道是谁拥有这些用户名对应的密码,这就是所谓的匿名。
但是从另外一个角度看,比特币又是完全透明的。因为任何一个“微博用户名”的财富总量都是公开的数据。如果你有兴趣可以去观摩一下高富帅的交易历史,比如Bitcoin Address 1933phfhK3ZgFQNLGSDXvqCn32k2buXY8a
第二章第二节 点对点
现实生活中比特币的交易是完全点对点的,不依赖于微博这么蠢的东西。(事实上任何网站都不是比特币系统的一部分,不管是官网,还是最大的交易网站mtgox,或者是http://blockchain.info。它们都只是这个生态圈的一部分,比特币的运转,不依赖于它们任何一个。)而做到这一点,比特币用的是数字签名技术。而且比特币系统并不会刻意跟踪某个地址拥有多少钱,而是通过管理每笔交易的输入输出来记录账目的。
数字签名比较复杂,比特岛人是用不惯的,他们如何操作呢?还是撕纸。我们还是拿 D 给 WM 0.5元为例子。我们先假定 DS 在第1024页账单的419条目给了 D 25元。
第一步,WM 随便拿张纸,随便撕成甲乙两半。然后吧其中甲部分交给 D,这半张纸就是一个比特币地址。
第二步,D 向大众广播这样一封信:“我是第1024页账单的419条目的受益方,我要将其中的0.5元转让给这半张纸(附上 WM 给他的半张纸)。”
第三步,记账者收到消息,调出第1024页账单的419条目,查看此条目的受益方收到的钱够不够,然后验证次受益方就是本次交易的发起人。全部确认后,则把这则账目包括这半张纸(或者其复印件)纳入账单中。假定此条目为1984页1989条。
现在,当 WM 要把钱转让给别人时,他就可以拿出他剩下的那张纸的乙部份,证明的收益方是他,因为世界上只有他这半张纸跟1984页1989条中记载的那半张纸匹配。
再回来看第二步,其实D也是通过提供某张纸的乙部份来证明他是第1024页账单的419条目的收益方的。
总结一下,一个交易包含一下信息:
1.资金来源,即前面某个账单中的某个条目。
2.资金去向,即某张纸的甲部分的复印件,和金额大小。用于指定本次交易的受益方和金额。
3.签名,即资金来源条目中所副的那张半张纸对应的乙部份的复印件,用于证明此次交易是由资金来源所指向的收益方发起的。
这里要注明的是,我们假定撕开的纸的甲部分是可以无限重复复印的。而乙部份由受益方持有,且只有从原件复印出来的第一代复印有效,换句话说签名只有乙部份的持有人才可以做。
实际上在这个例子中,一张纸的甲部分就是比特币地址,比如我提供的136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr,而乙部份则是被我严格加密保存在wallet.dat中的一个秘钥,他跟136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr是一对。而所谓的附上乙部份的第一代复印件,就是利用秘钥对信息签名的过程。
换句话说,“我向136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr打入0.0001BTC”实际的意思是“我把0.0001BTC的控制权交给了136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr对应的秘密字符串的拥有者”。
第二章第三节 重要的细节
一个典型的比特币客户端含有N个地址及其对应的私钥,而不是一个。而且这N个地址相互没有什么特殊关系,只不过在界面上它会显示所有地址所拥有的比特币的余额。这是相对于常见的一用户名一密码模式的最大区别。这个带来的问题是“钱包备份”的问题:别以为备份一次就万事大吉了,有可能有新产生的地址秘钥没有得到备份。当然这样的备份方法也是有的,这里只是提醒要安全备份,就不展开说了。
再介绍另外一个有趣的细节。如上文所说,当你把比特币打给另外一个地址时,你所发出的消是,“我要吧第M号交易的输出到地址X的一些比特比作为输入源,输出给地址Y”。这里有一个非常重要的规定,就是每笔交易都必须输入源的金额用光!所以比特币客户端的做法是创建一个“找零地址”,把额外的输入输出给这个找零地址。举个例子,假如我的某地址136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr某次交易获得了1万个比特币,然后当我拿这笔钱中的0.01个币买一瓶矿泉水时,公众就会从全局账单看到地址136LvpXuWFRjfuVBCmoqFFGSstbMQkNEKr打到地址DZA 0.01个币,同时打到DZB 9999.99个币。当然公众无从知道这个DZB只是我的一个找零地址。所以有些搞数据分析的专家看到频繁的大规模财产转移就会以为这是刻意的转移/掩盖财产,最后发现闹了笑话。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2024-12-23 00:46 , Processed in 0.483601 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表