aiia-vault-sdk 1.1.8 → 1.1.10
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/SeedRoundFundraiser.d.ts +0 -8
- package/dist/SeedRoundFundraiser.js +1 -1
- package/dist/TradingVault.d.ts +4 -5
- package/dist/TradingVault.js +1 -1
- package/dist/abis/SeedRoundFundraiser.json +2 -2
- package/dist/abis/TradingVault.json +38 -30
- package/dist/contracts/TradingVault.d.ts +36 -30
- package/dist/contracts.json +4 -2
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +1 -1
- package/dist/utils.test.d.ts +1 -0
- package/dist/utils.test.js +1 -0
- package/package.json +1 -1
@@ -11,21 +11,20 @@ export declare namespace TradingVault {
|
|
11
11
|
};
|
12
12
|
}
|
13
13
|
export interface TradingVaultInterface extends Interface {
|
14
|
-
getFunction(nameOrSignature: "BASE_WEIGHT" | "DEFAULT_ADMIN_ROLE" | "EXPO" | "
|
14
|
+
getFunction(nameOrSignature: "BASE_WEIGHT" | "DEFAULT_ADMIN_ROLE" | "EXPO" | "OPERATOR_ROLE" | "PERCENTAGE_BASE" | "PRICE_SETTER_ROLE" | "addReward" | "approve" | "balanceOf" | "borrowCurrency" | "claimERC20" | "createPosition" | "currency" | "getApproved" | "getRewardConfigsLength" | "getRoleAdmin" | "grantOperatorRole" | "grantPriceSetterRole" | "grantRole" | "hasRole" | "initialize" | "isApprovedForAll" | "isReduceEnabled" | "name" | "owner" | "ownerOf" | "positions" | "price" | "reducePosition" | "reducePositions" | "renounceOwnership" | "renounceRole" | "repayCurrency" | "revokeRole" | "rewardConfigs" | "rewardToken" | "safeTransferFrom(address,address,uint256)" | "safeTransferFrom(address,address,uint256,bytes)" | "setApprovalForAll" | "setCurrency" | "setPrice" | "setReduceEnabled" | "setRewardToken" | "setTreasury" | "supportsInterface" | "symbol" | "tokenURI" | "totalAmount" | "totalBorrowed" | "totalRewardsAdded" | "totalRewardsHarvested" | "transferFrom" | "transferOwnership" | "treasury" | "updateRewardConfigs"): FunctionFragment;
|
15
15
|
getEvent(nameOrSignatureOrTopic: "Approval" | "ApprovalForAll" | "CurrencyBorrowed" | "CurrencyRepaid" | "CurrencyUpdated" | "Initialized" | "OwnershipTransferred" | "PositionCreated" | "PositionReduced" | "PriceUpdated" | "ReduceEnabledUpdated" | "RewardConfigsUpdated" | "RewardTokenUpdated" | "RoleAdminChanged" | "RoleGranted" | "RoleRevoked" | "TotalAmountUpdated" | "TotalRewardsHarvestedUpdated" | "TotalRewardsUpdated" | "Transfer" | "TreasuryUpdated"): EventFragment;
|
16
16
|
encodeFunctionData(functionFragment: "BASE_WEIGHT", values?: undefined): string;
|
17
17
|
encodeFunctionData(functionFragment: "DEFAULT_ADMIN_ROLE", values?: undefined): string;
|
18
18
|
encodeFunctionData(functionFragment: "EXPO", values?: undefined): string;
|
19
|
-
encodeFunctionData(functionFragment: "EXPO_100", values?: undefined): string;
|
20
19
|
encodeFunctionData(functionFragment: "OPERATOR_ROLE", values?: undefined): string;
|
20
|
+
encodeFunctionData(functionFragment: "PERCENTAGE_BASE", values?: undefined): string;
|
21
21
|
encodeFunctionData(functionFragment: "PRICE_SETTER_ROLE", values?: undefined): string;
|
22
22
|
encodeFunctionData(functionFragment: "addReward", values: [BigNumberish]): string;
|
23
23
|
encodeFunctionData(functionFragment: "approve", values: [AddressLike, BigNumberish]): string;
|
24
24
|
encodeFunctionData(functionFragment: "balanceOf", values: [AddressLike]): string;
|
25
25
|
encodeFunctionData(functionFragment: "borrowCurrency", values: [BigNumberish]): string;
|
26
26
|
encodeFunctionData(functionFragment: "claimERC20", values: [AddressLike, BigNumberish]): string;
|
27
|
-
encodeFunctionData(functionFragment: "createPosition", values: [BigNumberish]): string;
|
28
|
-
encodeFunctionData(functionFragment: "createPositionForUser", values: [AddressLike, BigNumberish]): string;
|
27
|
+
encodeFunctionData(functionFragment: "createPosition", values: [BigNumberish, AddressLike]): string;
|
29
28
|
encodeFunctionData(functionFragment: "currency", values?: undefined): string;
|
30
29
|
encodeFunctionData(functionFragment: "getApproved", values: [BigNumberish]): string;
|
31
30
|
encodeFunctionData(functionFragment: "getRewardConfigsLength", values?: undefined): string;
|
@@ -34,7 +33,7 @@ export interface TradingVaultInterface extends Interface {
|
|
34
33
|
encodeFunctionData(functionFragment: "grantPriceSetterRole", values: [AddressLike]): string;
|
35
34
|
encodeFunctionData(functionFragment: "grantRole", values: [BytesLike, AddressLike]): string;
|
36
35
|
encodeFunctionData(functionFragment: "hasRole", values: [BytesLike, AddressLike]): string;
|
37
|
-
encodeFunctionData(functionFragment: "initialize", values: [AddressLike, AddressLike]): string;
|
36
|
+
encodeFunctionData(functionFragment: "initialize", values: [AddressLike, AddressLike, AddressLike, AddressLike]): string;
|
38
37
|
encodeFunctionData(functionFragment: "isApprovedForAll", values: [AddressLike, AddressLike]): string;
|
39
38
|
encodeFunctionData(functionFragment: "isReduceEnabled", values?: undefined): string;
|
40
39
|
encodeFunctionData(functionFragment: "name", values?: undefined): string;
|
@@ -72,8 +71,8 @@ export interface TradingVaultInterface extends Interface {
|
|
72
71
|
decodeFunctionResult(functionFragment: "BASE_WEIGHT", data: BytesLike): Result;
|
73
72
|
decodeFunctionResult(functionFragment: "DEFAULT_ADMIN_ROLE", data: BytesLike): Result;
|
74
73
|
decodeFunctionResult(functionFragment: "EXPO", data: BytesLike): Result;
|
75
|
-
decodeFunctionResult(functionFragment: "EXPO_100", data: BytesLike): Result;
|
76
74
|
decodeFunctionResult(functionFragment: "OPERATOR_ROLE", data: BytesLike): Result;
|
75
|
+
decodeFunctionResult(functionFragment: "PERCENTAGE_BASE", data: BytesLike): Result;
|
77
76
|
decodeFunctionResult(functionFragment: "PRICE_SETTER_ROLE", data: BytesLike): Result;
|
78
77
|
decodeFunctionResult(functionFragment: "addReward", data: BytesLike): Result;
|
79
78
|
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
|
@@ -81,7 +80,6 @@ export interface TradingVaultInterface extends Interface {
|
|
81
80
|
decodeFunctionResult(functionFragment: "borrowCurrency", data: BytesLike): Result;
|
82
81
|
decodeFunctionResult(functionFragment: "claimERC20", data: BytesLike): Result;
|
83
82
|
decodeFunctionResult(functionFragment: "createPosition", data: BytesLike): Result;
|
84
|
-
decodeFunctionResult(functionFragment: "createPositionForUser", data: BytesLike): Result;
|
85
83
|
decodeFunctionResult(functionFragment: "currency", data: BytesLike): Result;
|
86
84
|
decodeFunctionResult(functionFragment: "getApproved", data: BytesLike): Result;
|
87
85
|
decodeFunctionResult(functionFragment: "getRewardConfigsLength", data: BytesLike): Result;
|
@@ -229,14 +227,16 @@ export declare namespace PositionCreatedEvent {
|
|
229
227
|
tokenId: BigNumberish,
|
230
228
|
entryPrice: BigNumberish,
|
231
229
|
amount: BigNumberish,
|
232
|
-
openedAt: BigNumberish
|
230
|
+
openedAt: BigNumberish,
|
231
|
+
currency: AddressLike
|
233
232
|
];
|
234
233
|
type OutputTuple = [
|
235
234
|
user: string,
|
236
235
|
tokenId: bigint,
|
237
236
|
entryPrice: bigint,
|
238
237
|
amount: bigint,
|
239
|
-
openedAt: bigint
|
238
|
+
openedAt: bigint,
|
239
|
+
currency: string
|
240
240
|
];
|
241
241
|
interface OutputObject {
|
242
242
|
user: string;
|
@@ -244,6 +244,7 @@ export declare namespace PositionCreatedEvent {
|
|
244
244
|
entryPrice: bigint;
|
245
245
|
amount: bigint;
|
246
246
|
openedAt: bigint;
|
247
|
+
currency: string;
|
247
248
|
}
|
248
249
|
type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
|
249
250
|
type Filter = TypedDeferredTopicFilter<Event>;
|
@@ -263,7 +264,8 @@ export declare namespace PositionReducedEvent {
|
|
263
264
|
lossAmount: BigNumberish,
|
264
265
|
price: BigNumberish,
|
265
266
|
rewardedAmount: BigNumberish,
|
266
|
-
loss: BigNumberish
|
267
|
+
loss: BigNumberish,
|
268
|
+
currency: AddressLike
|
267
269
|
];
|
268
270
|
type OutputTuple = [
|
269
271
|
user: string,
|
@@ -277,7 +279,8 @@ export declare namespace PositionReducedEvent {
|
|
277
279
|
lossAmount: bigint,
|
278
280
|
price: bigint,
|
279
281
|
rewardedAmount: bigint,
|
280
|
-
loss: bigint
|
282
|
+
loss: bigint,
|
283
|
+
currency: string
|
281
284
|
];
|
282
285
|
interface OutputObject {
|
283
286
|
user: string;
|
@@ -292,6 +295,7 @@ export declare namespace PositionReducedEvent {
|
|
292
295
|
price: bigint;
|
293
296
|
rewardedAmount: bigint;
|
294
297
|
loss: bigint;
|
298
|
+
currency: string;
|
295
299
|
}
|
296
300
|
type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
|
297
301
|
type Filter = TypedDeferredTopicFilter<Event>;
|
@@ -490,8 +494,8 @@ export interface TradingVault extends BaseContract {
|
|
490
494
|
BASE_WEIGHT: TypedContractMethod<[], [bigint], "view">;
|
491
495
|
DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">;
|
492
496
|
EXPO: TypedContractMethod<[], [bigint], "view">;
|
493
|
-
EXPO_100: TypedContractMethod<[], [bigint], "view">;
|
494
497
|
OPERATOR_ROLE: TypedContractMethod<[], [string], "view">;
|
498
|
+
PERCENTAGE_BASE: TypedContractMethod<[], [bigint], "view">;
|
495
499
|
PRICE_SETTER_ROLE: TypedContractMethod<[], [string], "view">;
|
496
500
|
addReward: TypedContractMethod<[
|
497
501
|
_rewardAmount: BigNumberish
|
@@ -517,13 +521,8 @@ export interface TradingVault extends BaseContract {
|
|
517
521
|
void
|
518
522
|
], "nonpayable">;
|
519
523
|
createPosition: TypedContractMethod<[
|
520
|
-
_amount: BigNumberish
|
521
|
-
|
522
|
-
bigint
|
523
|
-
], "nonpayable">;
|
524
|
-
createPositionForUser: TypedContractMethod<[
|
525
|
-
_user: AddressLike,
|
526
|
-
_amount: BigNumberish
|
524
|
+
_amount: BigNumberish,
|
525
|
+
_recipient: AddressLike
|
527
526
|
], [
|
528
527
|
bigint
|
529
528
|
], "nonpayable">;
|
@@ -555,7 +554,9 @@ export interface TradingVault extends BaseContract {
|
|
555
554
|
], "view">;
|
556
555
|
initialize: TypedContractMethod<[
|
557
556
|
_currency: AddressLike,
|
558
|
-
_rewardToken: AddressLike
|
557
|
+
_rewardToken: AddressLike,
|
558
|
+
_treasury: AddressLike,
|
559
|
+
_owner: AddressLike
|
559
560
|
], [
|
560
561
|
void
|
561
562
|
], "nonpayable">;
|
@@ -580,7 +581,8 @@ export interface TradingVault extends BaseContract {
|
|
580
581
|
bigint,
|
581
582
|
bigint,
|
582
583
|
bigint,
|
583
|
-
bigint
|
584
|
+
bigint,
|
585
|
+
string
|
584
586
|
] & {
|
585
587
|
entryPrice: bigint;
|
586
588
|
outPrice: bigint;
|
@@ -590,6 +592,7 @@ export interface TradingVault extends BaseContract {
|
|
590
592
|
closedAt: bigint;
|
591
593
|
rewardedAmount: bigint;
|
592
594
|
lossAmount: bigint;
|
595
|
+
token: string;
|
593
596
|
}
|
594
597
|
], "view">;
|
595
598
|
price: TypedContractMethod<[], [bigint], "view">;
|
@@ -711,8 +714,8 @@ export interface TradingVault extends BaseContract {
|
|
711
714
|
getFunction(nameOrSignature: "BASE_WEIGHT"): TypedContractMethod<[], [bigint], "view">;
|
712
715
|
getFunction(nameOrSignature: "DEFAULT_ADMIN_ROLE"): TypedContractMethod<[], [string], "view">;
|
713
716
|
getFunction(nameOrSignature: "EXPO"): TypedContractMethod<[], [bigint], "view">;
|
714
|
-
getFunction(nameOrSignature: "EXPO_100"): TypedContractMethod<[], [bigint], "view">;
|
715
717
|
getFunction(nameOrSignature: "OPERATOR_ROLE"): TypedContractMethod<[], [string], "view">;
|
718
|
+
getFunction(nameOrSignature: "PERCENTAGE_BASE"): TypedContractMethod<[], [bigint], "view">;
|
716
719
|
getFunction(nameOrSignature: "PRICE_SETTER_ROLE"): TypedContractMethod<[], [string], "view">;
|
717
720
|
getFunction(nameOrSignature: "addReward"): TypedContractMethod<[_rewardAmount: BigNumberish], [void], "nonpayable">;
|
718
721
|
getFunction(nameOrSignature: "approve"): TypedContractMethod<[
|
@@ -729,10 +732,9 @@ export interface TradingVault extends BaseContract {
|
|
729
732
|
], [
|
730
733
|
void
|
731
734
|
], "nonpayable">;
|
732
|
-
getFunction(nameOrSignature: "createPosition"): TypedContractMethod<[
|
733
|
-
|
734
|
-
|
735
|
-
_amount: BigNumberish
|
735
|
+
getFunction(nameOrSignature: "createPosition"): TypedContractMethod<[
|
736
|
+
_amount: BigNumberish,
|
737
|
+
_recipient: AddressLike
|
736
738
|
], [
|
737
739
|
bigint
|
738
740
|
], "nonpayable">;
|
@@ -756,7 +758,9 @@ export interface TradingVault extends BaseContract {
|
|
756
758
|
], "view">;
|
757
759
|
getFunction(nameOrSignature: "initialize"): TypedContractMethod<[
|
758
760
|
_currency: AddressLike,
|
759
|
-
_rewardToken: AddressLike
|
761
|
+
_rewardToken: AddressLike,
|
762
|
+
_treasury: AddressLike,
|
763
|
+
_owner: AddressLike
|
760
764
|
], [
|
761
765
|
void
|
762
766
|
], "nonpayable">;
|
@@ -781,7 +785,8 @@ export interface TradingVault extends BaseContract {
|
|
781
785
|
bigint,
|
782
786
|
bigint,
|
783
787
|
bigint,
|
784
|
-
bigint
|
788
|
+
bigint,
|
789
|
+
string
|
785
790
|
] & {
|
786
791
|
entryPrice: bigint;
|
787
792
|
outPrice: bigint;
|
@@ -791,6 +796,7 @@ export interface TradingVault extends BaseContract {
|
|
791
796
|
closedAt: bigint;
|
792
797
|
rewardedAmount: bigint;
|
793
798
|
lossAmount: bigint;
|
799
|
+
token: string;
|
794
800
|
}
|
795
801
|
], "view">;
|
796
802
|
getFunction(nameOrSignature: "price"): TypedContractMethod<[], [bigint], "view">;
|
@@ -912,9 +918,9 @@ export interface TradingVault extends BaseContract {
|
|
912
918
|
Initialized: TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
|
913
919
|
"OwnershipTransferred(address,address)": TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
|
914
920
|
OwnershipTransferred: TypedContractEvent<OwnershipTransferredEvent.InputTuple, OwnershipTransferredEvent.OutputTuple, OwnershipTransferredEvent.OutputObject>;
|
915
|
-
"PositionCreated(address,uint256,uint256,uint256,uint256)": TypedContractEvent<PositionCreatedEvent.InputTuple, PositionCreatedEvent.OutputTuple, PositionCreatedEvent.OutputObject>;
|
921
|
+
"PositionCreated(address,uint256,uint256,uint256,uint256,address)": TypedContractEvent<PositionCreatedEvent.InputTuple, PositionCreatedEvent.OutputTuple, PositionCreatedEvent.OutputObject>;
|
916
922
|
PositionCreated: TypedContractEvent<PositionCreatedEvent.InputTuple, PositionCreatedEvent.OutputTuple, PositionCreatedEvent.OutputObject>;
|
917
|
-
"PositionReduced(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)": TypedContractEvent<PositionReducedEvent.InputTuple, PositionReducedEvent.OutputTuple, PositionReducedEvent.OutputObject>;
|
923
|
+
"PositionReduced(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)": TypedContractEvent<PositionReducedEvent.InputTuple, PositionReducedEvent.OutputTuple, PositionReducedEvent.OutputObject>;
|
918
924
|
PositionReduced: TypedContractEvent<PositionReducedEvent.InputTuple, PositionReducedEvent.OutputTuple, PositionReducedEvent.OutputObject>;
|
919
925
|
"PriceUpdated(uint256,uint256,uint256)": TypedContractEvent<PriceUpdatedEvent.InputTuple, PriceUpdatedEvent.OutputTuple, PriceUpdatedEvent.OutputObject>;
|
920
926
|
PriceUpdated: TypedContractEvent<PriceUpdatedEvent.InputTuple, PriceUpdatedEvent.OutputTuple, PriceUpdatedEvent.OutputObject>;
|
package/dist/contracts.json
CHANGED
@@ -21,8 +21,10 @@
|
|
21
21
|
"Currency": "0xDB2e50234a3BE8aA4200C96712F190cf712cd8ec",
|
22
22
|
"Reward": "0xa5Ef2328aa2F6F231D15cdcF48503974D0938eD4",
|
23
23
|
"SeedRoundFundraiser": "0xbd520dbcb8e0b062D10d7879D27C20d214a262F6",
|
24
|
-
"SeedRoundFundraiser-implemented": "
|
24
|
+
"SeedRoundFundraiser-implemented": "0x06324cBa213fEaed28Dd3A0d7B32f17885f839D2",
|
25
25
|
"WETH": "0x08a2d38807B1D345b6c1642f8030a29DC2Cc7223",
|
26
|
-
"SeedRoundFundraiser-implemented-old": "
|
26
|
+
"SeedRoundFundraiser-implemented-old": "0x40f56F138439fD5bB10741f5527A9DA05461636E",
|
27
|
+
"TradingVault": "0xeCB23467123c1CA6F9D97Ae5B2faCF9eCb1F6464",
|
28
|
+
"TradingVault-implemented": "0xEe8D777729B5D8239FF18E77B04cf47a73FfE516"
|
27
29
|
}
|
28
30
|
}
|
package/dist/utils.d.ts
CHANGED
@@ -93,3 +93,9 @@ export declare const signAndSendTransaction: (tx: ethers.ContractTransaction, wa
|
|
93
93
|
attempts: number;
|
94
94
|
};
|
95
95
|
}>;
|
96
|
+
/**
|
97
|
+
* Extract network name from RPC URL
|
98
|
+
* @param rpcUrl The RPC URL to parse
|
99
|
+
* @returns Standardized network name
|
100
|
+
*/
|
101
|
+
export declare const getNetworkFromRpc: (rpcUrl: string) => string;
|
package/dist/utils.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.signAndSendTransaction=exports.streamEvents=exports.getAllEvents=exports.resolveContractAddress=exports.getRewardWeight=exports.buildApproveERC20Tx=exports.getTokenAllowance=exports.getTokenSymbol=exports.getTokenDecimals=exports.getTransactionStatus=exports.checkRpcHealth=exports.getRandomProvider=exports.sleep=exports.LOG_PREFIXES=void 0;const e=require("ethers");exports.LOG_PREFIXES={INFO:"[36m[STREAM-INFO][0m",BLOCK:"[33m[STREAM-BLOCK][0m",EVENT:"[32m[STREAM-EVENT][0m",ERROR:"[31m[STREAM-ERROR][0m",SAVE:"[35m[STREAM-SAVE][0m",DEBUG:"[34m[STREAM-DEBUG][0m"};exports.sleep=async e=>new Promise((t=>setTimeout(t,e)));exports.getRandomProvider=e=>e[Math.floor(Math.random()*e.length)];exports.checkRpcHealth=async(e,t=0)=>{try{const t=new Promise(((e,t)=>{setTimeout((()=>t(new Error("RPC request timeout"))),5e3)}));return await Promise.race([e.getBlockNumber(),t]),!0}catch(e){return console.error(`${exports.LOG_PREFIXES.ERROR} RPC health check failed:`,e,t),!1}};exports.getTransactionStatus=async(e,t,
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getNetworkFromRpc=exports.signAndSendTransaction=exports.streamEvents=exports.getAllEvents=exports.resolveContractAddress=exports.getRewardWeight=exports.buildApproveERC20Tx=exports.getTokenAllowance=exports.getTokenSymbol=exports.getTokenDecimals=exports.getTransactionStatus=exports.checkRpcHealth=exports.getRandomProvider=exports.sleep=exports.LOG_PREFIXES=void 0;const e=require("ethers");exports.LOG_PREFIXES={INFO:"[36m[STREAM-INFO][0m",BLOCK:"[33m[STREAM-BLOCK][0m",EVENT:"[32m[STREAM-EVENT][0m",ERROR:"[31m[STREAM-ERROR][0m",SAVE:"[35m[STREAM-SAVE][0m",DEBUG:"[34m[STREAM-DEBUG][0m"};exports.sleep=async e=>new Promise((t=>setTimeout(t,e)));exports.getRandomProvider=e=>e[Math.floor(Math.random()*e.length)];exports.checkRpcHealth=async(e,t=0)=>{try{const t=new Promise(((e,t)=>{setTimeout((()=>t(new Error("RPC request timeout"))),5e3)}));return await Promise.race([e.getBlockNumber(),t]),!0}catch(e){return console.error(`${exports.LOG_PREFIXES.ERROR} RPC health check failed:`,e,t),!1}};exports.getTransactionStatus=async(e,t,o=10)=>{let r=0,s=1e3;for(;r<o;)try{const a=await e.getTransactionReceipt(t);if(!a){if(r++,r===o)return{hash:t,status:null,confirmations:0,isCompleted:!1,attempts:r};await(0,exports.sleep)(s),s*=2;continue}const n=Number(await a.confirmations()||0);return{hash:a.hash,status:1===a.status,confirmations:n,isCompleted:!0,attempts:r+1}}catch(e){throw new Error(`Failed to get transaction status: ${e.message}`)}throw new Error("Failed to get transaction status after maximum retries")};exports.getTokenDecimals=async(t,o)=>{const r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],o);return Number(await r.decimals())};exports.getTokenSymbol=async(t,o)=>{const r=new e.ethers.Contract(t,["function symbol() view returns (string)"],o);return await r.symbol()};exports.getTokenAllowance=async(t,o,r,s)=>{if(t===e.ethers.ZeroAddress||t.toLowerCase()===e.ethers.ZeroAddress)return BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const a=new e.ethers.Contract(t,["function allowance(address owner, address spender) view returns (uint256)"],s);return await a.allowance(o,r)};exports.buildApproveERC20Tx=async(t,o,r,s)=>{const a=new e.ethers.Contract(t,["function approve(address spender, uint256 amount) returns (bool)"],s);return await a.approve.populateTransaction(o,r)};exports.getRewardWeight=(e,t)=>{let o=0;const r=[...t].sort(((e,t)=>e.duration-t.duration));for(const t of r)e>=t.duration&&(o=t.weight);return o};exports.resolveContractAddress=(e,t,o,r)=>{if(r)return r;const s=(0,exports.getNetworkFromRpc)(e);return o?.[s]?.[t]};exports.getAllEvents=async(e,t,o,r,s)=>{const a=[];e.interface.forEachEvent((e=>{a.push(e.name)}));const n=a.map((async t=>{const a=o(),n=a.filters[t]();return(await a.queryFilter(n,r,s)).map((o=>{const r=e.interface.parseLog({topics:o.topics,data:o.data});return{eventName:t,blockNumber:o.blockNumber,transactionHash:o.transactionHash,args:r?.args.toObject(),timestamp:null}}))})),i=(await Promise.all(n)).flat();i.sort(((e,t)=>e.blockNumber-t.blockNumber));const c=[...new Set(i.map((e=>e.blockNumber)))].map((e=>t().getBlock(e))),l=await Promise.all(c),m=new Map(l.map((e=>[e.number,e.timestamp])));return i.map((e=>({eventName:e.eventName,blockNumber:e.blockNumber,transactionHash:e.transactionHash,args:Object.fromEntries(Object.entries(e.args||{}).filter((([e])=>isNaN(Number(e))))),timestamp:m.get(e.blockNumber)??null})))};exports.streamEvents=async({getProvider:e,getAllEvents:t,formatEvent:o,onEvent:r,saveLatestBlock:s,fromBlock:a,batchSize:n=1e3,sleepTime:i=5e3})=>{const c="1"===process.env.DEBUG_STREAM_EVENTS;let l=a;for(c&&(console.log(`${exports.LOG_PREFIXES.INFO} StreamEvents Debug Mode Enabled`),console.log(`${exports.LOG_PREFIXES.INFO} Initial fromBlock: ${l}`),console.log(`${exports.LOG_PREFIXES.INFO} Batch size: ${n}`),console.log(`${exports.LOG_PREFIXES.INFO} Sleep time: ${i}ms`));;)try{const a=await e().getBlockNumber();c&&console.log(`${exports.LOG_PREFIXES.BLOCK} Latest block: ${a}`);const m=Math.min(l+n,a);if(c&&console.log(`${exports.LOG_PREFIXES.BLOCK} Processing blocks from ${l} to ${m}`),l>=a){c&&console.log(`${exports.LOG_PREFIXES.DEBUG} Caught up to latest block, waiting ${i}ms...`),await(0,exports.sleep)(i);continue}const p=await t(l,m);if(c&&p.length>0){const e=p.reduce(((e,t)=>{const o=t.eventName||"Unknown";return e[o]=(e[o]||0)+1,e}),{});console.log(`${exports.LOG_PREFIXES.EVENT} Found ${p.length} events:`),Object.entries(e).forEach((([e,t])=>{console.log(`${exports.LOG_PREFIXES.EVENT} - ${e}: ${t}`)}))}for(const e of p)c&&console.log(`${exports.LOG_PREFIXES.EVENT} Processing: ${e.eventName||"Event"}`),await r(o(e));await s(m),c&&console.log(`${exports.LOG_PREFIXES.SAVE} Saved latest block: ${m}`),l=m+1}catch(e){c?(console.error(`${exports.LOG_PREFIXES.ERROR} Error in streamEvents:`,e),console.error(`${exports.LOG_PREFIXES.ERROR} Stack trace:`,e instanceof Error?e.stack:"")):console.error(`${exports.LOG_PREFIXES.ERROR} Error in streamEvents:`,e),await(0,exports.sleep)(1e3)}};exports.signAndSendTransaction=async(e,t,o,{onSubmit:r,onFinally:s,onError:a}={},n)=>{try{const a={...e};let n;if("object"==typeof t&&null!==t&&"sendTransaction"in t){const e=t.connect(o());n=(await e.sendTransaction(a)).hash}else n=await t(a);r&&await r(n);const i=await(0,exports.getTransactionStatus)(o(),n);if(null===i.status)throw new Error("Transaction may not be minted on-chain yet or has failed. Please check the blockchain explorer.");if(!1===i.status)throw new Error("Transaction failed. Please check the blockchain explorer for details.");return s&&await s({...i,txHash:n}),{transaction:{hash:n},status:i}}catch(e){if(n&&e)try{if("CALL_EXCEPTION"===e.code&&e.data){const t=e.data;for(const o of Object.values(n.interface.fragments).filter((e=>"error"===e.type)))if("name"in o){const r=n.interface.getError(o.name);if(r&&r.selector){if(r.selector===t){const t=o.name,r=e.errorArgs||[],s=new Error(`Transaction failed with custom error: ${t}(${r.join(", ")})`);throw Object.assign(s,e),a&&await a(s),s}}}console.log(`${exports.LOG_PREFIXES.DEBUG} Unknown custom error with selector: ${t}`)}}catch(e){console.error(`${exports.LOG_PREFIXES.ERROR} Error decoding transaction error:`,e)}throw a&&await a(e instanceof Error?e:new Error(String(e))),e}};exports.getNetworkFromRpc=e=>{const t=e.toLowerCase();let o=t;try{if(t.includes("://")){o=new URL(t).hostname}else t.includes("@")&&(o=t.split("@")[1].split("/")[0])}catch(e){console.warn(`${exports.LOG_PREFIXES.ERROR} Failed to parse RPC URL: ${t}`)}const r=[[/sepolia\.base|base-sepolia/,"base-sepolia"],[/goerli\.base|base-goerli/,"base-goerli"],[/base-mainnet/,"base"],[/polygon-mumbai|mumbai\.polygon/,"polygon-mumbai"],[/polygon-amoy|amoy\.polygon/,"polygon-amoy"],[/polygon-zkevm|zkevm|zkevm[-.]polygon/,"polygon-zkevm"],[/arbitrum.*sepolia|sepolia.*arbitrum/,"arbitrum-sepolia"],[/arbitrum.*goerli|goerli.*arbitrum/,"arbitrum-goerli"],[/arbitrum-nova|nova[-.]arbitrum/,"arbitrum-nova"],[/optimism-sepolia|sepolia[-.]optimism/,"optimism-sepolia"],[/optimism-goerli|goerli[-.]optimism/,"optimism-goerli"],[/avalanche-fuji|fuji[-.]avalanche|avax-test/,"avalanche-fuji"],[/bsc-testnet|testnet[-.]bsc|data-seed-prebsc/,"bsc-testnet"],[/base(?![-.]sepolia|[-.]goerli)/,"base"],[/polygon(?![-.]mumbai|[-.]amoy)/,"polygon"],[/arbitrum(?![-.]nova)/,"arbitrum"],[/optimism(?![-.]sepolia|[-.]goerli)/,"optimism"],[/avalanche|avax(?![-.]test|[-.]fuji)/,"avalanche"],[/bsc|binance(?![-.]testnet)/,"bsc"],[/eth-sepolia|sepolia(?![-.]base|[-.]arbitrum|[-.]optimism)/,"sepolia"],[/eth-goerli|goerli(?![-.]base|[-.]arbitrum|[-.]optimism)/,"goerli"],[/eth-mainnet|ethereum|eth\.rpc/,"ethereum"],[/mainnet/,"ethereum"]];for(const[e,o]of r)if(e.test(t))return o;for(const[e,t]of r)if(e.test(o))return t;throw new Error("Failed to get network from RPC URL")};
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("chai"),t=require("./utils");describe("getNetworkFromRpc",(function(){const o=console.warn;before((function(){console.warn=function(){}})),after((function(){console.warn=o})),it("should correctly identify the network from the provided inputs",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://sepolia.base.org")).to.equal("base-sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("https://eth-mainnet.g.alchemy.com/v2/api-key")).to.equal("ethereum")})),describe("Base networks",(function(){it("should identify Base Sepolia network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://base-sepolia.example.com")).to.equal("base-sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("wss://base-sepolia.infura.io")).to.equal("base-sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("https://sepolia.base.org")).to.equal("base-sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("https://blue-smart-energy.base-sepolia.quiknode.pro/f1b6c1400045b2f7ee93224247607cbd81e54c10")).to.equal("base-sepolia")})),it("should identify Base Goerli network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://base-goerli.example.com")).to.equal("base-goerli"),(0,e.expect)((0,t.getNetworkFromRpc)("wss://base-goerli.infura.io")).to.equal("base-goerli"),(0,e.expect)((0,t.getNetworkFromRpc)("https://goerli.base.org")).to.equal("base-goerli")})),it("should identify Base Mainnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://base-mainnet.example.com")).to.equal("base"),(0,e.expect)((0,t.getNetworkFromRpc)("https://base.infura.io")).to.equal("base"),(0,e.expect)((0,t.getNetworkFromRpc)("wss://base.g.alchemy.com")).to.equal("base"),(0,e.expect)((0,t.getNetworkFromRpc)("https://radial-cold-vineyard.base-mainnet.quiknode.pro/29590a4143d60614a7cd0a9f3b5e39179430373e")).to.equal("base")}))})),describe("Ethereum networks",(function(){it("should identify Ethereum Sepolia network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://eth-sepolia.g.alchemy.com")).to.equal("sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("https://sepolia.infura.io")).to.equal("sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("wss://sepolia.example.com")).to.equal("sepolia")})),it("should identify Ethereum Goerli network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://eth-goerli.g.alchemy.com")).to.equal("goerli"),(0,e.expect)((0,t.getNetworkFromRpc)("https://goerli.infura.io")).to.equal("goerli"),(0,e.expect)((0,t.getNetworkFromRpc)("wss://goerli.example.com")).to.equal("goerli")})),it("should identify Ethereum Mainnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://eth-mainnet.g.alchemy.com")).to.equal("ethereum"),(0,e.expect)((0,t.getNetworkFromRpc)("https://mainnet.infura.io")).to.equal("ethereum"),(0,e.expect)((0,t.getNetworkFromRpc)("wss://ethereum.example.com")).to.equal("ethereum"),(0,e.expect)((0,t.getNetworkFromRpc)("https://eth.rpc.blxrbdn.com")).to.equal("ethereum")}))})),describe("Polygon networks",(function(){it("should identify Polygon Mumbai network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://polygon-mumbai.g.alchemy.com")).to.equal("polygon-mumbai"),(0,e.expect)((0,t.getNetworkFromRpc)("https://rpc-mumbai.polygon.technology")).to.equal("polygon-mumbai")})),it("should identify Polygon Amoy network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://polygon-amoy.g.alchemy.com")).to.equal("polygon-amoy"),(0,e.expect)((0,t.getNetworkFromRpc)("https://rpc-amoy.polygon.technology")).to.equal("polygon-amoy")})),it("should identify Polygon zkEVM network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://polygon-zkevm.example.com")).to.equal("polygon-zkevm"),(0,e.expect)((0,t.getNetworkFromRpc)("https://zkevm-rpc.polygon.technology")).to.equal("polygon-zkevm")})),it("should identify Polygon Mainnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://polygon-rpc.com")).to.equal("polygon"),(0,e.expect)((0,t.getNetworkFromRpc)("https://rpc.polygon.technology")).to.equal("polygon")}))})),describe("Arbitrum networks",(function(){it("should identify Arbitrum Sepolia network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://arbitrum-sepolia.infura.io")).to.equal("arbitrum-sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("https://sepolia-rollup.arbitrum.io/rpc")).to.equal("arbitrum-sepolia")})),it("should identify Arbitrum Goerli network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://arbitrum-goerli.infura.io")).to.equal("arbitrum-goerli"),(0,e.expect)((0,t.getNetworkFromRpc)("https://goerli-rollup.arbitrum.io/rpc")).to.equal("arbitrum-goerli")})),it("should identify Arbitrum Nova network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://arbitrum-nova.infura.io")).to.equal("arbitrum-nova"),(0,e.expect)((0,t.getNetworkFromRpc)("https://nova.arbitrum.io/rpc")).to.equal("arbitrum-nova")})),it("should identify Arbitrum One network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://arbitrum.infura.io")).to.equal("arbitrum"),(0,e.expect)((0,t.getNetworkFromRpc)("https://arb1.arbitrum.io/rpc")).to.equal("arbitrum")}))})),describe("Optimism networks",(function(){it("should identify Optimism Sepolia network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://optimism-sepolia.infura.io")).to.equal("optimism-sepolia"),(0,e.expect)((0,t.getNetworkFromRpc)("https://sepolia.optimism.io")).to.equal("optimism-sepolia")})),it("should identify Optimism Goerli network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://optimism-goerli.infura.io")).to.equal("optimism-goerli"),(0,e.expect)((0,t.getNetworkFromRpc)("https://goerli.optimism.io")).to.equal("optimism-goerli")})),it("should identify Optimism Mainnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://optimism.infura.io")).to.equal("optimism"),(0,e.expect)((0,t.getNetworkFromRpc)("https://mainnet.optimism.io")).to.equal("optimism")}))})),describe("Avalanche networks",(function(){it("should identify Avalanche Fuji network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://avalanche-fuji.infura.io")).to.equal("avalanche-fuji"),(0,e.expect)((0,t.getNetworkFromRpc)("https://api.avax-test.network/ext/bc/C/rpc")).to.equal("avalanche-fuji")})),it("should identify Avalanche Mainnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://avalanche.infura.io")).to.equal("avalanche"),(0,e.expect)((0,t.getNetworkFromRpc)("https://api.avax.network/ext/bc/C/rpc")).to.equal("avalanche")}))})),describe("Binance Smart Chain networks",(function(){it("should identify BSC Testnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://bsc-testnet.infura.io")).to.equal("bsc-testnet"),(0,e.expect)((0,t.getNetworkFromRpc)("https://data-seed-prebsc-1-s1.binance.org:8545")).to.equal("bsc-testnet")})),it("should identify BSC Mainnet network",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://bsc.infura.io")).to.equal("bsc"),(0,e.expect)((0,t.getNetworkFromRpc)("https://bsc-dataseed.binance.org")).to.equal("bsc"),(0,e.expect)((0,t.getNetworkFromRpc)("https://binance.nodereal.io")).to.equal("bsc")}))})),describe("URL formats",(function(){it("should handle URLs with authentication",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("https://user:pass@ethereum.infura.io")).to.equal("ethereum"),(0,e.expect)((0,t.getNetworkFromRpc)("user:pass@polygon.infura.io")).to.equal("polygon")})),it("should handle URLs without protocol",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("ethereum.infura.io")).to.equal("ethereum"),(0,e.expect)((0,t.getNetworkFromRpc)("polygon.infura.io")).to.equal("polygon")})),it("should handle invalid URLs gracefully",(function(){(0,e.expect)((0,t.getNetworkFromRpc)("ethereum:invalid-url")).to.equal("ethereum")}))})),describe("Error handling",(function(){it("should throw an error for unrecognized networks",(function(){(0,e.expect)((()=>(0,t.getNetworkFromRpc)("unknown-network.example.com"))).to.throw("Failed to get network from RPC URL"),(0,e.expect)((()=>(0,t.getNetworkFromRpc)("https://random-url.com"))).to.throw("Failed to get network from RPC URL")}))}))}));
|