Cosmos開發(三)通過Gaia 客戶端完成一筆交易去了解gaia網絡的功能。

今天,我們學習一下gaia客戶端gaiacli,gaiacli是一種客戶端工具,是讓你與cosmos Hub網絡進行交互的。類似以太坊geth客戶端,EOS網絡中cleos客戶端。

參考地址:https://github.com/cosmos/gaia/blob/master/docs/gaiacli.md

1、設置你的客戶端 gaiacli

gaiacli config < flag >  < value >

它允許您爲每個給定標誌設置默認值。
首先,設置要連接的全節點的地址:

gaiacli config node < host >:< port # example:gaiacli config node https://77.87.106.33:26657

如果您運行自己的全節點,只需使用tcp://localhost:26657地址即可。
然後,讓我們設置–trust-node標誌的默認值:

gaiacli config trust-node true 

#如果您信任要連接的全節點,則設置爲true,否則設置爲false

最後,讓我們設置chain-id我們想要與之交互的區塊鏈:

gaiacli config chain-id cosmoshub-2

2、Keys
Key Types
使用了三種類型的鍵表示:

  • cosmos
    1. 生成賬戶私鑰,命令如下:gaiacli keys add
    2. 收款:cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292
  • cosmosvaloper
    1. 用於將驗證器與其運算符相關聯;
    2. 用於調用放樣命令;例如 cosmosvaloper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah
  • cosmospub
    1. 用來生成賬戶私鑰 gaiacli keys add
  • cosmosvalconspub
    1. 創建節點時生成 gaiad init
    2. 獲得此值 gaiad tendermint show-validator

3、生成私鑰
您需要一個帳戶私鑰和公鑰對(也稱爲sk, pk分別)用來收款和轉賬。
生成新的私鑰,採用secp256k1的加密方式:

gaiacli keys add < account_name >

接下來,您必須創建一個密碼來保護磁盤上的密鑰。上述命令的輸出將包含種子短語。建議將種子短語保存在安全的地方,以便在忘記密碼的情況下,最終可以使用以下命令從種子短語重新生成密鑰:

gaiacli keys add <keys_name> --recover

如果你檢查你的私鑰,你現在會看到<account_name>:

gaiacli keys show < account_name >

通過以下方式查看驗證人操作員的地址:

gaiacli keys show <account_name> --bech=val

您可以輸入以下內容查看所有可用密鑰:

gaiacli keys list

鍵入以下命令查看節點的驗證器pubkey:

gaiad tendermint show-validator

請注意,這是Tendermint簽名密鑰,而不是您將在委派事務中使用的操作員密鑰。
:::危險警告我們強烈建議不要對多個密鑰使用相同的密碼。Tendermint團隊和Interchain Foundation將不承擔資金損失的責任。:::

4、生成多重簽名(Multisig)公鑰

通過以下命令來生成並打印多重公鑰:

gaiacli keys add --multisig = name1,name2,name3 [...] --multisig-threshold = K new_key_name

K 是必須簽署帶有公鑰地址作爲簽名者的事務的最小私鑰數。

該–multisig標誌必須包含公鑰的名稱,這些公鑰將組合成一個公鑰,該公鑰將new_key_name在本地數據庫中生成和存儲。提供的所有名稱–multisig必須已存在於本地數據庫中。除非–nosort設置了標誌,否則在命令行上提供密鑰的順序無關緊要,即以下命令生成兩個相同的密鑰:

gaiacli keys add --multisig = foo,bar,baz --multisig-threshold = 2 multisig_address 
gaiacli keys add --multisig = baz,foo,bar --multisig-threshold = 2 multisig_address

Multisig地址也可以在運行中生成並通過which命令打印:

gaiacli keys show --multisig-threshold K name1 name2 name3 [...]

有關如何使用多簽名帳戶生成,簽名和廣播事務的詳細信息,請參閱Multisig事務。

5、Tx Broadcasting 交易廣播
廣播交易時,gaiacli接受一個–broadcast-mode標誌。此標誌的值可以是sync(default),async或者block,其中sync使客戶端返回CheckTx響應,async使客戶端立即返回,block並使客戶端等待tx被提交(或超時)。

值得注意的是,這是很重要的block模式應該不會在大多數情況下使用。這是因爲廣播可以超時但是tx仍然可以包括在塊中。這可能導致許多不良情況。因此,最好使用sync或async通過tx hash查詢以確定tx何時包含在塊中。
6、Fees & Gas
每筆交易需要提供一些交易費用或者gas,不是說,兩個都必須要。
驗證器的具有最小氣體價格(多DENOM)構型並且它們使用確定何時當該值,如果它們應包括過程中以塊中的事務CheckTx,其中gasPrices >= minGasPrices。請注意,您的交易必須提供大於或等於驗證者要求的任何面額的費用。

注意:有了這樣的機制,驗證器可能會開始gasPrice在mempool中優先考慮txs ,因此提供更高的費用或汽油價格可能會產生更高的tx優先級。

例如

gaiacli tx發送... --fees = 50000uatom

或者

gaiacli tx發送...  -  gas-prices = 0.025uatom

7、Account
獲取token
獲得令牌的最佳方式來自Cosmos Testnet龍頭。如果水龍頭不適合您,請嘗試詢問#cosmos-validators。水龍頭需要cosmos您希望用於放樣的帳戶。

8、Query Account Balance
收到代幣到您的地址後,您可以輸入以下內容查看帳戶的餘額:

gaiacli query account <account_cosmos>

::: warning注意當您使用零令牌查詢帳戶餘額時,您將收到以下錯誤:No account with address <account_cosmos> was found in the state.如果您在節點與鏈完全同步之前爲帳戶提供資金,也會發生這種情況。這些都很正常。:::

9、Send Tokens 發送交易
以下命令可用於將硬幣從一個帳戶發送到另一個帳戶:

gaiacli tx send <sender_key_name_or_address> <recipient_address> 10faucetToken \
  --chain-id=<chain_id>

我們開始做一筆轉賬交易
查詢發送者賬戶餘額

cuijb@cuijb-VirtualBox:~$ gaiacli q account cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292 --chain-id gaia-13006
|
  address: cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292
  coins:
  - denom: muon
    amount: "9999890"
  pubkey: cosmospub1addwnpepqwcrhu5a7uwj5xf72u24m342nzs232r6szfw8fp8htk6j7vxcpp9van3zpw
  accountnumber: 45197
  sequence: 3

餘額: amount: “9999890”

查詢接收者餘額

cuijb@cuijb-VirtualBox:~$ gaiacli q account cosmos1nrztc90apf8du9xw85dm0hq2mfyx5syqy8elt2 --chain-id gaia-13006
|
  address: cosmos1nrztc90apf8du9xw85dm0hq2mfyx5syqy8elt2
  coins:
  - denom: muon
    amount: "10097612"
  pubkey: cosmospub1addwnpepqdd0y6rq6wl2ynkyl0ccrjq8gd9etmfwshmvtv3l58j3mdknthpl69qjk29
  accountnumber: 44509
  sequence: 1

餘額 :amount: “10097612”
我們從發送者賬戶轉賬100muon到接收者賬戶,然後,再查詢兩個賬戶。

cuijb@cuijb-VirtualBox:~$ gaiacli tx send cjb  cosmos1nrztc90apf8du9xw85dm0hq2mfyx5syqy8elt2  100muon  --chain-id gaia-13006
{"chain_id":"gaia-13006","account_number":"45197","sequence":"3","fee":{"amount":[],"gas":"200000"},"msgs":[{"type":"cosmos-sdk/MsgSend","value":{"from_address":"cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292","to_address":"cosmos1nrztc90apf8du9xw85dm0hq2mfyx5syqy8elt2","amount":[{"denom":"muon","amount":"100"}]}}],"memo":""}

confirm transaction before signing and broadcasting [y/N]: y
Password to sign with 'cjb':
height: 0
txhash: BE8987BB9F5BB2214A43E8B30010BCF5951387226760B70FB6309EA4663EB6B0
code: 0
data: ""
rawlog: '[{"msg_index":0,"success":true,"log":""}]'
logs:
- msgindex: 0
  success: true
  log: ""
info: ""
gaswanted: 0
gasused: 0
events: []
codespace: ""
tx: null
timestamp: ""

查詢發送者賬戶

cuijb@cuijb-VirtualBox:~$ gaiacli q account cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292 --chain-id gaia-13006
|
  address: cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292
  coins:
  - denom: muon
    amount: "9999790"
  pubkey: cosmospub1addwnpepqwcrhu5a7uwj5xf72u24m342nzs232r6szfw8fp8htk6j7vxcpp9van3zpw
  accountnumber: 45197
  sequence: 4

餘額: amount: “9999790” 發送前 餘額:amount: “9999890” 明顯看到,少了100個單位

查詢接受者賬戶

cuijb@cuijb-VirtualBox:~$ gaiacli q account cosmos1nrztc90apf8du9xw85dm0hq2mfyx5syqy8elt2 --chain-id gaia-13006
|
  address: cosmos1nrztc90apf8du9xw85dm0hq2mfyx5syqy8elt2
  coins:
  - denom: muon
    amount: "10097712"
  pubkey: cosmospub1addwnpepqdd0y6rq6wl2ynkyl0ccrjq8gd9etmfwshmvtv3l58j3mdknthpl69qjk29
  accountnumber: 44509
  sequence: 1

餘額: amount: “10097712” 接收前餘額 :amount: “10097612”,明顯看到增加了100個單位。
轉賬成功。
10、您可以通過將–dry-run標誌附加到命令行來模擬事務而不實際廣播它 :

gaiacli tx send < sender_key_name_or_address >  < destination_cosmosaccaddr > 10faucetToken \
  --chain-id = < chain_id > \
  --dry-run

11、此外,您可以通過附加–generate-only到命令行參數列表來構建事務並將其JSON格式打印到STDOUT :

gaiacli tx send < sender_address >  < recipient_address > 10faucetToken \
  --chain-id = < chain_id > \
  --generate-only > unsignedSendTx.json
gaiacli tx sign
  --chain-id = < chain_id > \
  --from = < key_name > \
  unsignedSendTx.json > signedSendTx.json

::: tip注意該–generate-only標誌阻止gaiacli訪問本地密鑰庫。因此,當提供這樣的標誌時<sender_key_name_or_address>必須是地址。:::

12、您可以通過鍵入以下內容來驗證事務的簽名:

gaiacli tx sign --validate-signatureatures signedSendTx.json

13、您可以通過將JSON文件提供給以下命令,將已簽名的事務廣播到節點:

gaiacli tx broadcast --node = < node > signedSendTx.json

14、查詢交易
匹配一組標籤
您可以使用事務搜索命令查詢與tags每個事務上添加的特定集匹配的事務。

每個標籤都由一個鍵值對符合:。還可以組合標籤以使用&符號查詢更具體的結果。

使用a查詢事務的命令tag如下:

gaiacli query txs --tags = ' <tag>:<value> '

並使用多個tags:

gaiacli query txs --tags = ' <tag1>:<value1>&<tag2>:<value2> '

分頁支持,以及通過page和limit:

gaiacli query txs --tags = ' <tag>:<value> ' - page = 1 --limit = 20

您還可以使用以下命令通過其哈希查詢單個事務:

gaiacli query tx [hash]

15、簽名信息
要檢索驗證者的簽名信息:

gaiacli query slashing signing-info <validator-pubkey>

16、查詢參數
您可以通過以下方式獲取當前的削減參數:

gaiacli query slashing params

17、挖礦
您可以通過以下方式查詢挖礦/膨脹參數:

gaiacli query mint params
cuijb@cuijb-VirtualBox:~/gaiadata/test$ gaiacli q mint params
mint_denom: muon
inflation_rate_change: "0.130000000000000000"
inflation_max: "0.200000000000000000"
inflation_min: "0.070000000000000000"
goal_bonded: "0.670000000000000000"
blocks_per_year: 4855015

要查詢當前的通脹值:

gaiacli query mint inflation
cuijb@cuijb-VirtualBox:~/gaiadata/test$ gaiacli query mint inflation
"0.188046665229348070"

要查詢當前的年度撥備值:

gaiacli query mint annual-provisions
cuijb@cuijb-VirtualBox:~$ gaiacli query mint annual-provisions
"2226997224450.737688768336604800"

18、抵押
設定驗證人(生產節點)
查詢驗證人
您可以查詢特定鏈的所有驗證器列表:

gaiacli query staking validators

如果您想獲得單個驗證器的信息,可以查看:

gaiacli query staking validator <account_cosmosval>

具體抵押問題,可以查看我的上面一篇文章《 Cosmos開發(二)Gaia 在測試網中運行一個驗證人》,這裏在再贅述。

19、重新授予令牌
重新授權是一種類型委派,允許您將非流動令牌從一個驗證者綁定到另一個驗證者:

gaiacli tx staking redelegate \
  <src-validator-operator-addr> \
  <dst-validator-operator-addr> \
  10atom \
  --from=<key_name> \
  --chain-id=<chain_id>

在這裏,您還可以使用相應的標誌重新顯示特定shares-amount或a shares-fraction。

當無約束期過去時,重新授權將自動完成。
20、查詢重新授權
開始重新授權後,您可以使用以下命令查看其信息:

gaiacli query staking redelegation <delegator_addr> <src_val_addr> <dst_val_addr>

或者,如果要使用不同的驗證器檢查所有當前的未綁定委託:

gaiacli query staking redelegations-from <account_cosmosval>

21、查詢參數
參數定義放樣的高級設置。您可以使用以下方法獲取當前值:

gaiacli query staking params

22、查詢池
抵押池Pool定義了當前狀態的動態參數。您可以使用以下命令查詢它們:

gaiacli query staking pool

23、查詢委託給驗證者
您還可以查詢特定驗證器的所有委託:

  gaiacli query delegations-to <account_cosmosval>

24、社區治理
治理是Cosmos Hub中的用戶可以通過文本提議就軟件升級,主網絡參數或信令機制達成共識的過程。這是通過對提案進行表決來完成的,提案將由ATOM主網上的持有人提交。
關於投票過程的一些考慮因素:

  • 投票由ATOM債券持有人以ATOM1票1票的方式進行
  • 如果他們不投票,代表們繼承其驗證人的投票
  • 投票期結束時(主網上2周),每個地址可以多次投票以更新其Option價值(每次支付交易費用), 只有最近投票的投票纔算有效
  • 選民可以選擇之間進行選擇Yes,No,NoWithVeto和Abstain
  • 在投票期結束時,如果:
    1. (YesVotes / (YesVotes+NoVotes+NoWithVetoVotes)) > 1/2
    2. (NoWithVetoVotes / (YesVotes+NoVotes+NoWithVetoVotes)) < 1/3
    3. ((YesVotes+NoVotes+NoWithVetoVotes) / totalBondedStake) >= quorum

有關治理流程及其工作原理的更多信息,請查看治理模塊規範。

25、創建治理建議
要創建治理建議,您必須提交初始存款以及標題和說明。治理之外的各種模塊可以實現自己的提議類型和處理程序(例如,參數更改),其中治理模塊本身支持Text提議。治理之外的任何模塊都將命令安裝在其上submit-proposal。
提交Text提案:

gaiacli tx gov submit-proposal \ 
  --title = < title > \ 
  --description = < description > \ 
  --type = “ Text ” \ 
  --deposit = “ 1000000uatom ” \ --from 
  = < name > \ 
  --chain -id = < chain_id >

您也可以直接通過–proposal指向包含提案的JSON文件的標誌提供提案。

要提交參數更改提議,您必須提供提案文件,因爲其內容對CLI輸入不太友好:

gaiacli tx gov submit-proposal param-change < path / to / proposal.json > \ 
  --from = < name > \ 
  --chain-id = < chain_id >

其中proposal.json包含以下內容:

{
  "title": "Param Change",
  "description": "Update max validators",
  "changes": [
    {
      "subspace": "staking",
      "key": "MaxValidators",
      "value": 105
    }
  ],
  "deposit": [
    {
      "denom": "stake",
      "amount": "10000000"
    }
  ]
}

:::危險警告
目前,參數更改已經過評估但未經過驗證,因此value對於其相應參數,任何更改都是有效的(即正確類型和邊界內)非常重要,例如。MaxValidators應該是整數而不是小數。

正確審查參數變更提案應該可以防止這種情況發生(在治理過程中不會發生存款),但無論如何都應該注意。
:::
:::提示注意
的SoftwareUpgrade,因爲它是沒有實現,目前不從的語義不同,目前不支持Text的建議。
:::
查詢提案
創建後,您現在可以查詢提案的信息:

gaiacli query gov proposal <proposal_id>

或查詢所有可用的提案:

gaiacli query gov proposals

您還可以查詢通過voter或depositor使用相應標誌過濾的提案。

要查詢給定治理建議的提議者:

gaiacli query gov proposer <proposal_id>

26、增加存款
爲了將提案廣播到網絡,存入的金額必須高於一個minDeposit值(初始值:) 512000000uatom。如果您之前創建的提案不符合此要求,您仍可以增加存入的總金額以激活它。達到最低存款後,提案進入投票期:

gaiacli tx gov deposit < proposal_id >  “ 10000000uatom ” \ 
  --from = < name > \ 
  --chain-id = < chain_id >

注意:達到此要求後,將刪除不符合此要求的提案MaxDepositPeriod。

27、查詢存款

創建新提案後,您可以查詢提交給它的所有存款:

gaiacli query gov deposits <proposal_id>

您還可以查詢特定地址提交的存款:

gaiacli query  gov deposit < proposal_id >  < depositor_address >

28、投票提案
提案存款達到MinDeposit價值後,投票期開始。保稅Atom持有人可以投票:

gaiacli tx gov vote <proposal_id> <Yes/No/NoWithVeto/Abstain> \
  --from=<name> \
  --chain-id=<chain_id>

29、查詢投票
使用您剛剛提交的選項檢查投票:

gaiacli query gov vote <proposal_id> <voter_address>

您還可以獲得提交給提案的所有先前投票:

gaiacli query gov votes <proposal_id>

30、查詢提案計算結果

要檢查給定提案的當前計數,您可以使用以下tally命令:

gaiacli query gov tally <proposal_id>

31、查詢治理參數
查詢當前治理參數,運行如下命令:

gaiacli query gov params

要查詢運行的治理參數的子集:

gaiacli query gov param voting
gaiacli query gov param tallying
gaiacli query gov param deposit

32、費用分配
查詢分發參數
要檢查當前分發參數,請運行:

gaiacli query distribution params

33、查詢分發社區池
要查詢受治理控制的社區池中的所有硬幣:

gaiacli query distribution community-pool

34、查詢優秀獎勵
要檢查當前未結(未撤回)獎勵,請運行:

gaiacli query distribution validator-outstanding-rewards

35、查詢驗證器委員會
要檢查驗證器當前的未結佣金,請運行:

gaiacli query distribution commission <validator_address>

36、查詢驗證人的減持
查詢驗證人的歷史減持,請運行:

gaiacli query distribution slashes <validator_address> <start_height> <end_height>

37、查詢委託人獎勵
要檢查代理的當前獎勵(如果要撤回),請運行:

gaiacli query distribution rewards <delegator_address> <validator_address>

38、查詢所有代理商獎勵
要檢查委託的所有當前獎勵(如果要撤銷),請運行:

gaiacli query distribution rewards <delegator_address>

39、多重簽名交易
多重簽名事務需要多個私鑰的簽名。因此,從多重賬戶生成和簽署交易涉及有關各方之間的合作。任何密鑰持有者都可以發起多重簽名事務,並且其中至少有一個需要將其他方的公鑰導入其密鑰庫並生成多重公鑰以便最終確定和廣播該事務。

例如,給定一個鍵multisig包括鍵p1,p2和p3,其中的每一個由不同方保持,用戶保持p1將需要同時導入p2並p3在爲了產生multisig帳戶公鑰

gaiacli keys add \
  p2 \
  --pubkey=cosmospub1addwnpepqtd28uwa0yxtwal5223qqr5aqf5y57tc7kk7z8qd4zplrdlk5ez5kdnlrj4

gaiacli keys add \
  p3 \
  --pubkey=cosmospub1addwnpepqgj04jpm9wrdml5qnss9kjxkmxzywuklnkj0g3a3f8l5wx9z4ennz84ym5t

gaiacli keys add \
  p1p2p3 \
  --multisig-threshold=2 \
  --multisig=p1,p2,p3

p1p2p3已存儲新的multisig公鑰,其地址將用作multisig事務的簽名者:

gaiacli keys show --address p1p2p3

您還可以通過查看密鑰的JSON輸出或傳遞–show-multisig標記來查看multisig閾值,pubkey組件和相應的權重:

gaiacli keys show p1p2p3 -o json
gaiacli keys show p1p2p3 --show-multisig

創建multisig事務的第一步是代表上面創建的multisig地址啓動它:

gaiacli tx send cosmos1570v2fq3twt0f0x02vhxpuzc9jc4yl30q2qned 1000000uatom \
  --from=<multisig_address> \
  --generate-only > unsignedTx.json

該文件unsignedTx.json包含以JSON編碼的無符號事務。 p1現在可以使用自己的私鑰對事務進行簽名:

gaiacli tx sign \
  unsignedTx.json \
  --multisig=<multisig_address> \
  --from=p1 \
  --output-document=p1signature.json 

生成簽名後,將p1傳輸unsignedTx.json和 傳輸p1signature.json,p2或者p3生成其各自的簽名:

gaiacli tx sign \
  unsignedTx.json \
  --multisig=<multisig_address> \
  --from=p2 \
  --output-document=p2signature.json

p1p2p3是一個2比3的多重鍵,因此一個額外的簽名就足夠了。現在,任何密鑰持有者都可以通過組合所需的簽名文件來生成multisig事務:

gaiacli tx multisign \ 
  unsignedTx.json \ 
  p1p2p3 \ 
  p1signature.json p2signature.json > signedTx.json

現在可以將事務發送到節點:

gaiacli tx broadcast signedTx.json

2019年9月10日於深圳。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章