Configurando o Cliente CrossFi Chain.
Daemon do Crossfi Chain
crossfid é a ferramenta que permite interagir com o nó que opera na rede Cosmos Hub, quer você o execute por conta própria ou não. Vamos configurá-lo corretamente.
Configurando o crossfid
O comando principal usado para configurar o crossfid é o seguinte:
crossfid config
Isso permite definir um valor padrão para cada flag informado.
Primeiro, configure o endereço do nó completo ao qual deseja se conectar:
crossfid config node :
# exemplo: crossfid config node https://77.87.106.33:26657
Se você executar seu próprio nó completo, use apenas tcp://localhost:26657 como o endereço.
Em seguida, vamos definir o valor padrão da flag --trust-node:
crossfid config trust-node true
# Defina como true se você confia no nó completo ao qual está se conectando, senão false
Por fim, vamos definir o chain-id da blockchain com a qual queremos interagir:
crossfid config chain-id crossfi-1
Gerenciamento de Chaves
Chaveiro
O keyring armazena os pares de chaves privadas/públicas usados para interagir com um nó. Por exemplo, uma chave de validador precisa ser configurada antes de executar o nó blockchain, para que os blocos sejam assinados corretamente. A chave privada pode ser armazenada em diferentes locais, chamados de backends, como um arquivo ou o armazenamento de chaves próprio do sistema operacional.
Ambientes sem interface (headless) recomendam o uso dos backends file ou pass.
Tipos de Chaves
Existem três tipos de representações de chave que são usadas:
mp- Derivado de chaves de conta geradas por
crossfid keys add - Usado para receber fundos
- ex.
mp15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc
- Derivado de chaves de conta geradas por
mpvaloper- Usado para associar um validador ao seu operador
- Usado para invocar comandos de staking
- ex.
mpvaloper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah
mppub- Derivado de chaves de conta geradas por
crossfid keys add - ex.
mppub1zcjduc3q7fu03jnlu2xpl75s2nkt7krm6grh4cc5aqth73v0zwmea25wj2hsqhlqzm
- Derivado de chaves de conta geradas por
mpvalconspub- Gerado quando o nó é criado com
crossfid init. - Obtenha esse valor com
crossfid tendermint show-validator - ex.
mpvalconspub1zcjduepq0ms2738680y72v44tfyqm3c9ppduku8fs6sr73fx7m666sjztznqzp2emf
- Gerado quando o nó é criado com
Migre as Chaves do Keybase legadas em disco para o Armazenamento secreto embutido do sistema operacional
Versões mais antigas do crossfid armazenavam chaves no diretório home do usuário. Se estiver migrando de uma versão antiga do crossfid, precisará migrar suas chaves antigas para o armazenamento de credenciais do sistema operacional executando o seguinte comando:
crossfid keys migrate
O comando solicitará cada senha. Se uma senha estiver incorreta, a respectiva chave será pulada.
Gerar Chaves
Você precisará de um par de chaves de conta privadas e públicas (ou seja, sk e pk, respectivamente) para poder receber fundos, enviar transações, efetuar staking, etc.
Para gerar uma nova chave secp256k1:
crossfid keys add
A saída do comando acima conterá uma frase semente (seed phrase). Recomenda-se salvar a frase semente em um local seguro para que, caso você esqueça a senha do armazenamento de credenciais do sistema operacional, você possa, eventualmente, regenerar a chave a partir da frase semente com o seguinte comando:
crossfid keys add --recover
Se você verificar suas chaves privadas, você agora verá ``:
crossfid keys show
Visualize o endereço do operador do validador através de:
crossfid keys show --bech=val
Você pode ver todas as suas chaves disponíveis digitando:
crossfid keys list
Visualize a chave pública do validador para o seu nó digitando:
crossfid tendermint show-validator
Observe que esta é a chave de assinatura do Tendermint, não a chave do operador que você usará nas transações de delegação.
Recomendamos fortemente não usar a mesma senha para várias chaves. A equipe do Tendermint e a Interchain Foundation não se responsabilizarão pela perda de fundos.
Gerar Chaves Públicas Multisig
Você pode gerar e imprimir uma chave pública multisig digitando:
`crossfid keys add --multisig=name1,name2,name3[...] --multisig-threshold=K new_key_name`
O K é o número mínimo de chaves privadas que devem ter assinado as transações que carregam o endereço da chave pública como signatário.
A flag --multisig deve conter os nomes das chaves públicas que serão combinadas em uma chave pública que será gerada e armazenada como new_key_name no banco de dados local. Todos os nomes fornecidos via --multisig já devem existir no banco de dados local. A menos que a opção --nosort esteja definida, a ordem em que as chaves são fornecidas na linha de comando não importa, isto é, os seguintes comandos geram duas chaves idênticas:
crossfid keys add --multisig=foo,bar,baz --multisig-threshold=2 multisig_address
crossfid keys add --multisig=baz,foo,bar --multisig-threshold=2 multisig_address
Endereços multisig também podem ser gerados sob demanda e impressos pelo seguinte comando:
crossfid keys show --multisig-threshold K name1 name2 name3 [...]
Para mais informações sobre como gerar, assinar e transmitir transações com uma conta de assinatura múltipla, consulte Transações Multisig.
Transmissão de Transações
Ao transmitir transações, o crossfid aceita a opção --broadcast-mode. Esse sinalizador pode ter os valores sync (padrão), async ou block, em que sync faz com que o cliente retorne uma resposta CheckTx, async faz com que o cliente retorne imediatamente, e block faz o cliente esperar pela confirmação da transação (ou expirar).
É importante observar que o modo block não deve ser usado na maioria das circunstâncias. Isso ocorre porque a transmissão pode expirar e a tx ainda pode ser incluída em um bloco. Isso pode resultar em várias situações indesejáveis. Portanto, é melhor usar sync ou async e consultar pelo hash da tx para determinar quando ela é incluída em um bloco.
Taxas e Gás
Cada transação pode fornecer taxas ou preços de gás, mas não ambos.
Validador(es) possuem um preço mínimo de gás (multi-denom) configurado e usam esse valor ao determinar se devem incluir a transação em um bloco durante o CheckTx, onde gasPrices >= minGasPrices. Observe que sua transação precisa fornecer taxas que sejam maiores ou iguais a qualquer uma das denominações exigidas pelo validador.
Observação: Com esse mecanismo ativo, os validadores podem começar a priorizar transações pelo gasPrice no mempool, portanto oferecer taxas mais altas ou preços de gás pode resultar em maior prioridade da transação.
por exemplo
crossfid tx bank send ... --fees=50000uatom
ou
bash
crossfid tx bank send ... --gas-prices=0.0025uatom
Operações de Conta
Obter Tokens
Em uma testnet, obter tokens geralmente é feito via faucet. No momento não há um faucet público disponível.
Consultar Saldo da Conta
Após receber tokens para o seu endereço, você pode visualizar o saldo da sua conta digitando:
crossfid query account
Quando você consulta o saldo de uma conta com zero tokens, você receberá este erro: No account with address was found in the state. Isso também pode acontecer se você financiar a conta antes de o seu nó estar totalmente sincronizado com a cadeia. Ambos são normais.
Enviar Tokens
O comando a seguir pode ser usado para enviar moedas de uma conta para outra:
crossfid tx bank send 10faucetToken \
--chain-id=
O argumento amount aceita o formato .
Você pode querer limitar o gás máximo que pode ser consumido pela transação usando a opção --gas. Se você passar --gas=auto, a estimativa de gás será feita automaticamente antes de executar a transação. A estimativa de gás pode ser imprecisa, já que mudanças de estado podem ocorrer entre o final da simulação e a execução real da transação, portanto, um ajuste é aplicado sobre a estimativa original para garantir que a transação seja transmitida com sucesso. O ajuste pode ser controlado pela opção --gas-adjustment, cujo valor padrão é 1.0.
Agora, visualize os saldos atualizados das contas de origem e destino:
crossfid query account
crossfid query account
Você também pode verificar seu saldo em um bloco específico usando a opção --block:
crossfid query account --block=
Você pode simular uma transação sem realmente transmiti-la adicionando a flag --dry-run à linha de comando:
crossfid tx bank send 10faucetToken \
--chain-id= \
--dry-run
Além disso, você pode construir uma transação e imprimir seu formato JSON na saída padrão (STDOUT) adicionando --generate-only à lista de argumentos da linha de comando:
crossfid tx bank send 10faucetToken \
--chain-id= \
--generate-only > unsignedSendTx.json
bash
crossfid tx sign \
--chain-id= \
--from= \
unsignedSendTx.json > signedSendTx.json
O sinal --generate-only impede que crossfid acesse o keybase local. Assim, quando esse sinal é fornecido `` deve ser um endereço.
Você pode validar as assinaturas da transação digitando o seguinte:
crossfid tx sign --validate-signatures signedSendTx.json
Você pode transmitir a transação assinada para um nó fornecendo o arquivo JSON no seguinte comando:
crossfid tx broadcast --node= signedSendTx.json
Consultar Transações
Correspondência de um conjunto de Eventos
Você pode usar o comando de busca de transações para consultar transações que correspondam a um conjunto específico de events, que são adicionados a toda transação.
Cada evento é composto por um par chave-valor no formato .=. Eventos também podem ser combinados para consultar um resultado mais específico usando o símbolo &.
Você pode consultar transações por events da seguinte forma:
crossfid query txs --events='message.sender=cosmos1...'
E para usar múltiplos events:
crossfid query txs --events='message.sender=cosmos1...&message.action=withdraw_delegator_reward'
A paginação também é suportada via page e limit:
crossfid query txs --events='message.sender=cosmos1...' --page=1 --limit=20
A tag de ação sempre é igual ao tipo de mensagem retornado pela função Type() da mensagem correspondente.
Você pode encontrar uma lista de events disponíveis em cada um dos módulos do SDK:
- Eventos de staking
- Evento de Governança
- Eventos de Slashing
- Eventos de Distribuição
- Eventos de Banco
Correspondência do Hash de uma Transação
Você também pode consultar uma transação única pelo seu hash usando o seguinte comando:
crossfid query tx [hash]
Slashing
Desencarcelar
Para desencarcelar seu validador encarcerado
crossfid tx slashing unjail --from
Informações de Assinatura
Para recuperar as informações de assinatura de um validador:
crossfid query slashing signing-info
Parâmetros de Consulta
Você pode obter os parâmetros atuais de slashing via:
crossfid query slashing params
Minte
Você pode consultar os parâmetros de emissão/inflação via:
crossfid query minting params
Para consultar o valor atual da inflação:
crossfid query minting inflation
Para consultar o valor atual das provisões anuais:
crossfid query minting annual-provisions
Staking
Configurar um Validador
Consulte a seção Configuração do Validador (ссылка была удалена) para um guia mais completo sobre como configurar um validador-candidato.
Delegar a um Validador
Na próxima mainnet, você pode delegar atom a um validador. Esses delegadores podem receber parte da receita de taxas do validador. Leia mais sobre o Cosmos Token Model.
Consultar Validadores
Você pode consultar a lista de todos os validadores de uma cadeia específica:
crossfid query staking validators
Se quiser obter as informações de um único validador, você pode verificá-lo com:
crossfid query staking validator
Vincular Tokens
No mainnet do Cosmos Hub, delegamos uatom, onde 1atom = 1000000uatom. Aqui está como você pode delegar tokens a um validador de teste (i.e. delegar):
crossfid tx staking delegate \
--amount=10000000uatom \
--validator= \
--from= \
--chain-id=
`` é o endereço do operador do validador ao qual você pretende delegar. Se estiver executando uma testnet local, você pode encontrá-lo com:
crossfid keys show [name] --bech val
onde [name] é o nome da chave que você especificou quando inicializou o crossfid.
Enquanto os tokens estejam vinculados, eles ficam agrupados com todos os demais tokens vinculados na rede. Validadores e delegadores obtêm uma porcentagem de ações que equivalem à sua participação neste pool.
Consulta de Delegações
Uma vez que você envia uma delegação a um validador, você pode ver suas informações usando o seguinte comando:
crossfid query staking delegation
Ou se você quiser verificar todas as suas delegações atuais com validadores distintos:
crossfid query staking delegations
Desvincular Tokens
Se, por qualquer motivo, o validador se comportar de forma inadequada, ou se você apenas quiser desvincular uma certa quantidade de tokens, use o seguinte comando.
crossfid tx staking unbond \
\
10atom \
--from= \
--chain-id=
A desvinculação será concluída automaticamente quando o período de desvinculação tiver passado.
Consulta de Desvinculações
Depois de iniciar uma desvinculação, você pode ver suas informações usando o seguinte comando:
crossfid query staking unbonding-delegation
Ou se você quiser verificar todas as suas desvinculações pendentes com validadores distintos:
crossfid query staking unbonding-delegations
Além disso, você pode obter todas as desvinculações de um validador específico:
crossfid query staking unbonding-delegations-from
Redelegar Tokens
Uma redelegação é um tipo de delegação que permite vincular tokens ilíquidos de um validador para outro:
crossfid tx staking redelegate \
\
\
10atom \
--from= \
--chain-id=
Aqui você também pode redelegar uma quantidade específica de shares-amount ou uma shares-fraction com as flags correspondentes.
A redelegação será concluída automaticamente quando o período de desvinculação tiver passado.
Consulta de Redelegações
Uma vez iniciada a rededelegação, você pode ver suas informações usando o seguinte comando:
crossfid query staking redelegation
Ou se você quiser verificar todas as suas rededelegations atuais com validadores distintos:
crossfid query staking redelegations
Além disso, você pode obter todas as rededelegations de saída de um validador específico:
crossfid query staking redelegations-from
Parâmetros de Consulta
Parâmetros definem configurações de alto nível para o staking. Você pode obter os valores atuais usando:
crossfid query staking params
Com o comando acima você obterá os valores para:
- Tempo de Desvinculação
- Número máximo de validadores
- Denominação da moeda para staking
Todos esses valores estarão sujeitos a atualizações por meio de um processo de governança por propostas de Alteração de Parâmetros (ParameterChange).
Consultar Pool
Um pool de staking define os parâmetros dinâmicos do estado atual. Você pode consultá-los com o seguinte comando:
crossfid query staking pool
Com o comando pool você obterá os valores para:
- Tokens não vinculados e vinculados
- Oferta de tokens
- Inflação anual atual e o bloco no qual a última inflação foi processada
- Últimas participações vinculadas registradas
Consultar Delegações para o Validador
Você também pode consultar todas as delegações de um determinado validador:
crossfid query delegations-to
Governança
Governança é o processo pelo qual usuários no Cosmos Hub chegam a um consenso sobre upgrades de software, parâmetros da mainnet ou mecanismos de sinalização por meio de propostas de texto. Isso é feito através de votação em propostas, que serão submetidas por detentores de ATOM na mainnet.
Algumas considerações sobre o processo de votação:
- A votação é realizada por detentores vinculados de
ATOMem base de 1 voto por 1 ATOM vinculado - Delegadores herdaram o voto do seu validador se não votarem
- Os votos são contados no final do período de votação (2 semanas na mainnet) onde cada endereço pode votar várias vezes para atualizar o valor de
Option(pagando a taxa de transação cada vez), apenas o voto mais recentemente registrado será contado como válido - Os votantes podem escolher entre as opções
Yes,No,NoWithVetoeAbstain - No final do período de votação, uma proposta é aceita se e somente se:
(YesVotes / (YesVotes+NoVotes+NoWithVetoVotes)) > 1/2(NoWithVetoVotes / (YesVotes+NoVotes+NoWithVetoVotes)) < 1/3((YesVotes+NoVotes+NoWithVetoVotes) / totalBondedStake) >= quorum
Para mais informações sobre o processo de governança e como ele funciona, por favor consulte a especificação do módulo Governança especificação.
Criar uma Proposta de Governança
Para criar uma proposta de governança, você precisa submeter um depósito inicial junto com um título e uma descrição. Vários módulos fora da governança podem implementar seus próprios tipos de propostas e manipuladores (ex.: alterações de parâmetros), onde o próprio módulo de governança suporta propostas de Texto. Qualquer módulo fora da governança tem seu comando montado sobre submit-proposal.
Para submeter uma proposta Text:
crossfid tx gov submit-proposal \
--title= \
--description=&lt;description&gt; \
--type="Text" \
--deposit="1000000uatom" \
--from=&lt;name&gt; \
--chain-id=&lt;chain_id&gt;
Você também pode fornecer a proposta diretamente através da flag --proposal que aponta para um arquivo JSON contendo a proposta.
Para submeter uma proposta de alteração de parâmetros, você deve fornecer um arquivo de proposta, pois seu conteúdo é menos amigável para entrada via CLI:
crossfid tx gov submit-proposal param-change &lt;path/to/proposal.json&gt; \
--from=&lt;name&gt; \
--chain-id=&lt;chain_id&gt;
Onde proposal.json contém o seguinte:
],
"deposit": [
]
Atualmente alterações de parâmetros são avaliadas mas não validadas, portanto é muito importante que qualquer mudança de value seja válida (ou seja, do tipo correto e dentro dos limites) para o parâmetro correspondente, por exemplo, MaxValidators deve ser um inteiro e não um decimal.
Uma avaliação adequada de uma proposta de mudança de parâmetro deve evitar que isso aconteça (nenhum depósito deve ocorrer durante o processo de governança), mas isso deve ser observado independentemente.
O SoftwareUpgrade atualmente não é suportado, pois não foi implementado e não difere da semântica de uma proposta Text.
Consultar Propostas
Uma vez criada, você pode consultar informações da proposta:
crossfid query gov proposal &lt;proposal_id&gt;
Ou consultar todas as propostas disponíveis:
crossfid query gov proposals
Você também pode consultar propostas filtradas por voter (votante) ou depositor (depositante) usando as flags correspondentes.
Para consultar o proponente de uma determinada proposta de governança:
crossfid query gov proposer &lt;proposal_id&gt;
Aumentar Depósito
Para que uma proposta seja transmitida para a rede, o valor depositado deve ser superior a um minDeposit (valor inicial: 512000000uatom). Se a proposta que você criou não atingiu esse requisito, você ainda pode aumentar o depósito total para ativá-la. Assim que o depósito mínimo for atingido, a proposta entra no período de votação:
crossfid tx gov deposit &lt;proposal_id&gt; "10000000uatom" \
--from=&lt;name&gt; \
--chain-id=&lt;chain_id&gt;
NOTE: Propostas que não cumprirem esse requisito serão excluídas após
MaxDepositPeriodser alcançado.
Consultar Depósitos
Uma vez que uma nova proposta é criada, você pode consultar todos os depósitos submetidos a ela:
crossfid query gov deposits &lt;proposal_id&gt;
Você também pode consultar um depósito submetido por um endereço específico:
crossfid query gov deposit &lt;proposal_id&gt; &lt;depositor_address&gt;
Votar em uma Proposta
Após o depósito de uma proposta atingir o valor MinDeposit, o período de votação se abre. Detentores vinculados de ATOM podem então votar nela:
crossfid tx gov vote &lt;proposal_id&gt; &lt;Yes/No/NoWithVeto/Abstain&gt; \
--from=&lt;name&gt; \
--chain-id=&lt;chain_id&gt;
Consultar Votos
Verifique o voto com a opção que você acabou de enviar:
crossfid query gov vote &lt;proposal_id&gt; &lt;voter_address&gt;
Você também pode obter todos os votos anteriores enviados para a proposta com:
crossfid query gov votes &lt;proposal_id&gt;
Consultar o resultado da contagem da proposta
Para verificar a contagem atual de uma determinada proposta, você pode usar o comando tally:
crossfid query gov tally &lt;proposal_id&gt;
Consultar Parâmetros de Governança
Para verificar os parâmetros atuais de governança, execute:
crossfid query gov params
Para consultar subconjuntos dos parâmetros de governança, execute:
crossfid query gov param voting
crossfid query gov param tallying
crossfid query gov param deposit
Distribuição de Taxas
Consultar Parâmetros de Distribuição
Para verificar os parâmetros atuais de distribuição, execute:
crossfid query distribution params
Consultar o Pool Comunitário de Distribuição
Para consultar todas as moedas no pool comunitário que está sob controle de Governança:
crossfid query distribution community-pool
Consultar recompensas pendentes
Para verificar as recompensas pendentes atuais (não sacadas), execute:
crossfid query distribution outstanding-rewards
Consultar Comissão do Validador
Para verificar a comissão pendente atual de um validador, execute:
crossfid query distribution commission &lt;validator_address&gt;
Consultar Penalizações de Validador
Para verificar penalizações históricas de um validador, execute:
crossfid query distribution slashes &lt;validator_address&gt; &lt;start_height&gt; &lt;end_height&gt;
Consultar Recompensas do Delegador
Para verificar as recompensas atuais de uma delegação (caso sejam sacadas), execute:
crossfid query distribution rewards &lt;delegator_address&gt; &lt;validator_address&gt;
Consultar Todas as Recompensas de Delegadores
Para verificar todas as recompensas atuais de uma delegação (caso sejam sacadas), execute:
crossfid query distribution rewards &lt;delegator_address&gt;
Transações Multisig
Transações multisig exigem assinaturas de várias chaves privadas. Portanto, gerar e assinar uma transação a partir de uma conta multisig envolve cooperação entre as partes envolvidas. Uma transação multisig pode ser iniciada por qualquer uma das chaves, e pelo menos uma delas precisará importar as chaves públicas de outras partes para o Keybase e gerar uma chave pública multisig para finalizar e transmitir a transação.
Por exemplo, dada uma chave multisig composta pelas chaves p1, p2 e p3, cada uma mantida por uma parte distinta, o usuário detentor de p1 precisaria importar p2 e p3 para gerar a chave pública da conta multisig:
crossfid keys add \
p2 \
--pubkey=cosmospub1addwnpepqtd28uwa0yxtwal5223qqr5aqf5y57tc7kk7z8qd4zplrdlk5ez5kdnlrj4
crossfid keys add \
p3 \
--pubkey=cosmospub1addwnpepqgj04jpm9wrdml5qnss9kjxkmxzywuklnkj0g3a3f8l5wx9z4ennz84ym5t
crossfid keys add \
p1p2p3 \
--multisig-threshold=2 \
--multisig=p1,p2,p3
Uma nova chave pública multisig p1p2p3 foi armazenada, e seu endereço será usado como signatário de transações multisig:
crossfid keys show --address p1p2p3
Você também pode visualizar o limiar multisig, os constituintes da chave pública e os pesos respectivos visualizando a saída JSON da chave ou passando a flag --show-multisig:
crossfid keys show p1p2p3 -o json
crossfid keys show p1p2p3 --show-multisig
O primeiro passo para criar uma transação multisig é iniciá-la em nome do endereço multisig criado acima:
crossfid tx bank send cosmos1570v2fq3twt0f0x02vhxpuzc9jc4yl30q2qned 1000000uatom \
--from=&lt;multisig_address&gt; \
--generate-only &gt; unsignedTx.json
O arquivo unsignedTx.json contém a transação não assinada codificada em JSON. p1 pode agora assinar a transação com sua própria chave privada:
crossfid tx sign \
unsignedTx.json \
--multisig=&lt;multisig_address&gt; \
--from=p1 \
--output-document=p1signature.json
Uma vez que a assinatura é gerada, p1 transmite unsignedTx.json e p1signature.json para p2 ou p3, que por sua vez gerarão suas respectivas assinaturas:
crossfid tx sign \
unsignedTx.json \
--multisig=&lt;multisig_address&gt; \
--from=p2 \
--output-document=p2signature.json
p1p2p3 é uma chave multisig 2-de-3, portanto, uma assinatura adicional é suficiente. Qualquer titular da(s) chave(s) pode agora gerar a transação multisig combinando os arquivos de assinatura necessários:
crossfid tx multisign \
unsignedTx.json \
p1p2p3 \
p1signature.json p2signature.json &gt; signedTx.json
A transação pode agora ser enviada ao nó:
crossfid tx broadcast signedTx.json
Scripts de Autocompletar para Shells
Scripts de conclusão para shells UNIX populares como Bash e Zsh podem ser gerados através do comando completion, disponível para ambos crossfid e crossfid.
Se você quiser gerar scripts de conclusão para Bash, execute o seguinte comando:
crossfid completion > crossfid_completion
crossfid completion > gaiacli_completion
Se você quiser gerar scripts de conclusão para Zsh, execute o seguinte comando:
crossfid completion --zsh > crossfid_completion
crossfid completion --zsh > gaiacli_completion
Na maioria dos sistemas UNIX, esses scripts podem ser carregados no .bashrc ou no .bash_profile para habilitar a autocompleção do Bash:
echo '. crossfid_completion' &gt;&gt; ~/.bashrc
echo '. gaiacli_completion' &gt;&gt; ~/.bashrc
Consulte o manual do usuário do seu interpretador fornecido pelo seu sistema operacional para informações sobre como habilitar a autocompleção do shell.