Lovely band-aids

This commit is contained in:
Garrett Mills 2021-04-10 14:18:55 -05:00
parent 313fdb65e9
commit 1bba0a18ec
Signed by: garrettmills
GPG Key ID: D2BF5FBA8298F246
3 changed files with 27 additions and 7 deletions

View File

@ -7,7 +7,7 @@ export default {
base_url: env('BASE_URL', 'http://localhost:8000/'), base_url: env('BASE_URL', 'http://localhost:8000/'),
peers: [ peers: [
// 'http://127.0.0.1:8100/', 'http://127.0.0.1:8100/',
], ],
session: { session: {

View File

@ -68,11 +68,11 @@ export interface BlockResourceItem extends FirebaseResourceItem {
export function isBlockResourceItem(what: any): what is BlockResourceItem { export function isBlockResourceItem(what: any): what is BlockResourceItem {
return ( return (
typeof what?.uuid === 'string' typeof what?.uuid === 'string'
&& Array.isArray(what?.transactions) && (!what?.transactions || Array.isArray(what?.transactions))
&& typeof what?.lastBlockHash === 'string' && typeof what?.lastBlockHash === 'string'
&& typeof what?.lastBlockUUID === 'string' && typeof what?.lastBlockUUID === 'string'
&& typeof what?.proof === 'string' && typeof what?.proof
&& typeof what?.timestamp === 'number' && typeof what?.timestamp
&& typeof what?.waitTime === 'number' && typeof what?.waitTime === 'number'
) )
} }

View File

@ -177,10 +177,15 @@ export class Blockchain extends Unit {
try { try {
const result = await axios.get(`${peer.host}api/v1/chain/submit`) const result = await axios.get(`${peer.host}api/v1/chain/submit`)
const blocks: unknown = result.data?.data?.records const blocks: unknown = result.data?.data?.records
if ( Array.isArray(blocks) && blocks.every(isBlockResourceItem) ) { if ( Array.isArray(blocks) && blocks.every(block => {
const match = isBlockResourceItem(block)
console.log(match, block)
return match
}) ) {
return blocks.map(x => new Block(x)) return blocks.map(x => new Block(x))
} }
} catch (e) { } catch (e) {
this.logging.error(e)
return undefined return undefined
} }
} }
@ -214,6 +219,7 @@ export class Blockchain extends Unit {
}, { }, {
headers: { headers: {
[header]: await this.getPeerToken(), [header]: await this.getPeerToken(),
'content-type': 'application/json',
} }
}) })
@ -283,7 +289,9 @@ export class Blockchain extends Unit {
const time_x_peer: {[key: string]: Peer | true} = {} const time_x_peer: {[key: string]: Peer | true} = {}
for ( const peer of peers ) { 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)
console.log('[PEER BLOCKS]', blocks)
if ( blocks && await this.validate(blocks) ) { if ( blocks && await this.validate(blocks) ) {
const block = blocks.reverse()[0] const block = blocks.reverse()[0]
if ( !block || block.seqID === validSeqID || !block.seqID ) continue if ( !block || block.seqID === validSeqID || !block.seqID ) continue
@ -296,8 +304,10 @@ export class Blockchain extends Unit {
block.waitTime += penalty block.waitTime += penalty
time_x_block[block.waitTime] = block time_x_block[block.waitTime] = block
time_x_blocks[block.waitTime] = blocks time_x_blocks[block.waitTime] = blocks.reverse()
time_x_peer[block.waitTime] = peer time_x_peer[block.waitTime] = peer
} else {
console.log('VALIDATION FAIL')
} }
} }
@ -320,7 +330,17 @@ export class Blockchain extends Unit {
await (<BlockResource>this.app().make(BlockResource)).push(block) await (<BlockResource>this.app().make(BlockResource)).push(block)
} else { } else {
await this.firebase.ref('block').transaction((_) => { await this.firebase.ref('block').transaction((_) => {
return (time_x_blocks[min] || []).map(x => x.toItem()) return (time_x_blocks[min] || []).map(x => {
const item = x.toItem()
// @ts-ignore
delete item.firebaseID
if ( !item.transactions ) {
item.transactions = []
}
return item
})
}) })
this.pendingSubmit = undefined this.pendingSubmit = undefined