VestingTokenFactory

Git Source

Inherits: FactoryFeeManager

Authors: JA (@ubinatus) v3, Klaus Hott (@Janther) v2

The VestingTokenFactory contract can be used to create vesting contracts for any ERC20 token.

State Variables

implementation

The address that will be used as a delegate call target for VestingTokens.

address public immutable implementation;

_salt

It will be used as the salt for create2

bytes32 internal _salt;

_vestingTokensByUnderlyingToken

Maps underlyingTokens to an array of VestingTokens.

mapping(address => address[]) internal _vestingTokensByUnderlyingToken;

Functions

constructor

*Creates a vesting token factory contract. Requirements:

  • implementationAddress has to be a contract.
  • feeCollectorAddress can’t be address 0x0.
  • transferFeePercentage must be within minTransferFee and maxTransferFee.*
constructor(
    address implementationAddress,
    address feeCollectorAddress,
    uint64 creationFeeValue,
    uint64 transferFeePercentage,
    uint64 claimFeeValue
)
    Ownable(msg.sender);

Parameters

NameTypeDescription
implementationAddressaddressAddress of VestingToken contract implementation.
feeCollectorAddressaddressAddress of feeCollector.
creationFeeValueuint64Value for creationFee that will be charged when deploying VestingToken‘s.
transferFeePercentageuint64Value for transferFeePercentage that will be charged on VestingToken’s transfers.
claimFeeValueuint64Value for claimFee that will be charged on VestingToken’s claims.

nextSalt

Increments the salt one step.

In the rare case that create2 fails, this function can be used to skip that particular salt.

function nextSalt() public;

createVestingToken

Creates new VestingToken contracts. Requirements:

  • underlyingTokenAddress cannot be the zero address.
  • timestamps must be given in ascending order.
  • percentages must be given in ascending order and the last one must always be 1 eth, where 1 eth equals to 100%.
function createVestingToken(
    string calldata name,
    string calldata symbol,
    address underlyingTokenAddress,
    IVestingToken.Milestone[] calldata milestonesArray
)
    external
    payable
    returns (address vestingToken);

Parameters

NameTypeDescription
namestringThe token collection name.
symbolstringThe token collection symbol.
underlyingTokenAddressaddressThe ERC20 token that will be held by this contract.
milestonesArrayIVestingToken.Milestone[]Array of all Milestones for this Contract’s lifetime.

vestingTokens

Exposes the whole array that _vestingTokensByUnderlyingToken maps.

function vestingTokens(address underlyingToken) external view returns (address[] memory);

Events

VestingTokenCreated

event VestingTokenCreated(address indexed underlyingToken, address vestingToken);

Parameters

NameTypeDescription
underlyingTokenaddressAddress of the ERC20 that will be vest into vestingToken.
vestingTokenaddressAddress of the newly deployed VestingToken.