Skip to content

Task 2-1: Multi-chain Gasless Expansion (Polygon & Arbitrum)

Phase: 2 Priority: Medium Module: biconomy Depends on: Không có Reference: docs/bountyhunter-blockchain-p2/details/feature-evm-integration/SPEC.md

Background

Hiện tại Biconomy chỉ được cấu hình cho BNB Testnet (BICONOMY_BNB_TESTNET_BUNDLER_URL, BICONOMY_BNB_TESTNET_PAYMASTER_API_KEY). Các map constant BICONOMY_KEY, SIGNER_RPC, và GASLESS_SUPPORTED_NETWORK tồn tại nhưng chưa có entry cho Polygon PoS và Arbitrum. Người dùng trên các chain này không thể thực hiện giao dịch gasless, buộc phải trả phí gas thủ công hoặc transaction bị từ chối.

Tasks

Note: Constants được định nghĩa trong file constants của module biconomy (thường là biconomy.constants.ts hoặc constants/index.ts). Các biến môi trường mới phải được thêm đồng thời vào .env.example để dev khác biết cần cấu hình. Không hardcode API key — chỉ dùng process.env.*.

  • [ ] Thêm Polygon PoS mainnet vào BICONOMY_KEY map:
    // Thêm vào BICONOMY_KEY constant:
    [ChainId.POLYGON_MAINNET]: {
      bundlerUrl: process.env.BICONOMY_POLYGON_BUNDLER_URL,
      paymasterApiKey: process.env.BICONOMY_POLYGON_PAYMASTER_API_KEY,
    },
    
  • [ ] Thêm Arbitrum One mainnet vào BICONOMY_KEY map tương tự
  • [ ] Cập nhật SIGNER_RPC map thêm RPC URL cho Polygon và Arbitrum:
    [ChainId.POLYGON_MAINNET]: process.env.POLYGON_RPC_URL,
    [ChainId.ARBITRUM_ONE]: process.env.ARBITRUM_RPC_URL,
    
  • [ ] Thêm ChainId.POLYGON_MAINNETChainId.ARBITRUM_ONE vào GASLESS_SUPPORTED_NETWORK array
  • [ ] Thêm các biến môi trường mới vào .env.example:
    BICONOMY_POLYGON_BUNDLER_URL=https://bundler.biconomy.io/api/v2/137/...
    BICONOMY_POLYGON_PAYMASTER_API_KEY=
    BICONOMY_ARBITRUM_BUNDLER_URL=https://bundler.biconomy.io/api/v2/42161/...
    BICONOMY_ARBITRUM_PAYMASTER_API_KEY=
    POLYGON_RPC_URL=https://polygon-rpc.com
    ARBITRUM_RPC_URL=https://arb1.arbitrum.io/rpc
    
  • [ ] Verify logic trong handleBiconomySendGaslessNft sử dụng GASLESS_SUPPORTED_NETWORK để quyết định có dùng Biconomy hay không — không cần sửa nếu đã đúng

Verification / Acceptance Criteria

  • [ ] Gửi request gasless NFT với chainId = POLYGON_MAINNET → job được xử lý qua Biconomy (không fallback sang non-gasless)
  • [ ] Gửi request với chain không trong GASLESS_SUPPORTED_NETWORK → xử lý qua path thông thường (non-gasless)
  • [ ] .env.example có đủ các biến mới với comment giải thích
  • [ ] TypeScript compile không có lỗi — ChainId enum có giá trị Polygon và Arbitrum
  • [ ] Không có hardcoded API key trong source code

Files to Modify

  • src/biconomy/constants/biconomy.constants.ts (hoặc file constants tương ứng)
  • .env.example