diff --git a/libraries/plugins/peerplays_sidechain/bitcoin/bitcoin_address.cpp b/libraries/plugins/peerplays_sidechain/bitcoin/bitcoin_address.cpp index c327d2c3..b9c21282 100644 --- a/libraries/plugins/peerplays_sidechain/bitcoin/bitcoin_address.cpp +++ b/libraries/plugins/peerplays_sidechain/bitcoin/bitcoin_address.cpp @@ -413,8 +413,9 @@ void btc_one_or_weighted_multisig_address::create_segwit_address() { address = segwit_addr::encode(hrp, 0, hash_data); } -btc_timelocked_one_or_weighted_multisig_address::btc_timelocked_one_or_weighted_multisig_address(const fc::ecc::public_key &user_key_data, const std::vector > &keys_data, bitcoin_address::network ntype) : - btc_one_or_weighted_multisig_address(user_key_data, keys_data, ntype) +btc_timelocked_one_or_weighted_multisig_address::btc_timelocked_one_or_weighted_multisig_address(const fc::ecc::public_key &user_key_data, uint32_t latency, const std::vector > &keys_data, bitcoin_address::network ntype) : + btc_one_or_weighted_multisig_address(user_key_data, keys_data, ntype), + latency_(latency) { create_redeem_script(user_key_data, keys_data); create_witness_script(); @@ -427,6 +428,9 @@ void btc_timelocked_one_or_weighted_multisig_address::create_redeem_script(const builder << user_key_data.serialize(); builder << op::CHECKSIG; builder << op::IF; + builder << uint32_t(latency_); + builder << op::CHECKSEQUENCEVERIFY; + builder << op::DROP; builder << op::_1; builder << op::ELSE; uint32_t total_weight = 0; diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_address.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_address.hpp index 0f93413e..ac9c433b 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_address.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_address.hpp @@ -211,11 +211,13 @@ public: class btc_timelocked_one_or_weighted_multisig_address : public btc_one_or_weighted_multisig_address { public: btc_timelocked_one_or_weighted_multisig_address() = default; - btc_timelocked_one_or_weighted_multisig_address(const fc::ecc::public_key &user_key_data, const std::vector> &keys_data, + btc_timelocked_one_or_weighted_multisig_address(const fc::ecc::public_key &user_key_data, uint32_t latency, const std::vector> &keys_data, network network_type = network::regtest); private: void create_redeem_script(const fc::ecc::public_key &user_key_data, const std::vector> &keys_data); + + uint32_t latency_; }; }}} // namespace graphene::peerplays_sidechain::bitcoin @@ -237,3 +239,11 @@ FC_REFLECT_DERIVED(graphene::peerplays_sidechain::bitcoin::btc_weighted_multisig FC_REFLECT_DERIVED(graphene::peerplays_sidechain::bitcoin::btc_one_or_m_of_n_multisig_address, (graphene::peerplays_sidechain::bitcoin::bitcoin_address), (redeem_script_)(witness_script_)); + +FC_REFLECT_DERIVED(graphene::peerplays_sidechain::bitcoin::btc_one_or_weighted_multisig_address, + (graphene::peerplays_sidechain::bitcoin::bitcoin_address), + (redeem_script_)(witness_script_)); + +FC_REFLECT_DERIVED(graphene::peerplays_sidechain::bitcoin::btc_timelocked_one_or_weighted_multisig_address, + (graphene::peerplays_sidechain::bitcoin::btc_one_or_weighted_multisig_address), + (latency_)); diff --git a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_script.hpp b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_script.hpp index afea853f..7b746449 100644 --- a/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_script.hpp +++ b/libraries/plugins/peerplays_sidechain/include/graphene/peerplays_sidechain/bitcoin/bitcoin_script.hpp @@ -32,6 +32,7 @@ enum class op { RETURN = 0x6a, // stack ops + DROP = 0x75, DUP = 0x76, SWAP = 0x7c,