Synsema Network · devnet · chain id 7960
A blockchain ondeos agentes são registrados.
Cada agente recebe um registro público: o hash do seu programa, quem o controla, o que tem permissão de fazer e onde roda, além das raízes do seu log de auditoria. Verificar um agente é ler o seu registro, não confiar em quem o opera.
Consultando a blockchain…
- Programa
- –SHA-256 do arquivo
.syndo agente, ou do módulo WASM que o inclui. - Controlador
- –O endereço que o registrou. Só este endereço pode ancorar o seu log de auditoria.
- Capacidades
- hash das suas linhas
requireO teto do que o agente pode fazer, como JSON canônico. - Ambiente
- medida de atestaçãoO enclave onde roda. Tudo zero nesta devnet: ainda não há enclave.
- Agent card
- –Onde o agente se descreve.
- Âncoras de auditoria
- –Raízes Merkle do seu log de auditoria, numeradas sem lacunas: a história não pode ser reescrita.
Usar
Do zero a um agente registrado, em cinco passos.
Obtenha um token no primeiro e todos os comandos abaixo se preenchem com ele e com o seu endereço; nada sai do seu navegador além das chamadas que você fizer.
-
Obtenha um token de acesso
Cada chamada ao RPC leva um token no caminho. Obtenha um aqui, na hora, ou num terminal com
curl -X POST https://synsema.network/token. Já tem um? Cole-o. -
Crie uma chave
Quaisquer 32 bytes aleatórios são uma chave. Guarde-a num arquivo
.envjunto aos seus programas: o Synsema a lê de lá e nunca a imprime.address.synmostra o endereço correspondente.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
-
Pegue SYN
SYN paga o gás. A torneira envia 100 SYN para um endereço, uma vez por hora por endereço.
Ou num terminal:
curl -X POST {{BASE}}/faucet -H 'content-type: application/json' \ -d '{"address": "{{ADDR}}"}' -
Registre um agente
Isto registra
agent.syn(qualquer programa Synsema;print("hello")basta) e imprime o seu id. Cada valor que movimenta dinheiro está escrito: nada é assinado com um padrão que você não viu.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}`) -
Leia o registro
Ler não precisa de chave nem de 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":[]}'
O guia completo, com o contrato e as armadilhas, está na documentação: synsema.dev ↗
Carteira
Adicione a uma carteira.
MetaMask, Rabby ou qualquer carteira EVM. Com o token verificado acima, um clique adiciona a rede; ou preencha os valores à mão.
| Nome da rede | Synsema Network devnet |
| URL do RPC | {{RPC}} |
| Chain id | 7960 |
| Símbolo da moeda | SYN (18 decimais) |
| Explorador de blocos | https://synsema.network/explorer |
Referência
O registro de agentes e o que saber sobre a blockchain.
Registro de agentes
{{REGISTRY}}
| Função | Quem |
|---|---|
| register(bytes32 programHash, bytes32 capsHash, bytes32 measurement, string agentURI) → id | qualquer pessoa |
| anchor(uint256 id, uint64 seq, bytes32 root) | o controlador; seq = último + 1 |
| count() → uint256 | leitura |
| get(uint256 id) → (owner, programHash, capsHash, measurement, agentURI, registeredAt) | leitura |
| lastSeq(uint256 id), lastRoot(uint256 id) | leitura |
Eventos: Registered(id, owner, programHash, agentURI) e Anchored(id, seq, root).
Bom saber
- Só são produzidos blocos quando há transações. Uma altura parada significa que a blockchain está ociosa, não travada.
- O nó guarda só o estado recente. Ler um bloco antigo responde
missing trie node. - A base fee é de 25 gwei. Use
max_fee=base_fee * 2 + priority; a gorjeta sugerida pode passar do dobro da base. - Os contratos são implantados com Foundry (
forge create); o Synsema pode chamá-los, mas ainda não criá-los. - A EVM vai até Cancun: compile com
evm_version = "cancun". - /status são os dados desta página em JSON, abertos a qualquer pessoa.