一、质押核心机制与技术架构

LiquiSynth Protocol 的质押系统基于 Arbitrum Nitro 技术栈,采用模块化智能合约设计,分为以下核心模块:

  1. 质押模块(Staking Module)

    • 功能:处理用户资产质押、流动性质押代币(LSP-LP)生成及收益分配。

    • 技术原理

      • 质押代币化:用户质押资产(如 ARB)后,合约铸造 1:1 锚定的流动性质押代币(如 stARB),采用 ERC-4626 标准(Tokenized Vaults)。

      • 自动复利:质押收益通过 收益聚合器(Yield Aggregator) 自动再投资至 GMX、Radiant 等协议,复利逻辑通过链下计算器与链上验证结合实现。

    • 关键代码

      // stARB 合约(ERC-4626 实现)
      contract StakedARB is ERC4626 {
          using SafeERC20 for IERC20;
      
          IERC20 public immutable asset; // ARB 代币合约
          address public yieldAggregator; // 收益聚合器地址
      
          constructor(IERC20 _asset) ERC4626(_asset, "Staked ARB", "stARB") {
              asset = _asset;
          }
      
          // 质押 ARB 生成 stARB
          function deposit(uint256 assets, address receiver) public override returns (uint256 shares) {
              shares = super.deposit(assets, receiver);
              _reinvestToYieldAggregator(assets); // 自动复利
          }
      
          // 收益再投资逻辑
          function _reinvestToYieldAggregator(uint256 amount) internal {
              asset.safeTransfer(yieldAggregator, amount);
              IYieldAggregator(yieldAggregator).deposit(amount);
          }
      }
  2. LP 质押与合成资产铸造模块

    • 功能:用户质押 LSP-ETH LP 代币,获得合成资产铸造权限。

    • 技术原理

      • LP 代币验证:基于 Uniswap V3 的 LP NFT(Non-Fungible Position)或 Balancer 加权池 LP 代币,通过预言机验证流动性价值。

      • 超额抵押机制:铸造合成资产需抵押 LP 价值的 150%(动态抵押率),通过 Chainlink 预言机获取实时价格。

    • 关键代码

      // 合成资产铸造合约
      contract SyntheticMinter {
          using SafeMath for uint256;
      
          IChainlinkOracle public oracle; // Chainlink 价格预言机
          IERC20 public collateralToken;  // LSP-ETH LP 代币
          ISyntheticToken public synthUSD; // LSP-USD 合成代币
      
          // 抵押率 = 抵押物价值 / 合成资产价值 ≥ 150%
          uint256 public constant MIN_COLLATERAL_RATIO = 150; 
      
          // 铸造合成资产
          function mintSynth(uint256 collateralAmount, uint256 synthAmount) external {
              uint256 collateralValue = oracle.getPrice(collateralToken) * collateralAmount;
              uint256 synthValue = oracle.getPrice(synthUSD) * synthAmount;
      
              require(
                  collateralValue >= synthValue * MIN_COLLATERAL_RATIO / 100,
                  "Insufficient collateral"
              );
      
              collateralToken.safeTransferFrom(msg.sender, address(this), collateralAmount);
              synthUSD.mint(msg.sender, synthAmount);
          }
      }

最后更新于