Merge pull request #7338
f17b00b
release-notes: Combine NOP2->CLTV asm change into "RPC: Low-level API changes" section (Luke Dashjr)e20704b
Replace some instances of formatWithUnit with formatHtmlWithUnit (fanquake)6f8346d
qt5: Use the fixed font the system recommends (MarcoFalke)605de4a
Rename OP_NOP2 to OP_CHECKLOCKTIMEVERIFY. (mb300sd)6191a9b
[RPC-Tests] add option to run rpc test over QT clients (Jonas Schnelli)6307beb
Note that reviewers should mention the commit hash of the commits they reviewed. (Patrick Strateman)6092ff2
Set link from http:// to https:// (Suriyaa Kudo)
This commit is contained in:
commit
1709cc5cb0
@ -95,6 +95,8 @@ Anyone may participate in peer review which is expressed by comments in the pull
|
|||||||
- Concept ACK means "I agree in the general principle of this pull request";
|
- Concept ACK means "I agree in the general principle of this pull request";
|
||||||
- Nit refers to trivial, often non-blocking issues.
|
- Nit refers to trivial, often non-blocking issues.
|
||||||
|
|
||||||
|
Reviewers should include the commit hash which they reviewed in their comments.
|
||||||
|
|
||||||
Project maintainers reserve the right to weigh the opinions of peer reviewers using common sense judgement and also may weight based on meritocracy: Those that have demonstrated a deeper commitment and understanding towards the project (over time) or have clear domain expertise may naturally have more weight, as one would expect in all walks of life.
|
Project maintainers reserve the right to weigh the opinions of peer reviewers using common sense judgement and also may weight based on meritocracy: Those that have demonstrated a deeper commitment and understanding towards the project (over time) or have clear domain expertise may naturally have more weight, as one would expect in all walks of life.
|
||||||
|
|
||||||
Where a patch set affects consensus critical code, the bar will be set much higher in terms of discussion and peer review requirements, keeping in mind that mistakes could be very costly to the wider community. This includes refactoring of consensus critical code.
|
Where a patch set affects consensus critical code, the bar will be set much higher in terms of discussion and peer review requirements, keeping in mind that mistakes could be very costly to the wider community. This includes refactoring of consensus critical code.
|
||||||
|
@ -21,7 +21,7 @@ License
|
|||||||
-------
|
-------
|
||||||
|
|
||||||
Bitcoin Core is released under the terms of the MIT license. See [COPYING](COPYING) for more
|
Bitcoin Core is released under the terms of the MIT license. See [COPYING](COPYING) for more
|
||||||
information or see http://opensource.org/licenses/MIT.
|
information or see https://opensource.org/licenses/MIT.
|
||||||
|
|
||||||
Development Process
|
Development Process
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -288,11 +288,14 @@ RPC: Low-level API changes
|
|||||||
* The `asm` property of each scriptSig now contains the decoded signature hash
|
* The `asm` property of each scriptSig now contains the decoded signature hash
|
||||||
type for each signature that provides a valid defined hash type.
|
type for each signature that provides a valid defined hash type.
|
||||||
|
|
||||||
|
* OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP 65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)
|
||||||
|
|
||||||
The following items contain assembly representations of scriptSig signatures
|
The following items contain assembly representations of scriptSig signatures
|
||||||
and are affected by this change:
|
and are affected by this change:
|
||||||
|
|
||||||
- RPC `getrawtransaction`
|
- RPC `getrawtransaction`
|
||||||
- RPC `decoderawtransaction`
|
- RPC `decoderawtransaction`
|
||||||
|
- RPC `decodescript`
|
||||||
- REST `/rest/tx/` (JSON format)
|
- REST `/rest/tx/` (JSON format)
|
||||||
- REST `/rest/block/` (JSON format when including extended tx details)
|
- REST `/rest/block/` (JSON format when including extended tx details)
|
||||||
- `bitcoin-tx -json`
|
- `bitcoin-tx -json`
|
||||||
@ -300,11 +303,11 @@ and are affected by this change:
|
|||||||
For example, the `scriptSig.asm` property of a transaction input that
|
For example, the `scriptSig.asm` property of a transaction input that
|
||||||
previously showed an assembly representation of:
|
previously showed an assembly representation of:
|
||||||
|
|
||||||
304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001
|
304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001 400000 OP_NOP2
|
||||||
|
|
||||||
now shows as:
|
now shows as:
|
||||||
|
|
||||||
304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL]
|
304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL] 400000 OP_CHECKLOCKTIMEVERIFY
|
||||||
|
|
||||||
Note that the output of the RPC `decodescript` did not change because it is
|
Note that the output of the RPC `decodescript` did not change because it is
|
||||||
configured specifically to process scriptPubKey and not scriptSig scripts.
|
configured specifically to process scriptPubKey and not scriptSig scripts.
|
||||||
|
@ -9,7 +9,7 @@ from test_framework.util import *
|
|||||||
from test_framework.mininode import CTransaction, NetworkThread
|
from test_framework.mininode import CTransaction, NetworkThread
|
||||||
from test_framework.blocktools import create_coinbase, create_block
|
from test_framework.blocktools import create_coinbase, create_block
|
||||||
from test_framework.comptool import TestInstance, TestManager
|
from test_framework.comptool import TestInstance, TestManager
|
||||||
from test_framework.script import CScript, OP_1NEGATE, OP_NOP2, OP_DROP
|
from test_framework.script import CScript, OP_1NEGATE, OP_CHECKLOCKTIMEVERIFY, OP_DROP
|
||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
import cStringIO
|
import cStringIO
|
||||||
import time
|
import time
|
||||||
@ -19,7 +19,7 @@ def cltv_invalidate(tx):
|
|||||||
|
|
||||||
Prepends -1 CLTV DROP in the scriptSig itself.
|
Prepends -1 CLTV DROP in the scriptSig itself.
|
||||||
'''
|
'''
|
||||||
tx.vin[0].scriptSig = CScript([OP_1NEGATE, OP_NOP2, OP_DROP] +
|
tx.vin[0].scriptSig = CScript([OP_1NEGATE, OP_CHECKLOCKTIMEVERIFY, OP_DROP] +
|
||||||
list(CScript(tx.vin[0].scriptSig)))
|
list(CScript(tx.vin[0].scriptSig)))
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
@ -102,13 +102,13 @@ class DecodeScriptTest(BitcoinTestFramework):
|
|||||||
# OP_IF
|
# OP_IF
|
||||||
# <receiver-pubkey> OP_CHECKSIGVERIFY
|
# <receiver-pubkey> OP_CHECKSIGVERIFY
|
||||||
# OP_ELSE
|
# OP_ELSE
|
||||||
# <lock-until> OP_NOP2 OP_DROP
|
# <lock-until> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
||||||
# OP_ENDIF
|
# OP_ENDIF
|
||||||
# <sender-pubkey> OP_CHECKSIG
|
# <sender-pubkey> OP_CHECKSIG
|
||||||
#
|
#
|
||||||
# lock until block 500,000
|
# lock until block 500,000
|
||||||
rpc_result = self.nodes[0].decodescript('63' + push_public_key + 'ad670320a107b17568' + push_public_key + 'ac')
|
rpc_result = self.nodes[0].decodescript('63' + push_public_key + 'ad670320a107b17568' + push_public_key + 'ac')
|
||||||
assert_equal('OP_IF ' + public_key + ' OP_CHECKSIGVERIFY OP_ELSE 500000 OP_NOP2 OP_DROP OP_ENDIF ' + public_key + ' OP_CHECKSIG', rpc_result['asm'])
|
assert_equal('OP_IF ' + public_key + ' OP_CHECKSIGVERIFY OP_ELSE 500000 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_ENDIF ' + public_key + ' OP_CHECKSIG', rpc_result['asm'])
|
||||||
|
|
||||||
def decoderawtransaction_asm_sighashtype(self):
|
def decoderawtransaction_asm_sighashtype(self):
|
||||||
"""Tests decoding scripts via RPC command "decoderawtransaction".
|
"""Tests decoding scripts via RPC command "decoderawtransaction".
|
||||||
|
@ -226,7 +226,7 @@ OP_CHECKMULTISIGVERIFY = CScriptOp(0xaf)
|
|||||||
|
|
||||||
# expansion
|
# expansion
|
||||||
OP_NOP1 = CScriptOp(0xb0)
|
OP_NOP1 = CScriptOp(0xb0)
|
||||||
OP_NOP2 = CScriptOp(0xb1)
|
OP_CHECKLOCKTIMEVERIFY = CScriptOp(0xb1)
|
||||||
OP_NOP3 = CScriptOp(0xb2)
|
OP_NOP3 = CScriptOp(0xb2)
|
||||||
OP_NOP4 = CScriptOp(0xb3)
|
OP_NOP4 = CScriptOp(0xb3)
|
||||||
OP_NOP5 = CScriptOp(0xb4)
|
OP_NOP5 = CScriptOp(0xb4)
|
||||||
@ -353,7 +353,7 @@ VALID_OPCODES = {
|
|||||||
OP_CHECKMULTISIGVERIFY,
|
OP_CHECKMULTISIGVERIFY,
|
||||||
|
|
||||||
OP_NOP1,
|
OP_NOP1,
|
||||||
OP_NOP2,
|
OP_CHECKLOCKTIMEVERIFY,
|
||||||
OP_NOP3,
|
OP_NOP3,
|
||||||
OP_NOP4,
|
OP_NOP4,
|
||||||
OP_NOP5,
|
OP_NOP5,
|
||||||
@ -472,7 +472,7 @@ OPCODE_NAMES.update({
|
|||||||
OP_CHECKMULTISIG : 'OP_CHECKMULTISIG',
|
OP_CHECKMULTISIG : 'OP_CHECKMULTISIG',
|
||||||
OP_CHECKMULTISIGVERIFY : 'OP_CHECKMULTISIGVERIFY',
|
OP_CHECKMULTISIGVERIFY : 'OP_CHECKMULTISIGVERIFY',
|
||||||
OP_NOP1 : 'OP_NOP1',
|
OP_NOP1 : 'OP_NOP1',
|
||||||
OP_NOP2 : 'OP_NOP2',
|
OP_CHECKLOCKTIMEVERIFY : 'OP_CHECKLOCKTIMEVERIFY',
|
||||||
OP_NOP3 : 'OP_NOP3',
|
OP_NOP3 : 'OP_NOP3',
|
||||||
OP_NOP4 : 'OP_NOP4',
|
OP_NOP4 : 'OP_NOP4',
|
||||||
OP_NOP5 : 'OP_NOP5',
|
OP_NOP5 : 'OP_NOP5',
|
||||||
@ -591,7 +591,7 @@ OPCODES_BY_NAME = {
|
|||||||
'OP_CHECKMULTISIG' : OP_CHECKMULTISIG,
|
'OP_CHECKMULTISIG' : OP_CHECKMULTISIG,
|
||||||
'OP_CHECKMULTISIGVERIFY' : OP_CHECKMULTISIGVERIFY,
|
'OP_CHECKMULTISIGVERIFY' : OP_CHECKMULTISIGVERIFY,
|
||||||
'OP_NOP1' : OP_NOP1,
|
'OP_NOP1' : OP_NOP1,
|
||||||
'OP_NOP2' : OP_NOP2,
|
'OP_CHECKLOCKTIMEVERIFY' : OP_CHECKLOCKTIMEVERIFY,
|
||||||
'OP_NOP3' : OP_NOP3,
|
'OP_NOP3' : OP_NOP3,
|
||||||
'OP_NOP4' : OP_NOP4,
|
'OP_NOP4' : OP_NOP4,
|
||||||
'OP_NOP5' : OP_NOP5,
|
'OP_NOP5' : OP_NOP5,
|
||||||
|
@ -120,7 +120,7 @@ class BitcoinTestFramework(object):
|
|||||||
if self.options.coveragedir:
|
if self.options.coveragedir:
|
||||||
enable_coverage(self.options.coveragedir)
|
enable_coverage(self.options.coveragedir)
|
||||||
|
|
||||||
os.environ['PATH'] = self.options.srcdir+":"+os.environ['PATH']
|
os.environ['PATH'] = self.options.srcdir+":"+self.options.srcdir+"/qt:"+os.environ['PATH']
|
||||||
|
|
||||||
check_json_precision()
|
check_json_precision()
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ def initialize_chain(test_dir):
|
|||||||
# Create cache directories, run bitcoinds:
|
# Create cache directories, run bitcoinds:
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
datadir=initialize_datadir("cache", i)
|
datadir=initialize_datadir("cache", i)
|
||||||
args = [ os.getenv("BITCOIND", "bitcoind"), "-keypool=1", "-datadir="+datadir, "-discover=0" ]
|
args = [ os.getenv("BITCOIND", "bitcoind"), "-server", "-keypool=1", "-datadir="+datadir, "-discover=0" ]
|
||||||
if i > 0:
|
if i > 0:
|
||||||
args.append("-connect=127.0.0.1:"+str(p2p_port(0)))
|
args.append("-connect=127.0.0.1:"+str(p2p_port(0)))
|
||||||
bitcoind_processes[i] = subprocess.Popen(args)
|
bitcoind_processes[i] = subprocess.Popen(args)
|
||||||
@ -219,7 +219,7 @@ def start_node(i, dirname, extra_args=None, rpchost=None, timewait=None, binary=
|
|||||||
if binary is None:
|
if binary is None:
|
||||||
binary = os.getenv("BITCOIND", "bitcoind")
|
binary = os.getenv("BITCOIND", "bitcoind")
|
||||||
# RPC tests still depend on free transactions
|
# RPC tests still depend on free transactions
|
||||||
args = [ binary, "-datadir="+datadir, "-keypool=1", "-discover=0", "-rest", "-blockprioritysize=50000" ]
|
args = [ binary, "-datadir="+datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-blockprioritysize=50000" ]
|
||||||
if extra_args is not None: args.extend(extra_args)
|
if extra_args is not None: args.extend(extra_args)
|
||||||
bitcoind_processes[i] = subprocess.Popen(args)
|
bitcoind_processes[i] = subprocess.Popen(args)
|
||||||
devnull = open(os.devnull, "w")
|
devnull = open(os.devnull, "w")
|
||||||
|
@ -111,13 +111,6 @@ QString BitcoinUnits::format(int unit, const CAmount& nIn, bool fPlus, Separator
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: Review all remaining calls to BitcoinUnits::formatWithUnit to
|
|
||||||
// TODO: determine whether the output is used in a plain text context
|
|
||||||
// TODO: or an HTML context (and replace with
|
|
||||||
// TODO: BtcoinUnits::formatHtmlWithUnit in the latter case). Hopefully
|
|
||||||
// TODO: there aren't instances where the result could be used in
|
|
||||||
// TODO: either context.
|
|
||||||
|
|
||||||
// NOTE: Using formatWithUnit in an HTML context risks wrapping
|
// NOTE: Using formatWithUnit in an HTML context risks wrapping
|
||||||
// quantities at the thousands separator. More subtly, it also results
|
// quantities at the thousands separator. More subtly, it also results
|
||||||
// in a standard space rather than a thin space, due to a bug in Qt's
|
// in a standard space rather than a thin space, due to a bug in Qt's
|
||||||
|
@ -88,6 +88,7 @@ public:
|
|||||||
static QString format(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
static QString format(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
//! Format as string (with unit)
|
//! Format as string (with unit)
|
||||||
static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
static QString formatWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
|
//! Format as HTML string (with unit)
|
||||||
static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
static QString formatHtmlWithUnit(int unit, const CAmount& amount, bool plussign=false, SeparatorStyle separators=separatorStandard);
|
||||||
//! Parse string to coin amount
|
//! Parse string to coin amount
|
||||||
static bool parse(int unit, const QString &value, CAmount *val_out);
|
static bool parse(int unit, const QString &value, CAmount *val_out);
|
||||||
|
@ -637,14 +637,14 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
|
|||||||
|
|
||||||
// tool tips
|
// tool tips
|
||||||
QString toolTip1 = tr("This label turns red if the transaction size is greater than 1000 bytes.") + "<br /><br />";
|
QString toolTip1 = tr("This label turns red if the transaction size is greater than 1000 bytes.") + "<br /><br />";
|
||||||
toolTip1 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CWallet::GetRequiredFee(1000))) + "<br /><br />";
|
toolTip1 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatHtmlWithUnit(nDisplayUnit, CWallet::GetRequiredFee(1000))) + "<br /><br />";
|
||||||
toolTip1 += tr("Can vary +/- 1 byte per input.");
|
toolTip1 += tr("Can vary +/- 1 byte per input.");
|
||||||
|
|
||||||
QString toolTip2 = tr("Transactions with higher priority are more likely to get included into a block.") + "<br /><br />";
|
QString toolTip2 = tr("Transactions with higher priority are more likely to get included into a block.") + "<br /><br />";
|
||||||
toolTip2 += tr("This label turns red if the priority is smaller than \"medium\".") + "<br /><br />";
|
toolTip2 += tr("This label turns red if the priority is smaller than \"medium\".") + "<br /><br />";
|
||||||
toolTip2 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, CWallet::GetRequiredFee(1000)));
|
toolTip2 += tr("This means a fee of at least %1 per kB is required.").arg(BitcoinUnits::formatHtmlWithUnit(nDisplayUnit, CWallet::GetRequiredFee(1000)));
|
||||||
|
|
||||||
QString toolTip3 = tr("This label turns red if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, ::minRelayTxFee.GetFee(546)));
|
QString toolTip3 = tr("This label turns red if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatHtmlWithUnit(nDisplayUnit, ::minRelayTxFee.GetFee(546)));
|
||||||
|
|
||||||
// how many satoshis the estimated fee can vary per byte we guess wrong
|
// how many satoshis the estimated fee can vary per byte we guess wrong
|
||||||
double dFeeVary;
|
double dFeeVary;
|
||||||
|
@ -62,6 +62,10 @@
|
|||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x50200
|
||||||
|
#include <QFontDatabase>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if BOOST_FILESYSTEM_VERSION >= 3
|
#if BOOST_FILESYSTEM_VERSION >= 3
|
||||||
static boost::filesystem::detail::utf8_codecvt_facet utf8;
|
static boost::filesystem::detail::utf8_codecvt_facet utf8;
|
||||||
#endif
|
#endif
|
||||||
@ -90,6 +94,9 @@ QString dateTimeStr(qint64 nTime)
|
|||||||
|
|
||||||
QFont fixedPitchFont()
|
QFont fixedPitchFont()
|
||||||
{
|
{
|
||||||
|
#if QT_VERSION >= 0x50200
|
||||||
|
return QFontDatabase::systemFont(QFontDatabase::FixedFont);
|
||||||
|
#else
|
||||||
QFont font("Monospace");
|
QFont font("Monospace");
|
||||||
#if QT_VERSION >= 0x040800
|
#if QT_VERSION >= 0x040800
|
||||||
font.setStyleHint(QFont::Monospace);
|
font.setStyleHint(QFont::Monospace);
|
||||||
@ -97,6 +104,7 @@ QFont fixedPitchFont()
|
|||||||
font.setStyleHint(QFont::TypeWriter);
|
font.setStyleHint(QFont::TypeWriter);
|
||||||
#endif
|
#endif
|
||||||
return font;
|
return font;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent)
|
void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent)
|
||||||
|
@ -144,7 +144,7 @@ void ReceiveRequestDialog::update()
|
|||||||
html += "<a href=\""+uri+"\">" + GUIUtil::HtmlEscape(uri) + "</a><br>";
|
html += "<a href=\""+uri+"\">" + GUIUtil::HtmlEscape(uri) + "</a><br>";
|
||||||
html += "<b>"+tr("Address")+"</b>: " + GUIUtil::HtmlEscape(info.address) + "<br>";
|
html += "<b>"+tr("Address")+"</b>: " + GUIUtil::HtmlEscape(info.address) + "<br>";
|
||||||
if(info.amount)
|
if(info.amount)
|
||||||
html += "<b>"+tr("Amount")+"</b>: " + BitcoinUnits::formatWithUnit(model->getDisplayUnit(), info.amount) + "<br>";
|
html += "<b>"+tr("Amount")+"</b>: " + BitcoinUnits::formatHtmlWithUnit(model->getDisplayUnit(), info.amount) + "<br>";
|
||||||
if(!info.label.isEmpty())
|
if(!info.label.isEmpty())
|
||||||
html += "<b>"+tr("Label")+"</b>: " + GUIUtil::HtmlEscape(info.label) + "<br>";
|
html += "<b>"+tr("Label")+"</b>: " + GUIUtil::HtmlEscape(info.label) + "<br>";
|
||||||
if(!info.message.isEmpty())
|
if(!info.message.isEmpty())
|
||||||
|
@ -131,7 +131,7 @@ const char* GetOpName(opcodetype opcode)
|
|||||||
|
|
||||||
// expanson
|
// expanson
|
||||||
case OP_NOP1 : return "OP_NOP1";
|
case OP_NOP1 : return "OP_NOP1";
|
||||||
case OP_NOP2 : return "OP_NOP2";
|
case OP_CHECKLOCKTIMEVERIFY : return "OP_CHECKLOCKTIMEVERIFY";
|
||||||
case OP_NOP3 : return "OP_NOP3";
|
case OP_NOP3 : return "OP_NOP3";
|
||||||
case OP_NOP4 : return "OP_NOP4";
|
case OP_NOP4 : return "OP_NOP4";
|
||||||
case OP_NOP5 : return "OP_NOP5";
|
case OP_NOP5 : return "OP_NOP5";
|
||||||
|
@ -162,8 +162,8 @@ enum opcodetype
|
|||||||
|
|
||||||
// expansion
|
// expansion
|
||||||
OP_NOP1 = 0xb0,
|
OP_NOP1 = 0xb0,
|
||||||
OP_NOP2 = 0xb1,
|
OP_CHECKLOCKTIMEVERIFY = 0xb1,
|
||||||
OP_CHECKLOCKTIMEVERIFY = OP_NOP2,
|
OP_NOP2 = OP_CHECKLOCKTIMEVERIFY,
|
||||||
OP_NOP3 = 0xb2,
|
OP_NOP3 = 0xb2,
|
||||||
OP_NOP4 = 0xb3,
|
OP_NOP4 = 0xb3,
|
||||||
OP_NOP5 = 0xb4,
|
OP_NOP5 = 0xb4,
|
||||||
|
@ -160,12 +160,12 @@
|
|||||||
["2 2 LSHIFT", "8 EQUAL", "P2SH,STRICTENC", "disabled"],
|
["2 2 LSHIFT", "8 EQUAL", "P2SH,STRICTENC", "disabled"],
|
||||||
["2 1 RSHIFT", "1 EQUAL", "P2SH,STRICTENC", "disabled"],
|
["2 1 RSHIFT", "1 EQUAL", "P2SH,STRICTENC", "disabled"],
|
||||||
|
|
||||||
["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 2 EQUAL", "P2SH,STRICTENC"],
|
["1","NOP1 CHECKLOCKTIMEVERIFY NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 2 EQUAL", "P2SH,STRICTENC"],
|
||||||
["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_11' EQUAL", "P2SH,STRICTENC"],
|
["'NOP_1_to_10' NOP1 CHECKLOCKTIMEVERIFY NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_11' EQUAL", "P2SH,STRICTENC"],
|
||||||
|
|
||||||
["Ensure 100% coverage of discouraged NOPS"],
|
["Ensure 100% coverage of discouraged NOPS"],
|
||||||
["1", "NOP1", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
["1", "NOP1", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
||||||
["1", "NOP2", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
["1", "CHECKLOCKTIMEVERIFY", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
||||||
["1", "NOP3", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
["1", "NOP3", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
||||||
["1", "NOP4", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
["1", "NOP4", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
||||||
["1", "NOP5", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
["1", "NOP5", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
|
||||||
|
@ -232,8 +232,8 @@
|
|||||||
["'abcdefghijklmnopqrstuvwxyz'", "HASH256 0x4c 0x20 0xca139bc10c2f660da42666f72e89a225936fc60f193c161124a672050c434671 EQUAL", "P2SH,STRICTENC"],
|
["'abcdefghijklmnopqrstuvwxyz'", "HASH256 0x4c 0x20 0xca139bc10c2f660da42666f72e89a225936fc60f193c161124a672050c434671 EQUAL", "P2SH,STRICTENC"],
|
||||||
|
|
||||||
|
|
||||||
["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 1 EQUAL", "P2SH,STRICTENC"],
|
["1","NOP1 CHECKLOCKTIMEVERIFY NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 1 EQUAL", "P2SH,STRICTENC"],
|
||||||
["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_10' EQUAL", "P2SH,STRICTENC"],
|
["'NOP_1_to_10' NOP1 CHECKLOCKTIMEVERIFY NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_10' EQUAL", "P2SH,STRICTENC"],
|
||||||
|
|
||||||
["1", "NOP", "P2SH,STRICTENC,DISCOURAGE_UPGRADABLE_NOPS", "Discourage NOPx flag allows OP_NOP"],
|
["1", "NOP", "P2SH,STRICTENC,DISCOURAGE_UPGRADABLE_NOPS", "Discourage NOPx flag allows OP_NOP"],
|
||||||
|
|
||||||
@ -442,7 +442,7 @@
|
|||||||
["NOP", "CODESEPARATOR 1", "P2SH,STRICTENC"],
|
["NOP", "CODESEPARATOR 1", "P2SH,STRICTENC"],
|
||||||
|
|
||||||
["NOP", "NOP1 1", "P2SH,STRICTENC"],
|
["NOP", "NOP1 1", "P2SH,STRICTENC"],
|
||||||
["NOP", "NOP2 1", "P2SH,STRICTENC"],
|
["NOP", "CHECKLOCKTIMEVERIFY 1", "P2SH,STRICTENC"],
|
||||||
["NOP", "NOP3 1", "P2SH,STRICTENC"],
|
["NOP", "NOP3 1", "P2SH,STRICTENC"],
|
||||||
["NOP", "NOP4 1", "P2SH,STRICTENC"],
|
["NOP", "NOP4 1", "P2SH,STRICTENC"],
|
||||||
["NOP", "NOP5 1", "P2SH,STRICTENC"],
|
["NOP", "NOP5 1", "P2SH,STRICTENC"],
|
||||||
|
@ -127,66 +127,66 @@
|
|||||||
["CHECKLOCKTIMEVERIFY tests"],
|
["CHECKLOCKTIMEVERIFY tests"],
|
||||||
|
|
||||||
["By-height locks, with argument just beyond tx nLockTime"],
|
["By-height locks, with argument just beyond tx nLockTime"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000fe64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000fe64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)"],
|
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000001 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000001 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Argument missing"],
|
["Argument missing"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000001b1010000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000001b1010000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Argument negative with by-blockheight nLockTime=0"],
|
["Argument negative with by-blockheight nLockTime=0"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "-1 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "-1 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Argument negative with by-blocktime nLockTime=500,000,000"],
|
["Argument negative with by-blocktime nLockTime=500,000,000"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "-1 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "-1 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000004005194b1010000000100000000000000000002000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000004005194b1010000000100000000000000000002000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Input locked"],
|
["Input locked"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b1ffffffff0100000000000000000002000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b1ffffffff0100000000000000000002000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Another input being unlocked isn't sufficient; the CHECKLOCKTIMEVERIFY-using input must be unlocked"],
|
["Another input being unlocked isn't sufficient; the CHECKLOCKTIMEVERIFY-using input must be unlocked"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"] ,
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 CHECKLOCKTIMEVERIFY 1"] ,
|
||||||
["0000000000000000000000000000000000000000000000000000000000000200", 1, "1"]],
|
["0000000000000000000000000000000000000000000000000000000000000200", 1, "1"]],
|
||||||
"010000000200010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00020000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000200010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00020000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Argument/tx height/time mismatch, both versions"],
|
["Argument/tx height/time mismatch, both versions"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b100000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b100000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Argument 2^32 with nLockTime=2^32-1"],
|
["Argument 2^32 with nLockTime=2^32-1"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967296 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967296 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Same, but with nLockTime=2^31-1"],
|
["Same, but with nLockTime=2^31-1"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "2147483648 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "2147483648 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffff7f", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffff7f", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["6 byte non-minimally-encoded arguments are invalid even if their contents are valid"],
|
["6 byte non-minimally-encoded arguments are invalid even if their contents are valid"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x06 0x000000000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x06 0x000000000000 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Failure due to failing CHECKLOCKTIMEVERIFY in scriptSig"],
|
["Failure due to failing CHECKLOCKTIMEVERIFY in scriptSig"],
|
||||||
|
@ -190,35 +190,35 @@
|
|||||||
["CHECKLOCKTIMEVERIFY tests"],
|
["CHECKLOCKTIMEVERIFY tests"],
|
||||||
|
|
||||||
["By-height locks, with argument == 0 and == tx nLockTime"],
|
["By-height locks, with argument == 0 and == tx nLockTime"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)"],
|
["By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "4294967295 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "500000000 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Any non-maxint nSequence is fine"],
|
["Any non-maxint nSequence is fine"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000feffffff0100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000feffffff0100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["The argument can be calculated rather than created directly by a PUSHDATA"],
|
["The argument can be calculated rather than created directly by a PUSHDATA"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 1ADD NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "499999999 1ADD CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Perhaps even by an ADD producing a 5-byte result that is out of bounds for other opcodes"],
|
["Perhaps even by an ADD producing a 5-byte result that is out of bounds for other opcodes"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "2147483647 2147483647 ADD NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "2147483647 2147483647 ADD CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["5 byte non-minimally-encoded arguments are valid"],
|
["5 byte non-minimally-encoded arguments are valid"],
|
||||||
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x05 0x0000000000 NOP2 1"]],
|
[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "0x05 0x0000000000 CHECKLOCKTIMEVERIFY 1"]],
|
||||||
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "P2SH,CHECKLOCKTIMEVERIFY"],
|
||||||
|
|
||||||
["Valid CHECKLOCKTIMEVERIFY in scriptSig"],
|
["Valid CHECKLOCKTIMEVERIFY in scriptSig"],
|
||||||
|
@ -985,10 +985,10 @@ BOOST_AUTO_TEST_CASE(script_IsPushOnly_on_invalid_scripts)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(script_GetScriptAsm)
|
BOOST_AUTO_TEST_CASE(script_GetScriptAsm)
|
||||||
{
|
{
|
||||||
BOOST_CHECK_EQUAL("OP_NOP2", ScriptToAsmStr(CScript() << OP_NOP2, true));
|
BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_NOP2, true));
|
||||||
BOOST_CHECK_EQUAL("OP_NOP2", ScriptToAsmStr(CScript() << OP_CHECKLOCKTIMEVERIFY, true));
|
BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_CHECKLOCKTIMEVERIFY, true));
|
||||||
BOOST_CHECK_EQUAL("OP_NOP2", ScriptToAsmStr(CScript() << OP_NOP2));
|
BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_NOP2));
|
||||||
BOOST_CHECK_EQUAL("OP_NOP2", ScriptToAsmStr(CScript() << OP_CHECKLOCKTIMEVERIFY));
|
BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_CHECKLOCKTIMEVERIFY));
|
||||||
|
|
||||||
string derSig("304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090");
|
string derSig("304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090");
|
||||||
string pubKey("03b0da749730dc9b4b1f4a14d6902877a92541f5368778853d9c4a0cb7802dcfb2");
|
string pubKey("03b0da749730dc9b4b1f4a14d6902877a92541f5368778853d9c4a0cb7802dcfb2");
|
||||||
|
Loading…
Reference in New Issue
Block a user