aiia-vault-sdk 1.1.30 → 1.2.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/FairLaunch.d.ts +95 -0
- package/dist/FairLaunch.js +1 -0
- package/dist/MultiLevelReferralNFT.d.ts +159 -0
- package/dist/MultiLevelReferralNFT.js +1 -0
- package/dist/abis/FairLaunch.json +1302 -0
- package/dist/abis/MultiLevelReferralNFT.json +827 -0
- package/dist/contracts/FairLaunch.d.ts +753 -0
- package/dist/contracts/FairLaunch.js +1 -0
- package/dist/contracts/MultiLevelReferralNFT.d.ts +368 -0
- package/dist/contracts/MultiLevelReferralNFT.js +1 -0
- package/dist/contracts.json +9 -1
- package/dist/types.d.ts +128 -0
- package/package.json +1 -1
@@ -0,0 +1,95 @@
|
|
1
|
+
import { ethers } from "ethers";
|
2
|
+
import { type SendTransactionMutateAsync } from "@wagmi/core/query";
|
3
|
+
import { Config } from "@wagmi/core/dist/types/createConfig";
|
4
|
+
import { ParsedFairLaunchEventRaw, ParsedFairLaunchEvent } from "./types";
|
5
|
+
export interface UserContribution {
|
6
|
+
amount: number;
|
7
|
+
tokenAllocation: number;
|
8
|
+
hasClaimedInitial: boolean;
|
9
|
+
vestedClaimed: number;
|
10
|
+
tradingVaultId: number;
|
11
|
+
}
|
12
|
+
export interface SaleInfo {
|
13
|
+
startTime: number;
|
14
|
+
endTime: number;
|
15
|
+
totalTokensForSale: number;
|
16
|
+
totalRaised: number;
|
17
|
+
tokenPrice: number;
|
18
|
+
saleEnded: boolean;
|
19
|
+
claimingEnabled: boolean;
|
20
|
+
liquidityAdded: boolean;
|
21
|
+
}
|
22
|
+
export declare class FairLaunchSDK {
|
23
|
+
name: string;
|
24
|
+
private contract;
|
25
|
+
private providers;
|
26
|
+
private contractAddress;
|
27
|
+
private isBootstrapped;
|
28
|
+
private _projectToken;
|
29
|
+
private _fundingToken;
|
30
|
+
private _projectTokenDecimals;
|
31
|
+
private _fundingTokenDecimals;
|
32
|
+
constructor(rpcUrls: string | string[], contractAddress?: string);
|
33
|
+
private getRandomProvider;
|
34
|
+
private getContractWithRandomProvider;
|
35
|
+
bootstrap(): Promise<void>;
|
36
|
+
signAndSendTransaction(tx: ethers.ContractTransaction, wallet: ethers.Wallet | SendTransactionMutateAsync<Config, any>, callbacks?: {
|
37
|
+
onSubmit?: (tx: string) => void | Promise<void>;
|
38
|
+
onFinally?: (status: {
|
39
|
+
status: boolean | null;
|
40
|
+
confirmations: number;
|
41
|
+
txHash: string;
|
42
|
+
isCompleted: boolean;
|
43
|
+
attempts: number;
|
44
|
+
}) => void | Promise<void>;
|
45
|
+
onError?: (error: Error) => void | Promise<void>;
|
46
|
+
}): Promise<{
|
47
|
+
transaction: {
|
48
|
+
hash: string;
|
49
|
+
};
|
50
|
+
status: {
|
51
|
+
status: boolean | null;
|
52
|
+
confirmations: number;
|
53
|
+
isCompleted: boolean;
|
54
|
+
attempts: number;
|
55
|
+
};
|
56
|
+
}>;
|
57
|
+
buildContributeTx(amount: number, recipient: string): Promise<ethers.ContractTransaction>;
|
58
|
+
buildEndSaleTx(): Promise<ethers.ContractTransaction>;
|
59
|
+
buildAddLiquidityTx(): Promise<ethers.ContractTransaction>;
|
60
|
+
buildEnableClaimingTx(): Promise<ethers.ContractTransaction>;
|
61
|
+
buildClaimInitialTx(): Promise<ethers.ContractTransaction>;
|
62
|
+
buildClaimVestedTx(): Promise<ethers.ContractTransaction>;
|
63
|
+
buildUpdateLiquidityTokensTx(liquidityTokens: number): Promise<ethers.ContractTransaction>;
|
64
|
+
buildUpdateLiquidityPercentTx(liquidityPercent: number): Promise<ethers.ContractTransaction>;
|
65
|
+
buildUpdateInitialClaimPercentTx(initialClaimPercent: number): Promise<ethers.ContractTransaction>;
|
66
|
+
buildUpdateVestingDurationTx(vestingDuration: number): Promise<ethers.ContractTransaction>;
|
67
|
+
buildUpdateEarlyParticipationWindowTx(earlyParticipationWindow: number): Promise<ethers.ContractTransaction>;
|
68
|
+
buildWithdrawLPTokensTx(lpToken: string, recipient: string): Promise<ethers.ContractTransaction>;
|
69
|
+
buildWithdrawERC20Tx(token: string, amount: number): Promise<ethers.ContractTransaction>;
|
70
|
+
buildApproveERC20Tx(tokenAddress: string, spender: string, amount: number): Promise<ethers.ContractTransaction>;
|
71
|
+
getSaleInfo(): Promise<SaleInfo>;
|
72
|
+
getUserContribution(user: string): Promise<UserContribution>;
|
73
|
+
getContributorsCount(): Promise<number>;
|
74
|
+
getContributorAt(index: number): Promise<string>;
|
75
|
+
getAllContributors(): Promise<string[]>;
|
76
|
+
getProjectToken(): Promise<string>;
|
77
|
+
getFundingToken(): Promise<string>;
|
78
|
+
getTradingVault(): Promise<string>;
|
79
|
+
getDexRouter(): Promise<string>;
|
80
|
+
getLiquidityTokens(): Promise<number>;
|
81
|
+
getLiquidityPercent(): Promise<number>;
|
82
|
+
getInitialClaimPercent(): Promise<number>;
|
83
|
+
getVestingDuration(): Promise<number>;
|
84
|
+
getVestingStartTime(): Promise<number>;
|
85
|
+
getEarlyParticipationWindow(): Promise<number>;
|
86
|
+
hasOperatorRole(address: string): Promise<boolean>;
|
87
|
+
hasAdminRole(address: string): Promise<boolean>;
|
88
|
+
buildGrantOperatorRoleTx(operator: string): Promise<ethers.ContractTransaction>;
|
89
|
+
buildGrantAdminRoleTx(admin: string): Promise<ethers.ContractTransaction>;
|
90
|
+
getAllowance(tokenAddress: string, owner: string, spender: string): Promise<number>;
|
91
|
+
getContractAddress(): string;
|
92
|
+
getAllEvents(fromBlock: number, toBlock: number, whitelistEvents?: string[]): Promise<any[]>;
|
93
|
+
streamEvents(fromBlock: number, onEvent: (event: any) => Promise<void>, saveLatestBlock: (blockNumber: number) => Promise<void>, batchSize?: number, sleepTime?: number): Promise<void>;
|
94
|
+
formatEventArgs: (event: ParsedFairLaunchEventRaw) => Promise<ParsedFairLaunchEvent>;
|
95
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FairLaunchSDK=void 0;const e=require("ethers"),i=t(require("./abis/FairLaunch.json")),a=t(require("./contracts.json")),n=require("./utils");exports.FairLaunchSDK=class{constructor(t,r){this.name="FairLaunch",this.isBootstrapped=!1,this._projectToken=null,this._fundingToken=null,this._projectTokenDecimals=null,this._fundingTokenDecimals=null,this.formatEventArgs=async t=>{await this.bootstrap();const{eventName:e,args:i}=t;switch(e){case"Contributed":return{...t,args:{...i,user:i.user.toLowerCase(),amount:Number(i.amount)/10**this._fundingTokenDecimals}};case"SaleEnded":return{...t,args:{...i,totalRaised:Number(i.totalRaised)/10**this._fundingTokenDecimals,tokenPrice:Number(i.tokenPrice)/10**this._fundingTokenDecimals}};case"InitialClaimed":case"VestedClaimed":return{...t,args:{...i,user:i.user.toLowerCase(),amount:Number(i.amount)/10**this._projectTokenDecimals}};case"TradingVaultPositionCreated":return{...t,args:{...i,user:i.user.toLowerCase(),positionId:Number(i.positionId),amount:Number(i.amount)/10**this._fundingTokenDecimals}};case"LiquidityAdded":return{...t,args:{...i,tokenAmount:Number(i.tokenAmount)/10**this._projectTokenDecimals,fundingTokenAmount:Number(i.fundingTokenAmount)/10**this._fundingTokenDecimals}};default:return t}};const o=Array.isArray(t)?t:[t];this.providers=o.map((t=>new e.ethers.JsonRpcProvider(t)));const s=(0,n.getRandomProvider)(this.providers);this.contractAddress=(0,n.resolveContractAddress)(o[0],this.name,a.default,r),this.contract=new e.ethers.Contract(this.contractAddress,i.default.abi,s)}getRandomProvider(){return(0,n.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,i.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,n.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,i)=>t[i])),0===this.providers.length)throw new Error("No active RPC providers available");this._projectToken=await this.contract.projectToken(),this._fundingToken=await this.contract.fundingToken();const[e,i]=await Promise.all([(0,n.getTokenDecimals)(this._projectToken,this.getRandomProvider()),(0,n.getTokenDecimals)(this._fundingToken,this.getRandomProvider())]);this._projectTokenDecimals=e,this._fundingTokenDecimals=i,this.isBootstrapped=!0}async signAndSendTransaction(t,e,i={}){return(0,n.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),i,this.contract)}async buildContributeTx(t,i){await this.bootstrap();const a=e.ethers.parseUnits(t.toString(),this._fundingTokenDecimals);return await this.contract.contribute.populateTransaction(a,i)}async buildEndSaleTx(){return await this.contract.endSale.populateTransaction()}async buildAddLiquidityTx(){return await this.contract.addLiquidity.populateTransaction()}async buildEnableClaimingTx(){return await this.contract.enableClaiming.populateTransaction()}async buildClaimInitialTx(){return await this.contract.claimInitial.populateTransaction()}async buildClaimVestedTx(){return await this.contract.claimVested.populateTransaction()}async buildUpdateLiquidityTokensTx(t){await this.bootstrap();const i=e.ethers.parseUnits(t.toString(),this._projectTokenDecimals);return await this.contract.updateLiquidityTokens.populateTransaction(i)}async buildUpdateLiquidityPercentTx(t){return await this.contract.updateLiquidityPercent.populateTransaction(t)}async buildUpdateInitialClaimPercentTx(t){return await this.contract.updateInitialClaimPercent.populateTransaction(t)}async buildUpdateVestingDurationTx(t){return await this.contract.updateVestingDuration.populateTransaction(t)}async buildUpdateEarlyParticipationWindowTx(t){return await this.contract.updateEarlyParticipationWindow.populateTransaction(t)}async buildWithdrawLPTokensTx(t,e){return await this.contract.withdrawLPTokens.populateTransaction(t,e)}async buildWithdrawERC20Tx(t,i){const a=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),n=await a.decimals(),r=e.ethers.parseUnits(i.toString(),n);return await this.contract.withdrawERC20.populateTransaction(t,r)}async buildApproveERC20Tx(t,i,a){const r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),o=await r.decimals(),s=e.ethers.parseUnits(a.toString(),o);return(0,n.buildApproveERC20Tx)(t,i,s,this.getRandomProvider())}async getSaleInfo(){await this.bootstrap();const[t,e,i,a,n,r,o,s]=await Promise.all([this.contract.startTime(),this.contract.endTime(),this.contract.totalTokensForSale(),this.contract.totalRaised(),this.contract.tokenPrice(),this.contract.saleEnded(),this.contract.claimingEnabled(),this.contract.liquidityAdded()]);return{startTime:Number(t),endTime:Number(e),totalTokensForSale:Number(i)/10**this._projectTokenDecimals,totalRaised:Number(a)/10**this._fundingTokenDecimals,tokenPrice:Number(n)/10**this._fundingTokenDecimals,saleEnded:r,claimingEnabled:o,liquidityAdded:s}}async getUserContribution(t){await this.bootstrap();const e=await this.contract.userContributions(t);return{amount:Number(e.amount)/10**this._fundingTokenDecimals,tokenAllocation:Number(e.tokenAllocation)/10**this._projectTokenDecimals,hasClaimedInitial:e.hasClaimedInitial,vestedClaimed:Number(e.vestedClaimed)/10**this._projectTokenDecimals,tradingVaultId:Number(e.tradingVaultId)}}async getContributorsCount(){return Number(await this.contract.getContributorsCount())}async getContributorAt(t){return await this.contract.getContributorAt(t)}async getAllContributors(){const t=await this.getContributorsCount(),e=[];for(let i=0;i<t;i++)e.push(await this.getContributorAt(i));return e}async getProjectToken(){return this._projectToken||(this._projectToken=await this.contract.projectToken()),this._projectToken}async getFundingToken(){return this._fundingToken||(this._fundingToken=await this.contract.fundingToken()),this._fundingToken}async getTradingVault(){return await this.contract.tradingVault()}async getDexRouter(){return await this.contract.dexRouter()}async getLiquidityTokens(){await this.bootstrap();const t=await this.contract.liquidityTokens();return Number(t)/10**this._projectTokenDecimals}async getLiquidityPercent(){return Number(await this.contract.liquidityPercent())}async getInitialClaimPercent(){return Number(await this.contract.initialClaimPercent())}async getVestingDuration(){return Number(await this.contract.vestingDuration())}async getVestingStartTime(){return Number(await this.contract.vestingStartTime())}async getEarlyParticipationWindow(){return Number(await this.contract.earlyParticipationWindow())}async hasOperatorRole(t){const e=await this.contract.OPERATOR_ROLE();return await this.contract.hasRole(e,t)}async hasAdminRole(t){const e=await this.contract.DEFAULT_ADMIN_ROLE();return await this.contract.hasRole(e,t)}async buildGrantOperatorRoleTx(t){const e=await this.contract.OPERATOR_ROLE();return await this.contract.grantRole.populateTransaction(e,t)}async buildGrantAdminRoleTx(t){const e=await this.contract.DEFAULT_ADMIN_ROLE();return await this.contract.grantRole.populateTransaction(e,t)}async getAllowance(t,e,i){const[a,r]=await Promise.all([(0,n.getTokenAllowance)(t,e,i,this.getRandomProvider()),(0,n.getTokenDecimals)(t,this.getRandomProvider())]);return Number(a)/Math.pow(10,r)}getContractAddress(){return this.contractAddress}async getAllEvents(t,e,i){return await this.bootstrap(),(0,n.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e,i)}async streamEvents(t,e,i,a=1e3,r=5e3){const o=["Contributed","SaleEnded","InitialClaimed","VestedClaimed","ClaimingEnabled","LiquidityAdded","TradingVaultPositionCreated"];return await this.bootstrap(),(0,n.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e,o),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:i,fromBlock:t,batchSize:a,sleepTime:r})}};
|
@@ -0,0 +1,159 @@
|
|
1
|
+
import { ethers } from "ethers";
|
2
|
+
import { type SendTransactionMutateAsync } from "@wagmi/core/query";
|
3
|
+
import { Config } from "@wagmi/core/dist/types/createConfig";
|
4
|
+
import { ParsedMultiLevelReferralNFTEvent, ParsedMultiLevelReferralNFTEventRaw } from "./types";
|
5
|
+
export interface ReferralInfo {
|
6
|
+
referrer: string;
|
7
|
+
referralCode: string;
|
8
|
+
}
|
9
|
+
export interface NFTMintedEvent {
|
10
|
+
owner: string;
|
11
|
+
tokenId: number;
|
12
|
+
}
|
13
|
+
export interface ReferrerSetEvent {
|
14
|
+
referrer: string;
|
15
|
+
referee: string;
|
16
|
+
}
|
17
|
+
export interface ReferralPaidEvent {
|
18
|
+
receiver: string;
|
19
|
+
buyer: string;
|
20
|
+
amount: number;
|
21
|
+
level: number;
|
22
|
+
originalAmount: number;
|
23
|
+
}
|
24
|
+
/**
|
25
|
+
* SDK for interacting with the MultiLevelReferralNFT smart contract
|
26
|
+
*
|
27
|
+
* @remarks
|
28
|
+
* This SDK provides methods to interact with the MultiLevelReferralNFT contract,
|
29
|
+
* including minting NFTs, managing referrals, and handling rewards.
|
30
|
+
*/
|
31
|
+
export declare class MultiLevelReferralNFTSDK {
|
32
|
+
name: string;
|
33
|
+
private contract;
|
34
|
+
private providers;
|
35
|
+
private contractAddress;
|
36
|
+
private isBootstrapped;
|
37
|
+
/**
|
38
|
+
* Creates a new instance of the MultiLevelReferralNFTSDK
|
39
|
+
*
|
40
|
+
* @param rpcUrls - Single RPC URL or array of RPC URLs for blockchain connection
|
41
|
+
* @param contractAddress - Optional contract address. If not provided, will be resolved from contracts.json
|
42
|
+
*
|
43
|
+
* @throws Will throw if no valid RPC providers are available
|
44
|
+
*/
|
45
|
+
constructor(rpcUrls: string | string[], contractAddress?: string);
|
46
|
+
/**
|
47
|
+
* Gets a random provider from the available providers
|
48
|
+
*
|
49
|
+
* @returns An ethers Provider instance
|
50
|
+
* @private
|
51
|
+
*/
|
52
|
+
private getRandomProvider;
|
53
|
+
/**
|
54
|
+
* Gets a contract instance with a random provider
|
55
|
+
*
|
56
|
+
* @returns Contract instance
|
57
|
+
* @private
|
58
|
+
*/
|
59
|
+
private getContractWithRandomProvider;
|
60
|
+
/**
|
61
|
+
* Bootstraps the SDK by checking RPC health and removing inactive providers
|
62
|
+
*
|
63
|
+
* @throws Will throw if no active RPC providers are available
|
64
|
+
*/
|
65
|
+
bootstrap(): Promise<void>;
|
66
|
+
/**
|
67
|
+
* Signs and sends a transaction to the blockchain
|
68
|
+
*
|
69
|
+
* @param tx - The transaction to send
|
70
|
+
* @param wallet - The wallet or transaction sender
|
71
|
+
* @param callbacks - Optional callbacks for transaction lifecycle events
|
72
|
+
* @returns Transaction result and status
|
73
|
+
*/
|
74
|
+
signAndSendTransaction(tx: ethers.ContractTransaction, wallet: ethers.Wallet | SendTransactionMutateAsync<Config, any>, callbacks?: {
|
75
|
+
onSubmit?: (tx: string) => void | Promise<void>;
|
76
|
+
onFinally?: (status: {
|
77
|
+
status: boolean | null;
|
78
|
+
confirmations: number;
|
79
|
+
txHash: string;
|
80
|
+
isCompleted: boolean;
|
81
|
+
attempts: number;
|
82
|
+
}) => void | Promise<void>;
|
83
|
+
onError?: (error: Error) => void | Promise<void>;
|
84
|
+
}): Promise<{
|
85
|
+
transaction: {
|
86
|
+
hash: string;
|
87
|
+
};
|
88
|
+
status: {
|
89
|
+
status: boolean | null;
|
90
|
+
confirmations: number;
|
91
|
+
isCompleted: boolean;
|
92
|
+
attempts: number;
|
93
|
+
};
|
94
|
+
}>;
|
95
|
+
/**
|
96
|
+
* Gets the current NFT price
|
97
|
+
* @returns The current price in ETH
|
98
|
+
*/
|
99
|
+
getPrice(): Promise<number>;
|
100
|
+
/**
|
101
|
+
* Gets the share percentage for referrals
|
102
|
+
* @returns The share percentage (e.g., 20 for 20%)
|
103
|
+
*/
|
104
|
+
getSharePercent(): Promise<number>;
|
105
|
+
/**
|
106
|
+
* Gets the maximum number of referral levels
|
107
|
+
* @returns The maximum number of referral levels
|
108
|
+
*/
|
109
|
+
getMaxReferralLevels(): Promise<number>;
|
110
|
+
/**
|
111
|
+
* Gets the referrer address for a given user
|
112
|
+
* @param user - The user's address
|
113
|
+
* @returns The referrer's address
|
114
|
+
*/
|
115
|
+
getReferrer(user: string): Promise<string>;
|
116
|
+
/**
|
117
|
+
* Gets the user address associated with a referral code
|
118
|
+
* @param referralCode - The referral code to look up
|
119
|
+
* @returns The associated user's address
|
120
|
+
*/
|
121
|
+
getReferralCodeOwner(referralCode: string): Promise<string>;
|
122
|
+
/**
|
123
|
+
* Gets the referral code for a given user
|
124
|
+
* @param user - The user's address
|
125
|
+
* @returns The user's referral code
|
126
|
+
*/
|
127
|
+
getUserReferralCode(user: string): Promise<string>;
|
128
|
+
/**
|
129
|
+
* Builds a transaction to set the NFT price
|
130
|
+
* @param price - The new price in ETH
|
131
|
+
* @returns Populated transaction
|
132
|
+
*/
|
133
|
+
buildSetPriceTx(price: number): Promise<ethers.ContractTransaction>;
|
134
|
+
/**
|
135
|
+
* Builds a transaction to buy an NFT with a referral code
|
136
|
+
* @param referralCode - The referral code to use
|
137
|
+
* @returns Populated transaction
|
138
|
+
*/
|
139
|
+
buildBuyNFTTx(referralCode: string): Promise<ethers.ContractTransaction>;
|
140
|
+
/**
|
141
|
+
* Builds a transaction to withdraw contract balance
|
142
|
+
* @param amount - Amount to withdraw in ETH
|
143
|
+
* @returns Populated transaction
|
144
|
+
*/
|
145
|
+
buildWithdrawTx(amount: number): Promise<ethers.ContractTransaction>;
|
146
|
+
/**
|
147
|
+
* Gets the contract owner address
|
148
|
+
* @returns The owner's address
|
149
|
+
*/
|
150
|
+
getOwner(): Promise<string>;
|
151
|
+
/**
|
152
|
+
* Gets the contract address
|
153
|
+
* @returns The contract address
|
154
|
+
*/
|
155
|
+
getContractAddress(): string;
|
156
|
+
getAllEvents(fromBlock: number, toBlock: number, whitelistEvents?: string[]): Promise<ParsedMultiLevelReferralNFTEventRaw[]>;
|
157
|
+
streamEvents(fromBlock: number, onEvent: (event: ParsedMultiLevelReferralNFTEvent) => Promise<void>, saveLatestBlock: (blockNumber: number) => Promise<void>, batchSize?: number, sleepTime?: number): Promise<void>;
|
158
|
+
formatEventArgs: (event: ParsedMultiLevelReferralNFTEventRaw) => ParsedMultiLevelReferralNFTEvent;
|
159
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MultiLevelReferralNFTSDK=void 0;const r=require("ethers"),t=e(require("./abis/MultiLevelReferralNFT.json")),s=e(require("./contracts.json")),a=require("./utils");exports.MultiLevelReferralNFTSDK=class{constructor(e,n){this.name="MultiLevelReferralNFT",this.isBootstrapped=!1,this.formatEventArgs=e=>{const{eventName:t,args:s}=e;switch(t){case"NFTMinted":return{...e,args:{...s,owner:s.owner.toLowerCase(),tokenId:Number(s.tokenId)}};case"ReferrerSet":return{...e,args:{...s,referrer:s.referrer.toLowerCase(),referee:s.referee.toLowerCase()}};case"ReferralPaid":return{...e,args:{...s,receiver:s.receiver.toLowerCase(),buyer:s.buyer.toLowerCase(),amount:Number(r.ethers.formatEther(s.amount)),level:Number(s.level),originalAmount:Number(r.ethers.formatEther(s.originalAmount))}};default:return e}};const o=Array.isArray(e)?e:[e];this.providers=o.map((e=>new r.ethers.JsonRpcProvider(e)));const i=(0,a.getRandomProvider)(this.providers);this.contractAddress=(0,a.resolveContractAddress)(o[0],this.name,s.default,n),this.contract=new r.ethers.Contract(this.contractAddress,t.default.abi,i)}getRandomProvider(){return(0,a.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new r.ethers.Contract(this.contractAddress,t.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const e=await Promise.all(this.providers.map(((e,r)=>(0,a.checkRpcHealth)(e,r))));if(this.providers=this.providers.filter(((r,t)=>e[t])),0===this.providers.length)throw new Error("No active RPC providers available");this.isBootstrapped=!0}async signAndSendTransaction(e,r,t={}){return(0,a.signAndSendTransaction)(e,r,(()=>this.getRandomProvider()),t,this.contract)}async getPrice(){const e=await this.contract.price();return Number(r.ethers.formatEther(e))}async getSharePercent(){const e=await this.contract.sharePercent();return Number(e)}async getMaxReferralLevels(){const e=await this.contract.maxReferralLevels();return Number(e)}async getReferrer(e){return await this.contract.referrers(e)}async getReferralCodeOwner(e){return await this.contract.referralCodes(e)}async getUserReferralCode(e){return await this.contract.userReferralCodes(e)}async buildSetPriceTx(e){const t=r.ethers.parseEther(e.toString());return await this.contract.setPrice.populateTransaction(t)}async buildBuyNFTTx(e){const t=await this.getPrice(),s=await this.contract.buy.populateTransaction(e);return s.value=r.ethers.parseEther(t.toString()),s}async buildWithdrawTx(e){const t=r.ethers.parseEther(e.toString());return await this.contract.withdraw.populateTransaction(t)}async getOwner(){return await this.contract.owner()}getContractAddress(){return this.contractAddress}async getAllEvents(e,r,t){return await this.bootstrap(),(0,a.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),e,r,t)}async streamEvents(e,r,t,s=1e3,n=5e3){const o=["NFTMinted","ReferrerSet","ReferralPaid"];return await this.bootstrap(),(0,a.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(e,r)=>this.getAllEvents(e,r,o),formatEvent:e=>this.formatEventArgs(e),onEvent:r,saveLatestBlock:t,fromBlock:e,batchSize:s,sleepTime:n})}};
|