コード例 #1
0
ファイル: TrezorManager.cs プロジェクト: Raystonn/Trezor.Net
        public async Task <string> GetAddressAsync(
            IAddressPath addressPath,
            bool isPublicKey,
            bool display,
            AddressType addressType,
            InputScriptType inputScriptType,
            string coinName)
        {
            try
            {
                if (addressPath == null)
                {
                    throw new ArgumentNullException(nameof(addressPath));
                }

                var path = addressPath.ToArray();

                if (isPublicKey)
                {
                    var publicKey = await SendMessageAsync <PublicKey, GetPublicKey>(new GetPublicKey { CoinName = coinName, AddressNs = path, ShowDisplay = display, ScriptType = inputScriptType }).ConfigureAwait(false);

                    return(publicKey.Xpub);
                }

                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 && string.Equals(coinName, "Bgold", StringComparison.Ordinal))
                    {
                        coinName = "Bitcoin Gold";
                    }

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

                case AddressType.Ethereum:
                    return(await GetEthereumAddress(display, path).ConfigureAwait(false));


                case AddressType.Cardano:
                    CheckForSupported(nameof(AddressType.Cardano));
                    return((await SendMessageAsync <CardanoAddress, CardanoGetAddress>(new CardanoGetAddress {
                        ShowDisplay = display, AddressNs = path
                    }).ConfigureAwait(false)).Address);

                case AddressType.Stellar:
                    return((await SendMessageAsync <StellarAddress, StellarGetAddress>(new StellarGetAddress {
                        ShowDisplay = display, AddressNs = path
                    }).ConfigureAwait(false)).Address);

                case AddressType.Tezoz:
                    CheckForSupported(nameof(AddressType.Tezoz));
                    return((await SendMessageAsync <TezosAddress, TezosGetAddress>(new TezosGetAddress {
                        ShowDisplay = display, AddressNs = path
                    }).ConfigureAwait(false)).Address);

                case AddressType.NEM:
                    return((await SendMessageAsync <NEMAddress, NEMGetAddress>(new NEMGetAddress {
                        ShowDisplay = display, AddressNs = path
                    }).ConfigureAwait(false)).Address);

                default:
                    throw new NotImplementedException();
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "Error Getting Trezor Address {LogSection}", LogSection);
                throw;
            }
        }
コード例 #2
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="info"></param>
 /// <param name="context"></param>
 protected InputScriptNode(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     mScriptType = (InputScriptType)Enum.Parse(typeof(InputScriptType), info.GetString("ScriptType"));
     mInput = info.GetString("InitialValue");
 }
コード例 #3
0
ファイル: TrezorManager.cs プロジェクト: Raystonn/Trezor.Net
 public Task <string> GetAddressAsync(IAddressPath addressPath, bool isPublicKey, bool display, AddressType addressType, InputScriptType inputScriptType) => GetAddressAsync(addressPath, isPublicKey, display, addressType, inputScriptType, null);
コード例 #4
0
        public async Task <string> GetAddressAsync(IAddressPath addressPath, bool isPublicKey, bool display, AddressType addressType, InputScriptType inputScriptType, string coinName)
        {
            try
            {
                if (addressPath == null)
                {
                    throw new ArgumentNullException(nameof(addressPath));
                }

                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);
                }

                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 && string.Equals(coinName, "Bgold", StringComparison.Ordinal))
                    {
                        coinName = "Bitcoin Gold";
                    }

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

                case AddressType.Ethereum:

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

                    switch (ethereumAddresssds)
                    {
                    case EthereumAddress ethereumAddress:
                        return(ethereumAddress.Address.ToLower());

                    case Contracts.BackwardsCompatible.EthereumAddress ethereumAddress:

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

                        var hexString = sb.ToString();

                        hexString = $"0x{hexString}";

                        return(hexString);
                    }

                    throw new NotImplementedException();



                case AddressType.Cardano:
                    CheckForSupported(nameof(AddressType.Cardano));
                    return((await SendMessageAsync <CardanoAddress, CardanoGetAddress>(new CardanoGetAddress {
                        ShowDisplay = display, AddressNs = path
                    })).Address);

                case AddressType.Stellar:
                    return((await SendMessageAsync <StellarAddress, StellarGetAddress>(new StellarGetAddress {
                        ShowDisplay = display, AddressNs = path
                    })).Address);

                case AddressType.Tezoz:
                    CheckForSupported(nameof(AddressType.Tezoz));
                    return((await SendMessageAsync <TezosAddress, TezosGetAddress>(new TezosGetAddress {
                        ShowDisplay = display, AddressNs = path
                    })).Address);

                case AddressType.NEM:
                    return((await SendMessageAsync <NEMAddress, NEMGetAddress>(new NEMGetAddress {
                        ShowDisplay = display, AddressNs = path
                    })).Address);

                default:
                    throw new NotImplementedException();
                }
            }
            catch (Exception ex)
            {
                Logger?.Log("Error Getting Trezor Address", LogSection, ex, LogLevel.Error);
                throw;
            }
        }
コード例 #5
0
        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", ex, LogSection);
                throw;
            }
        }
コード例 #6
0
        public async Task <string> GetAddressAsync(IAddressPath addressPath, bool isPublicKey, bool display, AddressType addressType, InputScriptType inputScriptType, string coinName)
        {
            try
            {
                if (addressPath == null)
                {
                    throw new ArgumentNullException(nameof(addressPath));
                }

                var path = addressPath.ToArray();

                if (isPublicKey)
                {
                    var publicKey = await SendMessageAsync <PublicKey, GetPublicKey>(new GetPublicKey { AddressNs = path, ShowDisplay = display, ScriptType = inputScriptType });

                    return(publicKey.Xpub);
                }
                else
                {
                    switch (addressType)
                    {
                    case AddressType.Bitcoin:

                        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 KeepKey Address", LogSection, ex, LogLevel.Error);
                throw;
            }
        }
コード例 #7
0
        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 { AddressNs = path, ShowDisplay = display, ScriptType = inputScriptType });

                    return(publicKey.Xpub);
                }
                else
                {
                    switch (addressType)
                    {
                    case AddressType.Bitcoin:
                        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 });

                        return($"0x{ethereumAddress.Address.ToHex().ToLower()}");

                    default:
                        throw new NotImplementedException();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error($"Error Getting KeepKey Address \n {ex}");
                throw;
            }
        }