forked from romanz/electrs
-
Notifications
You must be signed in to change notification settings - Fork 139
/
Copy pathpeg.rs
65 lines (56 loc) · 1.99 KB
/
peg.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
54
55
56
57
58
59
60
61
62
63
64
65
use elements::{confidential::Asset, PeginData, PegoutData, TxIn, TxOut};
use crate::chain::{bitcoin_genesis_hash, BNetwork, Network};
use crate::util::{FullHash, ScriptToAsm};
pub fn get_pegin_data(txout: &TxIn, network: Network) -> Option<PeginData> {
let pegged_asset_id = network.pegged_asset()?;
txout
.pegin_data()
.filter(|pegin| pegin.asset == *pegged_asset_id)
}
pub fn get_pegout_data(
txout: &TxOut,
network: Network,
parent_network: BNetwork,
) -> Option<PegoutData> {
let pegged_asset_id = network.pegged_asset()?;
txout.pegout_data().filter(|pegout| {
pegout.asset == Asset::Explicit(*pegged_asset_id)
&& pegout.genesis_hash == bitcoin_genesis_hash(parent_network)
})
}
// API representation of pegout data associated with an output
#[derive(Serialize, Clone)]
pub struct PegoutValue {
pub genesis_hash: bitcoin::BlockHash,
pub scriptpubkey: bitcoin::ScriptBuf,
pub scriptpubkey_asm: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub scriptpubkey_address: Option<bitcoin::Address>,
}
impl PegoutValue {
pub fn from_txout(txout: &TxOut, network: Network, parent_network: BNetwork) -> Option<Self> {
let pegoutdata = get_pegout_data(txout, network, parent_network)?;
let scriptpubkey = pegoutdata.script_pubkey;
let address = bitcoin::Address::from_script(&scriptpubkey, parent_network).ok();
Some(PegoutValue {
genesis_hash: pegoutdata.genesis_hash,
scriptpubkey_asm: scriptpubkey.to_asm(),
scriptpubkey_address: address,
scriptpubkey,
})
}
}
// Inner type for the indexer TxHistoryInfo::Pegin variant
#[derive(Serialize, Deserialize, Debug)]
pub struct PeginInfo {
pub txid: FullHash,
pub vin: u32,
pub value: u64,
}
// Inner type for the indexer TxHistoryInfo::Pegout variant
#[derive(Serialize, Deserialize, Debug)]
pub struct PegoutInfo {
pub txid: FullHash,
pub vout: u32,
pub value: u64,
}