mirror of
https://github.com/hackku21/loc-chain-backend.git
synced 2024-10-27 20:34:03 +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