MultiversXSDK-Py钱包与签名管理Skill mvx_sdk_py_wallets

本技能提供了 MultiversX 区块链平台的 Python SDK 中钱包管理、密钥推导和交易签名的完整解决方案。适用于区块链开发者、DApp 构建者和需要安全账户管理的场景。关键词:MultiversX, Python SDK, 钱包管理, 交易签名, 区块链开发, DApp 认证。

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

name: mvx_sdk_py_wallets description: MultiversX Python SDK 的钱包和密钥管理。

MultiversX SDK-Py 钱包与签名

本技能涵盖了账户管理、密钥推导和交易签名。

账户创建

from multiversx_sdk import Account, Mnemonic, UserWallet, UserPem

# 从 PEM 文件(仅测试)
account = Account.new_from_pem("wallet.pem")

# 从 keystore(生产环境)
account = Account.new_from_keystore("wallet.json", "password")

# 从秘密密钥(十六进制字符串)
account = Account(secret_key=bytes.fromhex("..."))

助记词操作

# 生成新助记词
mnemonic = Mnemonic.generate()
words = mnemonic.get_words()

# 推导密钥
secret_key = mnemonic.derive_key(0)  # 索引 0
public_key = secret_key.generate_public_key()
address = public_key.to_address("erd")

# 从助记词获取地址
address = Mnemonic.to_address(mnemonic, 0)

钱包存储

# 保存助记词到 keystore
wallet = UserWallet.from_mnemonic(mnemonic.get_text(), "password")
wallet.save("wallet.json")

# 保存秘密密钥到 keystore
wallet = UserWallet.from_secret_key(secret_key, "password")
wallet.save("wallet.json")

# 保存到 PEM(仅测试)
pem = UserPem(label=address.to_bech32(), secret_key=secret_key)
pem.save("wallet.pem")

交易签名

# 控制器创建的交易自动签名
tx = controller.create_transaction_for_transfer(account, nonce, ...)

# 手动签名
tx.signature = account.sign_transaction(tx)

消息签名

from multiversx_sdk import Message

message = Message("Hello".encode())
signature = account.sign_message(message)

# 验证
is_valid = account.verify_message(message, signature)

NativeAuth

dApps 的认证:

from multiversx_sdk import NativeAuthClient, NativeAuthServer

# 客户端:生成令牌
client = NativeAuthClient("https://app.example.com")
init_token = client.initialize()
# 签名 init_token...
access_token = client.get_token(address, init_token, signature)

# 服务器:验证令牌
server = NativeAuthServer(accepted_origins=["https://app.example.com"])
result = server.validate(access_token)
# result.address, result.origin, result.block_hash

Ledger

需要 ledger-wallets 依赖。

from multiversx_sdk import LedgerAccount

ledger = LedgerAccount(index=0)
print(ledger.address)
tx.signature = ledger.sign_transaction(tx)

安全最佳实践

  1. 保护 keystore 密码
  2. 在生产环境中永不暴露 PEM 文件
  3. 发送前验证地址
  4. 使用 NativeAuth 进行认证