@tokenops/sdk 1.0.0 → 1.1.1
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 +102 -18
- package/dist/{chunk-HTOMTEA3.cjs → chunk-23F7JIK5.cjs} +2 -2
- package/dist/{chunk-ECT3NL2L.js → chunk-3PQ2RFPC.js} +3 -3
- package/dist/{chunk-OLDGMKW2.cjs → chunk-3ZRHDTEX.cjs} +33 -0
- package/dist/chunk-5KHIQG7Y.cjs +2180 -0
- package/dist/{chunk-T5LVV3KY.cjs → chunk-FPQBFIUW.cjs} +3 -3
- package/dist/{chunk-QIHZVLIK.js → chunk-FXCW7LVB.js} +1 -1
- package/dist/{chunk-K6MFFDBJ.cjs → chunk-G7G75C46.cjs} +6 -6
- package/dist/{chunk-72YGZEQE.js → chunk-IR5AK5U5.js} +6 -8
- package/dist/{chunk-CMRETRZO.js → chunk-ITQBDRWX.js} +1 -1
- package/dist/{chunk-ZHFLRKFY.js → chunk-JJ4R5QXF.js} +1 -1
- package/dist/{chunk-COPFW5Z4.js → chunk-M7V2EDPB.js} +30 -1
- package/dist/{chunk-UOG4PJL5.js → chunk-OQZAZIAS.js} +8 -10
- package/dist/{chunk-SUOG3BQS.cjs → chunk-OYLZEEHF.cjs} +1 -2
- package/dist/chunk-QE7ZONJ2.js +2171 -0
- package/dist/{chunk-62DF53UQ.cjs → chunk-SAGJIEQK.cjs} +7 -9
- package/dist/{chunk-JFR5J4FL.cjs → chunk-SEKC7H5Y.cjs} +8 -8
- package/dist/{chunk-6ECAHP5O.cjs → chunk-SYHXDHWX.cjs} +9 -11
- package/dist/{chunk-QCA7O2Q5.cjs → chunk-W7JHOK7G.cjs} +4 -4
- package/dist/{chunk-52TC6BF7.js → chunk-X56UVEXS.js} +1 -2
- package/dist/{chunk-HGXNRR25.js → chunk-XWDVPV42.js} +2 -2
- package/dist/core/addresses.d.ts +22 -0
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/telemetry.d.ts +0 -3
- package/dist/fhe/operators.d.ts +1 -1
- package/dist/fhe-airdrop/advanced/factory-advanced.d.ts +3 -3
- package/dist/fhe-airdrop/advanced/index.cjs +5 -5
- package/dist/fhe-airdrop/advanced/index.d.cts +2 -2
- package/dist/fhe-airdrop/advanced/index.d.ts +2 -2
- package/dist/fhe-airdrop/advanced/index.js +3 -3
- package/dist/fhe-airdrop/advanced/react/index.cjs +8 -8
- package/dist/fhe-airdrop/advanced/react/index.d.cts +1 -1
- package/dist/fhe-airdrop/advanced/react/index.d.ts +1 -1
- package/dist/fhe-airdrop/advanced/react/index.js +4 -4
- package/dist/fhe-airdrop/factory.d.ts +8 -10
- package/dist/fhe-airdrop/index.cjs +9 -9
- package/dist/fhe-airdrop/index.js +2 -2
- package/dist/fhe-airdrop/react/index.cjs +69 -69
- package/dist/fhe-airdrop/react/index.js +4 -4
- package/dist/fhe-disperse/index.cjs +19 -19
- package/dist/fhe-disperse/index.js +2 -2
- package/dist/fhe-disperse/react/index.cjs +20 -20
- package/dist/fhe-disperse/react/index.js +3 -3
- package/dist/fhe-disperse/react/useSingletonWithdrawTokenFee.d.ts +2 -2
- package/dist/fhe-vesting/advanced/factory-advanced.d.ts +2 -2
- package/dist/fhe-vesting/advanced/index.cjs +5 -5
- package/dist/fhe-vesting/advanced/index.d.cts +2 -2
- package/dist/fhe-vesting/advanced/index.d.ts +2 -2
- package/dist/fhe-vesting/advanced/index.js +3 -3
- package/dist/fhe-vesting/advanced/react/index.cjs +8 -8
- package/dist/fhe-vesting/advanced/react/index.d.cts +1 -1
- package/dist/fhe-vesting/advanced/react/index.d.ts +1 -1
- package/dist/fhe-vesting/advanced/react/index.js +5 -5
- package/dist/fhe-vesting/factory.d.ts +6 -8
- package/dist/fhe-vesting/index.cjs +25 -25
- package/dist/fhe-vesting/index.js +3 -3
- package/dist/fhe-vesting/manager.d.ts +1 -2
- package/dist/fhe-vesting/react/index.cjs +126 -126
- package/dist/fhe-vesting/react/index.js +4 -4
- package/dist/fhe-vesting/react/useManagerWithdrawTokenFee.d.ts +1 -1
- package/dist/fhe-vesting/types.d.ts +0 -2
- package/dist/index.cjs +27 -11
- package/dist/index.js +1 -1
- package/dist/testnet-faucet/abis/confidential-test-token.d.ts +1039 -0
- package/dist/testnet-faucet/abis/index.d.ts +2 -0
- package/dist/testnet-faucet/abis/test-token.d.ts +253 -0
- package/dist/testnet-faucet/errors.d.ts +21 -0
- package/dist/testnet-faucet/faucet.d.ts +173 -0
- package/dist/testnet-faucet/index.cjs +208 -0
- package/dist/testnet-faucet/index.d.cts +8 -0
- package/dist/testnet-faucet/index.d.ts +8 -0
- package/dist/testnet-faucet/index.js +7 -0
- package/dist/testnet-faucet/react/_shared.d.ts +61 -0
- package/dist/testnet-faucet/react/index.cjs +379 -0
- package/dist/testnet-faucet/react/index.d.cts +38 -0
- package/dist/testnet-faucet/react/index.d.ts +38 -0
- package/dist/testnet-faucet/react/index.js +219 -0
- package/dist/testnet-faucet/react/useConfidentialBalance.d.ts +24 -0
- package/dist/testnet-faucet/react/useFaucetDecimals.d.ts +9 -0
- package/dist/testnet-faucet/react/useFaucetMetadata.d.ts +14 -0
- package/dist/testnet-faucet/react/useFaucetRate.d.ts +11 -0
- package/dist/testnet-faucet/react/useInferredTotalSupply.d.ts +11 -0
- package/dist/testnet-faucet/react/useMaxTotalSupply.d.ts +10 -0
- package/dist/testnet-faucet/react/useMintConfidential.d.ts +35 -0
- package/dist/testnet-faucet/react/useMintUnderlying.d.ts +31 -0
- package/dist/testnet-faucet/react/useUnderlyingBalance.d.ts +19 -0
- package/dist/testnet-faucet/react/useUnderlyingDecimals.d.ts +9 -0
- package/dist/testnet-faucet/react/useUnderlyingTokenAddress.d.ts +12 -0
- package/dist/testnet-faucet/types.d.ts +92 -0
- package/dist/testnet-faucet/validate.d.ts +44 -0
- package/package.json +77 -29
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@tokenops/sdk)
|
|
4
4
|
[](https://github.com/VestingLabs/tokenops-sdk/blob/main/LICENSE)
|
|
5
5
|
|
|
6
|
-
Typed viem-first SDK for TokenOps FHEVM contracts — confidential vesting, confidential airdrops, and
|
|
6
|
+
Typed viem-first SDK for TokenOps FHEVM contracts — confidential vesting, confidential airdrops, confidential disperse, and a testnet faucet for the TokenOps test-token pair. Works with [viem](https://viem.sh) `publicClient` / `walletClient` directly; no framework required.
|
|
7
7
|
|
|
8
|
-
**Deployed factories only.** The SDK calls into pre-deployed factories / singletons; there are no `deployFactory` helpers. Currently deployed: `@tokenops/sdk/fhe-vesting` (factory live on Sepolia), `@tokenops/sdk/fhe-airdrop` (factory live on Sepolia), `@tokenops/sdk/fhe-disperse` (singleton live on mainnet + Sepolia).
|
|
8
|
+
**Deployed factories only.** The SDK calls into pre-deployed factories / singletons; there are no `deployFactory` helpers. Currently deployed: `@tokenops/sdk/fhe-vesting` (factory live on Sepolia), `@tokenops/sdk/fhe-airdrop` (factory live on Sepolia), `@tokenops/sdk/fhe-disperse` (singleton live on mainnet + Sepolia), and `@tokenops/sdk/testnet-faucet` (token pair live on Sepolia).
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
@@ -21,22 +21,24 @@ Node `>= 22` is required (constraint from `@zama-fhe/sdk`).
|
|
|
21
21
|
|
|
22
22
|
All subpaths are independently tree-shakeable. The `/react` paths keep React deps out of the server bundle.
|
|
23
23
|
|
|
24
|
-
| Subpath | Status | Description
|
|
25
|
-
| ------------------------------------------ | ----------------------------------- |
|
|
26
|
-
| `@tokenops/sdk` | stable | Root re-exports (version, core error types)
|
|
27
|
-
| `@tokenops/sdk/telemetry` | stable | Telemetry sink adapters (`NoopTelemetry`, `ConsoleTelemetry`, `TokenOpsTelemetry`)
|
|
28
|
-
| `@tokenops/sdk/fhe` | stable | FHE utility helpers (ratio scaling, encrypted-input types, operator helpers)
|
|
29
|
-
| `@tokenops/sdk/fhe/react` | stable | React hooks for shared FHE utilities
|
|
30
|
-
| `@tokenops/sdk/fhe-vesting` | factory live on Sepolia | Confidential vesting (LibClone + packed immutable args)
|
|
31
|
-
| `@tokenops/sdk/fhe-vesting/react` | stable | React/wagmi hooks for confidential vesting
|
|
32
|
-
| `@tokenops/sdk/fhe-vesting/advanced` | stable | Pre-mine address prediction (`predictManagerAddress`)
|
|
33
|
-
| `@tokenops/sdk/fhe-vesting/advanced/react` | stable | React hooks for advanced vesting flows
|
|
34
|
-
| `@tokenops/sdk/fhe-airdrop` | factory live on Sepolia | ConfidentialAirdrop (EIP-712 gated confidential claims)
|
|
35
|
-
| `@tokenops/sdk/fhe-airdrop/react` | stable | React/wagmi hooks for confidential airdrops
|
|
36
|
-
| `@tokenops/sdk/fhe-airdrop/advanced` | stable | Pre-mine address prediction (`predictAirdropAddress`)
|
|
37
|
-
| `@tokenops/sdk/fhe-airdrop/advanced/react` | stable | React hooks for advanced airdrop flows
|
|
38
|
-
| `@tokenops/sdk/fhe-disperse` | singleton live on mainnet + Sepolia | DisperseConfidential (singleton + per-user wallet-pair clones)
|
|
39
|
-
| `@tokenops/sdk/fhe-disperse/react` | stable | React/wagmi hooks for confidential disperse
|
|
24
|
+
| Subpath | Status | Description |
|
|
25
|
+
| ------------------------------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
26
|
+
| `@tokenops/sdk` | stable | Root re-exports (version, core error types) |
|
|
27
|
+
| `@tokenops/sdk/telemetry` | stable | Telemetry sink adapters (`NoopTelemetry`, `ConsoleTelemetry`, `TokenOpsTelemetry`) |
|
|
28
|
+
| `@tokenops/sdk/fhe` | stable | FHE utility helpers (ratio scaling, encrypted-input types, operator helpers) |
|
|
29
|
+
| `@tokenops/sdk/fhe/react` | stable | React hooks for shared FHE utilities |
|
|
30
|
+
| `@tokenops/sdk/fhe-vesting` | factory live on Sepolia | Confidential vesting (LibClone + packed immutable args) |
|
|
31
|
+
| `@tokenops/sdk/fhe-vesting/react` | stable | React/wagmi hooks for confidential vesting |
|
|
32
|
+
| `@tokenops/sdk/fhe-vesting/advanced` | stable | Pre-mine address prediction (`predictManagerAddress`) |
|
|
33
|
+
| `@tokenops/sdk/fhe-vesting/advanced/react` | stable | React hooks for advanced vesting flows |
|
|
34
|
+
| `@tokenops/sdk/fhe-airdrop` | factory live on Sepolia | ConfidentialAirdrop (EIP-712 gated confidential claims) |
|
|
35
|
+
| `@tokenops/sdk/fhe-airdrop/react` | stable | React/wagmi hooks for confidential airdrops |
|
|
36
|
+
| `@tokenops/sdk/fhe-airdrop/advanced` | stable | Pre-mine address prediction (`predictAirdropAddress`) |
|
|
37
|
+
| `@tokenops/sdk/fhe-airdrop/advanced/react` | stable | React hooks for advanced airdrop flows |
|
|
38
|
+
| `@tokenops/sdk/fhe-disperse` | singleton live on mainnet + Sepolia | DisperseConfidential (singleton + per-user wallet-pair clones) |
|
|
39
|
+
| `@tokenops/sdk/fhe-disperse/react` | stable | React/wagmi hooks for confidential disperse |
|
|
40
|
+
| `@tokenops/sdk/testnet-faucet` | token pair live on Sepolia | Testnet faucet for the TokenOps test-token pair — TTT (plain ERC-20) + CTTT (ERC-7984 wrapper); open mint |
|
|
41
|
+
| `@tokenops/sdk/testnet-faucet/react` | stable | React/wagmi hooks for the testnet faucet |
|
|
40
42
|
|
|
41
43
|
The canonical exports map is in [`package.json`](https://github.com/VestingLabs/tokenops-sdk/blob/main/package.json) under `"exports"`.
|
|
42
44
|
|
|
@@ -635,6 +637,87 @@ function DispersePanel({
|
|
|
635
637
|
|
|
636
638
|
See [Confidential Disperse — React hooks on docs.tokenops.xyz](https://docs.tokenops.xyz/sdk/fhe-disperse#react-hooks) for the full hook catalogue, encryptor wiring, address overrides, `usePreflightDisperse` gating pattern, `useGetEncryptedFeeReserve` encrypted-view flow, and query-key reference.
|
|
637
639
|
|
|
640
|
+
## Quickstart — testnet faucet
|
|
641
|
+
|
|
642
|
+
A **testnet-only** faucet for the TokenOps test-token pair: TTT (plain ERC-20, 18 decimals) and CTTT (its ERC-7984 confidential wrapper, 6 decimals). Both mints are open and permissionless. Unlike the FHE products, faucet mints take **PUBLIC plaintext** amounts — no encryptor, no `@zama-fhe/sdk` relayer needed. The client throws `UnsupportedChainError` on any value-bearing chain (mainnet); it only runs on Sepolia and local Anvil. See [Testnet Faucet on docs.tokenops.xyz](https://docs.tokenops.xyz/sdk/testnet-faucet) for the full API reference.
|
|
643
|
+
|
|
644
|
+
```ts
|
|
645
|
+
import { createPublicClient, createWalletClient, http } from "viem";
|
|
646
|
+
import { sepolia } from "viem/chains";
|
|
647
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
648
|
+
import { createTestnetFaucetClient } from "@tokenops/sdk/testnet-faucet";
|
|
649
|
+
|
|
650
|
+
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
|
|
651
|
+
const rpcUrl = process.env.RPC_URL!;
|
|
652
|
+
const publicClient = createPublicClient({ chain: sepolia, transport: http(rpcUrl) });
|
|
653
|
+
const walletClient = createWalletClient({ account, chain: sepolia, transport: http(rpcUrl) });
|
|
654
|
+
|
|
655
|
+
// CTTT + TTT addresses resolve automatically from DEPLOYED_ADDRESSES on Sepolia.
|
|
656
|
+
const faucet = createTestnetFaucetClient({ publicClient, walletClient });
|
|
657
|
+
|
|
658
|
+
// Mint 1,000 CTTT (6-decimal units) to myself, fully backed by freshly minted TTT.
|
|
659
|
+
// The amount is PUBLIC; only the recipient's aggregated balance stays confidential.
|
|
660
|
+
const { hash } = await faucet.mintConfidential({ amount: 1_000_000_000n });
|
|
661
|
+
console.log("Confidential mint tx:", hash);
|
|
662
|
+
|
|
663
|
+
// Read my encrypted confidential balance handle, then user-decrypt it with your
|
|
664
|
+
// own @zama-fhe/sdk relayer instance (the SDK is the producer side only).
|
|
665
|
+
const balanceHandle = await faucet.confidentialBalanceOf();
|
|
666
|
+
|
|
667
|
+
// Or mint plain ERC-20 TTT (18-decimal units) — e.g. to approve + wrap yourself.
|
|
668
|
+
await faucet.mintUnderlying({ amount: 5n * 10n ** 18n });
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
### Quickstart — testnet faucet (React hooks)
|
|
672
|
+
|
|
673
|
+
Uses `@tokenops/sdk/testnet-faucet/react`. Requires `wagmi` and `@tanstack/react-query` — but **not** `@zama-fhe/react-sdk` (no encryptor for public faucet mints).
|
|
674
|
+
|
|
675
|
+
```tsx
|
|
676
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
677
|
+
import {
|
|
678
|
+
useFaucetMetadata,
|
|
679
|
+
useConfidentialBalance,
|
|
680
|
+
useMintConfidential,
|
|
681
|
+
} from "@tokenops/sdk/testnet-faucet/react";
|
|
682
|
+
|
|
683
|
+
// Wrap your app in wagmi's <WagmiProvider> + <QueryClientProvider>.
|
|
684
|
+
// No <ZamaProvider> needed — faucet mints take PUBLIC plaintext amounts.
|
|
685
|
+
|
|
686
|
+
function FaucetPanel() {
|
|
687
|
+
const queryClient = useQueryClient();
|
|
688
|
+
const { data: meta } = useFaucetMetadata();
|
|
689
|
+
const { data: balanceHandle } = useConfidentialBalance(); // my own encrypted balance handle
|
|
690
|
+
const mint = useMintConfidential();
|
|
691
|
+
|
|
692
|
+
return (
|
|
693
|
+
<div>
|
|
694
|
+
{meta && (
|
|
695
|
+
<p>
|
|
696
|
+
{meta.confidential.symbol} · {meta.confidential.decimals} decimals · rate{" "}
|
|
697
|
+
{meta.rate.toString()}
|
|
698
|
+
</p>
|
|
699
|
+
)}
|
|
700
|
+
<button
|
|
701
|
+
onClick={() =>
|
|
702
|
+
mint.mutate(
|
|
703
|
+
{ amount: 1_000_000_000n }, // 1,000 CTTT (6-decimal units)
|
|
704
|
+
{
|
|
705
|
+
onSuccess: () =>
|
|
706
|
+
queryClient.invalidateQueries({ queryKey: ["tokenops-sdk", "testnet-faucet"] }),
|
|
707
|
+
},
|
|
708
|
+
)
|
|
709
|
+
}
|
|
710
|
+
disabled={mint.isPending}
|
|
711
|
+
>
|
|
712
|
+
{mint.isPending ? "Minting…" : "Mint 1,000 CTTT"}
|
|
713
|
+
</button>
|
|
714
|
+
</div>
|
|
715
|
+
);
|
|
716
|
+
}
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
See [Testnet Faucet — React hooks on docs.tokenops.xyz](https://docs.tokenops.xyz/sdk/testnet-faucet#react-hooks) for the full hook catalogue (reads, mints, metadata), address overrides, and query-key reference.
|
|
720
|
+
|
|
638
721
|
## Peer dependencies
|
|
639
722
|
|
|
640
723
|
| Package | Range | Required for |
|
|
@@ -660,6 +743,7 @@ All peers except `viem` are marked `optional` via `peerDependenciesMeta` so read
|
|
|
660
743
|
- [Confidential Vesting (`@tokenops/sdk/fhe-vesting`)](https://docs.tokenops.xyz/sdk/fhe-vesting)
|
|
661
744
|
- [Confidential Airdrop (`@tokenops/sdk/fhe-airdrop`)](https://docs.tokenops.xyz/sdk/fhe-airdrop)
|
|
662
745
|
- [Confidential Disperse (`@tokenops/sdk/fhe-disperse`)](https://docs.tokenops.xyz/sdk/fhe-disperse)
|
|
746
|
+
- [Testnet Faucet (`@tokenops/sdk/testnet-faucet`)](https://docs.tokenops.xyz/sdk/testnet-faucet)
|
|
663
747
|
- [Local dev with `link:`](https://docs.tokenops.xyz/sdk/local-dev)
|
|
664
748
|
|
|
665
749
|
## Development
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var chunkNS44KBV5_cjs = require('./chunk-NS44KBV5.cjs');
|
|
4
4
|
var chunkQ7ARQSUH_cjs = require('./chunk-Q7ARQSUH.cjs');
|
|
5
5
|
var chunkVDXVNZCO_cjs = require('./chunk-VDXVNZCO.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunk3ZRHDTEX_cjs = require('./chunk-3ZRHDTEX.cjs');
|
|
7
7
|
var chunkCQIPRNS7_cjs = require('./chunk-CQIPRNS7.cjs');
|
|
8
8
|
var chunkVJKZWYYJ_cjs = require('./chunk-VJKZWYYJ.cjs');
|
|
9
9
|
var chunk66IHPTOK_cjs = require('./chunk-66IHPTOK.cjs');
|
|
@@ -2013,7 +2013,7 @@ var ConfidentialDisperseClient = class {
|
|
|
2013
2013
|
this.#telemetry = config.telemetry;
|
|
2014
2014
|
const chainId = config.chainId ?? config.publicClient.chain?.id;
|
|
2015
2015
|
const addressOverride = config.address ? chunkCQIPRNS7_cjs.normaliseAddress(config.address) : void 0;
|
|
2016
|
-
const resolved = addressOverride ?? (chainId === void 0 ? void 0 :
|
|
2016
|
+
const resolved = addressOverride ?? (chainId === void 0 ? void 0 : chunk3ZRHDTEX_cjs.getFheDisperseSingletonAddress(chainId));
|
|
2017
2017
|
if (!resolved) {
|
|
2018
2018
|
throw new chunk56UI7LUR_cjs.DeploymentAddressUnavailableError({
|
|
2019
2019
|
reason: chainId === void 0 ? "chain-id-missing" : "registry-not-deployed",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createConfidentialVestingManagerClient, resolveEncryptor } from './chunk-
|
|
2
|
-
import { createConfidentialVestingFactoryClient } from './chunk-
|
|
3
|
-
import { getFheVestingFactoryAddress } from './chunk-
|
|
1
|
+
import { createConfidentialVestingManagerClient, resolveEncryptor } from './chunk-X56UVEXS.js';
|
|
2
|
+
import { createConfidentialVestingFactoryClient } from './chunk-IR5AK5U5.js';
|
|
3
|
+
import { getFheVestingFactoryAddress } from './chunk-M7V2EDPB.js';
|
|
4
4
|
import { DeploymentAddressUnavailableError } from './chunk-IVE3QEGD.js';
|
|
5
5
|
import { useMemo, useRef, useEffect } from 'react';
|
|
6
6
|
import { usePublicClient, useWalletClient } from 'wagmi';
|
|
@@ -21,6 +21,23 @@ var DEPLOYED_ADDRESSES = {
|
|
|
21
21
|
[chains.mainnet.id]: "0x4fC0d28cBe4B82D512Ad0B42F6787480Cc98cC70",
|
|
22
22
|
[chains.sepolia.id]: "0x710dD9885Cc9986EfD234E7719483147a6d8DBb4"
|
|
23
23
|
}
|
|
24
|
+
},
|
|
25
|
+
// Testnet-only faucet token pair (see `/testnet-faucet`). The standard
|
|
26
|
+
// `TokenopsTestToken` (TTT, 18-decimal ERC-20, open mint) and its
|
|
27
|
+
// confidential ERC-7984 wrapper `ConfidentialTokenopsTestToken` (CTTT,
|
|
28
|
+
// 6-decimal, open backed faucet mint). Sepolia only — these mint value-less
|
|
29
|
+
// test tokens to anyone, so they MUST NOT appear on mainnet.
|
|
30
|
+
// `confidentialTestToken` is the UUPS *proxy* address; call it with the
|
|
31
|
+
// implementation ABI.
|
|
32
|
+
testnetFaucet: {
|
|
33
|
+
testToken: {
|
|
34
|
+
[chains.sepolia.id]: "0x37a057Fa8C201a7bf8caF32dfa9A0878f577D92b"
|
|
35
|
+
// mainnet omitted — testnet-only by design.
|
|
36
|
+
},
|
|
37
|
+
confidentialTestToken: {
|
|
38
|
+
[chains.sepolia.id]: "0x258F9D60dc023870e4E3109c894D834D5377361a"
|
|
39
|
+
// mainnet omitted — testnet-only by design.
|
|
40
|
+
}
|
|
24
41
|
}
|
|
25
42
|
};
|
|
26
43
|
function getDeployedAddress(product, contract, chainId) {
|
|
@@ -58,6 +75,18 @@ function getFheDisperseSingletonAddress(chainId) {
|
|
|
58
75
|
function requireFheDisperseSingletonAddress(chainId) {
|
|
59
76
|
return requireDeployedAddress("fheDisperse", "disperseConfidentialSingleton", chainId);
|
|
60
77
|
}
|
|
78
|
+
function getTestTokenAddress(chainId) {
|
|
79
|
+
return getDeployedAddress("testnetFaucet", "testToken", chainId);
|
|
80
|
+
}
|
|
81
|
+
function requireTestTokenAddress(chainId) {
|
|
82
|
+
return requireDeployedAddress("testnetFaucet", "testToken", chainId);
|
|
83
|
+
}
|
|
84
|
+
function getConfidentialTestTokenAddress(chainId) {
|
|
85
|
+
return getDeployedAddress("testnetFaucet", "confidentialTestToken", chainId);
|
|
86
|
+
}
|
|
87
|
+
function requireConfidentialTestTokenAddress(chainId) {
|
|
88
|
+
return requireDeployedAddress("testnetFaucet", "confidentialTestToken", chainId);
|
|
89
|
+
}
|
|
61
90
|
function chainsWithKnownRegistryEntry(product) {
|
|
62
91
|
const productEntry = DEPLOYED_ADDRESSES[product];
|
|
63
92
|
const ids = /* @__PURE__ */ new Set();
|
|
@@ -84,10 +113,14 @@ function chainsWithDeployment(product) {
|
|
|
84
113
|
exports.DEPLOYED_ADDRESSES = DEPLOYED_ADDRESSES;
|
|
85
114
|
exports.chainsWithDeployment = chainsWithDeployment;
|
|
86
115
|
exports.chainsWithKnownRegistryEntry = chainsWithKnownRegistryEntry;
|
|
116
|
+
exports.getConfidentialTestTokenAddress = getConfidentialTestTokenAddress;
|
|
87
117
|
exports.getDeployedAddress = getDeployedAddress;
|
|
88
118
|
exports.getFheAirdropFactoryAddress = getFheAirdropFactoryAddress;
|
|
89
119
|
exports.getFheDisperseSingletonAddress = getFheDisperseSingletonAddress;
|
|
90
120
|
exports.getFheVestingFactoryAddress = getFheVestingFactoryAddress;
|
|
121
|
+
exports.getTestTokenAddress = getTestTokenAddress;
|
|
122
|
+
exports.requireConfidentialTestTokenAddress = requireConfidentialTestTokenAddress;
|
|
91
123
|
exports.requireFheAirdropFactoryAddress = requireFheAirdropFactoryAddress;
|
|
92
124
|
exports.requireFheDisperseSingletonAddress = requireFheDisperseSingletonAddress;
|
|
93
125
|
exports.requireFheVestingFactoryAddress = requireFheVestingFactoryAddress;
|
|
126
|
+
exports.requireTestTokenAddress = requireTestTokenAddress;
|