首页 > 解决方案 > Python 中的 XRP Warp 钱包

问题描述

我想用 Python 实现Ripple Warp 钱包。我能够成功生成一个地址,但它与网站输出不匹配。

这是我的代码:

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Hash import HMAC, SHA256
import binascii
import scrypt
from xrpl.core import keypairs


def hmac_sha256(secret, salt):
    m = HMAC.new(secret, None, SHA256)
    m.update(salt)
    return m.digest()


def sxor(s1,s2):
    return ''.join(chr((a) ^ (b)) for a,b in zip(s1,s2))


def generate_keypair(passphrase, salt=""):
    # s1 = scrypt(key=(passphrase||0x1), salt=(salt||0x1), N=2^18, r=8, p=1, dkLen=32)
    s1 = scrypt.hash(passphrase.encode() + b"\x01", salt.encode() + b"\x01", 1 << 18, 8, 1, 32)
    print("S1: ",s1)

    # s2 = pbkdf2(key=(passphrase||0x2), salt=(salt||0x2), c=2^16, dkLen=32, prf=HMAC_SHA256)
    s2 = PBKDF2(password=passphrase.encode() + b"\x02",salt=salt.encode() + b"\x02",
        dkLen=32, count=1 << 16, prf=hmac_sha256)
    print("S2: ", s2)
    return binascii.hexlify(sxor(s1,s2).encode())


def getXRPAddress(passphrase, salt):
    # Use Warp Wallet algorithm to generate seed
    rawSeed = generate_keypair(passphrase,salt)
    # Generate Address with xrpl-py
    seed = keypairs.generate_seed(entropy=rawSeed.decode())
    public, private = keypairs.derive_keypair(seed)
    pk = keypairs.derive_classic_address(public)
    return pk


pk = getXRPAddress("helloworld",salt="")
print("Public Key:")
print(pk)
# returns: r4P69jspBpGvTcKQJf1XLRojZGWWjvop9c
# should be: r4LuZGjbLfrgNG59wcvNSeWF5EH5NiaiQZ

脚本输出为:r4P69jspBpGvTcKQJf1XLRojZGWWjvop9c

网站输出为:r4LuZGjbLfrgNG59wcvNSeWF5EH5NiaiQZ

我有什么问题或者我需要调整什么以匹配网站输出吗?

标签: pythonpycryptocryptocurrencyxrp

解决方案


推荐阅读