Group

Transactions

Create Group

tx CreateGroup(
  members: Member*
  metadata data.HashIRI?
) GroupID

type Member {
  account: Address
  weight: Decimal
  metadata: data.HashIRI?
}

util AssetGroupID(asset AssetID) GroupID

Create Group Account

tx CreateGroupAccount(
  group GroupID,
  decisionPolicy DecisionPolicy,
  metadata data.HashIRI?
) Address

Exec

tx GroupAccountExec(
  groupAccount Address,
  actions Tx*
)

Proposals

CreateProposal

tx CreateProposal(
  groupAccount Address,
  actions Tx*,
  metadata *data.HashIRI?
) ProposalID

Vote

tx Vote(
  proposal ProposalID,
  choice uint8,
  comment data.HashIRI?
)

ExecProposal

tx ExecProposal(proposal ProposalID)

Asset Distribution

// Distributes the provides assets to all the members of the group
// proportionally to their weight
tx DistributeAsset(group GroupID, asset Asset, roundingDecimalPlaces UInt8)

State

table GroupMetadata {
  id: uint64
  metadata: data.HashIRI?
  admin: Address
  total_weight: Decimal
  @auto_primary_key(id)
  @index(admin)
}

table GroupMember {
  group: Address
  member: Address
  weight: Decimal
  @primary_key(group, member)
  @index(group)
  @index(member)
}

table GroupAccount {
  address: Address
  group: GroupID
  admin: Address
  decision_policy: DecisionPolicy
  @primary_key(address)
  @index(group)
  @index(admin)
}

table Proposal {
  id: uint64
  group_account: Address
  actions: Tx*
  start_time: DateTime
  end_time: DateTime?
  metadata: data.HashIRI?
  @auto_primary_key(id)
  @index(group_account)
}

table Vote {
  proposal: ProposalID
  voter: Address
  vote: uint8
  metadata: data.HashIRI?
  @primary_key(proposal, voter)
  @index(proposal)
  @index(voter)
}

Last updated