diff --git a/package.json b/package.json
index a5ced9ac9..c83d804a6 100644
--- a/package.json
+++ b/package.json
@@ -266,7 +266,11 @@
"typescript": "4.9.4"
},
"resolutions": {
- "@types/react": "17"
+ "@types/react": "17",
+ "@helium/account-fetch-cache-hooks": "^0.4.6",
+ "@helium/helium-react-hooks": "^0.4.6",
+ "@helium/voter-stake-registry-hooks": "^0.4.6",
+ "@helium/modular-governance-hooks": "^0.0.7"
},
"jest": {
"preset": "react-native",
diff --git a/src/features/governance/GovernanceNavigator.tsx b/src/features/governance/GovernanceNavigator.tsx
index 9edf5540a..22ee09658 100644
--- a/src/features/governance/GovernanceNavigator.tsx
+++ b/src/features/governance/GovernanceNavigator.tsx
@@ -1,11 +1,12 @@
-import React, { memo } from 'react'
import {
StackNavigationOptions,
createStackNavigator,
} from '@react-navigation/stack'
+import React, { memo } from 'react'
+import { GovernanceProvider } from '@storage/GovernanceProvider'
import GovernanceScreen from './GovernanceScreen'
-import VotingPowerScreen from './VotingPowerScreen'
import ProposalScreen from './ProposalScreen'
+import VotingPowerScreen from './VotingPowerScreen'
const GovernanceStack = createStackNavigator()
const screenOptions: StackNavigationOptions = {
@@ -14,20 +15,22 @@ const screenOptions: StackNavigationOptions = {
const GovernanceStackScreen = () => {
return (
-
-
-
-
-
+
+
+
+
+
+
+
)
}
diff --git a/src/features/governance/GovernanceScreen.tsx b/src/features/governance/GovernanceScreen.tsx
index 32b7f06a8..6c0329b9e 100644
--- a/src/features/governance/GovernanceScreen.tsx
+++ b/src/features/governance/GovernanceScreen.tsx
@@ -7,18 +7,20 @@ import TokenPill from '@components/TokenPill'
import { HNT_MINT, IOT_MINT, MOBILE_MINT } from '@helium/spl-utils'
import { useNavigation } from '@react-navigation/native'
import globalStyles from '@theme/globalStyles'
-import React, { useMemo, useState } from 'react'
+import React, { useMemo } from 'react'
import { ScrollView } from 'react-native'
import { Edge } from 'react-native-safe-area-context'
+import { useGovernance } from '@storage/GovernanceProvider'
import { ProposalsList } from './ProposalsList'
import { VotingPowerCard } from './VotingPowerCard'
import { GovernanceNavigationProp } from './governanceTypes'
const GovMints = [HNT_MINT, MOBILE_MINT, IOT_MINT]
+
export const GovernanceScreen = () => {
const navigation = useNavigation()
const safeEdges = useMemo(() => ['top'] as Edge[], [])
- const [selectedMint, setSelectedMint] = useState(HNT_MINT)
+ const { mint, setMint } = useGovernance()
return (
@@ -32,25 +34,24 @@ export const GovernanceScreen = () => {
justifyContent="space-between"
marginVertical="xl"
>
- {GovMints.map((mint) => (
+ {GovMints.map((m) => (
setSelectedMint(mint)}
+ key={m.toBase58()}
+ mint={m}
+ isActive={mint.equals(m)}
+ onPress={() => setMint(m)}
activeColor="secondaryBackground"
/>
))}
{
+ onPress={async (m) => {
navigation.push('VotingPowerScreen', {
- mint: mint.toBase58(),
+ mint: m.toBase58(),
})
}}
/>
-
+
diff --git a/src/features/governance/ProposalCard.tsx b/src/features/governance/ProposalCard.tsx
index 60cc4e687..18d085e80 100644
--- a/src/features/governance/ProposalCard.tsx
+++ b/src/features/governance/ProposalCard.tsx
@@ -2,11 +2,6 @@ import Box from '@components/Box'
import Text from '@components/Text'
import TouchableOpacityBox from '@components/TouchableOpacityBox'
import { useMint } from '@helium/helium-react-hooks'
-import {
- useProposal,
- useProposalConfig,
-} from '@helium/modular-governance-hooks'
-import { useRegistrar } from '@helium/voter-stake-registry-hooks'
import { BoxProps } from '@shopify/restyle'
import { PublicKey } from '@solana/web3.js'
import { Color, Theme } from '@theme/theme'
@@ -16,30 +11,35 @@ import BN from 'bn.js'
import MarkdownIt from 'markdown-it'
import React, { useCallback, useEffect, useMemo } from 'react'
import { useAsync } from 'react-async-hook'
-import { ProposalFilter } from './governanceTypes'
+import { useGovernance } from '@storage/GovernanceProvider'
+import { ProposalFilter, ProposalV0 } from './governanceTypes'
interface IProposalCardProps extends BoxProps {
filter: ProposalFilter
+ proposal: ProposalV0
proposalKey: PublicKey
onPress?: (proposal: PublicKey) => Promise
}
+// TODO (gov): add you voted
const markdownParser = MarkdownIt()
+export const ProposalCardSkeleton = (boxProps: BoxProps) => (
+
+)
export const ProposalCard = ({
filter,
+ proposal,
proposalKey,
onPress,
...boxProps
}: IProposalCardProps) => {
- const {
- error: proposalError,
- loading: proposalLoading,
- info: proposal,
- } = useProposal(proposalKey)
-
- const { info: proposalConfig } = useProposalConfig(proposal?.proposalConfig)
- const { info: registrar } = useRegistrar(proposalConfig?.voteController)
- const decimals = useMint(registrar?.votingMints[0].mint)?.info?.decimals
+ const { mint } = useGovernance()
+ const decimals = useMint(mint)?.info?.decimals
const {
error: descError,
@@ -56,11 +56,10 @@ export const ProposalCard = ({
}
}, [proposal])
- // TODO: Remove this
+ // TODO (gov): Add better error handling
useEffect(() => {
- if (proposalError) console.error(proposalError)
if (descError) console.error(descError)
- }, [proposalError, descError])
+ }, [descError])
const votingResults = useMemo(() => {
const totalVotes: BN = [...(proposal?.choices || [])].reduce(
@@ -77,8 +76,9 @@ export const ProposalCard = ({
: (r.weight.toNumber() / totalVotes.toNumber()) * 100,
}))
.sort((a, b) => b.percent - a.percent)
+
return { results, totalVotes }
- }, [proposal?.choices])
+ }, [proposal])
const derivedState: Omit | undefined = useMemo(() => {
if (proposal?.state && proposal?.choices) {
@@ -102,10 +102,7 @@ export const ProposalCard = ({
}
}, [proposal?.state, proposal?.choices])
- const isLoading = useMemo(
- () => proposalLoading || descLoading,
- [proposalLoading, descLoading],
- )
+ const isLoading = useMemo(() => descLoading, [descLoading])
const isVisible = useMemo(() => {
if (!isLoading) {
@@ -119,20 +116,10 @@ export const ProposalCard = ({
if (onPress) await onPress(proposalKey)
}, [proposalKey, onPress])
- // todo: add total votes
- // todo: add you voted
-
if (!isVisible) return null
if (isLoading) {
- // todo: add spinner or skeleton pulse
- return (
-
- )
+ // TODO (gov): add spinner or skeleton pulse
+ return
}
return (
@@ -157,9 +144,10 @@ export const ProposalCard = ({
{proposal?.name}
-
+
{proposal?.tags.map((tag, idx) => (
0 ? 's' : 'none'}
backgroundColor={
@@ -241,7 +229,7 @@ export const ProposalCard = ({
Votes
- {humanReadable(votingResults?.totalVotes, decimals)}
+ {humanReadable(votingResults?.totalVotes, decimals) || 'None'}
diff --git a/src/features/governance/ProposalsList.tsx b/src/features/governance/ProposalsList.tsx
index fce471e5d..d25e6ce62 100644
--- a/src/features/governance/ProposalsList.tsx
+++ b/src/features/governance/ProposalsList.tsx
@@ -4,35 +4,23 @@ import ListItem from '@components/ListItem'
import Text from '@components/Text'
import TouchableOpacityBox from '@components/TouchableOpacityBox'
import { BoxProps } from '@shopify/restyle'
-import { PublicKey } from '@solana/web3.js'
import { Theme } from '@theme/theme'
-import React, { useCallback, useState, useMemo } from 'react'
-import { useNavigation } from '@react-navigation/native'
-import { useGovNetwork } from '@hooks/useGovNetwork'
-import { organizationKey, proposalKey } from '@helium/organization-sdk'
-import { useOrganization } from '@helium/modular-governance-hooks'
-import { ProposalCard } from './ProposalCard'
-import { GovernanceNavigationProp, ProposalFilter } from './governanceTypes'
+import React, { useCallback, useState } from 'react'
+// import { useNavigation } from '@react-navigation/native'
+import { useGovernance } from '@storage/GovernanceProvider'
+import { ProposalCard, ProposalCardSkeleton } from './ProposalCard'
+import {
+ // GovernanceNavigationProp,
+ ProposalFilter,
+ ProposalV0,
+} from './governanceTypes'
-interface IProposalsListProps extends BoxProps {
- mint: PublicKey
-}
-
-export const ProposalsList = ({ mint, ...boxProps }: IProposalsListProps) => {
- const navigation = useNavigation()
+type IProposalsListProps = BoxProps
+export const ProposalsList = ({ ...boxProps }: IProposalsListProps) => {
+ // const navigation = useNavigation()
+ const { proposals, loading } = useGovernance()
const [filter, setFilter] = useState('all')
const [filtersOpen, setFiltersOpen] = useState(false)
- const { network } = useGovNetwork(mint)
- const [orgKey] = organizationKey(network)
- const { info: organization } = useOrganization(orgKey)
- const proposalKeys = useMemo(
- () =>
- Array(organization?.numProposals)
- .fill(0)
- .map((_, index) => proposalKey(orgKey, index)[0])
- .reverse(),
- [organization?.numProposals, orgKey],
- )
const handleFilterPress = (f: ProposalFilter) => () => {
setFilter(f)
@@ -88,19 +76,21 @@ export const ProposalsList = ({ mint, ...boxProps }: IProposalsListProps) => {
{`Proposals: ${filter.charAt(0).toUpperCase() + filter.slice(1)}`}
- {proposalKeys?.map((pKey, idx) => (
- 0 ? 'm' : undefined}
- onPress={async (proposal) => {
- navigation.push('ProposalScreen', {
- proposal: proposal.toBase58(),
- })
- }}
- />
- ))}
+ {loading &&
+ Array(3).map((_, idx) => (
+ // eslint-disable-next-line react/no-array-index-key
+
+ ))}
+ {!loading &&
+ proposals?.map((proposal, idx) => (
+ 0 ? 'm' : undefined}
+ />
+ ))}
{
- mint: PublicKey
onPress?: (mint: PublicKey) => Promise
}
export const VotingPowerCard = ({
- mint,
onPress,
...boxProps
}: IVotingPowerCardProps) => {
+ const wallet = useCurrentWallet()
+ const { mint, votingPower, amountLocked } = useGovernance()
+ const { amount: ownedAmount, decimals } = useOwnedAmount(wallet, mint)
const { symbol } = useMetaplexMetadata(mint)
+
const handleOnPress = useCallback(async () => {
if (onPress) await onPress(mint)
}, [mint, onPress])
@@ -47,7 +54,7 @@ export const VotingPowerCard = ({
Voting Power
- 6,768,492.53
+ {humanReadable(votingPower, decimals)}
{inOverview ? (
@@ -56,7 +63,7 @@ export const VotingPowerCard = ({
{`${symbol || ''}`} Locked
- 540,000
+ {humanReadable(amountLocked, decimals)}
) : (
@@ -77,7 +84,7 @@ export const VotingPowerCard = ({
HNT Locked
- 540,000
+ {humanReadable(amountLocked, decimals)}
@@ -85,7 +92,7 @@ export const VotingPowerCard = ({
HNT Available
- 497.48730345
+ {humanReadable(new BN(ownedAmount?.toString() || 0), decimals)}
@@ -94,7 +101,9 @@ export const VotingPowerCard = ({
{inOverview && (
- You have 497.48730345 more {symbol} available to lock.
+ You have{' '}
+ {humanReadable(new BN(ownedAmount?.toString() || 0), decimals)} more{' '}
+ {symbol} available to lock.
)}
diff --git a/src/hooks/useGovNetwork.ts b/src/hooks/useGovNetwork.ts
deleted file mode 100644
index cef3478da..000000000
--- a/src/hooks/useGovNetwork.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { HNT_MINT, IOT_MINT, MOBILE_MINT } from '@helium/spl-utils'
-import { PublicKey } from '@solana/web3.js'
-
-const mintsToNetwork = {
- [HNT_MINT.toBase58()]: 'Helium',
- [MOBILE_MINT.toBase58()]: 'Helium MOBILE',
- [IOT_MINT.toBase58()]: 'Helium IOT',
-}
-
-export const useGovNetwork = (mint: PublicKey) => {
- const network = mintsToNetwork[mint.toBase58()]
- return { network }
-}
diff --git a/src/hooks/useSolanaUnixNow.ts b/src/hooks/useSolanaUnixNow.ts
new file mode 100644
index 000000000..e82e4786f
--- /dev/null
+++ b/src/hooks/useSolanaUnixNow.ts
@@ -0,0 +1,38 @@
+import { useEffect, useMemo, useState } from 'react'
+import { Connection, SYSVAR_CLOCK_PUBKEY } from '@solana/web3.js'
+import { useAsync } from 'react-async-hook'
+import { useSolana } from '../solana/SolanaProvider'
+
+export const useSolanaUnixNow = (refreshInterval = 10000) => {
+ const { connection } = useSolana()
+ const connectionWithoutCache = useMemo(() => {
+ if (connection) {
+ return new Connection(connection.rpcEndpoint)
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [connection?.rpcEndpoint])
+ const [refresh, setRefresh] = useState(0)
+
+ const { result: unixTs } = useAsync(
+ async (conn: Connection | undefined, _: number) => {
+ if (conn) {
+ const clock = await conn.getAccountInfo(SYSVAR_CLOCK_PUBKEY)
+ return Number(clock?.data.readBigInt64LE(8 * 4))
+ }
+ },
+ [connectionWithoutCache, refresh],
+ )
+
+ useEffect(() => {
+ const interval = setInterval(() => {
+ setRefresh((prev) => prev + 1)
+ }, refreshInterval)
+
+ return () => {
+ clearInterval(interval)
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [])
+
+ return unixTs
+}
diff --git a/src/solana/SolanaProvider.tsx b/src/solana/SolanaProvider.tsx
index 3cbee3aa4..a84b9f1b9 100644
--- a/src/solana/SolanaProvider.tsx
+++ b/src/solana/SolanaProvider.tsx
@@ -304,12 +304,11 @@ const initialState: {
}
const SolanaContext =
createContext>(initialState)
-const { Provider } = SolanaContext
const SolanaProvider = ({ children }: { children: ReactNode }) => {
const values = useSolanaHook()
return (
-
+
{values.cache && values.connection && (
{
)}
-
+
)
}
diff --git a/src/storage/GovernanceProvider.tsx b/src/storage/GovernanceProvider.tsx
new file mode 100644
index 000000000..be00370f1
--- /dev/null
+++ b/src/storage/GovernanceProvider.tsx
@@ -0,0 +1,219 @@
+/* eslint-disable @typescript-eslint/no-shadow */
+import { EPOCH_LENGTH, delegatedPositionKey } from '@helium/helium-sub-daos-sdk'
+import { useOrganizationProposals } from '@helium/modular-governance-hooks'
+import { organizationKey } from '@helium/organization-sdk'
+import { HNT_MINT, IOT_MINT, MOBILE_MINT, truthy } from '@helium/spl-utils'
+import {
+ PositionWithMeta,
+ calcPositionVotingPower,
+ getPositionKeys,
+ useDelegatedPositions,
+ usePositions,
+ useRegistrar,
+ getRegistrarKey,
+} from '@helium/voter-stake-registry-hooks'
+import { GetPositionsArgs as GetPosArgs } from '@helium/voter-stake-registry-hooks/lib/types/src/utils/getPositionKeys'
+import { useCurrentWallet } from '@hooks/useCurrentWallet'
+import { PublicKey } from '@solana/web3.js'
+import BN from 'bn.js'
+import React, {
+ FC,
+ ReactNode,
+ createContext,
+ useCallback,
+ useContext,
+ useMemo,
+ useState,
+} from 'react'
+import { useAsync } from 'react-async-hook'
+import { useSolanaUnixNow } from '@hooks/useSolanaUnixNow'
+import { useSolana } from '../solana/SolanaProvider'
+
+enum GovNetwork {
+ hnt = 'Helium',
+ mobile = 'Helium MOBILE',
+ iot = 'Helium IOT',
+}
+
+const mintsToNetwork: { [key: string]: GovNetwork } = {
+ [HNT_MINT.toBase58()]: GovNetwork.hnt,
+ [MOBILE_MINT.toBase58()]: GovNetwork.mobile,
+ [IOT_MINT.toBase58()]: GovNetwork.iot,
+}
+
+export interface IGovernanceContextState {
+ amountLocked?: BN
+ error: unknown
+ loading: boolean
+ mint: PublicKey
+ network: GovNetwork
+ positions?: PositionWithMeta[]
+ proposals: ReturnType['accounts']
+ votingPower?: BN
+ registrar?: ReturnType['info']
+
+ refetch: () => void
+ setMint: (mint: PublicKey) => void
+}
+
+const GovernanceContext = createContext(
+ {} as IGovernanceContextState,
+)
+
+const GovernanceProvider: FC<{ children: ReactNode }> = ({ children }) => {
+ const wallet = useCurrentWallet()
+ const { anchorProvider } = useSolana()
+ const [mint, setMint] = useState(HNT_MINT)
+ const network = useMemo(() => mintsToNetwork[mint.toBase58()], [mint])
+ const organization = useMemo(() => organizationKey(network)[0], [network])
+ const { loading: loadingProposals, accounts: proposalsWithDups } =
+ useOrganizationProposals(organization)
+ const proposals = useMemo(() => {
+ const seen = new Set()
+ return proposalsWithDups?.filter((p) => {
+ const has = seen.has(p.info?.name)
+ seen.add(p.info?.name)
+
+ return !has
+ })
+ }, [proposalsWithDups])
+
+ /// Allow refetching all NFTs by incrementing call index
+ const [callIndex, setCallIndex] = useState(0)
+ const refetch = useCallback(() => setCallIndex((i) => i + 1), [setCallIndex])
+ const getPosArgs = useMemo(
+ () =>
+ wallet &&
+ mint &&
+ anchorProvider &&
+ ({ wallet, mint, provider: anchorProvider, callIndex } as GetPosArgs),
+ [wallet, mint, anchorProvider, callIndex],
+ )
+
+ const registrarKey = useMemo(
+ () => mint && getRegistrarKey(mint),
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [mint.toBase58()],
+ )
+ const { info: registrar } = useRegistrar(registrarKey)
+ const { result, loading, error } = useAsync(
+ async (args: GetPosArgs | undefined) => {
+ if (args) {
+ return getPositionKeys(args)
+ }
+ },
+ [getPosArgs],
+ )
+
+ const delegatedPositionKeys = useMemo(() => {
+ return result?.positionKeys.map((pk) => delegatedPositionKey(pk)[0])
+ }, [result?.positionKeys])
+
+ const { accounts: delegatedAccounts, loading: loadingDel } =
+ useDelegatedPositions(delegatedPositionKeys)
+
+ const { accounts: positions, loading: loadingPositions } = usePositions(
+ result?.positionKeys,
+ )
+
+ const now = useSolanaUnixNow(60 * 5 * 1000)
+ const { amountLocked, votingPower, positionsWithMeta } = useMemo(() => {
+ if (positions && registrar && delegatedAccounts && now) {
+ let amountLocked = new BN(0)
+ let votingPower = new BN(0)
+ const mintCfgs = registrar?.votingMints
+ const positionsWithMeta = positions
+ .map((position, idx) => {
+ if (!position || !position.info) return undefined
+ const isDelegated = !!delegatedAccounts?.[idx]?.info
+ const delegatedSubDao = isDelegated
+ ? delegatedAccounts[idx]?.info?.subDao
+ : null
+ const hasRewards = isDelegated
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ delegatedAccounts[idx]!.info!.lastClaimedEpoch.add(new BN(1)).lt(
+ new BN(now).div(new BN(EPOCH_LENGTH)),
+ )
+ : false
+
+ const posVotingPower = calcPositionVotingPower({
+ position: position?.info || null,
+ registrar,
+ unixNow: new BN(now),
+ })
+
+ amountLocked = amountLocked.add(position.info.amountDepositedNative)
+ votingPower = votingPower.add(posVotingPower)
+
+ return {
+ ...position.info,
+ pubkey: position?.publicKey,
+ isDelegated,
+ delegatedSubDao,
+ hasRewards,
+ hasGenesisMultiplier: position.info.genesisEnd.gt(new BN(now)),
+ votingPower: posVotingPower,
+ votingMint: mintCfgs[position.info.votingMintConfigIdx],
+ } as PositionWithMeta
+ })
+ .filter(truthy)
+
+ return {
+ positionsWithMeta,
+ amountLocked,
+ votingPower,
+ }
+ }
+
+ return {}
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [positions, registrar, delegatedAccounts, now])
+
+ const ret = useMemo(
+ () => ({
+ amountLocked,
+ error,
+ loading: loading || loadingProposals || loadingPositions || loadingDel,
+ mint,
+ network,
+ positions: positionsWithMeta,
+ proposals,
+ refetch,
+ registrar,
+ setMint,
+ votingPower,
+ }),
+ [
+ amountLocked,
+ error,
+ loading,
+ loadingDel,
+ loadingPositions,
+ loadingProposals,
+ mint,
+ network,
+ positionsWithMeta,
+ proposals,
+ refetch,
+ registrar,
+ setMint,
+ votingPower,
+ ],
+ )
+
+ return (
+
+ {children}
+
+ )
+}
+
+const useGovernance = () => {
+ const context = useContext(GovernanceContext)
+ if (context === undefined) {
+ throw new Error('useGovernance must be used within a GovernanceProvider')
+ }
+ return context
+}
+
+export { GovernanceProvider, useGovernance }
diff --git a/src/storage/ModalsProvider.tsx b/src/storage/ModalsProvider.tsx
index f34026904..45694276b 100644
--- a/src/storage/ModalsProvider.tsx
+++ b/src/storage/ModalsProvider.tsx
@@ -49,7 +49,7 @@ const ModalProvider: FC<{ children: ReactNode }> = ({ children }) => {
const useModal = () => {
const context = useContext(ModalContext)
if (context === undefined) {
- throw new Error('useModal must be used within a DrawerProvider')
+ throw new Error('useModal must be used within a ModalProvider')
}
return context
}
diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts
index d00510edd..ed1704b4b 100644
--- a/src/utils/formatting.ts
+++ b/src/utils/formatting.ts
@@ -1,5 +1,6 @@
import BN from 'bn.js'
import { Mint } from '@solana/spl-token'
+import { groupSeparator, decimalSeparator } from './i18n'
export const getMintMinAmountAsDecimal = (mint: Mint) => {
return 1 * 10 ** -mint.decimals
@@ -16,15 +17,6 @@ export const calculatePct = (c = new BN(0), total?: BN) => {
.toNumber()
}
-const getSeparator = (separatorType: 'group' | 'decimal') => {
- const numberWithGroupAndDecimalSeparator = 1000.1
- const parts = Intl.NumberFormat().formatToParts(
- numberWithGroupAndDecimalSeparator,
- )
- const part = parts.find((p) => p.type === separatorType)
- return part ? part.value : ''
-}
-
export const humanReadable = (
amount?: BN,
decimals?: number,
@@ -36,7 +28,7 @@ export const humanReadable = (
input.length > decimals ? input.slice(0, input.length - decimals) : ''
const formattedIntegerPart = integerPart.replace(
/\B(?=(\d{3})+(?!\d))/g,
- getSeparator('group'),
+ groupSeparator,
)
const decimalPart =
decimals !== 0
@@ -47,7 +39,7 @@ export const humanReadable = (
: ''
return `${formattedIntegerPart.length > 0 ? formattedIntegerPart : '0'}${
- Number(decimalPart) !== 0 ? `${getSeparator('decimal')}${decimalPart}` : ''
+ Number(decimalPart) !== 0 ? `${decimalSeparator}${decimalPart}` : ''
}`
}
diff --git a/src/utils/governance.ts b/src/utils/governance.ts
new file mode 100644
index 000000000..e69de29bb
diff --git a/yarn.lock b/yarn.lock
index 28abb7522..b23367b62 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2362,28 +2362,19 @@
dependencies:
"@hapi/hoek" "^9.0.0"
-"@helium/account-fetch-cache-hooks@^0.4.3":
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache-hooks/-/account-fetch-cache-hooks-0.4.3.tgz#792b34acaf3a79a5705aa035a0839925300de409"
- integrity sha512-dL/nKiUZQCnPdTW2qwIdNLr664UARA4Rz8mGfrdDcS5NHP+3tyms0GCCwwSR/sZuGD/FGT89TsZRoxSZlRDe9g==
- dependencies:
- "@helium/account-fetch-cache" "^0.4.3"
- "@solana/web3.js" "^1.78.4"
- react-async-hook "^4.0.0"
-
-"@helium/account-fetch-cache-hooks@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache-hooks/-/account-fetch-cache-hooks-0.4.5.tgz#45ef5a0cd99e270f0b7442d85f78a7c0186771e5"
- integrity sha512-fZtWppLdE+WUn1hqnOS+diIyGeaZrb2Hk49KbGgrv2C1A29WY6PoXwjLzKsDTpQO2s8iQ5UzTnoRCCqMmZnvxQ==
+"@helium/account-fetch-cache-hooks@^0.4.3", "@helium/account-fetch-cache-hooks@^0.4.5", "@helium/account-fetch-cache-hooks@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache-hooks/-/account-fetch-cache-hooks-0.4.6.tgz#7622521c99d8d6c0acd5b874b12bd64c05893d90"
+ integrity sha512-tqG7edFTxuZso7iNSMregqWmCN36OIn+KKi71mv2Wr+CCYtLbCXGuiWMDN85AMqiv8GF1z22QXJGX9RGr8FeZA==
dependencies:
- "@helium/account-fetch-cache" "^0.4.5"
+ "@helium/account-fetch-cache" "^0.4.6"
"@solana/web3.js" "^1.78.4"
react-async-hook "^4.0.0"
-"@helium/account-fetch-cache@^0.4.3":
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache/-/account-fetch-cache-0.4.3.tgz#279d50ebf8a0d0d677017d487e7d6e28d9fb5af4"
- integrity sha512-Oywq02vNCeP44c5gwrIw5I6MqMRqX4p+gi8UYsx7tQiqrp1LxxQcZItg6rjJUM7fMFU38o1Qz2BeZkQYU/kybA==
+"@helium/account-fetch-cache@^0.4.3", "@helium/account-fetch-cache@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/account-fetch-cache/-/account-fetch-cache-0.4.6.tgz#6ff395407292740e4aebebaa29f53f996193cc7b"
+ integrity sha512-Db4mE4+dYycN+qSlSezDJYcX8UD/pwKtBEao9rlFxeuGkJox/6hMdyA9FBF21bQdcqofJhG/QFfMqh+5YsU+rw==
dependencies:
"@solana/web3.js" "^1.78.4"
@@ -2403,10 +2394,10 @@
js-sha256 "^0.9.0"
multiformats "^9.6.4"
-"@helium/anchor-resolvers@^0.4.3":
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/@helium/anchor-resolvers/-/anchor-resolvers-0.4.3.tgz#6d7afba53b5e58d265e3f2d482521f2eef664c5e"
- integrity sha512-VUEWucAdRyBgQ2XhnCQNn8L1fAp/dk8dOlrz8RudVFruEvJaUvmLwLKAKQJkt8dVoapcOBh3ywO7c9avop58TQ==
+"@helium/anchor-resolvers@^0.4.3", "@helium/anchor-resolvers@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/anchor-resolvers/-/anchor-resolvers-0.4.6.tgz#530bffdeb9f4b83ccc98d18ad1af932c67d09078"
+ integrity sha512-9Uy8kr/6DUZhNZQZfg0wg9F+DZGglj2YJoS1DB5gIDVcU6nWY6Sbd08jJnk30rjKBAn55a5mI6vs1LpMF2H7VA==
dependencies:
"@solana/spl-token" "^0.3.8"
"@solana/web3.js" "^1.78.4"
@@ -2431,14 +2422,14 @@
bn.js "^5.2.0"
bs58 "^4.0.1"
-"@helium/circuit-breaker-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/circuit-breaker-sdk/-/circuit-breaker-sdk-0.4.5.tgz#63d551218013825d46394ea25491cc4566973236"
- integrity sha512-m9abZH5k4hXlLMxfw0JHPOT/zOrn72Vu6VF1kpNtXo9aXhJmskyLssN77KU5m8Y417c0Bwob7C2viGqCOEoPxQ==
+"@helium/circuit-breaker-sdk@^0.4.5", "@helium/circuit-breaker-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/circuit-breaker-sdk/-/circuit-breaker-sdk-0.4.6.tgz#d7ef771d8b34404a0b5f7ae3bdeacfba1daf6a72"
+ integrity sha512-opCs0gkOULy47Hg0jo1R0HathentE3WjKgbb3eCHFIrggBcBqIdu4kJEzM2DuvpHiTkrRf0+Rh5gR1b2gv384w==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/idls" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/idls" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
@@ -2462,9 +2453,9 @@
"@solana/web3.js" "^1.73.0"
"@helium/currency-utils@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/currency-utils/-/currency-utils-0.4.5.tgz#d655f9b0924b1456bdaa9d1377ee46ca81899c9e"
- integrity sha512-dnpzIjTWORnMHPpR4alAzMtms7st56q836aLmQYquiTejmEW8MoN8rdXCvnoTHHx7P3CF0RoSm8z2i/syl5Eow==
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/currency-utils/-/currency-utils-0.4.6.tgz#0f281c8f3f60f8e49e10c74f1793ad79211f2d29"
+ integrity sha512-VnGPzP3oefrkCFeeMeHw0rwc1l5jgbrcXuR8FQXgbeRyDu6603dLsAiyXY5pMS/4UUMJzW0dnefJgy1byRYn/w==
dependencies:
"@pythnetwork/client" "^2.12.0"
"@solana/spl-token" "^0.3.8"
@@ -2493,34 +2484,34 @@
crypto-js "^4.1.1"
"@helium/data-credits-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/data-credits-sdk/-/data-credits-sdk-0.4.5.tgz#452910a0e70517051d516b38cf161608d0a62429"
- integrity sha512-GaUAMdPSEiivz0fPVMnqdpKRXfN62YO+dnAmxm/eCZROwlQuayCxC5GS55qiq7fLhbkILtM7ImlXih+OBmkJBg==
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/data-credits-sdk/-/data-credits-sdk-0.4.6.tgz#4025eccf74dbae0364ebd77019c514a99c0e4c5c"
+ integrity sha512-W24ap6QGV8V+LLmdBGrxh+VetbsLz2oDLnf4DzzSQa5psQt1JWFWUXgomEFf7GZ/PCjZaa2FIBqSkD3rzU1D+A==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/circuit-breaker-sdk" "^0.4.5"
- "@helium/helium-sub-daos-sdk" "^0.4.5"
- "@helium/idls" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/circuit-breaker-sdk" "^0.4.6"
+ "@helium/helium-sub-daos-sdk" "^0.4.6"
+ "@helium/idls" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
crypto-js "^4.1.1"
"@helium/distributor-oracle@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/distributor-oracle/-/distributor-oracle-0.4.5.tgz#1c57ac7e7b505f6dd6c2ed3e2a69c327e381a723"
- integrity sha512-lBfb5P5SWlbDHMEeFQxy+6UiB1Qqw+6CxHnLZ5ZXkrOYN5xt6VNM9mOFUGmvlMMkIFi0I3Hyy07bEmAX5q5wuA==
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/distributor-oracle/-/distributor-oracle-0.4.6.tgz#42b3e1096d3522f8caa0dd3c4760fa3b51e5ca76"
+ integrity sha512-Cyji/AeObbeoynQ2LtJ+Bzu1oqypjeUPgc5d3l9RYrykVwCD0/lbfH3Ehqiv00QSftBhvauNlC4jz5uuMiQMSQ==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
"@fastify/cors" "^8.1.1"
- "@helium/account-fetch-cache" "^0.4.5"
+ "@helium/account-fetch-cache" "^0.4.6"
"@helium/address" "^4.10.2"
- "@helium/helium-entity-manager-sdk" "^0.4.5"
- "@helium/helium-sub-daos-sdk" "^0.4.5"
- "@helium/idls" "^0.4.5"
- "@helium/lazy-distributor-sdk" "^0.4.5"
- "@helium/rewards-oracle-sdk" "^0.4.5"
- "@helium/spl-utils" "^0.4.5"
+ "@helium/helium-entity-manager-sdk" "^0.4.6"
+ "@helium/helium-sub-daos-sdk" "^0.4.6"
+ "@helium/idls" "^0.4.6"
+ "@helium/lazy-distributor-sdk" "^0.4.6"
+ "@helium/rewards-oracle-sdk" "^0.4.6"
+ "@helium/spl-utils" "^0.4.6"
"@metaplex-foundation/mpl-bubblegum" "^0.7.0"
"@solana/spl-token" "^0.3.8"
"@types/sequelize" "^4.28.14"
@@ -2537,13 +2528,13 @@
typescript-collections "^1.3.3"
"@helium/fanout-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/fanout-sdk/-/fanout-sdk-0.4.5.tgz#e577b8c6b6369e0262e72e6e2ca6d97b8727b2db"
- integrity sha512-X6wskA6RLPYPb+xYoUKTNIp4qcxoUawQxo3KpwPhIFS601/feUCjvYkvH/5OTuoba8NtDH+fxSseZspb1bwrfg==
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/fanout-sdk/-/fanout-sdk-0.4.6.tgz#6d0f66ab3bcd22f6e3cab2c21fd5b375e17eef19"
+ integrity sha512-KRnwUlYNhQw9+AtGwApGx14i1N4zm1MvsZsyNmxyaxfq+j0bQA0RMdBd7yPcXmFnJTTepw2ntxhtBB2FDVbUBg==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/idls" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/idls" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
@@ -2566,44 +2557,30 @@
crypto-js "^4.1.1"
js-sha256 "^0.9.0"
-"@helium/helium-entity-manager-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/helium-entity-manager-sdk/-/helium-entity-manager-sdk-0.4.5.tgz#8f529eb7c5fc934e4f06ea15c791f95b03dd2e0f"
- integrity sha512-1Eq4n+vT92zUYYpTHQL6BmG3/qlq6/2o33HYS2JazVzhXvpnWs3GYVU6w1IZbk1wQgAxPCCjfefl1WfZgJAkLA==
+"@helium/helium-entity-manager-sdk@^0.4.5", "@helium/helium-entity-manager-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/helium-entity-manager-sdk/-/helium-entity-manager-sdk-0.4.6.tgz#c66b50e047daaa28120c1d96e92697d7ed8c50f4"
+ integrity sha512-PWhxattAeqLxN9U2TIQnVRw8MkUD0ioZtd81sRKUUeHQO5+YzhEqzbPvemnUmdk1ASAmqQFt66bfrmS/H5EFaA==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
"@helium/address" "^4.10.2"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/helium-sub-daos-sdk" "^0.4.5"
- "@helium/idls" "^0.4.5"
- "@helium/spl-utils" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/helium-sub-daos-sdk" "^0.4.6"
+ "@helium/idls" "^0.4.6"
+ "@helium/spl-utils" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
crypto-js "^4.1.1"
js-sha256 "^0.9.0"
-"@helium/helium-react-hooks@^0.4.3":
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/@helium/helium-react-hooks/-/helium-react-hooks-0.4.3.tgz#17c63eaf6f16198cc93b019882b1b4ce30bdfbb1"
- integrity sha512-L84yxlFSWeocMdjQqUA9Cs7QIfEBaZeqQLlJ/w/hZcH8njg4OKX5Foa4eDMxdT2akPxGW3BghgLRcb0F77GBpA==
- dependencies:
- "@coral-xyz/anchor" "^0.28.0"
- "@helium/account-fetch-cache" "^0.4.3"
- "@helium/account-fetch-cache-hooks" "^0.4.3"
- "@solana/spl-token" "^0.3.8"
- "@solana/web3.js" "^1.78.4"
- bs58 "^4.0.1"
- pako "^2.0.3"
- react-async-hook "^4.0.0"
-
-"@helium/helium-react-hooks@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/helium-react-hooks/-/helium-react-hooks-0.4.5.tgz#6b6692f19db4cfa68b2e2299d144363d23068738"
- integrity sha512-23i4du838S6RWK/DjzFsf5OnNnjyY3P1OtoAr1FJ9a7RQBuDa2E2kjFeRjVEko0uWjycT/DRCMV/7rQzrde+pQ==
+"@helium/helium-react-hooks@^0.4.3", "@helium/helium-react-hooks@^0.4.5", "@helium/helium-react-hooks@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/helium-react-hooks/-/helium-react-hooks-0.4.6.tgz#827adca14d7fde3f2c485e4e461521b73b3dc29e"
+ integrity sha512-3SVeuTQ/VFoUb6fumzqYjAQEiqGjljP8jtGdp7emvHMGLUXRdDLdhfs+UubevPfIREpU/gir9CwijnDOidnCHw==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/account-fetch-cache" "^0.4.5"
- "@helium/account-fetch-cache-hooks" "^0.4.5"
+ "@helium/account-fetch-cache" "^0.4.6"
+ "@helium/account-fetch-cache-hooks" "^0.4.6"
"@solana/spl-token" "^0.3.8"
"@solana/web3.js" "^1.78.4"
bs58 "^4.0.1"
@@ -2623,16 +2600,16 @@
bn.js "^5.2.0"
bs58 "^4.0.1"
-"@helium/helium-sub-daos-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/helium-sub-daos-sdk/-/helium-sub-daos-sdk-0.4.5.tgz#e64573b3592c50e55f32086d3a26223293e74255"
- integrity sha512-s2K5relWDsDbjOFeN9E8noxPI0JeF3VfYDZZOqHZx926eQ/R+oj46lfVYCvamaaey20i3a/l+ZdVkpKsKskidQ==
+"@helium/helium-sub-daos-sdk@^0.4.5", "@helium/helium-sub-daos-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/helium-sub-daos-sdk/-/helium-sub-daos-sdk-0.4.6.tgz#6eabe557bf25753a862db1d212de914afb703c5d"
+ integrity sha512-1H+sU2zXKHLYqA2VU6s8MLr16R/wXqjU6NpONOejuZ2CqVlQm+Ggo71P5zE+IVfGzHGDeRol9XGjdO/WyQhTWg==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/circuit-breaker-sdk" "^0.4.5"
- "@helium/treasury-management-sdk" "^0.4.5"
- "@helium/voter-stake-registry-sdk" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/circuit-breaker-sdk" "^0.4.6"
+ "@helium/treasury-management-sdk" "^0.4.6"
+ "@helium/voter-stake-registry-sdk" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
@@ -2684,10 +2661,10 @@
borsh "^0.7.0"
bs58 "^4.0.1"
-"@helium/idls@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/idls/-/idls-0.4.5.tgz#17170d83ec592164c67f293c1a5c50dc17107368"
- integrity sha512-jCvjj7yio3ktYwJgxKBYpoeA5Pr1fryDuQ9jQanbi5hDwqJr0Tkob7emyEYBEgBHZvpvryl3vfbmFgBHruUvvQ==
+"@helium/idls@^0.4.5", "@helium/idls@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/idls/-/idls-0.4.6.tgz#aaa8693a289c4aee530fa925a544371b16745b2c"
+ integrity sha512-/e3tTZN9D+1shCZTr299gbj5cQo4iFO2uRLTs5/Mc0wHipG/u+hsrG+W6AU4GS0B/C+l9+yhmqzdvUbwo3B0cw==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
"@solana/web3.js" "^1.78.4"
@@ -2695,18 +2672,18 @@
borsh "^0.7.0"
bs58 "^4.0.1"
-"@helium/lazy-distributor-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/lazy-distributor-sdk/-/lazy-distributor-sdk-0.4.5.tgz#c9496ee207f8659fa70c808562ea8d8511007333"
- integrity sha512-k/xPB1PA11HLArTXtdxU35CIS772/CIPmnDwDqUZKnSVOlclEMtEtKZgclzzihJDmg5qquAEZhkv/mihgStVKA==
+"@helium/lazy-distributor-sdk@^0.4.5", "@helium/lazy-distributor-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/lazy-distributor-sdk/-/lazy-distributor-sdk-0.4.6.tgz#ddccfee80400559358b1e79ee0de7780ed6ce905"
+ integrity sha512-CeiBtRCpbTkLqexpl2P7k+oi36nRuwD8tXL0Tt7eCtHEKhHCEhserykBSDvN52/JxNtxy2z3e3GARvS6X9dN4w==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/circuit-breaker-sdk" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/circuit-breaker-sdk" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
-"@helium/modular-governance-hooks@0.0.6", "@helium/modular-governance-hooks@^0.0.6":
+"@helium/modular-governance-hooks@^0.0.6":
version "0.0.6"
resolved "https://registry.yarnpkg.com/@helium/modular-governance-hooks/-/modular-governance-hooks-0.0.6.tgz#31282c63308fc9ed4d751e634c62cf3820003150"
integrity sha512-2jst3Q5EImo+lVW7fk6JO9V6egyTDqW9FseFJAUulGK9cBXbOqs3ZdcyhK2i3I9ASLb+8BIqbCoWplh8+Hf0qA==
@@ -2719,10 +2696,23 @@
"@helium/organization-sdk" "^0.0.6"
"@solana/web3.js" "^1.78.4"
-"@helium/modular-governance-idls@^0.0.6":
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/@helium/modular-governance-idls/-/modular-governance-idls-0.0.6.tgz#1c9db69ac702f78d3de5e514b67f978fdacb1620"
- integrity sha512-uH0hor5G3UgJ97tFaRwx5TxEpueP8yE+28ufeIgEydXzc8QPKkIrAWr2VGSMyeIepgZUEd+DPMlKK+KfvGVR4Q==
+"@helium/modular-governance-hooks@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@helium/modular-governance-hooks/-/modular-governance-hooks-0.0.7.tgz#b19fef3842d7eecf6d542806b0f2ee87452b9f11"
+ integrity sha512-rR7Hfa5tc+r7abUtay4YY3POP82Ad9v9E26t0KyKGG3LbtHEE2Q0jyAICu/eNUbofJikkROx4dvGzIndoAsULA==
+ dependencies:
+ "@coral-xyz/anchor" "^0.28.0"
+ "@helium/account-fetch-cache" "^0.4.5"
+ "@helium/account-fetch-cache-hooks" "^0.4.5"
+ "@helium/helium-react-hooks" "^0.4.5"
+ "@helium/modular-governance-idls" "^0.0.7"
+ "@helium/organization-sdk" "^0.0.7"
+ "@solana/web3.js" "^1.78.4"
+
+"@helium/modular-governance-idls@^0.0.6", "@helium/modular-governance-idls@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@helium/modular-governance-idls/-/modular-governance-idls-0.0.7.tgz#b10b6b3e1ed596957573e040c8fe11a22dd04618"
+ integrity sha512-o4mmh71EJ47JQs+R1sthAO3K3y1HESx1QMq99CLBD5Tp46sKZTdt9jb6FP9Gl9S23U4lo02YLtqPORaw5lV0jw==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
"@solana/web3.js" "^1.78.4"
@@ -2755,6 +2745,16 @@
"@helium/modular-governance-idls" "^0.0.6"
"@helium/proposal-sdk" "^0.0.6"
+"@helium/organization-sdk@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@helium/organization-sdk/-/organization-sdk-0.0.7.tgz#6590b296e04259ea6c0c6724b540e73f722fcc77"
+ integrity sha512-zE3MNcG52b+IpD0ljOIzIv0q0Xzwh0I2vHrG8G+R5PcVeQlj/adQur3Vx5hyBAXmoA86uEgjTKl6KXBV6cYekw==
+ dependencies:
+ "@coral-xyz/anchor" "^0.28.0"
+ "@helium/anchor-resolvers" "^0.4.5"
+ "@helium/modular-governance-idls" "^0.0.7"
+ "@helium/proposal-sdk" "^0.0.7"
+
"@helium/proposal-sdk@^0.0.6":
version "0.0.6"
resolved "https://registry.yarnpkg.com/@helium/proposal-sdk/-/proposal-sdk-0.0.6.tgz#7d37b98532bc68961e5440739b05c7d8ac3135d7"
@@ -2764,6 +2764,15 @@
"@helium/anchor-resolvers" "^0.4.3"
"@helium/modular-governance-idls" "^0.0.6"
+"@helium/proposal-sdk@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@helium/proposal-sdk/-/proposal-sdk-0.0.7.tgz#2aa2b4322e8c194b8b529334ba1a669a6a47f4f6"
+ integrity sha512-32KFHa086YIQIfe3DGaR4a8m+w1bphJ1YTweO6ZdEURLdACQIFC1Q1zQG7p4dK+M4zavHMiVTVPGxnNDBUp7nw==
+ dependencies:
+ "@coral-xyz/anchor" "^0.28.0"
+ "@helium/anchor-resolvers" "^0.4.5"
+ "@helium/modular-governance-idls" "^0.0.7"
+
"@helium/proto-ble@4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@helium/proto-ble/-/proto-ble-4.0.0.tgz#dd2800d0dbbfc793ea5cb6b45e7613f490f8a4d8"
@@ -2818,14 +2827,14 @@
text-encoding-polyfill "^0.6.7"
typescript-collections "^1.3.3"
-"@helium/rewards-oracle-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/rewards-oracle-sdk/-/rewards-oracle-sdk-0.4.5.tgz#9ed8e9808677274d69c2c177a65b318a6171ee0d"
- integrity sha512-N0BBzIBK60zUPEMo9NZ6CbWgoLB013y0nYRbYKWlS2JpoWHE8mPFOMTqQUaYVoLR2f/qAXfYCxGBcguWcjhGEA==
+"@helium/rewards-oracle-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/rewards-oracle-sdk/-/rewards-oracle-sdk-0.4.6.tgz#eda89fbeff2221d8edc325d6e0b702abea13f9d4"
+ integrity sha512-dpemdLP1G5kgBj1Xfo5E/KWWabXGKCKuDcyAjjcKFV1yvvDSybLrylp+hRp6DP9HD6gOlLzyIGTEGBLPxSiY6g==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/idls" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/idls" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
@@ -2856,15 +2865,15 @@
borsh "^0.7.0"
bs58 "^5.0.0"
-"@helium/spl-utils@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/spl-utils/-/spl-utils-0.4.5.tgz#49f0e23e49abfe331fcb2d66f6df686c4f24f7c5"
- integrity sha512-tENzWoIfQOBbRDzVR2YBudlBpTBS+N6TcRqTMJUf+PHdQWb3KItVOT9HA6dCAgVLHDHeOmntbQQZ2kffjGSw7w==
+"@helium/spl-utils@^0.4.5", "@helium/spl-utils@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/spl-utils/-/spl-utils-0.4.6.tgz#318c4c41575675dad4a85cf2faeda127704bad31"
+ integrity sha512-aEFu0qO44VO9wTE6p2rb/Fv6VDQQCEUGCcjuIjpr5ugeMxWQMg1apTZ6E39ReuOfZFnZpk4nazW4BuoVNWRWpA==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/account-fetch-cache" "^0.4.5"
+ "@helium/account-fetch-cache" "^0.4.6"
"@helium/address" "^4.10.2"
- "@helium/anchor-resolvers" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
"@metaplex-foundation/mpl-token-metadata" "^2.10.0"
"@solana/spl-account-compression" "^0.1.7"
"@solana/spl-token" "^0.3.8"
@@ -2918,31 +2927,31 @@
bn.js "^5.2.0"
bs58 "^4.0.1"
-"@helium/treasury-management-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/treasury-management-sdk/-/treasury-management-sdk-0.4.5.tgz#6bff50967e64fc93dae71a0b2678491b444d591e"
- integrity sha512-x3wjbPhgQ+NjIvvr/98D5TKd8R223E45vASCsOgyobo5Yxtjh0Jh43UKTxxK6iklYDMz0RAPz+rbITYjYDEvKw==
+"@helium/treasury-management-sdk@^0.4.5", "@helium/treasury-management-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/treasury-management-sdk/-/treasury-management-sdk-0.4.6.tgz#49a9b7b45d5f670b84003e91e16705597deaaa60"
+ integrity sha512-WNcYXMTdiVbDC2pW3MR2aJQw7cWZHCt9PIEOQHQSKp9g2vVmBoxE8dyOLL+Rz9vTYAowt3uHUU2ho8xWQMBg+A==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/circuit-breaker-sdk" "^0.4.5"
- "@helium/idls" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/circuit-breaker-sdk" "^0.4.6"
+ "@helium/idls" "^0.4.6"
bn.js "^5.2.0"
bs58 "^4.0.1"
-"@helium/voter-stake-registry-hooks@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/voter-stake-registry-hooks/-/voter-stake-registry-hooks-0.4.5.tgz#deec613925dafbfc8269eee926990f86d397ff22"
- integrity sha512-zw9ZXmmiTlH8n0/iX3YqKkXg+34gq2f28P9ZaSoYUAjT3Pw0kyeXOhI8sFT8Mx5/9xVOrUKHMRHBvK4OCZrgMA==
+"@helium/voter-stake-registry-hooks@^0.4.5", "@helium/voter-stake-registry-hooks@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/voter-stake-registry-hooks/-/voter-stake-registry-hooks-0.4.6.tgz#2494f1052d02f9993160875568a558ee890733a1"
+ integrity sha512-LJrl5uvIHDTc4KQZTv9VBiWFWEr9H6Uu0UwvK2ipF+In738JHUnbhoOR8why7hpHPqF+yFwKSvUbIdqEHTz73g==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/account-fetch-cache" "^0.4.5"
- "@helium/account-fetch-cache-hooks" "^0.4.5"
- "@helium/helium-react-hooks" "^0.4.5"
- "@helium/helium-sub-daos-sdk" "^0.4.5"
- "@helium/modular-governance-hooks" "0.0.6"
- "@helium/spl-utils" "^0.4.5"
- "@helium/voter-stake-registry-sdk" "^0.4.5"
+ "@helium/account-fetch-cache" "^0.4.6"
+ "@helium/account-fetch-cache-hooks" "^0.4.6"
+ "@helium/helium-react-hooks" "^0.4.6"
+ "@helium/helium-sub-daos-sdk" "^0.4.6"
+ "@helium/modular-governance-hooks" "^0.0.7"
+ "@helium/spl-utils" "^0.4.6"
+ "@helium/voter-stake-registry-sdk" "^0.4.6"
"@metaplex-foundation/js" "^0.19.4"
"@solana/wallet-adapter-base" "^0.9.22"
"@solana/wallet-adapter-react" "^0.15.32"
@@ -2976,14 +2985,14 @@
bn.js "^5.2.0"
bs58 "^4.0.1"
-"@helium/voter-stake-registry-sdk@^0.4.5":
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/@helium/voter-stake-registry-sdk/-/voter-stake-registry-sdk-0.4.5.tgz#3a6f8c5b5e93070426351172b658d4dbb3374b95"
- integrity sha512-B6/v3qX1arLULJ/T7RsqnrtLILTVoOuPYv8Rbo99bxZZ8/tsyCkifpNQocvHtC9vIihPRx3YNPely34QFC0oxg==
+"@helium/voter-stake-registry-sdk@^0.4.5", "@helium/voter-stake-registry-sdk@^0.4.6":
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/@helium/voter-stake-registry-sdk/-/voter-stake-registry-sdk-0.4.6.tgz#f14a22e07a7afedc4b7631e8123f5aea1c683e24"
+ integrity sha512-G9pBxFZV3wdhtJy9NFq6Y5E/XdfmIauqX/dG1k6dl+BI/l4OjxnA+OODOv3UAAummwg5l38G1XwivIfKxwAkhA==
dependencies:
"@coral-xyz/anchor" "^0.28.0"
- "@helium/anchor-resolvers" "^0.4.5"
- "@helium/idls" "^0.4.5"
+ "@helium/anchor-resolvers" "^0.4.6"
+ "@helium/idls" "^0.4.6"
"@metaplex-foundation/mpl-token-metadata" "^2.10.0"
"@solana/spl-token" "^0.3.8"
bn.js "^5.2.0"