
Em abril de 2018, a equipe Waves apresentou seus contratos inteligentes não completos.
Um pouco mais tarde, quando o hackathon Waves foi anunciado, decidi que era hora de mergulhar em novas tecnologias. Abaixo do corte, você encontrará informações detalhadas sobre o contrato inteligente que conquistou o terceiro lugar no hackathon.
O artigo será útil para os desenvolvedores implementarem seus próprios contratos inteligentes e se familiarizarem com a tecnologia.
Idéia
A idéia do projeto é distribuir automaticamente os salários dos desenvolvedores de software usando o Github, proporcionalmente ao trabalho realizado. A tarefa principal, a tarefa que o contrato inteligente resolve ao mesmo tempo, evita que tenhamos que confiar no programa de distribuição de dinheiro e até permite que o usuário sem habilidades de programação verifique a distribuição correta dos fundos antes de transferir dinheiro
Pilha de tecnologia
Html e JavaScript (
biblioteca Node.js Waves),
código aberto no GitHub e
demonstração do projeto no Firebase Hosting
O processo
- O usuário seleciona o repositório GitHub e determina a quantidade total de salários
- O usuário faz um pagamento de 0,01 Waves (aproximadamente 0,02 dólares) para salvar dados no blockchain e criar um contrato inteligente
- O usuário verifica a exatidão dos dados e transfere a quantidade de salários para o endereço do contrato inteligente
- Os salários são compartilhados entre os desenvolvedores
Desenvolvimento
O melhor ponto de entrada para um desenvolvedor iniciante é o
console de demonstração , que contém um bom exemplo e um console para testar o código. Durante o desenvolvimento, é melhor usar uma
blockchain de teste , onde você pode obter 10 ondas de teste gratuitas com
um clique . Embora o Google ainda não encontre muitos exemplos devido à novidade da tecnologia, os contratos inteligentes estão bem
documentados e contêm todas as informações necessárias.
A biblioteca do NodeJs (1.4.0) já funciona bem em navegadores (com exceção da criação do Alias), mas, infelizmente, ainda não é compatível com o Google Functions ou React Native (os desenvolvedores do Waves
prometem corrigir isso em breve).
Contrato inteligente
Um contrato inteligente é criado para uma conta e verifica todas as ações dessa conta (com exceção das transferências de dinheiro recebidas):
let signature = base58'${currentWallet.keyPair.publicKey}'; match tx { case tx:TransferTransaction => { let employerAddress = addressFromPublicKey(tx.senderPk); let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes); let salary = extract(getLong(employerAddress, dateKey)); if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false } case _ => false }
Análise inteligente de contrato linha por linha
let signature = base58'${currentWallet.keyPair.publicKey}';
Aqui, salvamos a chave pública da carteira (seu JavaScript deve conter a variável currentWallet criada usando o comando Waves.Seed.create ()), para que apenas a conta do contrato inteligente da carteira (Smart Rewarding Project no nosso caso) possa transferir fundos.
match tx { case tx:TransferTransaction => {some validations} case _ => false }
Essa é a construção básica de qualquer contrato inteligente da Waves, informando que este contrato proíbe qualquer atividade que não seja a transferência de fundos (TransferTransaction). Portanto, após a criação de um contrato, é impossível alterar dados dos desenvolvedores (DataTransaction) ou alterar o próprio contrato inteligente (SetScript).
let employerAddress = addressFromPublicKey(tx.senderPk);
Ele usa o método base addressFromPublicKey da
biblioteca interna para obter o endereço do criador da solicitação de sua chave pública.
let dateKey = toBase58String(addressFromRecipient(tx.recipient).bytes);
O método base addressFromRecipient obtém o endereço do destinatário dos fundos
let salary = extract(getLong(employerAddress, dateKey));
O método getLong básico nos fornece dados armazenados na blockchain no endereço do criador da solicitação, que é o valor do salário do desenvolvedor. O contrato pode acessar os dados armazenados na blockchain Waves (e NÃO pode acessar os dados localizados em qualquer site ou servidor de terceiros).
if((salary == tx.amount) && sigVerify(tx.bodyBytes, tx.proofs[0], signature)) then true else false
É aqui que a verificação da quantidade e assinatura corretas. Verdadeiro significa que a transação será permitida e falso significa que a transação será negada. Assim, durante qualquer transferência de dinheiro desta conta, verifica-se que o dinheiro será enviado apenas para a carteira do desenvolvedor e no valor já armazenado na cadeia de blocos, no formato de um par de chaves de fácil leitura (endereço como chave e valor como valor), o que permite Confie no programa, verifique todos os dados por 5 a 10 segundos antes de transferir os salários.
Demonstração on-line do projeto na blockchain de teste, disponível
aquiAqui você pode ver o código do projeto.
Espero que o artigo tenha sido informativo e útil para você escrever seu primeiro contrato inteligente.