@tokenops/sdk 2.0.0-alpha.2 → 2.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -3
- package/README.md +76 -34
- package/SUPPORT.md +1 -1
- package/dist/{chunk-PYYSB5ZN.js → chunk-2ND7US2I.js} +1 -1
- package/dist/{chunk-EYDA6Q6C.js → chunk-3ZSPRHR3.js} +63 -12
- package/dist/{chunk-X7WBPCEU.js → chunk-67Q6KSVV.js} +4578 -3383
- package/dist/{chunk-UHHMVBLU.cjs → chunk-6AYJRUGP.cjs} +7 -50
- package/dist/{chunk-FEDX7B6T.cjs → chunk-6FUHF73F.cjs} +5 -5
- package/dist/{chunk-NWFMBLSQ.js → chunk-7KY4K4PH.js} +1 -1
- package/dist/{chunk-FHWSBGWE.cjs → chunk-ARZ5C3FS.cjs} +7 -7
- package/dist/{chunk-SPLNGUFF.js → chunk-AX6MQAWU.js} +2 -2
- package/dist/{chunk-IGO5XSPS.js → chunk-BSXEX2SH.js} +3 -3
- package/dist/{chunk-44YJPMQC.js → chunk-CHGY6B7L.js} +34 -81
- package/dist/{chunk-IUKKNJ2R.cjs → chunk-DFK5GCJP.cjs} +55 -72
- package/dist/{chunk-PZZK3O3S.cjs → chunk-E4IV4M4E.cjs} +4598 -3403
- package/dist/{chunk-A4DCEE33.js → chunk-GHGF65LN.js} +16 -12
- package/dist/{chunk-TWT3STIX.js → chunk-K3R27WX4.js} +8 -46
- package/dist/{chunk-GADGBQJO.js → chunk-KJUNBOJQ.js} +52 -71
- package/dist/{chunk-MM5BV5CS.cjs → chunk-PO3A2AQX.cjs} +4 -4
- package/dist/{chunk-EBLBPUPI.cjs → chunk-QHDMPT7I.cjs} +72 -19
- package/dist/{chunk-3YHBO2DL.cjs → chunk-S47IBDTA.cjs} +36 -83
- package/dist/{chunk-UG5RKLU2.cjs → chunk-SUYBAF27.cjs} +1 -1
- package/dist/{chunk-WJMEBBU7.js → chunk-TWU7L5H7.js} +5 -48
- package/dist/{chunk-WJLECC22.cjs → chunk-UUSSWOPR.cjs} +9 -47
- package/dist/{chunk-AREQJHKA.cjs → chunk-VHKMWWBA.cjs} +428 -22
- package/dist/{chunk-FT5H2Q7Y.cjs → chunk-YAL6JSAZ.cjs} +16 -12
- package/dist/{chunk-VW356KR3.js → chunk-YMWMIWBP.js} +421 -25
- package/dist/core/addresses.d.ts +4 -4
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/pending.d.ts +57 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/fhe/operators.d.ts +6 -5
- package/dist/fhe/types.d.ts +1 -1
- package/dist/fhe-airdrop/abis/airdrop-base.d.ts +97 -1
- package/dist/fhe-airdrop/abis/ecdsa.d.ts +117 -1
- package/dist/fhe-airdrop/abis/factory.d.ts +332 -1
- package/dist/fhe-airdrop/abis/merkle.d.ts +116 -1
- package/dist/fhe-airdrop/advanced/index.cjs +8 -4
- package/dist/fhe-airdrop/advanced/index.d.cts +1 -0
- package/dist/fhe-airdrop/advanced/index.d.ts +1 -0
- package/dist/fhe-airdrop/advanced/index.js +1 -1
- package/dist/fhe-airdrop/advanced/react/index.cjs +145 -137
- package/dist/fhe-airdrop/advanced/react/index.d.cts +1 -0
- package/dist/fhe-airdrop/advanced/react/index.d.ts +1 -0
- package/dist/fhe-airdrop/advanced/react/index.js +85 -78
- package/dist/fhe-airdrop/advanced/react/useClearCompliancePolicy.d.ts +3 -1
- package/dist/fhe-airdrop/advanced/react/useDisableCustomFee.d.ts +4 -1
- package/dist/fhe-airdrop/advanced/react/useFactoryComplianceDelegate.d.ts +2 -4
- package/dist/fhe-airdrop/advanced/react/useFactoryRenounceRole.d.ts +4 -3
- package/dist/fhe-airdrop/advanced/react/useFactoryRevokeRole.d.ts +9 -7
- package/dist/fhe-airdrop/advanced/react/useFactoryRoleMembers.d.ts +6 -5
- package/dist/fhe-airdrop/advanced/react/useSetComplianceDelegate.d.ts +7 -7
- package/dist/fhe-airdrop/advanced/react/useSetComplianceManagerImpl.d.ts +3 -1
- package/dist/fhe-airdrop/advanced/react/useSetCompliancePolicy.d.ts +2 -1
- package/dist/fhe-airdrop/advanced/react/useSetCustomFee.d.ts +4 -1
- package/dist/fhe-airdrop/advanced/react/useSetDefaultDelegateToCompliance.d.ts +5 -4
- package/dist/fhe-airdrop/advanced/react/useSetDefaultGasFee.d.ts +7 -3
- package/dist/fhe-airdrop/advanced/react/useSetMaxGasFee.d.ts +37 -0
- package/dist/fhe-airdrop/airdrop-base.d.ts +142 -18
- package/dist/fhe-airdrop/campaign.d.ts +37 -73
- package/dist/fhe-airdrop/compliance-clone.d.ts +21 -0
- package/dist/fhe-airdrop/constants.d.ts +11 -1
- package/dist/fhe-airdrop/ecdsa.d.ts +79 -26
- package/dist/fhe-airdrop/encryption.d.ts +19 -6
- package/dist/fhe-airdrop/errors.d.ts +136 -2
- package/dist/fhe-airdrop/factory-params.d.ts +2361 -0
- package/dist/fhe-airdrop/factory.d.ts +189 -75
- package/dist/fhe-airdrop/guards.d.ts +183 -19
- package/dist/fhe-airdrop/index.cjs +88 -56
- package/dist/fhe-airdrop/index.d.cts +12 -10
- package/dist/fhe-airdrop/index.d.ts +12 -10
- package/dist/fhe-airdrop/index.js +5 -5
- package/dist/fhe-airdrop/merkle-tree.d.ts +9 -9
- package/dist/fhe-airdrop/merkle.d.ts +32 -11
- package/dist/fhe-airdrop/react/_shared.d.ts +12 -6
- package/dist/fhe-airdrop/react/index.cjs +336 -240
- package/dist/fhe-airdrop/react/index.d.cts +19 -9
- package/dist/fhe-airdrop/react/index.d.ts +19 -9
- package/dist/fhe-airdrop/react/index.js +158 -97
- package/dist/fhe-airdrop/react/keys.d.ts +54 -7
- package/dist/fhe-airdrop/react/useAccessEcdsaClaimAmount.d.ts +6 -3
- package/dist/fhe-airdrop/react/useAccessMerkleClaimAmount.d.ts +2 -2
- package/dist/fhe-airdrop/react/useAirdropConfig.d.ts +8 -3
- package/dist/fhe-airdrop/react/useAirdropPause.d.ts +5 -0
- package/dist/fhe-airdrop/react/useBuildMerkleCampaign.d.ts +4 -6
- package/dist/fhe-airdrop/react/useComplianceManager.d.ts +2 -2
- package/dist/fhe-airdrop/react/useComplianceManagerOf.d.ts +1 -2
- package/dist/fhe-airdrop/react/useCreateAndFundEcdsaAirdrop.d.ts +16 -11
- package/dist/fhe-airdrop/react/useCreateAndFundMerkleAirdrop.d.ts +23 -7
- package/dist/fhe-airdrop/react/useCreateEcdsaAirdrop.d.ts +13 -8
- package/dist/fhe-airdrop/react/useCreateMerkleAirdrop.d.ts +27 -7
- package/dist/fhe-airdrop/react/useDedupMode.d.ts +16 -0
- package/dist/fhe-airdrop/react/useDiscloseHandleToParty.d.ts +4 -3
- package/dist/fhe-airdrop/react/useEcdsaClaim.d.ts +6 -4
- package/dist/fhe-airdrop/react/useEcdsaClaimAndUnwrap.d.ts +15 -8
- package/dist/fhe-airdrop/react/useEcdsaDomain.d.ts +1 -1
- package/dist/fhe-airdrop/react/useEncryptCampaignAmounts.d.ts +5 -7
- package/dist/fhe-airdrop/react/useExtendClaimWindow.d.ts +4 -1
- package/dist/fhe-airdrop/react/useFactoryFees.d.ts +11 -4
- package/dist/fhe-airdrop/react/useFundAirdrop.d.ts +3 -4
- package/dist/fhe-airdrop/react/useGrantInstanceRoles.d.ts +2 -1
- package/dist/fhe-airdrop/react/useIsAirdrop.d.ts +44 -0
- package/dist/fhe-airdrop/react/useIsSignatureValid.d.ts +5 -4
- package/dist/fhe-airdrop/react/useMerkleClaim.d.ts +4 -1
- package/dist/fhe-airdrop/react/useMerkleClaimAndUnwrap.d.ts +14 -3
- package/dist/fhe-airdrop/react/usePlanMerkleCampaign.d.ts +18 -3
- package/dist/fhe-airdrop/react/usePreflightClaim.d.ts +1 -1
- package/dist/fhe-airdrop/react/usePreflightCreateAirdrop.d.ts +34 -13
- package/dist/fhe-airdrop/react/useRefreshComplianceBalance.d.ts +36 -0
- package/dist/fhe-airdrop/react/useRescueERC20.d.ts +3 -3
- package/dist/fhe-airdrop/react/useRescueNativeToken.d.ts +23 -0
- package/dist/fhe-airdrop/react/useResolveGasFee.d.ts +30 -0
- package/dist/fhe-airdrop/react/useRotateMerkleRoot.d.ts +5 -2
- package/dist/fhe-airdrop/react/useSignClaimAuthorization.d.ts +4 -0
- package/dist/fhe-airdrop/react/useTokenOf.d.ts +29 -0
- package/dist/fhe-airdrop/react/useUnwrapRequest.d.ts +25 -0
- package/dist/fhe-airdrop/react/useWithdrawConfidential.d.ts +4 -0
- package/dist/fhe-airdrop/roles.d.ts +82 -7
- package/dist/fhe-airdrop/types.d.ts +122 -14
- package/dist/fhe-disperse/errors.d.ts +3 -3
- package/dist/fhe-disperse/index.cjs +22 -22
- package/dist/fhe-disperse/index.d.cts +2 -1
- package/dist/fhe-disperse/index.d.ts +2 -1
- package/dist/fhe-disperse/index.js +3 -3
- package/dist/fhe-disperse/react/index.cjs +27 -25
- package/dist/fhe-disperse/react/index.d.cts +2 -1
- package/dist/fhe-disperse/react/index.d.ts +2 -1
- package/dist/fhe-disperse/react/index.js +8 -6
- package/dist/fhe-disperse/react/useDisperse.d.ts +6 -2
- package/dist/fhe-disperse/react/useRegister.d.ts +9 -3
- package/dist/fhe-disperse/react/useSingletonWithdrawTokenFee.d.ts +7 -2
- package/dist/fhe-disperse/react/useWithdrawTokenFee.d.ts +7 -2
- package/dist/fhe-disperse/singleton.d.ts +33 -19
- package/dist/fhe-disperse/types.d.ts +48 -8
- package/dist/fhe-vesting/advanced/index.cjs +6 -6
- package/dist/fhe-vesting/advanced/index.js +4 -4
- package/dist/fhe-vesting/advanced/react/index.cjs +9 -9
- package/dist/fhe-vesting/advanced/react/index.js +6 -6
- package/dist/fhe-vesting/factory.d.ts +31 -8
- package/dist/fhe-vesting/index.cjs +23 -23
- package/dist/fhe-vesting/index.d.cts +3 -2
- package/dist/fhe-vesting/index.d.ts +3 -2
- package/dist/fhe-vesting/index.js +4 -4
- package/dist/fhe-vesting/manager.d.ts +27 -2
- package/dist/fhe-vesting/react/index.cjs +126 -126
- package/dist/fhe-vesting/react/index.d.cts +3 -2
- package/dist/fhe-vesting/react/index.d.ts +3 -2
- package/dist/fhe-vesting/react/index.js +5 -5
- package/dist/fhe-vesting/react/useCreateManager.d.ts +16 -9
- package/dist/fhe-vesting/react/useCreateManagerAndGetAddress.d.ts +9 -5
- package/dist/fhe-vesting/react/useSplitVesting.d.ts +9 -3
- package/dist/index.cjs +18 -18
- package/dist/index.js +1 -1
- package/dist/testnet-faucet/faucet.d.ts +3 -0
- package/dist/testnet-faucet/index.cjs +15 -15
- package/dist/testnet-faucet/index.js +3 -3
- package/dist/testnet-faucet/react/index.cjs +9 -9
- package/dist/testnet-faucet/react/index.js +4 -4
- package/package.json +1 -1
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { isContractRevert } from './chunk-4RAAATVY.js';
|
|
2
|
-
import { TokenOpsSdkError, InvalidArgumentError, FeatureDisabledError, UnsupportedChainError, FheHandleNotAllowedError, TransferFailedError, InsufficientBalanceError, InsufficientFeeError, PausedError, InvalidSignatureError
|
|
3
|
-
import { isAddressEqual, zeroAddress, isAddress, BaseError, ContractFunctionZeroDataError } from 'viem';
|
|
2
|
+
import { TokenOpsSdkError, InvalidArgumentError, FeatureDisabledError, UnsupportedChainError, FheHandleNotAllowedError, TransferFailedError, InsufficientBalanceError, InsufficientFeeError, isTokenOpsSdkError, PausedError, InvalidSignatureError } from './chunk-QBJ7O2B4.js';
|
|
3
|
+
import { isAddressEqual, zeroAddress, isAddress, keccak256, encodeAbiParameters, getAddress, getCreate2Address, BaseError, ContractFunctionZeroDataError } from 'viem';
|
|
4
4
|
|
|
5
5
|
// src/fhe-airdrop/constants.ts
|
|
6
|
-
var AIRDROP_CONTRACTS_COMMIT = "
|
|
6
|
+
var AIRDROP_CONTRACTS_COMMIT = "005980df194e0dc66053bd517e9759bd4d580047";
|
|
7
7
|
var DEPLOYMENT_MODE = { clone: 0, uups: 1 };
|
|
8
8
|
var DEDUP_MODE = { perAddress: 0, perDedupId: 1, both: 2, none: 3 };
|
|
9
|
+
var DEDUP_MODE_BY_ORDINAL = new Map(
|
|
10
|
+
Object.keys(DEDUP_MODE).map((mode) => [DEDUP_MODE[mode], mode])
|
|
11
|
+
);
|
|
12
|
+
var UINT96_MAX = (1n << 96n) - 1n;
|
|
9
13
|
|
|
10
14
|
// src/fhe-airdrop/errors.ts
|
|
11
15
|
var MerkleUupsUnsupportedError = class extends TokenOpsSdkError {
|
|
@@ -94,6 +98,43 @@ var PredictionDriftError = class extends TokenOpsSdkError {
|
|
|
94
98
|
);
|
|
95
99
|
}
|
|
96
100
|
};
|
|
101
|
+
var CreateCommitmentMismatchError = class extends TokenOpsSdkError {
|
|
102
|
+
name = "CreateCommitmentMismatchError";
|
|
103
|
+
constructor(args) {
|
|
104
|
+
const rebuild = args.field === "airdrop" ? " Anything bound to the old prediction (Merkle leaves, vouchers, encrypted inputs) must be rebuilt." : "";
|
|
105
|
+
const { cause, ...context } = args;
|
|
106
|
+
super(
|
|
107
|
+
`${args.method}: the factory would deploy with ${args.field} = ${args.actual ?? "?"}, but the create committed to ${args.expected ?? "?"}. Nothing was deployed and the salt is unused; re-quote and retry.${rebuild}`,
|
|
108
|
+
{ code: "TOKENOPS_CREATE_COMMITMENT_MISMATCH", cause, context }
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
var ClawbackRequiresPauseError = class extends TokenOpsSdkError {
|
|
113
|
+
name = "ClawbackRequiresPauseError";
|
|
114
|
+
constructor(args) {
|
|
115
|
+
super(
|
|
116
|
+
`${args.method}: withdrawConfidential is refused while the campaign is unpaused inside its claim window. Pause first (PAUSER_ROLE), or run it outside the window (before startTime or after endTime).`,
|
|
117
|
+
{
|
|
118
|
+
code: "TOKENOPS_CLAWBACK_REQUIRES_PAUSE",
|
|
119
|
+
cause: args.cause,
|
|
120
|
+
context: { method: args.method, contractAddress: args.contractAddress }
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
var NativeRescueRequiresZeroFeeError = class extends TokenOpsSdkError {
|
|
126
|
+
name = "NativeRescueRequiresZeroFeeError";
|
|
127
|
+
constructor(args) {
|
|
128
|
+
super(
|
|
129
|
+
`${args.method}: rescueNativeToken is only available on a zero-fee campaign; this instance charges a gas fee, so its ETH is fee revenue - use withdrawGasFee.`,
|
|
130
|
+
{
|
|
131
|
+
code: "TOKENOPS_NATIVE_RESCUE_REQUIRES_ZERO_FEE",
|
|
132
|
+
cause: args.cause,
|
|
133
|
+
context: { method: args.method, contractAddress: args.contractAddress }
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
97
138
|
var UpgradeabilityNotAllowedError = class extends TokenOpsSdkError {
|
|
98
139
|
name = "UpgradeabilityNotAllowedError";
|
|
99
140
|
constructor(args) {
|
|
@@ -203,6 +244,42 @@ var ClaimWindowClosedError = class extends TokenOpsSdkError {
|
|
|
203
244
|
});
|
|
204
245
|
}
|
|
205
246
|
};
|
|
247
|
+
var GasFeeNotAcceptedError = class extends TokenOpsSdkError {
|
|
248
|
+
name = "GasFeeNotAcceptedError";
|
|
249
|
+
constructor(args) {
|
|
250
|
+
const detail = args.resolvedFee !== void 0 && args.maxAcceptedGasFee !== void 0 ? ` The factory resolved ${args.resolvedFee} wei; \`maxAcceptedGasFee\` is ${args.maxAcceptedGasFee} wei.` : "";
|
|
251
|
+
super(
|
|
252
|
+
`${args.method}: the resolved per-claim gas fee exceeds \`common.maxAcceptedGasFee\`.${detail} The fee is frozen into the instance at create and cannot be changed after. Every claimant pays it on every claim, so raise the bound only if that is a fee you accept charging them.`,
|
|
253
|
+
{
|
|
254
|
+
code: "TOKENOPS_GAS_FEE_NOT_ACCEPTED",
|
|
255
|
+
cause: args.cause,
|
|
256
|
+
context: {
|
|
257
|
+
method: args.method,
|
|
258
|
+
contractAddress: args.contractAddress,
|
|
259
|
+
resolvedFee: args.resolvedFee,
|
|
260
|
+
maxAcceptedGasFee: args.maxAcceptedGasFee
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
var UnrecognisedAirdropError = class extends TokenOpsSdkError {
|
|
267
|
+
name = "UnrecognisedAirdropError";
|
|
268
|
+
constructor(args) {
|
|
269
|
+
super(
|
|
270
|
+
`${args.method}: ${args.contractAddress} was not created by the factory at ${args.factory}, so it is not a TokenOps airdrop. Treat its ABI, its events and its pool as unverified.`,
|
|
271
|
+
{
|
|
272
|
+
code: "TOKENOPS_UNRECOGNISED_AIRDROP",
|
|
273
|
+
cause: args.cause,
|
|
274
|
+
context: {
|
|
275
|
+
method: args.method,
|
|
276
|
+
contractAddress: args.contractAddress,
|
|
277
|
+
factory: args.factory
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
206
283
|
var airdropProductMapper = (name, errArgs, ctx) => {
|
|
207
284
|
switch (name) {
|
|
208
285
|
// ---- guarded conditions, caught on-chain instead of pre-flight -------
|
|
@@ -250,12 +327,16 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
250
327
|
return new FheHandleNotAllowedError({ ...ctx, handle });
|
|
251
328
|
}
|
|
252
329
|
// ---- Merkle-specific ----------------------------------------------
|
|
253
|
-
case "InvalidMerkleProof":
|
|
330
|
+
case "InvalidMerkleProof": {
|
|
331
|
+
const leaf = errArgs?.[0];
|
|
332
|
+
const merkleRoot = errArgs?.[1];
|
|
254
333
|
return new InvalidArgumentError({
|
|
255
334
|
method: ctx.method,
|
|
256
335
|
argument: "merkleProof",
|
|
257
|
-
reason: "the contract reverted with `InvalidMerkleProof` \u2014 the proof does not verify against the current on-chain root. If the root was recently rotated, rebuild the proof against the new root."
|
|
336
|
+
reason: "the contract reverted with `InvalidMerkleProof` \u2014 the proof does not verify against the current on-chain root. If the root was recently rotated, rebuild the proof against the new root.",
|
|
337
|
+
...leaf !== void 0 || merkleRoot !== void 0 ? { value: { leaf, merkleRoot } } : {}
|
|
258
338
|
});
|
|
339
|
+
}
|
|
259
340
|
case "RootImmutable":
|
|
260
341
|
return new FeatureDisabledError({ ...ctx, feature: "merkleRootRotation" });
|
|
261
342
|
case "ZeroAccount":
|
|
@@ -287,6 +368,25 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
287
368
|
}
|
|
288
369
|
// ---- argument-validation bucket: reverts not already covered by the
|
|
289
370
|
// cross-product default mapper's `Zero*`/`Invalid*` list ---------------
|
|
371
|
+
case "GasFeeNotAccepted": {
|
|
372
|
+
const resolvedFee = errArgs?.[0];
|
|
373
|
+
const maxAcceptedGasFee = errArgs?.[1];
|
|
374
|
+
return new GasFeeNotAcceptedError({ ...ctx, resolvedFee, maxAcceptedGasFee });
|
|
375
|
+
}
|
|
376
|
+
case "GasFeeExceedsMaximum": {
|
|
377
|
+
return gasFeeExceedsMaximumError({
|
|
378
|
+
method: ctx.method,
|
|
379
|
+
gasFee: errArgs?.[0],
|
|
380
|
+
maxGasFee: errArgs?.[1]
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
case "ZeroUnwrapRequestId":
|
|
384
|
+
return invalidArg(
|
|
385
|
+
ctx,
|
|
386
|
+
"token",
|
|
387
|
+
name,
|
|
388
|
+
"the wrapper returned the zero request id, which names no handle to read the delivered amount from; the campaign token is not a conforming ERC7984ERC20Wrapper"
|
|
389
|
+
);
|
|
290
390
|
case "ZeroToken":
|
|
291
391
|
return invalidArg(ctx, "token", name);
|
|
292
392
|
case "ZeroFeeCollector":
|
|
@@ -319,7 +419,7 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
319
419
|
ctx,
|
|
320
420
|
"admin",
|
|
321
421
|
name,
|
|
322
|
-
"revoking or renouncing the sole DEFAULT_ADMIN_ROLE member would leave the
|
|
422
|
+
"revoking or renouncing the sole DEFAULT_ADMIN_ROLE member would leave the contract permanently ungovernable. Declared once and enforced by BOTH the instances and the factory, each on its own admin set (audit-14) - grant a second admin first, then renounce"
|
|
323
423
|
);
|
|
324
424
|
case "LastFeeCollector":
|
|
325
425
|
return invalidArg(
|
|
@@ -343,7 +443,7 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
343
443
|
ctx,
|
|
344
444
|
"complianceDelegate",
|
|
345
445
|
name,
|
|
346
|
-
"
|
|
446
|
+
"the factory requires a non-zero delegate (constructor, setter and create)"
|
|
347
447
|
);
|
|
348
448
|
case "IndexOutOfBounds": {
|
|
349
449
|
const index = errArgs?.[0];
|
|
@@ -366,6 +466,48 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
366
466
|
value: existingAirdrop
|
|
367
467
|
});
|
|
368
468
|
}
|
|
469
|
+
case "PredictionMismatch":
|
|
470
|
+
case "ManagerImplementationMismatch":
|
|
471
|
+
case "ComplianceDelegateMismatch": {
|
|
472
|
+
const field = name === "PredictionMismatch" ? "airdrop" : name === "ManagerImplementationMismatch" ? "complianceManagerImpl" : "complianceDelegate";
|
|
473
|
+
return new CreateCommitmentMismatchError({
|
|
474
|
+
method: ctx.method,
|
|
475
|
+
contractAddress: ctx.contractAddress,
|
|
476
|
+
field,
|
|
477
|
+
expected: errArgs?.[0],
|
|
478
|
+
actual: errArgs?.[1]
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
case "InvalidImplementation":
|
|
482
|
+
return invalidArg(ctx, "implementation", name, void 0, errArgs?.[0]);
|
|
483
|
+
case "EndTimeInPast": {
|
|
484
|
+
const endTime = numberArg(errArgs?.[0]);
|
|
485
|
+
const currentTime = numberArg(errArgs?.[1]);
|
|
486
|
+
return invalidArg(
|
|
487
|
+
ctx,
|
|
488
|
+
"endTime",
|
|
489
|
+
name,
|
|
490
|
+
endTime !== void 0 && currentTime !== void 0 ? `endTime ${endTime} is not after the chain time ${currentTime}` : void 0,
|
|
491
|
+
endTime !== void 0 || currentTime !== void 0 ? { endTime, currentTime } : void 0
|
|
492
|
+
);
|
|
493
|
+
}
|
|
494
|
+
case "InvalidDuration": {
|
|
495
|
+
const fromTime = numberArg(errArgs?.[0]);
|
|
496
|
+
const toTime = numberArg(errArgs?.[1]);
|
|
497
|
+
return invalidArg(
|
|
498
|
+
ctx,
|
|
499
|
+
"duration",
|
|
500
|
+
name,
|
|
501
|
+
fromTime !== void 0 && toTime !== void 0 ? `${toTime} does not come after ${fromTime}` : void 0,
|
|
502
|
+
fromTime !== void 0 || toTime !== void 0 ? { fromTime, toTime } : void 0
|
|
503
|
+
);
|
|
504
|
+
}
|
|
505
|
+
case "UninitializedHandle":
|
|
506
|
+
return invalidArg(ctx, "handle", name);
|
|
507
|
+
case "ClawbackRequiresPause":
|
|
508
|
+
return new ClawbackRequiresPauseError(ctx);
|
|
509
|
+
case "NativeRescueRequiresZeroFee":
|
|
510
|
+
return new NativeRescueRequiresZeroFeeError(ctx);
|
|
369
511
|
case "ZeroSigner":
|
|
370
512
|
return invalidArg(ctx, "signer", name);
|
|
371
513
|
case "ZeroMerkleRoot":
|
|
@@ -373,7 +515,7 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
373
515
|
ctx,
|
|
374
516
|
"merkleRoot",
|
|
375
517
|
name,
|
|
376
|
-
"a zero root is only
|
|
518
|
+
"a zero root is permitted only at create on a mutable-root campaign, and never as a rotation target"
|
|
377
519
|
);
|
|
378
520
|
// ---- compliance manager clone (`ComplianceRoleManager`) --------------
|
|
379
521
|
case "ZeroAirdrop":
|
|
@@ -413,15 +555,26 @@ var airdropProductMapper = (name, errArgs, ctx) => {
|
|
|
413
555
|
return void 0;
|
|
414
556
|
}
|
|
415
557
|
};
|
|
416
|
-
function
|
|
558
|
+
function gasFeeExceedsMaximumError(args) {
|
|
559
|
+
const { gasFee, maxGasFee } = args;
|
|
560
|
+
return new InvalidArgumentError({
|
|
561
|
+
method: args.method,
|
|
562
|
+
argument: "gasFee",
|
|
563
|
+
reason: `exceeds the factory's own maximum${gasFee !== void 0 && maxGasFee !== void 0 ? ` (${gasFee} wei > ${maxGasFee} wei)` : ""}; \`setMaxGasFee\` is DEFAULT_ADMIN_ROLE-gated and bounds what FEE_MANAGER_ROLE may configure`,
|
|
564
|
+
value: gasFee
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
function invalidArg(ctx, argument, revertName, detail, value) {
|
|
417
568
|
const suffix = detail ? ` ${detail}.` : "";
|
|
418
569
|
return new InvalidArgumentError({
|
|
419
570
|
method: ctx.method,
|
|
420
571
|
argument,
|
|
421
|
-
reason: `the contract reverted with \`${revertName}\`.${suffix}
|
|
572
|
+
reason: `the contract reverted with \`${revertName}\`.${suffix}`,
|
|
573
|
+
...value !== void 0 ? { value } : {}
|
|
422
574
|
});
|
|
423
575
|
}
|
|
424
576
|
function numberArg(value) {
|
|
577
|
+
if (typeof value === "number") return value;
|
|
425
578
|
return typeof value === "bigint" ? Number(value) : void 0;
|
|
426
579
|
}
|
|
427
580
|
var SUPPORTED_CHAIN_IDS = [1, 11155111, 31337];
|
|
@@ -478,6 +631,39 @@ async function assertSaltAvailable(args) {
|
|
|
478
631
|
predictedAddress: args.predictedAddress
|
|
479
632
|
});
|
|
480
633
|
}
|
|
634
|
+
function assertMaxAcceptedGasFeeRange(value, method) {
|
|
635
|
+
if (value < 0n || value > UINT96_MAX) {
|
|
636
|
+
throw new InvalidArgumentError({
|
|
637
|
+
method,
|
|
638
|
+
argument: "common.maxAcceptedGasFee",
|
|
639
|
+
reason: `is outside uint96 (0 to ${UINT96_MAX}); the params tuple cannot be ABI-encoded at all`,
|
|
640
|
+
value
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
function assertWithinCeiling(method, resolvedFee, maxGasFee) {
|
|
645
|
+
if (resolvedFee > maxGasFee) {
|
|
646
|
+
throw gasFeeExceedsMaximumError({ method, gasFee: resolvedFee, maxGasFee });
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
function assertResolvedFeeAccepted(args, resolvedFee) {
|
|
650
|
+
if (resolvedFee <= args.maxAcceptedGasFee) return;
|
|
651
|
+
throw new GasFeeNotAcceptedError({
|
|
652
|
+
method: args.method,
|
|
653
|
+
contractAddress: args.factory.address,
|
|
654
|
+
resolvedFee,
|
|
655
|
+
maxAcceptedGasFee: args.maxAcceptedGasFee
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
async function assertCreateGasFee(args) {
|
|
659
|
+
assertMaxAcceptedGasFeeRange(args.maxAcceptedGasFee, args.method);
|
|
660
|
+
const [resolvedFee, maxGasFee] = await Promise.all([
|
|
661
|
+
args.factory.resolveGasFee(args.creator),
|
|
662
|
+
args.factory.maxGasFee()
|
|
663
|
+
]);
|
|
664
|
+
assertWithinCeiling(args.method, resolvedFee, maxGasFee);
|
|
665
|
+
assertResolvedFeeAccepted(args, resolvedFee);
|
|
666
|
+
}
|
|
481
667
|
function assertPredictionFresh(args) {
|
|
482
668
|
if (args.initCodeHashBefore.toLowerCase() === args.initCodeHashAfter.toLowerCase()) return;
|
|
483
669
|
throw new PredictionDriftError({
|
|
@@ -488,6 +674,112 @@ function assertPredictionFresh(args) {
|
|
|
488
674
|
predictedAddress: args.predictedAddress
|
|
489
675
|
});
|
|
490
676
|
}
|
|
677
|
+
var END_TIME_MARGIN_SECONDS = 60;
|
|
678
|
+
function invalidCreateParam(method, argument, revertName, reason, value) {
|
|
679
|
+
return new InvalidArgumentError({
|
|
680
|
+
method,
|
|
681
|
+
argument,
|
|
682
|
+
reason: `${reason}; the instance initializer reverts \`${revertName}\``,
|
|
683
|
+
value
|
|
684
|
+
});
|
|
685
|
+
}
|
|
686
|
+
function assertCreateParamsWellFormed(args, method) {
|
|
687
|
+
const { common } = args.params;
|
|
688
|
+
if (isAddressEqual(common.token, zeroAddress)) {
|
|
689
|
+
throw invalidCreateParam(
|
|
690
|
+
method,
|
|
691
|
+
"common.token",
|
|
692
|
+
"ZeroToken",
|
|
693
|
+
"is the zero address",
|
|
694
|
+
common.token
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
698
|
+
if (common.endTime <= now + END_TIME_MARGIN_SECONDS) {
|
|
699
|
+
throw invalidCreateParam(
|
|
700
|
+
method,
|
|
701
|
+
"common.endTime",
|
|
702
|
+
"EndTimeInPast",
|
|
703
|
+
`is not at least ${END_TIME_MARGIN_SECONDS}s in the future`,
|
|
704
|
+
common.endTime
|
|
705
|
+
);
|
|
706
|
+
}
|
|
707
|
+
if (common.startTime > common.endTime) {
|
|
708
|
+
throw invalidCreateParam(
|
|
709
|
+
method,
|
|
710
|
+
"common.startTime",
|
|
711
|
+
"InvalidStartTime",
|
|
712
|
+
"is after `endTime`",
|
|
713
|
+
common.startTime
|
|
714
|
+
);
|
|
715
|
+
}
|
|
716
|
+
if (common.startTime === common.endTime) {
|
|
717
|
+
throw invalidCreateParam(
|
|
718
|
+
method,
|
|
719
|
+
"common.startTime",
|
|
720
|
+
"InvalidDuration",
|
|
721
|
+
"equals `endTime`, leaving a zero-length claim window",
|
|
722
|
+
common.startTime
|
|
723
|
+
);
|
|
724
|
+
}
|
|
725
|
+
if (args.variant === "merkle") {
|
|
726
|
+
const { merkleRoot, isMerkleRootMutable } = args.params;
|
|
727
|
+
if (!isMerkleRootMutable && BigInt(merkleRoot) === 0n) {
|
|
728
|
+
throw invalidCreateParam(
|
|
729
|
+
method,
|
|
730
|
+
"merkleRoot",
|
|
731
|
+
"ZeroMerkleRoot",
|
|
732
|
+
"is zero on an immutable-root campaign, so no claim could ever verify",
|
|
733
|
+
merkleRoot
|
|
734
|
+
);
|
|
735
|
+
}
|
|
736
|
+
} else if (isAddressEqual(args.params.signer, zeroAddress)) {
|
|
737
|
+
throw invalidCreateParam(
|
|
738
|
+
method,
|
|
739
|
+
"signer",
|
|
740
|
+
"ZeroSigner",
|
|
741
|
+
"is the zero address",
|
|
742
|
+
args.params.signer
|
|
743
|
+
);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
function resolvePlannedCreate(args) {
|
|
747
|
+
const { method, params, expected, expectedInitCodeHash, plan } = args;
|
|
748
|
+
if (!plan) return { expected, expectedInitCodeHash };
|
|
749
|
+
if (params.merkleRoot.toLowerCase() !== plan.root.toLowerCase()) {
|
|
750
|
+
throw new InvalidArgumentError({
|
|
751
|
+
method,
|
|
752
|
+
argument: "params.merkleRoot",
|
|
753
|
+
reason: "differs from plan.root; the plan's entries verify only against the root they were built into",
|
|
754
|
+
value: params.merkleRoot
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
if (expected?.airdrop !== void 0 && !isAddressEqual(expected.airdrop, plan.predictedAddress)) {
|
|
758
|
+
throw new InvalidArgumentError({
|
|
759
|
+
method,
|
|
760
|
+
argument: "expected.airdrop",
|
|
761
|
+
reason: "differs from plan.predictedAddress; a plan's leaves are bound to its predicted address, so the two cannot name different instances",
|
|
762
|
+
value: expected.airdrop
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
if (expectedInitCodeHash !== void 0 && expectedInitCodeHash.toLowerCase() !== plan.initCodeHashAfter.toLowerCase()) {
|
|
766
|
+
throw new InvalidArgumentError({
|
|
767
|
+
method,
|
|
768
|
+
argument: "expectedInitCodeHash",
|
|
769
|
+
reason: "differs from plan.initCodeHashAfter; pass one or the other",
|
|
770
|
+
value: expectedInitCodeHash
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
return {
|
|
774
|
+
expected: { ...definedFields(expected), airdrop: plan.predictedAddress },
|
|
775
|
+
expectedInitCodeHash: plan.initCodeHashAfter
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
var COMMITMENT_FIELDS = ["airdrop", "complianceManagerImpl", "complianceDelegate"];
|
|
779
|
+
function definedFields(pinned) {
|
|
780
|
+
if (!pinned) return {};
|
|
781
|
+
return Object.fromEntries(Object.entries(pinned).filter(([, value]) => value !== void 0));
|
|
782
|
+
}
|
|
491
783
|
async function preflightCreate(args) {
|
|
492
784
|
const method = args.variant === "merkle" ? "createMerkleAirdrop" : "createEcdsaAirdrop";
|
|
493
785
|
const blockers = [];
|
|
@@ -495,6 +787,39 @@ async function preflightCreate(args) {
|
|
|
495
787
|
if (args.variant === "merkle") {
|
|
496
788
|
collect(blockers, () => assertMerkleModeSupported(args.mode));
|
|
497
789
|
}
|
|
790
|
+
const encodable = collect(
|
|
791
|
+
blockers,
|
|
792
|
+
() => assertMaxAcceptedGasFeeRange(args.params.common.maxAcceptedGasFee, method)
|
|
793
|
+
);
|
|
794
|
+
if (!encodable) return { ready: false, blockers };
|
|
795
|
+
collect(blockers, () => assertCreateParamsWellFormed(args, method));
|
|
796
|
+
let pins = { expected: args.expected, expectedInitCodeHash: args.expectedInitCodeHash };
|
|
797
|
+
if (args.variant === "merkle") {
|
|
798
|
+
const { params, plan } = args;
|
|
799
|
+
collect(blockers, () => {
|
|
800
|
+
pins = resolvePlannedCreate({ method, params, ...pins, plan });
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
const { expected, expectedInitCodeHash } = pins;
|
|
804
|
+
await collectAsync(blockers, async () => {
|
|
805
|
+
const [resolvedFee, maxGasFee] = await Promise.all([
|
|
806
|
+
args.factory.resolveGasFee(args.creator),
|
|
807
|
+
args.factory.maxGasFee()
|
|
808
|
+
]);
|
|
809
|
+
collect(blockers, () => assertWithinCeiling(method, resolvedFee, maxGasFee));
|
|
810
|
+
collect(
|
|
811
|
+
blockers,
|
|
812
|
+
() => assertResolvedFeeAccepted(
|
|
813
|
+
{
|
|
814
|
+
factory: args.factory,
|
|
815
|
+
creator: args.creator,
|
|
816
|
+
maxAcceptedGasFee: args.params.common.maxAcceptedGasFee,
|
|
817
|
+
method
|
|
818
|
+
},
|
|
819
|
+
resolvedFee
|
|
820
|
+
)
|
|
821
|
+
);
|
|
822
|
+
});
|
|
498
823
|
const predictArgs = {
|
|
499
824
|
mode: args.mode,
|
|
500
825
|
deployer: args.creator,
|
|
@@ -526,7 +851,7 @@ async function preflightCreate(args) {
|
|
|
526
851
|
blockers,
|
|
527
852
|
() => assertSaltAvailable({
|
|
528
853
|
publicClient: args.factory.publicClient,
|
|
529
|
-
predictedAddress,
|
|
854
|
+
predictedAddress: expected?.airdrop ?? predictedAddress,
|
|
530
855
|
variant: args.variant,
|
|
531
856
|
mode: args.mode,
|
|
532
857
|
deployer: args.creator,
|
|
@@ -534,25 +859,74 @@ async function preflightCreate(args) {
|
|
|
534
859
|
method
|
|
535
860
|
})
|
|
536
861
|
);
|
|
537
|
-
if (
|
|
862
|
+
if (expectedInitCodeHash !== void 0) {
|
|
863
|
+
const initCodeHashBefore = expectedInitCodeHash;
|
|
538
864
|
collect(
|
|
539
865
|
blockers,
|
|
540
866
|
() => assertPredictionFresh({
|
|
541
867
|
variant: args.variant,
|
|
542
|
-
initCodeHashBefore
|
|
868
|
+
initCodeHashBefore,
|
|
543
869
|
initCodeHashAfter: liveInitCodeHash,
|
|
544
|
-
predictedAddress,
|
|
870
|
+
predictedAddress: expected?.airdrop ?? predictedAddress,
|
|
545
871
|
method
|
|
546
872
|
})
|
|
547
873
|
);
|
|
548
874
|
}
|
|
549
|
-
|
|
875
|
+
const pinned = Object.keys(definedFields(expected)).length > 0;
|
|
876
|
+
let fresh;
|
|
877
|
+
try {
|
|
878
|
+
fresh = await args.factory.quoteCreateCommitments({
|
|
879
|
+
...args.variant === "merkle" ? { variant: "merkle", params: args.params } : { variant: "ecdsa", params: args.params },
|
|
880
|
+
mode: args.mode,
|
|
881
|
+
deployer: args.creator,
|
|
882
|
+
userSalt: args.userSalt,
|
|
883
|
+
expected: { airdrop: predictedAddress }
|
|
884
|
+
});
|
|
885
|
+
} catch (err) {
|
|
886
|
+
if (pinned) {
|
|
887
|
+
if (!isTokenOpsSdkError(err)) throw err;
|
|
888
|
+
blockers.push(err);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
let commitments;
|
|
892
|
+
if (fresh) {
|
|
893
|
+
commitments = { ...fresh, ...definedFields(expected) };
|
|
894
|
+
for (const field of COMMITMENT_FIELDS) {
|
|
895
|
+
const pinned2 = expected?.[field];
|
|
896
|
+
if (pinned2 === void 0 || isAddressEqual(pinned2, fresh[field])) continue;
|
|
897
|
+
blockers.push(
|
|
898
|
+
new CreateCommitmentMismatchError({
|
|
899
|
+
method,
|
|
900
|
+
contractAddress: args.factory.address,
|
|
901
|
+
field,
|
|
902
|
+
expected: pinned2,
|
|
903
|
+
actual: fresh[field]
|
|
904
|
+
})
|
|
905
|
+
);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
return { ready: blockers.length === 0, blockers, ...commitments ? { commitments } : {} };
|
|
909
|
+
}
|
|
910
|
+
async function assertKnownAirdrop(args) {
|
|
911
|
+
if (args.factory.chainId !== args.chainId) {
|
|
912
|
+
throw new InvalidArgumentError({
|
|
913
|
+
method: args.method,
|
|
914
|
+
argument: "factory",
|
|
915
|
+
reason: `is bound to chain ${args.factory.chainId} but the airdrop is on chain ${args.chainId}; a registry answer from another chain proves nothing about this instance`,
|
|
916
|
+
value: args.factory.address
|
|
917
|
+
});
|
|
918
|
+
}
|
|
919
|
+
if (await args.factory.isAirdrop(args.airdrop)) return;
|
|
920
|
+
throw new UnrecognisedAirdropError({
|
|
921
|
+
method: args.method,
|
|
922
|
+
contractAddress: args.airdrop,
|
|
923
|
+
factory: args.factory.address
|
|
924
|
+
});
|
|
550
925
|
}
|
|
551
926
|
function assertMerkleClaimIdentity(args) {
|
|
552
|
-
const { method, account, submitter,
|
|
927
|
+
const { method, account, submitter, to, entrypoint = "claim" } = args;
|
|
553
928
|
for (const [argument, value] of [
|
|
554
929
|
["account", account],
|
|
555
|
-
["entry.boundTo", boundTo],
|
|
556
930
|
["to", to],
|
|
557
931
|
["submitter", submitter]
|
|
558
932
|
]) {
|
|
@@ -572,13 +946,6 @@ function assertMerkleClaimIdentity(args) {
|
|
|
572
946
|
reason: "is the zero address; the claim identity is mandatory and is never defaulted from the caller"
|
|
573
947
|
});
|
|
574
948
|
}
|
|
575
|
-
if (boundTo !== void 0 && !isAddressEqual(boundTo, submitter)) {
|
|
576
|
-
throw new InvalidArgumentError({
|
|
577
|
-
method,
|
|
578
|
-
argument: "entry.boundTo",
|
|
579
|
-
reason: `is ${boundTo}, but this transaction is sent from ${submitter}; the FHE input proof is bound to the sender, so only ${boundTo} can submit this entry`
|
|
580
|
-
});
|
|
581
|
-
}
|
|
582
949
|
if (entrypoint === "claimAndUnwrap") {
|
|
583
950
|
if (!isAddressEqual(account, submitter)) {
|
|
584
951
|
throw new InvalidArgumentError({
|
|
@@ -599,6 +966,17 @@ async function preflightClaim(args) {
|
|
|
599
966
|
const method = "preflightClaim";
|
|
600
967
|
const blockers = [];
|
|
601
968
|
collect(blockers, () => assertSupportedChain(airdrop.chainId));
|
|
969
|
+
if (args.factory) {
|
|
970
|
+
await collectAsync(
|
|
971
|
+
blockers,
|
|
972
|
+
() => assertKnownAirdrop({
|
|
973
|
+
factory: args.factory,
|
|
974
|
+
airdrop: airdrop.address,
|
|
975
|
+
chainId: airdrop.chainId,
|
|
976
|
+
method
|
|
977
|
+
})
|
|
978
|
+
);
|
|
979
|
+
}
|
|
602
980
|
if (args.account !== void 0 || args.entrypoint !== void 0) {
|
|
603
981
|
collect(
|
|
604
982
|
blockers,
|
|
@@ -671,9 +1049,11 @@ async function preflightClaim(args) {
|
|
|
671
1049
|
function collect(blockers, run) {
|
|
672
1050
|
try {
|
|
673
1051
|
run();
|
|
1052
|
+
return true;
|
|
674
1053
|
} catch (err) {
|
|
675
1054
|
if (!isTokenOpsSdkError(err)) throw err;
|
|
676
1055
|
blockers.push(err);
|
|
1056
|
+
return false;
|
|
677
1057
|
}
|
|
678
1058
|
}
|
|
679
1059
|
async function collectAsync(blockers, run) {
|
|
@@ -684,5 +1064,21 @@ async function collectAsync(blockers, run) {
|
|
|
684
1064
|
blockers.push(err);
|
|
685
1065
|
}
|
|
686
1066
|
}
|
|
1067
|
+
var CLONE_INIT_CODE_PREFIX = "0x3d602d80600a3d3981f3363d3d373d3d3d363d73";
|
|
1068
|
+
var CLONE_INIT_CODE_SUFFIX = "5af43d82803e903d91602b57fd5bf3";
|
|
1069
|
+
function predictComplianceManagerClone(args) {
|
|
1070
|
+
const salt = keccak256(
|
|
1071
|
+
encodeAbiParameters(
|
|
1072
|
+
[{ type: "address" }, { type: "string" }],
|
|
1073
|
+
[getAddress(args.airdrop), "compliance"]
|
|
1074
|
+
)
|
|
1075
|
+
);
|
|
1076
|
+
const initCode = `${CLONE_INIT_CODE_PREFIX}${getAddress(args.managerImplementation).slice(2).toLowerCase()}${CLONE_INIT_CODE_SUFFIX}`;
|
|
1077
|
+
return getCreate2Address({
|
|
1078
|
+
from: getAddress(args.factory),
|
|
1079
|
+
salt,
|
|
1080
|
+
bytecodeHash: keccak256(initCode)
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
687
1083
|
|
|
688
|
-
export { AIRDROP_CONTRACTS_COMMIT, AlreadyClaimedError, ClaimNotStartedError, ClaimWindowClosedError, DEDUP_MODE, DEPLOYMENT_MODE, DedupIdConsumedError, FeeCollectorSelfAdministeredError, MerkleUupsUnsupportedError, NonStockWrapperError, PredictionDriftError, SaltCollisionError, SignatureExpiredError, UnauthorizedRedirectError, UpgradeabilityNotAllowedError, airdropProductMapper, assertMerkleClaimIdentity, assertMerkleModeSupported, assertPredictionFresh, assertSaltAvailable, assertStockWrapper, assertSupportedChain, preflightClaim, preflightCreate };
|
|
1084
|
+
export { AIRDROP_CONTRACTS_COMMIT, AlreadyClaimedError, ClaimNotStartedError, ClaimWindowClosedError, ClawbackRequiresPauseError, CreateCommitmentMismatchError, DEDUP_MODE, DEDUP_MODE_BY_ORDINAL, DEPLOYMENT_MODE, DedupIdConsumedError, FeeCollectorSelfAdministeredError, GasFeeNotAcceptedError, MerkleUupsUnsupportedError, NativeRescueRequiresZeroFeeError, NonStockWrapperError, PredictionDriftError, SaltCollisionError, SignatureExpiredError, UINT96_MAX, UnauthorizedRedirectError, UnrecognisedAirdropError, UpgradeabilityNotAllowedError, airdropProductMapper, assertCreateGasFee, assertMerkleClaimIdentity, assertMerkleModeSupported, assertPredictionFresh, assertSaltAvailable, assertStockWrapper, assertSupportedChain, predictComplianceManagerClone, preflightClaim, preflightCreate, resolvePlannedCreate };
|
package/dist/core/addresses.d.ts
CHANGED
|
@@ -15,16 +15,16 @@ export declare const DEPLOYED_ADDRESSES: {
|
|
|
15
15
|
};
|
|
16
16
|
readonly fheAirdrop: {
|
|
17
17
|
readonly airdropFactory: {
|
|
18
|
-
readonly 11155111: "
|
|
18
|
+
readonly 11155111: "0xD5906f366Ff50909F403c8EDfDe680015563046a";
|
|
19
19
|
};
|
|
20
20
|
readonly ecdsaImplementation: {
|
|
21
|
-
readonly 11155111: "
|
|
21
|
+
readonly 11155111: "0xE27A2aF9dCBda2B06535d5502e6dbB90364b43bA";
|
|
22
22
|
};
|
|
23
23
|
readonly merkleImplementation: {
|
|
24
|
-
readonly 11155111: "
|
|
24
|
+
readonly 11155111: "0xccea0A916dBe5aB939915a402942EE6AFDcD505E";
|
|
25
25
|
};
|
|
26
26
|
readonly complianceManagerImplementation: {
|
|
27
|
-
readonly 11155111: "
|
|
27
|
+
readonly 11155111: "0x076719596c21F0Eb358AC45649C3db387D98FADf";
|
|
28
28
|
};
|
|
29
29
|
};
|
|
30
30
|
readonly fheDisperse: {
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ declare const TOKENOPS_SDK_ERROR_BRAND: unique symbol;
|
|
|
13
13
|
* human-readable and may evolve between versions.
|
|
14
14
|
* @public
|
|
15
15
|
*/
|
|
16
|
-
export type TokenOpsSdkErrorCode = "TOKENOPS_UNSUPPORTED_CHAIN" | "TOKENOPS_DEPLOYMENT_ADDRESS_UNAVAILABLE" | "TOKENOPS_MISSING_PUBLIC_CLIENT" | "TOKENOPS_MISSING_WALLET_CLIENT" | "TOKENOPS_MISSING_ACCOUNT" | "TOKENOPS_MISSING_ENCRYPTOR" | "TOKENOPS_MISSING_CLIENT" | "TOKENOPS_INVALID_ARGUMENT" | "TOKENOPS_RECEIPT_EVENT_NOT_FOUND" | "TOKENOPS_RECEIPT_EVENT_AMBIGUOUS" | "TOKENOPS_CONTRACT_REVERT" | "TOKENOPS_PAUSED" | "TOKENOPS_ACCESS_DENIED" | "TOKENOPS_OPERATOR_NOT_APPROVED" | "TOKENOPS_INSUFFICIENT_FEE" | "TOKENOPS_INSUFFICIENT_BALANCE" | "TOKENOPS_BATCH_TOO_LARGE" | "TOKENOPS_FEATURE_DISABLED" | "TOKENOPS_TRANSFER_FAILED" | "TOKENOPS_FHE_HANDLE_NOT_ALLOWED" | "TOKENOPS_ALREADY_INITIALIZED" | "TOKENOPS_REENTRANCY" | "TOKENOPS_INVALID_SIGNATURE" | "TOKENOPS_WALLET_REJECTED" | "TOKENOPS_WALLET_CHAIN_MISMATCH" | "TOKENOPS_NETWORK_ERROR" | "TOKENOPS_INSUFFICIENT_GAS_FUNDS" | "TOKENOPS_UNKNOWN_WRITE_FAILURE" | "TOKENOPS_USER_REJECTED" | "TOKENOPS_SIGNING_FAILED" | "TOKENOPS_RELAYER_UNREACHABLE" | "TOKENOPS_ENCRYPTION_FAILED" | "TOKENOPS_DECRYPTION_FAILED" | "TOKENOPS_USER_DECRYPT_NOT_ALLOWED" | "TOKENOPS_VESTING_NOT_FOUND" | "TOKENOPS_NOT_RECIPIENT" | "TOKENOPS_CLAIM_LOCKED" | "TOKENOPS_VESTING_REVOKED" | "TOKENOPS_NOT_REVOCABLE" | "TOKENOPS_VESTING_EXPIRED" | "TOKENOPS_TRANSFER_ALREADY_PENDING" | "TOKENOPS_NO_PENDING_TRANSFER" | "TOKENOPS_NOT_PENDING_RECIPIENT" | "TOKENOPS_TRANSFER_EXPIRED" | "TOKENOPS_ALREADY_CLAIMED" | "TOKENOPS_CLAIM_NOT_STARTED" | "TOKENOPS_CLAIM_WINDOW_CLOSED" | "TOKENOPS_NOT_REGISTERED" | "TOKENOPS_ALREADY_REGISTERED" | "TOKENOPS_SUBWALLETS_NOT_APPROVED" | "TOKENOPS_SINGLETON_NOT_APPROVED" | "TOKENOPS_FAUCET_SUPPLY_EXHAUSTED" | "TOKENOPS_MERKLE_UUPS_UNSUPPORTED" | "TOKENOPS_NON_STOCK_WRAPPER" | "TOKENOPS_UPGRADEABILITY_NOT_ALLOWED" | "TOKENOPS_FEE_COLLECTOR_SELF_ADMINISTERED" | "TOKENOPS_DEDUP_ID_CONSUMED" | "TOKENOPS_SIGNATURE_EXPIRED" | "TOKENOPS_SALT_COLLISION" | "TOKENOPS_PREDICTION_DRIFT" | "TOKENOPS_UNAUTHORIZED_REDIRECT";
|
|
16
|
+
export type TokenOpsSdkErrorCode = "TOKENOPS_UNSUPPORTED_CHAIN" | "TOKENOPS_DEPLOYMENT_ADDRESS_UNAVAILABLE" | "TOKENOPS_MISSING_PUBLIC_CLIENT" | "TOKENOPS_MISSING_WALLET_CLIENT" | "TOKENOPS_MISSING_ACCOUNT" | "TOKENOPS_MISSING_ENCRYPTOR" | "TOKENOPS_MISSING_CLIENT" | "TOKENOPS_INVALID_ARGUMENT" | "TOKENOPS_RECEIPT_EVENT_NOT_FOUND" | "TOKENOPS_RECEIPT_EVENT_AMBIGUOUS" | "TOKENOPS_CONTRACT_REVERT" | "TOKENOPS_PAUSED" | "TOKENOPS_ACCESS_DENIED" | "TOKENOPS_OPERATOR_NOT_APPROVED" | "TOKENOPS_INSUFFICIENT_FEE" | "TOKENOPS_INSUFFICIENT_BALANCE" | "TOKENOPS_BATCH_TOO_LARGE" | "TOKENOPS_FEATURE_DISABLED" | "TOKENOPS_TRANSFER_FAILED" | "TOKENOPS_FHE_HANDLE_NOT_ALLOWED" | "TOKENOPS_ALREADY_INITIALIZED" | "TOKENOPS_REENTRANCY" | "TOKENOPS_INVALID_SIGNATURE" | "TOKENOPS_WALLET_REJECTED" | "TOKENOPS_WALLET_CHAIN_MISMATCH" | "TOKENOPS_NETWORK_ERROR" | "TOKENOPS_INSUFFICIENT_GAS_FUNDS" | "TOKENOPS_UNKNOWN_WRITE_FAILURE" | "TOKENOPS_UNEXPECTED_CONTRACT_RESPONSE" | "TOKENOPS_USER_REJECTED" | "TOKENOPS_SIGNING_FAILED" | "TOKENOPS_RELAYER_UNREACHABLE" | "TOKENOPS_ENCRYPTION_FAILED" | "TOKENOPS_DECRYPTION_FAILED" | "TOKENOPS_USER_DECRYPT_NOT_ALLOWED" | "TOKENOPS_VESTING_NOT_FOUND" | "TOKENOPS_NOT_RECIPIENT" | "TOKENOPS_CLAIM_LOCKED" | "TOKENOPS_VESTING_REVOKED" | "TOKENOPS_NOT_REVOCABLE" | "TOKENOPS_VESTING_EXPIRED" | "TOKENOPS_TRANSFER_ALREADY_PENDING" | "TOKENOPS_NO_PENDING_TRANSFER" | "TOKENOPS_NOT_PENDING_RECIPIENT" | "TOKENOPS_TRANSFER_EXPIRED" | "TOKENOPS_ALREADY_CLAIMED" | "TOKENOPS_CLAIM_NOT_STARTED" | "TOKENOPS_CLAIM_WINDOW_CLOSED" | "TOKENOPS_NOT_REGISTERED" | "TOKENOPS_ALREADY_REGISTERED" | "TOKENOPS_SUBWALLETS_NOT_APPROVED" | "TOKENOPS_SINGLETON_NOT_APPROVED" | "TOKENOPS_FAUCET_SUPPLY_EXHAUSTED" | "TOKENOPS_MERKLE_UUPS_UNSUPPORTED" | "TOKENOPS_NON_STOCK_WRAPPER" | "TOKENOPS_UPGRADEABILITY_NOT_ALLOWED" | "TOKENOPS_FEE_COLLECTOR_SELF_ADMINISTERED" | "TOKENOPS_DEDUP_ID_CONSUMED" | "TOKENOPS_SIGNATURE_EXPIRED" | "TOKENOPS_SALT_COLLISION" | "TOKENOPS_CREATE_COMMITMENT_MISMATCH" | "TOKENOPS_CLAWBACK_REQUIRES_PAUSE" | "TOKENOPS_NATIVE_RESCUE_REQUIRES_ZERO_FEE" | "TOKENOPS_PREDICTION_DRIFT" | "TOKENOPS_UNAUTHORIZED_REDIRECT" | "TOKENOPS_GAS_FEE_NOT_ACCEPTED" | "TOKENOPS_UNRECOGNISED_AIRDROP";
|
|
17
17
|
/** @public */
|
|
18
18
|
export interface TokenOpsSdkErrorInit {
|
|
19
19
|
code: TokenOpsSdkErrorCode;
|
package/dist/core/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from "./addresses.js";
|
|
|
2
2
|
export * from "./brands.js";
|
|
3
3
|
export * from "./chains.js";
|
|
4
4
|
export * from "./errors.js";
|
|
5
|
+
export * from "./pending.js";
|
|
5
6
|
export * from "./preflight.js";
|
|
6
7
|
export * from "./types.js";
|
|
7
8
|
export { type SdkTelemetry, type SdkTelemetryTags } from "./telemetry.js";
|