Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions src/qt/guiutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,10 @@ void AddButtonShortcut(QAbstractButton* button, const QKeySequence& shortcut)

bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out)
{
return false; // TODO

// return if URI is not valid or is no bitcoin: URI
if(!uri.isValid() || uri.scheme() != QString("bitcoin"))
// return if URI is not valid or incorrect scheme
bool valid_liquid = g_con_elementsmode && (uri.scheme() == QString("liquidnetwork") || uri.scheme() == QString("liquidtestnet"));
bool valid_bitcoin = !g_con_elementsmode && (uri.scheme() == QString("bitcoin"));
if (!uri.isValid() || !(valid_liquid || valid_bitcoin))
return false;

SendCoinsRecipient rv;
Expand Down Expand Up @@ -209,7 +209,11 @@ QString formatBitcoinURI(const SendCoinsRecipient &info)
{
bool bech_32 = info.address.startsWith(QString::fromStdString(Params().Bech32HRP() + "1"));

QString ret = QString("bitcoin:%1").arg(bech_32 ? info.address.toUpper() : info.address);
QString network = QString("bitcoin:%1");
if (g_con_elementsmode) {
network = Params().NetworkIDString() == "liquidtestnet" ? QString("liquidtestnet:%1") : QString("liquidnetwork:%1");
}
QString ret = network.arg(bech_32 ? info.address.toUpper() : info.address);
int paramCount = 0;

if (info.amount)
Expand Down
43 changes: 41 additions & 2 deletions src/qt/test/uritests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,47 @@

void URITests::uriTests()
{
/* Elements doesn't use URI
// liquid URI tests
g_con_elementsmode = true;
SendCoinsRecipient info{"lq1qq0ha4ml3dsqexnkdssskvt203kl54xj5zxt9sfwgzpy7unf49aagslltf4k7pqjtwk4j8emny0k8vppj88k0z9pa4y0mwfzyu", "label", 100000000, "message"};
QString liquid_uri = GUIUtil::formatBitcoinURI(info);
QVERIFY(liquid_uri.split(":")[0] == "liquidnetwork");

SendCoinsRecipient rcv;
QVERIFY(GUIUtil::parseBitcoinURI(liquid_uri, &rcv));
QVERIFY(rcv.address == QString("lq1qq0ha4ml3dsqexnkdssskvt203kl54xj5zxt9sfwgzpy7unf49aagslltf4k7pqjtwk4j8emny0k8vppj88k0z9pa4y0mwfzyu"));
QVERIFY(rcv.amount == 100000000);
QVERIFY(rcv.label == QString("label"));
QVERIFY(rcv.message == QString("message"));

// example liquidv1 URI from blockstream app
QUrl url{QString("liquidnetwork:lq1qq2j9v49hgsgz9s7v7myty50hsy0a6vk6sjmc9z6m0k208njwcllg9dzwk6prxmzy0wzvejc8tdn0fls88x8ksefwdw2l5hym9?assetid=6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d&amount=1.00000000")};
QVERIFY(GUIUtil::parseBitcoinURI(url, &rcv));
QVERIFY(rcv.address == QString("lq1qq2j9v49hgsgz9s7v7myty50hsy0a6vk6sjmc9z6m0k208njwcllg9dzwk6prxmzy0wzvejc8tdn0fls88x8ksefwdw2l5hym9"));
QVERIFY(rcv.amount == 100000000);
QVERIFY(rcv.label.isEmpty());
QVERIFY(rcv.message.isEmpty());

// example liquid testnet URI from blockstream app
url.setUrl(QString("liquidtestnet:tlq1qqggjrm7s09agm8vvgsld8sq3a0luppzwyg3fl3rtrl9xcq50n2cny8le5xdl4k7ufxz6m4249njkdvxfzhdax6fczggf8ncjz?assetid=144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49&amount=0.00100000"));
QVERIFY(GUIUtil::parseBitcoinURI(url, &rcv));
QVERIFY(rcv.address == QString("tlq1qqggjrm7s09agm8vvgsld8sq3a0luppzwyg3fl3rtrl9xcq50n2cny8le5xdl4k7ufxz6m4249njkdvxfzhdax6fczggf8ncjz"));
QVERIFY(rcv.amount == 100000);
QVERIFY(rcv.label.isEmpty());
QVERIFY(rcv.message.isEmpty());

// check bitcoin mode
g_con_elementsmode = false;
info = SendCoinsRecipient{"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W", "label", 100000000, "message"};
QString bitcoin_uri = GUIUtil::formatBitcoinURI(info);
QVERIFY(bitcoin_uri.split(":")[0] == "bitcoin");
QVERIFY(GUIUtil::parseBitcoinURI(bitcoin_uri, &rcv));
QVERIFY(rcv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
QVERIFY(rcv.amount == 100000000);
QVERIFY(rcv.label == QString("label"));
QVERIFY(rcv.message == QString("message"));

// Bitcoin URI tests from upstream
SendCoinsRecipient rv;
QUrl uri;
uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));
Expand Down Expand Up @@ -64,5 +104,4 @@ void URITests::uriTests()

uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example"));
QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));
*/
}