bulletin-deploy 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -74,12 +74,33 @@ const result = await deploy("./dist", "my-app00.dot");
|
|
|
74
74
|
console.log(result.cid, result.domainName);
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
+
## Domain Names and Proof of Personhood
|
|
78
|
+
|
|
79
|
+
DotNS domain names are classified by the PopOracle contract on Asset Hub. The classification determines what level of **Proof of Personhood (PoP)** is required to register:
|
|
80
|
+
|
|
81
|
+
| Domain pattern | Example | Required PoP |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| Name with trailing digits | `my-app00.dot` | **None** — open to all |
|
|
84
|
+
| Base name (no trailing digits) | `my-app.dot` | **Full** — requires `ProofOfPersonhoodFull` |
|
|
85
|
+
|
|
86
|
+
On **testnets** (Paseo, Westend, local devnets), bulletin-deploy automatically self-grants `ProofOfPersonhoodFull` before registration — no configuration needed. Both base names and names with trailing digits just work:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
bulletin-deploy ./dist my-app.dot # base name — auto-grants Full PoP
|
|
90
|
+
bulletin-deploy ./dist my-app00.dot # trailing digits — no PoP needed
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
On **mainnet** (Polkadot Hub, Kusama Hub), PoP cannot be self-granted. You must have a verified account. Set `DOTNS_STATUS=none` explicitly or leave it unset (mainnet defaults to `none`).
|
|
94
|
+
|
|
95
|
+
If you see **"Requires Full Personhood verification"**, the deploy will fail early with an actionable error message before any gas is spent on commitment transactions.
|
|
96
|
+
|
|
77
97
|
## Environment Variables
|
|
78
98
|
|
|
79
99
|
| Variable | Default | Description |
|
|
80
100
|
|---|---|---|
|
|
81
101
|
| `BULLETIN_RPC` | `wss://paseo-bulletin-rpc.polkadot.io` | Bulletin chain WebSocket RPC |
|
|
82
102
|
| `BULLETIN_DEPLOY_TELEMETRY` | `1` (enabled) | Set to `0` to disable Sentry telemetry |
|
|
103
|
+
| `DOTNS_STATUS` | `full` (testnet) / `none` (mainnet) | PoP level to self-grant before registration: `none`, `lite`, or `full` |
|
|
83
104
|
| `IPFS_CID` | _(none)_ | Skip storage, use pre-existing CID |
|
|
84
105
|
|
|
85
106
|
## How It Works
|
|
@@ -128,6 +149,7 @@ Dashboard: https://polkadot-community-foundation.sentry.io/dashboards/92523/
|
|
|
128
149
|
|
|
129
150
|
| Error | Solution |
|
|
130
151
|
|---|---|
|
|
152
|
+
| `Requires Full Personhood verification` | Auto-handled on testnets (v0.5.4+). On mainnet, your account needs verified PoP status. |
|
|
131
153
|
| `Payment` or authorization error | Pool account needs storage authorization — auto-authorization should handle this |
|
|
132
154
|
| `Stale` or dropped from best chain | Bulletin chain reorg. Automatic retry handles this. |
|
|
133
155
|
| `IPFS CLI not installed` | Install Kubo: `brew install ipfs && ipfs init` |
|
|
@@ -611,11 +611,22 @@ var DotNS = class {
|
|
|
611
611
|
const reverse = options.reverse ?? (process.env.DOTNS_REVERSE ?? "false").toLowerCase() === "true";
|
|
612
612
|
if (!this.connected) await this.connect(options);
|
|
613
613
|
label = validateDomainLabel(label);
|
|
614
|
-
await Promise.all([
|
|
614
|
+
const [classification] = await Promise.all([
|
|
615
615
|
this.classifyName(label),
|
|
616
|
-
this.ensureNotRegistered(label)
|
|
617
|
-
this.setUserPopStatus(status)
|
|
616
|
+
this.ensureNotRegistered(label)
|
|
618
617
|
]);
|
|
618
|
+
await this.setUserPopStatus(status);
|
|
619
|
+
const userStatus = await this.getUserPopStatus();
|
|
620
|
+
const requiredStatus = classification.requiredStatus;
|
|
621
|
+
if (requiredStatus === ProofOfPersonhoodStatus.Reserved) {
|
|
622
|
+
throw new Error(classification.message);
|
|
623
|
+
}
|
|
624
|
+
if (requiredStatus === ProofOfPersonhoodStatus.ProofOfPersonhoodFull && userStatus !== ProofOfPersonhoodStatus.ProofOfPersonhoodFull) {
|
|
625
|
+
throw new Error("Requires Full Personhood verification. Set DOTNS_STATUS=full or use a domain with trailing digits (e.g. my-app00.dot)");
|
|
626
|
+
}
|
|
627
|
+
if (requiredStatus === ProofOfPersonhoodStatus.ProofOfPersonhoodLite && userStatus !== ProofOfPersonhoodStatus.ProofOfPersonhoodLite && userStatus !== ProofOfPersonhoodStatus.ProofOfPersonhoodFull) {
|
|
628
|
+
throw new Error("Requires Personhood Lite verification. Set DOTNS_STATUS=lite or DOTNS_STATUS=full");
|
|
629
|
+
}
|
|
619
630
|
const { commitment, registration } = await this.generateCommitment(label, reverse);
|
|
620
631
|
await withSpan("deploy.dotns.submit-commitment", "2a-i. submit-commitment", {}, () => this.submitCommitment(commitment));
|
|
621
632
|
await withSpan("deploy.dotns.wait-commitment-age", "2a-ii. wait-commitment-age", {}, () => this.waitForCommitmentAge());
|
package/dist/deploy.js
CHANGED
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
storeChunkedContent,
|
|
9
9
|
storeDirectory,
|
|
10
10
|
storeFile
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-OMZHBMOF.js";
|
|
12
|
+
import "./chunk-K2KKLHWN.js";
|
|
13
13
|
import "./chunk-RV7XBIIO.js";
|
|
14
14
|
import "./chunk-2RURGSQW.js";
|
|
15
15
|
import "./chunk-QGM4M3NI.js";
|
package/dist/dotns.js
CHANGED
package/dist/index.js
CHANGED