import { AmountJson, parsePaytoUri, i18n, generateSegwitAddress, Amounts, segwitMinAmount, } from "@gnu-taler/taler-util"; import { Fragment, h, VNode } from "preact"; import { BankDetailsByPaytoType } from "../components/BankDetailsByPaytoType"; import { QR } from "../components/QR"; import { ButtonDestructive, WarningBox } from "../components/styled"; import { amountToString } from "../utils/index"; export interface Props { reservePub: string; payto: string; exchangeBaseUrl: string; amount: AmountJson; onCancel: () => void; } export function ReserveCreated({ reservePub, payto, onCancel, exchangeBaseUrl, amount, }: Props): VNode { const paytoURI = parsePaytoUri(payto); // const url = new URL(paytoURI?.targetPath); if (!paytoURI) { return (
could not parse payto uri from exchange {payto}
); } function TransferDetails(): VNode { if (!paytoURI) return ; if (paytoURI.targetType === "bitcoin") { const { segwitAddr1, segwitAddr2 } = generateSegwitAddress(reservePub); const min = segwitMinAmount(); return (

Bitcoin exchange need a transaction with 3 output, one output is the exchange account and the other two are segwit fake address for metadata with an minimum amount. Reserve pub : {reservePub}

In bitcoincore wallet use 'Add Recipient' button to add two additional recipient and copy adresses and amounts

In Electrum wallet paste the following three lines in 'Pay to' field : Make sure the amount show{" "} {Amounts.stringifyValue(Amounts.sum([amount, min, min]).amount)}{" "} BTC, else you have to change the base unit to BTC

); } return (

Make sure to use the correct subject, otherwise the money will not arrive in this wallet.

); } return (

Exchange is ready for withdrawal

To complete the process you need to wire{` `} {amountToString(amount)} to the exchange bank account

Alternative, you can also scan this QR code or open{" "} this link if you have a banking app installed that supports RFC 8905

); }