53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
|
import type { WhitelistFlexMember } from 'components/WhitelistFlexUpload'
|
||
|
import { toast } from 'react-hot-toast'
|
||
|
|
||
|
import { isValidAddress } from './isValidAddress'
|
||
|
|
||
|
export const isValidFlexListFile = (file: WhitelistFlexMember[]) => {
|
||
|
let sumOfAmounts = 0
|
||
|
file.forEach((allocation) => {
|
||
|
sumOfAmounts += Number(allocation.mint_count)
|
||
|
})
|
||
|
if (sumOfAmounts > 10000) {
|
||
|
toast.error(`Total mint count should be less than 10000 tokens (current count: ${sumOfAmounts}))`)
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
const checks = file.map((account) => {
|
||
|
// Check if address is valid bech32 address
|
||
|
if (account.address.trim().startsWith('stars')) {
|
||
|
if (!isValidAddress(account.address.trim())) {
|
||
|
return { address: false }
|
||
|
}
|
||
|
}
|
||
|
// Check if address start with stars
|
||
|
if (!account.address.trim().startsWith('stars') && !account.address.trim().endsWith('.stars')) {
|
||
|
return { address: false }
|
||
|
}
|
||
|
// Check if amount is valid
|
||
|
if (!Number.isInteger(Number(account.mint_count)) || !(Number(account.mint_count) > 0)) {
|
||
|
return { mint_count: false }
|
||
|
}
|
||
|
return null
|
||
|
})
|
||
|
|
||
|
const isStargazeAddresses = file.every(
|
||
|
(account) => account.address.trim().startsWith('stars') || account.address.trim().endsWith('.stars'),
|
||
|
)
|
||
|
if (!isStargazeAddresses) {
|
||
|
toast.error('All accounts must be on the Stargaze network')
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
if (checks.filter((check) => check?.address === false).length > 0) {
|
||
|
toast.error('Invalid address in file')
|
||
|
return false
|
||
|
}
|
||
|
if (checks.filter((check) => check?.mint_count === false).length > 0) {
|
||
|
toast.error('Invalid mint count in file. Mint count must be a positive integer.')
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
return true
|
||
|
}
|