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…
- Programa
- –SHA-256 del archivo
.syndel 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
requireEl techo de lo que el agente puede hacer, como JSON canónico. - Entorno
- medida de atestaciónEl 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.
-
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. -
Crea una clave
Cualquier secuencia de 32 bytes aleatorios es una clave. Guárdala en un archivo
.envjunto a tus programas: Synsema la lee desde ahí y nunca la imprime.address.synmuestra la dirección que le corresponde.openssl rand -hex 32
.envL1_RPC={{RPC}} MY_KEY=the-64-hex-characters-from-openssladdress.synrequire secret("MY_KEY") print(eth_address(secret("MY_KEY")))synsema run address.syn
-
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}}"}' -
Registra un agente
Esto registra
agent.syn(cualquier programa Synsema; alcanza conprint("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}`) -
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]}`)cast call {{REGISTRY}} "count()(uint256)" --rpc-url {{RPC}} cast call {{REGISTRY}} "get(uint256)(address,bytes32,bytes32,bytes32,string,uint64)" 0 --rpc-url {{RPC}} cast balance {{ADDR}} --ether --rpc-url {{RPC}}curl -s {{RPC}} -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
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 red | Synsema Network devnet |
| URL del RPC | {{RPC}} |
| Chain id | 7960 |
| Símbolo de la moneda | SYN (18 decimales) |
| Explorador de bloques | https://synsema.network/explorer |
Referencia
El registro de agentes y lo que conviene saber de la cadena.
Registro de agentes
{{REGISTRY}}
| Función | Quién |
|---|---|
| register(bytes32 programHash, bytes32 capsHash, bytes32 measurement, string agentURI) → id | cualquiera |
| anchor(uint256 id, uint64 seq, bytes32 root) | el controlador; seq = último + 1 |
| count() → uint256 | lectura |
| 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.