Devnet. El estado se puede reiniciar en cualquier momento y el SYN de aquí no tiene valor. Producción arrancará desde un génesis nuevo.
synsemanetwork

Synsema Network · devnet · chain id 7960

La cadena dondese registran los agentes.

Cada agente tiene un registro público: el hash de su programa, quién lo controla, qué tiene permitido hacer y dónde corre, además de las raíces de su registro de auditoría. Comprobar un agente es leer su registro, no confiar en quien lo opera.

Consultando la cadena…

Empezar Abrir el explorador Verificar un pago

Último agente en la cadenacargando
Programa
SHA-256 del archivo .syn del agente, o del módulo WASM que lo incluye.
Controlador
La dirección que lo registró. Solo esta dirección puede anclar su registro de auditoría.
Capacidades
hash de sus líneas require
El techo de lo que el agente puede hacer, como JSON canónico.
Entorno
medida de atestación
El enclave donde corre. Todo en ceros en esta devnet: todavía no hay enclave.
Agent card
Donde el agente se describe a sí mismo.
Anclas de auditoría
Raíces Merkle de su registro de auditoría, numeradas sin huecos: la historia no se puede reescribir.

Usarla

De cero a un agente registrado, en cinco pasos.

Consigue un token en el primero y todos los comandos de abajo se completan con él y con tu dirección; nada sale de tu navegador salvo las llamadas que hagas.

  1. Consigue un token de acceso

    Cada llamada al RPC lleva un token en la ruta. Obtén uno aquí, al instante, o desde una terminal con curl -X POST https://synsema.network/token. ¿Ya tienes uno? Pégalo.

  2. Crea una clave

    Cualquier secuencia de 32 bytes aleatorios es una clave. Guárdala en un archivo .env junto a tus programas: Synsema la lee desde ahí y nunca la imprime. address.syn muestra la dirección que le corresponde.

    openssl rand -hex 32
    .env
    L1_RPC={{RPC}}
    MY_KEY=the-64-hex-characters-from-openssl
    address.syn
    require secret("MY_KEY")
    print(eth_address(secret("MY_KEY")))
    synsema run address.syn
  3. Consigue SYN

    SYN paga el gas. El grifo envía 100 SYN a una dirección, una vez por hora por dirección.

    O desde una terminal:

    curl -X POST {{BASE}}/faucet -H 'content-type: application/json' \
      -d '{"address": "{{ADDR}}"}'
  4. Registra un agente

    Esto registra agent.syn (cualquier programa Synsema; alcanza con print("hello")) e imprime su id. Cada valor que mueve dinero está escrito: nada se firma con un valor por defecto que no viste.

    register.syn
    -- synsema run register.syn
    require env("L1_RPC")
    require secret("MY_KEY")
    require sign("MY_KEY")
    require net("synsema.network")
    require file.read("agent.syn")
    
    let url be env("L1_RPC")
    let registry be "{{REGISTRY}}"
    let k be secret("MY_KEY")
    let me be eth_address(k)
    
    -- the record: program, capabilities, environment, agent card
    let program_hash be sha256(read_file("agent.syn"))
    let caps_hash be sha256('["net"]')
    let measurement be int_to_bytes(0, 32)
    let uri be "https://example.org/.well-known/agent-card.json"
    let data be abi_encode("register(bytes32,bytes32,bytes32,string)", [program_hash, caps_hash, measurement, uri])
    
    -- build, sign, send, wait
    let fees be eth_fee_history(url)
    let tx be tx_eip1559({"chain_id": 7960, "nonce": eth_nonce(url, me), "to": registry, "value": 0,
        "gas": eth_estimate_gas(url, {"from": me, "to": registry, "data": data}) * 2,
        "max_fee": fees["base_fee"] * 2 + fees["priority"], "max_priority": fees["priority"], "data": data})
    let hash be eth_send_raw(url, tx_eip1559_raw(tx, secp256k1_sign(tx["digest"], k)))
    let receipt be eth_wait_receipt(url, hash, 1, 60)
    assert(receipt != nothing and receipt["status"] == 1, "the registration did not go through")
    
    let n be abi_decode("uint256", eth_call(url, {"to": registry, "data": abi_encode("count()", [])}))[0]
    print(`registered as agent {n - 1}, tx {hash}`)
  5. Lee el registro

    Leer no necesita clave ni SYN.

    require env("L1_RPC")
    require net("synsema.network")
    
    let url be env("L1_RPC")
    let registry be "{{REGISTRY}}"
    task call(sig, args)
        give eth_call(url, {"to": registry, "data": abi_encode(sig, args)})
    
    let n be abi_decode("uint256", call("count()", []))[0]
    print(`{n} agents on chain {eth_chain_id(url)}`)
    let a be abi_decode("(address,bytes32,bytes32,bytes32,string,uint64)", call("get(uint256)", [0]))
    print(`agent 0: controller {a[0]}, card {a[4]}`)

La guía completa, con el contrato y las trampas, está en la documentación: synsema.dev ↗

Billetera

Agrégala a una billetera.

MetaMask, Rabby o cualquier billetera EVM. Con el token comprobado arriba, un clic agrega la red; o carga los valores a mano.

Nombre de la redSynsema Network devnet
URL del RPC{{RPC}}
Chain id7960
Símbolo de la monedaSYN (18 decimales)
Explorador de bloqueshttps://synsema.network/explorer

Referencia

El registro de agentes y lo que conviene saber de la cadena.

Registro de agentes

{{REGISTRY}}

FunciónQuién
register(bytes32 programHash, bytes32 capsHash, bytes32 measurement, string agentURI) → idcualquiera
anchor(uint256 id, uint64 seq, bytes32 root)el controlador; seq = último + 1
count() → uint256lectura
get(uint256 id) → (owner, programHash, capsHash, measurement, agentURI, registeredAt)lectura
lastSeq(uint256 id), lastRoot(uint256 id)lectura

Eventos: Registered(id, owner, programHash, agentURI) y Anchored(id, seq, root).

Conviene saber

  • Solo se producen bloques cuando hay transacciones. Una altura que no se mueve significa que la cadena está quieta, no trabada.
  • El nodo guarda solo el estado reciente. Leer un bloque viejo responde missing trie node.
  • La base fee es de 25 gwei. Usa max_fee = base_fee * 2 + priority; la propina sugerida puede superar el doble de la base.
  • Los contratos se despliegan con Foundry (forge create); Synsema puede llamarlos pero todavía no crearlos.
  • La EVM llega hasta Cancun: compila con evm_version = "cancun".
  • /status son los datos de esta página en JSON, abiertos a cualquiera.