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.
@@ -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})}};