从GetAddress获取地址时出错 - Trezor开发

问题描述 投票:0回答:1

我正在为Trezor构建一个C#HID库。它运作良好。我能够通过pin条目并检索我的xpub,我可以获取地址。但是,没有返回的地址与Trezor钱包网站中的任何地址相匹配。

你可以在这里看到HID doco:https://doc.satoshilabs.com/trezor-tech/api-workflows.html#passphrase-meta-workflow

这不是一个真正的C#问题。相反,这是任何Trezor HID开发人员的一般性问题。最大的问题是,如果我将HDNodePathType消息作为GetAddress方法的Multisig属性传递,则会收到错误“无法编码地址”。我需要通过GetAddress消息传递什么才能获得有效地址?

这是一个Android回购:https://github.com/trezor/trezor-android

c# blockchain bitcoin hid trezor
1个回答
0
投票

这个问题现在已经解决了。 Trezor.Net有一个工作实例可以克隆here

获取地址的是code

public async Task<string> GetAddressAsync(IAddressPath addressPath, bool isPublicKey, bool display, AddressType addressType, InputScriptType inputScriptType, string coinName)
{
    try
    {
        var path = addressPath.ToArray();

        if (isPublicKey)
        {
            var publicKey = await SendMessageAsync<PublicKey, GetPublicKey>(new GetPublicKey { CoinName = coinName, AddressNs = path, ShowDisplay = display, ScriptType = inputScriptType });
            return publicKey.Xpub;
        }
        else
        {
            switch (addressType)
            {
                case AddressType.Bitcoin:

                    //Ultra hack to deal with a coin name change in Firmware Version 1.6.2
                    if ((Features.MajorVersion <= 1 && Features.MinorVersion < 6) && coinName == "Bgold")
                    {
                        coinName = "Bitcoin Gold";
                    }

                    return (await SendMessageAsync<Address, GetAddress>(new GetAddress { ShowDisplay = display, AddressNs = path, CoinName = coinName, ScriptType = inputScriptType })).address;

                case AddressType.Ethereum:

                    var ethereumAddress = await SendMessageAsync<EthereumAddress, EthereumGetAddress>(new EthereumGetAddress { ShowDisplay = display, AddressNs = path });

                    var sb = new StringBuilder();
                    foreach (var b in ethereumAddress.Address)
                    {
                        sb.Append(b.ToString("X2").ToLower());
                    }

                    var hexString = sb.ToString();

                    return $"0x{hexString}";
                default:
                    throw new NotImplementedException();
            }
        }
    }
    catch (Exception ex)
    {
        Logger?.Log("Error Getting Trezor Address", LogSection, ex, LogLevel.Error);
        throw;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.