mirror of
https://github.com/hackku21/loc-chain-backend.git
synced 2024-10-27 20:34:03 +00:00
Reformat
This commit is contained in:
parent
025bc58869
commit
5ae20e945f
@ -11,33 +11,33 @@ import { collect, uuid_v4 } from "@extollo/util"
|
|||||||
* Utility wrapper class for a block in the chain.
|
* Utility wrapper class for a block in the chain.
|
||||||
*/
|
*/
|
||||||
export class Block implements BlockResourceItem {
|
export class Block implements BlockResourceItem {
|
||||||
firebaseID: string;
|
firebaseID: string
|
||||||
seqID: number;
|
seqID: number
|
||||||
uuid: string;
|
uuid: string
|
||||||
transactions: BlockTransaction[];
|
transactions: BlockTransaction[]
|
||||||
timestamp: number;
|
timestamp: number
|
||||||
lastBlockHash: string;
|
lastBlockHash: string
|
||||||
lastBlockUUID: string;
|
lastBlockUUID: string
|
||||||
proof: string;
|
proof: string
|
||||||
get config(): Config {
|
get config(): Config {
|
||||||
return Application.getApplication().make(Config)
|
return Application.getApplication().make(Config)
|
||||||
}
|
}
|
||||||
constructor(rec: BlockResourceItem) {
|
constructor(rec: BlockResourceItem) {
|
||||||
this.firebaseID = rec.firebaseID;
|
this.firebaseID = rec.firebaseID
|
||||||
this.seqID = rec.seqID
|
this.seqID = rec.seqID
|
||||||
this.uuid = rec.uuid
|
this.uuid = rec.uuid
|
||||||
this.transactions = rec.transactions
|
this.transactions = rec.transactions
|
||||||
this.lastBlockHash = rec.lastBlockHash
|
this.lastBlockHash = rec.lastBlockHash
|
||||||
this.lastBlockUUID = rec.lastBlockUUID
|
this.lastBlockUUID = rec.lastBlockUUID
|
||||||
this.proof = rec.proof;
|
this.proof = rec.proof
|
||||||
this.timestamp = rec.timestamp;
|
this.timestamp = rec.timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns true if this is the genesis block. */
|
/** Returns true if this is the genesis block. */
|
||||||
async isGenesis() {
|
async isGenesis() {
|
||||||
// first block will be guaranteed uuid 0000
|
// first block will be guaranteed uuid 0000
|
||||||
if (this.uuid !== '0000') {
|
if (this.uuid !== '0000') {
|
||||||
return false;
|
return false
|
||||||
}
|
}
|
||||||
const proof = this.proof
|
const proof = this.proof
|
||||||
const publicKey = this.config.get("app.gpg.key.public")
|
const publicKey = this.config.get("app.gpg.key.public")
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {Singleton, Inject} from "@extollo/di"
|
import { Singleton, Inject } from "@extollo/di"
|
||||||
import {Unit, Logging, Config} from "@extollo/lib"
|
import { Unit, Logging, Config } from "@extollo/lib"
|
||||||
import * as firebase from "firebase-admin"
|
import * as firebase from "firebase-admin"
|
||||||
|
|
||||||
export type RTDBRef = 'peers' | 'transaction' | 'block'
|
export type RTDBRef = 'peers' | 'transaction' | 'block'
|
||||||
@ -11,7 +11,7 @@ export type RTDBRef = 'peers' | 'transaction' | 'block'
|
|||||||
*/
|
*/
|
||||||
@Singleton()
|
@Singleton()
|
||||||
export class FirebaseUnit extends Unit {
|
export class FirebaseUnit extends Unit {
|
||||||
protected _firebase = firebase;
|
protected _firebase = firebase
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
protected readonly logging!: Logging
|
protected readonly logging!: Logging
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import {FirebaseUnit} from "../FirebaseUnit"
|
import { FirebaseUnit } from "../FirebaseUnit"
|
||||||
import {TransactionResource, TransactionResourceItem} from "../../rtdb/TransactionResource"
|
import { TransactionResource, TransactionResourceItem } from "../../rtdb/TransactionResource"
|
||||||
import {Singleton, Inject} from "@extollo/di"
|
import { Singleton, Inject } from "@extollo/di"
|
||||||
import {Unit, Logging} from "@extollo/lib"
|
import { Unit, Logging } from "@extollo/lib"
|
||||||
import * as openpgp from "openpgp"
|
import * as openpgp from "openpgp"
|
||||||
import {Blockchain} from "../Blockchain"
|
import { Blockchain } from "../Blockchain"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transaction Unit
|
* Transaction Unit
|
||||||
@ -18,7 +18,7 @@ export class Transaction extends Unit {
|
|||||||
@Inject()
|
@Inject()
|
||||||
protected readonly blockchain!: Blockchain
|
protected readonly blockchain!: Blockchain
|
||||||
|
|
||||||
public async compareTransactions(transaction1: TransactionResourceItem, transaction2: TransactionResourceItem){
|
public async compareTransactions(transaction1: TransactionResourceItem, transaction2: TransactionResourceItem) {
|
||||||
// verify signature
|
// verify signature
|
||||||
const result1 = await openpgp.verify({
|
const result1 = await openpgp.verify({
|
||||||
publicKeys: await openpgp.readKey({
|
publicKeys: await openpgp.readKey({
|
||||||
@ -38,9 +38,9 @@ export class Transaction extends Unit {
|
|||||||
armoredSignature: transaction2.validationSignature // parse detached signature
|
armoredSignature: transaction2.validationSignature // parse detached signature
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
return await (result1.signatures[0].verified) && await (result2.signatures[0].verified);
|
return await (result1.signatures[0].verified) && await (result2.signatures[0].verified)
|
||||||
}
|
}
|
||||||
|
|
||||||
public async up() {
|
public async up() {
|
||||||
this.firebase.ref("transaction").on("value", async () => {
|
this.firebase.ref("transaction").on("value", async () => {
|
||||||
// array of pairs of tranaction resource items
|
// array of pairs of tranaction resource items
|
||||||
@ -51,25 +51,25 @@ export class Transaction extends Unit {
|
|||||||
transactions.each(transaction1 => {
|
transactions.each(transaction1 => {
|
||||||
// for each item that is not itself
|
// for each item that is not itself
|
||||||
transactions.where("combinedHash", "!=", transaction1.combinedHash)
|
transactions.where("combinedHash", "!=", transaction1.combinedHash)
|
||||||
// get a second item
|
// get a second item
|
||||||
.each(transaction2 => {
|
.each(transaction2 => {
|
||||||
//if the item matches
|
//if the item matches
|
||||||
if (this.compareTransactions(transaction1, transaction2)) {
|
if (this.compareTransactions(transaction1, transaction2)) {
|
||||||
// and remove the two matching items
|
// and remove the two matching items
|
||||||
transactions = transactions.whereNotIn("combinedHash", [transaction1.combinedHash, transaction2.combinedHash])
|
transactions = transactions.whereNotIn("combinedHash", [transaction1.combinedHash, transaction2.combinedHash])
|
||||||
// insert grouped items into groupedTransactions
|
// insert grouped items into groupedTransactions
|
||||||
groupedTransactions.push([transaction1, transaction2]);
|
groupedTransactions.push([transaction1, transaction2])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
for (const group of groupedTransactions) {
|
for (const group of groupedTransactions) {
|
||||||
await this.blockchain.submitTransactions(group);
|
await this.blockchain.submitTransactions(group)
|
||||||
await this.firebase.ref("transaction").child(group[0].firebaseID).remove();
|
await this.firebase.ref("transaction").child(group[0].firebaseID).remove()
|
||||||
await this.firebase.ref("transaction").child(group[1].firebaseID).remove();
|
await this.firebase.ref("transaction").child(group[1].firebaseID).remove()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public async down() {
|
public async down() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user