Multi-Issuer Portable Asset Lab

One portable asset, issued jointly by independent domains. It carries its issuers, their signatures and the rules for moving it, and finds the services that can authorize a transfer through each issuer's own domain.

Checking this domain…

The lab is disabled on this domain. It stays off until its configuration, key, permissions and isolation checks all pass.

Test identities, not wallets. Owners are test keys generated in this tab with Web Crypto (ECDSA P-256) and kept only in this tab's session storage. They disappear when the tab closes and cannot be recovered; use "Export identities" if you want to bring them back. Nothing here is a durable production wallet, and the server never sees a private key.

Test identities (this browser only)

NameKey idOwns

1. Create and jointly issue an asset

You get a private test session. Create a test certificate owned by Alice, then ask each issuing domain to approve its issuance. Each domain fetches the same definition from the registry, checks it against its own pinned roster, keys, policies and limits, and signs with its own key. No wallet and no administrator token.

This is an approving domain. Assets are created on ; when asked, this domain fetches the definition from there, validates it under its own rules and signs. Paste an asset id or an exported asset below to see this domain's own independent verification.

Asset

Asset id
Class / metadata
Definition digest (sha-256)
Status at this registry
Current owner
Original issuance
…
Current ownership
…

Issuers and quorum

Issuance quorum
0/2

Authorization policy carried by the asset

Service discovery (resolved now from each issuer's own domain)

IssuerResultSeqKeyServices found

The asset stores only each issuer's identity key and manifest location, never an endpoint. If a service moves, the issuer publishes a new signed manifest and this table shows the new address with no change to the asset.

2. Transfer ownership

The current owner signs this exact transfer in the browser. Then each issuing domain independently fetches the transaction from the registry, verifies the asset, the ownership evidence and the owner's signature, and signs; the registry executes only after verifying the whole approval certificate against the current ownership state.

Transfer quorum
0/2
pending
Transfer id
Canonical transfer digest
Digest recomputed in this browser
Owner authorization

Signed receipt

No receipt yet: the transfer has not executed.

Export and import (portable JSON)

The exported file contains the asset id, issuer identities and keys, the complete roster, the issuance signatures, the signed issuance and transfer policies, discovery references and capabilities, the ownership authority and the signed ownership history. It is verified here with Web Crypto. A file on its own can prove who issued the asset and how it has changed hands, but not what is current: only the registry can say that.

Original issuance
Current ownership
IssuerDiscoveryServices

History and domain-to-domain events

Server-side events as they happened, including every rejected attempt and every request one domain made to another.

Show the portable asset JSON

What this proves, and what it does not. Each issuing domain signs only after validating the asset itself under its own pinned configuration, and the registry executes only a transfer the current owner signed and a satisfied approval certificate. This is not atomic settlement across independent ledgers and not Byzantine fault tolerant consensus: one designated state authority holds ownership state and could withhold or roll back history, which a fresh signed state attestation and the signed history make detectable but not impossible.

Forged signatures, tampered metadata, duplicate approvals, replays, stale state, competing transfers, unavailable peers, restarts and service relocation are exercised by test/manual-multi-issuer-php.js, not by controls here. Public sessions are limited, rate-limited and expire.