> ## Documentation Index
> Fetch the complete documentation index at: https://docs.giwa.tokscale.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Dojang: On-Chain Attestations

> Learn how Tokscale reads Dojang as provenance, publishes its own schemas permissionlessly, and what official issuer status would add.

<img src="https://mintcdn.com/tokscale-giwa/PZ-qe7GbREC4q3PR/public/assets/dojang.png?fit=max&auto=format&n=PZ-qe7GbREC4q3PR&q=85&s=431398431d940f4cf350947c7dc73a53" alt="GIWA Dojang" style={{display:'block',margin:'0 auto 2.5rem',width:'100%',maxWidth:'700px',borderRadius:'12px'}} width="2560" height="1440" data-path="public/assets/dojang.png" />

Dojang (도장, the seal) is GIWA's attestation service: trusted off-chain facts issued as on-chain attestations, with zero PII on-chain. It is built entirely on Ethereum Attestation Service (EAS), deployed at the standard OP Stack predeploy slots, with a GIWA issuer and schema framework on top.

The key design property: identity lives as attestations *about* an address, never as tokens *owned by* an address. That makes Dojang credentials non-transferable by construction, the exact property ERC-8004 lacks, and Dojang gets it for free. This is the same property the [Builder Passport](/builder-passport/overview) inherits.

## Attestation types

| Attestation type | Schema content                                       | What it proves                                                                                              |
| ---------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Verified Address | `bool isVerified`                                    | This wallet passed KYC with the issuer (currently Upbit Korea; a TESTNET FAUCET attester exists on Sepolia) |
| Balance Root     | `coinType, snapshotAt, leafCount, totalAmount, root` | Merkle root summarizing all users' balances at a snapshot                                                   |
| Verified Balance | `balance, salt, proofs[]`                            | Per-user merkle proof against the Balance Root: provable without revealing anyone else's balance            |
| Verified Code    | `codeHash, domain`                                   | An off-chain OTP verified on-chain                                                                          |

Tokscale's Usage Root design borrows the Balance Root / Verified Balance pattern directly: a public commitment with private per-user proofs. See [Evidence Ladder](/builder-passport/evidence-ladder).

## Contract architecture (public GIWA Sepolia, chain ID 91342)

EAS itself sits at the OP Stack predeploy slots, permissionless. GIWA's framework sits on top. All addresses below are live on public GIWA Sepolia:

| Contract                   | Address                                                                                                                             | Role                                                                 |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| SchemaRegistry (predeploy) | [`0x4200000000000000000000000000000000000020`](https://sepolia-explorer.giwa.io/address/0x4200000000000000000000000000000000000020) | Read schema records                                                  |
| EAS (predeploy)            | [`0x4200000000000000000000000000000000000021`](https://sepolia-explorer.giwa.io/address/0x4200000000000000000000000000000000000021) | Issue and read attestations                                          |
| SchemaBook                 | [`0x78cBb3413FBb6aF05EF1D21e646440e56baE3AD6`](https://sepolia-explorer.giwa.io/address/0x78cBb3413FBb6aF05EF1D21e646440e56baE3AD6) | Registry of Dojang schemas                                           |
| DojangAttesterBook         | [`0xDA282E89244424E297Ce8e78089B54D043FB28B6`](https://sepolia-explorer.giwa.io/address/0xDA282E89244424E297Ce8e78089B54D043FB28B6) | Registry of authorized official issuers                              |
| AttestationIndexer         | [`0x9C9Bf29880448aB39795a11b669e22A0f1d790ec`](https://sepolia-explorer.giwa.io/address/0x9C9Bf29880448aB39795a11b669e22A0f1d790ec) | Indexes Dojang attestations                                          |
| AddressDojangResolver      | [`0x692009FE206C3F897867F6BF7B5B45506B747F9e`](https://sepolia-explorer.giwa.io/address/0x692009FE206C3F897867F6BF7B5B45506B747F9e) | Per-schema EAS hooks fired on issue/revoke (Verified Address schema) |
| DojangScroll               | [`0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9`](https://sepolia-explorer.giwa.io/address/0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9) | Convenience read contract: `isVerified(address, bytes32 attesterId)` |

The documented Verified Address schema UID is `0x072d75e18b2be4f89a13a7147240477481c4b526d5795802acba59046b426e08` and its schema text is `bool isVerified`. Reading a Verified Address result is one call to `DojangScroll.isVerified`, and GIWA's docs ship a \~10-line `onlyVerified` Solidity modifier. Attester IDs are namespaced (`keccak256("dojang.dojangattesterids.<issuer>")`), making the system multi-issuer by design; external issuers are explicitly invited.

## The three permission lanes

| Lane                   | Contracts            | Permission     | Tokscale's position                                                                                                     |
| ---------------------- | -------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Read + gate            | DojangScroll → EAS   | Open           | Reading Verified Address status is delivered and informational only; gating Passport registration on it is Phase 2      |
| Publish                | SchemaRegistry + EAS | Permissionless | Register Tokscale schemas and issue attestations as our own attester; the first public Usage Root is the next milestone |
| Official Dojang issuer | DojangAttesterBook   | GIWA approval  | Phase 2 graduation: apply with schemas already live and indexed                                                         |

## The TESTNET FAUCET attester (for demos)

On GIWA Sepolia, the DojangAttesterBook resolves the documented Testnet Faucet attester ID to [`0x63CCe2b569A7bC35895ee24306c1512fefc06121`](https://sepolia-explorer.giwa.io/address/0x63CCe2b569A7bC35895ee24306c1512fefc06121). Tokscale demos use it to stand in for a KYC issuer. It is technical test evidence, not a KYC claim, not an allowlisted issuer, and it never authorizes payment, credit, Passport eligibility, or Earn access.

## Tokscale's read-vs-publish split

Read side (delivered, read-only). Tokscale consumes deployed Dojang purely as provenance, through a fail-closed validator: it requires the complete GIWA Sepolia read set at one pinned block, rechecks the block hash, pins the EIP-1967 implementation slots, and verifies the schema fingerprint and the EAS record behind any `isVerified` result. `DojangScroll.isVerified` alone is never treated as sufficient. Every successful result is explicitly `informationalOnly: true`. Tokscale does not deploy Dojang contracts, is not a Dojang issuer, and Dojang is not a payment or entitlement authority in the product.

The deployed-read check is a bounded, block-pinned observation (fixture block `31129890`), run by an operator with a caller-supplied RPC. It sends no transaction and needs no key:

```sh theme={null}
DOJANG_GIWA_RPC_URL=https://sepolia-rpc.giwa.io bun run dojang:giwa:validate
```

A read-set or attestation mismatch fails the run; a missing endpoint exits as a skipped external validation. It proves the deployed Dojang graph and the public Testnet Faucet attestation at that one block; it is not evidence of a continuously available live integration.

Publish side (permissionless). Anyone can register schemas and attest on EAS. Tokscale's schema set (Usage Root mirroring Balance Root, Verified Usage mirroring Verified Balance, Skill Signal, Bounty Completion) follows Dojang's own commitment idiom. Anchoring has landed only on the local EAS fixture so far; the first real Usage Root on public Sepolia is the next milestone, tracked on [Live Evidence](/overview/live-evidence).

<Warning>
  Local and public are never mixed. The local fixture (`LocalDojangScroll`) is sealed, deterministic, and marked informational-only; local artifacts are never shown next to Sepolia explorer links. Anvil borrows chain ID 91342, so chain ID is not a network identity; see [Network Separation](/gateway/network-separation).
</Warning>

## The Phase 2 path: official issuer

Phase 2 registers Tokscale in the DojangAttesterBook as an official issuer, under the attester ID `keccak256("dojang.dojangattesterids.tokscale")`. This is framed as a graduation, not a pitch: the schemas will already be live and indexed on the public chain, so the application is a formality over running infrastructure rather than a promise. It rides Dojang's own arc (KYC attestation live, balance attestations live, professional credentials in progress via the Shinhan Bank pattern, third-party issuers invited).

## Next steps

* For the Tokscale schema that mirrors Dojang's Balance Root, see [Receipt Attestation](/gateway/receipt-attestation).
* For the credential Dojang is meant to gate, see [Builder Passport](/builder-passport/overview).
* For the full address list including GIWA's own Dojang contracts, see [The Public Chain](/gateway/public-chain).
* For why an anonymity-first design cannot run on this chain, see [Why GIWA](/overview/why-giwa).
