diff --git a/cmake/module/ProcessConfigurations.cmake b/cmake/module/ProcessConfigurations.cmake index d5426f6e08fb..07e149adc2a3 100644 --- a/cmake/module/ProcessConfigurations.cmake +++ b/cmake/module/ProcessConfigurations.cmake @@ -104,6 +104,23 @@ function(remove_cxx_flag_from_all_configs flag) endforeach() endfunction() +function(remove_c_flag_from_all_configs flag) + get_all_configs(all_configs) + foreach(config IN LISTS all_configs) + string(TOUPPER "${config}" config_uppercase) + set(flags "${CMAKE_C_FLAGS_${config_uppercase}}") + separate_arguments(flags) + list(FILTER flags EXCLUDE REGEX "${flag}") + list(JOIN flags " " new_flags) + set(CMAKE_C_FLAGS_${config_uppercase} "${new_flags}" PARENT_SCOPE) + set(CMAKE_C_FLAGS_${config_uppercase} "${new_flags}" + CACHE STRING + "Flags used by the C compiler during ${config_uppercase} builds." + FORCE + ) + endforeach() +endfunction() + function(replace_cxx_flag_in_config config old_flag new_flag) string(TOUPPER "CMAKE_CXX_FLAGS_${config}" var_name) if("${var_name}" IN_LIST precious_variables) @@ -121,8 +138,10 @@ include(TryAppendCXXFlags) # We leave assertions on. if(MSVC) remove_cxx_flag_from_all_configs(/DNDEBUG) + remove_c_flag_from_all_configs(/DNDEBUG) else() remove_cxx_flag_from_all_configs(-DNDEBUG) + remove_c_flag_from_all_configs(-DNDEBUG) # Adjust flags used by the CXX compiler during RELEASE builds. # Prefer -O2 optimization level. (-O3 is CMake's default for Release for many compilers.) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 47aee937a578..2b5dfb02357e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,6 +19,7 @@ include(../cmake/crc32c.cmake) include(../cmake/leveldb.cmake) include(../cmake/minisketch.cmake) add_subdirectory(univalue) +add_subdirectory(simplicity) if (ENABLE_IPC AND NOT WITH_EXTERNAL_LIBMULTIPROCESS) include(../cmake/libmultiprocess.cmake) add_libmultiprocess(ipc/libmultiprocess) @@ -49,6 +50,7 @@ add_library(bitcoin_clientversion STATIC EXCLUDE_FROM_ALL target_link_libraries(bitcoin_clientversion PRIVATE core_interface + BitcoinSimplicity ) add_dependencies(bitcoin_clientversion generate_build_info) @@ -76,6 +78,7 @@ target_link_libraries(bitcoin_consensus core_interface bitcoin_crypto secp256k1 + BitcoinSimplicity ) if(WITH_ZMQ) @@ -144,6 +147,7 @@ target_link_libraries(bitcoin_common bitcoin_util univalue secp256k1 + BitcoinSimplicity Boost::headers $ $<$:ws2_32> @@ -164,6 +168,7 @@ if(ENABLE_WALLET) add_windows_application_manifest(bitcoin-wallet) target_link_libraries(bitcoin-wallet core_interface + BitcoinSimplicity bitcoin_wallet bitcoin_common bitcoin_util @@ -275,6 +280,7 @@ target_link_libraries(bitcoin_node PRIVATE core_interface bitcoin_common + BitcoinSimplicity bitcoin_util $ leveldb @@ -306,6 +312,7 @@ if(BUILD_DAEMON) add_windows_application_manifest(bitcoind) target_link_libraries(bitcoind core_interface + BitcoinSimplicity bitcoin_node $ ) @@ -318,6 +325,7 @@ if(ENABLE_IPC AND BUILD_DAEMON) ) target_link_libraries(bitcoin-node core_interface + BitcoinSimplicity bitcoin_node bitcoin_ipc $ @@ -333,6 +341,7 @@ add_library(bitcoin_cli STATIC EXCLUDE_FROM_ALL target_link_libraries(bitcoin_cli PUBLIC core_interface + BitcoinSimplicity univalue ) @@ -344,6 +353,7 @@ if(BUILD_CLI) add_windows_application_manifest(bitcoin-cli) target_link_libraries(bitcoin-cli core_interface + BitcoinSimplicity bitcoin_cli bitcoin_common bitcoin_util @@ -360,6 +370,7 @@ if(BUILD_TX) add_windows_application_manifest(bitcoin-tx) target_link_libraries(bitcoin-tx core_interface + BitcoinSimplicity bitcoin_common bitcoin_util univalue @@ -374,6 +385,7 @@ if(BUILD_UTIL) add_windows_application_manifest(bitcoin-util) target_link_libraries(bitcoin-util core_interface + BitcoinSimplicity bitcoin_common bitcoin_util ) @@ -399,6 +411,7 @@ if(BUILD_KERNEL_LIB) target_link_libraries(bitcoin-chainstate PRIVATE core_interface + BitcoinSimplicity bitcoinkernel ) install_binary_component(bitcoin-chainstate INTERNAL) diff --git a/src/consensus/params.h b/src/consensus/params.h index f33ff15fbfe8..0ec1b1dbace6 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -34,6 +34,7 @@ constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_ enum DeploymentPos : uint16_t { DEPLOYMENT_TESTDUMMY, DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342) + DEPLOYMENT_SIMPLICITY, // Deployment of Simplicity // NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp MAX_VERSION_BITS_DEPLOYMENTS }; diff --git a/src/deploymentinfo.cpp b/src/deploymentinfo.cpp index 5c4795505be0..0671fad64b55 100644 --- a/src/deploymentinfo.cpp +++ b/src/deploymentinfo.cpp @@ -17,6 +17,10 @@ const std::array Versi .name = "taproot", .gbt_optional_rule = true, }, + VBDeploymentInfo{ + .name = "simplicity", + .gbt_optional_rule = true, + }, }; std::string DeploymentName(Consensus::BuriedDeployment dep) diff --git a/src/ipc/CMakeLists.txt b/src/ipc/CMakeLists.txt index 300da1225050..2d062f0eeec3 100644 --- a/src/ipc/CMakeLists.txt +++ b/src/ipc/CMakeLists.txt @@ -19,6 +19,7 @@ target_capnp_sources(bitcoin_ipc ${CMAKE_CURRENT_SOURCE_DIR} target_link_libraries(bitcoin_ipc PRIVATE core_interface + BitcoinSimplicity univalue ) @@ -40,6 +41,7 @@ if(BUILD_TESTS) target_link_libraries(bitcoin_ipc_test PRIVATE core_interface + BitcoinSimplicity univalue Boost::headers ) diff --git a/src/kernel/chainparams.cpp b/src/kernel/chainparams.cpp index 50891a8d045b..c43a966f9939 100644 --- a/src/kernel/chainparams.cpp +++ b/src/kernel/chainparams.cpp @@ -118,6 +118,13 @@ class CMainParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1815; // 90% consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].threshold = 1815; // 90% + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].period = 2016; + consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000dee8e2a309ad8a9820433c68"}; consensus.defaultAssumeValid = uint256{"00000000000000000000611fd22f2df7c8fbd0688745c3a6c3bb5109cc2a12cb"}; // 912683 @@ -243,6 +250,13 @@ class CTestNetParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1512; // 75% consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].threshold = 1815; // 90% + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].period = 2016; + consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000000016dd270dd94fac1d7632"}; consensus.defaultAssumeValid = uint256{"0000000000000065c6c38258e201971a3fdfcc2ceee0dd6e85a6c022d45dee34"}; // 4550000 @@ -345,6 +359,13 @@ class CTestNet4Params : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1512; // 75% consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].threshold = 1815; // 90% + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].period = 2016; + consensus.nMinimumChainWork = uint256{"00000000000000000000000000000000000000000000034a4690fe592dc49c7c"}; consensus.defaultAssumeValid = uint256{"000000000000000180a58e7fa3b0db84b5ea76377524894f53660d93ac839d9b"}; // 91000 @@ -490,6 +511,13 @@ class SigNetParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 1815; // 90% consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 2016; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].threshold = 1815; // 90% + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].period = 2016; + // message start is defined as the first 4 bytes of the sha256d of the block script HashWriter h{}; h << consensus.signet_challenge; @@ -573,6 +601,13 @@ class CRegTestParams : public CChainParams consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].threshold = 108; // 75% consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].period = 144; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].bit = 24; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].min_activation_height = 0; // No activation delay + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].threshold = 1815; // 90% + consensus.vDeployments[Consensus::DEPLOYMENT_SIMPLICITY].period = 2016; + consensus.nMinimumChainWork = uint256{}; consensus.defaultAssumeValid = uint256{}; diff --git a/src/policy/policy.h b/src/policy/policy.h index f3f5ffb7a8ea..1d90a509d2da 100644 --- a/src/policy/policy.h +++ b/src/policy/policy.h @@ -126,6 +126,7 @@ static constexpr script_verify_flags STANDARD_SCRIPT_VERIFY_FLAGS{MANDATORY_SCRI SCRIPT_VERIFY_CONST_SCRIPTCODE | SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION | SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS | + SCRIPT_VERIFY_SIMPLICITY | SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE}; /** For convenience, standard but not mandatory verify flags. */ diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 58fa08b56ab9..45c1ad7ccc2c 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -266,6 +266,7 @@ add_windows_application_manifest(bitcoin-qt) target_link_libraries(bitcoin-qt core_interface bitcoinqt + BitcoinSimplicity bitcoin_node ) @@ -282,6 +283,7 @@ if(ENABLE_IPC) ) target_link_libraries(bitcoin-gui core_interface + BitcoinSimplicity bitcoinqt bitcoin_node bitcoin_ipc diff --git a/src/qt/test/CMakeLists.txt b/src/qt/test/CMakeLists.txt index 2fb8beadea35..83953a669849 100644 --- a/src/qt/test/CMakeLists.txt +++ b/src/qt/test/CMakeLists.txt @@ -21,6 +21,7 @@ target_link_libraries(test_bitcoin-qt bitcoinqt test_util bitcoin_node + BitcoinSimplicity Boost::headers Qt6::Test ) diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index ca405c25da20..501d90bd20ca 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -12,6 +12,10 @@ #include