github.com/trezor/blockbook@v0.4.1-0.20240328132726-e9a08582ee2c/bchain/coins/deeponion/deeponionparser.go (about) 1 package deeponion 2 3 import ( 4 "github.com/martinboehm/btcd/wire" 5 "github.com/martinboehm/btcutil/chaincfg" 6 "github.com/trezor/blockbook/bchain" 7 "github.com/trezor/blockbook/bchain/coins/btc" 8 ) 9 10 // magic numbers 11 const ( 12 MainnetMagic wire.BitcoinNet = 0xf2dbf1d1 13 ) 14 15 // chain parameters 16 var ( 17 MainNetParams chaincfg.Params 18 ) 19 20 func init() { 21 MainNetParams = chaincfg.MainNetParams 22 MainNetParams.Net = MainnetMagic 23 MainNetParams.PubKeyHashAddrID = []byte{31} 24 MainNetParams.ScriptHashAddrID = []byte{78} 25 MainNetParams.Bech32HRPSegwit = "dpn" 26 } 27 28 // DeepOnionParser handle 29 type DeepOnionParser struct { 30 *btc.BitcoinLikeParser 31 baseparser *bchain.BaseParser 32 } 33 34 // NewDeepOnionParser returns new DeepOnionParser instance 35 func NewDeepOnionParser(params *chaincfg.Params, c *btc.Configuration) *DeepOnionParser { 36 return &DeepOnionParser{ 37 BitcoinLikeParser: btc.NewBitcoinLikeParser(params, c), 38 baseparser: &bchain.BaseParser{}, 39 } 40 } 41 42 // GetChainParams contains network parameters for the main DeepOnion network, 43 func GetChainParams(chain string) *chaincfg.Params { 44 // register bitcoin parameters in addition to deeponion parameters 45 // deeponion has dual standard of addresses and we want to be able to 46 // parse both standards 47 if !chaincfg.IsRegistered(&chaincfg.MainNetParams) { 48 chaincfg.RegisterBitcoinParams() 49 } 50 if !chaincfg.IsRegistered(&MainNetParams) { 51 err := chaincfg.Register(&MainNetParams) 52 if err != nil { 53 panic(err) 54 } 55 } 56 return &MainNetParams 57 } 58 59 // PackTx packs transaction to byte array using protobuf 60 func (p *DeepOnionParser) PackTx(tx *bchain.Tx, height uint32, blockTime int64) ([]byte, error) { 61 return p.baseparser.PackTx(tx, height, blockTime) 62 } 63 64 // UnpackTx unpacks transaction from protobuf byte array 65 func (p *DeepOnionParser) UnpackTx(buf []byte) (*bchain.Tx, uint32, error) { 66 return p.baseparser.UnpackTx(buf) 67 }