public static string generatePaperWallet(string[] keys) { List <string> QRCodesImages = new List <string>(); foreach (string key in keys) { var generator = new PayloadGenerator.BitcoinAddress(key.ToString(), 0); string payload = generator.ToString(); QRCodeGenerator qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); var qrCodeAsBitmap = qrCode.GetGraphic(8); qrCodeAsBitmap.Save(@"C:\PaperWalletImages\QRCode" + key + ".png"); QRCodesImages.Add(@"C:\PaperWalletImages\QRCode" + key + ".png"); QRCodesImages.Add(key.ToString()); } Image instanceImg = Bitmap.FromFile(@"C:\PaperWalletInstance.jpg"); Image privKey = Bitmap.FromFile(QRCodesImages[0]); Image pubKey = Bitmap.FromFile(QRCodesImages[2]); Graphics i = Graphics.FromImage(instanceImg); i.DrawImage(pubKey, 0, 370); i.DrawImage(privKey, 2300, 300); i.DrawString(QRCodesImages[1], new Font("Arial", (float)13.5), new SolidBrush(Color.Black), 1730, 1450); i.DrawString(QRCodesImages[3], new Font("Arial", (float)15), new SolidBrush(Color.Black), 0, 1450); instanceImg.Save(@"C:\PaperWalletImages\outer" + QRCodesImages[1] + ".jpg"); return(@"C:\PaperWalletImages\outer" + QRCodesImages[1] + ".jpg"); }
public void bitcoin_address_generator_should_round_to_satoshi() { var address = "175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"; var amount = .123456789; var generator = new PayloadGenerator.BitcoinAddress(address, amount); generator .ToString() .ShouldContain("amount=.12345679"); }
public void bitcoin_address_generator_should_skip_missing_message() { var address = "175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"; var amount = .123; var generator = new PayloadGenerator.BitcoinAddress(address, amount); generator .ToString() .ShouldNotContain("message"); }
public void bitcoin_address_generator_should_skip_missing_label() { var address = "175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"; var amount = .123; var message = "Some Message to Encode"; var generator = new PayloadGenerator.BitcoinAddress(address, amount, null, message); generator .ToString() .ShouldNotContain("label"); }
public void bitcoin_address_generator_can_generate_address() { var address = "175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"; var amount = .123; var label = "Some Label to Encode"; var message = "Some Message to Encode"; var generator = new PayloadGenerator.BitcoinAddress(address, amount, label, message); generator .ToString() .ShouldBe("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Some%20Label%20to%20Encode&message=Some%20Message%20to%20Encode&amount=.123"); }
public void bitcoin_address_generator_disregards_current_culture() { var currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); var address = "175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"; var amount = .123; var generator = new PayloadGenerator.BitcoinAddress(address, amount); generator .ToString() .ShouldBe("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=.123"); Thread.CurrentThread.CurrentCulture = currentCulture; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) { throw new ArgumentNullException(nameof(value)); } if (targetType == null) { throw new ArgumentNullException(nameof(targetType)); } if (targetType != typeof(ImageSource)) { throw new ArgumentException("Invalid target type", nameof(targetType)); } if (!value.GetType().IsAssignableFrom(typeof(Payment))) { throw new ArgumentException("Invalid value type", nameof(value)); } var payment = (Payment)value; if (string.IsNullOrWhiteSpace(payment.Address) || payment.ValueBitcoin <= 0) { return(null); } var generator = new PayloadGenerator.BitcoinAddress( payment.Address , System.Convert.ToDouble(payment.ValueBitcoin) , label: $"Pagamento {App.Name}" ); var payload = generator.ToString(); var qrGenerator = new QRCodeGenerator(); var qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.H); var qrCode = new PngByteQRCode(qrCodeData); var qrCodeAsPngArray = qrCode.GetGraphic(20); // this memory stream should not be disposed here var ms = new MemoryStream(qrCodeAsPngArray); return(ImageSource.FromStream(() => ms)); }