Devnet. O estado pode ser reiniciado a qualquer momento e o SYN daqui não tem valor. A produção começará de um gênesis novo.
synsemanetwork

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…

Começar Abrir o explorador Verificar um pagamento

Último agente na blockchaincarregando
Programa
SHA-256 do arquivo .syn do 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 require
O teto do que o agente pode fazer, como JSON canônico.
Ambiente
medida de atestação
O 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.

  1. 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.

  2. Crie uma chave

    Quaisquer 32 bytes aleatórios são uma chave. Guarde-a num arquivo .env junto aos seus programas: o Synsema a lê de lá e nunca a imprime. address.syn mostra o endereço correspondente.

    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. 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}}"}'
  4. 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}`)
  5. 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]}`)

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 redeSynsema Network devnet
URL do RPC{{RPC}}
Chain id7960
Símbolo da moedaSYN (18 decimais)
Explorador de blocoshttps://synsema.network/explorer

Referência

O registro de agentes e o que saber sobre a blockchain.

Registro de agentes

{{REGISTRY}}

FunçãoQuem
register(bytes32 programHash, bytes32 capsHash, bytes32 measurement, string agentURI) → idqualquer pessoa
anchor(uint256 id, uint64 seq, bytes32 root)o controlador; seq = último + 1
count() → uint256leitura
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.