@sfpro/sdk

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