V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pysama
V2EX  ›  Bitcoin

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

  •  
  •   pysama · 2017-09-30 15:29:24 +08:00 · 671 次点击
    这是一个创建于 2401 天前的主题,其中的信息可能已经有所发展或是发生改变。

    几个基本概念

    • BTC,就是你的一个地址中的 UTXO(未使用的交易输出)。
    • 在线钱包,如 blockchain.info,可以把自己的私钥导入,也可以使用钱包来生成地址进行交易。
    • 官方推荐了很多钱包,比如 electrum,它通过 random seed 生成一对主私钥和主公钥,根据公钥进行 10 次复杂的运算计算出地址。
    • 冷钱包( ColdStorage, 只读钱包, 离线钱包),核心思路就是把授权(签名)的步骤放在离线环境中操作以保证私钥安全。

    创建只读钱包

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

    如何交易呢?

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

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

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

    备份和安全

    • seed 和扩展 seed,物理备份,密码牢记。这三个东西一定不能泄漏。
    • 理论上说只需要备份 seed 即可,seed 可以还原地址和私钥, 当然你也可以把私钥导出来备份。
    • 安全方面还可以弄多重签名的钱包(这里就没写下来了,毕竟没 btc 来测试)
    • 一些大牛的建议:大额 ColdStorage,小量在线钱包

    手续费

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

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

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

    1 条回复    2017-10-03 21:27:49 +08:00
    acess
        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 特性(不知道商家、支付公司那边会不会有问题),这样就可以直接给已经广播出去、但还没进链确认的交易加手续费,同时还可以替换交易内容(这样可以双花,也就是撤销未确认交易,所以引来一些争议)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   864 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:50 · PVG 04:50 · LAX 13:50 · JFK 16:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.