LibertyNetLibertyNet para desenvolvedores

Início rápido

Do zero a uma chamada criptograficamente verificada contra a rede real. Sem cadastro, sem API key, sem dependências.

Quatro passos. O primeiro precisa apenas de curl; os demais, só de Node.js ou Python, sem pacotes para instalar. Todo o código desta página foi executado contra a rede real antes de ser publicado, e as saídas mostradas são as reais.

Informação

Não existe passo de cadastro. A descoberta na LibertyNet é pública. Você não está esperando uma chave — não existe chave. Se alguma página pedir que você solicite uma para ler a rede, essa página está errada.

1. Confirme que a rede está no ar

bash
curl -s https://registry.libertynet.ai/health
Resposta
{ "status": "ok", "service": "libertynet-registry-standalone", "count": 27 }

count é quantos nós o registro conhece agora. Implementado

2. Veja quem está na rede

bash
curl -s https://registry.libertynet.ai/nodes | head -c 400
Resposta (um nó)
{
  "did": "did:svrp:df9d4b9f390bc49b2210eca81ca3c54c4d63b37b739442a21e28f2ed5b8aa02d",
  "public_key": "df9d4b9f390bc49b2210eca81ca3c54c4d63b37b739442a21e28f2ed5b8aa02d",
  "capabilities": ["inference", "health:ready"],
  "region": "asia-southeast",
  "status": "active",
  "last_seen": "2026-07-31T16:33:08Z"
}
Aviso

status: "active" não significa online.

Um nó desligado na semana passada mantém esse valor para sempre — nada o redefine. O único campo que envelhece é last_seen, então a checagem de frescor é sua. O passo 3 faz isso corretamente.

É o erro inicial mais comum nesta rede.

3. Verifique uma identidade você mesmo

É aqui que a LibertyNet se diferencia, e vale os dois minutos.

Um DID da LibertyNet é autocertificável: o identificador é derivado da chave pública. Com apenas SHA-256 você confirma a alegação sem consultar diretório algum, sem perguntar a nenhuma autoridade certificadora e sem confiar na resposta que acabou de receber.

Salve como verify.py e execute. Nada para instalar.

verify.py
import hashlib, json, re, urllib.request

B58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

def b58decode(s):
    n = 0
    for c in s:
        i = B58.find(c)
        if i < 0:
            return None
        n = n * 58 + i
    raw = n.to_bytes((n.bit_length() + 7) // 8, "big")
    # base58 descarta bytes zero iniciais: restaure um por cada '1' à esquerda
    return b"\0" * (len(s) - len(s.lstrip("1"))) + raw

# O registro serve chaves em hex em /nodes e em base58 em /peers. Mesma chave.
def key_bytes(pk):
    if re.fullmatch(r"[0-9a-f]{64}", pk):
        return bytes.fromhex(pk)
    return b58decode(pk)

def verify_id_binding(did: str, public_key: str) -> bool:
    """Este DID realmente deriva desta chave pública?"""
    key = key_bytes(public_key)
    if not key or len(key) != 32:
        return False

    digest = hashlib.sha256(key).hexdigest()
    body = re.sub(r"^did:svrp:(?:[a-z]:)?", "", did)

    if len(body) == 64:
        return body == key.hex()        # forma hex completa
    if len(body) == 8:
        return body == digest[:8]       # forma curta
    if len(body) == 10:
        return body == digest[:10]      # reserva para colisão
    return False

with urllib.request.urlopen("https://registry.libertynet.ai/nodes", timeout=10) as r:
    nodes = json.load(r)["nodes"]

verified = sum(verify_id_binding(n["did"], n["public_key"]) for n in nodes)
print(f"{verified}/{len(nodes)} identidades verificadas")
Execução real, 2026-07-31
27/27 identidades verificadas

Você acabou de conferir criptograficamente todas as identidades da rede sem pedir permissão a ninguém. É esse o ponto.

Nota

Por que duas codificações de DID? A mesma chave aparece como forma curta did:svrp:n:<8hex> (SHA-256 truncado da chave) e como forma completa did:svrp:<64hex> (a própria chave). Vínculos guardam a curta; um daemon em execução anuncia a longa. É o mesmo nó. Comparar strings aqui divide um nó em dois.

4. Ou faça em uma linha

Tudo acima é o que o SDK faz por você, com a verificação não opcional.

python
from libertynet import LibertyNet

ln = LibertyNet()                  # verificação ligada; não dá para desligar
nodes = ln.discovery.online()      # apenas nós verificados e recentes

for n in nodes:
    print(n.did, n.region, ",".join(n.capabilities))

online() rejeita qualquer registro cuja identidade não verifique e descarta o que está sem reportar há tempo. Não existe flag para desativar essa checagem — um cliente que confia em identidades não verificadas não é um cliente que estejamos dispostos a publicar.

Próximos passos