Cosmos開發(三)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個單位。
轉賬成功。

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