Caso de Uso do Gate 3 (Crédito Colateralizado em TPFt)
Este documento descreve os passos técnicos necessários para executar o caso de uso do Gate 3 dentro do projeto Drex, utilizando a solução de privacidade Hamsa Privacy.
Visão Geral
O cenário proposto simula um empréstimo colateralizado entre duas instituições financeiras distintas, cada uma operando em sua própria instância de Layer 2 (L2), com a liquidação final ocorrendo em uma Layer 1 (L1) compartilhada.
A comunicação entre os nós é realizada por meio de relayers, e os contratos inteligentes são implantados localmente em cada instância. O processo envolve preparação do ambiente, configuração de variáveis, execução de scripts, verificação de saldos e uso de uma interface gráfica de apoio.
Todos os elementos deste fluxo são auditáveis, e os processos estão totalmente alinhados com os requisitos regulatórios de rastreabilidade, independência operacional e garantia de privacidade.
Pré-requisitos
Este guia parte do pressuposto de que:
- Ambas as instâncias Hamsa Privacy já estão instaladas e operacionais
- Os fundos foram transferidos da Layer 1 para a Layer 2
Você precisará de dois componentes separados:
- O ambiente de contratos inteligentes baseado em Hardhat
- A aplicação web (interface gráfica) para interagir com os contratos implantados
Se estiver simulando dois participantes localmente, repita o processo de configuração duas vezes — uma para cada nó.
Implantação de Contratos Inteligentes e Execução do Relayer (Hardhat)
1.1 hardhat.config.js
- No campo networks.server_L2, insira a URL RPC, por exemplo, “http://134.33.254.24:8123“, da sua instância Hamsa Privacy, substituindo a string vazia.
- No campo networks.server_L2_partner, insira a URL RPC, por exemplo, “http://135.33.254.24:8123“ da instância Hamsa Privacy da instituição parceira, também substituindo a string vazia.
Esses endpoints devem estar acessíveis localmente e pelo processo relayer.js.
1.2 demo_config.js
Edite e configure as seguintes variáveis:
Endereços dos contratos de infraestrutura, definidos durante a sua instalação do Hamsa Privacy:
poseidon_hash_address
poseidon_t4_address
dvp_match_address
l1_verifier_address
l1_event_address
l1_bridge_address
l1_tmsc_address
l1_erc20_address
l1_erc1155_address
l2_tmsc_address
l2_escrow_address
loanTpftId
Esses endereços devem coincidir com os utilizados pela instituição parceira.
Configurações operacionais:
- user_sk: chave privada usada para implantar os contratos e participar do fluxo de empréstimo. Este endereço deve possuir saldo em:
DREX
TPFT
Token nativo (para gás)
- l1_bank_address: endereço na L1 do banco da sua instituição, responsável por depositar fundos na L2
- partner_user_l2_address: endereço do usuário na L2 do nó da contraparte
- partner_l1_bank_address: endereço na L1 do banco parceiro que depositou fundos para partner_user_l2_address
- partnerLoanProxyAddress: endereço do contrato de empréstimo da contraparte, monitorado pelo seu relayer
- relayer_user_sk: chave privada usada pelo seu relayer para assinar transações na rede da contraparte
Esse endereço deve ter saldo em token nativo (gás)
Importante: Os endereços de tokens e contratos na Layer 1 devem ser idênticos entre as duas instituições para garantir compatibilidade.
Comunicação Entre Nós via Relayers
Cada instituição deve operar um relayer para se comunicar com a instância Hamsa Privacy da contraparte.O relayer da contraparte também deve estar ativo e abastecido com gás. Essa comunicação bidirecional é necessária para garantir a sincronização e entrega das mensagens entre os dois nós.
Embora ambientes de produção possam futuramente utilizar protocolos externos de mensageria (como APIs HTTP ou gravações criptografadas em L1), este caso de uso assume comunicação direta entre relayers.
Execução de Scripts
3.1 deploy_loan_contracts.js
Dentro do script, defina um pairIdentifier compartilhado. Esse valor exclusivo é utilizado para gerar os hashes criptográficos das transações DVP (Delivery versus Payment).
Esse identificador deve ser o mesmo nos dois nós para garantir a consistência dos hashes.
3.2 Instruções passo a passo
a) Certifique-se de que o endereço associado a user_sk possua saldo suficiente em:
- DREX
- TPFT
- Token nativo (para gás)
Você pode validar os saldos utilizando o script:
check-privacy-balances
b) Implemente os contratos de empréstimo com:
deploy\_loan\_contracts.js
c) Após a implantação, copie os endereços dos contratos:
- loanProxyAddress
- lienAddress
E atualize esses valores no arquivo:
demo\_config.js
d) Verifique os valores de l1_bank_address.
Esses endereços serão utilizados na liquidação final na L1.
Lembre-se de que os endereços de depósito na L1 são diferentes dos endereços de usuário na L2.
e) Execute uma transação de teste para validar os contratos:
sanity-test-privacy
f) Inicie o relayer e confirme que ele está ocioso e escutando eventos:
relayer.js
Interface Gráfica (Aplicação Web)
4.0 Finalidade e contexto
A interface web permite aos usuários interagir com os contratos implantados, executar ações de empréstimo e acompanhar em tempo real os saldos e o status das transações. Ela simplifica os testes ao permitir:
- Aprovação de DREX
- Criação de ofertas de empréstimo
- Validação do recebimento pela contraparte
- Confirmação visual da sincronização entre L1 e L2
A interface simula o comportamento esperado em produção, com transparência e acessibilidade para reguladores e desenvolvedores.
4.1 Instalação
a) Instale as seguintes dependências:
Node.js v18.18.2 (use o comando node -v)
npm v9.8.1 (use o comando npm -v)
b) Instale os pacotes do projeto:
npm install
c) Crie o arquivo .env.local com base em .env.example, e defina todas as variáveis de ambiente necessárias para a sua instância, definidos durante a sua instalação do Hamsa Privacy:
VITE_L1_TMSC_ADDRESS="0x... (L1 TMSC Address)"
VITE_L1_ERC20_ADDRESS="0x... (Address of the ERC20 token deposited in the L1 Bridge)"
VITE_L1_ERC1155_ADDRESS="0x... (Address of the ERC1155 token deposited in the L1 Bridge)"
VITE_LOAN_TPFT_ID="3 (Token ID of the deposited TPFt)"
VITE_LOAN_PROXY_ADDRESS="0x... (Address of the Loan Proxy contract)"
VITE_SIMPLE_REPAYMENT_ADDRESS="0x... (Address of the Repayment contract)"
VITE_LIQUIDATOR_ADDRESS="0x... (Address of the Liquidation contract)"
VITE_LIEN_ADDRESS="0x... (Address of the Lien contract)"
VITE_BANK_ADMIN_ADDRESS="0x..." (The address of your bank on L1, which deposited the tokens defined above on L2.)
VITE_L1_NAME="DREX Network"
VITE_L1_RPC="http://example.com/drex/rpc"
VITE_L1_CHAIN_ID="369..."
VITE_L2_NAME="L2 of Institution X"
VITE_L2_RPC="http://example.com/institution/rpc"
Se necessário, consulte os scripts backend para confirmar os parâmetros esperados.
d) Inicie o servidor de desenvolvimento:
npm run dev
4.2 Execução e Validação Funcional
a) Abra a aplicação em seu navegador via localhost.
Verifique se os saldos da conta L2 e do banco L1 estão sendo exibidos corretamente.
- Sua conta L2 deve conter:
DREX
TPFT
Token nativo (visível no Metamask)
- O banco parceiro também deve conter saldo em DREX.
b) Verifique o campo “Gravame” na parte inferior esquerda da interface.
Ele deve exibir 0 TPFTs inicialmente.
c) Confirme que o script relayer.js ainda está em execução e recebendo eventos.
d) Pela interface:
- Aprove DREX
- Crie uma oferta de empréstimo
- Clique no link gerado para validar a transação
e) Confirme, pela interface da contraparte, se a oferta foi recebida corretamente na instância L2 do parceiro.

Updated 5 months ago
