IGovPool

Interface Description

License: MIT

interface IGovPool
This is the Governance pool contract. This contract is the third contract the user can deploy through the factory. The users can participate in proposal's creation, voting and execution processes

Enums info

ProposalState

enum ProposalState {
Voting,
WaitingForVotingTransfer,
ValidatorVoting,
Defeated,
SucceededFor,
SucceededAgainst,
Locked,
ExecutedFor,
ExecutedAgainst,
Undefined
}
The enum that holds information about proposal state
Parameters:
Name
Description
Voting
the proposal is in voting state
WaitingForVotingTransfer
the proposal is approved and waiting for transfer to validators contract
ValidatorVoting
the proposal is in validators voting state
Defeated
the proposal is defeated
SucceededFor
the proposal is succeeded on for step
SucceededAgainst
the proposal is succeeded on against step
Locked
the proposal is locked
ExecutedFor
the proposal is executed on for step
ExecutedAgainst
the proposal is executed on against step
Undefined
the proposal is undefined

RewardType

enum RewardType {
Create,
Vote,
Execute,
SaveOffchainResults
}
The enum that holds information about reward type
Parameters:
Name
Description
Create
the reward type for proposal creation
Vote
the reward type for voting for proposal
Execute
the reward type for proposal execution
SaveOffchainResults
the reward type for saving off-chain results

VoteType

enum VoteType {
PersonalVote,
MicropoolVote,
DelegatedVote,
TreasuryVote
}
The enum that holds information about vote type
Parameters:
Name
Description
PersonalVote
the vote type for personal voting
MicropoolVote
the vote type for micropool voting
DelegatedVote
the vote type for delegated voting
TreasuryVote
the vote type for treasury voting

Structs info

Dependencies

struct Dependencies {
address settingsAddress;
address userKeeperAddress;
address payable validatorsAddress;
address expertNftAddress;
address nftMultiplierAddress;
address votePowerAddress;
}
The struct that holds information about dependencies
Parameters:
Name
Type
Description
settingsAddress
address
the address of settings contract
userKeeperAddress
address
the address of user keeper contract
validatorsAddress
address payable
the address of validators contract
expertNftAddress
address
the address of expert nft contract
nftMultiplierAddress
address
the address of nft multiplier contract
votePowerAddress
address
the address of vote power contract

ProposalCore

struct ProposalCore {
IGovSettings.ProposalSettings settings;
uint64 voteEnd;
uint64 executeAfter;
bool executed;
uint256 votesFor;
uint256 votesAgainst;
uint256 rawVotesFor;
uint256 rawVotesAgainst;
uint256 givenRewards;
}
The struct holds core properties of proposal
Parameters:
Name
Type
Description
settings
struct IGovSettings.ProposalSettings
the struct that holds information about settings of the proposal
voteEnd
uint64
the timestamp of voting end for the proposal
executeAfter
uint64
the timestamp of execution in seconds after voting end
executed
bool
the boolean indicating whether the proposal has been executed
votesFor
uint256
the total number of votes for the proposal from all voters
votesAgainst
uint256
the total number of votes against the proposal from all voters
rawVotesFor
uint256
the total number of votes for the proposal from all voters before the formula
rawVotesAgainst
uint256
the total number of votes against the proposal from all voters before the formula
givenRewards
uint256
the amount of rewards payable after the proposal execution

ProposalAction

struct ProposalAction {
address executor;
uint256 value;
bytes data;
}
The struct holds information about proposal action
Parameters:
Name
Type
Description
executor
address
the address of call's target, bounded by index with value and data
value
uint256
the eth value for call, bounded by index with executor and data
data
bytes
the of call data, bounded by index with executor and value

Proposal

struct Proposal {
IGovPool.ProposalCore core;
string descriptionURL;
IGovPool.ProposalAction[] actionsOnFor;
IGovPool.ProposalAction[] actionsOnAgainst;
}
The struct holds all information about proposal
Parameters:
Name
Type
Description
core
struct IGovPool.ProposalCore
the struct that holds information about core properties of proposal
descriptionURL
string
the string with link to IPFS doc with proposal description
actionsOnFor
struct IGovPool.ProposalAction[]
the array of structs with information about actions on for step
actionsOnAgainst
struct IGovPool.ProposalAction[]
the array of structs with information about actions on against step

ProposalView

struct ProposalView {
IGovPool.Proposal proposal;
IGovValidators.ExternalProposal validatorProposal;
IGovPool.ProposalState proposalState;
uint256 requiredQuorum;
uint256 requiredValidatorsQuorum;
}
The struct that is used in view functions of contract as a return argument
Parameters:
Name
Type
Description
proposal
struct IGovPool.Proposal
the Proposal struct
validatorProposal
struct IGovValidators.ExternalProposal
the ExternalProposal struct
proposalState
enum IGovPool.ProposalState
the value from enum ProposalState, that shows proposal state at current time
requiredQuorum
uint256
the required votes amount to confirm the proposal
requiredValidatorsQuorum
uint256
the the required validator votes to confirm the proposal

RawVote

struct RawVote {
uint256 tokensVoted;
uint256 totalVoted;
uint256 nftsAmount;
EnumerableSet.UintSet nftsVoted;
}
The struct that holds information about the typed vote (only for internal needs)
Parameters:
Name
Type
Description
tokensVoted
uint256
the total erc20 amount voted from one user for the proposal before the formula
totalVoted
uint256
the total power of typed votes from one user for the proposal before the formula
nftsAmount
uint256
the amount of nfts participating in the vote
nftsVoted
struct EnumerableSet.UintSet
the set of ids of nfts voted from one user for the proposal

VoteInfo

struct VoteInfo {
mapping(IGovPool.VoteType => struct IGovPool.RawVote) rawVotes;
bool isVoteFor;
uint256 totalVoted;
uint256 totalRawVoted;
}
The struct that holds information about the global vote properties (only for internal needs)
Parameters:
Name
Type
Description
rawVotes
mapping(enum IGovPool.VoteType => struct IGovPool.RawVote)
matching vote types with their infos
isVoteFor
bool
the boolean flag that indicates whether the vote is "for" the proposal
totalVoted
uint256
the total power of votes from one user for the proposal after the formula
totalRawVoted
uint256
the total power of votes from one user for the proposal before the formula

VoteInfoView

struct VoteInfoView {
bool isVoteFor;
uint256 totalVoted;
uint256 tokensVoted;
uint256 totalRawVoted;
uint256[] nftsVoted;
}
The struct that is used in view functions of contract as a return argument
Parameters:
Name
Type
Description
isVoteFor
bool
the boolean flag that indicates whether the vote is "for" the proposal
totalVoted
uint256
the total power of votes from one user for the proposal after the formula
tokensVoted
uint256
the total erc20 amount voted from one user for the proposal before the formula
totalRawVoted
uint256
the total power of typed votes from one user for the proposal before the formula
nftsVoted
uint256[]
the set of ids of nfts voted from one user for the proposal

DelegatorRewards

struct DelegatorRewards {
address[] rewardTokens;
bool[] isVoteFor;
bool[] isClaimed;
uint256[] expectedRewards;
}
The struct that is used in view functions of contract as a return argument
Parameters:
Name
Type
Description
rewardTokens
address[]
the list of reward tokens
isVoteFor
bool[]
the list of flags indicating whether the vote is "for" the proposal
isClaimed
bool[]
the list of flags indicating whether the rewards have been claimed
expectedRewards
uint256[]
the list of expected rewards to be claimed

DelegatorInfo

struct DelegatorInfo {
uint256[] delegationTimes;
uint256[] delegationPowers;
mapping(uint256 => bool) isClaimed;
}
The struct that holds information about the delegator (only for internal needs)
Parameters:
Name
Type
Description
delegationTimes
uint256[]
the list of timestamps when delegated amount was changed
delegationPowers
uint256[]
the list of delegated assets powers
isClaimed
mapping(uint256 => bool)
matching proposals ids with flags indicating whether rewards have been claimed

PendingRewards

struct PendingRewards {
mapping(uint256 => bool) areVotingRewardsSet;
mapping(uint256 => uint256) staticRewards;
mapping(uint256 => IGovPool.VotingRewards) votingRewards;
mapping(address => uint256) offchainRewards;
EnumerableSet.AddressSet offchainTokens;
}
The struct that holds reward properties (only for internal needs)
Parameters:
Name
Type
Description
areVotingRewardsSet
mapping(uint256 => bool)
matching proposals ids with flags indicating whether voting rewards have been set during the personal or micropool claim
staticRewards
mapping(uint256 => uint256)
matching proposal ids to their static rewards
votingRewards
mapping(uint256 => struct IGovPool.VotingRewards)
matching proposal ids to their voting rewards
offchainRewards
mapping(address => uint256)
matching off-chain token addresses to their rewards
offchainTokens
struct EnumerableSet.AddressSet
the list of off-chain token addresses

UserInfo

struct UserInfo {
mapping(uint256 => IGovPool.VoteInfo) voteInfos;
IGovPool.PendingRewards pendingRewards;
mapping(address => IGovPool.DelegatorInfo) delegatorInfos;
EnumerableSet.UintSet votedInProposals;
EnumerableSet.UintSet treasuryExemptProposals;
}
The struct that holds the user info (only for internal needs)
Parameters:
Name
Type
Description
voteInfos
mapping(uint256 => struct IGovPool.VoteInfo)
matching proposal ids to their infos
pendingRewards
struct IGovPool.PendingRewards
user's pending rewards
delegatorInfos
mapping(address => struct IGovPool.DelegatorInfo)
matching delegators to their infos
votedInProposals
struct EnumerableSet.UintSet
the list of active proposals user voted in
treasuryExemptProposals
struct EnumerableSet.UintSet
the list of proposals user's treasury is exempted from

VotingRewards

struct VotingRewards {
uint256 personal;
uint256 micropool;
uint256 treasury;
}
The struct that is used in view functions of contract as a return argument
Parameters:
Name
Type
Description
personal
uint256
rewards for the personal voting
micropool
uint256
rewards for the micropool voting
treasury
uint256
rewards for the treasury voting

PendingRewardsView

struct PendingRewardsView {
address[] onchainTokens;
uint256[] staticRewards;
IGovPool.VotingRewards[] votingRewards;
uint256[] offchainRewards;
address[] offchainTokens;
}
The struct that is used in view functions of contract as a return argument
Parameters:
Name
Type
Description
onchainTokens
address[]
the list of on-chain token addresses
staticRewards
uint256[]
the list of static rewards
votingRewards
struct IGovPool.VotingRewards[]
the list of voting rewards
offchainRewards
uint256[]
the list of off-chain rewards
offchainTokens
address[]
the list of off-chain token addresses

CreditInfo

struct CreditInfo {
address[] tokenList;
mapping(address => IGovPool.TokenCreditInfo) tokenInfo;
}
The struct is used to hold info about validators monthly withdrawal credit
Parameters:
Name
Type
Description
tokenList
address[]
the list of token allowed to withdraw
tokenInfo
mapping(address => struct IGovPool.TokenCreditInfo)
the mapping token => withdrawals history and limits

TokenCreditInfo

struct TokenCreditInfo {
uint256 monthLimit;
uint256[] cumulativeAmounts;
uint256[] timestamps;
}
The struct is used to hold info about limits and withdrawals history
Parameters:
Name
Type
Description
monthLimit
uint256
the monthly withdraw limit for the token
cumulativeAmounts
uint256[]
the list of amounts withdrawn
timestamps
uint256[]
the list of timestamps of withdraws

CreditInfoView

struct CreditInfoView {
address token;
uint256 monthLimit;
uint256 currentWithdrawLimit;
}
The struct is used to return info about current credit state
Parameters:
Name
Type
Description
token
address
the token address
monthLimit
uint256
the amount that validator could withdraw monthly
currentWithdrawLimit
uint256
the amount that validators could withdraw now

OffChain

struct OffChain {
address verifier;
string resultsHash;
mapping(bytes32 => bool) usedHashes;
}
The struct that holds off-chain properties (only for internal needs)
Parameters:
Name
Type
Description
verifier
address
the off-chain verifier address
resultsHash
string
the ipfs results hash
usedHashes
mapping(bytes32 => bool)
matching hashes to their usage state

Functions info

getHelperContracts (0x485f4044)

function getHelperContracts()
external
view
returns (
address settings,
address userKeeper,
address validators,
address poolRegistry,
address votePower
)
The function to get helper contract of this pool
Return values:
Name
Type
Description
settings
address
settings address
userKeeper
address
user keeper address
validators
address
validators address
poolRegistry
address
pool registry address
votePower
address
vote power address

getNftContracts (0x80326e95)

function getNftContracts()
external
view
returns (
address nftMultiplier,
address expertNft,
address dexeExpertNft,
address babt
)
The function to get the nft contracts of this pool
Return values:
Name
Type
Description
nftMultiplier
address
rewards multiplier nft contract
expertNft
address
local expert nft contract
dexeExpertNft
address
global expert nft contract
babt
address
binance bound token

createProposal (0xda1c6cfa)

function createProposal(
string calldata descriptionURL,
IGovPool.ProposalAction[] calldata actionsOnFor,
IGovPool.ProposalAction[] calldata actionsOnAgainst
) external
Create proposal
Parameters:
Name
Type
Description
descriptionURL
string
IPFS url to the proposal's description
actionsOnFor
struct IGovPool.ProposalAction[]
the array of structs with information about actions on for step
actionsOnAgainst
struct IGovPool.ProposalAction[]
the array of structs with information about actions on against step

createProposalAndVote (0xee0e5215)

function createProposalAndVote(
string calldata descriptionURL,
IGovPool.ProposalAction[] calldata actionsOnFor,
IGovPool.ProposalAction[] calldata actionsOnAgainst,
uint256 voteAmount,
uint256[] calldata voteNftIds
) external
Create and vote for on the proposal
Parameters:
Name
Type
Description
descriptionURL
string
IPFS url to the proposal's description
actionsOnFor
struct IGovPool.ProposalAction[]
the array of structs with information about actions on for step
actionsOnAgainst
struct IGovPool.ProposalAction[]
the array of structs with information about actions on against step
voteAmount
uint256
the erc20 vote amount
voteNftIds
uint256[]
the nft ids that will be used in voting

moveProposalToValidators (0x2db47bdd)

function moveProposalToValidators(uint256 proposalId) external
Move proposal from internal voting to Validators contract
Parameters:
Name
Type
Description
proposalId
uint256
Proposal ID

vote (0x544df02c)

function vote(
uint256 proposalId,
bool isVoteFor,
uint256 voteAmount,
uint256[] calldata voteNftIds
) external
The function for voting for proposal with own tokens
Parameters:
Name
Type
Description
proposalId
uint256
the id of the proposal