A smart contract used to lock and distribute tokens based on created certificates through community approved proposals.

The mined token contract distributes the allotted amount yearly to the mining governance and vault contracts. The vault contract will automatically receive tokens and update total supply of locked and unassigned vault tokens.

Proposals can be created to be voted on and when approved, assign tokens to a certificate within the vault, to vest then redeem after about a year (1,971,000 blocks). Proposals can also be created for revoking vault certificates during vesting, changing the total pledge minimum amount and changing the total vote minimum amount.

Proposal creation is public, meaning anyone can do it, however, proposals will not be put into affect unless they pass the minimum pledge amount, the minimum vote amount, and there must be more votes in favor than in opposition.

Constructor

public OpdexVault(ISmartContractState state, 
                  Address token,
                  ulong vestingDuration,
                  ulong totalPledgeMinimum,
                  ulong totalVoteMinimum,
                  ulong vestingDuration) : base(state)

Parameters

Type

Property

Description

ISmartContractState

state

Dependency injected smart contract state.
Omitted from parameters during deployment.

Address

token

The locked SRC token.

ulong

totalPledgeMinimum

The minimum total number of tokens pledged to a proposal to move to a vote.

ulong

totalVoteMinimum

The minimum total number of tokens voted on a proposal to have a chance to be approved.

ulong

vestingDuration

The length in blocks of the vesting period.


Properties

Type

Property

Description

Address

Token

The SRC20 token the vault is responsible for locking.

UInt256

TotalSupply

The total supply of tokens available to be assigned to certificates.

ulong

VestingDuration

The number of blocks required for certificates to be locked before being redeemed.

ulong

NextProposalId

The Id of the next proposal to be created.

UInt256

TotalProposedAmount

The total number of tokens requested for active create certificate proposals.

ulong

TotalPledgeMinimum

The minimum number of CRS tokens required to pledge to move a proposal on to a vote.

ulong

TotalVoteMinimum

The minimum number of CRS tokens required to vote on a proposal to have a chance to pass.


Methods

Get Certificate

Retrieves a certificate a given address is assigned.

Certificate GetCertificate(Address wallet);

Parameters

Type

Property

Description

Address

wallet

The wallet address to check for a certificate.

Returns

Type

Property

Description

Certificate

certificate

A certificate issued to the provided address.

Certificate

Type

Property

Description

UInt256

Amount

The amount of tokens the certificate has assigned.

ulong

VestedBlock

The block number that the certificate is fully vested at.

bool

Revoked

Whether or not the certificate has been revoked.


Get Proposal

Retrieves the details about a proposal.

ProposalDetails GetProposal(ulong proposalId);

Parameters

Type

Property

Description

ulong

proposalId

The ID number of the requested proposal.

Returns

Type

Property

Description

ProposalDetails

proposalDetails

Struct containing properties used to measure a proposals progress and proposition.

Proposal Details

Type

Property

Description

UInt256

Amount

The amount of the proposal. For create or revoke certificates, will equal the amount of ODX tokens assigned. For pledge or vote minimum amount proposals, is equal to the proposed new amount.

Address

Wallet

The address of the primary recipient or wallet of a proposal. For revoke certificate proposals, is equal to the certificate's holder. For pledge and minimum vote proposals, is equal to the creator of the proposal. For new certificates, is equal to the wallet address that will have a certificate assigned.

byte

Type

The type of proposal.

byte

Status

The status of the proposal.

ulong

Expiration

The expiration block of the current status.

ulong

YesAmount

The number of CRS voted Yes on a proposal during the vote stage.

ulong

NoAmount

The number of CRS voted No on a proposal during the vote stage.

ulong

PledgeAmount

The number of CRS pledged to the proposal during the pledge stage.


Get Proposal Vote

Retrieve the vote details of a voter for a specific proposal.

ProposalVote GetProposalVote(ulong proposalId, Address voter);

Parameters

Type

Property

Description

ulong

proposalId

The ID number of the proposal.

Address

voter

The voter's address.

Returns

Type

Property

Description

ProposalVote

proposalVote

Proposal vote details of the how an address voted.

ProposalVote

Type

Property

Description

bool

InFavor

True if the vote was in favor of the proposal, otherwise false.

ulong

Amount

The amount of CRS tokens actively locked toward the voter's vote.


Get Proposal Pledge

Retrieve the amount of tokens pledged by an address for a proposal.

ulong GetProposalPledge(ulong proposalId, Address pledger);

Parameters

Type

Property

Description

ulong

proposalId

The ID of the proposal to retrieve the pledge for.

Address

pledger

The address of the pledger.

Returns

Type

Property

Description

ulong

pledge

The number of CRS tokens actively pledged to the proposal by the provided wallet address.


Get Certificate Proposal Id By Recipient

Retrieves an Id of a certificate proposal that the specified recipient has open, limiting to one proposal per recipient for certificate based proposals at a time.

ulong GetCertificateProposalIdByRecipient(Address recipient);

Parameters

Type

Property

Description

Address

recipient

The address of the certificate recipient.

Returns

Type

Property

Description

ulong

proposalId

The proposalId of an open proposal for the provided recipient.


Notify Distribution

Method to allow the vault token to notify the vault of distribution to update the total supply.

void NotifyDistribution(UInt256 amount);

Parameters

Type

Property

Description

UInt256

amount

The amount of tokens sent to the vault.

Redeem Certificate

Redeems a vested certificate the sender owns and transfers the claimed tokens.

void RedeemCertificate();

Create New Certificate Proposal

Creates a new proposal for a certificate to be created. If this proposal were to pass, the recipient would receive a certificate that is vested for the VestingDuration, entitling them to an amount of governance tokens in the vault.

ulong CreateNewCertificateProposal(UInt256 amount, Address recipient, string description);

Parameters

Type

Property

Description

UInt256

amount

The amount of tokens proposed the recipient's certificate be assigned.

Address

recipient

The recipient address to assign a certificate to if approved.

string

description

A description of the proposal, limited to 200 characters, preferably a link.

Returns

Type

Property

Description

ulong

proposalId

The ID of the created proposal.


Create Revoke Certificate Proposal

Creates a new proposal for a certificate to be revoked. If this proposal were to pass, the certificate holder would only be entitled to the governance tokens accrued in the VestingDuration, up to the block at which the certificate is revoked.

ulong CreateRevokeCertificateProposal(Address recipient, string description);

Parameters

Type

Property

Description

Address

recipient

The recipient of an existing certificate to have revoked.

string

description

A description of the proposal, limited to 200 characters, preferably including a link.

Returns

Type

Property

Description

ulong

proposalId

The ID of the created proposal.


Create Total Pledge Minimum Proposal

Creates a new proposal for a change to the minimum pledge total amount. If this proposal were to pass, it would alter the total amount of tokens required to pledge to a proposal, so that it can move on to a vote.

ulong CreateTotalPledgeMinimumProposal(UInt256 amount, string description);

Parameters

Type

Property

Description

UInt256

amount

The proposed new total pledge minimum amount.

string

description

A description of the proposal, limited to 200 characters, preferably including a link.

Returns

Type

Property

Description

ulong

proposalId

The ID of the created proposal.


Create Total Vote Minimum Proposal

Creates a new proposal for a change to the minimum vote total amount. If this proposal were to pass, it would alter the total amount of tokens required to vote on a proposal, so that it can have a chance to pass.

ulong CreateTotalVoteMinimumProposal(UInt256 amount, string description);

Parameters

Type

Property

Description

UInt256

amount

The proposed new total vote minimum amount.

string

description

A description of the proposal, limited to 200 characters, preferably including a link.

Returns

Type

Property

Description

ulong

proposalId

The ID of the created proposal.


Pledge

Pledge for a proposal by temporarily locking CRS tokens to help meet the minimum pledge amount, so that it can move to an official vote.

void Pledge(ulong proposalId);

Parameters

Type

Property

Description

ulong

proposalId

The Id of the proposal to pledge to.


Vote

Votes for or against a proposal by temporarily holding CRS in contract as vote weight.

void Vote(ulong proposalId, bool inFavor);

Parameters

Type

Property

Description

ulong

proposalId

The Id number of the proposal being voted on.

bool

inFavor

True or false indicating if the vote is in favor of the proposal or against it.


Withdraw Vote

Withdraws held CRS from proposal vote, removing the vote if still in progress.

void WithdrawVote(ulong proposalId, ulong withdrawAmount);

Parameters

Type

Property

Description

ulong

proposalId

The Id number of the proposal voted on.

ulong

withdrawAmount

The amount of tokens to withdraw from the proposal vote.


Withdraw Pledge

Withdraws CRS tokens from a proposal pledge, removing the pledge if still in progress.

void WithdrawPledge(ulong proposalId, ulong withdrawAmount);

Parameters

Type

Property

Description

ulong

proposalId

The Id of the proposal to remove a pledge amount from.

ulong

withdrawAmount

The amount to withdraw from a pledge.


Complete Proposal

Completes a proposal and executes the resulting command within the vault contract if approved.

void CompleteProposal(ulong proposalId);

Parameters

Type

Property

Description

ulong

proposalId

The Id number of the proposal voted on.


Logs

Create Vault Certificate Log

Emitted when a vault certificate is created, either for the vault owner during each distribution period or from the owner to a new certificate holder.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Owner

The owner's address of the created certificate.

:black-square-button:

UInt256

Amount

The amount of tokens locked in the certificate.

:black-square-button:

ulong

VestedBlock

The block number that the certificate will be eligible for redemption at.


Redeem Vault Certificate Log

Emitted when an address redeems their certificate and claims their tokens.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Owner

The owner's address of the redeemed certificate.

:black-square-button:

UInt256

Amount

The amount of tokens redeemed and collected.

:black-square-button:

ulong

VestedBlock

The block number that the certificate was fully vested at.


Revoke Vault Certificate Log

Emitted when the vault owner revokes a non-vested wallet's certificate.

Index

Type

Property

Description

:ballot-box-with-check:

Address

Owner

The owner's address of the revoked certificate.

:black-square-button:

UInt256

OldAmount

The old amount of tokens the certificate was created for.

:black-square-button:

UInt256

NewAmount

The new amount of tokens the vault certificate can be redeemed for.

:black-square-button:

ulong

VestedBlock

The block number that the certificate will be eligible for redemption at.


Create Vault Proposal Log

Emitted after a new proposal is created.

Index

Type

Property

Description

:ballot-box-with-check:

ulong

ProposalId

The ID of the proposal created.

:ballot-box-with-check:

Address

Wallet

The address of the wallet affected by the proposal. For create certificate proposals, this is the recipient. For revoke certificate proposals, this is the current holder. For minimum total proposals, this is the creator.

:black-square-button:

UInt256

Amount

The amount of the proposal. For new certificates this is the amount proposed to be assigned, for revoke certificates, this is the current certificate's amount, for change total proposals, this is the new total proposed.

:black-square-button:

byte

Type

The type of proposal.

:black-square-button:

byte

Status

The status of the proposal

:black-square-button:

ulong

Expiration

The expiration block of the current status of the proposal.

:black-square-button:

string

Description

The description of the proposal.


Complete Vault Proposal Log

Emitted after a proposal is expired and completed.

Index

Type

Property

Description

:ballot-box-with-check:

ulong

ProposalId

The ID of the proposal completed.

:black-square-button:

bool

Approved

True if the proposal was approved, false if it was not.


Vault Proposal Pledge Log

Emitted after pledging toward a proposal.

Index

Type

Property

Description

:ballot-box-with-check:

ulong

ProposalId

The proposal ID pledged to.

:ballot-box-with-check:

Address

Pledger

The wallet address of the pledger.

:black-square-button:

ulong

PledgeAmount

The amount of CRS pledged to the proposal in this transaction.

:black-square-button:

ulong

PledgerAmount

The total CRS balance of the pledger for this proposal.

:black-square-button:

ulong

ProposalPledgeAmount

The total amount of CRS pledged to this proposal.

:black-square-button:

bool

TotalPledgeMinimumMet

True if the pledge has met its minimum requirement, moving it on to the vote stage.


Vault Proposal Vote Log

Emitted after voting on a proposal.

Index

Type

Property

Description

:ballot-box-with-check:

ulong

ProposalId

The proposal ID voted on.

:ballot-box-with-check:

Address

Voter

The wallet address of the voter.

:black-square-button:

bool

InFavor

True if the vote was in favor of the proposal, else false.

:black-square-button:

ulong

VoteAmount

The amount of CRS used to vote in this transaction.

:black-square-button:

ulong

VoterAmount

The total amount of CRS the voter has voted with on this proposal.

:black-square-button:

ulong

ProposalYesAmount

The total amount CRS voted Yes on the proposal.

:black-square-button:

ulong

ProposalNoAmount

The total amount CRS voted No on the proposal.


Vault Proposal Withdraw Pledge Log

Emitted after withdrawing locked CRS used to pledge to a proposal.

Index

Type

Property

Description

:ballot-box-with-check:

ulong

ProposalId

The proposal ID the CRS were withdrawn from.

:ballot-box-with-check:

Address

Pledger

The wallet address of the pledger.

:black-square-button:

ulong

WithdrawAmount

The amount of CRS to withdraw from a previous pledge to this proposal.

:black-square-button:

ulong

PledgerAmount

The total amount of CRS the pledger still has locked within the proposal.

:black-square-button:

ulong

ProposalPledgeAmount

The total amount of CRS pledged to the proposal.

:black-square-button:

bool

PledgeWithdrawn

True if the funds withdrawn were deducted from an in progress proposal in the pledge stage, else false.


Vault Proposal Withdraw Vote Log

Emitted after withdrawing locked CRS used to vote on a proposal.

Index

Type

Property

Description

:ballot-box-with-check:

ulong

ProposalId

The proposal ID the CRS were withdrawn from.

:ballot-box-with-check:

Address

Voter

The wallet address of the voter.

:black-square-button:

ulong

WithdrawAmount

The amount of CRS to withdraw from a previous vote to this proposal.

:black-square-button:

ulong

VoterAmount

The total amount of CRS the voter still has locked within the proposal.

:black-square-button:

ulong

ProposalYesAmount

The total amount CRS voted Yes on the proposal.

:black-square-button:

ulong

ProposalNoAmount

The total amount CRS voted No on the proposal.

:black-square-button:

bool

VoteWithdrawn

True if the funds withdrawn were deducted from an in progress proposal in the vote stage, else false.


References

OpdexVault Smart Contract - Github

IOpdexVault Interface - Github

Stratis SmartContract Documentation - Stratis Academy


Did this page help you?