import { useVegaWallet, useVegaWalletDialogStore, determineId, } from '@vegaprotocol/wallet'; import { RainbowButton } from './buttons'; import { useState } from 'react'; import { CopyWithTooltip, Dialog, ExternalLink, InputError, Intent, TradingAnchorButton, TradingButton, VegaIcon, VegaIconNames, } from '@vegaprotocol/ui-toolkit'; import { addDecimalsFormatNumber } from '@vegaprotocol/utils'; import { DApp, TokenStaticLinks, useLinks } from '@vegaprotocol/environment'; import { useStakeAvailable } from './hooks/use-stake-available'; export const CreateCodeContainer = () => { const { stakeAvailable, requiredStake } = useStakeAvailable(); if (stakeAvailable == null || requiredStake == null) { return null; } return ( ); }; export const CreateCodeForm = ({ currentStakeAvailable, requiredStake, }: { currentStakeAvailable: bigint; requiredStake: bigint; }) => { const [dialogOpen, setDialogOpen] = useState(false); const openWalletDialog = useVegaWalletDialogStore( (store) => store.openVegaWalletDialog ); const { pubKey } = useVegaWallet(); return (

Create a referral code

Generate a referral code to share with your friends and start earning commission.

{ if (pubKey) { setDialogOpen(true); } else { openWalletDialog(); } }} > {pubKey ? 'Create a referral code' : 'Connect wallet'}
setDialogOpen(false)} size="small" >
); }; const CreateCodeDialog = ({ setDialogOpen, currentStakeAvailable, requiredStake, }: { setDialogOpen: (open: boolean) => void; currentStakeAvailable: bigint; requiredStake: bigint; }) => { const createLink = useLinks(DApp.Governance); const { isReadOnly, pubKey, sendTx } = useVegaWallet(); const [err, setErr] = useState(null); const [code, setCode] = useState(null); const [status, setStatus] = useState< 'idle' | 'loading' | 'success' | 'error' >('idle'); const onSubmit = () => { if (isReadOnly || !pubKey) { setErr('Not connected'); } else { setErr(null); setStatus('loading'); setCode(null); sendTx(pubKey, { createReferralSet: { isTeam: false, }, }) .then((res) => { if (!res) { setErr(`Invalid response: ${JSON.stringify(res)}`); return; } const code = determineId(res.signature); setCode(code); setStatus('success'); }) .catch((err) => { if (err.message.includes('user rejected')) { setStatus('idle'); return; } setStatus('error'); setErr(err.message); }); } }; const getButtonProps = () => { if (status === 'idle' || status === 'error') { return { children: 'Generate code', onClick: () => onSubmit(), }; } if (status === 'loading') { return { children: 'Confirm in wallet...', disabled: true, }; } if (status === 'success') { return { children: 'Close', intent: Intent.Success, onClick: () => setDialogOpen(false), }; } }; // TODO: Add when network parameters are updated if ( currentStakeAvailable === BigInt(0) || currentStakeAvailable < requiredStake ) { return (

You need at least{' '} {addDecimalsFormatNumber(requiredStake.toString(), 18)} VEGA staked to generate a referral code and participate in the referral program.

Stake some $VEGA now
); } return (
{(status === 'idle' || status === 'loading' || status === 'error') && (

Generate a referral code to share with your friends and start earning commission.

)} {status === 'success' && code && (

{code}

} > Copy
)} {err && {err}} {/* TODO: Add links */}
About the referral program Disclaimer
); };