timelocked deposit address

This commit is contained in:
gladcow 2020-04-21 12:28:55 +03:00
parent fea08cc1ea
commit da916d044c
3 changed files with 18 additions and 3 deletions

View file

@ -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<std::pair<fc::ecc::public_key, uint16_t> > &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<std::pair<fc::ecc::public_key, uint16_t> > &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;

View file

@ -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<std::pair<fc::ecc::public_key, uint16_t>> &keys_data,
btc_timelocked_one_or_weighted_multisig_address(const fc::ecc::public_key &user_key_data, uint32_t latency, const std::vector<std::pair<fc::ecc::public_key, uint16_t>> &keys_data,
network network_type = network::regtest);
private:
void create_redeem_script(const fc::ecc::public_key &user_key_data, const std::vector<std::pair<fc::ecc::public_key, uint16_t>> &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_));

View file

@ -32,6 +32,7 @@ enum class op {
RETURN = 0x6a,
// stack ops
DROP = 0x75,
DUP = 0x76,
SWAP = 0x7c,