@boostxyz/sdk 5.5.0 → 6.0.0
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/dist/Actions/Action.cjs +1 -1
- package/dist/Actions/Action.js +3 -3
- package/dist/Actions/EventAction.cjs +1 -1
- package/dist/Actions/EventAction.cjs.map +1 -1
- package/dist/Actions/EventAction.d.ts +2 -1
- package/dist/Actions/EventAction.d.ts.map +1 -1
- package/dist/Actions/EventAction.js +95 -90
- package/dist/Actions/EventAction.js.map +1 -1
- package/dist/AllowLists/AllowList.cjs +1 -1
- package/dist/AllowLists/AllowList.js +2 -2
- package/dist/AllowLists/SimpleAllowList.cjs +1 -1
- package/dist/AllowLists/SimpleAllowList.cjs.map +1 -1
- package/dist/AllowLists/SimpleAllowList.js +24 -24
- package/dist/AllowLists/SimpleAllowList.js.map +1 -1
- package/dist/AllowLists/SimpleDenyList.cjs +1 -1
- package/dist/AllowLists/SimpleDenyList.js +3 -3
- package/dist/Auth/PassthroughAuth.cjs +1 -1
- package/dist/Auth/PassthroughAuth.cjs.map +1 -1
- package/dist/Auth/PassthroughAuth.js +14 -14
- package/dist/Boost.cjs.map +1 -1
- package/dist/Boost.js.map +1 -1
- package/dist/BoostCore.cjs +2 -2
- package/dist/BoostCore.cjs.map +1 -1
- package/dist/BoostCore.d.ts +247 -0
- package/dist/BoostCore.d.ts.map +1 -1
- package/dist/BoostCore.js +421 -259
- package/dist/BoostCore.js.map +1 -1
- package/dist/BoostRegistry.cjs +1 -1
- package/dist/BoostRegistry.cjs.map +1 -1
- package/dist/BoostRegistry.js +43 -43
- package/dist/BoostRegistry.js.map +1 -1
- package/dist/Budget-DMbfdTom.cjs +2 -0
- package/dist/{Budget-AoNx7uFd.cjs.map → Budget-DMbfdTom.cjs.map} +1 -1
- package/dist/Budget-DO6sGTIR.js +463 -0
- package/dist/{Budget-DYIV9iNK.js.map → Budget-DO6sGTIR.js.map} +1 -1
- package/dist/Budgets/Budget.cjs +1 -1
- package/dist/Budgets/Budget.js +2 -2
- package/dist/Budgets/ManagedBudget.cjs +1 -1
- package/dist/Budgets/ManagedBudget.cjs.map +1 -1
- package/dist/Budgets/ManagedBudget.js +53 -53
- package/dist/Budgets/ManagedBudgetWithFees.d.ts +26 -0
- package/dist/Budgets/ManagedBudgetWithFees.d.ts.map +1 -1
- package/dist/Deployable/DeployableTarget.cjs +1 -1
- package/dist/Deployable/DeployableTarget.js +1 -1
- package/dist/Deployable/DeployableTargetWithRBAC.cjs +1 -1
- package/dist/Deployable/DeployableTargetWithRBAC.js +15 -15
- package/dist/Incentive-Boviez4z.js +1036 -0
- package/dist/Incentive-Boviez4z.js.map +1 -0
- package/dist/Incentive-wM4zizTH.cjs +2 -0
- package/dist/Incentive-wM4zizTH.cjs.map +1 -0
- package/dist/Incentives/AllowListIncentive.cjs +1 -1
- package/dist/Incentives/AllowListIncentive.cjs.map +1 -1
- package/dist/Incentives/AllowListIncentive.d.ts +9 -1
- package/dist/Incentives/AllowListIncentive.d.ts.map +1 -1
- package/dist/Incentives/AllowListIncentive.js +64 -47
- package/dist/Incentives/AllowListIncentive.js.map +1 -1
- package/dist/Incentives/CGDAIncentive.cjs +1 -1
- package/dist/Incentives/CGDAIncentive.cjs.map +1 -1
- package/dist/Incentives/CGDAIncentive.d.ts +12 -1
- package/dist/Incentives/CGDAIncentive.d.ts.map +1 -1
- package/dist/Incentives/CGDAIncentive.js +64 -33
- package/dist/Incentives/CGDAIncentive.js.map +1 -1
- package/dist/Incentives/ERC20Incentive.cjs +1 -1
- package/dist/Incentives/ERC20Incentive.cjs.map +1 -1
- package/dist/Incentives/ERC20Incentive.d.ts +37 -1
- package/dist/Incentives/ERC20Incentive.d.ts.map +1 -1
- package/dist/Incentives/ERC20Incentive.js +73 -49
- package/dist/Incentives/ERC20Incentive.js.map +1 -1
- package/dist/Incentives/ERC20PeggedIncentive.d.ts +35 -0
- package/dist/Incentives/ERC20PeggedIncentive.d.ts.map +1 -1
- package/dist/Incentives/ERC20PeggedVariableCriteriaIncentive.d.ts +35 -0
- package/dist/Incentives/ERC20PeggedVariableCriteriaIncentive.d.ts.map +1 -1
- package/dist/Incentives/ERC20VariableCriteriaIncentive.cjs +1 -1
- package/dist/Incentives/ERC20VariableCriteriaIncentive.cjs.map +1 -1
- package/dist/Incentives/ERC20VariableCriteriaIncentive.d.ts +25 -0
- package/dist/Incentives/ERC20VariableCriteriaIncentive.d.ts.map +1 -1
- package/dist/Incentives/ERC20VariableCriteriaIncentive.js +24 -24
- package/dist/Incentives/ERC20VariableCriteriaIncentive.js.map +1 -1
- package/dist/Incentives/ERC20VariableIncentive.cjs +1 -1
- package/dist/Incentives/ERC20VariableIncentive.cjs.map +1 -1
- package/dist/Incentives/ERC20VariableIncentive.d.ts +35 -0
- package/dist/Incentives/ERC20VariableIncentive.d.ts.map +1 -1
- package/dist/Incentives/ERC20VariableIncentive.js +55 -38
- package/dist/Incentives/ERC20VariableIncentive.js.map +1 -1
- package/dist/Incentives/Incentive.cjs +1 -1
- package/dist/Incentives/Incentive.d.ts +25 -0
- package/dist/Incentives/Incentive.d.ts.map +1 -1
- package/dist/Incentives/Incentive.js +2 -2
- package/dist/Incentives/PointsIncentive.cjs +1 -1
- package/dist/Incentives/PointsIncentive.cjs.map +1 -1
- package/dist/Incentives/PointsIncentive.d.ts +8 -0
- package/dist/Incentives/PointsIncentive.d.ts.map +1 -1
- package/dist/Incentives/PointsIncentive.js +50 -28
- package/dist/Incentives/PointsIncentive.js.map +1 -1
- package/dist/SimpleDenyList-CW4RwwRw.js +133 -0
- package/dist/{SimpleDenyList-ByAr4X1r.js.map → SimpleDenyList-CW4RwwRw.js.map} +1 -1
- package/dist/SimpleDenyList-Cybtz7AK.cjs +2 -0
- package/dist/{SimpleDenyList-CsRXJPwm.cjs.map → SimpleDenyList-Cybtz7AK.cjs.map} +1 -1
- package/dist/Validators/LimitedSignerValidator.cjs +1 -1
- package/dist/Validators/LimitedSignerValidator.cjs.map +1 -1
- package/dist/Validators/LimitedSignerValidator.js +33 -33
- package/dist/Validators/LimitedSignerValidator.js.map +1 -1
- package/dist/Validators/SignerValidator.cjs +1 -1
- package/dist/Validators/SignerValidator.cjs.map +1 -1
- package/dist/Validators/SignerValidator.js +26 -26
- package/dist/Validators/SignerValidator.js.map +1 -1
- package/dist/Validators/Validator.cjs +1 -1
- package/dist/Validators/Validator.js +3 -3
- package/dist/deployments-CIXw_WKk.cjs +2 -0
- package/dist/deployments-CIXw_WKk.cjs.map +1 -0
- package/dist/{deployments-D0fs26TV.js → deployments-DqjtOTUr.js} +47 -47
- package/dist/{deployments-D0fs26TV.js.map → deployments-DqjtOTUr.js.map} +1 -1
- package/dist/deployments.json +24 -24
- package/dist/generated-DgXPUgXl.cjs +3 -0
- package/dist/generated-DgXPUgXl.cjs.map +1 -0
- package/dist/{generated-Cyvr_Tjx.js → generated-pJZHmRCK.js} +728 -459
- package/dist/generated-pJZHmRCK.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +34 -34
- package/package.json +1 -1
- package/src/Actions/EventAction.ts +25 -6
- package/src/BoostCore.test.ts +124 -2
- package/src/BoostCore.ts +227 -0
- package/src/Incentives/AllowListIncentive.ts +17 -0
- package/src/Incentives/CGDAIncentive.ts +31 -0
- package/src/Incentives/ERC20Incentive.ts +27 -0
- package/src/Incentives/ERC20PeggedIncentive.ts +18 -0
- package/src/Incentives/ERC20PeggedVariableCriteriaIncentive.ts +26 -0
- package/src/Incentives/ERC20VariableIncentive.ts +18 -0
- package/src/Incentives/PointsIncentive.ts +22 -0
- package/dist/Budget-AoNx7uFd.cjs +0 -2
- package/dist/Budget-DYIV9iNK.js +0 -463
- package/dist/Incentive-BbkfwGOb.cjs +0 -2
- package/dist/Incentive-BbkfwGOb.cjs.map +0 -1
- package/dist/Incentive-qlnv5kQB.js +0 -991
- package/dist/Incentive-qlnv5kQB.js.map +0 -1
- package/dist/SimpleDenyList-ByAr4X1r.js +0 -133
- package/dist/SimpleDenyList-CsRXJPwm.cjs +0 -2
- package/dist/deployments-DoIOqxco.cjs +0 -2
- package/dist/deployments-DoIOqxco.cjs.map +0 -1
- package/dist/generated-Cyvr_Tjx.js.map +0 -1
- package/dist/generated-DtYPHhtX.cjs +0 -3
- package/dist/generated-DtYPHhtX.cjs.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("./BoostRegistry.cjs"),d=require("./BoostCore.cjs"),C=require("./Boost.cjs"),u=require("./Actions/Action.cjs"),a=require("./Actions/EventAction.cjs"),g=require("./AllowLists/AllowList.cjs"),y=require("./AllowLists/SimpleAllowList.cjs"),I=require("./SimpleDenyList-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("./BoostRegistry.cjs"),d=require("./BoostCore.cjs"),C=require("./Boost.cjs"),u=require("./Actions/Action.cjs"),a=require("./Actions/EventAction.cjs"),g=require("./AllowLists/AllowList.cjs"),y=require("./AllowLists/SimpleAllowList.cjs"),I=require("./SimpleDenyList-Cybtz7AK.cjs"),l=require("./Budget-DMbfdTom.cjs"),o=require("./Budgets/ManagedBudget.cjs"),B=require("./Deployable/Deployable.cjs"),T=require("./Deployable/Contract.cjs"),V=require("./Deployable/DeployableTarget.cjs"),v=require("./Deployable/DeployableTargetWithRBAC.cjs"),P=require("./Incentives/AllowListIncentive.cjs"),R=require("./Incentives/CGDAIncentive.cjs"),S=require("./Incentives/ERC20Incentive.cjs"),t=require("./Incentive-wM4zizTH.cjs"),m=require("./Incentives/ERC20VariableIncentive.cjs"),A=require("./Incentives/ERC20VariableCriteriaIncentive.cjs"),b=require("./Incentives/PointsIncentive.cjs"),s=require("./Validators/SignerValidator.cjs"),p=require("./Validators/LimitedSignerValidator.cjs"),c=require("./Validators/Validator.cjs"),e=require("./errors.cjs"),i=require("./utils.cjs"),D=require("./claiming.cjs"),n=require("./transfers.cjs"),F=require("./Auth/PassthroughAuth.cjs"),r=require("./generated-DgXPUgXl.cjs");exports.BOOST_REGISTRY_ADDRESS=E.BOOST_REGISTRY_ADDRESS;exports.BOOST_REGISTRY_ADDRESSES=E.BOOST_REGISTRY_ADDRESSES;exports.BoostRegistry=E.BoostRegistry;exports.BOOST_CORE_ADDRESS=d.BOOST_CORE_ADDRESS;exports.BOOST_CORE_ADDRESSES=d.BOOST_CORE_ADDRESSES;exports.BoostCore=d.BoostCore;exports.FEE_DENOMINATOR=d.FEE_DENOMINATOR;exports.Boost=C.Boost;exports.prepareBoostPayload=C.prepareBoostPayload;exports.ActionByComponentInterface=u.ActionByComponentInterface;exports.actionFromAddress=u.actionFromAddress;exports.EventAction=a.EventAction;exports.FilterType=a.FilterType;exports.PrimitiveType=a.PrimitiveType;exports.SignatureType=a.SignatureType;exports.anyActionParameter=a.anyActionParameter;exports.decodeAndReorderLogArgs=a.decodeAndReorderLogArgs;exports.detectSignatureType=a.detectSignatureType;exports.isEventActionPayloadSimple=a.isEventActionPayloadSimple;exports.packFieldIndexes=a.packFieldIndexes;exports.prepareEventActionPayload=a.prepareEventActionPayload;exports.transactionSenderClaimant=a.transactionSenderClaimant;exports.unpackFieldIndexes=a.unpackFieldIndexes;exports.AllowListByComponentInterface=g.AllowListByComponentInterface;exports.OpenAllowList=g.OpenAllowList;exports.allowListFromAddress=g.allowListFromAddress;exports.LIST_MANAGER_ROLE=y.LIST_MANAGER_ROLE;exports.SimpleAllowList=y.SimpleAllowList;exports.prepareSimpleAllowListPayload=y.prepareSimpleAllowListPayload;exports.SimpleDenyList=I.SimpleDenyList;exports.prepareSimpleDenyListPayload=I.prepareSimpleDenyListPayload;exports.BudgetByComponentInterface=l.BudgetByComponentInterface;exports.ManagedBudgetWithFees=l.ManagedBudgetWithFees;exports.budgetFromAddress=l.budgetFromAddress;exports.prepareManagedBudgetWithFeesPayload=l.prepareManagedBudgetWithFeesPayload;exports.ManagedBudget=o.ManagedBudget;exports.ManagedBudgetRoles=o.ManagedBudgetRoles;exports.isERC1155TransferPayload=o.isERC1155TransferPayload;exports.isFungibleTransfer=o.isFungibleTransfer;exports.prepareManagedBudgetPayload=o.prepareManagedBudgetPayload;exports.prepareTransfer=o.prepareTransfer;exports.Deployable=B.Deployable;exports.Contract=T.Contract;exports.DeployableTarget=V.DeployableTarget;exports.DeployableTargetWithRBAC=v.DeployableTargetWithRBAC;exports.Roles=v.Roles;exports.AllowListIncentive=P.AllowListIncentive;exports.prepareAllowListIncentivePayload=P.prepareAllowListIncentivePayload;exports.CGDAIncentive=R.CGDAIncentive;exports.prepareCGDAIncentivePayload=R.prepareCGDAIncentivePayload;exports.ERC20Incentive=S.ERC20Incentive;exports.prepareERC20IncentivePayload=S.prepareERC20IncentivePayload;exports.ERC20PeggedIncentive=t.ERC20PeggedIncentive;exports.ERC20PeggedVariableCriteriaIncentive=t.ERC20PeggedVariableCriteriaIncentive;exports.IncentiveByComponentInterface=t.IncentiveByComponentInterface;exports.incentiveFromAddress=t.incentiveFromAddress;exports.prepareERC20PeggedIncentivePayload=t.prepareERC20PeggedIncentivePayload;exports.prepareERC20PeggedVariableCriteriaIncentivePayload=t.prepareERC20PeggedVariableCriteriaIncentivePayload;exports.ERC20VariableIncentive=m.ERC20VariableIncentive;exports.prepareERC20VariableIncentivePayload=m.prepareERC20VariableIncentivePayload;exports.ERC20VariableCriteriaIncentive=A.ERC20VariableCriteriaIncentive;exports.gasRebateIncentiveCriteria=A.gasRebateIncentiveCriteria;exports.prepareERC20VariableCriteriaIncentivePayload=A.prepareERC20VariableCriteriaIncentivePayload;exports.PointsIncentive=b.PointsIncentive;exports.preparePointsIncentivePayload=b.preparePointsIncentivePayload;exports.SignerValidator=s.SignerValidator;exports.prepareSignerValidatorClaimDataPayload=s.prepareSignerValidatorClaimDataPayload;exports.prepareSignerValidatorInputParams=s.prepareSignerValidatorInputParams;exports.prepareSignerValidatorPayload=s.prepareSignerValidatorPayload;exports.LimitedSignerValidator=p.LimitedSignerValidator;exports.prepareLimitedSignerValidatorClaimDataPayload=p.prepareLimitedSignerValidatorClaimDataPayload;exports.prepareLimitedSignerValidatorInputParams=p.prepareLimitedSignerValidatorInputParams;exports.prepareLimitedSignerValidatorPayload=p.prepareLimitedSignerValidatorPayload;exports.BoostValidatorEOA=c.BoostValidatorEOA;exports.ValidatorByComponentInterface=c.ValidatorByComponentInterface;exports.decodeClaimData=c.decodeClaimData;exports.validatorFromAddress=c.validatorFromAddress;exports.BoostCoreNoIdentifierEmitted=e.BoostCoreNoIdentifierEmitted;exports.BoostNotFoundError=e.BoostNotFoundError;exports.BudgetMustAuthorizeBoostCore=e.BudgetMustAuthorizeBoostCore;exports.ContractAddressRequiredError=e.ContractAddressRequiredError;exports.DecodedArgsError=e.DecodedArgsError;exports.DecodedArgsMalformedError=e.DecodedArgsMalformedError;exports.DeployableAlreadyDeployedError=e.DeployableAlreadyDeployedError;exports.DeployableBuildParametersUnspecifiedError=e.DeployableBuildParametersUnspecifiedError;exports.DeployableMissingPayloadError=e.DeployableMissingPayloadError;exports.DeployableUnknownOwnerProvidedError=e.DeployableUnknownOwnerProvidedError;exports.DeployableWagmiConfigurationRequiredError=e.DeployableWagmiConfigurationRequiredError;exports.FieldActionValidationError=e.FieldActionValidationError;exports.FieldValueNotComparableError=e.FieldValueNotComparableError;exports.FieldValueUndefinedError=e.FieldValueUndefinedError;exports.FunctionDataDecodeError=e.FunctionDataDecodeError;exports.IncentiveCriteriaNotFoundError=e.IncentiveCriteriaNotFoundError;exports.IncentiveNotCloneableError=e.IncentiveNotCloneableError;exports.InvalidComponentInterfaceError=e.InvalidComponentInterfaceError;exports.InvalidCriteriaTypeError=e.InvalidCriteriaTypeError;exports.InvalidNumericalCriteriaError=e.InvalidNumericalCriteriaError;exports.InvalidProtocolChainIdError=e.InvalidProtocolChainIdError;exports.InvalidTupleDecodingError=e.InvalidTupleDecodingError;exports.InvalidTupleEncodingError=e.InvalidTupleEncodingError;exports.MustInitializeBudgetError=e.MustInitializeBudgetError;exports.NoConnectedChainIdError=e.NoConnectedChainIdError;exports.NoContractAddressUponReceiptError=e.NoContractAddressUponReceiptError;exports.NoEventActionStepsProvidedError=e.NoEventActionStepsProvidedError;exports.NoMatchingLogsError=e.NoMatchingLogsError;exports.TooManyEventActionStepsProvidedError=e.TooManyEventActionStepsProvidedError;exports.UnknownTransferPayloadSupplied=e.UnknownTransferPayloadSupplied;exports.UnparseableAbiParamError=e.UnparseableAbiParamError;exports.UnrecognizedFilterTypeError=e.UnrecognizedFilterTypeError;exports.ValidationAbiMissingError=e.ValidationAbiMissingError;exports.CheatCodes=i.CheatCodes;exports.RegistryType=i.RegistryType;exports.TRANSFER_SIGNATURE=i.TRANSFER_SIGNATURE;exports.assertValidAddressByChainId=i.assertValidAddressByChainId;exports.awaitResult=i.awaitResult;exports.bytes4=i.bytes4;exports.getDeployedContractAddress=i.getDeployedContractAddress;exports.getErc20Balance=i.getErc20Balance;exports.StrategyType=D.StrategyType;exports.prepareClaimPayload=D.prepareClaimPayload;exports.AssetType=n.AssetType;exports.prepareERC1155Payload=n.prepareERC1155Payload;exports.prepareERC1155Transfer=n.prepareERC1155Transfer;exports.prepareFungiblePayload=n.prepareFungiblePayload;exports.prepareFungibleTransfer=n.prepareFungibleTransfer;exports.prepareTransferPayload=n.prepareTransferPayload;exports.PassthroughAuth=F.PassthroughAuth;exports.allowListIncentiveAbi=r.H;exports.boostCoreAbi=r.g;exports.boostRegistryAbi=r.be;exports.cgdaIncentiveAbi=r.N;exports.erc20IncentiveAbi=r.m;exports.erc20PeggedIncentiveAbi=r.f;exports.erc20PeggedVariableCriteriaIncentiveAbi=r.y;exports.erc20VariableCriteriaIncentiveAbi=r.d;exports.erc20VariableIncentiveAbi=r.A;exports.limitedSignerValidatorAbi=r.S;exports.managedBudgetAbi=r.h;exports.managedBudgetWithFeesAbi=r.p;exports.passthroughAuthAbi=r.$e;exports.pointsIncentiveAbi=r.R;exports.rbacAbi=r.V;exports.signerValidatorAbi=r._;exports.simpleAllowListAbi=r.z;exports.simpleDenyListAbi=r.B;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { BOOST_REGISTRY_ADDRESS as a, BOOST_REGISTRY_ADDRESSES as o, BoostRegistry as i } from "./BoostRegistry.js";
|
|
2
2
|
import { BOOST_CORE_ADDRESS as n, BOOST_CORE_ADDRESSES as d, BoostCore as p, FEE_DENOMINATOR as l } from "./BoostCore.js";
|
|
3
|
-
import { Boost as c, prepareBoostPayload as
|
|
3
|
+
import { Boost as c, prepareBoostPayload as m } from "./Boost.js";
|
|
4
4
|
import { ActionByComponentInterface as E, actionFromAddress as A } from "./Actions/Action.js";
|
|
5
5
|
import { EventAction as C, FilterType as I, PrimitiveType as b, SignatureType as f, anyActionParameter as v, decodeAndReorderLogArgs as P, detectSignatureType as R, isEventActionPayloadSimple as S, packFieldIndexes as u, prepareEventActionPayload as B, transactionSenderClaimant as x, unpackFieldIndexes as D } from "./Actions/EventAction.js";
|
|
6
6
|
import { AllowListByComponentInterface as V, OpenAllowList as F, allowListFromAddress as L } from "./AllowLists/AllowList.js";
|
|
7
7
|
import { LIST_MANAGER_ROLE as N, SimpleAllowList as O, prepareSimpleAllowListPayload as M } from "./AllowLists/SimpleAllowList.js";
|
|
8
|
-
import { S as _, p as U } from "./SimpleDenyList-
|
|
9
|
-
import { B as W, M as k, b as z, p as q } from "./Budget-
|
|
10
|
-
import { ManagedBudget as H, ManagedBudgetRoles as
|
|
11
|
-
import { Deployable as
|
|
8
|
+
import { S as _, p as U } from "./SimpleDenyList-CW4RwwRw.js";
|
|
9
|
+
import { B as W, M as k, b as z, p as q } from "./Budget-DO6sGTIR.js";
|
|
10
|
+
import { ManagedBudget as H, ManagedBudgetRoles as $, isERC1155TransferPayload as j, isFungibleTransfer as J, prepareManagedBudgetPayload as K, prepareTransfer as Q } from "./Budgets/ManagedBudget.js";
|
|
11
|
+
import { Deployable as Z } from "./Deployable/Deployable.js";
|
|
12
12
|
import { Contract as re } from "./Deployable/Contract.js";
|
|
13
13
|
import { DeployableTarget as oe } from "./Deployable/DeployableTarget.js";
|
|
14
14
|
import { DeployableTargetWithRBAC as te, Roles as ne } from "./Deployable/DeployableTargetWithRBAC.js";
|
|
15
15
|
import { AllowListIncentive as pe, prepareAllowListIncentivePayload as le } from "./Incentives/AllowListIncentive.js";
|
|
16
|
-
import { CGDAIncentive as ce, prepareCGDAIncentivePayload as
|
|
16
|
+
import { CGDAIncentive as ce, prepareCGDAIncentivePayload as me } from "./Incentives/CGDAIncentive.js";
|
|
17
17
|
import { ERC20Incentive as Ee, prepareERC20IncentivePayload as Ae } from "./Incentives/ERC20Incentive.js";
|
|
18
|
-
import { E as Ce, a as Ie, I as be, i as fe, p as ve, b as Pe } from "./Incentive-
|
|
18
|
+
import { E as Ce, a as Ie, I as be, i as fe, p as ve, b as Pe } from "./Incentive-Boviez4z.js";
|
|
19
19
|
import { ERC20VariableIncentive as Se, prepareERC20VariableIncentivePayload as ue } from "./Incentives/ERC20VariableIncentive.js";
|
|
20
20
|
import { ERC20VariableCriteriaIncentive as xe, gasRebateIncentiveCriteria as De, prepareERC20VariableCriteriaIncentivePayload as Te } from "./Incentives/ERC20VariableCriteriaIncentive.js";
|
|
21
21
|
import { PointsIncentive as Fe, preparePointsIncentivePayload as Le } from "./Incentives/PointsIncentive.js";
|
|
22
22
|
import { SignerValidator as Ne, prepareSignerValidatorClaimDataPayload as Oe, prepareSignerValidatorInputParams as Me, prepareSignerValidatorPayload as we } from "./Validators/SignerValidator.js";
|
|
23
23
|
import { LimitedSignerValidator as Ue, prepareLimitedSignerValidatorClaimDataPayload as Ge, prepareLimitedSignerValidatorInputParams as We, prepareLimitedSignerValidatorPayload as ke } from "./Validators/LimitedSignerValidator.js";
|
|
24
|
-
import { BoostValidatorEOA as qe, ValidatorByComponentInterface as Ye, decodeClaimData as He, validatorFromAddress as
|
|
25
|
-
import { BoostCoreNoIdentifierEmitted as
|
|
24
|
+
import { BoostValidatorEOA as qe, ValidatorByComponentInterface as Ye, decodeClaimData as He, validatorFromAddress as $e } from "./Validators/Validator.js";
|
|
25
|
+
import { BoostCoreNoIdentifierEmitted as Je, BoostNotFoundError as Ke, BudgetMustAuthorizeBoostCore as Qe, ContractAddressRequiredError as Xe, DecodedArgsError as Ze, DecodedArgsMalformedError as er, DeployableAlreadyDeployedError as rr, DeployableBuildParametersUnspecifiedError as ar, DeployableMissingPayloadError as or, DeployableUnknownOwnerProvidedError as ir, DeployableWagmiConfigurationRequiredError as tr, FieldActionValidationError as nr, FieldValueNotComparableError as dr, FieldValueUndefinedError as pr, FunctionDataDecodeError as lr, IncentiveCriteriaNotFoundError as sr, IncentiveNotCloneableError as cr, InvalidComponentInterfaceError as mr, InvalidCriteriaTypeError as gr, InvalidNumericalCriteriaError as Er, InvalidProtocolChainIdError as Ar, InvalidTupleDecodingError as yr, InvalidTupleEncodingError as Cr, MustInitializeBudgetError as Ir, NoConnectedChainIdError as br, NoContractAddressUponReceiptError as fr, NoEventActionStepsProvidedError as vr, NoMatchingLogsError as Pr, TooManyEventActionStepsProvidedError as Rr, UnknownTransferPayloadSupplied as Sr, UnparseableAbiParamError as ur, UnrecognizedFilterTypeError as Br, ValidationAbiMissingError as xr } from "./errors.js";
|
|
26
26
|
import { CheatCodes as Tr, RegistryType as Vr, TRANSFER_SIGNATURE as Fr, assertValidAddressByChainId as Lr, awaitResult as hr, bytes4 as Nr, getDeployedContractAddress as Or, getErc20Balance as Mr } from "./utils.js";
|
|
27
27
|
import { StrategyType as _r, prepareClaimPayload as Ur } from "./claiming.js";
|
|
28
28
|
import { AssetType as Wr, prepareERC1155Payload as kr, prepareERC1155Transfer as zr, prepareFungiblePayload as qr, prepareFungibleTransfer as Yr, prepareTransferPayload as Hr } from "./transfers.js";
|
|
29
|
-
import { PassthroughAuth as
|
|
30
|
-
import {
|
|
29
|
+
import { PassthroughAuth as jr } from "./Auth/PassthroughAuth.js";
|
|
30
|
+
import { H as Kr, g as Qr, b as Xr, N as Zr, m as ea, f as ra, y as aa, d as oa, A as ia, S as ta, h as na, p as da, $ as pa, R as la, V as sa, _ as ca, z as ma, B as ga } from "./generated-pJZHmRCK.js";
|
|
31
31
|
export {
|
|
32
32
|
E as ActionByComponentInterface,
|
|
33
33
|
V as AllowListByComponentInterface,
|
|
@@ -39,19 +39,19 @@ export {
|
|
|
39
39
|
o as BOOST_REGISTRY_ADDRESSES,
|
|
40
40
|
c as Boost,
|
|
41
41
|
p as BoostCore,
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
Je as BoostCoreNoIdentifierEmitted,
|
|
43
|
+
Ke as BoostNotFoundError,
|
|
44
44
|
i as BoostRegistry,
|
|
45
45
|
qe as BoostValidatorEOA,
|
|
46
46
|
W as BudgetByComponentInterface,
|
|
47
|
-
|
|
47
|
+
Qe as BudgetMustAuthorizeBoostCore,
|
|
48
48
|
ce as CGDAIncentive,
|
|
49
49
|
Tr as CheatCodes,
|
|
50
50
|
re as Contract,
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
Xe as ContractAddressRequiredError,
|
|
52
|
+
Ze as DecodedArgsError,
|
|
53
53
|
er as DecodedArgsMalformedError,
|
|
54
|
-
|
|
54
|
+
Z as Deployable,
|
|
55
55
|
rr as DeployableAlreadyDeployedError,
|
|
56
56
|
ar as DeployableBuildParametersUnspecifiedError,
|
|
57
57
|
or as DeployableMissingPayloadError,
|
|
@@ -74,8 +74,8 @@ export {
|
|
|
74
74
|
be as IncentiveByComponentInterface,
|
|
75
75
|
sr as IncentiveCriteriaNotFoundError,
|
|
76
76
|
cr as IncentiveNotCloneableError,
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
mr as InvalidComponentInterfaceError,
|
|
78
|
+
gr as InvalidCriteriaTypeError,
|
|
79
79
|
Er as InvalidNumericalCriteriaError,
|
|
80
80
|
Ar as InvalidProtocolChainIdError,
|
|
81
81
|
yr as InvalidTupleDecodingError,
|
|
@@ -83,7 +83,7 @@ export {
|
|
|
83
83
|
N as LIST_MANAGER_ROLE,
|
|
84
84
|
Ue as LimitedSignerValidator,
|
|
85
85
|
H as ManagedBudget,
|
|
86
|
-
|
|
86
|
+
$ as ManagedBudgetRoles,
|
|
87
87
|
k as ManagedBudgetWithFees,
|
|
88
88
|
Ir as MustInitializeBudgetError,
|
|
89
89
|
br as NoConnectedChainIdError,
|
|
@@ -91,7 +91,7 @@ export {
|
|
|
91
91
|
vr as NoEventActionStepsProvidedError,
|
|
92
92
|
Pr as NoMatchingLogsError,
|
|
93
93
|
F as OpenAllowList,
|
|
94
|
-
|
|
94
|
+
jr as PassthroughAuth,
|
|
95
95
|
Fe as PointsIncentive,
|
|
96
96
|
b as PrimitiveType,
|
|
97
97
|
Vr as RegistryType,
|
|
@@ -110,15 +110,15 @@ export {
|
|
|
110
110
|
Ye as ValidatorByComponentInterface,
|
|
111
111
|
A as actionFromAddress,
|
|
112
112
|
L as allowListFromAddress,
|
|
113
|
-
|
|
113
|
+
Kr as allowListIncentiveAbi,
|
|
114
114
|
v as anyActionParameter,
|
|
115
115
|
Lr as assertValidAddressByChainId,
|
|
116
116
|
hr as awaitResult,
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
Qr as boostCoreAbi,
|
|
118
|
+
Xr as boostRegistryAbi,
|
|
119
119
|
z as budgetFromAddress,
|
|
120
120
|
Nr as bytes4,
|
|
121
|
-
|
|
121
|
+
Zr as cgdaIncentiveAbi,
|
|
122
122
|
P as decodeAndReorderLogArgs,
|
|
123
123
|
He as decodeClaimData,
|
|
124
124
|
R as detectSignatureType,
|
|
@@ -131,9 +131,9 @@ export {
|
|
|
131
131
|
Or as getDeployedContractAddress,
|
|
132
132
|
Mr as getErc20Balance,
|
|
133
133
|
fe as incentiveFromAddress,
|
|
134
|
-
|
|
134
|
+
j as isERC1155TransferPayload,
|
|
135
135
|
S as isEventActionPayloadSimple,
|
|
136
|
-
|
|
136
|
+
J as isFungibleTransfer,
|
|
137
137
|
ta as limitedSignerValidatorAbi,
|
|
138
138
|
na as managedBudgetAbi,
|
|
139
139
|
da as managedBudgetWithFeesAbi,
|
|
@@ -141,8 +141,8 @@ export {
|
|
|
141
141
|
pa as passthroughAuthAbi,
|
|
142
142
|
la as pointsIncentiveAbi,
|
|
143
143
|
le as prepareAllowListIncentivePayload,
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
m as prepareBoostPayload,
|
|
145
|
+
me as prepareCGDAIncentivePayload,
|
|
146
146
|
Ur as prepareClaimPayload,
|
|
147
147
|
kr as prepareERC1155Payload,
|
|
148
148
|
zr as prepareERC1155Transfer,
|
|
@@ -157,7 +157,7 @@ export {
|
|
|
157
157
|
Ge as prepareLimitedSignerValidatorClaimDataPayload,
|
|
158
158
|
We as prepareLimitedSignerValidatorInputParams,
|
|
159
159
|
ke as prepareLimitedSignerValidatorPayload,
|
|
160
|
-
|
|
160
|
+
K as prepareManagedBudgetPayload,
|
|
161
161
|
q as prepareManagedBudgetWithFeesPayload,
|
|
162
162
|
Le as preparePointsIncentivePayload,
|
|
163
163
|
Oe as prepareSignerValidatorClaimDataPayload,
|
|
@@ -165,14 +165,14 @@ export {
|
|
|
165
165
|
we as prepareSignerValidatorPayload,
|
|
166
166
|
M as prepareSimpleAllowListPayload,
|
|
167
167
|
U as prepareSimpleDenyListPayload,
|
|
168
|
-
|
|
168
|
+
Q as prepareTransfer,
|
|
169
169
|
Hr as prepareTransferPayload,
|
|
170
170
|
sa as rbacAbi,
|
|
171
171
|
ca as signerValidatorAbi,
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
ma as simpleAllowListAbi,
|
|
173
|
+
ga as simpleDenyListAbi,
|
|
174
174
|
x as transactionSenderClaimant,
|
|
175
175
|
D as unpackFieldIndexes,
|
|
176
|
-
|
|
176
|
+
$e as validatorFromAddress
|
|
177
177
|
};
|
|
178
178
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -94,8 +94,8 @@ export enum PrimitiveType {
|
|
|
94
94
|
ADDRESS = 1,
|
|
95
95
|
BYTES = 2,
|
|
96
96
|
STRING = 3,
|
|
97
|
-
// Note: TUPLE remains in the enum but is no longer handled directly by `validateFieldAgainstCriteria`.
|
|
98
97
|
TUPLE = 4,
|
|
98
|
+
INT = 5,
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/**
|
|
@@ -1068,6 +1068,10 @@ export class EventAction extends DeployableTarget<
|
|
|
1068
1068
|
PrimitiveType.UINT,
|
|
1069
1069
|
() => BigInt(fieldValue) !== BigInt(criteria.filterData),
|
|
1070
1070
|
)
|
|
1071
|
+
.with(
|
|
1072
|
+
PrimitiveType.INT,
|
|
1073
|
+
() => BigInt(fieldValue) !== BigInt(criteria.filterData),
|
|
1074
|
+
)
|
|
1071
1075
|
.with(
|
|
1072
1076
|
PrimitiveType.STRING,
|
|
1073
1077
|
() => fieldValue !== fromHex(criteria.filterData, 'string'),
|
|
@@ -1075,7 +1079,10 @@ export class EventAction extends DeployableTarget<
|
|
|
1075
1079
|
.otherwise(() => fieldValue !== criteria.filterData);
|
|
1076
1080
|
|
|
1077
1081
|
case FilterType.GREATER_THAN:
|
|
1078
|
-
if (
|
|
1082
|
+
if (
|
|
1083
|
+
fieldType === PrimitiveType.UINT ||
|
|
1084
|
+
fieldType === PrimitiveType.INT
|
|
1085
|
+
) {
|
|
1079
1086
|
return BigInt(fieldValue) > BigInt(criteria.filterData);
|
|
1080
1087
|
}
|
|
1081
1088
|
throw new InvalidNumericalCriteriaError({
|
|
@@ -1085,7 +1092,10 @@ export class EventAction extends DeployableTarget<
|
|
|
1085
1092
|
});
|
|
1086
1093
|
|
|
1087
1094
|
case FilterType.GREATER_THAN_OR_EQUAL:
|
|
1088
|
-
if (
|
|
1095
|
+
if (
|
|
1096
|
+
fieldType === PrimitiveType.UINT ||
|
|
1097
|
+
fieldType === PrimitiveType.INT
|
|
1098
|
+
) {
|
|
1089
1099
|
return BigInt(fieldValue) >= BigInt(criteria.filterData);
|
|
1090
1100
|
}
|
|
1091
1101
|
throw new InvalidNumericalCriteriaError({
|
|
@@ -1095,7 +1105,10 @@ export class EventAction extends DeployableTarget<
|
|
|
1095
1105
|
});
|
|
1096
1106
|
|
|
1097
1107
|
case FilterType.LESS_THAN:
|
|
1098
|
-
if (
|
|
1108
|
+
if (
|
|
1109
|
+
fieldType === PrimitiveType.UINT ||
|
|
1110
|
+
fieldType === PrimitiveType.INT
|
|
1111
|
+
) {
|
|
1099
1112
|
return BigInt(fieldValue) < BigInt(criteria.filterData);
|
|
1100
1113
|
}
|
|
1101
1114
|
throw new InvalidNumericalCriteriaError({
|
|
@@ -1105,7 +1118,10 @@ export class EventAction extends DeployableTarget<
|
|
|
1105
1118
|
});
|
|
1106
1119
|
|
|
1107
1120
|
case FilterType.LESS_THAN_OR_EQUAL:
|
|
1108
|
-
if (
|
|
1121
|
+
if (
|
|
1122
|
+
fieldType === PrimitiveType.UINT ||
|
|
1123
|
+
fieldType === PrimitiveType.INT
|
|
1124
|
+
) {
|
|
1109
1125
|
return BigInt(fieldValue) <= BigInt(criteria.filterData);
|
|
1110
1126
|
}
|
|
1111
1127
|
throw new InvalidNumericalCriteriaError({
|
|
@@ -1315,9 +1331,12 @@ function abiTypeToPrimitiveType(
|
|
|
1315
1331
|
): Exclude<PrimitiveType, PrimitiveType.TUPLE> {
|
|
1316
1332
|
const lower = abiType.toLowerCase();
|
|
1317
1333
|
|
|
1318
|
-
if (lower.startsWith('uint')
|
|
1334
|
+
if (lower.startsWith('uint')) {
|
|
1319
1335
|
return PrimitiveType.UINT;
|
|
1320
1336
|
}
|
|
1337
|
+
if (lower.startsWith('int')) {
|
|
1338
|
+
return PrimitiveType.INT;
|
|
1339
|
+
}
|
|
1321
1340
|
if (lower === 'address') {
|
|
1322
1341
|
return PrimitiveType.ADDRESS;
|
|
1323
1342
|
}
|
package/src/BoostCore.test.ts
CHANGED
|
@@ -765,8 +765,8 @@ describe("BoostCore", () => {
|
|
|
765
765
|
await new Promise((resolve) => {
|
|
766
766
|
setTimeout(resolve, 500);
|
|
767
767
|
});
|
|
768
|
-
|
|
769
|
-
expect(subscription).toHaveBeenCalledTimes(
|
|
768
|
+
// This should be called once for each event
|
|
769
|
+
expect(subscription).toHaveBeenCalledTimes(2);
|
|
770
770
|
});
|
|
771
771
|
|
|
772
772
|
test("can set a passthrough auth scheme", async () => {
|
|
@@ -953,3 +953,125 @@ describe("BoostCore", () => {
|
|
|
953
953
|
expect(feesInfo.asset.toLowerCase()).toBe(erc20.assertValidAddress());
|
|
954
954
|
});
|
|
955
955
|
});
|
|
956
|
+
|
|
957
|
+
describe("Top-Up Incentives", () => {
|
|
958
|
+
let incentive: ReturnType<typeof fixtures.core.ERC20Incentive>;
|
|
959
|
+
let boostId: bigint;
|
|
960
|
+
|
|
961
|
+
beforeAll(async () => {
|
|
962
|
+
const { core } = fixtures;
|
|
963
|
+
const { budget, erc20 } = budgets;
|
|
964
|
+
|
|
965
|
+
incentive = core.ERC20Incentive({
|
|
966
|
+
asset: erc20.assertValidAddress(),
|
|
967
|
+
strategy: StrategyType.POOL,
|
|
968
|
+
reward: parseEther("1"),
|
|
969
|
+
limit: 5n,
|
|
970
|
+
manager: budget.assertValidAddress(),
|
|
971
|
+
});
|
|
972
|
+
await erc20.mint(defaultOptions.account.address, parseEther("110"));
|
|
973
|
+
await erc20.approve(budget.assertValidAddress(), parseEther("110"));
|
|
974
|
+
await budget.allocate({
|
|
975
|
+
amount: parseEther("110"),
|
|
976
|
+
asset: erc20.assertValidAddress(),
|
|
977
|
+
target: defaultOptions.account.address,
|
|
978
|
+
});
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
const createdBoost = await core.createBoost({
|
|
982
|
+
protocolFee: 0n,
|
|
983
|
+
maxParticipants: 5n,
|
|
984
|
+
budget,
|
|
985
|
+
action: core.EventAction(
|
|
986
|
+
makeMockEventActionPayload(
|
|
987
|
+
core.assertValidAddress(),
|
|
988
|
+
erc20.assertValidAddress(),
|
|
989
|
+
),
|
|
990
|
+
),
|
|
991
|
+
validator: core.SignerValidator({
|
|
992
|
+
signers: [defaultOptions.account.address],
|
|
993
|
+
validatorCaller: defaultOptions.account.address,
|
|
994
|
+
}),
|
|
995
|
+
allowList: core.SimpleAllowList({
|
|
996
|
+
owner: defaultOptions.account.address,
|
|
997
|
+
allowed: [defaultOptions.account.address],
|
|
998
|
+
}),
|
|
999
|
+
incentives: [incentive],
|
|
1000
|
+
});
|
|
1001
|
+
boostId = createdBoost.id;
|
|
1002
|
+
});
|
|
1003
|
+
|
|
1004
|
+
test("can top up from a budget (pre-fee)", async () => {
|
|
1005
|
+
const { core } = fixtures;
|
|
1006
|
+
const { budget, erc20 } = budgets;
|
|
1007
|
+
|
|
1008
|
+
console.log("budget", budget.assertValidAddress());
|
|
1009
|
+
|
|
1010
|
+
const netTopup = parseEther("5");
|
|
1011
|
+
|
|
1012
|
+
await core.topupIncentiveFromBudgetPreFee(boostId, 0n, netTopup, budget.assertValidAddress());
|
|
1013
|
+
console.log("topup done");
|
|
1014
|
+
|
|
1015
|
+
expect(await incentive.limit()).toBe(5n + 5n); // original limit 5 + topup 5
|
|
1016
|
+
});
|
|
1017
|
+
|
|
1018
|
+
test("can top up from a budget (post-fee)", async () => {
|
|
1019
|
+
const { core } = fixtures;
|
|
1020
|
+
const { budget } = budgets;
|
|
1021
|
+
|
|
1022
|
+
const total = parseEther("5.5");
|
|
1023
|
+
await core.topupIncentiveFromBudgetPostFee(boostId, 0n, total, budget.assertValidAddress());
|
|
1024
|
+
|
|
1025
|
+
expect(await incentive.limit()).toBe(10n + 5n);
|
|
1026
|
+
});
|
|
1027
|
+
|
|
1028
|
+
test("pre-fee and post-fee top-ups lead to the same net top-up", async () => {
|
|
1029
|
+
const { core } = fixtures;
|
|
1030
|
+
const { budget } = budgets;
|
|
1031
|
+
|
|
1032
|
+
const net = parseEther("2");
|
|
1033
|
+
const netPlusFee = parseEther("2.2");
|
|
1034
|
+
|
|
1035
|
+
await core.topupIncentiveFromBudgetPreFee(boostId, 0n, net, budget.assertValidAddress());
|
|
1036
|
+
|
|
1037
|
+
await core.topupIncentiveFromBudgetPostFee(boostId, 0n, netPlusFee, budget.assertValidAddress());
|
|
1038
|
+
|
|
1039
|
+
expect(await incentive.limit()).toBe(15n + 4n);
|
|
1040
|
+
});
|
|
1041
|
+
|
|
1042
|
+
test("can top up from sender (pre-fee)", async () => {
|
|
1043
|
+
const { core } = fixtures;
|
|
1044
|
+
const { erc20 } = budgets;
|
|
1045
|
+
|
|
1046
|
+
const netTopup = parseEther("10");
|
|
1047
|
+
const netPlusFee = parseEther("11");
|
|
1048
|
+
await erc20.mint(defaultOptions.account.address, netPlusFee);
|
|
1049
|
+
await erc20.approve(core.assertValidAddress(), netPlusFee);
|
|
1050
|
+
|
|
1051
|
+
await core.topupIncentiveFromSenderPreFee(boostId, 0n, netTopup);
|
|
1052
|
+
|
|
1053
|
+
expect(await incentive.limit()).toBe(19n + 10n);
|
|
1054
|
+
});
|
|
1055
|
+
|
|
1056
|
+
test("can top up from sender (post-fee)", async () => {
|
|
1057
|
+
const { core } = fixtures;
|
|
1058
|
+
const { erc20 } = budgets;
|
|
1059
|
+
|
|
1060
|
+
const totalWithFee = parseEther("5.5");
|
|
1061
|
+
await erc20.mint(defaultOptions.account.address, totalWithFee);
|
|
1062
|
+
await erc20.approve(core.assertValidAddress(), totalWithFee);
|
|
1063
|
+
|
|
1064
|
+
await core.topupIncentiveFromSenderPostFee(boostId, 0n, totalWithFee);
|
|
1065
|
+
|
|
1066
|
+
expect(await incentive.limit()).toBe(29n + 5n);
|
|
1067
|
+
});
|
|
1068
|
+
|
|
1069
|
+
test("throws if net top-up is zero", async () => {
|
|
1070
|
+
const { core } = fixtures;
|
|
1071
|
+
const { budget } = budgets;
|
|
1072
|
+
|
|
1073
|
+
await expect(async () => {
|
|
1074
|
+
await core.topupIncentiveFromBudgetPreFee(boostId, 0n, 0n, budget.assertValidAddress());
|
|
1075
|
+
}).rejects.toThrowError();
|
|
1076
|
+
});
|
|
1077
|
+
});
|