新手对 BTC 的一些理解,有不对的对方请指正

2017-09-30 15:29:24 +08:00
 pysama

几个基本概念

创建只读钱包

以 electrum 为例,假设你已经创建了一个标准的 electrum 钱包(主钱包)。现在新建钱包,选择标准钱包,在选择 seed 的界面中,选择公钥,然后输入主钱包的主公钥,一路 Next 到创建完毕,对,这就创建好了。注意:只读钱包是没有密码的,而且不能交易。然后找台离线环境的电脑,把你的主钱包 copy 过去(或者重新恢复过去),由于是离线环境,所以你的私钥是非常安全的。

如何交易呢?

  1. 在只读钱包中的发送菜单中输入交易的数据,点击 Send,在弹出的窗口中输入手续费(手续费越高交易的优先级越高),然后点击保存按钮,将这个未签名的交易文件保存到你喜欢的地方。然后把这个文件 copy 到你的主钱包的机器(离线环境)

  2. 打开你的主钱包,选择菜单中的工具》载入交易,选择刚才 copy 过去的交易文件。点击 Sign,授权之后,你就能看到交易 ID,点击保存按钮,将签名后的交易文件重新 copy 回只读钱包的机器(有网)上

  3. 在只读钱包载入刚签名后的交易的文件(载入的步骤在上面有细说了),在弹窗口点击“广播”,就这么简单。

备份和安全

手续费

手续费是按照交易数据的体积计算的,据资料说是每 KB 0.0001BTC (不足 1KB 按 1KB 算),交易数据的大小在网上可以查询到,比如在 btc 官网上输入地址,就能看到交易的细节。btc 的手续费会影响到交易速度,所以手续费率是浮动的,在 btc.com 页面中可以看到当前的最佳手续费。

对了,手续费是付款方支付的。(如果你找朋友买了 btc,你还要支付一比手续费给对方)

最后,非常感谢 v 友 @Timon 解答一些细节问题。

731 次点击
所在节点    Bitcoin
1 条回复
acess
2017-10-03 21:27:49 +08:00
我也是几个月前才开始了解比特币,不知道该 at 谁……@h4x3rotab

我可以说说我的理解。

钱包和备份这块……简而言之,比特币只认私钥不认人。
地址是公钥的两次 hash,一个私钥只对应一个公钥、一个地址。但是地址还有 3 字开头的,它可以是多重签名地址(实际上还可以是别的类型,比如目前使用的 SegWit 地址),可以对应多个私钥、执行逻辑判断:一共 N 个私钥里,有 M 个有效签名则通过验证。
私钥很重要,所以大笔资金建议用冷钱包,也就是私钥不上网。可以用不联网的设备,甚至还可以用纸张直接打印私钥(比如 bitaddress.org )。
比特币建议地址用一次换一个,因为比特币的转账记录都是公开的。如果只重复用一个地址,别人打开区块浏览器就看到你的所有过往交易了。还有说法认为换地址可以不暴露公钥,带来额外的安全性。
但老是换地址,备份私钥就成了问题,常常出现私钥丢失而丢币的问题。后来,就有了 HD 钱包,也就是分层确定性钱包,通过一个种子派生(还可以是树形结构)出一堆私钥,备份钱包时,备份种子就可以了,私钥都可以派生出来。种子的格式也是有标准的,也就是一串单词、汉字等组成的密语,不过标准好像修订过,所以偶尔会碰到不兼容的问题。
当然,即使用了 HD 钱包,仍然可以采取一个个备份私钥的办法,只是这个办法相对比较笨。

你说的“官方推荐了很多钱包,比如 electrum,它通过 random seed 生成一对主私钥和主公钥,根据公钥进行 10 次复杂的运算计算出地址。”我觉得好像不太对劲,不知道是主公钥、主私钥、10 次复杂运算是个啥……也许是我不懂具体技术细节?

比特币的交易,可以理解为让输入的币(每一个输入 UTXO )作废,然后铸造等额新币(输出 UTXO )。输出总额需要小于等于输入,多出的部分作为手续费被计入区块的 coinbase 交易里,被矿工拿走。
这里就有两个蛋疼的地方:找零和碎币。
找零问题不会坑到正常的用户,只是开发者和手动构造交易的玩家需要小心。前面说了,输入的币会被销毁,所以需要在输出里填自己的地址作为“找零”,如果忘了填这个地址,余额就被矿工当作手续费拿走了。以前也有矿工“拾金不昧”,捡到超高额手续费后说要退还。如果他们不想归还,好像你也没啥办法了。
一个地址里的多个 UTXO 也不会自动合并,就像现实中的硬币铸造成本可能超过币值一样,数额太小的“碎币” UTXO 会让你不想花出去,因为你把这个碎币加到交易输入里,会让交易数据量变大,导致你付出比币值更多的手续费。

钱包软件可以广播交易,但你也可以用别的方式来广播交易,比如用在线的 pushtx 服务: https://blockchain.info/pushtx
btc.com 等矿池还提供付费加速的服务,实际上可以理解为补交手续费吧……

交易数据大小,钱包软件就可以显示出来,钱包软件还会根据未确认交易状况来动态判断手续费大小——只有部分钱包有这个功能(我记得 Electrum 和 Core 都有),有这个功能的话就不需要到网站上查了。
手续费高,矿工就更优先打包你的交易,但下一个块啥时候挖出来是看运气的。
如果当时的交易量不高,都填不满区块,那超低手续费也可以很快确认(不过也有矿池限定了最低手续费,更低的直接扔掉不打包)。
如果当时的交易量很大,拥堵了,那就得在发出交易时就把手续费加高,否则一大意被卡几天动弹不得——虽然交易没被打包进链,是未确认状态,但一般的矿工也拒绝“双花”这笔交易。
被卡后也不是完全没办法,比如 Child Pay For Parent,也就是用更高的手续费花掉“找零”,前后两笔交易综合起来手续费够高,矿工就会优先打包了(这个好像也看具体矿池?)。再有就是找矿池付费加速。
还可以在发出交易时就勾选“可替换”,也就是启用 RBF 特性(不知道商家、支付公司那边会不会有问题),这样就可以直接给已经广播出去、但还没进链确认的交易加手续费,同时还可以替换交易内容(这样可以双花,也就是撤销未确认交易,所以引来一些争议)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/394888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX