Skip to content

Commit 6bb916a

Browse files
committed
Merge #1530: fix: use liquidnetwork or liquidtestnet for qr uri
4c79d5a fix: use liquidnetwork or liquidtestnet for uri in elements mode (Byron Hambly) Pull request description: fixes #1529 ACKs for top commit: tomt1664: ACK 4c79d5a psgreco: ACK 4c79d5a Tree-SHA512: 00862c3851bd1663ed17dfde9ef155840d4d735b3e61ad890155dccdc9cb7fb4fc086021a9ae1a1030ff8e809dc6ffb46a5aeed35d3c5625b44f65ec6cdae421
2 parents 344581c + 4c79d5a commit 6bb916a

2 files changed

Lines changed: 50 additions & 7 deletions

File tree

src/qt/guiutil.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,10 @@ void AddButtonShortcut(QAbstractButton* button, const QKeySequence& shortcut)
142142

143143
bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out)
144144
{
145-
return false; // TODO
146-
147-
// return if URI is not valid or is no bitcoin: URI
148-
if(!uri.isValid() || uri.scheme() != QString("bitcoin"))
145+
// return if URI is not valid or incorrect scheme
146+
bool valid_liquid = g_con_elementsmode && (uri.scheme() == QString("liquidnetwork") || uri.scheme() == QString("liquidtestnet"));
147+
bool valid_bitcoin = !g_con_elementsmode && (uri.scheme() == QString("bitcoin"));
148+
if (!uri.isValid() || !(valid_liquid || valid_bitcoin))
149149
return false;
150150

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

212-
QString ret = QString("bitcoin:%1").arg(bech_32 ? info.address.toUpper() : info.address);
212+
QString network = QString("bitcoin:%1");
213+
if (g_con_elementsmode) {
214+
network = Params().NetworkIDString() == "liquidtestnet" ? QString("liquidtestnet:%1") : QString("liquidnetwork:%1");
215+
}
216+
QString ret = network.arg(bech_32 ? info.address.toUpper() : info.address);
213217
int paramCount = 0;
214218

215219
if (info.amount)

src/qt/test/uritests.cpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,47 @@
1111

1212
void URITests::uriTests()
1313
{
14-
/* Elements doesn't use URI
14+
// liquid URI tests
15+
g_con_elementsmode = true;
16+
SendCoinsRecipient info{"lq1qq0ha4ml3dsqexnkdssskvt203kl54xj5zxt9sfwgzpy7unf49aagslltf4k7pqjtwk4j8emny0k8vppj88k0z9pa4y0mwfzyu", "label", 100000000, "message"};
17+
QString liquid_uri = GUIUtil::formatBitcoinURI(info);
18+
QVERIFY(liquid_uri.split(":")[0] == "liquidnetwork");
19+
20+
SendCoinsRecipient rcv;
21+
QVERIFY(GUIUtil::parseBitcoinURI(liquid_uri, &rcv));
22+
QVERIFY(rcv.address == QString("lq1qq0ha4ml3dsqexnkdssskvt203kl54xj5zxt9sfwgzpy7unf49aagslltf4k7pqjtwk4j8emny0k8vppj88k0z9pa4y0mwfzyu"));
23+
QVERIFY(rcv.amount == 100000000);
24+
QVERIFY(rcv.label == QString("label"));
25+
QVERIFY(rcv.message == QString("message"));
26+
27+
// example liquidv1 URI from blockstream app
28+
QUrl url{QString("liquidnetwork:lq1qq2j9v49hgsgz9s7v7myty50hsy0a6vk6sjmc9z6m0k208njwcllg9dzwk6prxmzy0wzvejc8tdn0fls88x8ksefwdw2l5hym9?assetid=6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d&amount=1.00000000")};
29+
QVERIFY(GUIUtil::parseBitcoinURI(url, &rcv));
30+
QVERIFY(rcv.address == QString("lq1qq2j9v49hgsgz9s7v7myty50hsy0a6vk6sjmc9z6m0k208njwcllg9dzwk6prxmzy0wzvejc8tdn0fls88x8ksefwdw2l5hym9"));
31+
QVERIFY(rcv.amount == 100000000);
32+
QVERIFY(rcv.label.isEmpty());
33+
QVERIFY(rcv.message.isEmpty());
34+
35+
// example liquid testnet URI from blockstream app
36+
url.setUrl(QString("liquidtestnet:tlq1qqggjrm7s09agm8vvgsld8sq3a0luppzwyg3fl3rtrl9xcq50n2cny8le5xdl4k7ufxz6m4249njkdvxfzhdax6fczggf8ncjz?assetid=144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49&amount=0.00100000"));
37+
QVERIFY(GUIUtil::parseBitcoinURI(url, &rcv));
38+
QVERIFY(rcv.address == QString("tlq1qqggjrm7s09agm8vvgsld8sq3a0luppzwyg3fl3rtrl9xcq50n2cny8le5xdl4k7ufxz6m4249njkdvxfzhdax6fczggf8ncjz"));
39+
QVERIFY(rcv.amount == 100000);
40+
QVERIFY(rcv.label.isEmpty());
41+
QVERIFY(rcv.message.isEmpty());
42+
43+
// check bitcoin mode
44+
g_con_elementsmode = false;
45+
info = SendCoinsRecipient{"175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W", "label", 100000000, "message"};
46+
QString bitcoin_uri = GUIUtil::formatBitcoinURI(info);
47+
QVERIFY(bitcoin_uri.split(":")[0] == "bitcoin");
48+
QVERIFY(GUIUtil::parseBitcoinURI(bitcoin_uri, &rcv));
49+
QVERIFY(rcv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));
50+
QVERIFY(rcv.amount == 100000000);
51+
QVERIFY(rcv.label == QString("label"));
52+
QVERIFY(rcv.message == QString("message"));
53+
54+
// Bitcoin URI tests from upstream
1555
SendCoinsRecipient rv;
1656
QUrl uri;
1757
uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));
@@ -64,5 +104,4 @@ void URITests::uriTests()
64104

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

0 commit comments

Comments
 (0)