cosmos运行自己的链(二)运行自己的节点和API、CLI介绍

运行一个节点

Cosmos SDK存储库包含一个名为SIMAPP的文件夹。在此文件夹中,您可以找到可以运行cosmos SDK的模拟版本的代码,因此您可以在不与链条进行实际交互的情况下测试命令。二进制称为SIMD,您将使用它与节点进行交互。

首先,将目录创建并更改为cosmos文件夹,然后克隆cosmos-sdk存储库中:

mkdir cosmos
cd cosmos
git clone https://github.com/cosmos/cosmos-sdk
cd cosmos-sdk

确保你与作者使用的相同的版本:

git checkout v0.45.4

现在构建Cosmos-SDK。如果您使用Docker,则在现成的多阶段创建(打开新窗口)的帮助下,您可以创建一个新的Docker映像,其中包含编译的SIMD:

 docker build . -t simd:v0.45.4

Confirm that you got what you expected:

docker run --rm -it simd:v0.45.4 simd version
他将会返回
0.45.4

初始化simapp:

运行这个步骤对数据库进行初始化

rm -rf ./private/.simapp

接下来初始化应用程序,我们用learning-chain-1,ID为-1的链来初始化,你可以选择用其他数字,但是我推荐用-1。将一个数字(如 -1)附加到更有意义的链ID(如 learning-chain)的末尾是一个良好的实践。当你对链进行硬分叉时,可以递增这个数字。

  • 例如,如果你的链ID是 learning-chain,那么可以使用 learning-chain-1 作为初始链ID。
  • 如果你需要进行硬分叉,你可以将链ID改为 learning-chain-2
  • 这样做可以让你清楚地知道当前链是第几次硬分叉后的版本,有助于维护和管理不同版本的区块链。
linux:docker run --rm -it \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd init demo \
    --chain-id learning-chain-1
powershall:
  docker run --rm -it `
    -v ${PWD}/private:/root `
    simd:v0.45.4 `
    simd init demo `
    --chain-id learning-chain-1

它会返回这个

{"app_message":{"auth":{"accounts":[],"params":{"max_memo_characters":"256","sig_verify_cost_ed25519":"590","sig_verify_cost_secp256k1":"1000","tx_sig_limit":"7","tx_size_cost_per_byte":"10"}},"authz":{"authorization":[]},"bank":{"balances":[],"denom_metadata":[],"params":{"default_send_enabled":true,"send_enabled":[]},"supply":[]},"capability":{"index":"1","owners":[]},"crisis":{"constant_fee":{"amount":"1000","denom":"stake"}},"distribution":{"delegator_starting_infos":[],"delegator_withdraw_infos":[],"fee_pool":{"community_pool":[]},"outstanding_rewards":[],"params":{"base_proposer_reward":"0.010000000000000000","bonus_proposer_reward":"0.040000000000000000","community_tax":"0.020000000000000000","withdraw_addr_enabled":true},"previous_proposer":"","validator_accumulated_commissions":[],"validator_current_rewards":[],"validator_historical_rewards":[],"validator_slash_events":[]},"evidence":{"evidence":[]},"feegrant":{"allowances":[]},"genutil":{"gen_txs":[]},"gov":{"deposit_params":{"max_deposit_period":"172800s","min_deposit":[{"amount":"10000000","denom":"stake"}]},"deposits":[],"proposals":[],"starting_proposal_id":"1","tally_params":{"quorum":"0.334000000000000000","threshold":"0.500000000000000000","veto_threshold":"0.334000000000000000"},"votes":[],"voting_params":{"voting_period":"172800s"}},"mint":{"minter":{"annual_provisions":"0.000000000000000000","inflation":"0.130000000000000000"},"params":{"blocks_per_year":"6311520","goal_bonded":"0.670000000000000000","inflation_max":"0.200000000000000000","inflation_min":"0.070000000000000000","inflation_rate_change":"0.130000000000000000","mint_denom":"stake"}},"params":null,"slashing":{"missed_blocks":[],"params":{"downtime_jail_duration":"600s","min_signed_per_window":"0.500000000000000000","signed_blocks_window":"100","slash_fraction_double_sign":"0.050000000000000000","slash_fraction_downtime":"0.010000000000000000"},"signing_infos":[]},"staking":{"delegations":[],"exported":false,"last_total_power":"0","last_validator_powers":[],"params":{"bond_denom":"stake","historical_entries":10000,"max_entries":7,"max_validators":100,"unbonding_time":"1814400s"},"redelegations":[],"unbonding_delegations":[],"validators":[]},"upgrade":{},"vesting":{}},"chain_id":"learning-chain-1","gentxs_dir":"","moniker":"demo","node_id":"4f9021a015e696912f452532d53ac849d71cb750"}

您可以使用以下方式检查初始配置

cat ./private/.simapp/config/genesis.json

准备您的帐户

您也可以检查钥匙。这些位于后端钥匙扣之一中,默认情况下是操作系统或测试的键。也将它们插入它们,并确保一致性,您将使用测试后端,并将其保存在./private/.simapp中:

docker run --rm -it \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd keys list \
    --keyring-backend test
Powershall:
docker run --rm -it `
    -v ${PWD}/private:/root `
    simd:v0.45.4 `
    simd keys list `
    --keyring-backend test

目前你还没有任何钥匙

所以它会返回:[]

接下来我们添加钥匙:

docker run --rm -it \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd keys add alice \
    --keyring-backend test

powershell:
docker run --rm -it `
    -v ${PWD}/private:/root `
    simd:v0.45.4 `
    simd keys add alice `
    --keyring-backend test

它不要求任何密码,并将它们保存在./private/.simapp/keyring-test中。请记住,这些键仅用于测试,因此您不必担心。完成后,这将打印类似于:

- name: alice
  type: local
  address: cosmos1nw793j9xvdzl2uc9ly8fas5tcfwfetercpdfqq
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A6TrsRO/OH91fAEFLohw7RwFB832NRsRWhQvE2t8cfLK"}'
  mnemonic: ""

**Important:** write this mnemonic phrase in a safe place. It is the only way to recover your account if you ever forget your password.

ivory uniform actual spot floor vessel monster rose yellow noise smile odor veteran human reason miss stadium phrase assault puzzle sentence approve coral apology

您可以在上述输出末端看到助记符。这种单词顺序是一个助记符,您可以用来恢复公共和私钥。在生产环境中,助记符必须以可靠和机密的方式存储,作为钥匙管理基础设施的一部分。

可以用以下两种方式来查看key是否被添加成功

docker run --rm -it \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd keys list \
    --keyring-backend test
powershell:
docker run --rm -it `
    -v ${PWD}/private:/root `
    simd:v0.45.4 `
    simd keys list `
    --keyring-backend test
或者:
docker run --rm -it \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd keys show alice \
    --keyring-backend test
powershell:
docker run --rm -it `
    -v ${PWD}/private:/root `
    simd:v0.45.4 `
    simd keys show alice `
    --keyring-backend test

使你自己成为可靠的验证人

Cosmos SDK区块链依赖已识别的验证人来生成区块。在链初始化和未启动时,没有验证人来生成区块。这是一种两难的情况:未初始化和未启动的链需要一个创世账户和一个验证人来启动。

  • 你需要在创世文件中为你的密钥(账户)设定初始余额。为此,你需要知道抵押代币的名称。
  • 使用以下命令查看创世文件中抵押代币的名称
grep bond_denom ./private/.simapp/config/genesis.json
powershell:
Select-String -Path .\private\.simapp\config\genesis.json -Pattern "bond_denom"

将会返回:

"bond_denom": "stake"

知道抵押代币名称后,你可以在创世文件中为Alice账户设置足够的余额,使用以下命令:

docker run --rm -it -v $(pwd)/private:/root simd:v0.45.4 simd add-genesis-account alice 1000000000stake --keyring-backend test

powershell:
docker run --rm -it -v ${PWD}/private:/root simd:v0.45.4 simd add-genesis-account alice 1000000000stake --keyring-backend test

  • 为了使网络能够运行,你必须达到加权验证人的2/3阈值。
  • 因为你将独自运行网络,你可以抵押任意数量(大于或等于minimum enforced,即1000000stake)。
  • 这里建议你为Alice账户抵押70000000stake,即刚创建的账户中的一部分代币。这样可以确保诚实节点有大量的抵押,并留一些代币用于支付Gas费用。

我们创建了创世交易之后,需要将其包含到创世文件中

  • 当你创建了创世交易并将其保存到单独的文件中后,需要使用collect-gentxs命令来收集所有的创世交易并将它们包含到你的创世文件中。
  • 在此示例中,你只有一个创世交易。
docker run --rm -it \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd collect-gentxs

它将会打印出此操作之后的创世文件:

{"app_message":{"auth":{"accounts":[{"@type":"/cosmos.auth.v1beta1.BaseAccount","account_number":"0","address":"cosmos1nw793j9xvdzl2uc9ly8fas5tcfwfetercpdfqq","pub_key":null,"sequence":"0"}],"params":{"max_memo_characters":"256","sig_verify_cost_ed25519":"590","sig_verify_cost_secp256k1":"1000","tx_sig_limit":"7","tx_size_cost_per_byte":"10"}},"authz":{"authorization":[]},"bank":{"balances":[{"address":"cosmos1nw793j9xvdzl2uc9ly8fas5tcfwfetercpdfqq","coins":[{"amount":"100000000","denom":"stake"}]}],"denom_metadata":[],"params":{"default_send_enabled":true,"send_enabled":[]},"supply":[{"amount":"100000000","denom":"stake"}]},"capability":{"index":"1","owners":[]},"crisis":{"constant_fee":{"amount":"1000","denom":"stake"}},"distribution":{"delegator_starting_infos":[],"delegator_withdraw_infos":[],"fee_pool":{"community_pool":[]},"outstanding_rewards":[],"params":{"base_proposer_reward":"0.010000000000000000","bonus_proposer_reward":"0.040000000000000000","community_tax":"0.020000000000000000","withdraw_addr_enabled":true},"previous_proposer":"","validator_accumulated_commissions":[],"validator_current_rewards":[],"validator_historical_rewards":[],"validator_slash_events":[]},"evidence":{"evidence":[]},"feegrant":{"allowances":[]},"genutil":{"gen_txs":[{"auth_info":{"fee":{"amount":[],"gas_limit":"200000","granter":"","payer":""},"signer_infos":[{"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A6TrsRO/OH91fAEFLohw7RwFB832NRsRWhQvE2t8cfLK"},"sequence":"0"}],"tip":null},"body":{"extension_options":[],"memo":"cf6bff39bb84da39d214138ebba8bcba4ccb848d@192.168.1.7:26656","messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","commission":{"max_change_rate":"0.010000000000000000","max_rate":"0.200000000000000000","rate":"0.100000000000000000"},"delegator_address":"cosmos1nw793j9xvdzl2uc9ly8fas5tcfwfetercpdfqq","description":{"details":"","identity":"","moniker":"demo","security_contact":"","website":""},"min_self_delegation":"1","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0wnjKoRtWjv9NOLEPS6UrlwFurQAmsJIXFsmhtbigF8="},"validator_address":"cosmosvaloper1nw793j9xvdzl2uc9ly8fas5tcfwfetera4euvn","value":{"amount":"70000000","denom":"stake"}}],"non_critical_extension_options":[],"timeout_height":"0"},"signatures":["NA23q62Vhfm1z3E1XafPeSDEVDkcPuTWXZmQr9QAZuN5wY2V6UFSRBO0w8Z255OxxZV4j47SJo1HOYWvcH4qvw=="]}]},"gov":{"deposit_params":{"max_deposit_period":"172800s","min_deposit":[{"amount":"10000000","denom":"stake"}]},"deposits":[],"proposals":[],"starting_proposal_id":"1","tally_params":{"quorum":"0.334000000000000000","threshold":"0.500000000000000000","veto_threshold":"0.334000000000000000"},"votes":[],"voting_params":{"voting_period":"172800s"}},"mint":{"minter":{"annual_provisions":"0.000000000000000000","inflation":"0.130000000000000000"},"params":{"blocks_per_year":"6311520","goal_bonded":"0.670000000000000000","inflation_max":"0.200000000000000000","inflation_min":"0.070000000000000000","inflation_rate_change":"0.130000000000000000","mint_denom":"stake"}},"params":null,"slashing":{"missed_blocks":[],"params":{"downtime_jail_duration":"600s","min_signed_per_window":"0.500000000000000000","signed_blocks_window":"100","slash_fraction_double_sign":"0.050000000000000000","slash_fraction_downtime":"0.010000000000000000"},"signing_infos":[]},"staking":{"delegations":[],"exported":false,"last_total_power":"0","last_validator_powers":[],"params":{"bond_denom":"stake","historical_entries":10000,"max_entries":7,"max_validators":100,"unbonding_time":"1814400s"},"redelegations":[],"unbonding_delegations":[],"validators":[]},"upgrade":{},"vesting":{}},"chain_id":"learning-chain-1","gentxs_dir":"/Users/muratoener/.simapp/config/gentx","moniker":"demo","node_id":"cf6bff39bb84da39d214138ebba8bcba4ccb848d"}

如果您很好奇,可以在创世纪中找到更新的gen_txs字段。

创建区块

开始你单一节点的区块链

docker run --rm -it \
    --name simd \
    -v $(pwd)/private:/root \
    simd:v0.45.4 \
    simd start

在同一文件夹中打开一个新终端以检查余额。首先提取爱丽丝的地址值:

export alice=$(docker run --rm \
    -v $(pwd)/private:/root \
    simd:v0.45.4 simd keys show alice --address \
    --keyring-backend test)

powershell:
$alice=$(docker run --rm \
    -v ${PWD}/private:/root \
    simd:v0.45.4 simd keys show alice --address \
    --keyring-backend test)

查看余额
docker exec simd simd query bank balances $alice

发送交易:

练习发送交易。您可以将令牌发送到任何有效的地址。例如,您可以将令牌发送到您不知道的私钥的地址。前往Mintscan:Mintscan,然后从最新的交易之一中选择Cosmos1 ...地址。例如:

export bob=cosmos1ytt4z085fwxwnj0xdckk43ek4c9znuy00cghtq
POWERSHELL:
$bob="cosmos1ytt4z085fwxwnj0xdckk43ek4c9znuy00cghtq"
查看余额
docker exec simd simd query bank balances $bob

该帐户没有余额。确实,尽管您从Cosmos Hub中选择了地址,因此Bob在Cosmos Hub上具有平衡,但在您当地的学习区块链上尚不存在。 您需要发送交易以更改此新帐户的余额:

docker exec -it simd simd tx bank send $alice $bob 10stake \
    --keyring-backend test \
    --chain-id learning-chain-1
    
powershell:

docker exec -it simd simd tx bank send $alice $bob 10stake --keyring-backend test --chain-id learning-chain-1

命令输出可以包括有用的信息,例如gas_used。但是,这里没有时间收集信息,因为在交易中包含在块中之前命令返回。请注意交易哈希。

export txhash=D2CCFD91452F8C144BB1E7B54B9723EE3ED85925EE2C8AD843392721D072B895
powershell:
$txhash="D2CCFD91452F8C144BB1E7B54B9723EE3ED85925EE2C8AD843392721D072B895"
docker exec simd simd query tx $txhash

CLI环境:

基本介绍:到底什么是CLI? - 知乎 (zhihu.com)

检查cosmos-sdk/simapp/simd/main.go文件

其中CMD.NewrootCMD()功能是CLI处理程序。它是通过“ github.com/cosmos/cosmos-sdk/simapp/simd/cmd/cmd”行导入的。可以在Cosmos-SDK/SIMAPP/SIMD/CMD/root.go文件中找到它:

在其中,定义了基本属性,例如应用程序名称:

另外,请查看Simapp/app.go,其中每个模块和密钥守护者将被导入。您将看到的第一件事是大多数Cosmos-SDK应用程序使用的大量模块列表:

/cosmos-sdk/x/文件夹中的模块由工作链堆栈的几个组织维护。要了解一个模块,最好的方法是查看相应的规格文件夹。例如,查看cosmos-sdk/x/bank/spec/spec/01_state.md(打开新窗口)以了解您在本节中使用的银行模块的状态。

概要

总而言之,本节探讨了: 如何通过使用SIMAPP运行和与区块链交互,其中包含运行名为SIMD的cosmos SDK的模拟版本所需的代码,因此您可以在不与链条上实际交互的情况下测试命令。 如何编译和初始化SIMAPP,并检查链的创世纪状态的初始配置。 如何准备您的帐户,包括如何添加,确认和检查密钥以及查看助记符。 如何通过添加和确认Genesis文件中的Bootstrap Transactions来使自己成为适当的验证器。 如何启动单个节点区块链,观察通过终端窗口创建的块,并检查余额。 如何练习将交易发送到另一个帐户并将令牌转移到该帐户,并检查新帐户的余额以确认成功的转移。 通过检查初始GO代码的CLI路由,揭示了您新生链的各个方面。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值