名称: 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 | 硬件安全 |
| 验证地址 | 防止拼写错误 |