Módulos

Privacidade (Experimental)

Criptografia view-key para divulgação seletiva e transferências confidenciais.

arc_devkit.privacy traz primitivas experimentais de privacidade: criptografia view-key (funcional hoje, independente de qualquer protocolo on-chain) e um cliente para o futuro protocolo de transferências confidenciais da Arc.

Criptografia view-key

Construção ECIES padrão (ECDH efêmero sobre secp256k1 → HKDF-SHA256 → AES-256-GCM), construída sobre primitivas auditadas da biblioteca cryptography — não é criptografia caseira.

from arc_devkit.privacy.view_key import generate_view_keypair, encrypt_for_viewer, decrypt_as_viewer

# O destinatário gera seu par de chaves
viewer = generate_view_keypair()

# Qualquer um pode criptografar dados para a chave pública do viewer
payload = encrypt_for_viewer(viewer.public_key_bytes, b"saldo: 42.5 USDC")

# Só o dono da chave privada consegue decriptar
plaintext = decrypt_as_viewer(viewer.private_key, payload)

✦Testado contra chave errada e adulteração

decrypt_as_viewer() levanta exceção (InvalidTag) tanto para chave errada quanto para ciphertext adulterado — o AES-GCM garante autenticidade nativamente.

CLI

arcdevkit privacy generate-view-key
arcdevkit privacy encrypt <chave_publica_hex> "saldo: 42.5 USDC"

Transferências confidenciais (protocolo on-chain)

from arc_devkit.privacy.confidential_transfer import ConfidentialTransferClient

client = ConfidentialTransferClient(w3=get_web3(), contract_address="0xContratoConfidencial")
result = client.send_confidential(to="0xDestino", encrypted_amount=payload_bytes, private_key="0x...")

✕Protocolo ainda não exposto na Arc

ConfidentialTransferClient levanta erro sem um contract_address explícito — o protocolo de transferências confidenciais (baseado em TEE) da Arc ainda não está disponível nem em mainnet nem em testnet, em 18/09/2026.

Referência da API

Função/ClasseDescrição
generate_view_keypair()Gera um novo par de chaves secp256k1
encrypt_for_viewer(pubkey_bytes, plaintext)Retorna EncryptedPayload
decrypt_as_viewer(privkey, payload)Retorna o plaintext original
EncryptedPayload.to_hex() / .from_hex()Serialização para transporte
ConfidentialTransferClientCliente do contrato (experimental)