mirror of
				https://github.com/hackku21/loc-chain-backend.git
				synced 2025-06-13 12:53:59 +00:00 
			
		
		
		
	Prevent circular refresh from peer-triggered refresh
This commit is contained in:
		
							parent
							
								
									8b3905fd5c
								
							
						
					
					
						commit
						0aac7161df
					
				| @ -38,7 +38,8 @@ export class Blockchain extends Controller { | ||||
|      * most recent submission, that has NOT been accepted yet. | ||||
|      */ | ||||
|     public async readBlockchainSubmission() { | ||||
|         return many((await this.blockchain.getSubmitChain()).map(x => { | ||||
|         const resultOfPeerRefresh = !!this.request.query.resultOfPeerRefresh | ||||
|         return many((await this.blockchain.getSubmitChain(resultOfPeerRefresh)).map(x => { | ||||
|             // @ts-ignore
 | ||||
|             delete x.firebaseID | ||||
|             return x | ||||
|  | ||||
| @ -172,10 +172,11 @@ export class Blockchain extends Unit { | ||||
|     /** | ||||
|      * From a peer, fetch the submission blockchain, if it is valid. | ||||
|      * @param peer | ||||
|      * @param resultOfPeerRefresh | ||||
|      */ | ||||
|     public async getPeerSubmit(peer: Peer): Promise<Block[] | undefined> { | ||||
|     public async getPeerSubmit(peer: Peer, resultOfPeerRefresh: boolean): Promise<Block[] | undefined> { | ||||
|         try { | ||||
|             const result = await axios.get(`${peer.host}api/v1/chain/submit`) | ||||
|             const result = await axios.get(`${peer.host}api/v1/chain/submit${resultOfPeerRefresh ? '?resultOfPeerRefresh=true' : ''}`) | ||||
|             const blocks: unknown = result.data?.data?.records | ||||
|             if ( Array.isArray(blocks) && blocks.every(block => { | ||||
|                 const match = isBlockResourceItem(block) | ||||
| @ -222,7 +223,7 @@ export class Blockchain extends Unit { | ||||
|                     } | ||||
|                 }) | ||||
| 
 | ||||
|                 this.refresh() | ||||
|                 this.refresh(false) | ||||
|             } catch (e) { | ||||
|                 this.logging.error(e) | ||||
|             } | ||||
| @ -273,7 +274,7 @@ export class Blockchain extends Unit { | ||||
|         ).every(Boolean) | ||||
|     } | ||||
| 
 | ||||
|     public async refresh() { | ||||
|     public async refresh(resultOfPeerRefresh: boolean) { | ||||
|         if ( this.isSubmitting ) { | ||||
|             return | ||||
|         } else { | ||||
| @ -290,7 +291,7 @@ export class Blockchain extends Unit { | ||||
| 
 | ||||
|         for ( const peer of peers ) { | ||||
|             console.log('[PEERS]', peers) | ||||
|             const blocks: Block[] | undefined = await this.getPeerSubmit(peer) | ||||
|             const blocks: Block[] | undefined = await this.getPeerSubmit(peer, resultOfPeerRefresh) | ||||
|             console.log('[PEER BLOCKS]', blocks) | ||||
|             if ( blocks && await this.validate(blocks) ) { | ||||
|                 const block = blocks.reverse()[0] | ||||
| @ -351,7 +352,7 @@ export class Blockchain extends Unit { | ||||
|         this.isSubmitting = false | ||||
|     } | ||||
| 
 | ||||
|     public async getSubmitChain(): Promise<BlockResourceItem[]> { | ||||
|     public async getSubmitChain(resultOfPeerRefresh: boolean): Promise<BlockResourceItem[]> { | ||||
|         await this.firebase.trylock('block', 'Blockchain_getSubmitChain') | ||||
|         const blocks = await this.read() | ||||
|         const submit = await this.attemptSubmit() | ||||
| @ -361,7 +362,9 @@ export class Blockchain extends Unit { | ||||
|         } | ||||
| 
 | ||||
|         await this.firebase.unlock('block') | ||||
|         // this.refresh()
 | ||||
|         if ( !resultOfPeerRefresh ) { | ||||
|             this.refresh(resultOfPeerRefresh) | ||||
|         } | ||||
|         return blocks | ||||
|     } | ||||
| 
 | ||||
| @ -403,7 +406,7 @@ export class Blockchain extends Unit { | ||||
|         } | ||||
| 
 | ||||
|         this.pendingTransactions.push(...txes) | ||||
|         this.refresh() | ||||
|         this.refresh(false) | ||||
| 
 | ||||
|         /*const lastBlock = await this.getLastBlock() | ||||
| 
 | ||||
| @ -436,7 +439,7 @@ export class Blockchain extends Unit { | ||||
|         } | ||||
| 
 | ||||
|         this.pendingTransactions.push(...exposures) | ||||
|         this.refresh() | ||||
|         this.refresh(false) | ||||
| 
 | ||||
|         /*const lastBlock = await this.getLastBlock() | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user