WEB3DEV

Lorenzo Battistela
Lorenzo Battistela

Posted on

NEAR - Proof of Work Faucet

Este artigo é uma tradução do original, encontrado no site oficial da NEAR. A tradução foi feita por Lorenzo Battistela

Proof of Work Faucet

Uma "faucet" no meio cripto é um site que fornece tokens. Faucets são especialmente comuns em redes de teste, como a Near Testnet para permitir que os desenvolvedores testem seus apps com tokens que não têm valor monetário.

Os tokens de uma Faucet podem acabar, especialmente se as pessoas abusarem deles propositalmente tentando drenar os fundos disponíveis. Enquanto os tokens de uma rede de teste podem ser reabastecidos de algumas maneiras, fazer isso pode ser um problema, por isso é útil impedir esse tipo de comportamento.

Para esse fim, alguns faucets exigem que os requests sejam acompanhados por uma postagem no Twitter. Mas é fácil para uma pessoa executar contas falsas no Twitter para drenar uma faucet. Esse tipo de comportamento seria classificado como um Ataque Sybil.

Essa demonstração usa uma aproximação diferente.

Primeiro, cada nova conta criada com essa faucet recebe 1/1000 dos fundos remanescentes no momento em que foi criada.

Segundo, essa faucet exige Proof of Work: antes que a faucet crie sua nova conta, você precisa esperar um pouco até que o JavaScript na página passe por uma computação complexa (nessa demo, a computação específica é computar um "sal" u64 para um id de conta + chave pública de maneira que o sha256(id_conta + ':' + chave_publica + ':' + salt) tenha dificuldade mínima levando zeros).

Teste agora

Você pode testar uma versão dessa demo: https://near-examples.github.io/pow-faucet/
Essa versão demo cria novas contas na rede de teste Near com o sufixo .meta

Brincando com o código

O código se encontra em dois lugares diferentes:

Contrato da Faucet

O código fonte do smart contract se encontra na pasta contract-rs, especificamente em contract-rs/src/lib.rs.

Depois que você fizer mudanças, rode os testes entrando no diretório contract-rs (cd contract-rs) e executando:

cargo test

Para recompilar o smart contract na preparação para fazer o deploy dele, de novo entre no diretório contract-rs e execute:

./build.sh

Front-end da Faucet

Isso contém o JavaScript que mostra a UI e executa o algoritmo de proof-of-work. Ele vive na pasta do frontend.

Ele foi inicializado com create-react-app. Verifique o Readme https://github.com/near-examples/pow-faucet/blob/master/frontend/README.md na pasta do frontend para aprender como brincar com o código.

Fazendo deploy

Os deploys do contrato e do frontend devem ser feitos separadamente.

Contrato

Deploy rápido

Faça o build e o deploy desse smart contract para uma conta de desenvolvimento. Contas Dev são contas geradas automaticamente para auxiliar no desenvolvimento e testes de smart contracts. Veja a seção de Deploy padrão para criar uma conta mais personalizada para fazer o deploy.

Execute:

near dev-deploy --wasmFile res/faucet.wasm --helperUrl https://near-contract-helper.onrender.com

Por trás dos panos, isso está criando uma conta e fazendo deploy de um contrato para ela. No console, note uma mensagem como essa:

Done deploying to dev-1234567890123

Nesta instância, a conta é dev-1234567890123. Um arquivo foi criado, contendo um par de chaves para a conta, localizado em neardev/dev-account. Para deixar os próximos passos mais fáceis, vamos configurar uma variável de ambiente contendo o id dessa conta de desenvolvimento e usar isso quando executar comandos de copiar/colar. Execute esse comando para a variável de ambiente:

source neardev/dev-account.env

Você pode confirmar que a variável de ambiente está configurada corretamente se a sua linha de comando escrever o nome da conta depois desse comando:

echo $CONTRACT_NAME

O próximo comando irá inicializar o contrato usando o novo método:

near call $CONTRACT_NAME new '{"account_suffix":"aloha", "min_difficulty": 10}' --accountId $CONTRACT_NAME

Para buscar o número de contas criadas, chame get_num_created_accounts com o seguinte comando:

near call $CONTRACT_NAME get_num_created_accounts '' --accountId $CONTRACT_NAME

Deploy padrão

Veja instruções em docs.near.org para ver como fazer o deploy de uma contrato na blockchain NEAR.

Frontend

O frontend compila os assets estáticos - HTML, CSS e JavaScript. O deploy do demo do frontend é feito para o GitHub Pages usando gh-pages. Sinta-se livre para reutilizar essa aproximação ou achar outra.

Veja também

Como uma continuação dessa demo, nós criamos uma Proof of Work Transfer Faucet. Essa "Faucet de transferência" difere do atual exemplo em duas maneiras principais:

  1. Ao invés de criar uma nova conta, ele manda tokens NEAR para uma conta existente

  2. Ao invés de mandar 1/1000 dos fundos remanescentes, ele sempre manda 100Ⓝ

Coleção de dados

Usando o Gitpod nesse projeto, você concorda em aceitar análises anônimas e básicas. Nenhuma informação pessoal é transmitida. Ao invés disso, as estatísticas de uso ajudam a descobrir bugs em potencial e informações sobre o flow do usuário.

Top comments (0)