MultiversXSDK-JS钱包管理Skill mvx_sdk_js_wallets

该技能为 MultiversX 区块链的 TypeScript/JavaScript SDK 提供钱包创建、密钥管理、交易签名等功能,涵盖账户管理、助记词操作、安全存储和 Ledger 设备支持,适用于 DApp 开发和 Web3 应用。关键词:MultiversX, 区块链, 钱包, 签名, TypeScript, JavaScript, SDK, 账户管理, 加密, 安全, DApp 开发, Web3, 交易签名, 密钥派生。

链开发 0 次安装 0 次浏览 更新于 3/21/2026

名称: mvx_sdk_js_wallets 描述: MultiversX TypeScript/JavaScript SDK 的钱包和密钥管理。

MultiversX SDK-JS 钱包与签名

该技能涵盖账户管理、密钥派生和交易签名。

账户创建

import { Account, Address, Mnemonic, UserWallet, UserPem } from "@multiversx/sdk-core";

// 从 PEM 文件(仅用于测试 - 不安全)
const account = await Account.newFromPem("wallet.pem");

// 从 keystore(生产环境)
const account = await Account.newFromKeystore("wallet.json", "密码");

// 从入口点(生成新账户)
const account = entrypoint.createAccount();

助记词操作

// 生成新助记词(24个单词)
const mnemonic = Mnemonic.generate();
const words = mnemonic.getWords();

// 派生密钥
const secretKey = mnemonic.deriveKey(0);  // 第一个账户
const publicKey = secretKey.generatePublicKey();
const address = publicKey.toAddress();

钱包存储

// 将助记词保存到 keystore
const wallet = UserWallet.fromMnemonic({
    mnemonic: mnemonic.toString(),
    password: "安全密码"
});
wallet.save("wallet.json");

// 将私钥保存到 keystore
const wallet = UserWallet.fromSecretKey({
    secretKey: secretKey,
    password: "安全密码"
});
wallet.save("wallet.json");

// 保存为 PEM(仅用于测试)
const pem = new UserPem(address.toBech32(), secretKey);
pem.save("wallet.pem");

交易签名

// 控制器创建的交易自动签名
const tx = await controller.createTransactionForTransfer(account, nonce, options);
// tx.signature 已设置

// 工厂创建的交易需要手动签名
const tx = await factory.createTransactionForTransfer(sender, options);
tx.nonce = account.getNonceThenIncrement();
tx.signature = await account.signTransaction(tx);

消息签名

// 签名任意消息
const message = new SignableMessage({ message: Buffer.from("你好") });
const signature = await account.signMessage(message);

// 验证签名
import { MessageSigner } from "@multiversx/sdk-core";
const isValid = MessageSigner.verify(message, signature, publicKey);

Ledger 设备

// Ledger 需要安装 MultiversX 应用
import { LedgerAccount } from "@multiversx/sdk-hw-provider";

const ledger = new LedgerAccount();
await ledger.init();
const address = await ledger.getAddress(0);

安全最佳实践

实践 原因
使用 keystore 文件 使用密码加密
切勿提交 PEM 文件 明文私钥
主网使用 Ledger 硬件安全
验证地址 防止拼写错误