Skip to main content

MembershipVault

MembershipVault

Deployment on Ethereum mainnet:

https://etherscan.io/address/0x375B906B25E00bdD43017400CD4cefb36FBF9c18

Track assets held by owners in a vault, as well as the total held in the vault. Assets are not accounted for until the next epoch for MEV protection.

ZeroAddressInvalid

error ZeroAddressInvalid()

Thrown when depositing from address(0)

NoTokensOwned

error NoTokensOwned()

Thrown when trying to access tokens from an address with no tokens

OneTokenPerAddress

error OneTokenPerAddress()

Thrown when trying to access more than one token for an address

IndexGreaterThanTokenSupply

error IndexGreaterThanTokenSupply()

Thrown when querying token supply with an index greater than the supply

NoTotalsInFutureEpochs

error NoTotalsInFutureEpochs()

Thrown when checking totals in future epochs

InvalidHoldingsAdjustment

error InvalidHoldingsAdjustment(uint256 eligibleAmount, uint256 nextEpochAmount)

Thrown when adjusting holdings in an unsupported way

NonexistantToken

error NonexistantToken(uint256 tokenId)

Thrown when requesting a nonexistant token

Checkpoint

event Checkpoint(uint256 total)

The vault has been checkpointed

Parameters

NameTypeDescription
totaluint256how much is stored in the vault at the current block.timestamp

totalAmounts

mapping(uint256 => uint256) totalAmounts

Totals by epoch. totalAmounts is always tracking past epochs, the current epoch, and the next epoch. There are a few cases:

  1. Checkpointing Noop for the same epoch. Checkpointing occurs before any mutative action so for new epochs, the last-set epoch value (totalAmounts[previousEpoch + 1]) is copied to each epoch up to the current epoch + 1
  2. Increasing Checkpointing already occurred, so current epoch and next epoch are properly set up. Increasing just updates the next epoch value
  3. Decreasing Checkpointing already occurred like above. Decreasing updates the eligible and next epoch values

checkpointEpoch

uint256 checkpointEpoch

last epoch the vault was checkpointed

positions

mapping(uint256 => struct Position) positions

all positions held by the vault

owners

mapping(address => uint256) owners

owners and their position

membershipIdsTracker

uint256 membershipIdsTracker

counter tracking most current membership id

baseURI

string baseURI

base uri for the nft

constructor

constructor(contract Context _context) public

initialize

function initialize() public

totalSupply

function totalSupply() public view returns (uint256)

Returns the total amount of tokens stored by the contract.

ownerOf

function ownerOf(uint256 membershipId) external view returns (address owner)

balanceOf

function balanceOf(address owner) external view returns (uint256)

Returns the number of tokens in owner's account.

tokenOfOwnerByIndex

function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256)

Returns a token ID owned by owner at a given index of its token list. Use along with {balanceOf} to enumerate all of owner's tokens.

tokenByIndex

function tokenByIndex(uint256 index) external view returns (uint256)

Returns a token ID at a given index of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens.

supportsInterface

function supportsInterface(bytes4 id) external pure returns (bool)

name

function name() external pure returns (string)

Returns the token collection name.

symbol

function symbol() external pure returns (string)

Returns the token collection symbol.

tokenURI

function tokenURI(uint256 tokenId) external view returns (string)

Returns the Uniform Resource Identifier (URI) for tokenId token.

setBaseURI

function setBaseURI(string uri) external

Set the base uri for the contract

currentValueOwnedBy

function currentValueOwnedBy(address owner) external view returns (uint256)

Get the current value of owner. This changes depending on the current block.timestamp as increased holdings are not accounted for until the subsequent epoch.

Parameters

NameTypeDescription
owneraddressaddress owning the positions

Return Values

NameTypeDescription
[0]uint256sum of all positions held by an address

currentTotal

function currentTotal() external view returns (uint256)

Get the total value in the vault as of block.timestamp

Return Values

NameTypeDescription
[0]uint256total value in the vault as of block.timestamp

totalAtEpoch

function totalAtEpoch(uint256 epoch) public view returns (uint256)

Get the total value in the vault as of epoch

Return Values

NameTypeDescription
[0]uint256total value in the vault as of epoch

positionOwnedBy

function positionOwnedBy(address owner) external view returns (struct Position)

Get the position owned by owner

Return Values

NameTypeDescription
[0]struct Positionposition owned by owner

adjustHoldings

function adjustHoldings(address owner, uint256 eligibleAmount, uint256 nextEpochAmount) external returns (uint256)

Record an adjustment in holdings. Eligible assets will update this epoch and total assets will become eligible the subsequent epoch.

Parameters

NameTypeDescription
owneraddressthe owner to checkpoint
eligibleAmountuint256amount of points to apply to the current epoch
nextEpochAmountuint256amount of points to apply to the next epoch

Return Values

NameTypeDescription
[0]uint256id of the position

checkpoint

function checkpoint(address owner) external

Checkpoint a specific owner & the vault total

to collect rewards, this must be called before increaseHoldings or decreaseHoldings. Those functions must call checkpoint internally so the historical data will be lost otherwise.

Parameters

NameTypeDescription
owneraddressthe owner to checkpoint

_fetchOrCreateMembership

function _fetchOrCreateMembership(address owner) private returns (uint256)

_checkpoint

function _checkpoint(address owner) private