LXP ERC20 Token Impl

使用 ERC20 Token 的方式实现 LXP,设计思路如下:

Token Contract 可能需要是一个可升级合约(因为尚有类似如何回购/销毁的逻辑无法最终确定)。合约接口如下:

interface LXP {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    // grant mint role for minter to mint value LXP
    event GrantMint(address indexed minter, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    // restricted transfer, only allowed to transfer to some specific addresses
    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

   // allow minter to mint value LXP at most. Can only be called by admin role.
  // emits a GrantMint event
   function grantMint(address minter, uint256 value);

   // mint value LXP to address. Can only be called by someone has the grant to mint, will decrease the allowance of mint after this call.
   function mint(address address, uint256 value);
   // mintBatch, emits a Transfer event for each mint
   function mintBatch(address[] addresses, uint256[] value);
   // 销毁 LXP 到 adress(0)
   function burn(uint256 value);
}

主要在以下方面区别于普通的 ERC20 token:

  1. 限制转移条件,只允许一些特定场景下的流通
  2. 通过 grantMint 赋予某个地址 mint 一定数量 LXP 的权限,后续此地址可以进行 LXP 的分发

对照到 LXDao 的工作流程中,使用流程如下:

  1. LXDao 多签地址部署合约
  2. idea 立项之后,LXDao 通过表决,确定项目的 LXP 额度后,由 LXDao 多签地址调用 grantMint() 给予项目负责人钱包地址对应额度的 mint 权限
  3. 项目负责人自己进行分配控制(时间,分配比例),这些都不在需要 LXDao 的参与。
1 Like

由builder发起的burn,应该需要签名防重放,另外需要erc20地址、兑付比例,在一个burn内实现所有操作。

对于 burn LXP to get USDC 的需求,或许需要单独的兑换合约来实现。

如沟通,burn != 兑换,兑换会转移到一个单独合约去做。burn 就保留一个最原始的 burn 实现就可以了

Should we implement a Pausable interface, in-case of contract migration?

@neal-zhu @kahn.yuan