Endless
  • πŸš€README
  • Discovery
    • πŸš€Endless Web3 Genesis Cloud
    • πŸ’ŽBusiness Model
    • 🎯Vision
    • ✈️Roadmap
    • πŸͺ™Economics
    • πŸ‘€Team
      • Yu Xiong
      • Amit Kumar Jaiswal
      • Ned
      • 0xfun
      • Scott Trowbridge
      • Neeraj Sharma LLB
      • Amjad Suleman
      • Binu Paul
      • Eduard Romulus GOEAN
    • ❀️Developer Community
  • Endless Chain
    • Tech Docs
      • Account Address Format
      • Endless Account
      • Endless Coin(EDS)
      • Sponsored Transaction
      • On-Chain Multisig
      • Randomness
      • Safety Transaction
      • Token Locking & Distribution
    • Start
      • Learn about Endless
        • Accounts
        • Resources
        • Events
        • Transactions and States
        • Gas and Storage Fees
        • Computing Transaction Gas
        • Blocks
        • Staking
          • Delegated Staking
        • Governance
        • Endless Blockchain Deep Dive
          • Validator Nodes Overview
          • Fullnodes Overview
          • Node Networks and Synchronization
        • Move - A Web3 Language and Runtime
      • Explore Endless
      • Latest Endless Releases
      • Networks
    • Build
      • Tutorials
        • Your First Transaction
        • Your First Fungible Asset
        • Your First NFT
        • Your First Move Module
        • Your First Multisig
      • Learn the Move Language
        • The Move Book
          • Getting Started
            • Introduction
            • Modules and Scripts
          • Primitive Types
            • Move Tutorial
            • Integers
            • Bool
            • Address
            • Vector
            • Signer
            • References
            • Tuples and Unit
          • Basic Concepts
            • Local Variables and Scope
            • Equality
            • Abort and Assert
            • Conditionals
            • While, For, and Loop
            • Functions
            • Structs and Resources
            • Constants
            • Generics
            • Abilities
            • Uses and Aliases
            • Friends
            • Packages
            • Package Upgrades
            • Unit Tests
          • Global Storage
            • Global Storage - Structure
            • Global Storage - Operators
          • Reference
            • Libraries
            • Move Coding Conventions
        • Advanced Move Guides
          • Objects
            • Creating Objects
            • Configuring objects
            • Using objects
          • Move Scripts
            • Writing Move Scripts
            • Compiling Move Scripts
            • Running Move Scripts
            • Move Scripts Tutorial
          • Resource Accounts
          • Modules on Endless
          • Cryptography
          • Gas Profiling
          • Security
      • Endless Standards
        • Object
        • Endless Fungible Asset Standard
        • Endless Digital Asset Standard
        • Endless Wallet Standard
      • Endless APIs
        • Fullnode Rest API
        • Indexer Restful API
          • Indexer Installation
        • GRPC Transaction Stream
          • Running Locally
          • Custom Processors
            • End-to-End Tutorial
            • Parsing Transactions
          • Self-Hosted Transaction Stream Service
      • Endless SDKs
        • TypeScript SDK
          • Account
          • SDK Configuration
          • Fetch data from chain
          • Transaction Builder
          • HTTP Client
          • Move Types
          • Testing
          • Typescript
        • Rust SDK
        • Go SDK
      • Endless CLI
        • Install the Endless CLI
          • Install On Mac
          • Install On Alibaba Cloud
          • Install On Linux
          • Install On Windows
        • CLI Configuration
        • Use Endless CLI
          • Working With Move Contracts
            • Arguments in JSON Tutorial
          • Trying Things On-Chain
            • Look Up On-Chain Account Info
            • Create Test Accounts
          • Running A Local Network
            • Running a Public Network
          • Managing a Network Node
      • Integrate with Endless
        • Endless Token Overview
        • Application Integration Guide
      • Endless VSCode extension
      • Advanced Builder Guides
        • Develop Locally
          • Running a Local Network
          • Run a Localnet with Validator
    • Nodes
      • Learn about Nodes
      • Run a Validator and VFN
        • Node Requirements
        • Deploy Nodes
          • Using Docker
          • Using AWS
          • Using Azure
          • Using GCP
        • Connect Nodes
          • Connect to a Network
        • Verify Nodes
          • Node Health
          • Validator Leaderboard
      • Run a Public Fullnode
        • PFN Requirements
        • Deploy a PFN
          • Using Pre-compiled Binary
          • Using Docker
          • Using GCP 🚧 (under_construction)
        • Verify a PFN
        • Modify a PFN
          • Upgrade your PFN
          • Generate a PFN Identity
          • Customize PFN Networks
      • Bootstrap a Node
        • Bootstrap from a Snapshot
        • Bootstrap from a Backup
      • Configure a Node
        • State Synchronization
        • Data Pruning
        • Telemetry
        • Locating Node Files
          • Files For Mainnet
          • Files For Testnet
          • Files For Devnet
      • Monitor a Node
        • Node Inspection Service
        • Important Node Metrics
        • Node Health Checker
    • Reference
      • Endless Error Codes
      • Move Reference Documentation
      • Endless Glossary
    • FAQs
  • Endless Bridge
    • Intro to Endless Bridge
    • How to use bridge
    • Liquidity Management
    • Faucet
    • Developer Integration
      • Contract Integration
        • Message Contract
        • Execute Contract
      • Server-Side Integration
        • Message Sender
        • Example of Message Listener Service (Rust)
        • Example of Token Cross-Chain (JS)
  • Endless Wallet
    • User Guide
    • Basic Tutorial
    • FAQs
    • MultiAccount
    • SDK
      • Functions
      • Events
  • GameFi
    • Intro
    • GameFi & Endless
  • Endless Modules
    • Stacks
    • Storage
    • Module List
  • Endless Ecosystem
    • Intro
    • Show Cases
    • App Demo
  • Whitepaper
  • Endless SCAN
    • User Guide
  • MULTI-SIGNATURE
    • Multi-Signature User Guide
  • Regulations
    • Privacy Policy
    • Terms of Service
    • Funding Terms - Disclaimer
Powered by GitBook
On this page
  • Design Purpose
  • API
  • View Functions
  • Management Functions
Export as PDF
  1. Endless Chain
  2. Tech Docs

Token Locking & Distribution

PreviousSafety TransactionNextStart

Last updated 4 months ago

Design Purpose

Due to the comparatively massive volumes sold during early-stage rounds, projects may encounter extreme selling pressure after the IDO and after the token has been posted on Centralized Exchange – CEX / Decentralized Exchange – DEX. It significantly lowers the price of tokens by increasing the total amount of tokens in circulation.

For the Token Economy to stay sustainable & effective, the majority of tokens must be kept by investors rather than being sold on the market. Members can stop the value of its token from sinking by locking up tokens. Additionally, it prevents team members from selling their tokens as soon as trade begins, safeguarding holders’ interests.

Endless's locking_coin_ex contract manages token distribution via a locking and unlocking mechanism, ensuring gradual token release over a defined period to control circulation.

The contract allows any user to:

  • Lock any amount of any fungible token, including native EDS.

  • Specify the recipient account for unlocked tokens.

  • Define a two-stage release plan:

    • Specify a portion of tokens for immediate release at a designated epoch.

    • Release the remaining tokens linearly over a stipulated epoch interval.

  • The recipient invokes the do_claim function to fetch the released asset.

API

The following are the main API interfaces provided by this contract:

View Functions

Query total lock amount

total_locks(token_address: address): u128

  • Function: Query the total locked amount for the specified token address.

  • Parameters: token_address - The token address.

  • Return value: Total locked amount.

List all stakers

public fun get_all_stakers(token_address: address): vector<address>

  • Function: Query all staker addresses for the specified token address.

  • Parameters: token_address - The token address.

  • Return value: List of staker addresses.

Query one of staker's token locking amount

public fun staking_amount(token_address: address, recipient: address): u128

  • Function: Query the staking amount for the specified staker at the specified token address.

  • Parameters: token_address - The token address, recipient - The staker address.

  • Return value: Staking amount.

UnLockInfo

the structure contains receiver's address when release, and next release plan(amount and related epoch)

struct UnlockInfo has drop {
    address: address,
    unlocked: u128,
    unlock_list: vector<UnlockAt>,
}

List all staker's token release-plan

public fun get_all_stakers_unlock_info(token_address: address): vector<UnlockInfo>

  • Function: Query the unlock information for all stakers at the specified token address.

  • Parameters: token_address - The token address.

  • Return value: List of unlock information.

Query one of staker's token release-plan

public fun get_unlock_info(token_address: address, sender: address): UnlockInfo

  • Function: Query the unlock information for the specified staker at the specified token address.

  • Parameters: token_address - The token address, sender - The staker address.

  • Return value: Unlock information.

Management Functions

Add Locking Plan

public entry fun add_locking_plan_from_unlocked_balance(sender: &signer, token_address: address, receiver: address, total_coins: u128, first_unlock_bps: u64, first_unlock_epoch: u64, stable_unlock_interval: u64, stable_unlock_periods: u64)

  • Function: Add a locking plan from the unlocked balance.

  • Parameters:

    • sender - The signer,

    • token_address - The token address,

    • receiver - The receiver address,

    • total_coins - The total locked amount,

    • first_unlock_bps - The first unlock percentage,

    • first_unlock_epoch - The first unlock epoch,

    • stable_unlock_interval - The stable unlock interval,

    • stable_unlock_periods - The number of stable unlock periods.

Add Locking Plan

public entry fun add_locking_plan(sender: &signer, token_address: address, receiver: address, total_coins: u128, first_unlock_bps: u64, first_unlock_epoch: u64, stable_unlock_interval: u64, stable_unlock_periods: u64)

  • Function: Add a locking plan.

  • Parameters:

    • sender - The signer,

    • token_address - The token address,

    • receiver - The receiver address,

    • total_coins - The total locked amount,

    • first_unlock_bps - The first unlock percentage,

    • first_unlock_epoch - The first unlock epoch,

    • stable_unlock_interval - The stable unlock interval,

    • stable_unlock_periods - The number of stable unlock periods.

Claim leased tokens

public entry fun claim(sender: &signer, token_address: address, amount: u128)

  • Function: Claim unlocked tokens.

  • Parameters:

    • sender - The signer,

    • token_address - The token address,

    • amount - The claim amount.

Locking & Distribution