-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathcontext.rs
53 lines (47 loc) · 2.23 KB
/
context.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// SPDX-License-Identifier: Apache-2.0
//
// Copyright © 2017 Trust Wallet.
use crate::modules::protobuf_builder::standard_protobuf_builder::StandardProtobufBuilder;
use crate::modules::protobuf_builder::ProtobufBuilder;
use crate::modules::psbt_request::standard_psbt_request_builder::StandardPsbtRequestBuilder;
use crate::modules::psbt_request::PsbtRequestBuilder;
use crate::modules::signing_request::standard_signing_request::StandardSigningRequestBuilder;
use crate::modules::signing_request::SigningRequestBuilder;
use tw_coin_entry::error::prelude::SigningResult;
use tw_utxo::address::standard_bitcoin::StandardBitcoinAddress;
use tw_utxo::context::{AddressPrefixes, UtxoContext};
use tw_utxo::fee::fee_estimator::StandardFeeEstimator;
use tw_utxo::script::Script;
use tw_utxo::transaction::standard_transaction::Transaction;
/// A set of associated modules different from a chain to chain.
/// The modules are mainly used to generate a signing request from a [`BitcoinV2::Proto::SigningInput`],
/// and generate a [`Utxo::Proto::Transaction`] output when the transaction is signed.
pub trait BitcoinSigningContext: UtxoContext + Sized {
type SigningRequestBuilder: SigningRequestBuilder<Self>;
type ProtobufBuilder: ProtobufBuilder<Self>;
type PsbtRequestBuilder: PsbtRequestBuilder<Self>;
}
#[derive(Default)]
pub struct StandardBitcoinContext;
impl UtxoContext for StandardBitcoinContext {
type Address = StandardBitcoinAddress;
type Transaction = Transaction;
type FeeEstimator = StandardFeeEstimator<Self::Transaction>;
fn addr_to_script_pubkey(
addr: &Self::Address,
prefixes: AddressPrefixes,
) -> SigningResult<Script> {
match addr {
StandardBitcoinAddress::Legacy(legacy) => {
legacy.to_script_pubkey(prefixes.p2pkh_prefix, prefixes.p2sh_prefix)
},
StandardBitcoinAddress::Segwit(segwit) => segwit.to_script_pubkey(),
StandardBitcoinAddress::Taproot(taproot) => taproot.to_script_pubkey(),
}
}
}
impl BitcoinSigningContext for StandardBitcoinContext {
type SigningRequestBuilder = StandardSigningRequestBuilder;
type ProtobufBuilder = StandardProtobufBuilder;
type PsbtRequestBuilder = StandardPsbtRequestBuilder;
}