contrato_biblia

Crates.iocontrato_biblia
lib.rscontrato_biblia
version1.0.1
created_at2025-10-15 19:43:18.744902+00
updated_at2025-10-22 18:40:23.751149+00
descriptionUma biblioteca Rust para um smart contract na blockchain Stellar (Soroban) focado em uma aplicação da Bíblia Sagrada.
homepage
repositoryhttps://github.com/josiasdev/contrato_biblia
max_upload_size
id1884855
size99,995
Josias Batista (josiasdev)

documentation

README

Contrato Bíblia (Stellar/Soroban)

Rust Stellar WebAssembly

Uma biblioteca Rust para um smart contract na blockchain Stellar (Soroban) focado em uma aplicação social e de estudo da Bíblia Sagrada.

Tecnologias Utilizadas

  • Linguagem: Rust (Edição 2021)
  • Blockchain: Stellar (Futurenet)
  • Plataforma de Smart Contracts: Soroban
  • SDK: soroban-sdk
  • Ferramenta de Linha de Comando: stellar-cli

Funcionalidades

Autenticidade de Textos: Verificação da integridade de textos bíblicos usando hashes SHA-256.
Prova de Leitura: Sistema de registro de progresso de leitura na blockchain.
Sistema de Recompensas: Rastreia o progresso de leitura e emite eventos (via backend) para a distribuição de tokens (TAL) quando um livro é concluído.
Reflexões Pessoais: Usuários podem escrever e armazenar reflexões (públicas ou privadas) sobre passagens.
Engajamento Social: Sistema de curtidas e comentários para promover a interação comunitária.
Gerenciamento de Comentários: Usuários podem adicionar e remover seus próprios comentários.
Moderação: Sistema de status para gerenciamento e moderação de reflexões.
Testes Abrangentes: Cobertura de testes unitários para todas as principais funcionalidades.
Documentação e Tipagem Segura: Código totalmente documentado e com tipos de dados bem definidos.

Como Compilar e Usar

Siga os passos abaixo para compilar, implantar e interagir com este contrato.

Pré-requisitos

Antes de começar, garanta que você tenha as seguintes ferramentas instaladas:

rustup target add wasm32-unknown-unknown
  • Stellar CLI:
npm install -g stellar-cli

1. Compilação

Clone este repositório:

git clone https://github.com/josiasdev/contrato_biblia
cd contrato_biblia

Para compilar o contrato para WASM, execute:

stellar contract build

Este comando criará o arquivo contrato_biblia.wasm no diretório target/wasm32-unknown-unknown/release/.

2. Implantação (Deploy)

Para implantar o contrato, você precisará de uma conta na rede de testes futurenet.

  1. Crie e Funde uma Conta:

    # Crie uma identidade como admin
    stellar keys generate admin --network testnet --fund
    
    # Obtenha o endereço público
    ADMIN_ADDRESS=$(stellar keys address admin)
    

    Use o Friendbot da Futurenet para obter XLM de teste

    Acesse: Friendbot: fund a futurenet network account

  2. Implante o Contrato:

    stellar contract deploy \
      --wasm target/wasm32-unknown-unknown/release/contrato_biblia.wasm \
      --source-account admin \
      --network futurenet \ --alias contrato_biblia
    

    Guarde o ID do Contrato (ex: C...) retornado por este comando.

3. Inicialização

Após a implantação, o contrato precisa ser inicializado com o endereço do administrador.

# Substitua as variáveis pelos seus valores
ID_DO_CONTRATO="C..."
ADMIN_ADDRESS=$(stellar keys address admin) 

stellar contract invoke \
  --id $ID_DO_CONTRATO \
  --source-account admin \
  --network futurenet \
  -- \
  initialize \
  --admin $ADMIN_ADDRESS

Exemplos de Invocação de Funções

Nota Importante: Este contrato usa uma struct IdTexto para identificar versículos. Ao invocar pela CLI, devemos passar um JSON.

# Helper: JSON para Gênesis 1:1 (Livro 1, Cap 1, Verso 1)
ID_TEXTO_JSON='{"livro":1,"capitulo":1,"versiculo":1}'

Registrando o Hash de um Versículo (Apenas Admin)

O administrador pode registrar o hash de Gênesis 1:1.

ID_DO_CONTRATO="..."
HASH_GEN_1_1="f2e9a224a50ee5118533e4544253966a348003183a69620596323145f15a201b"

stellar contract invoke \
  --id $ID_DO_CONTRATO \
  --source-account meu_admin \
  --network futurenet \
  -- \
  registrar_hash \
  --id_texto $ID_TEXTO_JSON \
  --hash $HASH_GEN_1_1

Marcando um Versículo como Lido (Qualquer Usuário)

Um usuário (com uma conta leitor_josias fundada) pode marcar Gênesis 1:1 como lido.

stellar keys generate leitor --network futurenet
LEITOR_ADDRESS=$(stellar keys address leitor)

ID_DO_CONTRATO="..."
LEITOR_ADDRESS=$(stellar keys address leitor)


stellar contract invoke \
  --id $ID_DO_CONTRATO \
  --source leitor \
  --network futurenet \
  -- \
  marcar_lido \
  -- leitor $LEITOR_ADDRESS \
  --id_texto $ID_TEXTO_JSON

O resultado esperado é: "Leitura registrada e progresso atualizado!"

Verificando a Leitura de um Usuário

Qualquer pessoa pode verificar se leitor leu o versículo.

ID_DO_CONTRATO="..."
LEITOR_ADDRESS=$(stellar keys address leitor)

stellar contract invoke \
  --id $ID_DO_CONTRATO \
  --source admin \
  --network futurenet \
  -- \
  verificar_leitura \
  --leitor $LEITOR_ADDRESS \
  --id_texto $ID_TEXTO_JSON

O resultado esperado no terminal será uma String descritiva:

"Leitura confirmada!"

Ou, caso o registro não exista:

"Registro de leitura não encontrado."

Funções Sociais (Reflexões)

Adicionando uma Reflexão Pública

O leitor_josias adiciona uma reflexão sobre Gênesis 1:1.

stellar contract invoke \
  --id $CONTRACT_ID \
  --source leitor_josias \
  --network futurenet \
  -- \
  adicionar_reflexao \
  --leitor $LEITOR_ADDRESS \
  --id_texto $ID_TEXTO_JSON \
  --conteudo "Esta passagem é a base de tudo." \
  --publica true

Curtindo uma Reflexão

Um segundo usuário (leitora_ana) curte a reflexão do Josias.

# 1. Crie e funde a conta da 'leitora_ana'
stellar keys generate leitora_ana --network futurenet
# ... use o Friendbot

# 2. Invoque a função curtir_reflexao
stellar contract invoke \
  --id $CONTRACT_ID \
  --source leitora_ana \
  --network futurenet \
  -- \
  curtir_reflexao \
  --curtidor $(stellar keys address leitora_ana) \
  --id_texto $ID_TEXTO_JSON \
  --autor_reflexao $LEITOR_ADDRESS

Comentando em uma Reflexão

A leitora_ana também deixa um comentário.

stellar contract invoke \
  --id $CONTRACT_ID \
  --source leitora_ana \
  --network futurenet \
  -- \
  comentar_reflexao \
  --comentarista $(stellar keys address leitora_ana) \
  --id_texto $ID_TEXTO_JSON \
  --autor_reflexao $LEITOR_ADDRESS \
  --conteudo "Concordo plenamente! Ótima reflexão."

Listando Reflexões Públicas

Qualquer pessoa pode listar as reflexões públicas de uma passagem (com paginação).

stellar contract invoke \
  --id $CONTRACT_ID \
  --network futurenet \
  -- \
  listar_reflexoes_publicas \
  --id_texto $ID_TEXTO_JSON \
  --limite 10 \
  --offset 0

O resultado será um vetor (Vec) contendo a estrutura completa da reflexão do leitor_josias.


Sistema de Recompensas (Token TAL)

1. (Admin) Registrar a Meta de um Livro

O admin define quantos versículos um livro tem para que o contrato saiba quando a leitura foi concluída.

# Exemplo: Definindo Gênesis (livro 1) com 1533 versículos
stellar contract invoke \
  --id $CONTRACT_ID \
  --source admin \
  --network futurenet \
  -- \
  registrar_meta_livro \
  --livro_id 1 \
  --total_versiculos 1533

2. (Usuário) Reivindicar Recompensa por Livro Concluído

Após ler todos os versículos (ex: 1533 de Gênesis), o usuário chama esta função. Ela não envia o token, mas emite um evento que um backend off-chain deve ouvir.

stellar contract invoke \
  --id $CONTRACT_ID \
  --source leitor_josias \
  --network testnet \
  -- \
  reivindicar_recompensa_livro \
  --leitor $LEITOR_ADDRESS \
  --livro_id 1

Se for bem-sucedido, a transação será concluída e o evento RecompensaReivindicada será emitido na blockchain para o backend processar o pagamento do token TAL.

Licença

Este projeto é distribuído sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

Commit count: 0

cargo fmt