github.com/aychain/blockbook@v0.1.1-0.20181121092459-6d1fc7e07c5b/tests/dbtestdata/fakechain.go (about)

     1  package dbtestdata
     2  
     3  import (
     4  	"blockbook/bchain"
     5  	"context"
     6  	"encoding/json"
     7  	"errors"
     8  	"math/big"
     9  )
    10  
    11  type fakeBlockChain struct {
    12  	parser bchain.BlockChainParser
    13  }
    14  
    15  func NewFakeBlockChain(parser bchain.BlockChainParser) (*fakeBlockChain, error) {
    16  	return &fakeBlockChain{parser: parser}, nil
    17  }
    18  
    19  func (c *fakeBlockChain) Initialize() error {
    20  	return nil
    21  }
    22  
    23  func (c *fakeBlockChain) Shutdown(ctx context.Context) error {
    24  	return nil
    25  }
    26  
    27  func (c *fakeBlockChain) IsTestnet() bool {
    28  	return true
    29  }
    30  
    31  func (c *fakeBlockChain) GetNetworkName() string {
    32  	return "fakecoin"
    33  }
    34  
    35  func (c *fakeBlockChain) GetCoinName() string {
    36  	return "Fakecoin"
    37  }
    38  
    39  func (c *fakeBlockChain) GetSubversion() string {
    40  	return "/Fakecoin:0.0.1/"
    41  }
    42  
    43  func (c *fakeBlockChain) GetChainInfo() (v *bchain.ChainInfo, err error) {
    44  	return &bchain.ChainInfo{
    45  		Chain:         c.GetNetworkName(),
    46  		Blocks:        2,
    47  		Headers:       2,
    48  		Bestblockhash: GetTestUTXOBlock2(c.parser).BlockHeader.Hash,
    49  		Version:       "001001",
    50  		Subversion:    c.GetSubversion(),
    51  	}, nil
    52  }
    53  
    54  func (c *fakeBlockChain) GetBestBlockHash() (v string, err error) {
    55  	return GetTestUTXOBlock2(c.parser).BlockHeader.Hash, nil
    56  }
    57  
    58  func (c *fakeBlockChain) GetBestBlockHeight() (v uint32, err error) {
    59  	return GetTestUTXOBlock2(c.parser).BlockHeader.Height, nil
    60  }
    61  
    62  func (c *fakeBlockChain) GetBlockHash(height uint32) (v string, err error) {
    63  	b1 := GetTestUTXOBlock1(c.parser)
    64  	if height == b1.BlockHeader.Height {
    65  		return b1.BlockHeader.Hash, nil
    66  	}
    67  	b2 := GetTestUTXOBlock2(c.parser)
    68  	if height == b2.BlockHeader.Height {
    69  		return b2.BlockHeader.Hash, nil
    70  	}
    71  	return "", bchain.ErrBlockNotFound
    72  }
    73  
    74  func (c *fakeBlockChain) GetBlockHeader(hash string) (v *bchain.BlockHeader, err error) {
    75  	b1 := GetTestUTXOBlock1(c.parser)
    76  	if hash == b1.BlockHeader.Hash {
    77  		return &b1.BlockHeader, nil
    78  	}
    79  	b2 := GetTestUTXOBlock2(c.parser)
    80  	if hash == b2.BlockHeader.Hash {
    81  		return &b2.BlockHeader, nil
    82  	}
    83  	return nil, bchain.ErrBlockNotFound
    84  }
    85  
    86  func (c *fakeBlockChain) GetBlock(hash string, height uint32) (v *bchain.Block, err error) {
    87  	b1 := GetTestUTXOBlock1(c.parser)
    88  	if hash == b1.BlockHeader.Hash || height == b1.BlockHeader.Height {
    89  		return b1, nil
    90  	}
    91  	b2 := GetTestUTXOBlock2(c.parser)
    92  	if hash == b2.BlockHeader.Hash || height == b2.BlockHeader.Height {
    93  		return b2, nil
    94  	}
    95  	return nil, bchain.ErrBlockNotFound
    96  }
    97  
    98  func getBlockInfo(b *bchain.Block) *bchain.BlockInfo {
    99  	bi := &bchain.BlockInfo{
   100  		BlockHeader: b.BlockHeader,
   101  	}
   102  	for _, tx := range b.Txs {
   103  		bi.Txids = append(bi.Txids, tx.Txid)
   104  	}
   105  	return bi
   106  }
   107  
   108  func (c *fakeBlockChain) GetBlockInfo(hash string) (v *bchain.BlockInfo, err error) {
   109  	b1 := GetTestUTXOBlock1(c.parser)
   110  	if hash == b1.BlockHeader.Hash {
   111  		return getBlockInfo(b1), nil
   112  	}
   113  	b2 := GetTestUTXOBlock2(c.parser)
   114  	if hash == b2.BlockHeader.Hash {
   115  		return getBlockInfo(b2), nil
   116  	}
   117  	return nil, bchain.ErrBlockNotFound
   118  }
   119  
   120  func (c *fakeBlockChain) GetMempool() (v []string, err error) {
   121  	return nil, errors.New("Not implemented")
   122  }
   123  
   124  func getTxInBlock(b *bchain.Block, txid string) *bchain.Tx {
   125  	for _, tx := range b.Txs {
   126  		if tx.Txid == txid {
   127  			return &tx
   128  		}
   129  	}
   130  	return nil
   131  }
   132  
   133  func (c *fakeBlockChain) GetTransaction(txid string) (v *bchain.Tx, err error) {
   134  	v = getTxInBlock(GetTestUTXOBlock1(c.parser), txid)
   135  	if v == nil {
   136  		v = getTxInBlock(GetTestUTXOBlock2(c.parser), txid)
   137  	}
   138  	if v != nil {
   139  		return v, nil
   140  	}
   141  	return nil, errors.New("Not found")
   142  }
   143  
   144  func (c *fakeBlockChain) GetTransactionSpecific(txid string) (v json.RawMessage, err error) {
   145  	tx, err := c.GetTransaction(txid)
   146  	if err != nil {
   147  		return nil, err
   148  	}
   149  	rm, err := json.Marshal(tx)
   150  	if err != nil {
   151  		return nil, err
   152  	}
   153  	return json.RawMessage(rm), nil
   154  }
   155  
   156  func (c *fakeBlockChain) GetTransactionForMempool(txid string) (v *bchain.Tx, err error) {
   157  	return nil, errors.New("Not implemented")
   158  }
   159  
   160  func (c *fakeBlockChain) EstimateSmartFee(blocks int, conservative bool) (v big.Int, err error) {
   161  	if conservative == false {
   162  		v.SetInt64(int64(blocks)*100 - 1)
   163  	} else {
   164  		v.SetInt64(int64(blocks) * 100)
   165  	}
   166  	return
   167  }
   168  
   169  func (c *fakeBlockChain) EstimateFee(blocks int) (v big.Int, err error) {
   170  	v.SetInt64(int64(blocks) * 200)
   171  	return
   172  }
   173  
   174  func (c *fakeBlockChain) SendRawTransaction(tx string) (v string, err error) {
   175  	if tx == "123456" {
   176  		return "9876", nil
   177  	}
   178  	return "", errors.New("Invalid data")
   179  }
   180  
   181  func (c *fakeBlockChain) ResyncMempool(onNewTxAddr bchain.OnNewTxAddrFunc) (count int, err error) {
   182  	return 0, errors.New("Not implemented")
   183  }
   184  
   185  func (c *fakeBlockChain) GetMempoolTransactions(address string) (v []string, err error) {
   186  	return nil, errors.New("Not implemented")
   187  }
   188  
   189  func (c *fakeBlockChain) GetMempoolTransactionsForAddrDesc(addrDesc bchain.AddressDescriptor) (v []string, err error) {
   190  	return []string{}, nil
   191  }
   192  
   193  func (c *fakeBlockChain) GetMempoolEntry(txid string) (v *bchain.MempoolEntry, err error) {
   194  	return nil, errors.New("Not implemented")
   195  }
   196  
   197  func (c *fakeBlockChain) GetChainParser() bchain.BlockChainParser {
   198  	return c.parser
   199  }