比特人-比特币第一中文社区

 找回密码
 立即注册(register)
查看: 1456|回复: 35

【国庆征文】借用纸币进行比特币离线支付的两种方法

  [复制链接]
发表于 2013-10-14 21:20:28 | 显示全部楼层 |阅读模式
本帖最后由 bingjiw 于 2013-10-14 21:20 编辑

【国庆征文】借用纸币进行比特币离线支付的两种方法


两种可以避免双重支付问题的比特币离线支付解决方案

原创作者:bingjiw,中国
作者BTC地址:1QCRu9AhDcZYYg8neeYxrhdVUbqyVHMi1t

概要:本文介绍了两种利用纸币来实现比特币的离线支付且可以避免双重支付问题的方法,两种方法分别简称为1PAP3PEB


(一)不依赖于第三方的不可赎回的比特币离线支付方法
(简称为1PAP,取自此方法所产生的虚假比特币地址的开头4个字符)

把比特币“注入”一张纸币中

首先需要一张纸币,比如美元或人民币等都可以,但必须满足两个条件:1)此种纸币上的编号具有唯一性,绝不重复。2)此种纸币具有较好的防伪性,即此种纸币市面上的假币比较少,或非常难以造假。然后,利用纸币上的唯一编号与面值等来创建一个虚假的比特币地址。

这个虚假的比特币地址的组成格式依次是:

  • 1(比特币开头数字1  

  • 使用本方法的比特币地址标识,英文大写PAP,代表PAPER,表示这个地址上的比特币已经纸币化了。(若遇到某种纸币的编号特别长,则此PAP可以缩短为P或省略不写,以给后面的特别长的编号留下足够的字符空间。但目前暂未发现有某国的纸币编号长到这种程度。)最多占3个字符。

  • 纸币面额(数字)遇到0用小写英文o代替,如1oo5o等。大于或等于1000的面额,用简略的科学计数法记,比如1000可记为1E310000记为1E42000000记为2E6。最多占3个字符。

  • 三个英文字母的货币代码(3个小写英文字母,货币缩写采用ISO4217国际标准,若遇到小写l则用大写L代替,其余全是小写,因为比特币地址中没有小写L。)最多占3个字符。

  • 这张纸币上的编号(大写英文字母与数字,不得有小写字母出现,几乎所有现实纸币的编号中都不存在小写字母。若遇到大写"O""I",则用小写代替,遇到数字0则用英文o代替。)

  • 英文小写z填充区,全部填以小写英文字母z,直到填满比特币地址所规定需要的长度。

  • 比特币地址校验码(使整个地址符合比特币的规范要求)



例如:一张100元面值的人民币,它的编号是:A6K4586664
那么所得到的虚假比特币地址就是:1PAP1oocnyA6K4586664zzzzzz4oLvT2

例如:一张面值5美元的纸币,它的编号是:BL39319171AL12

那么所得到的虚假比特币地址就是:1PAP5usdBL39319171AzzzzH82sJP

注意,这个地址不是通过私钥生成的,因此它没有对应的私钥。采用如上的方法,一看这个地址就很清楚,它是什么货币,什么面值,编号是多少,而且用了不同的大小写区别开了不同的部分,不容易混淆。

虚假比特币地址制作好后,就可以把你准备用来离线交易的比特币金额发送到这个地址上去了。比如,我们发送100BTC到前面的1PAP1oocnyA6K4586664zzzzzz4oLvT2这个地址上去。

从比特币的数字世界来看,其实这样子就是销毁了这100BTC,因为我们并没有这个虚假比特币地址的私钥,谁都没有,所以发送之后,从比特币的数字世界来看,就等于是这100BTC永远永远的消失了,没有任何人能够把它再取回来或花掉(因为没有私钥)。正如那块沉入大海中的石头货币一样(*见注释1),虽然永远消失了,但其在人们心目中的价值使它依旧能当作货币用来交易。而且正是因为消失了,所以绝对不存在双重支付的可能性。再加上这张纸币本身的防伪性及其编号的唯一性,因此这张纸币就成为了这100BTC的唯一证明,因此这个离线支付的方法是不存在双重支付的问题的。



*
注释1:

弗里德曼在《货币的祸害》一书中引述了一个太平洋岛屿雅浦岛上的货币故事——当地人将打磨搬运回家的石头作为货币来进行价值度量和交换。曾经有一家人在某个盛产石头的岛上,采到了一块硕大的费(即石头货币),但在把费运回雅浦岛的中途遭遇风暴,最后只好砍断捆着费的缆绳,船上的人得救了,但费却沉入海底,无法打捞。人们回到岛上,都证明那家人得了一块质地优良体积巨大的费。自从那时,岛上所有的人都承认,石头落入海底是个意外,这块费虽然躺在大洋底下一动未动,但它却在岸上媒介了几辈子的交易。即使是百年前沉入海底的石头也可以成为一个家庭财富的象征并得到整个社区的认可。



制作者(支付者)可以做得更好一点,就是把这个虚假比特币地址及其二维码打印在纸币的空白处,若再打印上“此钞票已注入100BTC”的提示性说明就更直观了,通过二维码可以方便接受者扫描与校验真伪。比如像下图右边这样。

5美元纸币.jpg

(图一:用户自己打印上二维码的美元)


接受支付与检验真伪

离线支付的接受方在接受此纸币时可以没有互联网接入,但接受方需要有一份若干天以前(但必须在制作者往这个地址输入比特币之后)的BLOCKCHAIN的离线数据文件在身边的电脑或手机或iPad中,接受者只要查询BLOCKCHAIN中有没有这样的一个比特币地址,而且是不是输入了支付者所宣称的数量金额的比特币,就可以了。更简单(更轻量,存储空间更小)的办法是接受方需要有一份所有以1PAP开头的比特币地址的余额表,如一个EXCEL文件存在手机中。如果要更加保险一点,接受者还可以用台式验钞机、或便携式验钞仪检验一下这张纸币的真伪就更保险了。甚至验钞机还可以自动扫描上面的比特币二维码,自动用验钞机内的1PAP数据库(可以不定期手动更新,或可以自动接受来自卫星或短波无线电信号中的1PAP数据来自动同步)进行检验余额。

如果接受者身边没有BLOCKCHAIN的离线数据文件,或者支付者往虚假地址中输入比特币是在最近几天,而接受者的BLOCKCHAIN(或EXCEL表格文件)中没有包含最近几天的数据,那么接受者还可以把此纸币的编号、面额、币种用短信发送到一个支持本文所述的方法的钱包服务商(比如是:blockchain.infobitpaycoinsetter等)的检验短信服务号码上,钱包服务商根据最新的BLOCKCHAIN检查此3种数据所构成的比特币地址,然后把此比特币地址上所具有的(其实是此地址上已经销毁的)比特币数量发回给接受者。接受者就能确定这张纸币所代表的比特币的是否真实了。或者接受者打电话请他的可以上网的朋友帮忙检验也是可能的。

一旦纸币化后的比特币是再也不能重新数字化回到BLOCKCHAIN中去的,它将是永远以纸币的形式存在。

除非未来大家都认可某一个权威的机构来执行这个重新数字化的过程,该机构一边销毁这张纸币,一边向比特币网络结点广播它重新生成(re-generate)了与原数量相同的比特币(类似Zerocoingenerate出新的比特币),并发到现纸币所有者的比特币钱包地址上。然后所有结点认可此机构的确认与销毁纸币的工作以及重新生成的宣告。当然这是要修改比特币的协议,加入“重新生成”这一功能的。所以这个重新数字化只是一种可能的假想,它是否存在并不会影响离线支付的进行。

即使虽然无法重新数字化回到BLOCKCHAIN中,但是与“用石头来当作货币的岛民一样,大石头虽然掉到海里去了、消失了,但是大家都可以证明那块大石头确实是某个岛民所拥有的”是一样的。虽然比特币被制作者(第一个支付者)发送到了一个虚假地址“销毁”了,但这正是证明了制作者确确实实拥有过这个数量的比特币,而且绝对没有可能双重支付它。基于这样的信任,下一个接受者、再下一个接受者、乃至整个比特币社区都可以这样子把这个信任的链条一直传递下去。

stone money.JPG
(图二:某小岛上的石头货币)

而这张纸币正是代表着那块永远再也见不到的沉在海底的大石头。


(更多关于石头货币的讲述可参见:
http://zh.wikipedia.org/wiki/%E9%9B%85%E6%B5%A6%E5%B3%B6%E7%9F%B3%E5%B9%A3 http://news.xinhuanet.com/energy/2011-11/10/c_122263095.htm



(二)依赖于第三方托管的可赎回的比特币离线支付方法
(简称为3PEB: 3rd party escrowed bitcoin within a paper money

利用与(一)中类似的理念,下面简要举例说明。
1.      用户A100BTC发送并存在如:BitStampMtGox或其他支持发行比特币离线证明的服务商(下面简称为服务商)。
2.      用户A请求服务商给他发行比特币离线证明(通过本文的用纸币方法),同时用户A自己挑选一张纸币,并将纸币的面额、币种、编号发送给服务商。
3.      服务商将用户A100BTC冻结。并用服务商的专用私钥对这句话加密签名:
“本钞票(5/usd/BL39319171A)的持有者可随时向BitStamp赎回100BTC.”(这句话的格式是固定的,且公开的。)
然后服务商将此私钥加密后的信息(一串已加密的字符串)发回给用户A
4.      用户A将这一串已加密的字符串、字符串的二维码、“凭此票可向BitStamp赎回100BTC”字样打印在自己的那张钞票的空白处(如果要打印的内容太多,空白处太小打印不下,那么打印在白纸上并与此张钞票一同保存,同样有效)。制作完成。
5.      用户A将这张带有100BTC的钞票支付交给了用户B
6.      用户B用服务商的专用公钥来验证打印在钞票上的加密字符串,并检查是否与钞票的面额、币种、编号一致。并检查钞票的真伪。若一致且是真钞,则接受此张钞票的100BTC支付。(注:此方法不需要像方法一中那样查询BLOCKCHAIN的数据库。)
7.      用户B可以再将这100BTC的钞票支付给用户C,用户C再支付给用户DD再给E,……,一直到某个用户X
8.      当用户X要赎回这100BTC时,他可以到服务商的柜台并交出这张钞票(或邮寄给服务商也可以),服务商用它的专用公钥解密并校验钞票上的加密字符串与钞票的面额、币种、编号是否一致。并检查钞票的真伪。若都没问题,则将它冻结的100BTC解冻并发送到赎回者的BTC钱包地址,同时销毁这张钞票。

两种方法的防伪性:此两种方法防伪性等同于所选用的纸币的防伪性,且只要纸币发行机构没有破坏纸币上的编号的唯一性,就不会出现伪造与多重支付的欺骗。接受者应当拒绝纸币上的编号有明显被涂改过的痕迹的纸币的支付。这样即可保证将伪造纸币与双重支付的风险降到最小。



(三)扩展应用
把彩色币、MastercoinBitShares“注入”纸币中

当把比特币“注入”纸币钞票这种使用方法广为大家所认可与接受时,就有可能会出现一些扩展的应用。例如以下两个例子:

(1)(1) 钞票变成原始股票

假设未来烤猫(
ASICMiner)把它的直接股全部转入了彩色币系统中。你可以把带有烤猫股票的彩色币发送到如第(一)章中所述的由钞票编号构成的虚假比特币地址上,那么这张钞票就变成了“原始的股票”,因为它就代表着对烤猫的股权。为避免与其他钞票搞混,可在钞票上打印地址二维码及“烤猫股票XXX股”字样。(但若要另外定期获得烤猫的分红,还需要设置为股权地址与分红地址不同才行,或者需要另外结合1PAP3PEB的方法来处理分红,此处不再详述。)


股票.jpg
(图三:与传统的原始股票相比,用钞票来当股票其防伪性更好;无需专门印制,使得个人也能发行股票;持有人不记名,可任意出售、交易。)


(2)(2) 用“钞票”来代表债券或其他资产或某种权力。

比如未来某个机构、公司、个人通过彩色币、MasterCoinBitShares来发行债券、固定资产证明、身份或权力证明时,然后持有者将对应的彩色币、MasterCoinBitShares“注入”钞票后,持有这张钞票就拥有了所对应的权力。比如:迪斯尼公司利用彩色币发行了“迪斯尼虚拟门票币”,假设每个“门票币”约价值3000元,每个“门票币”可以到全球任何一家迪斯尼公园玩一整天。一位中国的父亲把一个“迪斯尼虚拟门票币”“注入”了一张崭新的100元的钞票中,并在钞票上打印好地址二维码及“迪斯尼门票”字样,然后在过年时把这张钞票作为“压岁钱”送给他的小孩,(对小孩子来说持有与使用一件实物要比持有虚拟的彩色币更容易)。去玩时,把这张纸币插入迪斯尼门口的自动检票机,完成检验后,自动门自动打开,即可进入。同时可让游客选择那100元钞票本身是换一个“电动米老鼠玩偶”或者可以换一桶“唐老鸭冰激凌”给游客(因法币不断的通货膨胀,那时的一桶冰激凌可能也就差不多值100元了)。当然,若“注入”的是一张10元面额的钞票,则只能送一张“迪斯尼粘粘纸”了。

与现在常见的普通门票相比,这张钞票“门票”是难以复制、难以伪造的,因为伪造它就等于印假钞,其技术成本与法律风险是极高的。而迪斯尼公司还可以省掉自行研制、印刷、销售、流通“特制防伪门票”的成本。

<全文完>
版本1.0
最后修订于:2013-10-14 21:14

期待英语好的网友能把本文翻译为英文,以向比特币英文社区继续传播分享
本文于2013-10-14首发于比特人论坛(bbs.btcman.com


发表于 2013-10-14 22:35:25 | 显示全部楼层
销毁这种事情还是比较不好的吧
 楼主| 发表于 2013-10-15 08:03:24 | 显示全部楼层
testusers 发表于 2013-10-14 22:35
销毁这种事情还是比较不好的吧

你是指纸币还是比特币的销毁? 若指比特币,从私钥角度看是销毁,从使用角度看其实是转移到纸币上去了。 若指纸币,如果有更好的回收用过的纸币的办法也是可以考虑采用的,比如像旧钞换新钞那样。
发表于 2013-10-15 12:23:58 | 显示全部楼层
问题是,怎么注入呢?注入的过程如果是人为的,比如让我来注入的话,如果这货币能买东西,我一定使劲注入,然后用这个钱去换比特币。哈哈
发表于 2013-10-15 12:30:13 | 显示全部楼层
bingjiw 发表于 2013-10-15 08:03
你是指纸币还是比特币的销毁? 若指比特币,从私钥角度看是销毁,从使用角度看其实是转移到纸币上去了。  ...

事实上被这样销毁的 BTC 实在不适合流通了. 没有机会回到 blockchain 的话就是无价值吧
发表于 2013-10-15 12:46:08 | 显示全部楼层
Really 发表于 2013-10-15 12:23
问题是,怎么注入呢?注入的过程如果是人为的,比如让我来注入的话,如果这货币能买东西,我一定使劲注入, ...

你可能没看仔细,注入的方法已经在(一)、(二)中讲得很清楚了,注入的BTC是你自己的BTC,并不可能无中生有。只不过通过注入到纸币,可以实现离线交易。
发表于 2013-10-15 12:48:18 | 显示全部楼层
testusers 发表于 2013-10-15 12:30
事实上被这样销毁的 BTC 实在不适合流通了. 没有机会回到 blockchain 的话就是无价值吧 ...

(一)的方法确实不能回到blockchain了,但不能说没有价值,就如沉到海里的石头货币一样。如果大家认可照样可以有价值。

(二)的方法是可以回到blockchain的。
发表于 2013-10-15 12:48:20 | 显示全部楼层
testusers 发表于 2013-10-15 12:30
事实上被这样销毁的 BTC 实在不适合流通了. 没有机会回到 blockchain 的话就是无价值吧 ...

(一)的方法确实不能回到blockchain了,但不能说没有价值,就如沉到海里的石头货币一样。如果大家认可照样可以有价值。

(二)的方法是可以回到blockchain的。
发表于 2013-10-15 13:09:34 | 显示全部楼层
汪先生 发表于 2013-10-15 12:48
(一)的方法确实不能回到blockchain了,但不能说没有价值,就如沉到海里的石头货币一样。如果大家认可照 ...

我说实话,不现实
发表于 2013-10-15 13:17:21 | 显示全部楼层
汪先生 发表于 2013-10-15 12:46
你可能没看仔细,注入的方法已经在(一)、(二)中讲得很清楚了,注入的BTC是你自己的BTC,并不可能无中 ...

不好意思,确实看疏忽了。不过这样100BTC迟早就消失不见了,纸张能保存多久呢?何况是用来交易的纸币?
发表于 2013-10-15 13:25:26 | 显示全部楼层
本帖最后由 cross1943 于 2013-10-15 13:34 编辑

怎么防复印。。。。无论是方法1或是方法2,在币没被转到其他收款地址的情况下,复印一堆纸币是轻而易举的。
发表于 2013-10-15 14:38:44 | 显示全部楼层
只要有人认就行。我也想过权力机构是可以用自己的信誉担保发行BTC纸币的,就是说1BTC面额纸币保证能在银行兑换出一个1BTC,和当初与黄金挂钩的美元一样。不过楼主的办法完全是去中心化的。赞一个。
发表于 2013-10-15 15:52:40 | 显示全部楼层
楼主了不起!!!这个想法太伟大了!
发表于 2013-10-15 16:04:09 | 显示全部楼层
打印纸钱包,是不是比你这个想法更省事呢?不过问题是完全绕开了法币体系。
发表于 2013-10-15 16:30:28 | 显示全部楼层
好不容易无纸化,变得又有纸化了。
 楼主| 发表于 2013-10-16 09:48:35 | 显示全部楼层

在现实中能否马上实现并不重要,至少我们从理论上证明了这个方法是可行的,现实中有没有人用目前并不重要。也许将来在某个无法上网的环境下,会有使用这个方法的人的。

大家思想的相互探讨也许可以激发出另一些意想不到的灵感呢。
 楼主| 发表于 2013-10-16 09:52:00 | 显示全部楼层
cross1943 发表于 2013-10-15 13:25
怎么防复印。。。。无论是方法1或是方法2,在币没被转到其他收款地址的情况下,复印一堆纸币是轻而易举的。 ...

不是“复印一堆纸币”就能做到的,你需要能“印刷100%逼真的伪钞”才行。方法中有讲到检验钞票的真伪。你复印几张人民币试试,能花得出去吗?同样的道理在此方法中同样适用。
 楼主| 发表于 2013-10-16 09:56:15 | 显示全部楼层
zyc26 发表于 2013-10-15 16:30
好不容易无纸化,变得又有纸化了。

哈哈,此方法仅是为了离线交易,如在无网络的特殊环境下,比如战争、大海上、内地山区、月球上、火星上等。
并不是替代现有的常规在线交易,只是补充而已。
发表于 2013-10-16 09:57:16 | 显示全部楼层
比特币要是想成为大众的流通货币的话,实体币、信用卡是必然要出现的。不过在软妹币上打印东西似乎是违法的。
 楼主| 发表于 2013-10-16 10:01:48 | 显示全部楼层
Really 发表于 2013-10-15 16:04
打印纸钱包,是不是比你这个想法更省事呢?不过问题是完全绕开了法币体系。 ...

打印纸钱包 当然可以,但“打印纸钱包”主要是用于保存,而不是离线交易。“打印纸钱包”无法解决双重支付问题,比如你把纸钱包同时打印2份,或用复印机复印N份,同时给2人在2地(或N地)同时使用。

离线时无法检验纸钱包里的钱到底有没有已经被花掉了。

这一点正是此方法与纸钱包的不同之处。

点评

you are right  发表于 2013-10-16 10:21
 楼主| 发表于 2013-10-16 10:07:48 | 显示全部楼层
bling 发表于 2013-10-16 09:57
比特币要是想成为大众的流通货币的话,实体币、信用卡是必然要出现的。不过在软妹币上打印东西似乎是违法的 ...

"在软妹币上打印东西似乎是违法的",若要避免此问题,可以打印在白纸上,然后与那张人民币一同装在一个信封里。直接打印在上面,主要是为了方便,因为若是2张纸的话,怕丢了其中一张就麻烦了。

是否直接打印在纸币上面不是关键,是为了方便,关键是借用纸币来证明唯一性。
 楼主| 发表于 2013-10-16 10:10:47 | 显示全部楼层
bling 发表于 2013-10-16 09:57
比特币要是想成为大众的流通货币的话,实体币、信用卡是必然要出现的。不过在软妹币上打印东西似乎是违法的 ...
比特币要是想成为大众的流通货币的话,实体币、信用卡是必然要出现的。

你说的没错,我同意,所以此方法仅是补充。此方法仅是为了离线交易,如在无网络的特殊环境下,比如战争、大海上、内地山区、月球上、火星上等。
并不是替代现有的常规在线交易,只是补充而已。
发表于 2013-10-16 10:12:18 | 显示全部楼层
大前提就错了~ 根本无法输钱到一个瞎编的比特币地址去。不信你试试:

https://blockchain.info/zh-cn/ad ... 4586664zzzzzz4oLvT2

提示你:对不起,这是不是一个有效的比特币地址

而你再试试一个从未用过的,但是由私钥生成的地址:

提示是:没有找到这个地址的交易记录,它有可能还没被用在网络上。

 楼主| 发表于 2013-10-16 10:14:33 | 显示全部楼层
缺牙大灰狼 发表于 2013-10-15 15:52
楼主了不起!!!这个想法太伟大了!

站在前人的创新的基础上,互相学习探讨,就会有新的想法出现。
互相交流会带来新思想。
 楼主| 发表于 2013-10-16 10:23:12 | 显示全部楼层
胡翌霖 发表于 2013-10-16 10:12
大前提就错了~ 根本无法输钱到一个瞎编的比特币地址去。不信你试试:

https://blockchain.info/zh-cn/addr ...

胡兄果然犀利!
瞎编的比特币地址 当然是不行的了,必须要符合比特币地址的规范与格式。
就好像Mastercoin一样,Mastercoin 把各种数据都能存到比特币地址中去,它也是同样要符合比特币地址的规范与格式的。
本文中所例举的那2个地址确实是我为了举例说明本文的方法而“瞎编”的,不是一个规范的比特币地址,因为我知道它的校验码不对,我一方面是偷懒了,另一方面为了尽快发表文章,所以没有用算法去计算检验码。
感谢胡兄指出。如何计算检验码我还不太会,希望能得到帮助。谢谢。

本版积分规则

小黑屋|Archiver|手机版|比特人-比特币第一中文社区

GMT+8, 2019-9-18 15:50 , Processed in 0.027646 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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