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

为啥我的 bitcoin core 冷钱包里的余额跟查区块链网站的记录不一样啊

  •  
  •   um6uih · 2022-12-04 23:03:41 +08:00 · 2430 次点击
    这是一个创建于 711 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我 2021.10.02 从币安转了 0.043 个币到 bitcoin core 冷钱包打算不玩了
    后来发现转账时间特别长,怕想玩了在转过去来不及

    在 2021.10.21 又从冷钱包转了 0.019 个币回到币安之后没再玩过

    冷钱包备份也忘了是之前还是之后了,这一年也重装过系统,从新下载的 bitcoin core 和块

    现在冷钱包同步到最新,也不裁剪,就是保存所有的块

    但是冷钱包里就是没有 10.21 号转账的 0.019 的记录,我从区块链网站是能查询到这个记录的

    区块链网站显示钱包地址余额是 0 。10.21 次的那个转账 0.19 是转到我币安地址,剩下的转到另一个地址里,我百度了下说是找零机制,按这样说的话我的冷钱包应该是余额 0.043-0.019 的吧,但是钱包显示的余额还是 0.043


    转账吧,好几天没动静,都是查区块链浏览器里推荐的手续费,就算比推荐的高也是好几天没有一个确认

    这种是什么原因啊?有没有大神给指导一下的
    16 条回复    2023-01-30 22:40:47 +08:00
    rimutuyuan
        1
    rimutuyuan  
       2022-12-04 23:54:37 +08:00
    大概率钱包本地数据错乱了,你可以在本地钱包命令行中使用 dumpprivatekey 导出找零地址的私钥

    然后下载一个 electrum 钱包( https://electrum.org ),这个是使用在线服务同步区块数据,不需要花时间同步,然后将找零地址的私钥导入 electrum
    rimutuyuan
        2
    rimutuyuan  
       2022-12-04 23:56:58 +08:00
    复制粘贴私钥时注意安全,及时清空剪切板
    acess
        3
    acess  
       2022-12-07 21:44:46 +08:00
    “但是冷钱包里就是没有 10.21 号转账的 0.019 的记录,我从区块链网站是能查询到这个记录的”
    你可以看区块浏览器里说这个交易是打包到哪个区块的(区块高度),比如是 12345 ,然后手动在 bitcoin core 里的控制台用 rescanblockchain 12345 12345
    acess
        4
    acess  
       2022-12-07 21:50:10 +08:00
    手续费的话……首先要开启 RBF ,就是手续费追加。

    然后可以直接去查内存池,johoe 做的内存池监视器:
    https://core.jochen-hoenicke.de/queue/#24h
    鼠标浮在图表上,看 1MvB 内的手续费率(是比率,相当于单价)是多少,按这个给就可以。

    不够的话可以通过 RBF 追加,右键菜单里就有追加手续费。

    (话说我看最近其实内存池都没满,也就是没拥堵,所以其实最低 1sat/vB 也应该能很快确认的)
    acess
        5
    acess  
       2022-12-08 19:13:31 +08:00
    还有一些没 x 用的废话,毕竟楼主也问了“为啥”:

    首先其实不确定你钱包是什么情况……bitcoin core 的钱包功能本身其实并不好用,而且历史烂摊子蛮多……
    虽然最新版默认也改成输出描述符模式了,遵守 BIP44/49/84/86 ,而且还有 PSBT 这个通用的交易格式,有了挺大的改善,但还是没支持业界通行的 BIP39 助记词(而且一直以来其实都是因为有开发者反对才不支持)。


    根本原因,应该是 bitcoin core 的工作方式一直以来都是非常低效的,同时也很简单,就是笨扫区块,区块就是账本,从账本里一页一页翻,把那些跟你有关的交易找出来。

    就像一本没有检字表的字典,其实你要查的某个字里面(可能)有,但你不知道在哪一页(而且很显然交易不会像字典里那样按照读音排序),只能一页一页笨翻。

    因为查一次成本很高,很慢,所以有时候没扫全,你也不知道。
    (按理说开发者也有在钱包里标记上次扫描到的位置,也就是扫到了哪个区块,于是下次同步时就从这个地方继续往后扫,这样的话按理说应该是不会遗漏的。但实际上……嘛我也不是很清楚楼主的钱包是啥情况)
    像区块浏览器,还有楼上说的 electrum ,他们是在服务器上开了甚至可能比区块数据体积还要大好几倍的索引,所以才能秒查出结果。你要是在本地生成那么多索引你也能秒查,但 bitcoin core 是没这个功能的。

    不过 bitcoin core 现在有个功能 blockfilterindex ,把这个开启后就能生成相当于区块数据 1%这个数量级的索引。
    但是!很遗憾我看了最新出的 24.0 仍然是只能生成这个数据(还能通过 P2P 网络喂给轻钱包),但他自己反而无法利用这个索引。
    现在我看已经把 pr #25957 合进去了,所以未来发布的下一个版本的 bitcoin core 应该就能利用这个索引了,大概几分钟左右就能把区块全扫完。

    除了这个之外还有一个很早以前就有的功能 txindex ,这个索引只能根据 txid 查到交易在哪个区块,然后就能快速找到一笔交易;然后根据一笔交易的输入( prev out 也是 txid ),就可以继续往上追溯查询它的资金是从哪来的,如此还能继续往上追溯,但也只能查这个。至于转到一个地址的钱后来(输出)去哪了,以及一个地址有哪些交易之类的,靠 txindex 都是查不了的。
    acess
        6
    acess  
       2022-12-08 19:22:23 +08:00
    啊对了,bitcoin core 还有个控制台命令 scantxoutset ,它的功能就是直接扫 UTXO ,扫一遍也只需要几分钟左右吧。
    这个 scantxoutset 我记得钱包不会自动调用,是手动调用的,而且扫完了也不会把自动扫描结果加入钱包(实际上随便输入任何地址,包括不属于你钱包的地址,也可以扫)。

    要说找零,首先比特币的交易数据格式本来就必须有找零。

    找零是可以找零到原地址的,但 bitcoin core 一向都是遵守中本聪当年在白皮书里说的,“一个地址只用一次、不重复使用,这样能一定程度上保护隐私”,所以可想而知……一个地址 A 收到币后,如果你又转出了,就会找零到新地址 B 上,于是你(在交易确认进链之后)如果还拿着地址 A 去手动扫 UTXO 集合,当然就扫不到 B 地址上的币。
    acess
        7
    acess  
       2022-12-08 19:23:42 +08:00
    (当然,严格来讲,如果输入的 UTXO 正好被花完,那就不需要找零输出)
    acess
        8
    acess  
       2022-12-08 19:27:28 +08:00
    (还有,打错字纠正一下:扫完了也不会 [自动把] 扫描结果加入钱包)
    v2exe2v
        9
    v2exe2v  
       2022-12-21 23:14:22 +08:00
    钱包没同步吧,联网同步一下就知道了
    acess
        10
    acess  
       2022-12-22 13:19:04 +08:00
    “冷钱包”……哎还是不吐不快

    bitcoin core 一般情况下,私钥是保存在联网的环境的,所以它叫做热钱包。

    如果把私钥从生成到后续使用都从不联网,这才叫做冷钱包。不过冷钱包其实只不过是不直接联网而已,还是需要二维码、蓝牙等方式传递交易数据的。联网的是没私钥的“仅观察”钱包,起草交易后,传递给冷端,冷端检查交易内容并签名后,再传递出去。bitcoin core 原先不支持冷热分离;在支持 PSBT (一种通用的标准交易格式)、并且大改钱包底层为基于输出描述符后,也开始支持冷热分离了。
    acess
        11
    acess  
       2022-12-22 13:20:27 +08:00
    像交易所那种,你自己不掌控私钥,叫做“托管钱包”( custodial wallet )。

    自己掌控私钥的就叫做“非托管钱包”( non-custodial wallet ),无论是冷热都算。
    um6uih
        12
    um6uih  
    OP
       2023-01-26 20:57:15 +08:00
    @acess 非常感谢表哥热心并且详细的回复,抱歉,到现在才尝试表哥说的方法,我把 bitcoin core 区块更新到最新,还是没有记录,就用了您说的 rescanblockchain 命令,然后交易记录里就有了 2021.10.21 的那笔转账成功记录,但是日期不对,显示的是今年 1.18 号,并且余额也变成正确的 0.023 了,这时候我再转账到交易所,并且用的 bitcoin core 推荐的交易费 0.00000451,就在 20 分钟内就显示收到了 1 个确认,应该还是您说的这个软件有些问题,之前因为怕余额丢了,所以一直不敢把所有区块和软件都删了从新下载,这余额弄出来了,就可以完全从新下载一下了,再次感谢表哥的热心指导
    acess
        13
    acess  
       2023-01-27 11:41:03 +08:00
    @um6uih 我猜,说不定 2021.10.21 的那笔当时就没能进链确认,本来就在今年 1.18 号才进链确认的?
    um6uih
        14
    um6uih  
    OP
       2023-01-27 13:03:42 +08:00
    @acess 那应该不会吧,我交易所在 2021.10.21 就收到转账了啊,并且几个 btc 浏览器的查询都是 10.21,就我本地的钱包才显示这个时间,昨天转账成功后就把我电脑里的软件和块都删了,准备再从新下载一次看看
    acess
        15
    acess  
       2023-01-27 22:17:08 +08:00
    @um6uih 区块应该不用删,可以新建一个钱包重新扫描对应范围的区块试试。
    um6uih
        16
    um6uih  
    OP
       2023-01-30 22:40:47 +08:00
    @acess 那天就已经删除啦,从新下载吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.