From 4ae5d29de4b251511898304ed2fa8f45dac8fbd7 Mon Sep 17 00:00:00 2001 From: thanghoduc Date: Sat, 10 Aug 2024 15:07:36 +0700 Subject: [PATCH] fix: token native --- package.json | 2 +- src/constants/chains.ts | 5 ++--- src/constants/contract.ts | 12 +++++------- src/packages/gasSponsor.ts | 27 ++++++++++++++++----------- src/packages/giftFactoy.ts | 30 +++++++++++++++++++++++++----- src/types/gifts.ts | 4 ++-- 6 files changed, 51 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index cc05a68..ebc03ee 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.1", + "version": "1.0.0", "license": "MIT", "main": "src/index.ts", "types": "src/index.ts", diff --git a/src/constants/chains.ts b/src/constants/chains.ts index a450f83..4721a40 100644 --- a/src/constants/chains.ts +++ b/src/constants/chains.ts @@ -1,4 +1,3 @@ -const isDev = process.env.NODE_ENV === 'development' -export const RPC_URL = isDev ? "https://rpc-testnet.viction.xyz" : "https://rpc.viction.xyz" -export const CHAIN_ID = isDev ? 89 : 88 \ No newline at end of file +export const RPC_URL = "https://rpc.viction.xyz" +export const CHAIN_ID = 88 \ No newline at end of file diff --git a/src/constants/contract.ts b/src/constants/contract.ts index ead0b86..16e5ca9 100644 --- a/src/constants/contract.ts +++ b/src/constants/contract.ts @@ -6,12 +6,10 @@ export enum CONTRACT_NAME { GAS_SPONSOR_CONTRACT_ADDRESS = "GAS_SPONSOR_CONTRACT_ADDRESS" } -const isDev = process.env.NODE_ENV === 'development' - export const GIFT_CONTRACT: Record = { - "BROADCASTER_CONTRACT_ADDRESS" : isDev ? '0xa19269Cde8b6B8A52640c5bE0566D54805D04253' : '0x9fAE0D50e105f0D3E9815f38b8255F72a679dEf2', - "RANDOMIZER_CONTRACT_ADDRESS" : isDev ? '0x7c3c41E7c76b14d7f03c3fF875f9eCb2F69CB607' : '0x8261384E6076B535c50dE75BDc391Ca6D630F7a6', - "COIN98_GIFT_CONTRACT_ADDRESS": isDev ? '0x495bFeE6Bf9e2e6bBEDa1E4F8B5E249a22EEA167' : '0x00800E8816DE5c42da2746F3e438EB3bDC1ef151', - "COIN98_GIFT_FACTORY_CONTRACT_ADDRESS": isDev ? '0x080A34F16d545b0F084Ea7202f391cfa5b9914Cd' : '0x563F0e812a896Db7dC4877bf5a2554F59d4f7228', - "GAS_SPONSOR_CONTRACT_ADDRESS": isDev ? '0xDD133F8CDe28e353fEE74C187ce1A433B1185229' : '0x726cf8d916b39B848F9a989BE5567FBb4Fb46F5a', + "BROADCASTER_CONTRACT_ADDRESS" : '0x9fAE0D50e105f0D3E9815f38b8255F72a679dEf2', + "RANDOMIZER_CONTRACT_ADDRESS" : '0x8261384E6076B535c50dE75BDc391Ca6D630F7a6', + "COIN98_GIFT_CONTRACT_ADDRESS": '0x00800E8816DE5c42da2746F3e438EB3bDC1ef151', + "COIN98_GIFT_FACTORY_CONTRACT_ADDRESS": '0x563F0e812a896Db7dC4877bf5a2554F59d4f7228', + "GAS_SPONSOR_CONTRACT_ADDRESS": '0x726cf8d916b39B848F9a989BE5567FBb4Fb46F5a' } \ No newline at end of file diff --git a/src/packages/gasSponsor.ts b/src/packages/gasSponsor.ts index 052a13b..48c1145 100644 --- a/src/packages/gasSponsor.ts +++ b/src/packages/gasSponsor.ts @@ -1,3 +1,4 @@ +import { ethers } from "ethers"; import { CONTRACT_NAME } from "../constants"; import { ClaimRewardParams, ClaimRewardRespone, CreateGiftRespone, GasSponsorCreateGiftsParams, WithdrawGiftRespone, WithdrawRewardParams } from "../types"; import { GiftCore } from "./giftCore"; @@ -9,16 +10,25 @@ export class GasSponsor extends GiftCore { async createGifts(params: GasSponsorCreateGiftsParams): Promise{ const { inputConfig, feeToken, giftContractAddress, signer} = params + const isNative = inputConfig.rewardToken === ethers.constants.AddressZero try { const nonce = await this.getNonceAccount(signer.address) const response = await this.contract.connect(signer).createGift(giftContractAddress, inputConfig, feeToken,{ gasLimit: 650000, - nonce: nonce + nonce: nonce, + value: isNative ? BigInt(inputConfig.totalReward) : BigInt(0) }); const { transactionHash ,events } = await response.wait() + if(isNative){ + return { + contractAddress: events[0]?.address, + transactionHash + } + } + const transferEvent = events?.find((e: { event: string }) => e.event === "Transfer") const contractAddress = transferEvent?.args['to'] @@ -43,12 +53,9 @@ export class GasSponsor extends GiftCore { nonce }) - const { transactionHash , events } = await response.wait() - - const transferEvent = events?.find((e: { event: string }) => e.event === "Transfer") - const amount = Number(transferEvent?.args['amount']) + const { transactionHash } = await response.wait() - return {transactionHash, amount} + return {transactionHash, amount: 0} } catch (error) { throw new Error(error as unknown as string) } @@ -62,14 +69,12 @@ export class GasSponsor extends GiftCore { const response = await this.contract.connect(owner).withdrawRemainingReward(giftContractAddress,{ gasLimit: 650000, - nonce + nonce, }) - const { transactionHash , events } = await response.wait() - const transferEvent = events?.find((e: { event: string }) => e.event === "Transfer") - const amount = Number(transferEvent?.args['amount']) + const { transactionHash } = await response.wait() - return {transactionHash, amount} + return {transactionHash, amount: 0} } catch (error) { throw new Error(error as unknown as string) diff --git a/src/packages/giftFactoy.ts b/src/packages/giftFactoy.ts index 7c8ebbe..9913a1c 100644 --- a/src/packages/giftFactoy.ts +++ b/src/packages/giftFactoy.ts @@ -25,12 +25,24 @@ export class GiftFactory extends GiftCore{ endTimestamp } + const signer = this.createSigner(wallet) + if(!rewardToken.address){ + const responseGift = await this.sponsorGasContract.createGifts({ + signer, + giftContractAddress: this.contractAddress, + inputConfig: { + ...inputConfig, + rewardToken: ethers.constants.AddressZero, + }, + feeToken: ethers.constants.AddressZero + }) + + return responseGift + } + // const feeConfig = await this.contract.getFee(ethers.constants.AddressZero); // const feeAmount = (BigInt(inputConfig.totalReward.toString()) * BigInt(feeConfig.percentAmount)) / BigInt(10000); // const totalRewards = BigInt(inputConfig.totalReward.toString()); - - const signer = this.createSigner(wallet) - const tokenContract = new Contract(rewardToken.address as string, ERC20ABI, signer) const nonce = await this.getNonceAccount(signer.address) const response = await tokenContract.approve(this.contractAddress,String(convertBalanceToWei(totalReward.toString(), rewardToken.decimal)),{ @@ -52,15 +64,23 @@ export class GiftFactory extends GiftCore{ } async claimGift(params: ClaimRewardParams): Promise{ + const { wallet, giftContractAddress } = params + + const slotInfo = await this.getInsertedSlot({ + giftContractAddress: giftContractAddress, + recipientAddress: wallet?.address + }) const response = await this.sponsorGasContract.claimReward(params) - return response + return {...response, amount: slotInfo.reward} } async withdrawRemainingReward(params: WithdrawRewardParams): Promise{ + const giftInfo = await this.getGiftConfig(params.giftContractAddress) + const response = await this.sponsorGasContract.withdrawRemainingReward(params) - return response + return {...response, amount: giftInfo.remainingReward} } async submitRewardRecipient(recipcient: string, giftContractAddress: string): Promise{ diff --git a/src/types/gifts.ts b/src/types/gifts.ts index f69b37b..41dbc59 100644 --- a/src/types/gifts.ts +++ b/src/types/gifts.ts @@ -6,7 +6,7 @@ export interface CreateGiftsParams { rewardToken: Partial, totalReward: number | bigint, totalSlots: number | bigint, - randomPercent: | bigint, + randomPercent: number| bigint, endTimestamp: number | bigint, baseMultiplier?: | bigint } @@ -38,7 +38,7 @@ interface BaseRewardParams{ export interface ClaimRewardParams extends BaseRewardParams{ } -export interface WithdrawRewardParams extends BaseRewardParams{} +export interface WithdrawRewardParams extends BaseRewardParams{ } interface BaseRewardRespone{ transactionHash: string