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
DelegationsManagerto itself and initializes it as an active component.
These parameters are the
objectIdones, which are encoded as values in the
supportedTokenArrayparameter. 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.
DelegationTokensManageris 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
DelegationTokensManageralso 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.
An organization can only set one supported token for Delegations at a time.
The token is defined by the
objectIdparameters discussed here.
These parameters can be changed later by using the
function setSupportedToken(address collection, uint256 tokenId) external;
As input, the function takes:
collection-> the address of the new Collection
uint256that represents the
objectIdof 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
DelegationTokensManagerwill treat the new one as it did the old one.