You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在ImmutableX链上通过JavaScript在后端签署交易?

在Firebase云函数中实现ImmutableX上GODS代币转账

你提到没找到ImmutableX的JavaScript相关内容,其实官方提供了@imtbl/core-sdk(支持Node.js/浏览器环境),下面是实现GODS代币(ERC20)跨钱包转账的完整方案:

前置准备

  • 安装官方JS SDK:npm install @imtbl/core-sdk ethers(ethers用于签名处理)
  • 确保Firebase云函数使用Node.js 16+版本(SDK依赖要求)
  • 将转账发起方的钱包私钥存入Firebase Secrets Manager,避免硬编码

核心实现流程

1. 初始化ImmutableX客户端

根据网络环境选择配置(主网/测试网):

const { ImmutableX, Config } = require('@imtbl/core-sdk');

// 主网配置,测试网替换为Config.SANDBOX
const client = new ImmutableX(Config.PRODUCTION);

2. 构造转账请求参数

GODS代币在ImmutableX主网的合约地址为0xccc8cb5229b0ac8069c51fd58367fd1e622afd97,ERC20代币的tokenId固定为0:

const transferRequest = {
  sender: "0x发起方钱包地址",
  tokenAddress: "0xccc8cb5229b0ac8069c51fd58367fd1e622afd97",
  tokenId: "0",
  quantity: "100", // 转账数量,字符串格式支持小数
  receiver: "0x接收方钱包地址"
};

3. 实现签名逻辑

ImmutableX要求用发起方钱包对交易消息签名,这里用ethers.js处理:

const { ethers } = require('ethers');

const signTransaction = async (message) => {
  // 从Firebase Secrets获取私钥
  const privateKey = process.env.WALLET_PRIVATE_KEY;
  const wallet = new ethers.Wallet(privateKey);
  return wallet.signMessage(message);
};

4. 封装为Firebase云函数

以下是HTTP可调用函数的完整示例:

const functions = require("firebase-functions");
const { ImmutableX, Config } = require('@imtbl/core-sdk');
const { ethers } = require('ethers');

// 可调用云函数:处理ImmutableX上的GODS转账
exports.transferGods = functions.https.onCall(async (data, context) => {
  // 可选:验证调用者身份
  if (!context.auth) {
    throw new functions.https.HttpsError('unauthenticated', '需要用户认证');
  }

  try {
    const client = new ImmutableX(Config.PRODUCTION);

    const transferRequest = {
      sender: data.senderAddress,
      tokenAddress: "0xccc8cb5229b0ac8069c51fd58367fd1e622afd97",
      tokenId: "0",
      quantity: data.quantity,
      receiver: data.receiverAddress
    };

    const signer = async (message) => {
      const privateKey = process.env.WALLET_PRIVATE_KEY;
      const wallet = new ethers.Wallet(privateKey);
      return wallet.signMessage(message);
    };

    // 提交转账并获取结果
    const transaction = await client.transfer(transferRequest, signer);
    return {
      success: true,
      transactionId: transaction.transaction_id,
      status: transaction.status
    };
  } catch (error) {
    functions.logger.error('转账失败:', error);
    throw new functions.https.HttpsError('internal', '转账处理失败', error.message);
  }
});

关键注意事项

  • 私钥安全:必须通过Firebase Secrets Manager存储私钥,禁止硬编码或明文存储
  • 网络切换:测试环境使用Config.SANDBOX,同时替换GODS测试网合约地址
  • 错误处理:SDK会抛出余额不足、签名无效、参数错误等异常,需针对性捕获处理
  • 数量格式:转账数量需为字符串,避免浮点数精度问题

内容的提问来源于stack exchange,提问作者Tornike_14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:02:00