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.
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
curl -s https://registry.libertynet.ai/health{ "status": "ok", "service": "libertynet-registry-standalone", "count": 27 }count é quantos nós o registro conhece agora. Implementado
2. Veja quem está na rede
curl -s https://registry.libertynet.ai/nodes | head -c 400{
"did": "did:svrp:df9d4b9f390bc49b2210eca81ca3c54c4d63b37b739442a21e28f2ed5b8aa02d",
"public_key": "df9d4b9f390bc49b2210eca81ca3c54c4d63b37b739442a21e28f2ed5b8aa02d",
"capabilities": ["inference", "health:ready"],
"region": "asia-southeast",
"status": "active",
"last_seen": "2026-07-31T16:33:08Z"
}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.
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")27/27 identidades verificadasVocê acabou de conferir criptograficamente todas as identidades da rede sem pedir permissão a ninguém. É esse o ponto.
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.
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.