diff --git a/components/governance/ListToken/ListToken.tsx b/components/governance/ListToken/ListToken.tsx index b312e7b1..61c0018d 100644 --- a/components/governance/ListToken/ListToken.tsx +++ b/components/governance/ListToken/ListToken.tsx @@ -5,7 +5,11 @@ import { ChangeEvent, useCallback, useMemo, useState } from 'react' import mangoStore, { CLUSTER } from '@store/mangoStore' import { Token } from 'types/jupiter' import { handleGetRoutes } from '@components/swap/useQuoteRoutes' -import { JUPITER_PRICE_API_MAINNET, USDC_MINT } from 'utils/constants' +import { + JUPITER_PRICE_API_MAINNET, + JUPITER_REFERRAL_PK, + USDC_MINT, +} from 'utils/constants' import { AccountMeta, PublicKey, SYSVAR_RENT_PUBKEY } from '@solana/web3.js' import { useWallet } from '@solana/wallet-adapter-react' import { OPENBOOK_PROGRAM_ID, toNative } from '@blockworks-foundation/mango-v4' @@ -48,6 +52,7 @@ import { LISTING_PRESETS_PYTH, } from '@blockworks-foundation/mango-v4-settings/lib/helpers/listingTools' import Checkbox from '@components/forms/Checkbox' +import { ReferralProvider } from '@jup-ag/referral-sdk' type FormErrors = Partial> @@ -457,13 +462,10 @@ const ListToken = ({ goBack }: { goBack: () => void }) => { }) return } + const mint = new PublicKey(advForm.mintPk) const [mintInfoPk] = PublicKey.findProgramAddressSync( - [ - Buffer.from('MintInfo'), - group!.publicKey.toBuffer(), - new PublicKey(advForm.mintPk).toBuffer(), - ], + [Buffer.from('MintInfo'), group!.publicKey.toBuffer(), mint.toBuffer()], client.programId, ) @@ -509,7 +511,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => { .accounts({ admin: MANGO_DAO_WALLET, group: group!.publicKey, - mint: new PublicKey(advForm.mintPk), + mint: mint, oracle: new PublicKey(advForm.oraclePk), payer: MANGO_DAO_WALLET, rent: SYSVAR_RENT_PUBKEY, @@ -568,7 +570,7 @@ const ListToken = ({ goBack }: { goBack: () => void }) => { const trustlessIx = await client!.program.methods .tokenRegisterTrustless(Number(advForm.tokenIndex), advForm.name) .accounts({ - mint: new PublicKey(advForm.mintPk), + mint: mint, payer: MANGO_DAO_FAST_LISTING_WALLET, rent: SYSVAR_RENT_PUBKEY, oracle: new PublicKey(advForm.oraclePk), @@ -597,6 +599,22 @@ const ListToken = ({ goBack }: { goBack: () => void }) => { if (listingTier !== 'UNTRUSTED') { proposalTx.push(registerMarketix) } + const rp = new ReferralProvider(connection) + + const tx = await rp.initializeReferralTokenAccount({ + payerPubKey: + listingTier === 'UNTRUSTED' + ? MANGO_DAO_FAST_LISTING_WALLET + : MANGO_DAO_WALLET, + referralAccountPubKey: JUPITER_REFERRAL_PK, + mint: mint, + }) + const isExistingAccount = + (await connection.getBalance(tx.referralTokenAccountPubKey)) > 1 + + if (!isExistingAccount) { + proposalTx.push(...tx.tx.instructions) + } const walletSigner = wallet as never setCreatingProposal(true) diff --git a/package.json b/package.json index 01188b55..3fc32f3b 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@blockworks-foundation/mangolana": "0.0.1-beta.15", "@headlessui/react": "1.6.6", "@heroicons/react": "2.0.18", + "@jup-ag/referral-sdk": "0.1.5", "@metaplex-foundation/js": "0.19.4", "@project-serum/anchor": "0.25.0", "@pythnetwork/client": "2.15.0", diff --git a/utils/constants.ts b/utils/constants.ts index 19fe830c..8dee328c 100644 --- a/utils/constants.ts +++ b/utils/constants.ts @@ -167,6 +167,10 @@ export const CUSTOM_TOKEN_ICONS: { [key: string]: boolean } = { export const DEFAULT_FAVORITE_MKTS = ['SOL-PERP', 'ETH-PERP', 'BTC-PERP'] +export const JUPITER_REFERRAL_PK = new PublicKey( + 'EV4qhLE2yPKdUPdQ74EWJUn21xT3eGQxG3DRR1g9NNFc', +) + export const WHITE_LIST_API = 'https://api.mngo.cloud/whitelist/v1/' export const DAILY_SECONDS = 86400 export const DAILY_MILLISECONDS = 86400000 diff --git a/yarn.lock b/yarn.lock index 133df9cf..015f710f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,6 +24,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.2": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" + integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== + dependencies: + regenerator-runtime "^0.14.0" + "@blockworks-foundation/mango-feeds@0.1.7": version "0.1.7" resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-feeds/-/mango-feeds-0.1.7.tgz#07283e4f6b52ce2e631b866f7675b395dcc15f9e" @@ -124,7 +131,7 @@ eventemitter3 "^4.0.7" uuid "^8.3.2" -"@coral-xyz/anchor@^0.26.0", "@coral-xyz/anchor@^0.27.0", "@coral-xyz/anchor@^0.28.0", "@coral-xyz/anchor@^0.28.1-beta.2": +"@coral-xyz/anchor@0.28.1-beta.2", "@coral-xyz/anchor@^0.26.0", "@coral-xyz/anchor@^0.27.0", "@coral-xyz/anchor@^0.28.0", "@coral-xyz/anchor@^0.28.1-beta.2": version "0.27.0" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.27.0.tgz#621e5ef123d05811b97e49973b4ed7ede27c705c" integrity sha512-+P/vPdORawvg3A9Wj02iquxb4T0C5m4P6aZBVYysKl4Amk+r6aMPZkUhilBkD6E4Nuxnoajv3CFykUfkGE0n5g== @@ -655,6 +662,16 @@ "@json-rpc-tools/types" "^1.7.6" "@pedrouid/environment" "^1.0.1" +"@jup-ag/referral-sdk@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@jup-ag/referral-sdk/-/referral-sdk-0.1.5.tgz#02a8bc901154659e75a5f31ae9a3e3edd28cd6cd" + integrity sha512-0R/NuBkIj2otpLnatacZqIwVAwL+OIheSlT+a2atAaNuf2WceL4lKZ/EZWm1AVTFhmFd/07HHN9PJ2fma9AMPA== + dependencies: + "@coral-xyz/anchor" "0.28.1-beta.2" + "@solana/spl-token" "0.3.8" + "@solana/web3.js" "^1.77.3" + lodash "^4.17.21" + "@keystonehq/bc-ur-registry-sol@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-sol/-/bc-ur-registry-sol-0.3.1.tgz#5319c7c4a22cc83bbacfa6fe09aaa6fb21363f24" @@ -1031,7 +1048,7 @@ dependencies: "@noble/hashes" "1.3.1" -"@noble/curves@^1.0.0", "@noble/curves@^1.1.0": +"@noble/curves@^1.0.0", "@noble/curves@^1.1.0", "@noble/curves@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== @@ -1554,6 +1571,15 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" +"@solana/spl-token@0.3.8", "@solana/spl-token@^0.3.5", "@solana/spl-token@^0.3.6", "@solana/spl-token@^0.3.8": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.8.tgz#8e9515ea876e40a4cc1040af865f61fc51d27edf" + integrity sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + buffer "^6.0.3" + "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8": version "0.1.8" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" @@ -1566,15 +1592,6 @@ buffer-layout "^1.2.0" dotenv "10.0.0" -"@solana/spl-token@^0.3.5", "@solana/spl-token@^0.3.6", "@solana/spl-token@^0.3.8": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.8.tgz#8e9515ea876e40a4cc1040af865f61fc51d27edf" - integrity sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg== - dependencies: - "@solana/buffer-layout" "^4.0.0" - "@solana/buffer-layout-utils" "^0.2.0" - buffer "^6.0.3" - "@solana/wallet-adapter-alpha@^0.1.10": version "0.1.10" resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-alpha/-/wallet-adapter-alpha-0.1.10.tgz#497ac17634dac4de17eba643768df9b30a13129a" @@ -2055,6 +2072,27 @@ rpc-websockets "^7.5.1" superstruct "^0.14.2" +"@solana/web3.js@^1.77.3": + version "1.87.6" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.87.6.tgz#6744cfc5f4fc81e0f58241c0a92648a7320bb3bf" + integrity sha512-LkqsEBgTZztFiccZZXnawWa8qNCATEqE97/d0vIwjTclmVlc8pBpD1DmjfVHtZ1HS5fZorFlVhXfpwnCNDZfyg== + dependencies: + "@babel/runtime" "^7.23.2" + "@noble/curves" "^1.2.0" + "@noble/hashes" "^1.3.1" + "@solana/buffer-layout" "^4.0.0" + agentkeepalive "^4.3.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.0" + node-fetch "^2.6.12" + rpc-websockets "^7.5.1" + superstruct "^0.14.2" + "@solflare-wallet/metamask-sdk@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@solflare-wallet/metamask-sdk/-/metamask-sdk-1.0.2.tgz#03a49956e00481d8a7c06aaa2177635e2fd642bd"