SourceLessExplorer · SourceLess AsgardSourceLess Asgard · chain 1313
LiveHeight23,698Head age4 sLast interval1 minFinality23,687Behind−11Pending0 / 8,192Tx in head0
XPlorer following the chain as its own read-only node

height 23698 of 23698 on the network. 9 peer(s) connected, 77 in its peer directory; 994 block(s) followed and 824 pulled in by sync since this follower started. Caught up: this follower holds every block any peer has claimed, so every panel below is the whole chain. Genesis 1cf8655125cc1bbb…, producers genesis.

What this follower is, locally

Following 7 seed(s) — their addresses are not published here, for the reason the peer table gives. Its store is held under its own Cerberus lease — no other node’s store is opened, touched or stopped.

The fork stack

A fork runs all of SourceLess, not only its seats: nodes of all three classes, discovery, hostless storage, contracts, STR.talk and the door. Nearly every part signs its records over the genesis hash, so it works on your fork as it does on Asgard and refuses anything signed for another chain. Each part below says how to run it against your fork, and what is not built. 4 built, 3 partly built, 1 not built.

Built

Nodes: all three classes

Every SourceLess node is one of three classes, set by how much it keeps. Only the two that keep a chain may seal, and only when the genesis gives them a seat.

Partly built

Praeco: how your nodes find each other

Praeco is hostless peer discovery: nodes publish self-signed records (an ed25519 and ML-DSA pair), exchange them with the peers they meet, and drop a record that fails five dials in a row. Records expire after 30 minutes.

Built

Hostless storage: your fork's database

Data with no server. A space (Oort) records on chain who may read it, its price and a manifest root; the content is never on chain. It is cut into encrypted 256 KiB chunks (Accretion) with Merkle proofs, so a peer holding chunks cannot read them. Records from a spreadsheet seal into a space (Stardust, from Kuiper's CSV import), and a reader can verify what it fetched against block headers without keeping the chain (Lagrange, --light).

Built

Smart contracts

Every contract template deploys on a fork: the same compiler gives the same bytecode, the same VM charges the same gas, and the same deployer and salt give the same address.

Partly built

STR.talk: messaging between your names

Threads between STR.domains, sealed end to end (Occultation). The chain records that a message was posted, who may read a thread, receipts and key epochs; the message itself is sealed to its readers.

Built

The door: signing in with an STR.domain

Thrymgjoll is the holder's door: an application a holder signs in to with their STR.domain. It holds no key. The wallet signs a challenge that carries the genesis hash, and the door checks it against the chain.

Not built

eSIM access to SourceLessNet

A phone's eSIM as a way in: the device carries, or unlocks, the key of an STR.domain, and the door admits it with the same challenge a wallet signs today.

Partly built

An explorer for your fork

This explorer, pointed at your fork. It follows your chain as a node does and shows its blocks, names, spaces, threads and contracts.

Nodes: all three classes

Built

What it is

Every SourceLess node is one of three classes, set by how much it keeps. Only the two that keep a chain may seal, and only when the genesis gives them a seat.

On your fork

The fork command starts the seats, each a Quasar. Any other node joins by being given your genesis file and a seat to dial: without a seat key it follows, validates and serves, which is the ordinary state of a follower. --network cannot name a fork, because a fork is in no register: --genesis is how a node is told which chain it is on.

ClassKeepsSealsUse it for
PulsarNo chain: a constant-size checkpointNeverA light node: a phone, a gateway, a reader that verifies without storing
QuasarFull state and the last 4,096 blocksIn turn, when it holds a seatThe default: every seat the fork command starts is one
SupernovaThe full archive, every blockIn turn, when it holds a seatThe archive your explorer and your auditors read from
# the genesis file is genesisFile in <data root>/fork.json; a seat's p2p address is in the banner
strblk node --class quasar    --genesis <your genesis.json> --peers <seat p2p>
strblk node --class supernova --genesis <your genesis.json> --peers <seat p2p>
strblk node --class pulsar    --genesis <your genesis.json> --peers <seat p2p>
strblk classes                # what each class keeps and may do

What it does not do yet

  • The fork command starts seats only: followers, archives and light nodes are yours to start.
  • Every seat port the command opens is loopback, so a node on another machine needs a seat you have published.

Praeco: how your nodes find each other

Partly built

What it is

Praeco is hostless peer discovery: nodes publish self-signed records (an ed25519 and ML-DSA pair), exchange them with the peers they meet, and drop a record that fails five dials in a row. Records expire after 30 minutes.

On your fork

Discovery is scoped twice, so a fork's nodes and Asgard's never form a session. Praeco refuses a record from another chain id, and the Bifrost handshake refuses a peer that follows a different genesis, even under the same chain id. The rendezvous points your nodes announce are derived from your genesis, so they are your fork's alone. A fork has no built-in seed list: its nodes are given --peers until you publish one.

strblk node ... --peers <seat p2p>,<seat p2p>   # who to dial first
strblk node ... --advertise <public host>       # the address your node announces
strblk beacon --genesis <your genesis.json>      # your chain's rendezvous points

What it does not do yet

  • Rendezvous is per chain, and read-only: every node announces points derived from its genesis hash and chain id, so your fork's points and Asgard's never coincide, and a node's status (/api/status on its operator port) counts the known peers that meet there. Nothing dials from them yet. Seeds and peer exchange are what connect a node today.
  • A published seed list must be public addresses: a node refuses to publish a loopback or private one.
  • The Kademlia lookup runs in shadow only (--peer-shadow).

Hostless storage: your fork's database

Built

What it is

Data with no server. A space (Oort) records on chain who may read it, its price and a manifest root; the content is never on chain. It is cut into encrypted 256 KiB chunks (Accretion) with Merkle proofs, so a peer holding chunks cannot read them. Records from a spreadsheet seal into a space (Stardust, from Kuiper's CSV import), and a reader can verify what it fetched against block headers without keeping the chain (Lagrange, --light).

On your fork

Every node the fork command starts mounts the hostless door, and every space record is signed over your fork's genesis hash, so a space on your fork exists only on your fork. The explorer's Spaces page lists them.

strblk space init --node <your fork's RPC>
strblk space create ... --node <your fork's RPC>
strblk space put | get [--light] | grant | revoke | rotate | holders ... --node <your fork's RPC>
strblk space import --from csv <file> ... --node <your fork's RPC>   # records into a space
strblk space export --to csv ...

What it does not do yet

  • A contract cannot read a space. A contract sees five things: its own address, the block time and height, a balance, and a transfer. The data lives in the space; the rules and the money live in the contract.
  • A public or paid space needs a business STR.domain.
  • A reader's wrapped key travels as a file: nothing on chain publishes a reader's key.
  • CSV is the only foreign source a command can open; the database adapters are in the code and not on the command line.
  • A light read verifies a header chain; it cannot say the chain it verified is the canonical one.

Smart contracts

Built

What it is

Every contract template deploys on a fork: the same compiler gives the same bytecode, the same VM charges the same gas, and the same deployer and salt give the same address.

On your fork

Fork contracts has a draft builder for each template: set its constants, see its bytecode and where it would land, and download the file to deploy to your fork.

strblk contract template <name> > <name>.ares
strblk wallet deploy <name>.ares --dry-run --address <you>
strblk wallet deploy <name>.ares --node <your fork's RPC>

What it does not do yet

  • Contract state never moves between chains.
  • No contract calls another contract, and none reads a space.

STR.talk: messaging between your names

Partly built

What it is

Threads between STR.domains, sealed end to end (Occultation). The chain records that a message was posted, who may read a thread, receipts and key epochs; the message itself is sealed to its readers.

On your fork

Every node the fork command starts mounts the STR.talk door, and every record is signed over your fork's genesis hash, so a thread on your fork is refused anywhere else. A participant needs an STR.domain on your fork.

strblk talk init | card | publish --node <your fork's RPC>
strblk talk open | post | read | thread | transcript ... --node <your fork's RPC>
strblk talk rekey | receipt | receipts ... --node <your fork's RPC>
strblk talk send | fetch | inbox ... --courier <a holder's RPC>

What it does not do yet

  • Delivery runs on a holder, and only when its operator turns it on. The courier (Talaria) is off by default and never runs on a validator seat: set SOURCELESS_TALK_COURIER=on for a node of your fork that seals no blocks. It holds sealed parcels it cannot read, within per-reader caps, for a week at most. It is not an archive.
  • No wallet inbox yet: sending and collecting messages is done with strblk talk.
  • The chain records that a rekey happened, not that the new key is new.

The door: signing in with an STR.domain

Built

What it is

Thrymgjoll is the holder's door: an application a holder signs in to with their STR.domain. It holds no key. The wallet signs a challenge that carries the genesis hash, and the door checks it against the chain.

On your fork

Point the door at your fork's node and it admits the names on your fork, and only them: a signature made for Asgard does not open a door on your fork.

strblk wallet gate --node <your fork's RPC> --gate-surface <your application> [--wallet <wallet URL>]
# loopback by default; anything else needs TLS: --gate-host and --public-origin

What it does not do yet

  • It signs nobody in on chain: a sign-in authorises nothing there.

eSIM access to SourceLessNet

Not built

What it is

A phone's eSIM as a way in: the device carries, or unlocks, the key of an STR.domain, and the door admits it with the same challenge a wallet signs today.

On your fork

Nothing in this build does it: there is no eSIM, SIM or mobile-profile code anywhere in it. What it would take is in the ideas, beside the other things a fork could have next.

What it does not do yet

  • Ideas for forks says what an eSIM door would need: a key held in the device's secure element, a provisioning partner, and the door's existing challenge.

An explorer for your fork

Partly built

What it is

This explorer, pointed at your fork. It follows your chain as a node does and shows its blocks, names, spaces, threads and contracts.

On your fork

Give it your genesis file, which is how it is told about a chain this build does not carry, and a seat to follow.

strblk explorer --genesis <your genesis.json> --peers <seat p2p> [--class supernova]

What it does not do yet

  • Its links to the wallet and the books point at SourceLess's own surfaces, not at yours.
  • Nothing reads the fork's manifest but the fork command: a dashboard pointed at a fork is not built.