Skip to content

Commit 21d21ea

Browse files
authored
refactor(token): rename NST supply to PublicSupply (#710)
1 parent 574e75e commit 21d21ea

13 files changed

Lines changed: 114 additions & 109 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515
### Changed
1616

1717
- Rename the contract-compilation scripts and Turbo tasks from `compact` / `compact:*` to `compile` / `compile:*`, and the Biome scripts from `fmt-and-lint` / `fmt-and-lint:*` to `lint` / `lint:*`. (#680)
18+
- Rename the native shielded token supply extensions to `NativeShieldedTokenPublicSupply` / `NativeShieldedTokenFamilyPublicSupply` (and the shared `NativeShieldedTokenPublicSupplyCore`), making explicit that they track supply on-chain and matching the `ConfidentialFungibleTokenPublicSupply` naming. (#710)
1819

1920
## 0.3.0-alpha (2026-06-30)
2021

contracts/src/token/NativeShieldedToken.compact

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pragma language_version >= 0.23.0;
4545
* recipient-public.
4646
*
4747
* @notice Supply accounting is opt-in: this module tracks NO supply totals.
48-
* Compose the optional `NativeShieldedTokenSupply` extension only if you need an
48+
* Compose the optional `NativeShieldedTokenPublicSupply` extension only if you need an
4949
* on-chain `totalSupply()`; see it for the privacy trade-off it introduces (it
5050
* makes contract-mediated burn amounts public).
5151
*

contracts/src/token/NativeShieldedTokenFamily.compact

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pragma language_version >= 0.23.0;
5353
* output, at the cost of making those mints recipient-public.
5454
*
5555
* @notice Supply accounting is opt-in: this module tracks NO supply totals.
56-
* Compose the optional `NativeShieldedTokenFamilySupply` extension only if you
56+
* Compose the optional `NativeShieldedTokenFamilyPublicSupply` extension only if you
5757
* need an on-chain `totalSupply(domain)`; see it for the privacy trade-off it
5858
* introduces (it makes contract-mediated burn amounts public).
5959
*

contracts/src/token/extensions/NativeShieldedTokenFamilySupply.compact renamed to contracts/src/token/extensions/NativeShieldedTokenFamilyPublicSupply.compact

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
// SPDX-License-Identifier: MIT
2-
// OpenZeppelin Compact Contracts v0.2.0 (token/extensions/NativeShieldedTokenFamilySupply.compact)
2+
// OpenZeppelin Compact Contracts v0.2.0 (token/extensions/NativeShieldedTokenFamilyPublicSupply.compact)
33

44
pragma language_version >= 0.23.0;
55

66
/**
7-
* @module NativeShieldedTokenFamilySupply
7+
* @module NativeShieldedTokenFamilyPublicSupply
88
* @description Optional standalone extension that adds per-domain on-chain
99
* supply accounting to a `NativeShieldedTokenFamily`. It exposes `_addMinted` /
1010
* `_addBurned` building blocks plus the `totalMinted` / `totalBurned` /
1111
* `totalSupply` getters, each keyed by domain. It imports no token module.
1212
*
13-
* It is a thin wrapper over `NativeShieldedTokenSupplyCore`, forwarding the
13+
* It is a thin wrapper over `NativeShieldedTokenPublicSupplyCore`, forwarding the
1414
* caller's per-call `domain`, so the accounting logic and guarantees live in
1515
* the shared core.
1616
*
@@ -51,25 +51,25 @@ pragma language_version >= 0.23.0;
5151
*
5252
* @dev Mint amounts are already public via the protocol's `shieldedMints`
5353
* effect, so `_addMinted` adds accounting, not disclosure. See
54-
* `NativeShieldedTokenSupplyCore` for the exact / lower-bound / upper-bound
54+
* `NativeShieldedTokenPublicSupplyCore` for the exact / lower-bound / upper-bound
5555
* guarantees, the per-domain `burned <= minted` invariant, and the mint-side
5656
* drift caveat.
5757
*
5858
* @warning Pair every mint with `_addMinted` and every burn with `_addBurned` on
5959
* every path, under the matching domain; mis-wiring is a security-critical,
6060
* undetectable error (e.g. an undercounted mint makes `_addBurned` reject
61-
* legitimate burns). See `NativeShieldedTokenSupplyCore`.
61+
* legitimate burns). See `NativeShieldedTokenPublicSupplyCore`.
6262
*/
63-
module NativeShieldedTokenFamilySupply {
63+
module NativeShieldedTokenFamilyPublicSupply {
6464
import CompactStandardLibrary;
65-
import "./NativeShieldedTokenSupplyCore" prefix Core_;
65+
import "./NativeShieldedTokenPublicSupplyCore" prefix Core_;
6666

6767
// Circuits use the `Core_` prefix above. The named import/re-export below is
6868
// only for the core supply ledger keys, so the implementing contract's ledger
6969
// keys read as `_totalMinted` / `_totalBurned` rather than
70-
// `NativeShieldedTokenSupplyCore__totalMinted`. The circuit names are
70+
// `NativeShieldedTokenPublicSupplyCore__totalMinted`. The circuit names are
7171
// intentionally NOT imported unprefixed, to avoid potential clashes.
72-
import { _totalMinted, _totalBurned } from "./NativeShieldedTokenSupplyCore";
72+
import { _totalMinted, _totalBurned } from "./NativeShieldedTokenPublicSupplyCore";
7373
export { _totalMinted, _totalBurned };
7474

7575
/**

contracts/src/token/extensions/NativeShieldedTokenSupply.compact renamed to contracts/src/token/extensions/NativeShieldedTokenPublicSupply.compact

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
// SPDX-License-Identifier: MIT
2-
// OpenZeppelin Compact Contracts v0.2.0 (token/extensions/NativeShieldedTokenSupply.compact)
2+
// OpenZeppelin Compact Contracts v0.2.0 (token/extensions/NativeShieldedTokenPublicSupply.compact)
33

44
pragma language_version >= 0.23.0;
55

66
/**
7-
* @module NativeShieldedTokenSupply
7+
* @module NativeShieldedTokenPublicSupply
88
* @description Optional standalone extension that adds on-chain supply
99
* accounting to a `NativeShieldedToken`. It exposes scalar `_addMinted` /
1010
* `_addBurned` building blocks plus the `totalMinted` / `totalBurned` /
1111
* `totalSupply` getters. It imports no token module.
1212
*
13-
* It is a thin wrapper over `NativeShieldedTokenSupplyCore`, forwarding a
13+
* It is a thin wrapper over `NativeShieldedTokenPublicSupplyCore`, forwarding a
1414
* single fixed key (the paired contract has exactly one token type), so the
1515
* accounting logic and guarantees live in the shared core.
1616
*
@@ -48,24 +48,24 @@ pragma language_version >= 0.23.0;
4848
*
4949
* @dev Mint amounts are already public via the protocol's `shieldedMints`
5050
* effect, so `_addMinted` adds accounting, not disclosure. See
51-
* `NativeShieldedTokenSupplyCore` for the exact / lower-bound / upper-bound
51+
* `NativeShieldedTokenPublicSupplyCore` for the exact / lower-bound / upper-bound
5252
* guarantees, the `burned <= minted` invariant, and the mint-side drift caveat.
5353
*
5454
* @warning Pair every mint with `_addMinted` and every burn with `_addBurned` on
5555
* every path; mis-wiring is a security-critical, undetectable error (e.g. an
5656
* undercounted mint makes `_addBurned` reject legitimate burns). See
57-
* `NativeShieldedTokenSupplyCore`.
57+
* `NativeShieldedTokenPublicSupplyCore`.
5858
*/
59-
module NativeShieldedTokenSupply {
59+
module NativeShieldedTokenPublicSupply {
6060
import CompactStandardLibrary;
61-
import "./NativeShieldedTokenSupplyCore" prefix Core_;
61+
import "./NativeShieldedTokenPublicSupplyCore" prefix Core_;
6262

6363
// Circuits use the `Core_` prefix above. The named import/re-export below is
6464
// only for the core supply ledger keys, so the implementing contract's ledger
6565
// keys read as `_totalMinted` / `_totalBurned` rather than
66-
// `NativeShieldedTokenSupplyCore__totalMinted`. The circuit names are
66+
// `NativeShieldedTokenPublicSupplyCore__totalMinted`. The circuit names are
6767
// intentionally NOT imported unprefixed, to avoid potential clashes.
68-
import { _totalMinted, _totalBurned } from "./NativeShieldedTokenSupplyCore";
68+
import { _totalMinted, _totalBurned } from "./NativeShieldedTokenPublicSupplyCore";
6969
export { _totalMinted, _totalBurned };
7070

7171
/**

contracts/src/token/extensions/NativeShieldedTokenSupplyCore.compact renamed to contracts/src/token/extensions/NativeShieldedTokenPublicSupplyCore.compact

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// SPDX-License-Identifier: MIT
2-
// OpenZeppelin Compact Contracts v0.2.0 (token/extensions/NativeShieldedTokenSupplyCore.compact)
2+
// OpenZeppelin Compact Contracts v0.2.0 (token/extensions/NativeShieldedTokenPublicSupplyCore.compact)
33

44
pragma language_version >= 0.23.0;
55

66
/**
7-
* @module NativeShieldedTokenSupplyCore
7+
* @module NativeShieldedTokenPublicSupplyCore
88
* @description Shared, domain-keyed core of the optional supply-accounting
99
* extension. It owns the per-domain minted/burned maps and exposes the
1010
* `_addMinted` / `_addBurned` building blocks plus the `totalMinted` /
@@ -13,12 +13,12 @@ pragma language_version >= 0.23.0;
1313
* This module is NOT meant to be composed directly. It is the de-duplicated
1414
* base behind the two user-facing flavors:
1515
*
16-
* - `NativeShieldedTokenSupply` — pairs with `NativeShieldedToken`; forwards a
16+
* - `NativeShieldedTokenPublicSupply` — pairs with `NativeShieldedToken`; forwards a
1717
* single fixed key (the contract has one token type).
18-
* - `NativeShieldedTokenFamilySupply` — pairs with `NativeShieldedTokenFamily`;
18+
* - `NativeShieldedTokenFamilyPublicSupply` — pairs with `NativeShieldedTokenFamily`;
1919
* forwards the caller's per-call `domain`.
2020
*
21-
* @dev Assertion messages use the generic `NativeShieldedTokenSupply:` prefix
21+
* @dev Assertion messages use the generic `NativeShieldedTokenPublicSupply:` prefix
2222
* so they read sensibly from either flavor. There is no initialization: an
2323
* absent domain key reads as 0, and the getters do not gate on the paired token
2424
* module's init flag (a counter reading 0 before init is correct), so init
@@ -51,7 +51,7 @@ pragma language_version >= 0.23.0;
5151
* overstates circulating supply.
5252
* Call the matching accounting block on every mint and burn path, same domain.
5353
*/
54-
module NativeShieldedTokenSupplyCore {
54+
module NativeShieldedTokenPublicSupplyCore {
5555
import CompactStandardLibrary;
5656
import "../../utils/Utils" prefix Utils_;
5757

@@ -79,7 +79,7 @@ module NativeShieldedTokenSupplyCore {
7979
*/
8080
export circuit _addMinted(domain: Bytes<32>, amount: Uint<64>): [] {
8181
const current = totalMinted(domain);
82-
assert(Utils_UINT128_MAX() - current >= amount, "NativeShieldedTokenSupply: arithmetic overflow");
82+
assert(Utils_UINT128_MAX() - current >= amount, "NativeShieldedTokenPublicSupply: arithmetic overflow");
8383
_totalMinted.insert(disclose(domain), disclose((current + amount) as Uint<128>));
8484
}
8585

@@ -103,8 +103,8 @@ module NativeShieldedTokenSupplyCore {
103103
// First guards the subtraction below from underflowing on an already-corrupt
104104
// state (stored burned past minted); the second is the reachable per-call
105105
// check that this burn does not push the domain past its minted total.
106-
assert(minted >= current, "NativeShieldedTokenSupply: burned total exceeds minted");
107-
assert(minted - current >= amount, "NativeShieldedTokenSupply: burn exceeds available supply");
106+
assert(minted >= current, "NativeShieldedTokenPublicSupply: burned total exceeds minted");
107+
assert(minted - current >= amount, "NativeShieldedTokenPublicSupply: burn exceeds available supply");
108108
_totalBurned.insert(disclose(domain), disclose((current + amount) as Uint<128>));
109109
}
110110

contracts/src/token/test/extensions/NativeShieldedTokenFamilySupply.test.ts renamed to contracts/src/token/test/extensions/NativeShieldedTokenFamilyPublicSupply.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { beforeEach, describe, expect, it } from 'vitest';
2-
import { NativeShieldedTokenFamilySupplySimulator } from '../simulators/NativeShieldedTokenFamilySupplySimulator.js';
2+
import { NativeShieldedTokenFamilyPublicSupplySimulator } from '../simulators/NativeShieldedTokenFamilyPublicSupplySimulator.js';
33

44
const b32 = (label: string): Uint8Array => {
55
const u = new Uint8Array(32);
@@ -13,11 +13,11 @@ const DOMAIN_B = b32('domain-B');
1313
// The per-domain supply extension imports no token module, so it is unit-tested
1414
// by driving its accounting blocks and getters directly.
1515

16-
let supply: NativeShieldedTokenFamilySupplySimulator;
16+
let supply: NativeShieldedTokenFamilyPublicSupplySimulator;
1717

18-
describe('NativeShieldedTokenFamilySupply (extension)', () => {
18+
describe('NativeShieldedTokenFamilyPublicSupply (extension)', () => {
1919
beforeEach(async () => {
20-
supply = await NativeShieldedTokenFamilySupplySimulator.create();
20+
supply = await NativeShieldedTokenFamilyPublicSupplySimulator.create();
2121
});
2222

2323
describe('initial state', () => {
@@ -65,14 +65,14 @@ describe('NativeShieldedTokenFamilySupply (extension)', () => {
6565
await supply._addMinted(DOMAIN_A, 1_000n);
6666
// DOMAIN_B was never minted; burning under it must revert.
6767
await expect(supply._addBurned(DOMAIN_B, 1n)).rejects.toThrow(
68-
'NativeShieldedTokenSupply: burn exceeds available supply',
68+
'NativeShieldedTokenPublicSupply: burn exceeds available supply',
6969
);
7070
});
7171

7272
it('should revert a burn that exceeds the domain minted total', async () => {
7373
await supply._addMinted(DOMAIN_A, 1_000n);
7474
await expect(supply._addBurned(DOMAIN_A, 1_001n)).rejects.toThrow(
75-
'NativeShieldedTokenSupply: burn exceeds available supply',
75+
'NativeShieldedTokenPublicSupply: burn exceeds available supply',
7676
);
7777
});
7878

@@ -82,7 +82,7 @@ describe('NativeShieldedTokenFamilySupply (extension)', () => {
8282
// available-supply check) is what fires.
8383
await supply.unsafeSetBurned(DOMAIN_A, 1_500n);
8484
await expect(supply._addBurned(DOMAIN_A, 1n)).rejects.toThrow(
85-
'NativeShieldedTokenSupply: burned total exceeds minted',
85+
'NativeShieldedTokenPublicSupply: burned total exceeds minted',
8686
);
8787
});
8888
});

contracts/src/token/test/extensions/NativeShieldedTokenSupply.property.test.ts renamed to contracts/src/token/test/extensions/NativeShieldedTokenPublicSupply.property.test.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import fc from 'fast-check';
22
import { describe, expect, it } from 'vitest';
3-
import { NativeShieldedTokenFamilySupplySimulator } from '../simulators/NativeShieldedTokenFamilySupplySimulator.js';
4-
import { NativeShieldedTokenSupplySimulator } from '../simulators/NativeShieldedTokenSupplySimulator.js';
3+
import { NativeShieldedTokenFamilyPublicSupplySimulator } from '../simulators/NativeShieldedTokenFamilyPublicSupplySimulator.js';
4+
import { NativeShieldedTokenPublicSupplySimulator } from '../simulators/NativeShieldedTokenPublicSupplySimulator.js';
55

66
// Property-based invariant fuzzing over random mint/burn op sequences for the
77
// supply extension. Both flavors are covered in one file: the scalar
8-
// `NativeShieldedTokenSupply` and the per-domain `NativeShieldedTokenFamilySupply`.
9-
// Both delegate to the shared `NativeShieldedTokenSupplyCore`, so the core
8+
// `NativeShieldedTokenPublicSupply` and the per-domain `NativeShieldedTokenFamilyPublicSupply`.
9+
// Both delegate to the shared `NativeShieldedTokenPublicSupplyCore`, so the core
1010
// accounting is exercised transitively through each.
1111
//
1212
// Conservation (burned <= minted) is respected by construction: each op burns
@@ -24,13 +24,14 @@ const opArb = fc.record({
2424
burnPct: fc.integer({ min: 0, max: 100 }),
2525
});
2626

27-
describe('NativeShieldedTokenSupply(Core/Family) — property: supply invariants under random op sequences', () => {
27+
describe('NativeShieldedTokenPublicSupply(Core/Family) — property: supply invariants under random op sequences', () => {
2828
it('should keep totalMinted exact, totalSupply = minted - burned, and burned <= minted (scalar)', async () => {
2929
await fc.assert(
3030
fc.asyncProperty(
3131
fc.array(opArb, { minLength: 1, maxLength: 6 }),
3232
async (ops) => {
33-
const supply = await NativeShieldedTokenSupplySimulator.create();
33+
const supply =
34+
await NativeShieldedTokenPublicSupplySimulator.create();
3435
let expectedMinted = 0n;
3536
let expectedBurned = 0n;
3637

@@ -71,7 +72,7 @@ describe('NativeShieldedTokenSupply(Core/Family) — property: supply invariants
7172
),
7273
async (ops) => {
7374
const supply =
74-
await NativeShieldedTokenFamilySupplySimulator.create();
75+
await NativeShieldedTokenFamilyPublicSupplySimulator.create();
7576
const expectedMinted = DOMAINS.map(() => 0n);
7677
const expectedBurned = DOMAINS.map(() => 0n);
7778

contracts/src/token/test/extensions/NativeShieldedTokenSupply.test.ts renamed to contracts/src/token/test/extensions/NativeShieldedTokenPublicSupply.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { beforeEach, describe, expect, it } from 'vitest';
2-
import { NativeShieldedTokenSupplySimulator } from '../simulators/NativeShieldedTokenSupplySimulator.js';
2+
import { NativeShieldedTokenPublicSupplySimulator } from '../simulators/NativeShieldedTokenPublicSupplySimulator.js';
33

44
// The supply extension imports no token module, so it is unit-tested by driving
55
// its accounting blocks (`_addMinted` / `_addBurned`) and getters directly.
66

7-
let supply: NativeShieldedTokenSupplySimulator;
7+
let supply: NativeShieldedTokenPublicSupplySimulator;
88

9-
describe('NativeShieldedTokenSupply (extension)', () => {
9+
describe('NativeShieldedTokenPublicSupply (extension)', () => {
1010
beforeEach(async () => {
11-
supply = await NativeShieldedTokenSupplySimulator.create();
11+
supply = await NativeShieldedTokenPublicSupplySimulator.create();
1212
});
1313

1414
describe('initial state', () => {
@@ -37,22 +37,22 @@ describe('NativeShieldedTokenSupply (extension)', () => {
3737

3838
it('should revert an unpaired burn (burned exceeds minted from zero)', async () => {
3939
await expect(supply._addBurned(1n)).rejects.toThrow(
40-
'NativeShieldedTokenSupply: burn exceeds available supply',
40+
'NativeShieldedTokenPublicSupply: burn exceeds available supply',
4141
);
4242
});
4343

4444
it('should revert a burn that exceeds the minted total', async () => {
4545
await supply._addMinted(1_000n);
4646
await expect(supply._addBurned(1_001n)).rejects.toThrow(
47-
'NativeShieldedTokenSupply: burn exceeds available supply',
47+
'NativeShieldedTokenPublicSupply: burn exceeds available supply',
4848
);
4949
});
5050

5151
it('should revert a duplicate burn that pushes past minted', async () => {
5252
await supply._addMinted(1_000n);
5353
await supply._addBurned(600n);
5454
await expect(supply._addBurned(600n)).rejects.toThrow(
55-
'NativeShieldedTokenSupply: burn exceeds available supply',
55+
'NativeShieldedTokenPublicSupply: burn exceeds available supply',
5656
);
5757
// The rejected burn left the total unchanged.
5858
expect(await supply.totalBurned()).toBe(600n);
@@ -64,7 +64,7 @@ describe('NativeShieldedTokenSupply (extension)', () => {
6464
// first guard (not the available-supply check) is what fires.
6565
await supply.unsafeSetBurned(1_500n);
6666
await expect(supply._addBurned(1n)).rejects.toThrow(
67-
'NativeShieldedTokenSupply: burned total exceeds minted',
67+
'NativeShieldedTokenPublicSupply: burned total exceeds minted',
6868
);
6969
});
7070
});

contracts/src/token/test/mocks/MockNativeShieldedTokenFamilySupply.compact renamed to contracts/src/token/test/mocks/MockNativeShieldedTokenFamilyPublicSupply.compact

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,37 +9,37 @@ pragma language_version >= 0.23.0;
99

1010
import CompactStandardLibrary;
1111

12-
import "../../extensions/NativeShieldedTokenFamilySupply" prefix NativeShieldedTokenFamilySupply_;
12+
import "../../extensions/NativeShieldedTokenFamilyPublicSupply" prefix NativeShieldedTokenFamilyPublicSupply_;
1313

1414
export { ZswapCoinPublicKey, ContractAddress, Either, Maybe };
1515

1616
// Surface the core supply ledger state unprefixed so tests can read it via
1717
// `getPublicState()` and assert the per-domain accounting getters return it verbatim.
18-
import { _totalMinted, _totalBurned } from "../../extensions/NativeShieldedTokenFamilySupply";
18+
import { _totalMinted, _totalBurned } from "../../extensions/NativeShieldedTokenFamilyPublicSupply";
1919
export { _totalMinted, _totalBurned };
2020

21-
// Unit mock for the NativeShieldedTokenFamilySupply extension in isolation. The
21+
// Unit mock for the NativeShieldedTokenFamilyPublicSupply extension in isolation. The
2222
// extension imports no token module, so the per-domain accounting blocks and
2323
// getters are driven directly here. The extension needs no initialization.
2424

2525
export circuit _addMinted(domain: Bytes<32>, amount: Uint<64>): [] {
26-
NativeShieldedTokenFamilySupply__addMinted(domain, amount);
26+
NativeShieldedTokenFamilyPublicSupply__addMinted(domain, amount);
2727
}
2828

2929
export circuit _addBurned(domain: Bytes<32>, amount: Uint<128>): [] {
30-
NativeShieldedTokenFamilySupply__addBurned(domain, amount);
30+
NativeShieldedTokenFamilyPublicSupply__addBurned(domain, amount);
3131
}
3232

3333
export circuit totalMinted(domain: Bytes<32>): Uint<128> {
34-
return NativeShieldedTokenFamilySupply_totalMinted(domain);
34+
return NativeShieldedTokenFamilyPublicSupply_totalMinted(domain);
3535
}
3636

3737
export circuit totalBurned(domain: Bytes<32>): Uint<128> {
38-
return NativeShieldedTokenFamilySupply_totalBurned(domain);
38+
return NativeShieldedTokenFamilyPublicSupply_totalBurned(domain);
3939
}
4040

4141
export circuit totalSupply(domain: Bytes<32>): Uint<128> {
42-
return NativeShieldedTokenFamilySupply_totalSupply(domain);
42+
return NativeShieldedTokenFamilyPublicSupply_totalSupply(domain);
4343
}
4444

4545
// Test-only: force `_totalBurned(domain)` past `_totalMinted(domain)` to reach

0 commit comments

Comments
 (0)