【问题标题】:Hypelerdger Indy Node - Seed valueHypelerdger Indy Node - 种子价值
【发布时间】:2019-11-28 12:42:14
【问题描述】:

我正在使用 indy-sdk 并在步骤 3 (https://github.com/hyperledger/indy-sdk/blob/master/docs/getting-started/indy-walkthrough.md#step-3-getting-the-ownership-for-stewards-verinym) 的演练演示中,Steward 集的种子值等于“000000000000000000000000Steward1”。

如果我更改它(或将其留空),我会收到错误消息。此外,在 /tmp/indy/poo1.txn 中没有关于此特定值的信息。

我的问题是我们如何知道这是正确的值以及我们如何获得它?

【问题讨论】:

    标签: blockchain hyperledger hyperledger-indy


    【解决方案1】:

    为什么它不起作用

    000000000000000000000000Steward1 是种子,它(给定默认密钥派生方法)生成 DID Th7MpTaRZVRYnPiabds81Y。您可以使用indy-cli (command line tool) 验证自己

    indy> wallet create test key=123
    Wallet "test" has been created
    
    indy> wallet open test key=123
    Wallet "test" has been opened
    
    wallet(test):indy> did new seed=000000000000000000000000Steward1
    Did "Th7MpTaRZVRYnPiabds81Y" has been created with "~7TYfekw4GUagBnBVCqPjiC" verkey
    

    在您使用的网络中,DID VsKV7grR1BUE29mG2Fm2kX 的所有者(即知道其相关私钥或种子的人)拥有steward 角色,该角色授予对账本执行各种操作的权限。因此,如果您修改种子,它将生成不同的 DID,这些 DID 不需要执行教程中进一步使用的操作(例如在分类帐上写入数据)。

    000000000000000000000000Steward1 来自哪里

    根据您的说法,我认为您正在使用来自 indy-sdk 存储库的预构建 docker 映像,其中包含 indy-node 实例的运行池,遵循其中一些 instructions. 所以简单的答案是000000000000000000000000Steward1 的配置是预先烘焙的。查看用于构建 indy-pool 映像的 dockerfile。注意这些行

    RUN awk '{if (index($1, "NETWORK_NAME") != 0) {print("NETWORK_NAME = \"sandbox\"")} else print($0)}' /etc/indy/indy_config.py> /tmp/indy_config.py
    RUN mv /tmp/indy_config.py /etc/indy/indy_config.py
    

    让我们看看这些文件中有什么

    docker exec indylocalhost cat '/etc/indy/indy_config.py'
    # Current network
    
    # Disable stdout logging
    enableStdOutLogging = False
    
    # Directory to store ledger.
    LEDGER_DIR = '/var/lib/indy'
    
    # Directory to store logs.
    LOG_DIR = '/var/log/indy'
    
    # Directory to store keys.
    KEYS_DIR = '/var/lib/indy'
    
    # Directory to store genesis transactions files.
    GENESIS_DIR = '/var/lib/indy'
    
    # Directory to store backups.
    BACKUP_DIR = '/var/lib/indy/backup'
    
    # Directory to store plugins.
    PLUGINS_DIR = '/var/lib/indy/plugins'
    
    # Directory to store node info.
    NODE_INFO_DIR = '/var/lib/indy'
    NETWORK_NAME = 'sandbox'%                                      
    

    这个

    # Directory to store genesis transactions files.
    GENESIS_DIR = '/var/lib/indy'
    

    看起来像我们正在寻找的东西。让我们看看那里有什么

    docker exec indylocalhost ls '/var/lib/indy/sandbox'
    data
    domain_transactions_genesis
    keys
    node1_additional_info.json
    node1_info.json
    node1_version_info.json
    node2_additional_info.json
    node2_info.json
    node2_version_info.json
    node3_additional_info.json
    node3_info.json
    node3_version_info.json
    node4_additional_info.json
    node4_info.json
    node4_version_info.json
    pool_transactions_genesis
    

    在区块链中,创世文件通常是您最初用来启动网络的文件,并且可能会在网络中填充一些数据。在 hyperledger-indy 的情况下,有 4 个“子账本”包含不同类型的交易:domain、pool、config、audit。 domain 子账本包含诸如 DIDs、凭证模式或凭证定义之类的内容。我们正在寻找一个 DID,所以让我们看一下文件域 genesis 文件。

    docker exec indylocalhost cat '/var/lib/indy/sandbox/domain_transactions_genesis'
    {"reqSignature":{},"txn":{"data":{"dest":"V4SGRU86Z58d6TV7PBUe6f","role":"0","verkey":"~CoRER63DVYnWZtK8uAzNbx"},"metadata":{},"type":"1"},"txnMetadata":{"seqNo":1},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"Th7MpTaRZVRYnPiabds81Y","role":"2","verkey":"~7TYfekw4GUagBnBVCqPjiC"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":2},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"EbP4aYNeTHL6q385GuVpRV","role":"2","verkey":"~RHGNtfvkgPEUQzQNtNxLNu"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":3},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"4cU41vWW82ArfxJxHkzXPG","role":"2","verkey":"~EMoPA6HrpiExVihsVfxD3H"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":4},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"TWwCRQRZ2ZHMJFn9TzLp7W","role":"2","verkey":"~UhP7K35SAXbix1kCQV4Upx"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":5},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"7JhapNNMLnwkbiC2ZmPZSE","verkey":"~LgpYPrzkB6awcHMTPZ9TVn"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":6},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"MEPecrczs4Wh6FA12u519D","verkey":"~A4rMgHYboWYS1DXibCgo9W"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":7},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"EAPtwgevBpzP8hkj9sxuzy","verkey":"~gmzSzu3feXC6g2djF7ar4"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":8},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"LuL1HK1sDruwkfm68jrVfD","verkey":"~Nyv9BKUJuvjgMbfbwk8CFD"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":9},"ver":"1"}
    {"reqSignature":{},"txn":{"data":{"dest":"462p8mtcX6jpa9ky565YEL","verkey":"~LCgq4hnSvMvB8nKd9vgsTD"},"metadata":{"from":"V4SGRU86Z58d6TV7PBUe6f"},"type":"1"},"txnMetadata":{"seqNo":10},"ver":"1"}
    

    您可以看到 DID Th7MpTaRZVRYnPiabds81Y 使用 verkey ~7TYfekw4GUagBnBVCqPjiC 在此分类帐上硬编码,这与我们从种子 000000000000000000000000Steward1 生成的内容相匹配。您还可以看到它被赋予角色"2"。如果你深入挖掘,你可以在indy-plenum 中找到共识算法。 indy 使用的项目,角色 ID 2 是 steward role。

    【讨论】:

    • 非常感谢您的出色回答。
    • 您好 Patrik,我们创建了 4 个节点和 5 个客户端。 5个客户是谁?关于“ {"reqSignature":{},"txn":{"data":{"dest":"V4SGRU86Z58d6TV7PBUe6f","role":"0","verkey":"~CoRER63DVYnWZtK8uAzNbx" 的第 5 个节点 tx 是什么},"metadata":{},"type":"1"},"txnMetadata":{"seqNo":1},"ver":"1"} " ?
    • @Polem 这定义了在账本上创建的第一个 DID。您可以注意到所有后续交易都有“来自:V4SGRU86Z58d6TV7PBUe6f”,因此 V4SGRU86Z58d6TV7PBUe6f 是这些后续交易的作者。您还可以在您指出的事务中指出 V4SGRU86Z58d6TV7PBUe6f DID 被分配了 ROLE 0 这是受托人。如果我没记错的话,生成 DID V4SGRU86Z58d6TV7PBUe6f 的种子是 000000000000000000000000Trustee1
    • 感谢您的回答!是的,你是对的,但那是谁的身份?例如,根据我的研究,我假设 DID Th7MpTaRZVRYnPiabds81Y 是 Node1 的管理员,这导致了另一个问题。每个节点都有管家/观察者角色吗?
    • 嗯,这些是 docker 中印地池的创世交易。它应该仅用于开发。所以它是一种具有高特权角色的“管理员”DID。 Afaik 如果要运行参与共识的节点,则需要拥有具有 Steward 角色的 DID。更多信息在这里ldapwiki.com/wiki/Indy%20Steward。我不确定,但我认为观察者节点/角色也是如此。
    【解决方案2】:

    种子是一个秘密值,当我们生成 Indy 网络的创世交易时,我们使用来自该秘密种子值的公共信息/密钥。

    要知道写入种子值,使用参与者生成的密钥创建自定义网络并生成 pool_transactions_genesis 和 domain_transactions_genesis 文件,您必须使用 indy-plenum。

    您可以在以下教程中找到详细信息:

    https://taseen-junaid.medium.com/hyperledger-indy-custom-network-with-indy-node-plenum-protocol-ledger-85fd10eb5bf5

    您可以在以下链接中找到该教程的代码库:

    https://github.com/Ta-SeenJunaid/Hyperledger-Indy-Tutorial

    【讨论】:

      猜你喜欢
      • 2021-07-31
      • 1970-01-01
      • 2012-04-19
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      相关资源
      最近更新 更多