Merge pull request #2181 from oleonardolima/feature/add-get-block-raw-route
feature: add /block/:hash/raw api route
This commit is contained in:
		
						commit
						b2e6573743
					
				| @ -9,6 +9,7 @@ export interface AbstractBitcoinApi { | |||||||
|   $getBlockHash(height: number): Promise<string>; |   $getBlockHash(height: number): Promise<string>; | ||||||
|   $getBlockHeader(hash: string): Promise<string>; |   $getBlockHeader(hash: string): Promise<string>; | ||||||
|   $getBlock(hash: string): Promise<IEsploraApi.Block>; |   $getBlock(hash: string): Promise<IEsploraApi.Block>; | ||||||
|  |   $getRawBlock(hash: string): Promise<string>; | ||||||
|   $getAddress(address: string): Promise<IEsploraApi.Address>; |   $getAddress(address: string): Promise<IEsploraApi.Address>; | ||||||
|   $getAddressTransactions(address: string, lastSeenTxId: string): Promise<IEsploraApi.Transaction[]>; |   $getAddressTransactions(address: string, lastSeenTxId: string): Promise<IEsploraApi.Transaction[]>; | ||||||
|   $getAddressPrefix(prefix: string): string[]; |   $getAddressPrefix(prefix: string): string[]; | ||||||
|  | |||||||
| @ -77,7 +77,8 @@ class BitcoinApi implements AbstractBitcoinApi { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   $getRawBlock(hash: string): Promise<string> { |   $getRawBlock(hash: string): Promise<string> { | ||||||
|     return this.bitcoindClient.getBlock(hash, 0); |     return this.bitcoindClient.getBlock(hash, 0) | ||||||
|  |       .then((raw: string) => Buffer.from(raw, "hex")); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   $getBlockHash(height: number): Promise<string> { |   $getBlockHash(height: number): Promise<string> { | ||||||
|  | |||||||
| @ -103,9 +103,10 @@ class BitcoinRoutes { | |||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/header', this.getBlockHeader) |           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/header', this.getBlockHeader) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/height', this.getBlockTipHeight) |           .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/height', this.getBlockTipHeight) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/hash', this.getBlockTipHash) |           .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/hash', this.getBlockTipHash) | ||||||
|  |           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/raw', this.getRawBlock) | ||||||
|  |           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txids', this.getTxIdsForBlock) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txs', this.getBlockTransactions) |           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txs', this.getBlockTransactions) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txs/:index', this.getBlockTransactions) |           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txs/:index', this.getBlockTransactions) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/txids', this.getTxIdsForBlock) |  | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'block-height/:height', this.getBlockHeight) |           .get(config.MEMPOOL.API_URL_PREFIX + 'block-height/:height', this.getBlockHeight) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address', this.getAddress) |           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address', this.getAddress) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs', this.getAddressTransactions) |           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs', this.getAddressTransactions) | ||||||
| @ -470,6 +471,16 @@ class BitcoinRoutes { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   private async getRawBlock(req: Request, res: Response) { | ||||||
|  |     try { | ||||||
|  |       const result = await bitcoinApi.$getRawBlock(req.params.hash); | ||||||
|  |       res.setHeader('content-type', 'application/octet-stream'); | ||||||
|  |       res.send(result); | ||||||
|  |     } catch (e) { | ||||||
|  |       res.status(500).send(e instanceof Error ? e.message : e); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private async getTxIdsForBlock(req: Request, res: Response) { |   private async getTxIdsForBlock(req: Request, res: Response) { | ||||||
|     try { |     try { | ||||||
|       const result = await bitcoinApi.$getTxIdsForBlock(req.params.hash); |       const result = await bitcoinApi.$getTxIdsForBlock(req.params.hash); | ||||||
|  | |||||||
| @ -50,6 +50,11 @@ class ElectrsApi implements AbstractBitcoinApi { | |||||||
|       .then((response) => response.data); |       .then((response) => response.data); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   $getRawBlock(hash: string): Promise<string> { | ||||||
|  |     return axios.get<string>(config.ESPLORA.REST_API_URL + '/block/' + hash + "/raw", this.axiosConfig) | ||||||
|  |       .then((response) => response.data); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   $getAddress(address: string): Promise<IEsploraApi.Address> { |   $getAddress(address: string): Promise<IEsploraApi.Address> { | ||||||
|     throw new Error('Method getAddress not implemented.'); |     throw new Error('Method getAddress not implemented.'); | ||||||
|   } |   } | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								contributors/oleonardolima.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								contributors/oleonardolima.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of July 25, 2022. | ||||||
|  | 
 | ||||||
|  | Signed: oleonardolima | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user