mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 12:32:48 +01:00
6ad9bdf722
e78aaf41f43d0e2ad78fa6d8dad61032c8ef73d0 [docs] Add release notes for burying bip 9 soft fork deployments (John Newbery) 8319e738f9f118025b332e4fa804d4c31e4113f4 [tests] Add coverage for the content of getblockchaininfo.softforks (James O'Beirne) 0328dcdcfcb56dc8918697716d7686be048ad0b3 [Consensus] Bury segwit deployment (John Newbery) 1c93b9b31c2ab7358f9d55f52dd46340397c906d [Consensus] Bury CSV deployment height (John Newbery) 3862e473f0cb71a762c0306b171b591341d58142 [rpc] Tidy up reporting of buried and ongoing softforks (John Newbery) Pull request description: This hardcodes CSV and segwit activation heights, similar to the BIP 90 buried deployments for BIPs 34, 65 and 66. CSV and segwit have been active for over 18 months. Hardcoding the activation height is a code simplification, makes it easier to understand segwit activation status, and reduces technical debt. This was originally attempted by jl2012 in #11398 and again by me in #12360. ACKs for top commit: ajtowns: ACK e78aaf41f43d0e2ad78fa6d8dad61032c8ef73d0 ; checked diff to previous acked commit, checked tests still work ariard: ACK e78aaf4, check diff, run the tests again and successfully activated csv/segwit heights on mainnet as expected. MarcoFalke: ACK e78aaf41f43d0e2ad78fa6d8dad61032c8ef73d0 (still didn't check if the mainnet block heights are correct, but the code looks good now) Tree-SHA512: 7e951829106e21a81725f7d3e236eddbb59349189740907bb47e33f5dbf95c43753ac1231f47ae7bee85c8c81b2146afcdfdc11deb1503947f23093a9c399912
76 lines
3.0 KiB
Python
Executable File
76 lines
3.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) 2015-2021 The Dash Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
from test_framework.messages import COIN, COutPoint, CTransaction, CTxIn, CTxOut, ToHex
|
|
from test_framework.script import CScript, OP_CAT, OP_DROP, OP_TRUE
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.util import assert_equal, assert_raises_rpc_error, get_bip9_details, softfork_active, satoshi_round
|
|
|
|
'''
|
|
feature_dip0020_activation.py
|
|
|
|
This test checks activation of DIP0020 opcodes
|
|
'''
|
|
|
|
DISABLED_OPCODE_ERROR = "non-mandatory-script-verify-flag (Attempted to use a disabled opcode)"
|
|
|
|
|
|
class DIP0020ActivationTest(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.num_nodes = 1
|
|
self.extra_args = [["-acceptnonstdtxn=1"]]
|
|
|
|
def skip_test_if_missing_module(self):
|
|
self.skip_if_no_wallet()
|
|
|
|
def run_test(self):
|
|
self.node = self.nodes[0]
|
|
self.relayfee = satoshi_round(self.nodes[0].getnetworkinfo()["relayfee"])
|
|
|
|
# We should have some coins already
|
|
utxos = self.node.listunspent()
|
|
assert len(utxos) > 0
|
|
|
|
# Lock some coins using disabled opcodes
|
|
utxo = utxos[len(utxos) - 1]
|
|
value = int(satoshi_round(utxo["amount"] - self.relayfee) * COIN)
|
|
tx = CTransaction()
|
|
tx.vin.append(CTxIn(COutPoint(int(utxo["txid"], 16), utxo["vout"])))
|
|
tx.vout.append(CTxOut(value, CScript([b'1', b'2', OP_CAT])))
|
|
tx_signed_hex = self.node.signrawtransactionwithwallet(ToHex(tx))["hex"]
|
|
txid = self.node.sendrawtransaction(tx_signed_hex)
|
|
|
|
# This tx should be completely valid, should be included in mempool and mined in the next block
|
|
assert txid in set(self.node.getrawmempool())
|
|
self.node.generate(1)
|
|
assert txid not in set(self.node.getrawmempool())
|
|
|
|
# Create spending tx
|
|
value = int(value - self.relayfee * COIN)
|
|
tx0 = CTransaction()
|
|
tx0.vin.append(CTxIn(COutPoint(int(txid, 16), 0)))
|
|
tx0.vout.append(CTxOut(value, CScript([OP_TRUE, OP_DROP] * 15 + [OP_TRUE])))
|
|
tx0.rehash()
|
|
tx0_hex = ToHex(tx0)
|
|
|
|
# This tx isn't valid yet
|
|
assert_equal(get_bip9_details(self.nodes[0], 'dip0020')['status'], 'locked_in')
|
|
assert_raises_rpc_error(-26, DISABLED_OPCODE_ERROR, self.node.sendrawtransaction, tx0_hex)
|
|
|
|
# Generate enough blocks to activate DIP0020 opcodes
|
|
self.node.generate(98)
|
|
assert softfork_active(self.nodes[0], 'dip0020')
|
|
|
|
# Still need 1 more block for mempool to accept new opcodes
|
|
assert_raises_rpc_error(-26, DISABLED_OPCODE_ERROR, self.node.sendrawtransaction, tx0_hex)
|
|
self.node.generate(1)
|
|
|
|
# Should be spendable now
|
|
tx0id = self.node.sendrawtransaction(tx0_hex)
|
|
assert tx0id in set(self.node.getrawmempool())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
DIP0020ActivationTest().main()
|