static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; // bytes
+/* Setting nSequence to this value for every input in a transaction
+ * disables nLockTime. */
+static const uint32_t SEQUENCE_FINAL = 0xffffffff;
+
+/* Threshold for inverted nSequence: below this value it is interpreted
+ * as a relative lock-time, otherwise ignored. */
+static const uint32_t SEQUENCE_THRESHOLD = (1 << 31);
+
+/* If this flag set, CTxIn::nSequence is NOT interpreted as a
+ * relative lock-time. */
+static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1 << 31);
+
+/* If CTxIn::nSequence encodes a relative lock-time and this flag
+ * is set, the relative lock-time has units of 512 seconds,
+ * otherwise it specifies blocks with a granularity of 1. */
+static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
+
+/* If CTxIn::nSequence encodes a relative lock-time, this mask is
+ * applied to extract that lock-time from the sequence field. */
+static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
+
/** IsMine() return codes */
enum isminetype
{
SCRIPT_VERIFY_STRICTENC = (1U << 1), // enforce strict conformance to DER and SEC2 for signatures and pubkeys
SCRIPT_VERIFY_LOW_S = (1U << 2), // enforce low S values in signatures (depends on STRICTENC)
SCRIPT_VERIFY_NOCACHE = (1U << 3), // do not store results in signature cache (but do query it)
- SCRIPT_VERIFY_NULLDUMMY = (1U << 4) // verify dummy stack item consumed by CHECKMULTISIG is of zero-length
+ SCRIPT_VERIFY_NULLDUMMY = (1U << 4), // verify dummy stack item consumed by CHECKMULTISIG is of zero-length
+ SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9),
+ SCRIPT_VERIFY_CHECKSEQUENCEVERIFY = (1U << 10)
};
// Strict verification:
OP_ENDIF = 0x68,
OP_VERIFY = 0x69,
OP_RETURN = 0x6a,
+ OP_CHECKLOCKTIMEVERIFY = 0xb1,
+ OP_CHECKSEQUENCEVERIFY = 0xb2,
// stack ops
OP_TOALTSTACK = 0x6b,
// expansion
OP_NOP1 = 0xb0,
- OP_NOP2 = 0xb1,
- OP_NOP3 = 0xb2,
OP_NOP4 = 0xb3,
OP_NOP5 = 0xb4,
OP_NOP6 = 0xb5,
OP_NOP9 = 0xb8,
OP_NOP10 = 0xb9,
-
-
// template matching params
OP_SMALLDATA = 0xf9,
OP_SMALLINTEGER = 0xfa,
OP_PUBKEYS = 0xfb,
+ OP_INTEGER = 0xfc,
OP_PUBKEYHASH = 0xfd,
OP_PUBKEY = 0xfe,
bool IsPayToScriptHash() const;
- // Called by CTransaction::IsStandard and P2SH VerifyScript (which makes it consensus-critical).
- bool IsPushOnly() const
+ bool IsPushOnly(const_iterator pc) const
{
- const_iterator pc = begin();
while (pc < end())
{
opcodetype opcode;
return true;
}
+ // Called by CTransaction::IsStandard and P2SH VerifyScript (which makes it consensus-critical).
+ bool IsPushOnly() const
+ {
+ return this->IsPushOnly(begin());
+ }
+
// Called by CTransaction::IsStandard.
bool HasCanonicalPushes() const;
void SetDestination(const CTxDestination& address);
+ void SetDestination(const CPubKey& R, CPubKey& pubKeyVariant);
void SetMultisig(int nRequired, const std::vector<CKey>& keys);