【问题标题】:Extracting Wallet IDs (Public Keys) from Bitcoin Blockchain Data Structures从比特币区块链数据结构中提取钱包 ID(公钥)
【发布时间】:2018-12-29 02:34:21
【问题描述】:

我正在尝试查找与比特币区块的交易输入和输出相关的公钥。

谁能告诉我这些是在哪里编码的?

谢谢。

【问题讨论】:

    标签: blockchain bitcoin blockchain.info-api nbitcoin


    【解决方案1】:

    简单地说,一般情况下你不能。

    根据签名架构,您所能得到的只是该公钥的 hash,或者更糟糕的是,redeem 脚本的 hash .

    更具体地说,在某些情况下,您可以获得 一些 公钥。 这是您可以获得的部分列表:

    1. Pay-to-pubkey-hash 脚本 (P2PKH):您从 scriptSig 获取输入 BTC 地址的公钥
    2. Pay-to-pubkey (P2PK):您从 scriptPubKey 获取用于输出 BTC 地址的公钥
    3. Pay-to-script-hash 脚本 (P2SH):您从输入 BTC 地址的 scriptSig 获取公共 密钥

    还有其他签名方案,在标准交易中,您应该能够获得源公钥目标公钥。

    您可以做的是为整个区块链编制索引,并填补未将 BTC 地址与其公钥一起包含在内的交易中的空白。但是,例如,如果您的 BTC 地址仅出现在 P2PKH 输出中,则您无法找到该公钥。

    【讨论】:

    • 但是如果交易中没有公钥,比特币系统如何追踪账户余额呢?那些允许您通过其公钥查询帐户余额的网站是如何工作的? (我用谷歌搜索了这个:bitref.com)。 TY 为您之前的友好回复和任何进一步的帮助。
    • 比特币作为bitcoind 节点的网络根本不跟踪余额。它所做的只是执行共识规则_。之间没有这样的关联: 1. 账户和公钥 2. 账户和 BTC 地址 3. BTC 地址和余额 您可能在bitcoind 中找到的钱包支持只是跟踪其所有相关地址。它需要特定的索引(例如,如果您从外部导入密钥,则必须重新索引它)。
    • 尝试将比特币视为可以通过执行加密脚本来赎回的输出集合。因此,余额是与特定地址关联的未使用输出的总和。需要说明的是,每个 ECDSA 私钥都有一个对应的公钥。 BTC 地址是该公钥的 散列。因此,如果您正在实施钱包,您可以轻松追踪与该密钥相关联的所有输出,并最终追踪到您的 BTC 地址。
    • 好的。这两个说法是真的吗? 1)“账户”是钱包软件提供的抽象。 2) 比特币地址是公钥的哈希值,因此系统通过在交易提交时使用相应的私钥进行编码,通过对公钥进行反散列来验证转账是否有足够的余额。这是否意味着每个地址(每个散列公钥)只能对应一个公钥?换句话说,我猜这意味着哈希对于每个公钥都是唯一的,对吧?泰
    • 1.正确 2. 更准确地说,bitcoind 验证 共识规则(例如,一个输出不能被花费两次)。钱包通常会创建一笔交易,前提是它有足够的未使用输出来发送指定数量的 BTC。用户通常可以查看总余额,因此他看不到钱包系统在后台做了什么。假设每个公钥只有一个 BTC 地址。这并不适用于所有地址类型,但大多数情况下都是这样。
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2019-12-09
    • 1970-01-01
    • 2019-05-16
    • 2012-01-28
    • 2018-06-15
    相关资源
    最近更新 更多