7 minutos de leitura
Visão geral
As chaves privadas são um dos dados mais sensíveis no que diz respeito à criptografia e à blockchain. No entanto, sempre houve debate e confusão sobre a escolha entre carteiras com custódia (em que o fornecedor da carteira detém a custódia da chave privada do utilizador) e carteiras sem custódia (em que o utilizador da carteira detém a custódia da chave privada). Este guia irá aprofundar a compreensão da diferença entre carteiras com custódia e sem custódia e explicar como efetuar uma transação sem custódia utilizando o Quicknode.
Pré-requisitos
- O Node.js está instalado no seu sistema.
- Editor de texto.
- Terminal, também conhecido como linha de comandos.
O que é uma carteira sem custódia?
Uma carteira não custodial é uma carteira de blockchain em que o proprietário da carteira detém o controlo total e a custódia da chave privada. É possível criar e aceder a uma carteira não custodial através de dois métodos: utilizando a chave privada (uma sequência alfanumérica) ou utilizando uma frase mnemónica, uma sequência de 12 a 24 palavras armazenada pelo próprio proprietário da carteira (geralmente anotada e guardada num local seguro, fora da Internet e do computador).
Seguem-se algumas vantagens de uma carteira sem custódia:
- Autonomia — os utilizadores têm controlo total sobre os seus fundos — uma vez que o utilizador é a única entidade com controlo total sobre os seus fundos. Não têm de depender de terceiros para gerir ou proteger a sua carteira.
- Segurança — uma vez que os utilizadores guardam as suas chaves privadas fora da Internet ou de qualquer computador, as probabilidades de uma falha de segurança são praticamente insignificantes.
- Levantamento instantâneo — com carteiras sem custódia, os utilizadores não têm de depender de terceiros para confirmar o seu pedido de levantamento. Isto agiliza todo o processo e permite levantamentos instantâneos.
Carteira sem custódia vs. carteira com custódia
- Custódia da chave privada - O fator mais importante a ter em conta ao comparar carteiras de criptomoedas é a posse da chave privada. No caso de uma carteira sem custódia, o utilizador detém a custódia da chave privada. Nas carteiras com custódia, é um terceiro (normalmente um fornecedor de carteiras ou uma bolsa) que controla a chave privada.
- Tipo de transação — As transações efetuadas por carteiras sem custódia ficam visíveis instantaneamente na cadeia. Em contrapartida, as transações efetuadas por carteiras com custódia têm de passar por várias verificações por parte de terceiros e estão sujeitas a atrasos.
- Segurança — Nas carteiras sem custódia, o utilizador mantém a chave privada armazenada localmente. A carteira é muito segura, a menos que o utilizador partilhe a chave privada ou que o dispositivo seja roubado. Nas carteiras com custódia, todos os dados sensíveis do utilizador, como as chaves privadas, são armazenados em armazenamento de dados «quente» (atualizado instantaneamente) e em armazenamento de dados «frio» (atualizado periodicamente), que são normalmente vulneráveis a ataques de pirataria informática.
- Acessibilidade offline — As carteiras sem custódia não necessitam de uma ligação à Internet ativa. As carteiras com custódia necessitam de uma ligação à Internet, uma vez que os dados são normalmente armazenados num servidor centralizado.
- Cópia de segurança e recuperação — A única desvantagem das carteiras não custodiais é que, caso a chave privada ou a sequência mnemónica se percam, não há forma de recuperar a carteira. Em contrapartida, os utilizadores de carteiras custodiais podem solicitar a recuperação a uma entidade terceira.
Utilização de um nó sem custódia
Na Quicknode, operamos muitos nós a nível global. Todos estes nós estão constantemente ligados à Internet e são dinâmicos. A API da Quicknode está ligada a uma rede global de nós potentes. Estes nós nem sempre estão ligados a um único componente de infraestrutura. A API foi concebida para efetuar mudanças dinâmicas entre componentes de infraestrutura individuais, de forma a garantir uma melhor estabilidade e tempo de atividade. Isto torna o armazenamento de quaisquer dados sensíveis num nó uma opção pouco aconselhável, uma vez que estes estão em constante mudança. Há também uma questão de segurança a ter em conta, uma vez que estes nós estão expostos à Internet. Não permitimos que armazenem chaves privadas, para garantir a segurança dos dados dos nossos utilizadores. Por serem dinâmicos, alteram frequentemente o seu estado para proporcionar um melhor desempenho. Isto significa que as chaves podem perder-se, resultando na perda dos dados do utilizador. Estas foram as razões para operarmos nós sem custódia e para que os nossos utilizadores sejam os únicos controladores das suas carteiras. Nas próximas secções, veremos como criar uma carteira utilizando uma biblioteca, efetuar uma transação sem custódia e enviá-la através da Quicknode.
Configurar o seu ponto de acesso Quicknode para a Ethereum
Para os nossos objetivos de hoje, poderíamos utilizar praticamente qualquer cliente Ethereum, como o Geth ou o OpenEthereum (anteriormente conhecido como Parity). Como isso é um pouco complicado para enviar transações, vamos simplesmente criar uma conta gratuita no Quicknode aqui e gerar facilmente um ponto de acesso Ethereum. Vamos utilizar a cadeia de teste Kovan para efetuar as transferências. Depois de criar o seu ponto de acesso Ethereum gratuito, copie o URL do seu fornecedor HTTP:

Vais precisar disto mais tarde, por isso copia e guarda.
Criar uma carteira e obter algum ETH para teste
Podemos utilizar qualquer uma das muitas bibliotecas web3 disponíveis para criar uma carteira. Hoje vamos utilizar a ethers.js, uma biblioteca JavaScript, para criar uma carteira que irá assinar e enviar transações. Também pode consultar os nossos guias sobre como criar uma carteira Ethereum em Go / Python / Ruby / PHP.
Vamos instalar o ethers utilizando o npm (Node Package Manager), que vem incluído no node.js. Abra o cmd/terminal e escreva o seguinte para verificar se o node.js está instalado ou não:
node -v
Isto deverá indicar a versão instalada do Node.js; caso não esteja instalado, descarregue a versão LTS do Node.js a partir do seu site oficial.
Vamos criar um novo diretório para o nosso projeto e definir esse diretório como o nosso diretório de trabalho atual no cmd/terminal:
mkdir noncusTransaction
cd noncusTransaction
Agora, instale o ethers digitando o seguinte:
npm i ethers@5.7
Certifique-se de que está a instalar a versão 5.7 do Ethers.js
O problema mais comum nesta etapa é uma falha interna do `node-gyp`. Pode seguir as instruções de instalação do node-gyp aqui.
Nota: Se se deparar com o problema do node-gyp, terá de garantir que a sua versão do Python corresponde a uma das versões compatíveis indicadas nas instruções acima.
Outro problema comum é um cache desatualizado; limpa o teu cache do npm digitando simplesmente o seguinte no cmd/terminal:
npm cache clean
Se tudo correr bem, o ethers.js será instalado no seu sistema.
Agora, abra um editor de texto e crie um novo ficheiro JavaScript chamado transaction.js. Copie e cole o seguinte no ficheiro.
var ethers = require('ethers');
var chave-privada = "0x0111111111111111111122222222222222222223333333333333333333344445";
var carteira = new ethers.Carteira(chave privada);
console.log("Endereço: " + carteira.endereço);
Explicação do código acima:
Linha 1: Importação da biblioteca «ethers».
Linha 2: Ao guardar uma chave privada na variável privateKey, certifique-se de que utiliza a sua própria chave privada. Pode aprender a gerar uma seguindo este guia sobre como gerar uma chave privada utilizando JavaScript.
Nota: Se pretender publicar o seu código na Internet (por exemplo, num repositório público do GitHub), é sempre boa prática guardar a chave privada num ficheiro .env e importá-la para o seu código principal através de uma variável de ambiente.
Linha 3: Criar um novo endereço de carteira utilizando a chave privada e guardá-lo na variável wallet.
Linha 4: Imprimir o endereço da carteira juntamente com uma cadeia de caracteres.
Agora, guarde o ficheiro e execute o script.
transação do nó
Deve ficar assim.
Agora, vamos obter algum ETH de teste para enviar durante a transação e para pagar a taxa de gás. Copie o endereço da saída, aceda ao Kovan Faucet e inicie sessão com o GitHub ou o GitLab, cole o endereço da carteira no campo de texto do Faucet e, em seguida, clique em «Send me KETH!».

Pode verificar se recebeu ou não o ETH de teste colando o endereço no Etherscan do Kovan; assim, poderá ver o saldo de ETH.

Envio de uma transação sem custódia
Vamos criar uma transação de transferência de tokens utilizando a carteira que criámos anteriormente e enviar a transação para a cadeia através do Quicknode.
Atualize o seu ficheiro transaction.js da seguinte forma:
var ethers = require('ethers');
var url = ''ADD_YOUR_ETHEREUM_NODE_URL'';
var customHttpProvider = new ethers.providers.JsonRpcProvider(url);
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);
tx = {
to: "0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE",
value: ethers.utils.parseEther("0.05"),
chainId: 42,
nonce: 11
}
customHttpProvider.estimateGas(tx).then(function(estimate) {
tx.gasLimit = estimate;
tx.gasPrice = ethers.utils.parseUnits("3.14085197", "gwei");
wallet.signTransaction(tx).then((signedTX)=>{
customHttpProvider.sendTransaction(signedTX).then(console.log);
});
});
Por isso, substitua `ADD_YOUR_ETHEREUM_NODE_URL` pelo fornecedor HTTP indicado na secção anterior.
Explicação do código acima.
Linha 1: Importação da biblioteca «ethers».
Linha 2: Guardar o nosso URL do Quicknode na variável «url».
Linha 3: Instanciar um novo fornecedor «ethers» e armazená-lo na variável «customHttpProvider».
Linha 4: Guardar a chave privada na variável privateKey (deve gerar a sua própria chave privada).
Linha 5: Criação de uma nova carteira a partir da chave privada.
Linha 6: Imprimir o endereço da carteira juntamente com uma cadeia de caracteres.
Linhas 7-12: Inicialização do nosso objeto de transação e fornecimento de parâmetros como «to», que contém o endereço do destinatário (qualquer endereço para o qual a transação deva ser enviada). Em segundo lugar, «value», que contém o valor em ETH a ser transferido. Em terceiro lugar, «chainId» é o identificador da rede (42, neste caso, porque estamos a utilizar a rede de teste Kovan). Por último, «nonce», que é a contagem das transações que um remetente já enviou. O valor aqui deve ser sempre o número de transações anteriores +1.
Também podemos obter o nonce para um determinado endereço utilizando o método getTransactionCount() do ethers.js.
Linhas 13-14: Estimar o gas utilizando o fornecedor e, em seguida, armazená-lo na variável gasLimit do objeto de transação.
Linha 15: Definir o preço do gás e guardá-lo na variável gasPrice da transação.
Linha 16: Assinar a transação utilizando a carteira.
Linha 17: Envio da transação assinada através do fornecedor e exibição dos detalhes da transação na consola.
Guarde o ficheiro e execute-o utilizando:
transação do nó
O resultado será semelhante a este:

Copie o hash da transação e cole-o na barra de pesquisa do Kovan Etherscan para verificar se foi confirmado ou não.
Conclusão
Parabéns por ter efetuado uma transação sem custódia e por ser o único responsável pelos seus fundos. Nunca partilhe a sua chave privada com ninguém; guarde-a sempre num local seguro, para maior segurança da sua carteira e dos seus fundos.
Subscreve a nossa newsletter para receberes mais artigos e guias sobre o Ethereum. Também podes contactar-nos a qualquer momento no Twitter e no servidor da comunidade do Discord, onde encontrarás alguns dos programadores mais fantásticos que alguma vez conhecerás :)
Adoramos ❤️ os vossos comentários!
Diz-nos se tiveres algum comentário ou sugestão de novos temas. Adoraríamos saber a tua opinião.
