IGovUserKeeper

Interface Description

License: MIT

interface IGovUserKeeper

This contract is responsible for securely storing user's funds that are used during the voting. These are either ERC20 tokens or NFTs

Structs info

BalanceInfo

struct BalanceInfo {
	uint256 tokens;
	EnumerableSet.UintSet nfts;
}

The struct holds information about user deposited tokens

Parameters:

Name
Type
Description

tokens

uint256

the amount of deposited tokens

nfts

struct EnumerableSet.UintSet

the array of deposited nfts

UserInfo

struct UserInfo {
	mapping(IGovPool.VoteType => struct IGovUserKeeper.BalanceInfo) balances;
	mapping(IGovPool.VoteType => uint256) nftsPowers;
	mapping(address => IGovUserKeeper.BalanceInfo) delegatedBalances;
	mapping(address => uint256) delegatedNftPowers;
	IGovUserKeeper.BalanceInfo allDelegatedBalance;
	EnumerableSet.AddressSet delegatees;
	uint256 maxTokensLocked;
	mapping(uint256 => uint256) lockedInProposals;
}

The struct holds information about user balances

Parameters:

Name
Type
Description

balances

mapping(enum IGovPool.VoteType => struct IGovUserKeeper.BalanceInfo)

matching vote types with balance infos

nftsPowers

mapping(enum IGovPool.VoteType => uint256)

matching vote types with cached nfts powers

delegatedBalances

mapping(address => struct IGovUserKeeper.BalanceInfo)

matching delegatees with balances infos

delegatedNftPowers

mapping(address => uint256)

matching delegatees with delegated nft powers

allDelegatedBalance

struct IGovUserKeeper.BalanceInfo

the balance info of all delegated assets

delegatees

struct EnumerableSet.AddressSet

the array of delegatees

maxTokensLocked

uint256

the upper bound of currently locked tokens

lockedInProposals

mapping(uint256 => uint256)

the amount of deposited tokens locked in proposals

NFTInfo

struct NFTInfo {
	address nftAddress;
	bool isSupportPower;
	uint256 individualPower;
	uint256 totalSupply;
	mapping(uint256 => uint256) nftMinPower;
}

The struct holds information about nft contract

Parameters:

Name
Type
Description

nftAddress

address

the address of the nft

isSupportPower

bool

boolean flag, if true then nft contract supports power

individualPower

uint256

the voting power an nft

totalSupply

uint256

the total supply of nfts that are not enumerable

nftMinPower

mapping(uint256 => uint256)

matching nft ids to their minimal powers

VotingPowerView

struct VotingPowerView {
	uint256 power;
	uint256 rawPower;
	uint256 nftPower;
	uint256 rawNftPower;
	uint256[] perNftPower;
	uint256 ownedBalance;
	uint256 ownedLength;
	uint256[] nftIds;
}

The struct that is used in view functions of contract as a return argument

Parameters:

Name
Type
Description

power

uint256

the total vote power of a user

rawPower

uint256

the total deposited assets power of a user

nftPower

uint256

the total nft power of a user

rawNftPower

uint256

the total deposited nft power of a user

perNftPower

uint256[]

the power of every nft, bounded by index with nftIds

ownedBalance

uint256

the owned erc20 balance, decimals = 18

ownedLength

uint256

the amount of owned nfts

nftIds

uint256[]

the array of nft ids, bounded by index with perNftPower

DelegationInfoView

struct DelegationInfoView {
	address delegatee;
	uint256 delegatedTokens;
	uint256[] delegatedNfts;
	uint256 nftPower;
	uint256[] perNftPower;
}

The struct that is used in view functions of contract as a return argument

Parameters:

Name
Type
Description

delegatee

address

the address of delegatee (person who gets delegation)

delegatedTokens

uint256

the amount of delegated tokens

delegatedNfts

uint256[]

the array of delegated nfts, bounded by index with perNftPower

nftPower

uint256

the total power of delegated nfts

perNftPower

uint256[]

the array of nft power, bounded by index with delegatedNfts

Functions info

depositTokens (0x39dc5ef2)

function depositTokens(
    address payer,
    address receiver,
    uint256 amount
) external

The function for depositing tokens

Parameters:

Name
Type
Description

payer

address

the address of depositor

receiver

address

the deposit receiver address

amount

uint256

the erc20 deposit amount

withdrawTokens (0x5e35359e)

function withdrawTokens(
    address payer,
    address receiver,
    uint256 amount
) external

The function for withdrawing tokens

Parameters:

Name
Type
Description

payer

address

the address from whom to withdraw the tokens

receiver

address

the withdrawal receiver address

amount

uint256

the erc20 withdrawal amount

delegateTokens (0x9161babb)

function delegateTokens(
    address delegator,
    address delegatee,
    uint256 amount
) external

The function for delegating tokens

Parameters:

Name
Type
Description

delegator

address

the address of delegator

delegatee

address

the address of delegatee

amount

uint256

the erc20 delegation amount

delegateTokensTreasury (0x69b5330b)

function delegateTokensTreasury(address delegatee, uint256 amount) external

The function for delegating tokens from Treasury

Parameters:

Name
Type
Description

delegatee

address

the address of delegatee

amount

uint256

the erc20 delegation amount

undelegateTokens (0x0ae1398e)

function undelegateTokens(
    address delegator,
    address delegatee,
    uint256 amount
) external

The function for undelegating tokens

Parameters:

Name
Type
Description

delegator

address

the address of delegator

delegatee

address

the address of delegatee

amount

uint256

the erc20 undelegation amount

undelegateTokensTreasury (0x86be8d2d)

function undelegateTokensTreasury(address delegatee, uint256 amount) external

The function for undelegating tokens from Treasury

Parameters:

Name
Type
Description

delegatee

address

the address of delegatee

amount

uint256

the erc20 undelegation amount

depositNfts (0x9693caad)

function depositNfts(
    address payer,
    address receiver,
    uint256[] calldata nftIds
) external

The function for depositing nfts

Parameters:

Name
Type
Description

payer

address

the address of depositor

receiver

address

the deposit receiver address

nftIds

uint256[]

the array of deposited nft ids

withdrawNfts (0x1f96f376)

function withdrawNfts(
    address payer,
    address receiver,
    uint256[] calldata nftIds
) external

The function for withdrawing nfts

Parameters:

Name
Type
Description

payer

address

the address from whom to withdraw the nfts

receiver

address

the withdrawal receiver address

nftIds

uint256[]

the withdrawal nft ids

delegateNfts (0xbfb1a57d)

function delegateNfts(
    address delegator,
    address delegatee,
    uint256[] calldata nftIds
) external

The function for delegating nfts

Parameters:

Name
Type
Description

delegator

address

the address of delegator

delegatee

address

the address of delegatee

nftIds

uint256[]

the array of delegated nft ids

delegateNftsTreasury (0x6ad6d3c1)

function delegateNftsTreasury(
    address delegatee,
    uint256[] calldata nftIds
) external

The function for delegating nfts from Treasury

Parameters:

Name
Type
Description

delegatee

address

the address of delegatee

nftIds

uint256[]

the array of delegated nft ids

undelegateNfts (0x37267d4c)

function undelegateNfts(
    address delegator,
    address delegatee,
    uint256[] calldata nftIds
) external

The function for undelegating nfts

Parameters:

Name
Type
Description

delegator

address

the address of delegator

delegatee

address

the address of delegatee

nftIds

uint256[]

the array of undelegated nft ids

undelegateNftsTreasury (0x39be038b)

function undelegateNftsTreasury(
    address delegatee,
    uint256[] calldata nftIds
) external

The function for undelegating nfts from Treasury

Parameters:

Name
Type
Description

delegatee

address

the address of delegatee

nftIds

uint256[]

the array of undelegated nft ids

updateMaxTokenLockedAmount (0x5f884296)

function updateMaxTokenLockedAmount(
    uint256[] calldata lockedProposals,
    address voter
) external

The function for recalculating max token locked amount of a user

Parameters:

Name
Type
Description

lockedProposals

uint256[]

the array of proposal ids for recalculation

voter

address

the address of voter

lockTokens (0x154b3db0)

function lockTokens(uint256 proposalId, address voter, uint256 amount) external

The function for locking tokens in a proposal

Parameters:

Name
Type
Description

proposalId

uint256

the id of proposal

voter

address

the address of voter

amount

uint256

the amount of tokens to lock

unlockTokens (0x7fde4424)

function unlockTokens(uint256 proposalId, address voter) external

The function for unlocking tokens in proposal

Parameters:

Name
Type
Description

proposalId

uint256

the id of proposal

voter

address

the address of voter

lockNfts (0x3b389164)

function lockNfts(
    address voter,
    IGovPool.VoteType voteType,
    uint256[] calldata nftIds
) external

The function for locking nfts

Parameters:

Name
Type
Description

voter

address

the address of voter

voteType

enum IGovPool.VoteType

the type of vote

nftIds

uint256[]

the array of nft ids to lock

unlockNfts (0x7be49fe3)

function unlockNfts(uint256[] calldata nftIds) external

The function for unlocking nfts

Parameters:

Name
Type
Description

nftIds

uint256[]

the array of nft ids to unlock

updateNftPowers (0x30132f5e)

function updateNftPowers(uint256[] calldata nftIds) external

The function for recalculating power of nfts

Parameters:

Name
Type
Description

nftIds

uint256[]

the array of nft ids to recalculate the power for

setERC20Address (0x41bec0d2)

function setERC20Address(address _tokenAddress) external

The function for setting erc20 address

Parameters:

Name
Type
Description

_tokenAddress

address

the erc20 address

setERC721Address (0x37e5e863)

function setERC721Address(
    address _nftAddress,
    uint256 individualPower,
    uint256 nftsTotalSupply
) external

The function for setting erc721 address

Parameters:

Name
Type
Description

_nftAddress

address

the erc721 address

individualPower

uint256

the voting power of an nft

nftsTotalSupply

uint256

the total supply of nft contract

tokenAddress (0x9d76ea58)

function tokenAddress() external view returns (address)

The function for getting erc20 address

Return values:

Name
Type
Description

[0]

address

tokenAddress the erc20 address

nftAddress (0x5bf8633a)

function nftAddress() external view returns (address)

The function for getting erc721 address

Return values:

Name
Type
Description

[0]

address

nftAddress the erc721 address

getNftInfo (0x7ca5685f)

function getNftInfo()
    external
    view
    returns (bool isSupportPower, uint256 individualPower, uint256 totalSupply)

The function for getting nft info

Return values:

Name
Type
Description

isSupportPower

bool

boolean flag, if true then nft contract supports power

individualPower

uint256

the voting power an nft

totalSupply

uint256

the total supply of nfts that are not enumerable

maxLockedAmount (0x3b3707a3)

function maxLockedAmount(address voter) external view returns (uint256)

The function for getting max locked amount of a user

Parameters:

Name
Type
Description

voter

address

the address of voter

Return values:

Name
Type
Description

[0]

uint256

max locked amount

tokenBalance (0xe94e3c67)

function tokenBalance(
    address voter,
    IGovPool.VoteType voteType
) external view returns (uint256 balance, uint256 ownedBalance)

The function for getting token balance of a user

Parameters:

Name
Type
Description

voter

address

the address of voter

voteType

enum IGovPool.VoteType

the type of vote

Return values:

Name
Type
Description

balance

uint256

the total balance with delegations

ownedBalance

uint256

the user balance that is not deposited to the contract

nftBalance (0x26836340)

function nftBalance(
    address voter,
    IGovPool.VoteType voteType
) external view returns (uint256 balance, uint256 ownedBalance)

The function for getting nft balance of a user

Parameters:

Name
Type
Description

voter

address

the address of voter

voteType

enum IGovPool.VoteType

the type of vote

Return values:

Name
Type
Description

balance

uint256

the total balance with delegations

ownedBalance

uint256

the number of nfts that are not deposited to the contract

nftExactBalance (0x3bea071d)

function nftExactBalance(
    address voter,
    IGovPool.VoteType voteType
) external view returns (uint256[] memory nfts, uint256 ownedLength)

The function for getting nft ids of a user

Parameters:

Name
Type
Description

voter

address

the address of voter

voteType

enum IGovPool.VoteType

the type of vote

Return values:

Name
Type
Description

nfts

uint256[]

the array of owned nft ids

ownedLength

uint256

the number of nfts that are not deposited to the contract

getTotalNftsPower (0x4a5f293c)

function getTotalNftsPower(
    uint256[] memory nftIds,
    IGovPool.VoteType voteType,
    address voter,
    bool perNftPowerArray
) external view returns (uint256 nftPower, uint256[] memory perNftPower)

The function for getting total power of nfts by ids

Parameters:

Name
Type
Description

nftIds

uint256[]

the array of nft ids

voteType

enum IGovPool.VoteType

the type of vote

voter

address

the address of user

perNftPowerArray

bool

should the nft raw powers array be returned

Return values:

Name
Type
Description

nftPower

uint256

the total total power of nfts

perNftPower

uint256[]

the array of nft powers, bounded with nftIds by index

getTotalPower (0x53976a26)

function getTotalPower() external view returns (uint256 power)

The function for getting total voting power of the contract

Return values:

Name
Type
Description

power

uint256

total power

canCreate (0x6f123e76)

function canCreate(
    address voter,
    IGovPool.VoteType voteType,
    uint256 requiredVotes
) external view returns (bool)

The function to define if voter is able to create a proposal. Includes micropool balance

Parameters:

Name
Type
Description

voter

address

the address of voter

voteType

enum IGovPool.VoteType

the type of vote

requiredVotes

uint256

the required voting power

Return values:

Name
Type
Description

[0]

bool

true - can participate, false - can't participate

votingPower (0xae987229)

function votingPower(
    address[] calldata users,
    IGovPool.VoteType[] calldata voteTypes,
    bool perNftPowerArray
) external view returns (IGovUserKeeper.VotingPowerView[] memory votingPowers)

The function for getting voting power of users

Parameters:

Name
Type
Description

users

address[]

the array of users addresses

voteTypes

enum IGovPool.VoteType[]

the array of vote types

perNftPowerArray

bool

should the nft powers array be calculated

Return values:

Name
Type
Description

votingPowers

struct IGovUserKeeper.VotingPowerView[]

the array of VotingPowerView structs

transformedVotingPower (0x375b592e)

function transformedVotingPower(
    address voter,
    uint256 amount,
    uint256[] calldata nftIds
) external view returns (uint256 personalPower, uint256 fullPower)

The function for getting voting power after the formula

Parameters:

Name
Type
Description

voter

address

the address of the voter

amount

uint256

the amount of tokens

nftIds

uint256[]

the array of nft ids

Return values:

Name
Type
Description

personalPower

uint256

the personal voting power after the formula

fullPower

uint256

the personal plus delegated voting power after the formula

delegations (0x4d123d7e)

function delegations(
    address user,
    bool perNftPowerArray
)
    external
    view
    returns (
        uint256 power,
        IGovUserKeeper.DelegationInfoView[] memory delegationsInfo
    )

The function for getting information about user's delegations

Parameters:

Name
Type
Description

user

address

the address of user

perNftPowerArray

bool

should the nft powers array be calculated

Return values:

Name
Type
Description

power

uint256

the total delegated power

delegationsInfo

struct IGovUserKeeper.DelegationInfoView[]

the array of DelegationInfoView structs

getWithdrawableAssets (0x221c0fd6)

function getWithdrawableAssets(
    address voter,
    uint256[] calldata lockedProposals,
    uint256[] calldata unlockedNfts
)
    external
    view
    returns (uint256 withdrawableTokens, uint256[] memory withdrawableNfts)

The function for getting information about funds that can be withdrawn

Parameters:

Name
Type
Description

voter

address

the address of voter

lockedProposals

uint256[]

the array of ids of locked proposals

unlockedNfts

uint256[]

the array of unlocked nfts

Return values:

Name
Type
Description

withdrawableTokens

uint256

the tokens that can we withdrawn

withdrawableNfts

uint256[]

the array of nfts that can we withdrawn

getDelegatedAssetsPower (0x8a3ca923)

function getDelegatedAssetsPower(
    address delegator,
    address delegatee
) external view returns (uint256 delegatedPower)

The function for getting the total delegated power by the delegator and the delegatee

Parameters:

Name
Type
Description

delegator

address

the address of the delegator

delegatee

address

the address of the delegatee

Return values:

Name
Type
Description

delegatedPower

uint256

the total delegated power