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:
Ao invés de criar uma nova conta, ele manda tokens NEAR para uma conta existente
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)