Mint
The desk lives at permissionless.money/mint. Live payment rails are Zcash (ZIP-321) and native THIOL. Do not start checkout until a Terp destination exists.
1. Destination wallet
Two ways to get a terp1… mint dest:
Keplr — enable Terp (morocco-1), connect. That bech32 is the dest. Keplr signs; no passkey, no smart-account authenticator.
This device + passkey — the page creates a short-lived key, you register a WebAuthn authenticator, then HashMerchant feegrants only MsgAddAuthenticator (plus 1 THIOL runway) after DREGG confirms payment. See Passkeys and Onboard.
Watch / ZIP-321 UI stays closed until that dest is connected.
2. Ask DREGG if Pay is open
Base: https://dregg-svg.permissionless.money.
GET /health— Pay only whencheckout_ready === true.GET /v1/prices— amounts and labels.okhere is not a Pay signal.GET /v1/pay-targets?recipient=terp1…must be HTTP 200 before showing Pay.
Hide ZEC if zec_uri is null. Native unit is 100000000 uthiol (100 THIOL) per NFT unless prices say otherwise.
3. Pay, then mint
- ZEC — ZIP-321 URI / QR. The house compact streamer watches the shielded payment. Memo carries a blinded Pedersen commitment (
memo_hexprefix6431), neverterp1. - Native — Keplr (or the device signer) sends THIOL on Terp to the dest DREGG returns.
After paid: true for that commitment c, the page can call onboard POST /onboard/v1/passkey-grant with {address, c} if this is a passkey account.
Mint execute is on the collection contract, wrapped as update_extension → mint. Not a top-level {mint:…} on the minter.
Contracts (morocco-1)
| Piece | Value |
|---|---|
| Minter | terp188jpppxtfpf0vvt5gypdj52hk2xuswwcn38auczzxv20fcxz3kss9fhlru (code 72) |
| Collection (Hopalong) | terp1vp7smemrv846hpsyqrzlnqapmu3sv7hyygf4rrnw3ls26ezk864qupr5zt |
| New collections | minter instantiates cw721_svg code 83 |