@reppo/cli 0.8.4 → 0.8.6

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
@@ -47,7 +47,7 @@ Errors **always** emit JSON on stderr regardless of mode, with a stable `code` f
47
47
  - `reppo query balance [address]` — ETH + REPPO + veREPPO + USDC
48
48
  - `reppo query voting-power [address]` — veREPPO voting power + lockup count
49
49
  - `reppo query pod <podId>` — pod existence + owner address
50
- - `reppo query datanet <datanetId> [--for <addr>]` — on-chain validity + REPPO access fee (optionally check access for an address) + the current on-chain epoch, plus off-chain catalog metadata: name, description, native token (symbol/address/decimals), per-epoch emissions, vote volumes, publisher/voter onboarding guidance, and the platform `subnetUuid` (the `--subnet-uuid` for `mint-pod` publishing). Catalog enrichment is best-effort — a platform outage degrades `metadata` to `{ unavailable }` without affecting the on-chain answer.
50
+ - `reppo query datanet <datanetId> [--for <addr>]` — on-chain validity + REPPO access fee (`accessFeeREPPO`) and, for datanets that charge in their own token, the primary-token access fee (`accessFeePrimaryToken` + `primaryToken: { address, symbol, decimals }` — present only for a real non-zero primary token; best-effort — `{ unavailable }` with distinct wording for "datanet has no primary token" vs a read failure) (optionally check access for an address) + the current on-chain epoch, plus off-chain catalog metadata: name, description, native token (symbol/address/decimals), per-epoch emissions, vote volumes, publisher/voter onboarding guidance, and the platform `subnetUuid` (the `--subnet-uuid` for `mint-pod` publishing). Catalog enrichment is best-effort — a platform outage degrades `metadata` to `{ unavailable }` without affecting the on-chain answer.
51
51
  - `reppo query epoch` — current on-chain epoch, read directly from `veReppo.currentEpoch()` (the protocol's epoch time-base). JSON: `{ network, epoch, epochStart, epochDurationSeconds, secondsRemaining }`. Epochs are fixed ~48h windows; the timing fields are derived from `epochEnd`/`epochLength` and degrade to `null` if those getters are unavailable. Pure read — no signer, no gas. Honor `--rpc-url` against a private RPC (the public Base RPC rate-limits).
52
52
  - `reppo query emissions-due` — list unclaimed REPPO emissions across all pods owned by the configured wallet (uses platform API)
53
53
 
@@ -59,13 +59,13 @@ Errors **always** emit JSON on stderr regardless of mode, with a stable `code` f
59
59
 
60
60
  ### Write
61
61
 
62
- - `reppo approve --spender <pod-manager|subnet-manager|ve-reppo|0x…> [--amount <units|max>] [--token reppo|usdc]` — set an ERC20 allowance so subsequent writes (lock, grant-access, mint-pod) don't fail with INSUFFICIENT_ALLOWANCE. Defaults to unlimited (`max`); reads the current allowance first and emits `{status:'no-op'}` if it already covers the request.
62
+ - `reppo approve --spender <pod-manager|subnet-manager|ve-reppo|0x…> [--amount <units|max>] [--token reppo|usdc|0x…]` — set an ERC20 allowance so subsequent writes (lock, grant-access, mint-pod) don't fail with INSUFFICIENT_ALLOWANCE. `--token` accepts the `reppo`/`usdc` aliases or an arbitrary ERC20 token address (0x…) — e.g. a datanet's primary token, so an operator can approve it for the SubnetManager; for an address the token's `decimals()` is read on-chain for amount scaling. Defaults to unlimited (`max`); reads the current allowance first and emits `{status:'no-op'}` if it already covers the request.
63
63
  - `reppo vote --pod <id> --votes <n> --like|--dislike` — cast a vote on a pod, spending `<n>` voting power
64
64
  - `reppo mint-pod --datanet <id> [--token reppo|primary] [--to <addr>]` — mint a pod into a datanet. Add `--pod-name <s>` to also publish metadata (Phase 2): after the on-chain mint, register the pod with the platform (`POST /agents/{id}/pods`). Requires `--subnet-uuid <cuid>` (the platform UUID, **not** the numeric `--datanet` id), `--agree-to-terms`, and `REPPO_AGENT_ID` + agent key. Optionally `--pod-description`, `--category`, `--platform`, `--url`, and a dataset: `--dataset <file>` (pinned to IPFS via `PINATA_JWT`) or `--dataset-uri <url>` (used as-is). A Phase-2 failure does not fail the mint — it exits 0 with `metadata.published:false`; re-run with the same `--idempotency-key` to retry.
65
65
  - `reppo lock <amount> --duration <seconds>` — lock REPPO into veREPPO for voting power
66
66
  - `reppo unlock <lockupId> [--to <addr>]` — withdraw an expired veREPPO lockup, returning the locked REPPO
67
67
  - `reppo extend-lock <lockupId> --duration <seconds>` — extend an existing veREPPO lockup
68
- - `reppo grant-access --datanet <id> [--to <addr>]` — pay the REPPO access fee and grant `--to` access to a datanet
68
+ - `reppo grant-access --datanet <id> [--to <addr>] [--token reppo|primary]` — pay the datanet access fee and grant `--to` access. Defaults to REPPO; `--token primary` pays in the datanet's primary token (e.g. $EXY). Output: `feeAmount` (on-chain fee quote), `feePaid` (receipt-derived actual), `feeToken: { symbol, address, decimals }`, and `token`. On the REPPO path the legacy `reppoFee` field is also emitted for back-compat (pre-0.8.5 consumers).
69
69
  - `reppo claim-emissions --pod <id> --epoch <n>` — claim a pod's emissions for an epoch
70
70
  - `reppo register-agent --name <s> --description <s>` — register a new agent identity on the Reppo platform; returns `{ id, apiKey }`. The apiKey is the Bearer token for subsequent agent-scoped calls (`/agents/[id]/subnets`, `/agents/[id]/pods`). On-chain mints use your `REPPO_PRIVATE_KEY` wallet; the platform no longer provisions one server-side.
71
71
  - `reppo auth [--force]` — sign in to the platform API (api.reppo.xyz); caches a 24h Bearer token used by `query emissions-due` and other platform-API commands
@@ -191,6 +191,18 @@ export declare const SUBNET_MANAGER_ABI: readonly [{
191
191
  readonly name: "to";
192
192
  }];
193
193
  readonly outputs: readonly [];
194
+ }, {
195
+ readonly name: "accessSubnetWithPrimaryTokenFee";
196
+ readonly type: "function";
197
+ readonly stateMutability: "nonpayable";
198
+ readonly inputs: readonly [{
199
+ readonly type: "uint256";
200
+ readonly name: "subnetId";
201
+ }, {
202
+ readonly type: "address";
203
+ readonly name: "to";
204
+ }];
205
+ readonly outputs: readonly [];
194
206
  }, {
195
207
  readonly name: "hasSubnetAccess";
196
208
  readonly type: "function";
@@ -227,6 +239,28 @@ export declare const SUBNET_MANAGER_ABI: readonly [{
227
239
  readonly outputs: readonly [{
228
240
  readonly type: "uint256";
229
241
  }];
242
+ }, {
243
+ readonly name: "getAccessFeePrimaryToken";
244
+ readonly type: "function";
245
+ readonly stateMutability: "view";
246
+ readonly inputs: readonly [{
247
+ readonly type: "uint256";
248
+ readonly name: "subnetId";
249
+ }];
250
+ readonly outputs: readonly [{
251
+ readonly type: "uint256";
252
+ }];
253
+ }, {
254
+ readonly name: "getSubnetPrimaryToken";
255
+ readonly type: "function";
256
+ readonly stateMutability: "view";
257
+ readonly inputs: readonly [{
258
+ readonly type: "uint256";
259
+ readonly name: "subnetId";
260
+ }];
261
+ readonly outputs: readonly [{
262
+ readonly type: "address";
263
+ }];
230
264
  }];
231
265
  export declare const VE_REPPO_ABI: readonly [{
232
266
  readonly name: "currentEpoch";
@@ -1 +1 @@
1
- {"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../../src/chain/abis.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBvB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAErB,CAAC"}
1
+ {"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../../src/chain/abis.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ7B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBvB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAErB,CAAC"}
@@ -32,9 +32,12 @@ export const POD_MANAGER_ABI = parseAbi([
32
32
  ]);
33
33
  export const SUBNET_MANAGER_ABI = parseAbi([
34
34
  'function accessSubnetWithREPPOFee(uint256 subnetId, address to)',
35
+ 'function accessSubnetWithPrimaryTokenFee(uint256 subnetId, address to)',
35
36
  'function hasSubnetAccess(uint256 subnetId, address address_) view returns (bool)',
36
37
  'function validSubnet(uint256 subnetId) view returns (bool)',
37
38
  'function getAccessFeeREPPO(uint256 subnetId) view returns (uint256)',
39
+ 'function getAccessFeePrimaryToken(uint256 subnetId) view returns (uint256)',
40
+ 'function getSubnetPrimaryToken(uint256 subnetId) view returns (address)',
38
41
  ]);
39
42
  export const VE_REPPO_ABI = parseAbi([
40
43
  // veReppo is the protocol's epoch time-base: PodManagerV2 and SubnetManager
@@ -1 +1 @@
1
- {"version":3,"file":"abis.js","sourceRoot":"","sources":["../../src/chain/abis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;IACtC,iFAAiF;IACjF,wFAAwF;IACxF,0DAA0D;IAC1D,+DAA+D;IAC/D,2EAA2E;IAC3E,0DAA0D;IAC1D,sDAAsD;IACtD,oEAAoE;IACpE,oFAAoF;IACpF,sFAAsF;IACtF,wFAAwF;IACxF,kGAAkG;IAClG,mFAAmF;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,iEAAiE;IACjE,kFAAkF;IAClF,4DAA4D;IAC5D,qEAAqE;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;IACnC,4EAA4E;IAC5E,sEAAsE;IACtE,wEAAwE;IACxE,yEAAyE;IACzE,mDAAmD;IACnD,gDAAgD;IAChD,+CAA+C;IAC/C,yDAAyD;IACzD,wDAAwD;IACxD,6EAA6E;IAC7E,sDAAsD;IACtD,yDAAyD;IACzD,gDAAgD;IAChD,qGAAqG;IACrG,oDAAoD;IACpD,oDAAoD;IACpD,6HAA6H;IAC7H,oDAAoD;IACpD,0DAA0D;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;IAChC,uCAAuC;IACvC,yCAAyC;IACzC,0CAA0C;IAC1C,+CAA+C;IAC/C,oDAAoD;IACpD,2EAA2E;IAC3E,kEAAkE;IAClE,8DAA8D;IAC9D,yEAAyE;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,0MAA0M;IAC1M,sGAAsG;CACvG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;IACjC,wOAAwO;CACzO,CAAC,CAAC"}
1
+ {"version":3,"file":"abis.js","sourceRoot":"","sources":["../../src/chain/abis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;IACtC,iFAAiF;IACjF,wFAAwF;IACxF,0DAA0D;IAC1D,+DAA+D;IAC/D,2EAA2E;IAC3E,0DAA0D;IAC1D,sDAAsD;IACtD,oEAAoE;IACpE,oFAAoF;IACpF,sFAAsF;IACtF,wFAAwF;IACxF,kGAAkG;IAClG,mFAAmF;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,iEAAiE;IACjE,wEAAwE;IACxE,kFAAkF;IAClF,4DAA4D;IAC5D,qEAAqE;IACrE,4EAA4E;IAC5E,yEAAyE;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;IACnC,4EAA4E;IAC5E,sEAAsE;IACtE,wEAAwE;IACxE,yEAAyE;IACzE,mDAAmD;IACnD,gDAAgD;IAChD,+CAA+C;IAC/C,yDAAyD;IACzD,wDAAwD;IACxD,6EAA6E;IAC7E,sDAAsD;IACtD,yDAAyD;IACzD,gDAAgD;IAChD,qGAAqG;IACrG,oDAAoD;IACpD,oDAAoD;IACpD,6HAA6H;IAC7H,oDAAoD;IACpD,0DAA0D;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;IAChC,uCAAuC;IACvC,yCAAyC;IACzC,0CAA0C;IAC1C,+CAA+C;IAC/C,oDAAoD;IACpD,2EAA2E;IAC3E,kEAAkE;IAClE,8DAA8D;IAC9D,yEAAyE;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,0MAA0M;IAC1M,sGAAsG;CACvG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;IACjC,wOAAwO;CACzO,CAAC,CAAC"}
@@ -23,6 +23,12 @@ export declare function subnetManager(network: Network): Contract<typeof SUBNET_
23
23
  export declare function veReppo(network: Network): Contract<typeof VE_REPPO_ABI>;
24
24
  export declare function reppoToken(network: Network): Contract<typeof ERC20_ABI>;
25
25
  export declare function usdcToken(network: Network): Contract<typeof ERC20_ABI>;
26
+ /**
27
+ * Generic ERC20 resolver for a token whose address is discovered at runtime
28
+ * (e.g. a datanet's primary token via getSubnetPrimaryToken), not pinned in
29
+ * addresses.ts. No TBD check — the caller already holds a concrete address.
30
+ */
31
+ export declare function erc20(address: Address): Contract<typeof ERC20_ABI>;
26
32
  export declare function tryPodManager(network: Network): Contract<typeof POD_MANAGER_ABI> | null;
27
33
  export declare function trySubnetManager(network: Network): Contract<typeof SUBNET_MANAGER_ABI> | null;
28
34
  export declare function tryVeReppo(network: Network): Contract<typeof VE_REPPO_ABI> | null;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/chain/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACV,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,QAAQ,CAAC,IAAI;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,IAAI,CAAC;CACX;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,eAAe,CAAC,CAM7E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAMnF;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAMvE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAMvE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAMtE;AAeD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,GACf,QAAQ,CAAC,OAAO,eAAe,CAAC,GAAG,IAAI,CAIzC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,GAAG,IAAI,CAG7F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,IAAI,CAGjF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,GAAG,IAAI,CAGjF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,GAAG,IAAI,CAGhF"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/chain/contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACV,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,QAAQ,CAAC,IAAI;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,IAAI,CAAC;CACX;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,eAAe,CAAC,CAM7E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAMnF;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAMvE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAMvE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAMtE;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,CAElE;AAeD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,GACf,QAAQ,CAAC,OAAO,eAAe,CAAC,GAAG,IAAI,CAIzC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,GAAG,IAAI,CAG7F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,GAAG,IAAI,CAGjF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,GAAG,IAAI,CAGjF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,SAAS,CAAC,GAAG,IAAI,CAGhF"}
@@ -35,6 +35,14 @@ export function usdcToken(network) {
35
35
  abi: ERC20_ABI,
36
36
  };
37
37
  }
38
+ /**
39
+ * Generic ERC20 resolver for a token whose address is discovered at runtime
40
+ * (e.g. a datanet's primary token via getSubnetPrimaryToken), not pinned in
41
+ * addresses.ts. No TBD check — the caller already holds a concrete address.
42
+ */
43
+ export function erc20(address) {
44
+ return { address, abi: ERC20_ABI };
45
+ }
38
46
  // ── Non-throwing variants ──────────────────────────────────────────────
39
47
  //
40
48
  // Read commands (e.g. `query balance`) need to render an `unavailable`
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/chain/contracts.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAgB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,SAAS,GACV,MAAM,WAAW,CAAC;AAOnB,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC;QACvD,GAAG,EAAE,eAAe;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC;QAC7D,GAAG,EAAE,kBAAkB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;QACjD,GAAG,EAAE,YAAY;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC;QACxD,GAAG,EAAE,SAAS;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAC3C,GAAG,EAAE,SAAS;KACf,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,mEAAmE;AAEnE,MAAM,eAAe,GAAG,4CAA4C,CAAC;AAErE,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAgB;IAEhB,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;IAC1D,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;IACvD,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/chain/contracts.ts"],"names":[],"mappings":"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"}
@@ -16,10 +16,17 @@ type ReceiptWaitClient = {
16
16
  */
17
17
  export declare function receiptGasEth(receipt: TransactionReceipt): string;
18
18
  /**
19
- * Actual REPPO paid in a confirmed tx, as a decimal-ether string: sums the
20
- * token's Transfer events where `from` is the caller. Surfaced in write-command
21
- * JSON (like gasEth) so consumers can reconcile budget accounting to ACTUAL
22
- * fees instead of estimates. Returns "0" when no transfer from caller exists.
19
+ * Actual amount of `token` paid by `caller` in a confirmed tx, as a decimal
20
+ * string at the token's `decimals`: sums the token's Transfer events where
21
+ * `from` is the caller. Surfaced in write-command JSON (like gasEth) so
22
+ * consumers can reconcile budget accounting to ACTUAL fees instead of
23
+ * estimates. Returns "0" when no transfer from the caller exists. Generalizes
24
+ * reppoFeeFromReceipt to non-18-decimal fee tokens (a datanet's primary token).
25
+ */
26
+ export declare function tokenFeeFromReceipt(receipt: TransactionReceipt, token: Address, caller: Address, decimals: number): string;
27
+ /**
28
+ * Actual REPPO paid in a confirmed tx (18 decimals), as a decimal string. Thin
29
+ * wrapper over tokenFeeFromReceipt; kept for existing REPPO-path callers.
23
30
  */
24
31
  export declare function reppoFeeFromReceipt(receipt: TransactionReceipt, reppoToken: Address, caller: Address): string;
25
32
  export declare function waitForWriteReceipt(publicClient: ReceiptWaitClient, hash: Hash, timeoutMs?: number): Promise<TransactionReceipt>;
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/chain/receipt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAI9D,KAAK,iBAAiB,GAAG;IACvB,yBAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAEjE;AAKD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAW7G;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,iBAAiB,EAC/B,IAAI,EAAE,IAAI,EACV,SAAS,SAAU,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAa7B"}
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/chain/receipt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAI9D,KAAK,iBAAiB,GAAG;IACvB,yBAAyB,CAAC,IAAI,EAAE;QAC9B,IAAI,EAAE,IAAI,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAEjE;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAE7G;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,iBAAiB,EAC/B,IAAI,EAAE,IAAI,EACV,SAAS,SAAU,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAa7B"}
@@ -1,4 +1,4 @@
1
- import { WaitForTransactionReceiptTimeoutError, formatEther } from 'viem';
1
+ import { WaitForTransactionReceiptTimeoutError, formatEther, formatUnits } from 'viem';
2
2
  import { cliError } from '../output/format.js';
3
3
  /**
4
4
  * Gas cost of a confirmed tx in ETH, as a decimal string: gasUsed ×
@@ -11,17 +11,19 @@ export function receiptGasEth(receipt) {
11
11
  // keccak256("Transfer(address,address,uint256)") — the ERC20 Transfer topic.
12
12
  const TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
13
13
  /**
14
- * Actual REPPO paid in a confirmed tx, as a decimal-ether string: sums the
15
- * token's Transfer events where `from` is the caller. Surfaced in write-command
16
- * JSON (like gasEth) so consumers can reconcile budget accounting to ACTUAL
17
- * fees instead of estimates. Returns "0" when no transfer from caller exists.
14
+ * Actual amount of `token` paid by `caller` in a confirmed tx, as a decimal
15
+ * string at the token's `decimals`: sums the token's Transfer events where
16
+ * `from` is the caller. Surfaced in write-command JSON (like gasEth) so
17
+ * consumers can reconcile budget accounting to ACTUAL fees instead of
18
+ * estimates. Returns "0" when no transfer from the caller exists. Generalizes
19
+ * reppoFeeFromReceipt to non-18-decimal fee tokens (a datanet's primary token).
18
20
  */
19
- export function reppoFeeFromReceipt(receipt, reppoToken, caller) {
20
- const token = reppoToken.toLowerCase();
21
+ export function tokenFeeFromReceipt(receipt, token, caller, decimals) {
22
+ const tokenAddr = token.toLowerCase();
21
23
  const from = caller.toLowerCase().slice(2).padStart(64, '0');
22
24
  let total = 0n;
23
25
  for (const log of receipt.logs ?? []) {
24
- if (log.address.toLowerCase() !== token)
26
+ if (log.address.toLowerCase() !== tokenAddr)
25
27
  continue;
26
28
  if ((log.topics?.[0] ?? '').toLowerCase() !== TRANSFER_TOPIC)
27
29
  continue;
@@ -32,7 +34,14 @@ export function reppoFeeFromReceipt(receipt, reppoToken, caller) {
32
34
  }
33
35
  catch { /* malformed log data — skip */ }
34
36
  }
35
- return formatEther(total);
37
+ return formatUnits(total, decimals);
38
+ }
39
+ /**
40
+ * Actual REPPO paid in a confirmed tx (18 decimals), as a decimal string. Thin
41
+ * wrapper over tokenFeeFromReceipt; kept for existing REPPO-path callers.
42
+ */
43
+ export function reppoFeeFromReceipt(receipt, reppoToken, caller) {
44
+ return tokenFeeFromReceipt(receipt, reppoToken, caller, 18);
36
45
  }
37
46
  export async function waitForWriteReceipt(publicClient, hash, timeoutMs = 120_000) {
38
47
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/chain/receipt.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qCAAqC,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAS/C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAA2B;IACvD,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAClE,CAAC;AAED,6EAA6E;AAC7E,MAAM,cAAc,GAAG,oEAAoE,CAAC;AAE5F;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA2B,EAAE,UAAmB,EAAE,MAAe;IACnG,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK;YAAE,SAAS;QAClD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,cAAc;YAAE,SAAS;QACvE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,SAAS;QACtE,IAAI,CAAC;YAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAA+B,EAC/B,IAAU,EACV,SAAS,GAAG,OAAO;IAEnB,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,qCAAqC,EAAE,CAAC;YACzD,MAAM,QAAQ,CACZ,oBAAoB,EACpB,mBAAmB,SAAS,GAAG,IAAI,0BAA0B,IAAI,EAAE,EACnE,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/chain/receipt.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qCAAqC,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAS/C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAA2B;IACvD,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAClE,CAAC;AAED,6EAA6E;AAC7E,MAAM,cAAc,GAAG,oEAAoE,CAAC;AAE5F;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA2B,EAC3B,KAAc,EACd,MAAe,EACf,QAAgB;IAEhB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7D,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,SAAS;YAAE,SAAS;QACtD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,cAAc;YAAE,SAAS;QACvE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,SAAS;QACtE,IAAI,CAAC;YAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA2B,EAAE,UAAmB,EAAE,MAAe;IACnG,OAAO,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAA+B,EAC/B,IAAU,EACV,SAAS,GAAG,OAAO;IAEnB,IAAI,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACpF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,qCAAqC,EAAE,CAAC;YACzD,MAAM,QAAQ,CACZ,oBAAoB,EACpB,mBAAmB,SAAS,GAAG,IAAI,0BAA0B,IAAI,EAAE,EACnE,8FAA8F,CAC/F,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4CzC,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAgB,KAAK,aAAiB;IAEtC,OAAgB,KAAK,4BAclB;IAEH,OAAO,SAAuH;IAC9H,MAAM,SAAwH;IAC9H,KAAK,SAAiF;IACtF,cAAc,qBAAsC;IACpD,MAAM,UAAsC;IAEtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAkLjC"}
1
+ {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6CzC,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAgB,KAAK,aAAiB;IAEtC,OAAgB,KAAK,4BAgBlB;IAEH,OAAO,SAAuH;IAC9H,MAAM,SAAwH;IAC9H,KAAK,SAA0H;IAC/H,cAAc,qBAAsC;IACpD,MAAM,UAAsC;IAEtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAqNjC"}
@@ -1,12 +1,17 @@
1
1
  /**
2
- * `reppo approve --spender <alias|0x...> [--amount <units|max>] [--token reppo|usdc]`
2
+ * `reppo approve --spender <alias|0x...> [--amount <units|max>] [--token reppo|usdc|0x...]`
3
3
  * — set an ERC20 allowance so subsequent write commands (lock, grant-access,
4
4
  * mint-pod) don't fail with INSUFFICIENT_ALLOWANCE.
5
5
  *
6
6
  * Most agent flows want unlimited approval once, so `--amount` defaults to
7
- * `max` (MaxUint256). Pass a numeric value (in human REPPO/USDC units) for a
7
+ * `max` (MaxUint256). Pass a numeric value (in human token units) for a
8
8
  * bounded approval.
9
9
  *
10
+ * `--token` accepts the `reppo`/`usdc` aliases (decimals known statically) or
11
+ * an arbitrary ERC20 token ADDRESS (0x…) — e.g. a datanet's primary token, so
12
+ * an operator can approve it for the SubnetManager. For an address the token's
13
+ * `decimals()` is read on-chain for amount scaling (never assumed 18).
14
+ *
10
15
  * Spender aliases resolve per network:
11
16
  * - pod-manager → PodManager (mintPodWithREPPO, mintPodWithPrimaryToken)
12
17
  * - subnet-manager → SubnetManager (grantAccess REPPO fee — pulled here)
@@ -25,7 +30,7 @@ import { isAddress, parseUnits, formatUnits, maxUint256 } from 'viem';
25
30
  import { BaseCommand } from './_base.js';
26
31
  import { cliError, emit } from '../output/format.js';
27
32
  import { createClients, nextNonce } from '../chain/clients.js';
28
- import { podManager, subnetManager, veReppo, reppoToken, usdcToken, } from '../chain/contracts.js';
33
+ import { podManager, subnetManager, veReppo, reppoToken, usdcToken, erc20, } from '../chain/contracts.js';
29
34
  import { decodeRevert } from '../chain/errors.js';
30
35
  import { receiptGasEth } from '../chain/receipt.js';
31
36
  import { begin, markSubmitted, markConfirmed, markFailed, peekIdempotent, } from '../state/idempotency.js';
@@ -47,7 +52,7 @@ function resolveSpender(spender, network) {
47
52
  export class ApproveCommand extends BaseCommand {
48
53
  static paths = [['approve']];
49
54
  static usage = BaseCommand.Usage({
50
- description: 'Approve a Reppo contract to spend your REPPO (or USDC) tokens.',
55
+ description: 'Approve a Reppo contract to spend your REPPO, USDC, or an arbitrary ERC20 token.',
51
56
  examples: [
52
57
  ['Unlimited REPPO approval for veREPPO (default amount=max)',
53
58
  'reppo approve --spender ve-reppo'],
@@ -55,6 +60,8 @@ export class ApproveCommand extends BaseCommand {
55
60
  'reppo approve --spender subnet-manager --amount 100'],
56
61
  ['USDC approval for PodManager (mintPodWithPrimaryToken)',
57
62
  'reppo approve --spender pod-manager --token usdc --amount 50'],
63
+ ["Approve a datanet's primary token (arbitrary ERC20 address) for SubnetManager",
64
+ 'reppo approve --spender subnet-manager --token 0xEeEE…0000 --amount 25'],
58
65
  ['Raw spender address + idempotency key',
59
66
  'reppo approve --spender 0xabc...def --amount max --idempotency-key approve-veReppo-once'],
60
67
  ['Dry-run',
@@ -63,23 +70,59 @@ export class ApproveCommand extends BaseCommand {
63
70
  });
64
71
  spender = Option.String('--spender', { required: true, description: 'pod-manager | subnet-manager | ve-reppo | 0x-address' });
65
72
  amount = Option.String('--amount', 'max', { description: 'Token amount in human units, or "max" for MaxUint256 (default).' });
66
- token = Option.String('--token', 'reppo', { description: 'reppo (default) or usdc' });
73
+ token = Option.String('--token', 'reppo', { description: 'reppo (default), usdc, or an arbitrary ERC20 token address (0x…)' });
67
74
  idempotencyKey = Option.String('--idempotency-key');
68
75
  dryRun = Option.Boolean('--dry-run', false);
69
76
  async execute() {
70
77
  try {
71
- // Validate token + spender BEFORE loadConfig (cheapest path).
72
- if (!TOKEN_NAMES.has(this.token)) {
73
- throw cliError('INVALID_TOKEN', `--token must be reppo or usdc; got "${this.token}".`);
78
+ // Validate --token early: a reppo/usdc alias, or an arbitrary ERC20
79
+ // address. INVALID_TOKEN for anything that's neither. (decimals for the
80
+ // address path is read on-chain below it needs the RPC client.)
81
+ const tokenIsAlias = TOKEN_NAMES.has(this.token);
82
+ const tokenIsAddress = isAddress(this.token);
83
+ if (!tokenIsAlias && !tokenIsAddress) {
84
+ throw cliError('INVALID_TOKEN', `--token must be reppo, usdc, or a 0x-prefixed ERC20 address; got "${this.token}".`);
74
85
  }
75
- const tokenName = this.token;
76
- const decimals = tokenName === 'reppo' ? 18 : 6;
77
86
  const cfg = this.loadConfig();
78
87
  const pk = cfg.privateKey;
79
88
  if (!pk) {
80
89
  throw cliError('MISSING_PRIVATE_KEY', 'No signing key available.', 'Set REPPO_PRIVATE_KEY in env.');
81
90
  }
82
91
  const spenderAddr = resolveSpender(this.spender, cfg.network);
92
+ const clients = createClients({
93
+ network: cfg.network,
94
+ privateKey: pk,
95
+ ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),
96
+ });
97
+ // Resolve the token contract, its decimals, and a display/fingerprint
98
+ // label. Aliases pin decimals statically; an address reads decimals()
99
+ // on-chain (catch → clean cliError) so amount scaling is never wrong.
100
+ // reppoToken/usdcToken and erc20 all return Contract<typeof ERC20_ABI>.
101
+ let token;
102
+ let decimals;
103
+ // tokenLabel: stable identifier for the args fingerprint + result `token` field
104
+ // (alias name, or the lowercased address). tokenDisplay: human-mode label.
105
+ let tokenLabel;
106
+ let tokenDisplay;
107
+ if (tokenIsAlias) {
108
+ const tokenName = this.token;
109
+ token = tokenName === 'reppo' ? reppoToken(cfg.network) : usdcToken(cfg.network);
110
+ decimals = tokenName === 'reppo' ? 18 : 6;
111
+ tokenLabel = tokenName;
112
+ tokenDisplay = tokenName.toUpperCase();
113
+ }
114
+ else {
115
+ const tokenAddr = this.token;
116
+ token = erc20(tokenAddr);
117
+ decimals = await clients.publicClient
118
+ .readContract({ ...token, functionName: 'decimals' })
119
+ .then((dec) => Number(dec))
120
+ .catch(() => {
121
+ throw cliError('INVALID_TOKEN', `Could not read decimals() for token ${tokenAddr} on ${cfg.network}.`, 'The address is not a standard ERC20 (decimals() reverted or returned non-numeric data).');
122
+ });
123
+ tokenLabel = tokenAddr.toLowerCase();
124
+ tokenDisplay = tokenAddr;
125
+ }
83
126
  let amount;
84
127
  if (this.amount === 'max') {
85
128
  amount = maxUint256;
@@ -98,7 +141,7 @@ export class ApproveCommand extends BaseCommand {
98
141
  // Args fingerprint baked into the cache so re-using one key with a
99
142
  // different (token, spender, amount) → IDEMPOTENCY_ARGS_MISMATCH.
100
143
  const args = {
101
- token: tokenName,
144
+ token: tokenLabel,
102
145
  spender: spenderAddr.toLowerCase(),
103
146
  amount: amount.toString(),
104
147
  };
@@ -115,12 +158,6 @@ export class ApproveCommand extends BaseCommand {
115
158
  `Re-run after the tx confirms, or check the explorer.`]);
116
159
  return 0;
117
160
  }
118
- const clients = createClients({
119
- network: cfg.network,
120
- privateKey: pk,
121
- ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),
122
- });
123
- const token = tokenName === 'reppo' ? reppoToken(cfg.network) : usdcToken(cfg.network);
124
161
  // Pre-flight: skip the tx entirely if the existing allowance already
125
162
  // covers the request. Saves gas and matches agent re-runnability.
126
163
  const currentAllowance = await clients.publicClient.readContract({
@@ -132,7 +169,7 @@ export class ApproveCommand extends BaseCommand {
132
169
  : { raw: a.toString(), formatted: formatUnits(a, decimals) };
133
170
  if (currentAllowance >= amount) {
134
171
  const result = {
135
- token: tokenName,
172
+ token: tokenLabel,
136
173
  spender: spenderAddr,
137
174
  owner: clients.account.address,
138
175
  requested: fmtAmt(amount),
@@ -144,7 +181,7 @@ export class ApproveCommand extends BaseCommand {
144
181
  // `markConfirmed` requires a real txHash. Re-reading the chain
145
182
  // allowance on retry is cheap and authoritative.
146
183
  emit(result, [
147
- `= No-op: ${tokenName.toUpperCase()} allowance from ${clients.account.address} to ${spenderAddr}`,
184
+ `= No-op: ${tokenDisplay} allowance from ${clients.account.address} to ${spenderAddr}`,
148
185
  ` is already ${fmtAmt(currentAllowance).formatted} (>= requested ${fmtAmt(amount).formatted}).`,
149
186
  ]);
150
187
  return 0;
@@ -159,7 +196,7 @@ export class ApproveCommand extends BaseCommand {
159
196
  });
160
197
  emit({
161
198
  simulated: true,
162
- token: tokenName,
199
+ token: tokenLabel,
163
200
  spender: spenderAddr,
164
201
  owner: clients.account.address,
165
202
  requested: fmtAmt(amount),
@@ -199,7 +236,7 @@ export class ApproveCommand extends BaseCommand {
199
236
  const result = {
200
237
  txHash: tx,
201
238
  gasEth: receiptGasEth(receipt),
202
- token: tokenName,
239
+ token: tokenLabel,
203
240
  spender: spenderAddr,
204
241
  owner: clients.account.address,
205
242
  requested: fmtAmt(amount),
@@ -212,7 +249,7 @@ export class ApproveCommand extends BaseCommand {
212
249
  if (this.idempotencyKey)
213
250
  await markConfirmed(this.idempotencyKey, COMMAND, args, result, tx);
214
251
  emit(result, [
215
- `✓ Approved ${spenderAddr} to spend ${fmtAmt(amount).formatted} ${tokenName.toUpperCase()}`,
252
+ `✓ Approved ${spenderAddr} to spend ${fmtAmt(amount).formatted} ${tokenDisplay}`,
216
253
  ` tx: ${result.basescanUrl}`,
217
254
  ` block: ${receipt.blockNumber}`,
218
255
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAgB,MAAM,MAAM,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,UAAU,EACV,aAAa,EACb,OAAO,EACP,UAAU,EACV,SAAS,GACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,GACf,MAAM,yBAAyB,CAAC;AAGjC,MAAM,OAAO,GAAG,SAAS,CAAC;AAK1B,MAAM,eAAe,GAA8B,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1G,MAAM,WAAW,GAA2B,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvE,SAAS,cAAc,CAAC,OAAe,EAAE,OAAgB;IACvD,IAAI,eAAe,CAAC,GAAG,CAAC,OAAuB,CAAC,EAAE,CAAC;QACjD,QAAQ,OAAuB,EAAE,CAAC;YAChC,KAAK,aAAa,CAAC,CAAI,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YAC1D,KAAK,gBAAgB,CAAC,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YAC7D,KAAK,UAAU,CAAC,CAAO,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;QACzD,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,QAAQ,CACZ,iBAAiB,EACjB,+FAA+F,OAAO,IAAI,CAC3G,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAEtC,MAAM,CAAU,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QACxC,WAAW,EAAE,gEAAgE;QAC7E,QAAQ,EAAE;YACR,CAAC,2DAA2D;gBAC1D,kCAAkC,CAAC;YACrC,CAAC,gDAAgD;gBAC/C,qDAAqD,CAAC;YACxD,CAAC,wDAAwD;gBACvD,8DAA8D,CAAC;YACjE,CAAC,uCAAuC;gBACtC,yFAAyF,CAAC;YAC5F,CAAC,SAAS;gBACR,4CAA4C,CAAC;SAChD;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CAAC;IAC9H,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,iEAAiE,EAAE,CAAC,CAAC;IAC9H,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC,CAAC;IACtF,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE5C,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,8DAA8D;YAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAkB,CAAC,EAAE,CAAC;gBAC9C,MAAM,QAAQ,CAAC,eAAe,EAAE,uCAAuC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAkB,CAAC;YAC1C,MAAM,QAAQ,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;YAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,QAAQ,CACZ,qBAAqB,EACrB,2BAA2B,EAC3B,+BAA+B,CAChC,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAE9D,IAAI,MAAc,CAAC;YACnB,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1B,MAAM,GAAG,UAAU,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,QAAQ,CACZ,gBAAgB,EAChB,6DAA6D,IAAI,CAAC,MAAM,IAAI,CAC7E,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;oBACjB,MAAM,QAAQ,CACZ,gBAAgB,EAChB,uCAAuC,IAAI,CAAC,MAAM,IAAI,CACvD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,mEAAmE;YACnE,kEAAkE;YAClE,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,WAAW,CAAC,WAAW,EAAE;gBAClC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;aAC1B,CAAC;YAEF,uEAAuE;YACvE,uEAAuE;YACvE,yBAAyB;YACzB,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAChD,CAAC;YACF,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACzC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EAChE,CAAC,2BAA2B,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC3D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACzC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EAChE,CAAC,iDAAiD,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE;oBAC3E,sDAAsD,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,CAAC;YACX,CAAC;YAED,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,EAAE;gBACd,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEvF,qEAAqE;YACrE,kEAAkE;YAClE,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;gBAC/D,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW;gBACjE,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;aAC7C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAC3B,CAAC,KAAK,UAAU;gBACd,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;gBACzC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YAEjE,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG;oBACb,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;oBAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;oBACzB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;oBAC1C,MAAM,EAAE,OAAgB;oBACxB,MAAM,EAAE,8BAA8B;iBACvC,CAAC;gBACF,kEAAkE;gBAClE,+DAA+D;gBAC/D,iDAAiD;gBACjD,IAAI,CAAC,MAAM,EAAE;oBACX,YAAY,SAAS,CAAC,WAAW,EAAE,mBAAmB,OAAO,CAAC,OAAO,CAAC,OAAO,OAAO,WAAW,EAAE;oBACjG,gBAAgB,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,kBAAkB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI;iBACjG,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC;YACX,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBACtD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS;oBAC/D,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO;iBACtD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACb,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAChC,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC;oBACH,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;oBAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;oBACzB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;oBAC1C,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,IAAI;iBACzC,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC;YACX,CAAC;YAED,0EAA0E;YAC1E,IAAI,IAAI,CAAC,cAAc;gBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAEzE,IAAI,EAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7E,EAAE,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC;oBAC5C,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS;oBAC/D,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;oBAC3B,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK;iBACnE,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,IAAI,CAAC,cAAc;oBAAE,MAAM,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5F,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,6BAA6B,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5E,CAAC;YAED,8DAA8D;YAC9D,oDAAoD;YACpD,IAAI,IAAI,CAAC,cAAc;gBAAE,MAAM,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAErF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YACrG,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,cAAc;oBAAE,MAAM,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;gBACjG,MAAM,QAAQ,CAAC,aAAa,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,MAAM,GAAG;gBACb,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;gBAC9B,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;gBAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;gBACzB,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC;gBAC3C,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;gBACrC,WAAW,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS;oBACpC,CAAC,CAAC,2BAA2B,EAAE,EAAE;oBACjC,CAAC,CAAC,mCAAmC,EAAE,EAAE;aAC5C,CAAC;YACF,IAAI,IAAI,CAAC,cAAc;gBAAE,MAAM,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAE7F,IAAI,CAAC,MAAM,EAAE;gBACX,cAAc,WAAW,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,WAAW,EAAE,EAAE;gBAC3F,SAAS,MAAM,CAAC,WAAW,EAAE;gBAC7B,YAAY,OAAO,CAAC,WAAW,EAAE;aAClC,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
1
  import { BaseCommand } from './_base.js';
2
+ /** Maps the --token choice to the SubnetManager access method + fee getter. */
3
+ export declare function accessFns(token: 'reppo' | 'primary'): {
4
+ access: 'accessSubnetWithREPPOFee' | 'accessSubnetWithPrimaryTokenFee';
5
+ feeGetter: 'getAccessFeeREPPO' | 'getAccessFeePrimaryToken';
6
+ };
2
7
  export declare class GrantAccessCommand extends BaseCommand {
3
8
  static paths: string[][];
4
9
  static usage: import("clipanion").Usage;
5
10
  datanet: string;
11
+ token: string;
6
12
  to: string | undefined;
7
13
  idempotencyKey: string | undefined;
8
14
  dryRun: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"grant-access.d.ts","sourceRoot":"","sources":["../../src/commands/grant-access.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAWzC,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,OAAgB,KAAK,aAAsB;IAE3C,OAAgB,KAAK,4BAYlB;IAEH,OAAO,SAAyG;IAChH,EAAE,qBAA6H;IAC/H,cAAc,qBAAsC;IACpD,MAAM,UAAsC;IAEtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CA0MjC"}
1
+ {"version":3,"file":"grant-access.d.ts","sourceRoot":"","sources":["../../src/commands/grant-access.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAWzC,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG;IACrD,MAAM,EAAE,0BAA0B,GAAG,iCAAiC,CAAC;IACvE,SAAS,EAAE,mBAAmB,GAAG,0BAA0B,CAAC;CAC7D,CAIA;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,OAAgB,KAAK,aAAsB;IAE3C,OAAgB,KAAK,4BAclB;IAEH,OAAO,SAAyG;IAChH,KAAK,SAAoG;IACzG,EAAE,qBAA6H;IAC/H,cAAc,qBAAsC;IACpD,MAAM,UAAsC;IAEtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAyPjC"}
@@ -1,45 +1,52 @@
1
1
  /**
2
- * `reppo grant-access --datanet <id> [--to <addr>]` — pay the REPPO
3
- * access fee and grant `--to` access to the datanet. Defaults `--to`
4
- * to the address derived from REPPO_PRIVATE_KEY.
2
+ * `reppo grant-access --datanet <id> [--to <addr>] [--token reppo|primary]` —
3
+ * pay the datanet access fee and grant `--to` access. Paid in REPPO by default,
4
+ * or in the datanet's primary token with `--token primary` (mirrors
5
+ * `mint-pod --token`). Defaults `--to` to the address from REPPO_PRIVATE_KEY.
5
6
  *
6
- * "Datanet" is the user-facing term; on-chain it's a "subnet" (the
7
- * function is `accessSubnetWithREPPOFee` and we read `validSubnet` /
8
- * `hasSubnetAccess` / `getAccessFeeREPPO`). The CLI surface translates.
7
+ * On-chain the concept is a "subnet". For REPPO we call
8
+ * `accessSubnetWithREPPOFee` + `getAccessFeeREPPO`; for the primary token,
9
+ * `accessSubnetWithPrimaryTokenFee` + `getAccessFeePrimaryToken`, with the token
10
+ * address resolved via `getSubnetPrimaryToken` and its `decimals()` read on-chain
11
+ * (never assumed 18).
9
12
  *
10
- * Pre-flight checks (all surface error codes BEFORE the cache write,
11
- * so retries under the same --idempotency-key are safe):
12
- * 1. validSubnet(datanetId) → DATANET_NOT_FOUND
13
- * 2. hasSubnetAccess(datanetId, to) → ACCESS_ALREADY_GRANTED (cheap savings)
14
- * 3. getAccessFeeREPPO(datanetId) → fee amount (also surfaced in the result)
15
- * 4. REPPO balance >= fee → INSUFFICIENT_REPPO_BALANCE
16
- * 5. REPPO allowance(caller→sm) ≥ → INSUFFICIENT_ALLOWANCE (matches the
17
- * fee 0xfb8f41b2 selector errors.ts decodes)
13
+ * Pre-flight (all surface error codes BEFORE the cache write):
14
+ * 1. INVALID_TOKEN (--token not reppo|primary)
15
+ * 2. validSubnet(datanetId) → DATANET_NOT_FOUND
16
+ * 3. hasSubnetAccess(datanetId, to) → ACCESS_ALREADY_GRANTED
17
+ * 4. fee getter → fee amount (in the fee token)
18
+ * 5. feeToken balance >= fee → INSUFFICIENT_REPPO_BALANCE / INSUFFICIENT_TOKEN_BALANCE
19
+ * 6. feeToken allowance(caller→sm) ≥ → INSUFFICIENT_ALLOWANCE
18
20
  *
19
- * Idempotency two-phase write protocol:
20
- * begin submit tx markSubmitted wait receipt → markConfirmed
21
- *
22
- * Args fingerprint: { datanetId, to } — re-using one --idempotency-key
23
- * for a different (datanetId, to) is rejected with IDEMPOTENCY_ARGS_MISMATCH.
21
+ * Idempotency: begin submit → markSubmitted → wait → markConfirmed.
22
+ * Args fingerprint: { datanetId, to, token }.
24
23
  */
25
24
  import { Option } from 'clipanion';
26
25
  import { formatUnits, isAddress } from 'viem';
27
26
  import { BaseCommand } from './_base.js';
28
27
  import { cliError, emit } from '../output/format.js';
29
28
  import { createClients, nextNonce } from '../chain/clients.js';
30
- import { subnetManager, reppoToken } from '../chain/contracts.js';
29
+ import { subnetManager, reppoToken, erc20 } from '../chain/contracts.js';
31
30
  import { decodeRevert } from '../chain/errors.js';
32
31
  import { handleSubmittedCacheDecision } from './write-cache.js';
33
- import { waitForWriteReceipt, receiptGasEth, reppoFeeFromReceipt } from '../chain/receipt.js';
32
+ import { waitForWriteReceipt, receiptGasEth, tokenFeeFromReceipt } from '../chain/receipt.js';
34
33
  import { begin, markSubmitted, markConfirmed, markFailed, peekIdempotent } from '../state/idempotency.js';
35
34
  const COMMAND = 'grant-access';
35
+ /** Maps the --token choice to the SubnetManager access method + fee getter. */
36
+ export function accessFns(token) {
37
+ return token === 'reppo'
38
+ ? { access: 'accessSubnetWithREPPOFee', feeGetter: 'getAccessFeeREPPO' }
39
+ : { access: 'accessSubnetWithPrimaryTokenFee', feeGetter: 'getAccessFeePrimaryToken' };
40
+ }
36
41
  export class GrantAccessCommand extends BaseCommand {
37
42
  static paths = [['grant-access']];
38
43
  static usage = BaseCommand.Usage({
39
- description: 'Pay the REPPO access fee and grant a datanet access to an address.',
44
+ description: 'Pay the datanet access fee (REPPO or the datanet primary token) and grant an address access.',
40
45
  examples: [
41
- ['Grant the wallet derived from REPPO_PRIVATE_KEY access to datanet 19',
46
+ ['Grant the wallet derived from REPPO_PRIVATE_KEY access to datanet 19 (paid in REPPO)',
42
47
  'reppo grant-access --datanet 19'],
48
+ ['Pay the access fee in the datanet primary token instead',
49
+ 'reppo grant-access --datanet 19 --token primary'],
43
50
  ['Grant a different address access',
44
51
  'reppo grant-access --datanet 19 --to 0x726c…E31d'],
45
52
  ['With idempotency key',
@@ -49,6 +56,7 @@ export class GrantAccessCommand extends BaseCommand {
49
56
  ],
50
57
  });
51
58
  datanet = Option.String('--datanet', { required: true, description: 'Datanet (subnet) ID to grant access to' });
59
+ token = Option.String('--token', 'reppo', { description: 'Fee asset — "reppo" (default) or "primary"' });
52
60
  to = Option.String('--to', { description: 'Address to grant access to (defaults to address derived from REPPO_PRIVATE_KEY)' });
53
61
  idempotencyKey = Option.String('--idempotency-key');
54
62
  dryRun = Option.Boolean('--dry-run', false);
@@ -66,6 +74,10 @@ export class GrantAccessCommand extends BaseCommand {
66
74
  catch {
67
75
  throw cliError('INVALID_DATANET_ID', `Datanet id must be a non-negative integer; got "${this.datanet}".`);
68
76
  }
77
+ if (this.token !== 'reppo' && this.token !== 'primary') {
78
+ throw cliError('INVALID_TOKEN', `--token must be "reppo" or "primary"; got "${this.token}".`);
79
+ }
80
+ const fns = accessFns(this.token);
69
81
  const clients = createClients({
70
82
  network: cfg.network,
71
83
  privateKey: pk,
@@ -76,80 +88,125 @@ export class GrantAccessCommand extends BaseCommand {
76
88
  ? this.to
77
89
  : (() => { throw cliError('INVALID_ADDRESS', `Invalid --to address: ${this.to}`); })())
78
90
  : clients.account.address;
79
- const args = { datanetId: datanetId.toString(), to: target.toLowerCase() };
91
+ const args = { datanetId: datanetId.toString(), to: target.toLowerCase(), token: this.token };
80
92
  const decision = await peekIdempotent(this.idempotencyKey, COMMAND, args, this.dryRun);
81
93
  if (decision.kind === 'return-confirmed') {
82
94
  emit({ ...decision.result, idempotent: true, status: 'confirmed' }, [`(cached, confirmed) tx: ${decision.txHash ?? 'n/a'}`]);
83
95
  return 0;
84
96
  }
85
97
  if (decision.kind === 'return-submitted') {
86
- const clients = createClients({
87
- network: cfg.network,
88
- privateKey: pk,
89
- ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),
90
- });
98
+ // Reuse `clients` (already built above); recompute feePaid/gasEth from the
99
+ // receipt so a reconciled-confirmed result has the same keys as a
100
+ // fresh-confirmed one. feeToken {address,decimals} survives on the cached
101
+ // submitted record (markSubmitted stored feeFields).
102
+ const ftMeta = decision.result.feeToken;
91
103
  return handleSubmittedCacheDecision(decision, {
92
104
  idempotencyKey: this.idempotencyKey,
93
105
  command: COMMAND,
94
106
  args,
95
107
  network: cfg.network,
96
108
  publicClient: clients.publicClient,
97
- buildResult: async () => {
98
- try {
99
- const smLocal = subnetManager(cfg.network);
100
- const fee = await clients.publicClient.readContract({
101
- address: smLocal.address, abi: smLocal.abi, functionName: 'getAccessFeeREPPO', args: [datanetId],
102
- });
103
- return {
104
- datanetId: datanetId.toString(),
105
- to: target,
106
- feeREPPO: { raw: fee.toString(), formatted: formatUnits(fee, 18) },
107
- };
108
- }
109
- catch {
110
- return { datanetId: datanetId.toString(), to: target };
109
+ buildResult: (receipt) => {
110
+ const base = {
111
+ datanetId: datanetId.toString(),
112
+ to: target,
113
+ token: this.token,
114
+ gasEth: receiptGasEth(receipt),
115
+ };
116
+ if (ftMeta) {
117
+ const feePaid = tokenFeeFromReceipt(receipt, ftMeta.address, clients.account.address, ftMeta.decimals);
118
+ base.feePaid = feePaid;
119
+ if (this.token === 'reppo')
120
+ base.reppoFee = feePaid;
111
121
  }
122
+ return base;
112
123
  },
113
124
  });
114
125
  }
115
- // Throwing variants — write commands must fail loud on TBD.
116
126
  const sm = subnetManager(cfg.network);
117
- const reppo = reppoToken(cfg.network);
118
- // Pre-flight in parallel where independent.
119
- const [valid, alreadyHasAccess, fee, balance, allowance] = await Promise.all([
120
- clients.publicClient.readContract({
121
- address: sm.address, abi: sm.abi, functionName: 'validSubnet', args: [datanetId],
122
- }),
123
- clients.publicClient.readContract({
124
- address: sm.address, abi: sm.abi, functionName: 'hasSubnetAccess', args: [datanetId, target],
125
- }),
126
- clients.publicClient.readContract({
127
- address: sm.address, abi: sm.abi, functionName: 'getAccessFeeREPPO', args: [datanetId],
128
- }),
129
- clients.publicClient.readContract({
130
- address: reppo.address, abi: reppo.abi, functionName: 'balanceOf', args: [clients.account.address],
131
- }),
132
- clients.publicClient.readContract({
133
- address: reppo.address, abi: reppo.abi, functionName: 'allowance', args: [clients.account.address, sm.address],
134
- }),
135
- ]);
127
+ // Validate the datanet BEFORE resolving the fee token. A nonexistent
128
+ // datanet must surface DATANET_NOT_FOUND — not DATANET_HAS_NO_PRIMARY_TOKEN
129
+ // (getSubnetPrimaryToken returns address(0) for a missing subnet too, which
130
+ // would otherwise mis-report the cause on the `--token primary` path).
131
+ const valid = await clients.publicClient.readContract({
132
+ address: sm.address, abi: sm.abi, functionName: 'validSubnet', args: [datanetId],
133
+ });
136
134
  if (!valid) {
137
- throw cliError('DATANET_NOT_FOUND', `Datanet ${datanetId} does not exist on ${cfg.network}.`, `Verify the id; check \`reppo query subnet ${datanetId}\` before granting access.`);
135
+ throw cliError('DATANET_NOT_FOUND', `Datanet ${datanetId} does not exist on ${cfg.network}.`, `Verify the id; check \`reppo query datanet ${datanetId}\` before granting access.`);
138
136
  }
137
+ // Resolve the fee token: REPPO (pinned) or the datanet's primary token
138
+ // (discovered on-chain). decimals MUST be read for the primary token,
139
+ // never assumed 18 — a non-18-decimal token would otherwise corrupt every
140
+ // amount.
141
+ let feeTokenAddress;
142
+ let feeTokenDecimals;
143
+ let feeTokenSymbol;
144
+ if (this.token === 'reppo') {
145
+ feeTokenAddress = reppoToken(cfg.network).address;
146
+ feeTokenDecimals = 18;
147
+ feeTokenSymbol = 'REPPO';
148
+ }
149
+ else {
150
+ let primaryAddr;
151
+ try {
152
+ primaryAddr = await clients.publicClient.readContract({
153
+ address: sm.address, abi: sm.abi, functionName: 'getSubnetPrimaryToken', args: [datanetId],
154
+ });
155
+ }
156
+ catch {
157
+ throw cliError('DATANET_HAS_NO_PRIMARY_TOKEN', `Could not resolve a primary token for datanet ${datanetId} on ${cfg.network}.`, 'This datanet likely charges access in REPPO only — retry without `--token primary`.');
158
+ }
159
+ // getSubnetPrimaryToken returns address(0) for REPPO-only datanets.
160
+ if (BigInt(primaryAddr) === 0n) {
161
+ throw cliError('DATANET_HAS_NO_PRIMARY_TOKEN', `Datanet ${datanetId} has no primary token configured.`, 'This datanet charges access in REPPO only — retry without `--token primary`.');
162
+ }
163
+ feeTokenAddress = primaryAddr;
164
+ const ft = erc20(feeTokenAddress);
165
+ // decimals has no safe default — a wrong value corrupts every amount —
166
+ // so a read failure is a hard error, not a guess. Wrap it like symbol()
167
+ // below so a raw viem decode error doesn't surface as INTERNAL_ERROR.
168
+ feeTokenDecimals = await clients.publicClient
169
+ .readContract({ ...ft, functionName: 'decimals' })
170
+ .then((dec) => Number(dec))
171
+ .catch(() => {
172
+ throw cliError('INVALID_PRIMARY_TOKEN', `Could not read decimals() for datanet ${datanetId} primary token ${feeTokenAddress}.`, 'The primary token is not a standard ERC20 (decimals() reverted or returned non-numeric data).');
173
+ });
174
+ // symbol is cosmetic — best-effort: some tokens return bytes32, which would
175
+ // fail to decode against the `string` ABI and abort the whole command.
176
+ feeTokenSymbol = await clients.publicClient
177
+ .readContract({ ...ft, functionName: 'symbol' })
178
+ .catch(() => `${feeTokenAddress.slice(0, 6)}…${feeTokenAddress.slice(-4)}`);
179
+ }
180
+ const feeToken = erc20(feeTokenAddress);
181
+ // Pre-flight in parallel where independent (validSubnet already checked above).
182
+ const [alreadyHasAccess, fee, balance, allowance] = await Promise.all([
183
+ clients.publicClient.readContract({ address: sm.address, abi: sm.abi, functionName: 'hasSubnetAccess', args: [datanetId, target] }),
184
+ clients.publicClient.readContract({ address: sm.address, abi: sm.abi, functionName: fns.feeGetter, args: [datanetId] }),
185
+ clients.publicClient.readContract({ ...feeToken, functionName: 'balanceOf', args: [clients.account.address] }),
186
+ clients.publicClient.readContract({ ...feeToken, functionName: 'allowance', args: [clients.account.address, sm.address] }),
187
+ ]);
139
188
  if (alreadyHasAccess) {
140
189
  throw cliError('ACCESS_ALREADY_GRANTED', `${target} already has access to datanet ${datanetId}.`, 'Nothing to do — skip the call.');
141
190
  }
142
191
  if (balance < fee) {
143
- throw cliError('INSUFFICIENT_REPPO_BALANCE', `Caller has ${formatUnits(balance, 18)} REPPO but the fee is ${formatUnits(fee, 18)} REPPO.`, 'Acquire more REPPO before granting access.');
192
+ throw cliError(this.token === 'reppo' ? 'INSUFFICIENT_REPPO_BALANCE' : 'INSUFFICIENT_TOKEN_BALANCE', `Caller has ${formatUnits(balance, feeTokenDecimals)} ${feeTokenSymbol} but the fee is ${formatUnits(fee, feeTokenDecimals)} ${feeTokenSymbol}.`, `Acquire more ${feeTokenSymbol} before granting access.`);
144
193
  }
145
194
  if (allowance < fee) {
146
- throw cliError('INSUFFICIENT_ALLOWANCE', `REPPO allowance from ${clients.account.address} to SubnetManager is ${formatUnits(allowance, 18)}, ` +
147
- `below the fee of ${formatUnits(fee, 18)} REPPO.`, `Approve the SubnetManager (${sm.address}) for at least ${formatUnits(fee, 18)} REPPO. ` +
148
- `Auto-approval lands in v0.2; for the alpha, send the approve() tx manually (e.g. via cast).`);
195
+ throw cliError('INSUFFICIENT_ALLOWANCE', `${feeTokenSymbol} allowance from ${clients.account.address} to SubnetManager is ${formatUnits(allowance, feeTokenDecimals)}, ` +
196
+ `below the fee of ${formatUnits(fee, feeTokenDecimals)} ${feeTokenSymbol}.`, `Approve the SubnetManager (${sm.address}) for at least ${formatUnits(fee, feeTokenDecimals)} ${feeTokenSymbol} ` +
197
+ `(send the approve() tx manually, e.g. via cast).`);
149
198
  }
199
+ const feeFields = {
200
+ feeToken: { symbol: feeTokenSymbol, address: feeTokenAddress, decimals: feeTokenDecimals },
201
+ feeAmount: { raw: fee.toString(), formatted: formatUnits(fee, feeTokenDecimals) },
202
+ // Legacy REPPO field for back-compat with existing consumers; only set on the REPPO path.
203
+ ...(this.token === 'reppo'
204
+ ? { feeREPPO: { raw: fee.toString(), formatted: formatUnits(fee, 18) } }
205
+ : {}),
206
+ };
150
207
  if (this.dryRun) {
151
208
  const sim = await clients.publicClient.simulateContract({
152
- address: sm.address, abi: sm.abi, functionName: 'accessSubnetWithREPPOFee',
209
+ address: sm.address, abi: sm.abi, functionName: fns.access,
153
210
  args: [datanetId, target], account: clients.account,
154
211
  }).catch((e) => {
155
212
  const decoded = decodeRevert(e);
@@ -159,7 +216,8 @@ export class GrantAccessCommand extends BaseCommand {
159
216
  simulated: true,
160
217
  datanetId: datanetId.toString(),
161
218
  to: target,
162
- feeREPPO: { raw: fee.toString(), formatted: formatUnits(fee, 18) },
219
+ token: this.token,
220
+ ...feeFields,
163
221
  gas: sim.request.gas?.toString() ?? null,
164
222
  });
165
223
  return 0;
@@ -170,7 +228,7 @@ export class GrantAccessCommand extends BaseCommand {
170
228
  try {
171
229
  const nonce = await nextNonce(clients.publicClient, clients.account.address);
172
230
  tx = await clients.walletClient.writeContract({
173
- address: sm.address, abi: sm.abi, functionName: 'accessSubnetWithREPPOFee',
231
+ address: sm.address, abi: sm.abi, functionName: fns.access,
174
232
  args: [datanetId, target],
175
233
  chain: clients.walletClient.chain, account: clients.account, nonce,
176
234
  });
@@ -181,12 +239,9 @@ export class GrantAccessCommand extends BaseCommand {
181
239
  await markFailed(this.idempotencyKey, COMMAND, args, decoded.code);
182
240
  throw cliError(decoded.code, 'grant-access tx failed to submit', decoded.hint);
183
241
  }
184
- // markSubmitted BEFORE waitForReceipt — closes the retry-resend window.
185
242
  if (this.idempotencyKey) {
186
243
  await markSubmitted(this.idempotencyKey, COMMAND, args, tx, {
187
- datanetId: datanetId.toString(),
188
- to: target,
189
- feeREPPO: { raw: fee.toString(), formatted: formatUnits(fee, 18) },
244
+ datanetId: datanetId.toString(), to: target, token: this.token, ...feeFields,
190
245
  });
191
246
  }
192
247
  const receipt = await waitForWriteReceipt(clients.publicClient, tx);
@@ -195,13 +250,18 @@ export class GrantAccessCommand extends BaseCommand {
195
250
  await markFailed(this.idempotencyKey, COMMAND, args, 'TX_REVERTED', tx);
196
251
  throw cliError('TX_REVERTED', `grant-access tx reverted: ${tx}`);
197
252
  }
253
+ const feePaid = tokenFeeFromReceipt(receipt, feeTokenAddress, clients.account.address, feeTokenDecimals);
198
254
  const result = {
199
255
  txHash: tx,
200
256
  gasEth: receiptGasEth(receipt),
201
- reppoFee: reppoFeeFromReceipt(receipt, reppoToken(cfg.network).address, clients.account.address),
257
+ feePaid,
258
+ // Legacy top-level field for back-compat with pre-0.8.5 consumers that
259
+ // read `reppoFee`; only meaningful on the REPPO path.
260
+ ...(this.token === 'reppo' ? { reppoFee: feePaid } : {}),
202
261
  datanetId: datanetId.toString(),
203
262
  to: target,
204
- feeREPPO: { raw: fee.toString(), formatted: formatUnits(fee, 18) },
263
+ token: this.token,
264
+ ...feeFields,
205
265
  block: receipt.blockNumber.toString(),
206
266
  basescanUrl: cfg.network === 'mainnet'
207
267
  ? `https://basescan.org/tx/${tx}`
@@ -209,9 +269,11 @@ export class GrantAccessCommand extends BaseCommand {
209
269
  };
210
270
  if (this.idempotencyKey)
211
271
  await markConfirmed(this.idempotencyKey, COMMAND, args, result, tx);
272
+ // Show the on-chain fee quote (always correct); feePaid in JSON is the
273
+ // receipt-derived actual, which can read 0 for non-standard transfer flows.
212
274
  emit(result, [
213
275
  `✓ Granted ${target} access to datanet ${datanetId}`,
214
- ` fee paid: ${formatUnits(fee, 18)} REPPO`,
276
+ ` fee: ${result.feeAmount.formatted} ${feeTokenSymbol}`,
215
277
  ` tx: ${result.basescanUrl}`,
216
278
  ` block: ${receipt.blockNumber}`,
217
279
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"grant-access.js","sourceRoot":"","sources":["../../src/commands/grant-access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grant-access.js","sourceRoot":"","sources":["../../src/commands/grant-access.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"datanet.d.ts","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgC1C,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAgB,KAAK,aAA0B;IAE/C,OAAgB,KAAK,4BAUlB;IAEH,OAAO,SAAqC;IAC5C,IAAI,qBAA+H;IAE7H,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA6GhC,OAAO,CAAC,oBAAoB;IAW5B;;;;;OAKG;YACW,aAAa;IAW3B,OAAO,CAAC,UAAU;IAsBlB,uDAAuD;IACvD,OAAO,CAAC,aAAa;CAyBtB"}
1
+ {"version":3,"file":"datanet.d.ts","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgC1C,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAgB,KAAK,aAA0B;IAE/C,OAAgB,KAAK,4BAUlB;IAEH,OAAO,SAAqC;IAC5C,IAAI,qBAA+H;IAE7H,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA8JhC,OAAO,CAAC,oBAAoB;IAW5B;;;;;OAKG;YACW,aAAa;IAW3B,OAAO,CAAC,UAAU;IAsBlB,uDAAuD;IACvD,OAAO,CAAC,aAAa;CAyBtB"}
@@ -22,7 +22,7 @@ import { privateKeyToAddress } from 'viem/accounts';
22
22
  import { BaseCommand } from '../_base.js';
23
23
  import { cliError, emit } from '../../output/format.js';
24
24
  import { createReadClient } from '../../chain/clients.js';
25
- import { trySubnetManager, tryVeReppo } from '../../chain/contracts.js';
25
+ import { trySubnetManager, tryVeReppo, erc20 } from '../../chain/contracts.js';
26
26
  import { DEFAULT_PUBLIC_API_URL } from '../../api/public.js';
27
27
  import { fetchSubnetByTokenId, numericToString } from '../../api/subnets.js';
28
28
  function unavailable(reason) {
@@ -98,6 +98,46 @@ export class QueryDatanetCommand extends BaseCommand {
98
98
  ? await client.readContract({ ...sm, functionName: 'getAccessFeeREPPO', args: [datanetId] })
99
99
  .then((v) => ({ raw: v.toString(), formatted: formatUnits(v, 18) }))
100
100
  : unavailable('datanet does not exist');
101
+ // Primary-token access fee — for datanets that charge access in their own
102
+ // token rather than REPPO. Best-effort and decimals-aware: a revert here
103
+ // (or a datanet with no primary token) must NOT break the REPPO answer.
104
+ let accessFeePrimaryToken = unavailable('not read');
105
+ let primaryToken;
106
+ if (valid) {
107
+ try {
108
+ const primaryAddr = await client.readContract({
109
+ ...sm, functionName: 'getSubnetPrimaryToken', args: [datanetId],
110
+ });
111
+ // getSubnetPrimaryToken returns address(0) for REPPO-only datanets.
112
+ // Short-circuit BEFORE touching the token (mirrors grant-access.ts's
113
+ // guard): no decimals()/symbol()/fee read, and primaryToken stays
114
+ // undefined. The wording is DISTINCT from a read failure so callers
115
+ // can tell "this datanet has no primary token" apart from a transport
116
+ // error.
117
+ if (BigInt(primaryAddr) === 0n) {
118
+ accessFeePrimaryToken = unavailable('datanet has no primary token');
119
+ }
120
+ else {
121
+ const ft = erc20(primaryAddr);
122
+ const [dec, sym, pFee] = await Promise.all([
123
+ client.readContract({ ...ft, functionName: 'decimals' }),
124
+ // symbol is cosmetic — best-effort: bytes32/non-standard tokens fail
125
+ // to decode against the `string` ABI; fall back to '' rather than abort.
126
+ client.readContract({ ...ft, functionName: 'symbol' }).catch(() => ''),
127
+ client.readContract({ ...sm, functionName: 'getAccessFeePrimaryToken', args: [datanetId] }),
128
+ ]);
129
+ const decimals = Number(dec);
130
+ primaryToken = { address: primaryAddr, symbol: sym, decimals };
131
+ accessFeePrimaryToken = { raw: pFee.toString(), formatted: formatUnits(pFee, decimals) };
132
+ }
133
+ }
134
+ catch {
135
+ // The read failed (transport, or a non-standard token's decimals()/fee
136
+ // getter reverted). Best-effort — never break the REPPO answer above.
137
+ // Wording is distinct from the no-primary-token case above.
138
+ accessFeePrimaryToken = unavailable('primary-token access fee read failed');
139
+ }
140
+ }
101
141
  // Optional caller-access check.
102
142
  const callerAddr = this.resolveCallerAddress(cfg.privateKey);
103
143
  const callerAccess = callerAddr && valid
@@ -114,6 +154,8 @@ export class QueryDatanetCommand extends BaseCommand {
114
154
  valid,
115
155
  currentEpoch,
116
156
  accessFeeREPPO,
157
+ accessFeePrimaryToken,
158
+ ...(primaryToken ? { primaryToken } : {}),
117
159
  ...(callerAccess ? { callerAccess } : {}),
118
160
  metadata,
119
161
  };
@@ -127,6 +169,12 @@ export class QueryDatanetCommand extends BaseCommand {
127
169
  `Current epoch: ${currentEpoch ?? '(unavailable)'}`,
128
170
  `Access fee: ${feeFmt}`,
129
171
  ];
172
+ // Primary-token access fee — shown only when the datanet actually has a
173
+ // primary token (primaryToken present implies accessFeePrimaryToken is numeric).
174
+ if (primaryToken && 'formatted' in accessFeePrimaryToken) {
175
+ lines.push(`Access fee (primary): ${accessFeePrimaryToken.formatted} ${primaryToken.symbol} ` +
176
+ `(${primaryToken.address}, ${primaryToken.decimals} dp)`);
177
+ }
130
178
  if (callerAccess) {
131
179
  lines.push(`Caller: ${callerAccess.address}`);
132
180
  lines.push(`Caller access: ${callerAccess.hasAccess}`);
@@ -1 +1 @@
1
- {"version":3,"file":"datanet.js","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datanet.js","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAgB,MAAM,MAAM,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC;AAuB7F,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/C,MAAM,CAAU,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QACxC,WAAW,EAAE,0FAA0F;QACvG,QAAQ,EAAE;YACR,CAAC,oBAAoB;gBACnB,wBAAwB,CAAC;YAC3B,CAAC,6CAA6C;gBAC5C,0CAA0C,CAAC;YAC7C,CAAC,0BAA0B;gBACzB,+BAA+B,CAAC;SACnC;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kFAAkF,EAAE,CAAC,CAAC;IAEnI,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAE9B,IAAI,SAAiB,CAAC;YACtB,IAAI,CAAC;gBACH,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,QAAQ,CAAC,oBAAoB,EAAE,mDAAmD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAC5G,CAAC;YAED,mEAAmE;YACnE,sEAAsE;YACtE,uEAAuE;YACvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEhE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACzG,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEzC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,8CAA8C,GAAG,CAAC,OAAO,GAAG,CAAC;gBAC5E,IAAI,CACF;oBACE,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;oBAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;oBAC1B,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC;oBACnC,QAAQ;iBACT,EACD;oBACE,kBAAkB,SAAS,EAAE;oBAC7B,kBAAkB,GAAG,CAAC,OAAO,EAAE;oBAC/B,0BAA0B,MAAM,GAAG;oBACnC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;iBAChC,CACF,CAAC;gBACF,OAAO,CAAC,CAAC;YACX,CAAC;YAED,oFAAoF;YACpF,MAAM,KAAK,GAAY,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAE5G,yEAAyE;YACzE,sEAAsE;YACtE,iEAAiE;YACjE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;oBAC7E,YAAY,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1D,CAAC;gBAAC,MAAM,CAAC;oBACP,kEAAkE;gBACpE,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,oEAAoE;YACpE,sEAAsE;YACtE,MAAM,cAAc,GAAY,KAAK;gBACnC,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;qBACvF,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;YAE1C,0EAA0E;YAC1E,yEAAyE;YACzE,wEAAwE;YACxE,IAAI,qBAAqB,GAAY,WAAW,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,YAA+E,CAAC;YACpF,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;wBAC5C,GAAG,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC;qBAChE,CAAC,CAAC;oBACH,oEAAoE;oBACpE,qEAAqE;oBACrE,kEAAkE;oBAClE,oEAAoE;oBACpE,sEAAsE;oBACtE,SAAS;oBACT,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;wBAC/B,qBAAqB,GAAG,WAAW,CAAC,8BAA8B,CAAC,CAAC;oBACtE,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;wBAC9B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;4BACzC,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;4BACxD,qEAAqE;4BACrE,yEAAyE;4BACzE,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;4BACtE,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;yBAC5F,CAAC,CAAC;wBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC7B,YAAY,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;wBAC/D,qBAAqB,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC3F,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uEAAuE;oBACvE,sEAAsE;oBACtE,4DAA4D;oBAC5D,qBAAqB,GAAG,WAAW,CAAC,sCAAsC,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7D,MAAM,YAAY,GAAG,UAAU,IAAI,KAAK;gBACtC,CAAC,CAAC;oBACE,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,MAAM,MAAM,CAAC,YAAY,CAAC;wBACnC,GAAG,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;qBACtE,CAAC;iBACH;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,MAAM,GAAG;gBACb,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;gBAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK;gBACL,YAAY;gBACZ,cAAc;gBACd,qBAAqB;gBACrB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,QAAQ;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,aAAa,IAAI,cAAc;gBAC5C,CAAC,CAAC,iBAAiB,cAAc,CAAC,WAAW,GAAG;gBAChD,CAAC,CAAC,GAAG,cAAc,CAAC,SAAS,QAAQ,CAAC;YAExC,MAAM,KAAK,GAAG;gBACZ,kBAAkB,SAAS,EAAE;gBAC7B,kBAAkB,GAAG,CAAC,OAAO,EAAE;gBAC/B,kBAAkB,KAAK,EAAE;gBACzB,kBAAkB,YAAY,IAAI,eAAe,EAAE;gBACnD,kBAAkB,MAAM,EAAE;aAC3B,CAAC;YACF,wEAAwE;YACxE,iFAAiF;YACjF,IAAI,YAAY,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CACR,yBAAyB,qBAAqB,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG;oBAChF,IAAI,YAAY,CAAC,OAAO,KAAK,YAAY,CAAC,QAAQ,MAAM,CAC3D,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE5C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,EAA6B;QACxD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,QAAQ,CAAC,iBAAiB,EAAE,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,EAAE;YAAE,OAAO,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,sBAAsB,CAAC;QAC3E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG;gBAAE,OAAO,WAAW,CAAC,yCAAyC,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,yBAA0B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,CAAY;QAC7B,OAAO;YACL,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE;YACtB,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;YACxB,WAAW,EAAE,CAAC,CAAC,iBAAiB,IAAI,EAAE;YACtC,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;YAC7B,WAAW,EAAE;gBACX,OAAO,EAAE,CAAC,CAAC,kBAAkB,IAAI,EAAE;gBACnC,MAAM,EAAE,CAAC,CAAC,iBAAiB,IAAI,EAAE;gBACjC,QAAQ,EAAE,OAAO,CAAC,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;aAChF;YACD,sBAAsB,EAAE,eAAe,CAAC,CAAC,CAAC,sBAAsB,CAAC;YACjE,6BAA6B,EAAE,eAAe,CAAC,CAAC,CAAC,6BAA6B,CAAC;YAC/E,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC;YAC7C,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;YACjD,oBAAoB,EAAE,CAAC,CAAC,oBAAoB,IAAI,EAAE;YAClD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,EAAE;YAC1C,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;YAClC,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,KAAK;SAChD,CAAC;IACJ,CAAC;IAED,uDAAuD;IAC/C,aAAa,CAAC,CAAW;QAC/B,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,gCAAgC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,EAAE;YACF,kBAAkB,CAAC,CAAC,IAAI,EAAE;YAC1B,kBAAkB,CAAC,CAAC,MAAM,EAAE;YAC5B,kBAAkB,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,WAAW,CAAC,QAAQ,cAAc,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE;YACtG,kBAAkB,CAAC,CAAC,sBAAsB,cAAc;gBACtD,CAAC,CAAC,CAAC,6BAA6B,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,6BAA6B,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,mBAAmB,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,cAAc,EAAE;YAC1D,kBAAkB,CAAC,CAAC,UAAU,kDAAkD;SACjF,CAAC;QACF,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,0BAA0B,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reppo/cli",
3
- "version": "0.8.4",
3
+ "version": "0.8.6",
4
4
  "description": "Command-line interface for Reppo — mint pods, vote, lock REPPO, manage datanets. Built for AI agents.",
5
5
  "license": "MIT",
6
6
  "author": "Reppo Labs",