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 }