@bananapus/permission-ids-v6 0.0.22 → 0.0.24

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.
@@ -4,7 +4,9 @@ This repo is only permission ID constants, but those constants are security-crit
4
4
 
5
5
  ## Audit Objective
6
6
 
7
- Find issues that:
7
+ There is a billion dollars of well-meaning projects' money in the Juicebox Money Engine, growing exponentially. Your job is to hack it before anyone else. Whoever hacks it first saves/steals the money, and you are obsessed with being this winner, while also being a steward of the protocol and wanting it to keep growing safely.
8
+
9
+ Suggestions of where to look:
8
10
 
9
11
  - assign duplicate IDs to different permissions
10
12
  - mismatch IDs that downstream repos assume are canonical
@@ -33,7 +35,7 @@ This repo defines canonical numeric IDs that other repos treat as part of their
33
35
  | Dependency | Assumption | What breaks if wrong |
34
36
  |------------|------------|----------------------|
35
37
  | `nana-core-v6` | ERC-20 signature delegation still uses the documented ID | Signature authority checks mismatch |
36
- | `revnet-core-v6` | Loan and hidden-token permissions still use the documented IDs | Delegated actions widen, fail, or misroute |
38
+ | `revnet-core-v6` | Loan permissions still use the documented IDs | Delegated actions widen, fail, or misroute |
37
39
 
38
40
  ## Critical Invariants
39
41
 
@@ -41,7 +43,7 @@ This repo defines canonical numeric IDs that other repos treat as part of their
41
43
  2. No two distinct permissions share an ID.
42
44
  3. IDs match the expectations of all dependent repos in this workspace.
43
45
  4. ID `23` (`SIGN_FOR_ERC20`) matches the value used by `nana-core-v6` for ERC-1271 signature delegation.
44
- 5. IDs `36-40` used by `revnet-core-v6` match the values used in `REVHiddenTokens` and `REVLoans`.
46
+ 5. IDs used by `revnet-core-v6` match the values used in `REVLoans`.
45
47
 
46
48
  ## Attack Surfaces
47
49
 
package/CHANGELOG.md CHANGED
@@ -19,15 +19,13 @@ This file describes the verified change from `nana-permission-ids-v5` to the cur
19
19
 
20
20
  - `SIGN_FOR_ERC20` (23) — sign messages on behalf of a project's ERC-20 token via ERC-1271. Used for Etherscan contract verification and other off-chain signature validation.
21
21
 
22
- ## v6 additions: revnet-core delegation (IDs 36–40)
22
+ ## v6 additions: revnet-core delegation
23
23
 
24
- - `HIDE_TOKENS` (36) hide tokens on behalf of a holder via `REVHiddenTokens.hideTokensOf`. Checked against the token holder.
25
- - `OPEN_LOAN` (37) open a loan on behalf of a token holder via `REVLoans.borrowFrom`. Checked against the token holder.
26
- - `REALLOCATE_LOAN` (38) reallocate loan collateral on behalf of a loan NFT owner via `REVLoans.reallocateCollateralFromLoan`. Checked against the loan NFT owner.
27
- - `REPAY_LOAN` (39) — repay a loan on behalf of a loan NFT owner via `REVLoans.repayLoan`. Checked against the loan NFT owner.
28
- - `REVEAL_TOKENS` (40) — reveal hidden tokens on behalf of a holder via `REVHiddenTokens.revealTokensOf`. Checked against the token holder.
24
+ - `OPEN_LOAN` — open a loan on behalf of a token holder via `REVLoans.borrowFrom`. Checked against the token holder.
25
+ - `REALLOCATE_LOAN` — reallocate loan collateral on behalf of a loan NFT owner via `REVLoans.reallocateCollateralFromLoan`. Checked against the loan NFT owner.
26
+ - `REPAY_LOAN` — repay a loan on behalf of a loan NFT owner via `REVLoans.repayLoan`. Checked against the loan NFT owner.
29
27
 
30
- These are consumed by `revnet-core-v6` and checked via `JBPermissioned._requirePermissionFrom` (for `REVHiddenTokens`) or inline `PERMISSIONS.hasPermission` calls (for `REVLoans`).
28
+ These are consumed by `revnet-core-v6` and checked via inline `PERMISSIONS.hasPermission` calls (for `REVLoans`).
31
29
 
32
30
  ## Verified deltas
33
31
 
package/RISKS.md CHANGED
@@ -28,11 +28,11 @@ This file covers the coordination risks in `JBPermissionIds`. The contract surfa
28
28
 
29
29
  - **Fund-moving IDs.** `CASH_OUT_TOKENS` (`4`), `SEND_PAYOUTS` (`5`), `MIGRATE_TERMINAL` (`6`), `SET_TERMINALS` (`15`), `USE_ALLOWANCE` (`18`), and `SET_SPLIT_GROUPS` (`19`) can redirect or release value.
30
30
  - **Hook-routing IDs.** `SET_BUYBACK_POOL` (`28`), `SET_BUYBACK_HOOK` (`30`), and `SET_ROUTER_TERMINAL` (`31`) materially control execution routes and can lock those routes permanently.
31
- - **Revnet loan IDs.** `OPEN_LOAN` (`37`), `REALLOCATE_LOAN` (`38`), and `REPAY_LOAN` (`39`) are operationally powerful because they move collateral and debt state.
31
+ - **Revnet loan IDs.** `OPEN_LOAN` (`36`), `REALLOCATE_LOAN` (`37`), and `REPAY_LOAN` (`38`) are operationally powerful because they move collateral and debt state.
32
32
 
33
33
  ## 3. Integration Risks
34
34
 
35
- - **Docs can lag deployed assumptions.** Off-chain tooling, UIs, and audits often rely on human-readable permission names.
35
+ - **Docs can lag deployed assumptions.** Off-chain tooling, UIs, and reviews often rely on human-readable permission names.
36
36
  - **Cross-package imports must stay canonical.** Downstream repos should import this library instead of redefining numeric literals locally.
37
37
  - **Future IDs expand current `ROOT` power.** Any new permission automatically becomes available to existing `ROOT` operators.
38
38
 
package/STYLE_GUIDE.md CHANGED
@@ -451,54 +451,9 @@ jobs:
451
451
  run: forge fmt --check
452
452
  ```
453
453
 
454
- **slither.yml** (repos with `src/` contracts only):
455
- ```yaml
456
- name: slither
457
- on:
458
- pull_request:
459
- branches:
460
- - main
461
- push:
462
- branches:
463
- - main
464
- jobs:
465
- analyze:
466
- runs-on: ubuntu-latest
467
- steps:
468
- - uses: actions/checkout@v4
469
- with:
470
- submodules: recursive
471
- - uses: actions/setup-node@v4
472
- with:
473
- node-version: 25.9.0
474
- - name: Install npm dependencies
475
- run: npm install --omit=dev
476
- - name: Install Foundry
477
- uses: foundry-rs/foundry-toolchain@v1
478
- - name: Run slither
479
- uses: crytic/slither-action@v0.4.1
480
- with:
481
- slither-config: slither-ci.config.json
482
- fail-on: medium
483
- ```
484
-
485
- **slither-ci.config.json:**
486
- ```json
487
- {
488
- "detectors_to_exclude": "timestamp,uninitialized-local,naming-convention,solc-version,shadowing-local",
489
- "exclude_informational": true,
490
- "exclude_low": false,
491
- "exclude_medium": false,
492
- "exclude_high": false,
493
- "disable_color": false,
494
- "filter_paths": "(mocks/|test/|node_modules/|lib/)",
495
- "legacy_ast": false
496
- }
497
- ```
454
+ **Static review workflow** (repos with `src/` contracts only):
498
455
 
499
- **Variations:**
500
- - Deployer-only repos (no `src/`, only `script/`) skip slither entirely — the action's internal `forge build` skips `test/` and `script/` by default, leaving nothing to compile.
501
- - Use inline `// slither-disable-next-line <detector>` to suppress known false positives rather than adding to `detectors_to_exclude` in the config. The comment must be on the line immediately before the flagged expression.
456
+ Keep repo-local static review automation current with the package's runtime surface. At minimum, CI should run formatting, linting, and build checks with `--deny notes`. Repos that only contain deployment scripts can rely on the shared formatting and lint jobs unless they add runtime contracts.
502
457
 
503
458
  ### package.json
504
459
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bananapus/permission-ids-v6",
3
- "version": "0.0.22",
3
+ "version": "0.0.24",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,6 +13,6 @@ Use this file when you need to confirm the canonical numeric labels, not when yo
13
13
 
14
14
  ## Change Checklist
15
15
 
16
- - If you edit a constant, audit every dependent repo that imports it.
16
+ - If you edit a constant, review every dependent repo that imports it.
17
17
  - If you need to know who can exercise a permission, follow the usage into the enforcing repo rather than stopping here.
18
- - There are no repo-local tests here, so downstream compile and behavior audits matter more than this package in isolation.
18
+ - There are no repo-local tests here, so downstream compile and behavior reviews matter more than this package in isolation.
@@ -174,24 +174,15 @@ library JBPermissionIds {
174
174
  ─────────────────────────────────────────────────
175
175
  */
176
176
 
177
- /// @notice Hide tokens on behalf of a holder, removing them from public visibility
178
- /// (`REVHiddenTokens.hideTokensFor`).
179
- /// @dev Hidden tokens are still owned by the holder and can be revealed later.
180
- uint8 internal constant HIDE_TOKENS = 36;
181
-
182
177
  /// @notice Open a loan against project tokens as collateral on behalf of a token holder
183
178
  /// (`REVLoans.borrowFrom`).
184
- uint8 internal constant OPEN_LOAN = 37;
179
+ uint8 internal constant OPEN_LOAN = 36;
185
180
 
186
181
  /// @notice Move loan collateral between projects on behalf of a loan owner
187
182
  /// (`REVLoans.reallocateCollateralFromLoan`).
188
- uint8 internal constant REALLOCATE_LOAN = 38;
183
+ uint8 internal constant REALLOCATE_LOAN = 37;
189
184
 
190
185
  /// @notice Repay a loan on behalf of the loan owner, returning collateral tokens
191
186
  /// (`REVLoans.repayLoan`).
192
- uint8 internal constant REPAY_LOAN = 39;
193
-
194
- /// @notice Reveal previously hidden tokens on behalf of a holder, making them publicly visible again
195
- /// (`REVHiddenTokens.revealTokensFor`).
196
- uint8 internal constant REVEAL_TOKENS = 40;
187
+ uint8 internal constant REPAY_LOAN = 38;
197
188
  }
@@ -1,10 +0,0 @@
1
- {
2
- "detectors_to_exclude": "timestamp,uninitialized-local,naming-convention,solc-version,shadowing-local",
3
- "exclude_informational": true,
4
- "exclude_low": false,
5
- "exclude_medium": false,
6
- "exclude_high": false,
7
- "disable_color": false,
8
- "filter_paths": "(mocks/|test/|node_modules/|lib/)",
9
- "legacy_ast": false
10
- }