aiia-vault-sdk 1.2.14 → 1.2.16
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/EthStaking.d.ts +300 -0
- package/dist/EthStaking.js +1 -0
- package/dist/TradingVault.d.ts +44 -0
- package/dist/TradingVault.js +1 -1
- package/dist/abis/EthStaking.json +936 -0
- package/dist/abis/FairLaunch.json +2 -2
- package/dist/abis/NFTTicket.json +2 -2
- package/dist/abis/SeedRoundFundraiser.json +2 -2
- package/dist/abis/TradingVault.json +63 -2
- package/dist/contracts/EthStaking.d.ts +502 -0
- package/dist/contracts/EthStaking.js +1 -0
- package/dist/contracts/TradingVault.d.ts +54 -2
- package/dist/contracts.json +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/types.d.ts +98 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +1 -1
- package/package.json +1 -1
package/dist/contracts.json
CHANGED
@@ -28,8 +28,8 @@
|
|
28
28
|
"TradingVault-implemented-deprecated": "0xEe8D777729B5D8239FF18E77B04cf47a73FfE516",
|
29
29
|
"USDC": "0xDd33fEeD5D44D9e89b69C8E9397292E0D6554a66",
|
30
30
|
"TradingVault": "0xDAA0505313b7448374DB560c46584b4c85432e4E",
|
31
|
-
"TradingVault-implemented": "
|
32
|
-
"TradingVault-implemented-old": "
|
31
|
+
"TradingVault-implemented": "0xFCC0495c471700B9200178b0458D9259b562ffE6",
|
32
|
+
"TradingVault-implemented-old": "0xe156e586C607E166Ead84801f55D6e5BFEF8700C",
|
33
33
|
"UniswapV2Factory": "0xF64C66999F62b7B86aDF3477d426c8A26b1111be",
|
34
34
|
"UniswapV2Router02": "0x4e3671ea1DdaeFa9eBB160e0fBC5D8785E0833Ab",
|
35
35
|
"PTK": "0x7A526040174f47581B7a5dEf81E65045541Bbfc6",
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,r,t,i){void 0===i&&(i=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,i,o)}:function(e,r,t,i){void 0===i&&(i=t),e[i]=r[t]}),r=this&&this.__exportStar||function(r,t){for(var i in r)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||e(t,r,i)};Object.defineProperty(exports,"__esModule",{value:!0}),r(require("./TradingVault"),exports),r(require("./SeedRoundFundraiser"),exports),r(require("./types"),exports),r(require("./MultiLevelReferralNFT"),exports);
|
1
|
+
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,r,t,i){void 0===i&&(i=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,i,o)}:function(e,r,t,i){void 0===i&&(i=t),e[i]=r[t]}),r=this&&this.__exportStar||function(r,t){for(var i in r)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||e(t,r,i)};Object.defineProperty(exports,"__esModule",{value:!0}),r(require("./TradingVault"),exports),r(require("./SeedRoundFundraiser"),exports),r(require("./types"),exports),r(require("./MultiLevelReferralNFT"),exports),r(require("./EthStaking"),exports);
|
package/dist/types.d.ts
CHANGED
@@ -69,6 +69,15 @@ export interface RawEventTypes {
|
|
69
69
|
to: string;
|
70
70
|
value: bigint;
|
71
71
|
};
|
72
|
+
EntryPriceUpdated: {
|
73
|
+
tokenId: bigint;
|
74
|
+
oldEntryPrice: bigint;
|
75
|
+
newEntryPrice: bigint;
|
76
|
+
};
|
77
|
+
PositionExpirationUpdated: {
|
78
|
+
tokenId: bigint;
|
79
|
+
expiredAt: bigint;
|
80
|
+
};
|
72
81
|
}
|
73
82
|
export interface RawSeedRoundFundraiserEventTypes {
|
74
83
|
TokenWhitelisted: {
|
@@ -206,6 +215,15 @@ export interface EventTypes {
|
|
206
215
|
to: string;
|
207
216
|
value: number;
|
208
217
|
};
|
218
|
+
EntryPriceUpdated: {
|
219
|
+
tokenId: number;
|
220
|
+
oldEntryPrice: number;
|
221
|
+
newEntryPrice: number;
|
222
|
+
};
|
223
|
+
PositionExpirationUpdated: {
|
224
|
+
tokenId: number;
|
225
|
+
expiredAt: number;
|
226
|
+
};
|
209
227
|
}
|
210
228
|
export interface SeedRoundFundraiserEventTypes {
|
211
229
|
TokenWhitelisted: {
|
@@ -294,6 +312,7 @@ export type ParsedEvent = {
|
|
294
312
|
transactionHash: string;
|
295
313
|
args: EventTypes[K];
|
296
314
|
timestamp: number | null;
|
315
|
+
sender: string | null;
|
297
316
|
};
|
298
317
|
}[keyof EventTypes];
|
299
318
|
export type ParsedSeedRoundFundraiserEvent = {
|
@@ -303,6 +322,7 @@ export type ParsedSeedRoundFundraiserEvent = {
|
|
303
322
|
transactionHash: string;
|
304
323
|
args: SeedRoundFundraiserEventTypes[K];
|
305
324
|
timestamp: number | null;
|
325
|
+
sender: string | null;
|
306
326
|
};
|
307
327
|
}[keyof SeedRoundFundraiserEventTypes];
|
308
328
|
export type AnyEvent = ParsedEvent;
|
@@ -375,6 +395,7 @@ export type ParsedFairLaunchEvent = {
|
|
375
395
|
transactionHash: string;
|
376
396
|
args: FairLaunchEventTypes[K];
|
377
397
|
timestamp: number | null;
|
398
|
+
sender: string | null;
|
378
399
|
};
|
379
400
|
}[keyof FairLaunchEventTypes];
|
380
401
|
export interface RawMultiLevelReferralNFTEventTypes {
|
@@ -408,6 +429,31 @@ export interface RawMultiLevelReferralNFTEventTypes {
|
|
408
429
|
tokenId: bigint;
|
409
430
|
};
|
410
431
|
}
|
432
|
+
export interface RawEthStakingEventTypes {
|
433
|
+
Staked: {
|
434
|
+
user: string;
|
435
|
+
amount: bigint;
|
436
|
+
timestamp: bigint;
|
437
|
+
};
|
438
|
+
Unstaked: {
|
439
|
+
user: string;
|
440
|
+
amount: bigint;
|
441
|
+
timestamp: bigint;
|
442
|
+
};
|
443
|
+
RewardClaimed: {
|
444
|
+
user: string;
|
445
|
+
amount: bigint;
|
446
|
+
timestamp: bigint;
|
447
|
+
signatureHash: string;
|
448
|
+
};
|
449
|
+
SignerUpdated: {
|
450
|
+
newSigner: string;
|
451
|
+
};
|
452
|
+
MinStakeUpdated: {
|
453
|
+
oldAmount: bigint;
|
454
|
+
newAmount: bigint;
|
455
|
+
};
|
456
|
+
}
|
411
457
|
export interface MultiLevelReferralNFTEventTypes {
|
412
458
|
NFTMinted: {
|
413
459
|
owner: string;
|
@@ -439,6 +485,31 @@ export interface MultiLevelReferralNFTEventTypes {
|
|
439
485
|
tokenId: number;
|
440
486
|
};
|
441
487
|
}
|
488
|
+
export interface EthStakingEventTypes {
|
489
|
+
Staked: {
|
490
|
+
user: string;
|
491
|
+
amount: number;
|
492
|
+
timestamp: number;
|
493
|
+
};
|
494
|
+
Unstaked: {
|
495
|
+
user: string;
|
496
|
+
amount: number;
|
497
|
+
timestamp: number;
|
498
|
+
};
|
499
|
+
RewardClaimed: {
|
500
|
+
user: string;
|
501
|
+
amount: number;
|
502
|
+
timestamp: number;
|
503
|
+
signatureHash: string;
|
504
|
+
};
|
505
|
+
SignerUpdated: {
|
506
|
+
newSigner: string;
|
507
|
+
};
|
508
|
+
MinStakeUpdated: {
|
509
|
+
oldAmount: number;
|
510
|
+
newAmount: number;
|
511
|
+
};
|
512
|
+
}
|
442
513
|
export type ParsedMultiLevelReferralNFTEventRaw = {
|
443
514
|
[K in keyof RawMultiLevelReferralNFTEventTypes]: BaseEventRaw & {
|
444
515
|
eventName: K;
|
@@ -447,8 +518,20 @@ export type ParsedMultiLevelReferralNFTEventRaw = {
|
|
447
518
|
transactionIndex: number;
|
448
519
|
logIndex: number;
|
449
520
|
blockHash: string;
|
521
|
+
sender: string | null;
|
450
522
|
};
|
451
523
|
}[keyof RawMultiLevelReferralNFTEventTypes];
|
524
|
+
export type ParsedEthStakingEventRaw = {
|
525
|
+
[K in keyof RawEthStakingEventTypes]: BaseEventRaw & {
|
526
|
+
eventName: K;
|
527
|
+
args: RawEthStakingEventTypes[K];
|
528
|
+
address: string;
|
529
|
+
transactionIndex: number;
|
530
|
+
logIndex: number;
|
531
|
+
blockHash: string;
|
532
|
+
sender: string | null;
|
533
|
+
};
|
534
|
+
}[keyof RawEthStakingEventTypes];
|
452
535
|
export type ParsedMultiLevelReferralNFTEvent = {
|
453
536
|
[K in keyof MultiLevelReferralNFTEventTypes]: {
|
454
537
|
eventName: K;
|
@@ -460,5 +543,20 @@ export type ParsedMultiLevelReferralNFTEvent = {
|
|
460
543
|
transactionIndex: number;
|
461
544
|
logIndex: number;
|
462
545
|
blockHash: string;
|
546
|
+
sender: string | null;
|
463
547
|
};
|
464
548
|
}[keyof MultiLevelReferralNFTEventTypes];
|
549
|
+
export type ParsedEthStakingEvent = {
|
550
|
+
[K in keyof EthStakingEventTypes]: {
|
551
|
+
eventName: K;
|
552
|
+
blockNumber: number;
|
553
|
+
transactionHash: string;
|
554
|
+
args: EthStakingEventTypes[K];
|
555
|
+
timestamp: number | null;
|
556
|
+
address: string;
|
557
|
+
transactionIndex: number;
|
558
|
+
logIndex: number;
|
559
|
+
blockHash: string;
|
560
|
+
sender: string | null;
|
561
|
+
};
|
562
|
+
}[keyof EthStakingEventTypes];
|
package/dist/utils.d.ts
CHANGED
package/dist/utils.js
CHANGED
@@ -1 +1 @@
|
|
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.processBatches=exports.chunks=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.chunks=(e,t)=>{const o=[];for(let s=0;s<e.length;s+=t)o.push(e.slice(s,s+t));return o};exports.processBatches=async(e,t,o=3,s=500)=>{let r=[];const n=(0,exports.chunks)(e,o);for(let e=0;e<n.length;e++){const o=await t(n[e]);r=[...r,...o],e<n.length-1&&await(0,exports.sleep)(s)}return r};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 s=0,r=1e3;for(;s<o;)try{const n=await e.getTransactionReceipt(t);if(!n){if(s++,s===o)return{hash:t,status:null,confirmations:0,isCompleted:!1,attempts:s};await(0,exports.sleep)(r),r*=2;continue}const a=Number(await n.confirmations()||0);return{hash:n.hash,status:1===n.status,confirmations:a,isCompleted:!0,attempts:s+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 s=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],o);return Number(await s.decimals())};exports.getTokenSymbol=async(t,o)=>{const s=new e.ethers.Contract(t,["function symbol() view returns (string)"],o);return await s.symbol()};exports.getTokenAllowance=async(t,o,s,r)=>{if(t===e.ethers.ZeroAddress||t.toLowerCase()===e.ethers.ZeroAddress)return BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const n=new e.ethers.Contract(t,["function allowance(address owner, address spender) view returns (uint256)"],r);return await n.allowance(o,s)};exports.buildApproveERC20Tx=async(t,o,s,r)=>{const n=new e.ethers.Contract(t,["function approve(address spender, uint256 amount) returns (bool)"],r);return await n.approve.populateTransaction(o,s)};exports.getRewardWeight=(e,t)=>{let o=0;const s=[...t].sort(((e,t)=>e.duration-t.duration));for(const t of s)e>=t.duration&&(o=t.weight);return o};exports.resolveContractAddress=(e,t,o,s)=>{if(s)return s;const r=(0,exports.getNetworkFromRpc)(e);return o?.[r]?.[t]};exports.getAllEvents=async(e,t,o,s,r,n)=>{let a=[];e.interface.forEachEvent((e=>{a.push(e.name)})),n&&n.length>0&&(a=a.filter((e=>n.includes(e))));const i=await(0,exports.processBatches)(a,(async t=>{const n=t.map((async t=>{const n=o(),a=n.filters[t]();return(await n.queryFilter(a,s,r)).map((o=>{const s=e.interface.parseLog({topics:o.topics,data:o.data});return{eventName:t,blockNumber:o.blockNumber,transactionHash:o.transactionHash,args:s?.args.toObject(),timestamp:null}}))}));return(await Promise.all(n)).flat()}));i.sort(((e,t)=>e.blockNumber-t.blockNumber));const c=[...new Set(i.map((e=>e.blockNumber)))],l=new Map;
|
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.processBatches=exports.chunks=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.chunks=(e,t)=>{const o=[];for(let s=0;s<e.length;s+=t)o.push(e.slice(s,s+t));return o};exports.processBatches=async(e,t,o=3,s=500)=>{let r=[];const n=(0,exports.chunks)(e,o);for(let e=0;e<n.length;e++){const o=await t(n[e]);r=[...r,...o],e<n.length-1&&await(0,exports.sleep)(s)}return r};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 s=0,r=1e3;for(;s<o;)try{const n=await e.getTransactionReceipt(t);if(!n){if(s++,s===o)return{hash:t,status:null,confirmations:0,isCompleted:!1,attempts:s};await(0,exports.sleep)(r),r*=2;continue}const a=Number(await n.confirmations()||0);return{hash:n.hash,status:1===n.status,confirmations:a,isCompleted:!0,attempts:s+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 s=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],o);return Number(await s.decimals())};exports.getTokenSymbol=async(t,o)=>{const s=new e.ethers.Contract(t,["function symbol() view returns (string)"],o);return await s.symbol()};exports.getTokenAllowance=async(t,o,s,r)=>{if(t===e.ethers.ZeroAddress||t.toLowerCase()===e.ethers.ZeroAddress)return BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");const n=new e.ethers.Contract(t,["function allowance(address owner, address spender) view returns (uint256)"],r);return await n.allowance(o,s)};exports.buildApproveERC20Tx=async(t,o,s,r)=>{const n=new e.ethers.Contract(t,["function approve(address spender, uint256 amount) returns (bool)"],r);return await n.approve.populateTransaction(o,s)};exports.getRewardWeight=(e,t)=>{let o=0;const s=[...t].sort(((e,t)=>e.duration-t.duration));for(const t of s)e>=t.duration&&(o=t.weight);return o};exports.resolveContractAddress=(e,t,o,s)=>{if(s)return s;const r=(0,exports.getNetworkFromRpc)(e);return o?.[r]?.[t]};exports.getAllEvents=async(e,t,o,s,r,n)=>{let a=[];e.interface.forEachEvent((e=>{a.push(e.name)})),n&&n.length>0&&(a=a.filter((e=>n.includes(e))));const i=await(0,exports.processBatches)(a,(async t=>{const n=t.map((async t=>{const n=o(),a=n.filters[t]();return(await n.queryFilter(a,s,r)).map((o=>{const s=e.interface.parseLog({topics:o.topics,data:o.data});return{eventName:t,blockNumber:o.blockNumber,transactionHash:o.transactionHash,args:s?.args.toObject(),timestamp:null,sender:null}}))}));return(await Promise.all(n)).flat()}));i.sort(((e,t)=>e.blockNumber-t.blockNumber));const c=[...new Set(i.map((e=>e.blockNumber)))],l=new Map;await(0,exports.processBatches)(c,(async e=>{const o=e.map((e=>t().getBlock(e)));return(await Promise.all(o)).forEach((e=>{e&&l.set(e.number,e.timestamp)})),[]}));const p=[...new Set(i.map((e=>e.transactionHash)))],m=new Map;return await(0,exports.processBatches)(p,(async e=>{const o=e.map((async e=>{const o=t(),s=await o.getTransaction(e);return{hash:e,from:s?.from||null}}));return(await Promise.all(o)).forEach((e=>{e&&m.set(e.hash,e.from)})),[]})),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:l.get(e.blockNumber)??null,sender:m.get(e.transactionHash)??null})))};exports.streamEvents=async({getProvider:e,getAllEvents:t,formatEvent:o,onEvent:s,saveLatestBlock:r,fromBlock:n,batchSize:a=1e3,sleepTime:i=5e3,whitelistEvents:c,shouldContinue:l,blockGap:p=0})=>{const m="1"===process.env.DEBUG_STREAM_EVENTS;let f=n,u=0,E=Date.now();const g=()=>{u++;const e=Date.now();e-E>=1e4&&(console.log(`${exports.LOG_PREFIXES.INFO} RPC Requests in last 10s: ${u}`),u=0,E=e)},h=()=>{const t=e();if(!t.__requestTracking){if("send"in t){const e=t.send.bind(t);t.send=async(t,o)=>(g(),e(t,o))}else if("_send"in t){const e=t._send.bind(t);t._send=async(t,o)=>(g(),e(t,o))}else{const e=t.getBlockNumber.bind(t);t.getBlockNumber=async()=>(g(),e());const o=t.getBlock.bind(t);t.getBlock=async e=>(g(),o(e));const s=t.getTransactionReceipt.bind(t);t.getTransactionReceipt=async e=>(g(),s(e))}t.__requestTracking=!0}return t},b=async(e,o,s)=>(g(),await t(e,o,s));for(m&&(console.log(`${exports.LOG_PREFIXES.INFO} StreamEvents Debug Mode Enabled`),console.log(`${exports.LOG_PREFIXES.INFO} Initial fromBlock: ${f}`),console.log(`${exports.LOG_PREFIXES.INFO} Batch size: ${a}`),console.log(`${exports.LOG_PREFIXES.INFO} Sleep time: ${i}ms`),console.log(`${exports.LOG_PREFIXES.INFO} Block gap: ${p}`),console.log(`${exports.LOG_PREFIXES.INFO} RPC request tracking enabled (10s intervals)`),c&&c.length>0&&console.log(`${exports.LOG_PREFIXES.INFO} Whitelist events: ${c.join(", ")}`),l&&console.log(`${exports.LOG_PREFIXES.INFO} Stream will check continuation condition`));;)try{if(l){if(!await Promise.resolve(l()))return void(m&&console.log(`${exports.LOG_PREFIXES.INFO} Stream stopped by shouldContinue function`))}const e=await h().getBlockNumber();m&&console.log(`${exports.LOG_PREFIXES.BLOCK} Latest block: ${e}`);const t=Math.max(e-p,0),n=Math.min(f+a,t);if(m&&console.log(`${exports.LOG_PREFIXES.BLOCK} Processing blocks from ${f} to ${n} (safe latest block: ${t})`),f>=t){m&&console.log(`${exports.LOG_PREFIXES.DEBUG} Caught up to latest block, waiting ${i}ms...`),await(0,exports.sleep)(i);continue}const u=await b(f,n,c);if(m&&u.length>0){const e=u.reduce(((e,t)=>{const o=t.eventName||"Unknown";return e[o]=(e[o]||0)+1,e}),{});console.log(`${exports.LOG_PREFIXES.EVENT} Found ${u.length} events:`),Object.entries(e).forEach((([e,t])=>{console.log(`${exports.LOG_PREFIXES.EVENT} - ${e}: ${t}`)}))}for(const e of u)m&&console.log(`${exports.LOG_PREFIXES.EVENT} Processing: ${e.eventName||"Event"}`),await s(o(e));await r(n),m&&console.log(`${exports.LOG_PREFIXES.SAVE} Saved latest block: ${n}`),f=n+1}catch(e){m?(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:s,onFinally:r,onError:n}={},a)=>{try{const n={...e};let a;if("object"==typeof t&&null!==t&&"sendTransaction"in t){const e=t.connect(o());a=(await e.sendTransaction(n)).hash}else a=await t(n);s&&await s(a);const i=await(0,exports.getTransactionStatus)(o(),a);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 r&&await r({...i,txHash:a}),{transaction:{hash:a},status:i}}catch(e){if(a&&e)try{if("CALL_EXCEPTION"===e.code&&e.data){const t=e.data;for(const o of Object.values(a.interface.fragments).filter((e=>"error"===e.type)))if("name"in o){const s=a.interface.getError(o.name);if(s&&s.selector){if(s.selector===t){const t=o.name,s=e.errorArgs||[],r=new Error(`Transaction failed with custom error: ${t}(${s.join(", ")})`);throw Object.assign(r,e),n&&await n(r),r}}}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 n&&await n(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 s=[[/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 s)if(e.test(t))return o;for(const[e,t]of s)if(e.test(o))return t;throw new Error("Failed to get network from RPC URL")};
|