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  }