Delegations Governance
A Delegation has its own internal governance system, in which its members can vote and make decisions at the Delegation level. The parameters of this system are defined when the organization links the DelegationsManager to itself and initializes it as an active component.
These parameters are the collection and objectId ones, which are encoded as values in the supportedTokenArray parameter. They define the organization's governance token that will be used to support all Delegations that are attached to the Organization via its DelegationsManager. If attached to multiple Organizations, a Delegation can be supported by a governance token of each.

The Connection Between the Organization's Token and a Delegation's Governance

A DelegationTokensManager is an active component linked to a specific Delegation. It allows holders of the Organization's governance token that supports Delegations to wrap their tokens into Delegation tokens.
Delegation tokens can be used to vote on the Delegation's internal proposals. The DelegationTokensManager also allows for the unwrapping (i.e the burning) of Delegation tokens back into the Organization's supported governance token.
While wrapped, the governance tokens are held securely by the Delegation in its own TreasuryManager Component.
The EthOS Organization sets OS as its token that will support attached Delegations. The DelegationTokensManager of each Delegation will allow for: the wrapping of OS as the Delegation's tokens, which can be used to govern the Delegation internally; and for the unwrapping (i.e the burning) of the Delegation's tokens for the original OS.
To vote on a Proposal in the Delegation, users must use Delegation tokens. Delegations can be attached to multiple Organizations, and therefore users must vote with the appropriate Delegation tokens.
Delegation Dave is attached to Organization Alpha (OrgA) and Organization Beta (OrgB).
OrgA sets TokenA, its governance to in its DelegationsManager, as the supported token for its Delegations. OrgB sets TokenB, its own governance token, as the supported token for its own Delegations.
Delegation users can wrap TokenA and TokenB as DelegationTokenA and DelegationTokenB respectively.
If a Proposal regarding OrgA is created in the Delegation, users can vote on it using DelegationTokenA; likewise, If a Proposal regarding OrgB is created in the Delegation, users can vote in it using DelegationTokenB.

Change a Supported Governance Token

An organization can only set one supported token for Delegations at a time.
The token is defined by the collection and objectId parameters discussed here.
These parameters can be changed later by using the setSupportedToken function:
function setSupportedToken(address collection, uint256 tokenId) external;
As input, the function takes:
  • collection -> the address of the new Collection
  • objectId -> the uint256 that represents the objectId of the new token.
ERC1155s and Items can be set as the supported token.
ERC20 and ETH will be supported in a future DelegationTokensManager version.
The newly set supported token replaces the old one; from this moment on, the DelegationTokensManager will treat the new one as it did the old one.