基于区块链的毕业设计Validator management tools – 验证程序管理工具

本文提供基于区块链的毕业设计国外最新区块链项目源码下载,包括solidity,eth,fabric等blockchain区块链,基于区块链的毕业设计Validator management tools – 验证程序管理工具 是一篇很好的国外资料

Validator management tools

Warning: Use at your own risk, this is all very experimental

Deposits

Optionally install ethereal, to run the exec_deposits.sh step.

Important: when installing, run the commands outside of the root directory of this repository, to not mix up the go modules.

# Install this assignments tool go install .  # Move out of this dir cd ..  # Install ethereal GO111MODULE=on go get github.com/wealdtech/ethereal 

Steps:

  • eth2-val-tools mnemonic, twice: one for validator keys, one for withdrawal keys. Put them in the config.
  • . my_config.sh: central configuration with environment vars, see example_config.sh for an example
  • . build_deposits.sh: uses the mnemonics to generate deposit data for the configured range of accounts. (overwrites any existing deposit data file)
  • . exec_deposits.sh: executes deposit datas, making eth1 transactions

For automatic validator assignment, tracking and deployment, use the assign command of the Go module in this repo.

Commands

assign

This keeps track of validator assignments in a json file, protected from concurrent use with a lock file.

You can then make assignments of n validators, generating a wallet to use on the host the validators were assigned to.

The sourced accounts are from a validators-mnemonic and a specified range of accounts.

See example_assign.sh for an example.

Assign `n` available validators to `hostname`. If --add is true, it will add `n` assigned validators, instead of filling up to `n` total assigned to the host  Usage:   eth2-val-tools assign [flags]  Flags:       --add                       If the assignment should add to the existing assignment       --assignments string        Path of the current assignments to adjust (default "assignments.json")       --config-base-path string   Location to use as base in the config file (Teku only) (default "/data")   -n, --count uint                Amount of validators to assign   -h, --help                      help for assign       --hostname string           Unique name of the remote host to assign validators to (default "morty")       --key-man-loc string        Location to write to the 'location' field in the keymanager_opts.json file (Prysm only)       --out-loc string            Path of the output data for the host, where wallets, keys, secrets dir, etc. are written (default "assigned_data")       --source-max uint           Maximum validator index in HD path range (excl.)       --source-min uint           Minimum validator index in HD path range (incl.)       --source-mnemonic string    The validators mnemonic to source account keys from       --wallet-name string        Name of the wallet, to tag accounts with in the assignments file (default "unknown imported wallet") 

mnemonic

Outputs a bare 256 bit entropy BIP39 mnemonic, or stops with exit code 1.

Create a random mnemonic  Usage:   eth2-val-tools mnemonic [flags]  Flags:   -h, --help   help for mnemonic 

deposit-data

To quickly generate a list of deposit datas for a range of accounts.

Create deposit data for the given range of validators. 1 json-encoded deposit data per line.  Usage:   eth2-val-tools deposit-data [flags]  Flags:       --amount uint                   Amount to deposit, in Gwei (default 32000000000)       --fork-version string           Fork version, e.g. 0x11223344   -h, --help                          help for deposit-data       --source-max uint               Maximum validator index in HD path range (excl.)       --source-min uint               Minimum validator index in HD path range (incl.)       --validators-mnemonic string    Mnemonic to use for validators.       --withdrawals-mnemonic string   Mnemonic to use for withdrawals. Withdrawal accounts are assumed to have matching paths with validators. 

Output

Eth2 clients structure their validators differently, but this tool outputs all the required data for each of them.

Prysm

Prysm is a special case, they are centric around the Ethdo wallet system. Instead of using the EIP 2335 key files directly, like all the other clients.

In the output directory, a prysm dir is placed, with the following contents:

  • keymanager_opts.json: JSON file describing accounts and their passphrases. And the “Location” part can be configured with --key-man-loc, which will point to some “wallets” directory: where the actual wallets can be found.
    • Prysm requires Account names listed in the JSON to be prefixied with the wallet name, separated by a /. Like Assigned/foobarvalidator.
    • Ethdo wallets are in the same big store, and only one directory in this store per wallet. The directory must be named as UUID, and in the directory there must be a file with the same UUID name to describe the wallet.
    • Ethdo key files in the wallet must also be named as a UUID, so that they can be parsed in the .Accounts() call
  • wallets: a directory which is an Ethdo store with a single non-deterministic wallet in it, covering all keys.
    • The wallet name is called Assigned, and the keys are Assigned/val_<pubkey here> (excluding < and >) The pubkey is hex encoded, without 0x.
    • The wallet also contains an index file and all other ethdo-specific things

Lighthouse

Lighthouse is key-centric, no wallets involved. Following EIP 2335.

The output is:

  • secrets directory, containing one file per validator. Named after the pubkey (hex-encoded, 0x prefix). Each file contains the passphrase for the voting-keystore.json of the validator.
  • keys directory (equivalent of .lighthouse/validators, containing one directory per validator. Named after the pubkey (hex-encoded, 0x prefix). Each directory contains a voting-keystore.json, an EIP 2335 keystore file, with path field set to empty string. The voting-keystore.json name is a requirement of Lighthouse.

Nimbus

Nimbus, a lot like lighthouse, expects a keys and secrets directory, which can be configured. Each keystore is named keystore.json instead of voting-keystore.json however. For ease of use, an additional nimbus-keys directory will be output, with this naming scheme.

Teku

Like Lighthouse, Teku is also key-centric, but requires you to be explicit about finding keys. I.e. you need the CLI options:

--encrypted-keystore-validator-file=foobar/key.json --encrypted-keystore-validator-password-file=secrets/foobar 

This matches lighthouse close enough, but is clumsy. To make this easier, a teku configuration file is output, with the validator mappings configured for you.

Lodestar

Lodestar is very similar to Lighthouse/Nimbus, but has 3 directories:

  --keystoresDir="{{keystores_relative_dir}}"   --secretsDir="{{secrets_relative_dir}}"   --validatorsDbDir="{{validators_db_relative_dir}}" 

These directories are relative to the --rootDir directory. The keystores dir has pubkey-named directories, each with a voting-keystore.json. The secrets dir has pubkey-named files containing passwords, but the pubkey in the names are encoded without the 0x prefix. The validators-DB dir is unimportant, and can be left empty. This is managed by lodestar.

License

MIT, see LICENSE file.


验证者管理工具管理工具

警告:请自行承担风险,这一切都是非常实验性的

存款

可选地安装ethereal,以运行exec_存款.sh步骤。

重要提示:安装时,请在该存储库的根目录之外运行命令,以免混淆go模块。

# Install this assignments tool go install .  # Move out of this dir cd ..  # Install ethereal GO111MODULE=on go get github.com/wealdtech/ethereal 

步骤:

  • 。我的_配置.sh:带有环境变量的中央配置,请参阅示例_配置.sh例如
  • 。建造_存款.sh配置为生成助记符数据的存款范围使用。(覆盖任何现有存款数据文件)
  • 。执行官_存款.sh:执行存款数据,进行eth1事务
  • keymanager_opts.json文件:描述帐户及其密码的JSON文件。“位置”部分可以配置–keymanloc,它将指向一些“钱包”目录:在那里可以找到实际的钱包。Prysm要求JSON中列出的帐户名必须以wallet名称作为前缀,以/分隔。比如分配的/foobarvalidator。Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。钱包中的Ethdo密钥文件也必须命名为UUID,以便在.Accounts()调用中解析这些文件

对于自动验证器分配、跟踪和部署,请使用此repo中Go模块的assign命令。

命令命令

命令

这样可以跟踪json文件中的验证器分配,防止与锁文件并发使用。

然后您可以分配n个验证器,生成一个钱包,在验证器分配到的主机上使用。

源帐户来自验证器助记符和指定范围的帐户。

参见示例_赋值.sh举个例子。

Assign `n` available validators to `hostname`. If --add is true, it will add `n` assigned validators, instead of filling up to `n` total assigned to the host  Usage:   eth2-val-tools assign [flags]  Flags:       --add                       If the assignment should add to the existing assignment       --assignments string        Path of the current assignments to adjust (default "assignments.json")       --config-base-path string   Location to use as base in the config file (Teku only) (default "/data")   -n, --count uint                Amount of validators to assign   -h, --help                      help for assign       --hostname string           Unique name of the remote host to assign validators to (default "morty")       --key-man-loc string        Location to write to the 'location' field in the keymanager_opts.json file (Prysm only)       --out-loc string            Path of the output data for the host, where wallets, keys, secrets dir, etc. are written (default "assigned_data")       --source-max uint           Maximum validator index in HD path range (excl.)       --source-min uint           Minimum validator index in HD path range (incl.)       --source-mnemonic string    The validators mnemonic to source account keys from       --wallet-name string        Name of the wallet, to tag accounts with in the assignments file (default "unknown imported wallet") 

分配

存款存款存款数据

存款数据

灯塔

灯塔

Lodestar

Lodestar

许可证许可证<

  • 。我的_配置.sh:带有环境变量的中央配置,请参阅示例_配置.sh例如
  • 。建造_存款.sh配置为生成助记符数据的存款范围使用。(覆盖任何现有存款数据文件)
  • 。执行官_存款.sh:执行存款数据,进行eth1事务
  • keymanager_opts.json文件:描述帐户及其密码的JSON文件。“位置”部分可以配置–keymanloc,它将指向一些“钱包”目录:在那里可以找到实际的钱包。Prysm要求JSON中列出的帐户名必须以wallet名称作为前缀,以/分隔。比如分配的/foobarvalidator。Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。钱包中的Ethdo密钥文件也必须命名为UUID,以便在.Accounts()调用中解析这些文件
  • Prysm要求在JSON中列出的帐户名前面加上钱包名称,并用/分隔。比如分配的/foobarvalidator。
  • Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。
  • 电子钱包中的Ethdo密钥文件也必须命名为UUID,以便可以在.Accounts()调用中对其进行解析。
  • wallets是一个包含单个非确定性钱包的Ethdo存储目录,包含所有密钥。钱包名称被称为Assigned,密钥被分配/val&lt;pubkey here&gt;(不包括&lt;和gt;)pubkey是十六进制编码的,没有0x。钱包还包含一个索引文件和所有其他特定于ethdo的东西
  • 钱包名称被称为Assigned,密钥被分配/valpubkey here&gt;(不包括&lt;并且&gt;)pubkey是十六进制编码的,没有0x。
  • 钱包还包含一个索引文件和所有其他ethdo特定的东西
  • 秘密目录,每个验证器包含一个文件。以pubkey(十六进制编码,0x前缀)命名。每个文件都包含投票的密码短语-密钥库.json验证程序的。
  • keys目录(相当于.lighthouse/validators,每个验证器包含一个目录。以pubkey(十六进制编码,0x前缀)命名。每个目录包含一个投票-密钥库.json,一个EIP 2335密钥库文件,路径字段设置为空字符串。投票-密钥库.json名字是灯塔的要求。在
  • 输出一个256位熵BIP39助记符,或以退出代码1停止。

    Create a random mnemonic  Usage:   eth2-val-tools mnemonic [flags]  Flags:   -h, --help   help for mnemonic 

    分配

    快速生成一系列帐户的存款数据。

    Create deposit data for the given range of validators. 1 json-encoded deposit data per line.  Usage:   eth2-val-tools deposit-data [flags]  Flags:       --amount uint                   Amount to deposit, in Gwei (default 32000000000)       --fork-version string           Fork version, e.g. 0x11223344   -h, --help                          help for deposit-data       --source-max uint               Maximum validator index in HD path range (excl.)       --source-min uint               Minimum validator index in HD path range (incl.)       --validators-mnemonic string    Mnemonic to use for validators.       --withdrawals-mnemonic string   Mnemonic to use for withdrawals. Withdrawal accounts are assumed to have matching paths with validators. 

    存款存款存款数据

    存款数据

    灯塔

    灯塔

    Lodestar

    Lodestar

    许可证许可证<

  • 。我的_配置.sh:带有环境变量的中央配置,请参阅示例_配置.sh例如
  • 。建造_存款.sh配置为生成助记符数据的存款范围使用。(覆盖任何现有存款数据文件)
  • 。执行官_存款.sh:执行存款数据,进行eth1事务
  • keymanager_opts.json文件:描述帐户及其密码的JSON文件。“位置”部分可以配置–keymanloc,它将指向一些“钱包”目录:在那里可以找到实际的钱包。Prysm要求JSON中列出的帐户名必须以wallet名称作为前缀,以/分隔。比如分配的/foobarvalidator。Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。钱包中的Ethdo密钥文件也必须命名为UUID,以便在.Accounts()调用中解析这些文件
  • Prysm要求在JSON中列出的帐户名前面加上钱包名称,并用/分隔。比如分配的/foobarvalidator。
  • Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。
  • 电子钱包中的Ethdo密钥文件也必须命名为UUID,以便可以在.Accounts()调用中对其进行解析。
  • wallets是一个包含单个非确定性钱包的Ethdo存储目录,包含所有密钥。钱包名称被称为Assigned,密钥被分配/val&lt;pubkey here&gt;(不包括&lt;和gt;)pubkey是十六进制编码的,没有0x。钱包还包含一个索引文件和所有其他特定于ethdo的东西
  • 钱包名称被称为Assigned,密钥被分配/valpubkey here&gt;(不包括&lt;并且&gt;)pubkey是十六进制编码的,没有0x。
  • 钱包还包含一个索引文件和所有其他ethdo特定的东西
  • 秘密目录,每个验证器包含一个文件。以pubkey(十六进制编码,0x前缀)命名。每个文件都包含投票的密码短语-密钥库.json验证程序的。
  • keys目录(相当于.lighthouse/validators,每个验证器包含一个目录。以pubkey(十六进制编码,0x前缀)命名。每个目录包含一个投票-密钥库.json,一个EIP 2335密钥库文件,路径字段设置为空字符串。投票-密钥库.json名字是灯塔的要求。在
  • Eth2客户机的验证器结构不同,但是这个工具为每个客户机输出所有必需的数据。

    存款存款存款数据

    Prysm是一个特例,他们以Ethdo钱包系统为中心。而不是像其他客户机那样直接使用EIP 2335密钥文件。

    在输出目录中,放置一个prysm dir,其内容如下:

    • Prysm要求在JSON中列出的帐户名前面加上钱包名称,并用/分隔。比如分配的/foobarvalidator。
    • 钱包名称被称为Assigned,密钥被分配/valpubkey here&gt;(不包括&lt;并且&gt;)pubkey是十六进制编码的,没有0x。

    存款数据

    灯塔是以密钥为中心的,不涉及钱包。遵循EIP 2335。

    输出是:

    • keys目录(相当于.lighthouse/validators,每个验证器包含一个目录。以pubkey(十六进制编码,0x前缀)命名。每个目录包含一个投票-密钥库.json,一个EIP 2335密钥库文件,路径字段设置为空字符串。投票-密钥库.json名字是灯塔的要求。在
    • keys directory (equivalent of .lighthouse/validators, containing one directory per validator. Named after the pubkey (hex-encoded, 0x prefix). Each directory contains a voting-keystore.json, an EIP 2335 keystore file, with path field set to empty string. The voting-keystore.json name is a requirement of Lighthouse.

    灯塔

    灯塔

    Lodestar

    Lodestar

    许可证许可证<

  • 。我的_配置.sh:带有环境变量的中央配置,请参阅示例_配置.sh例如
  • 。建造_存款.sh配置为生成助记符数据的存款范围使用。(覆盖任何现有存款数据文件)
  • 。执行官_存款.sh:执行存款数据,进行eth1事务
  • keymanager_opts.json文件:描述帐户及其密码的JSON文件。“位置”部分可以配置–keymanloc,它将指向一些“钱包”目录:在那里可以找到实际的钱包。Prysm要求JSON中列出的帐户名必须以wallet名称作为前缀,以/分隔。比如分配的/foobarvalidator。Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。钱包中的Ethdo密钥文件也必须命名为UUID,以便在.Accounts()调用中解析这些文件
  • Prysm要求在JSON中列出的帐户名前面加上钱包名称,并用/分隔。比如分配的/foobarvalidator。
  • Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。
  • 电子钱包中的Ethdo密钥文件也必须命名为UUID,以便可以在.Accounts()调用中对其进行解析。
  • wallets是一个包含单个非确定性钱包的Ethdo存储目录,包含所有密钥。钱包名称被称为Assigned,密钥被分配/val&lt;pubkey here&gt;(不包括&lt;和gt;)pubkey是十六进制编码的,没有0x。钱包还包含一个索引文件和所有其他特定于ethdo的东西
  • 钱包名称被称为Assigned,密钥被分配/valpubkey here&gt;(不包括&lt;并且&gt;)pubkey是十六进制编码的,没有0x。
  • 钱包还包含一个索引文件和所有其他ethdo特定的东西
  • 秘密目录,每个验证器包含一个文件。以pubkey(十六进制编码,0x前缀)命名。每个文件都包含投票的密码短语-密钥库.json验证程序的。
  • keys目录(相当于.lighthouse/validators,每个验证器包含一个目录。以pubkey(十六进制编码,0x前缀)命名。每个目录包含一个投票-密钥库.json,一个EIP 2335密钥库文件,路径字段设置为空字符串。投票-密钥库.json名字是灯塔的要求。在
  • Nimbus,很像lighthouse,需要一个可以配置的密钥和秘密目录。每个密钥库都命名为密钥库.json而不是投票-密钥库.json然而。为了便于使用,将输出一个附加的nimbuskeys目录,并使用这个命名方案。

    灯塔

    和灯塔一样,Teku也是以钥匙为中心的,但需要你明确地找到钥匙。一、 你需要CLI选项:

    --encrypted-keystore-validator-file=foobar/key.json --encrypted-keystore-validator-password-file=secrets/foobar 

    这和灯塔很接近,但很笨拙。为了简化这一点,输出一个teku配置文件,其中为您配置了验证器映射。

    灯塔

    Lodestar与Lighthouse/Nimbus非常相似,但是有3个目录:

      --keystoresDir="{{keystores_relative_dir}}"   --secretsDir="{{secrets_relative_dir}}"   --validatorsDbDir="{{validators_db_relative_dir}}" 

    这些目录是相对于–rootDir目录的。keystores dir有pubkey命名的目录,每个目录都有一个投票-密钥库.json. secrets dir有包含密码的pubkey命名文件,但是名称中的pubkey编码时没有0x前缀。validators DB dir不重要,可以留空。这是由lodestar管理的。

    Lodestar

    Lodestar

    许可证许可证<

  • 。我的_配置.sh:带有环境变量的中央配置,请参阅示例_配置.sh例如
  • 。建造_存款.sh配置为生成助记符数据的存款范围使用。(覆盖任何现有存款数据文件)
  • 。执行官_存款.sh:执行存款数据,进行eth1事务
  • keymanager_opts.json文件:描述帐户及其密码的JSON文件。“位置”部分可以配置–keymanloc,它将指向一些“钱包”目录:在那里可以找到实际的钱包。Prysm要求JSON中列出的帐户名必须以wallet名称作为前缀,以/分隔。比如分配的/foobarvalidator。Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。钱包中的Ethdo密钥文件也必须命名为UUID,以便在.Accounts()调用中解析这些文件
  • Prysm要求在JSON中列出的帐户名前面加上钱包名称,并用/分隔。比如分配的/foobarvalidator。
  • Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。
  • 电子钱包中的Ethdo密钥文件也必须命名为UUID,以便可以在.Accounts()调用中对其进行解析。
  • wallets是一个包含单个非确定性钱包的Ethdo存储目录,包含所有密钥。钱包名称被称为Assigned,密钥被分配/val&lt;pubkey here&gt;(不包括&lt;和gt;)pubkey是十六进制编码的,没有0x。钱包还包含一个索引文件和所有其他特定于ethdo的东西
  • 钱包名称被称为Assigned,密钥被分配/valpubkey here&gt;(不包括&lt;并且&gt;)pubkey是十六进制编码的,没有0x。
  • 钱包还包含一个索引文件和所有其他ethdo特定的东西
  • 秘密目录,每个验证器包含一个文件。以pubkey(十六进制编码,0x前缀)命名。每个文件都包含投票的密码短语-密钥库.json验证程序的。
  • keys目录(相当于.lighthouse/validators,每个验证器包含一个目录。以pubkey(十六进制编码,0x前缀)命名。每个目录包含一个投票-密钥库.json,一个EIP 2335密钥库文件,路径字段设置为空字符串。投票-密钥库.json名字是灯塔的要求。在
  • MIT,请参阅许可证文件。

    验证者管理工具管理工具

    存款

    命令命令

    命令

    分配

    存款存款存款数据

    存款数据

    灯塔

    灯塔

    Lodestar

    Lodestar

    许可证许可证<

  • 。我的_配置.sh:带有环境变量的中央配置,请参阅示例_配置.sh例如
  • 。建造_存款.sh配置为生成助记符数据的存款范围使用。(覆盖任何现有存款数据文件)
  • 。执行官_存款.sh:执行存款数据,进行eth1事务
  • keymanager_opts.json文件:描述帐户及其密码的JSON文件。“位置”部分可以配置–keymanloc,它将指向一些“钱包”目录:在那里可以找到实际的钱包。Prysm要求JSON中列出的帐户名必须以wallet名称作为前缀,以/分隔。比如分配的/foobarvalidator。Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。钱包中的Ethdo密钥文件也必须命名为UUID,以便在.Accounts()调用中解析这些文件
  • Prysm要求在JSON中列出的帐户名前面加上钱包名称,并用/分隔。比如分配的/foobarvalidator。
  • Ethdo钱包在同一个大商店里,每个钱包只有一个目录。目录必须命名为UUID,并且目录中必须有一个具有相同UUID名称的文件来描述钱包。
  • 电子钱包中的Ethdo密钥文件也必须命名为UUID,以便可以在.Accounts()调用中对其进行解析。
  • wallets是一个包含单个非确定性钱包的Ethdo存储目录,包含所有密钥。钱包名称被称为Assigned,密钥被分配/val&lt;pubkey here&gt;(不包括&lt;和gt;)pubkey是十六进制编码的,没有0x。钱包还包含一个索引文件和所有其他特定于ethdo的东西
  • 钱包名称被称为Assigned,密钥被分配/valpubkey here&gt;(不包括&lt;并且&gt;)pubkey是十六进制编码的,没有0x。
  • 钱包还包含一个索引文件和所有其他ethdo特定的东西
  • 秘密目录,每个验证器包含一个文件。以pubkey(十六进制编码,0x前缀)命名。每个文件都包含投票的密码短语-密钥库.json验证程序的。
  • keys目录(相当于.lighthouse/validators,每个验证器包含一个目录。以pubkey(十六进制编码,0x前缀)命名。每个目录包含一个投票-密钥库.json,一个EIP 2335密钥库文件,路径字段设置为空字符串。投票-密钥库.json名字是灯塔的要求。在
  • 部分转自网络,侵权联系删除区块链源码网

    www.interchains.cc

    https://www.interchains.cc/16470.html

    区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 !
    区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 基于区块链的毕业设计Validator management tools – 验证程序管理工具

    提供最优质的资源集合

    立即查看 了解详情