Add and remove members
How to add and remove members from a pod via the Orca SDK.
Pod memberships can be minted or burned in two ways: either directly without proposal or through a proposal. The role (admin or member) and structure (pod or EOA) of the initiating address in relation to the impacted pod will determine whether mint/burn actions occur directly or through proposal.
Pod members are managed via the MemberToken contract. The Pod object provides several methods to interact with this contract.

Add/remove members directly without proposal

Mint and burn memberships as an admin EOA/contract of a pod

Only EOAs or contracts (e.g., a timelock contract) that have been assigned an admin role for a pod can mint or burn members directly (without proposal) via the mintMember() and burnMember() functions. These functions will call the MemberToken contract directly and create a transaction.
1
const pod = await getPod(podAddress);
2
3
// This signer must be the admin of the pod.
4
await pod.mintMember(newMember, signer);
5
await pod.burnMember(memberToBurn, signer);
Copied!

Add/remove members through proposal

Propose to mint and burn members as a member EOA of a pod

Unlike pod admins, regular pod members do not have privileges to directly mint or burn pod memberships. All mint/burn actions must be submitted as a proposal for the pod to approve. Once the proposal has reached quorum threshold, the mint or burn function will be called. Only members on a given pod can propose to mint or burn members for the pod.
As a member EOA of a pod, you can propose to mint or burn memberships with the following:
1
const pod = await getPod(podAddress);
2
3
// Signer must be a member of the pod.
4
await pod.proposeMintMember(newMember, signer);
5
await pod.proposeBurnMember(memberToBurn, signer);
Copied!

Propose to mint and burn members as an admin pod or sub pod

Admin Pods

Whole pods can be designated as admins of other pods. See our "High Council" example on our Pod Configurations page.
However, unlike admin EOAs/contracts that can directly mint or burn memberships of a pod, admin pods must submit a proposal at the admin pod level and have it pass in order to mint or burn memberships of any pods they are an admin of.
You can propose to mint or burn memberships as an admin pod with the following:
1
// Pod we want to mint/burn members from
2
const ourPod = await getPod(podAddress);
3
4
// This is the admin of our pod
5
const adminPod = await getPod(adminPodAddress);
6
7
// This will create a proposal on the admin pod to mint a new member to our pod.
8
// Signer must be a member of adminPod
9
await ourPod.mintMemberFromAdminPod(adminPod, newMember, signer);
10
11
// This will create a proposal on the admin pod to burn a member from our pod.
12
// Signer must be a member of adminPod
13
await ourPod.burnMemberFromAdminPod(adminPod, memberToBurn, signer);
Copied!
Once the proposal is created, users can approve or reject within the Orca web app or you can build an experience to approve, reject and execute proposals through the SDK.

Sub Pods

Any pod that is a member of another pod is a sub pod. Our "Round Table" and "High Council" models on our Pod Configurations page show examples of sub pods.
Sub pods can submit a proposal to remove a member of the pod they are a member of (super pod). In this scenario, a 1) super proposal is created for all super pod members (including other sub pods) to vote on.
You can propose to mint or burn memberships as a sub pod with the following:
1
// Pod we want to mint/burn members from
2
const ourPod = await getPod(podAddress);
3
4
// This is a sub pod of our pod.
5
const subPod = await getPod(subPodAddress);
6
7
// This will create a proposal on the subpod to mint/burn a new member to our pod.
8
// Signer must be a member of subPod
9
// Creates a super proposal on the super pod to mint a new member. Also creates + approves a corresponding sub proposal on the sub pod.
10
// After the proposal is created, other sub pods can interact with the super proposal by fetching the super proposal object from the super pod and calling Proposal.approveFromSubPod/rejectFromSubPod
11
await ourPod.proposeMintMemberFromSubPod(subPod, newMember, signer);
12
13
// This will create a proposal on the admin pod to burn a member from our pod.
14
// Creates a super proposal on the super pod to mint a new member. Also creates + approves a corresponding sub proposal on the sub pod.
15
// Signer must be a member of subPod
16
// After the proposal is created, other sub pods can interact with the super proposal by fetching the super proposal object from the super pod and calling Proposal.approveFromSubPod/rejectFromSubPod
17
await ourPod.proposeBurnMemberFromSubPod(subPod, memberToBurn, signer);
Copied!
Once the proposal is created, users can approve or reject within the Orca web app or you can build an experience to approve, reject and execute proposals through the SDK.