github.com/trezor/blockbook@v0.4.1-0.20240328132726-e9a08582ee2c/bchain/coins/ravencoin/ravencoinparser.go (about)

     1  package ravencoin
     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 = 0x4e564152
    13  	TestnetMagic wire.BitcoinNet = 0x544e5652
    14  )
    15  
    16  // chain parameters
    17  var (
    18  	MainNetParams chaincfg.Params
    19  	TestNetParams chaincfg.Params
    20  )
    21  
    22  func init() {
    23  	MainNetParams = chaincfg.MainNetParams
    24  	MainNetParams.Net = MainnetMagic
    25  	MainNetParams.PubKeyHashAddrID = []byte{60}
    26  	MainNetParams.ScriptHashAddrID = []byte{122}
    27  
    28  	TestNetParams = chaincfg.TestNet3Params
    29  	TestNetParams.Net = TestnetMagic
    30  	TestNetParams.PubKeyHashAddrID = []byte{111}
    31  	TestNetParams.ScriptHashAddrID = []byte{196}
    32  }
    33  
    34  // RavencoinParser handle
    35  type RavencoinParser struct {
    36  	*btc.BitcoinLikeParser
    37  	baseparser *bchain.BaseParser
    38  }
    39  
    40  // NewRavencoinParser returns new RavencoinParser instance
    41  func NewRavencoinParser(params *chaincfg.Params, c *btc.Configuration) *RavencoinParser {
    42  	return &RavencoinParser{
    43  		BitcoinLikeParser: btc.NewBitcoinLikeParser(params, c),
    44  		baseparser:        &bchain.BaseParser{},
    45  	}
    46  }
    47  
    48  // GetChainParams contains network parameters
    49  func GetChainParams(chain string) *chaincfg.Params {
    50  	if !chaincfg.IsRegistered(&MainNetParams) {
    51  		err := chaincfg.Register(&MainNetParams)
    52  		if err == nil {
    53  			err = chaincfg.Register(&TestNetParams)
    54  		}
    55  		if err != nil {
    56  			panic(err)
    57  		}
    58  	}
    59  	switch chain {
    60  	case "test":
    61  		return &TestNetParams
    62  	default:
    63  		return &MainNetParams
    64  	}
    65  }
    66  
    67  // PackTx packs transaction to byte array using protobuf
    68  func (p *RavencoinParser) PackTx(tx *bchain.Tx, height uint32, blockTime int64) ([]byte, error) {
    69  	return p.baseparser.PackTx(tx, height, blockTime)
    70  }
    71  
    72  // UnpackTx unpacks transaction from protobuf byte array
    73  func (p *RavencoinParser) UnpackTx(buf []byte) (*bchain.Tx, uint32, error) {
    74  	return p.baseparser.UnpackTx(buf)
    75  }