GDA Pool
API reference for GDA Pool contract interactions
The GDA Pool contract represents a distribution pool where tokens can be distributed to multiple members based on their allocated units.
Read Functions
getUnits
Get the number of units allocated to a specific member.
import { useReadGdaPool } from "@sfpro/sdk/hook"
const { data: units } = useReadGdaPool({
address: "0x...", // Pool address
functionName: "getUnits",
args: ["0x..."] // Member address
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createPublicClient, http } from "viem"
import { mainnet } from "viem/chains"
const client = createPublicClient({
chain: mainnet,
transport: http()
})
const units = await client.readContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "getUnits",
args: ["0x..."] // Member address
})
import { readGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { http } from "viem"
import { mainnet } from "viem/chains"
const config = createConfig({
chains: [mainnet],
transports: { [mainnet.id]: http() }
})
const units = await readGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "getUnits",
args: ["0x..."] // Member address
})
getTotalUnits
Get the total number of units in the pool.
import { useReadGdaPool } from "@sfpro/sdk/hook"
const { data: totalUnits } = useReadGdaPool({
address: "0x...", // Pool address
functionName: "getTotalUnits"
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createPublicClient, http } from "viem"
import { mainnet } from "viem/chains"
const client = createPublicClient({
chain: mainnet,
transport: http()
})
const totalUnits = await client.readContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "getTotalUnits"
})
import { readGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { http } from "viem"
import { mainnet } from "viem/chains"
const config = createConfig({
chains: [mainnet],
transports: { [mainnet.id]: http() }
})
const totalUnits = await readGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "getTotalUnits"
})
getClaimableNow
Get the amount of tokens claimable by a member at the current moment.
import { useReadGdaPool } from "@sfpro/sdk/hook"
const { data: claimable } = useReadGdaPool({
address: "0x...", // Pool address
functionName: "getClaimableNow",
args: ["0x..."] // Member address
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createPublicClient, http } from "viem"
import { mainnet } from "viem/chains"
const client = createPublicClient({
chain: mainnet,
transport: http()
})
const claimable = await client.readContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "getClaimableNow",
args: ["0x..."] // Member address
})
import { readGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { http } from "viem"
import { mainnet } from "viem/chains"
const config = createConfig({
chains: [mainnet],
transports: { [mainnet.id]: http() }
})
const claimable = await readGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "getClaimableNow",
args: ["0x..."] // Member address
})
admin
Get the admin address of the pool.
import { useReadGdaPool } from "@sfpro/sdk/hook"
const { data: admin } = useReadGdaPool({
address: "0x...", // Pool address
functionName: "admin"
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createPublicClient, http } from "viem"
import { mainnet } from "viem/chains"
const client = createPublicClient({
chain: mainnet,
transport: http()
})
const admin = await client.readContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "admin"
})
import { readGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { http } from "viem"
import { mainnet } from "viem/chains"
const config = createConfig({
chains: [mainnet],
transports: { [mainnet.id]: http() }
})
const admin = await readGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "admin"
})
Write Functions
updateMemberUnits
Update the units allocated to a pool member (admin only).
import { useWriteGdaPool } from "@sfpro/sdk/hook"
const { writeContract: updateUnits } = useWriteGdaPool({
address: "0x...", // Pool address
functionName: "updateMemberUnits",
args: ["0x...", 100n, "0x"] // Member, units, user data
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createWalletClient, http } from "viem"
import { mainnet } from "viem/chains"
import { privateKeyToAccount } from "viem/accounts"
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const walletClient = createWalletClient({
account,
chain: mainnet,
transport: http()
})
const hash = await walletClient.writeContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "updateMemberUnits",
args: [
"0x...", // Member address
100n, // New units amount
"0x" // User data
]
})
import { writeGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { createWalletClient, http } from "viem"
import { mainnet } from "viem/chains"
import { privateKeyToAccount } from "viem/accounts"
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const config = createConfig({
chains: [mainnet],
client({ chain }) {
return createWalletClient({ account, chain, transport: http() })
},
})
const hash = await writeGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "updateMemberUnits",
args: ["0x...", 100n, "0x"] // Member, units, user data
})
claimAll
Claim all available tokens for the calling member.
import { useWriteGdaPool } from "@sfpro/sdk/hook"
const { writeContract: claimAll } = useWriteGdaPool({
address: "0x...", // Pool address
functionName: "claimAll"
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createWalletClient, http } from "viem"
import { mainnet } from "viem/chains"
import { privateKeyToAccount } from "viem/accounts"
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const walletClient = createWalletClient({
account,
chain: mainnet,
transport: http()
})
const hash = await walletClient.writeContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "claimAll"
})
import { writeGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { createWalletClient, http } from "viem"
import { mainnet } from "viem/chains"
import { privateKeyToAccount } from "viem/accounts"
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const config = createConfig({
chains: [mainnet],
client({ chain }) {
return createWalletClient({ account, chain, transport: http() })
},
})
const hash = await writeGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "claimAll"
})
transferAdmin
Transfer admin rights to another address (admin only).
import { useWriteGdaPool } from "@sfpro/sdk/hook"
const { writeContract: transferAdmin } = useWriteGdaPool({
address: "0x...", // Pool address
functionName: "transferAdmin",
args: ["0x..."] // New admin address
})
import { gdaPoolAbi } from "@sfpro/sdk/abi"
import { createWalletClient, http } from "viem"
import { mainnet } from "viem/chains"
import { privateKeyToAccount } from "viem/accounts"
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const walletClient = createWalletClient({
account,
chain: mainnet,
transport: http()
})
const hash = await walletClient.writeContract({
address: "0x...", // Pool address
abi: gdaPoolAbi,
functionName: "transferAdmin",
args: ["0x..."] // New admin address
})
import { writeGdaPool } from "@sfpro/sdk/action"
import { createConfig } from "@wagmi/core"
import { createWalletClient, http } from "viem"
import { mainnet } from "viem/chains"
import { privateKeyToAccount } from "viem/accounts"
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
const config = createConfig({
chains: [mainnet],
client({ chain }) {
return createWalletClient({ account, chain, transport: http() })
},
})
const hash = await writeGdaPool(config, {
chainId: mainnet.id,
address: "0x...", // Pool address
functionName: "transferAdmin",
args: ["0x..."] // New admin address
})
Key Notes
- Admin Only: Only the pool admin can update member units
- Proportional Distribution: Members receive tokens based on their units ratio
- Claiming: Members can claim accumulated tokens at any time
- Connection: Members should connect to pools for automatic claiming