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)
安全最佳实践
- 保护 keystore 密码
- 在生产环境中永不暴露 PEM 文件
- 发送前验证地址
- 使用 NativeAuth 进行认证