Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2009-present The Bitcoin Core developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#include <qt/test/uritests.h>7#include <qt/guiutil.h>8#include <qt/walletmodel.h>10#include <QUrl>12void URITests::uriTests()13{14SendCoinsRecipient rv;15QUrl uri;16uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));17QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));19uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="));20QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));21QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));22QVERIFY(rv.label == QString());23QVERIFY(rv.amount == 0);25uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Example Address"));26QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));27QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));28QVERIFY(rv.label == QString("Wikipedia Example Address"));29QVERIFY(rv.amount == 0);31uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"));32QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));33QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));34QVERIFY(rv.label == QString());35QVERIFY(rv.amount == 100000);37uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"));38QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));39QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));40QVERIFY(rv.label == QString());41QVERIFY(rv.amount == 100100000);43uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wikipedia Example"));44QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));45QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));46QVERIFY(rv.amount == 10000000000LL);47QVERIFY(rv.label == QString("Wikipedia Example"));49uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address"));50QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));51QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));52QVERIFY(rv.label == QString());54QVERIFY(GUIUtil::parseBitcoinURI("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Example Address", &rv));55QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));56QVERIFY(rv.label == QString());58uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedia Example Address"));59QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));61// Commas in amounts are not allowed.62uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=Wikipedia Example"));63QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));65uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label=Wikipedia Example"));66QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));68// There are two amount specifications. The last value wins.69uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=200&label=Wikipedia Example"));70QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));71QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));72QVERIFY(rv.amount == 20000000000LL);73QVERIFY(rv.label == QString("Wikipedia Example"));75// The first amount value is correct. However, the second amount value is not valid. Hence, the URI is not valid.76uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&amount=1,000&label=Wikipedia Example"));77QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));79// Test label containing a question mark ('?').80uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=?"));81QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));82QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));83QVERIFY(rv.amount == 10000000000LL);84QVERIFY(rv.label == QString("?"));86// Escape sequences are not supported.87uri.setUrl(QString("bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=%3F"));88QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));89QVERIFY(rv.address == QString("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));90QVERIFY(rv.amount == 10000000000LL);91QVERIFY(rv.label == QString("%3F"));92}
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.