diff --git a/app/lib/dal/fileDAL.ts b/app/lib/dal/fileDAL.ts index 04c5b2cd63db738cdcc542783b0127c8b9e24944..f0a9103a5eb2c1d877a9929748b5cd10351c53ec 100644 --- a/app/lib/dal/fileDAL.ts +++ b/app/lib/dal/fileDAL.ts @@ -38,6 +38,7 @@ import {SIndexDAL} from "./sqliteDAL/index/SIndexDAL" import {IIndexDAL} from "./sqliteDAL/index/IIndexDAL" import {DataErrors} from "../common-libs/errors" import {BasicRevocableIdentity, IdentityDTO} from "../dto/IdentityDTO" +import {BlockDAL} from "./sqliteDAL/BlockDAL" const fs = require('fs') const path = require('path') @@ -66,7 +67,7 @@ export class FileDAL { confDAL:ConfDAL metaDAL:MetaDAL peerDAL:PeerDAL - blockDAL:any + blockDAL:BlockDAL txsDAL:TxsDAL statDAL:StatDAL idtyDAL:IdentityDAL @@ -274,7 +275,7 @@ export class FileDAL { } getBlocksBetween (start:number, end:number) { - return Promise.resolve(this.blockDAL.getBlocks(Math.max(0, start), end)) + return this.blockDAL.getBlocks(Math.max(0, start), end) } getForkBlocksFollowing(current:DBBlock) { diff --git a/app/lib/rules/global_rules.ts b/app/lib/rules/global_rules.ts index f4dcf07e8f618b7b16b6b7d5bdb7b3a33a9c6497..7f9e44a39202eedd33da0940ac7233bade978ed3 100644 --- a/app/lib/rules/global_rules.ts +++ b/app/lib/rules/global_rules.ts @@ -85,7 +85,7 @@ export const GLOBAL_RULES_FUNCTIONS = { // From DUP 0.5: we fully check the blockstamp const basedBlock = await dal.getBlockByBlockstamp(idty.buid); // Check if writable - let duration = current.medianTime - parseInt(basedBlock.medianTime); + let duration = current.medianTime - basedBlock.medianTime if (duration > conf.idtyWindow) { throw Error('Identity is too old and cannot be written'); } diff --git a/app/modules/bma/lib/controllers/blockchain.ts b/app/modules/bma/lib/controllers/blockchain.ts index d38b561442a1b8df386b19117c3873209a68acf8..bfed41e47d7b2f162c9714e36d641f4872ef9653 100644 --- a/app/modules/bma/lib/controllers/blockchain.ts +++ b/app/modules/bma/lib/controllers/blockchain.ts @@ -28,6 +28,7 @@ import { HttpParameters, HttpStat } from "../dtos" +import {TransactionDTO} from "../../../../lib/dto/TransactionDTO" const _ = require('underscore'); const http2raw = require('../http2raw'); @@ -118,9 +119,53 @@ export class BlockchainBinding extends AbstractController { const params = ParametersService.getCountAndFrom(req); const count = parseInt(params.count); const from = parseInt(params.from); - let blocks = await this.BlockchainService.blocksBetween(from, count); + let blocks: any[] = await this.BlockchainService.blocksBetween(from, count); blocks = blocks.map((b:any) => toJson.block(b)); - return blocks; + return blocks.map(b => ({ + version: b.version, + currency: b.currency, + number: b.number, + issuer: b.issuer, + issuersFrame: b.issuersFrame, + issuersFrameVar: b.issuersFrameVar, + issuersCount: b.issuersCount, + parameters: b.parameters, + membersCount: b.membersCount, + monetaryMass: b.monetaryMass, + powMin: b.powMin, + time: b.time, + medianTime: b.medianTime, + dividend: b.dividend, + unitbase: b.unitbase, + hash: b.hash, + previousHash: b.previousHash, + previousIssuer: b.previousIssuer, + identities: b.identities, + certifications: b.certifications, + joiners: b.joiners, + actives: b.actives, + leavers: b.leavers, + revoked: b.revoked, + excluded: b.excluded, + transactions: b.transactions.map((t:TransactionDTO) => ({ + version: t.version, + currency: t.currency, + comment: t.comment, + locktime: t.locktime, + signatures: t.signatures, + outputs: t.outputs, + inputs: t.inputs, + unlocks: t.unlocks, + blockstamp: t.blockstamp, + blockstampTime: t.blockstampTime, + issuers: t.issuers, + hash: t.hash, + })), + nonce: b.nonce, + inner_hash: b.inner_hash, + signature: b.signature, + raw: b.raw, + })) } async current(): Promise<HttpBlock> { diff --git a/app/modules/bma/lib/dtos.ts b/app/modules/bma/lib/dtos.ts index 91c4317770452da6e72029c6fe15ec5a27607742..a048dfcce52a3434b664571279dd9128209232af 100644 --- a/app/modules/bma/lib/dtos.ts +++ b/app/modules/bma/lib/dtos.ts @@ -184,17 +184,16 @@ export const TransactionOfBlock = { export interface HttpTransactionOfBlock { version: number currency: string - comment: string locktime: number - signatures: string[] - outputs: string[] - inputs: string[] - unlocks: string[] - block_number: number + hash: string blockstamp: string blockstampTime: number - time: number issuers: string[] + inputs: string[] + outputs: string[] + unlocks: string[] + signatures: string[] + comment: string } export const Block = { @@ -244,7 +243,7 @@ export interface HttpBlock { powMin: number time: number medianTime: number - dividend: number + dividend: number|null unitbase: number hash: string previousHash: string @@ -301,10 +300,9 @@ export function block2HttpBlock(blockDTO:BlockDTO): HttpBlock { outputs: tx.outputs, inputs: tx.inputs, unlocks: tx.unlocks, - block_number: tx.blockNumber, + hash: tx.hash, blockstamp: tx.blockstamp, blockstampTime: tx.blockstampTime, - time: tx.blockstampTime } }), nonce: blockDTO.nonce, diff --git a/app/modules/crawler/lib/sync.ts b/app/modules/crawler/lib/sync.ts index 2a2d6aeba0e428712165a967e3d0f1699a0188d0..71751c13f2eb1f098d70dc262f3c6780ce345521 100644 --- a/app/modules/crawler/lib/sync.ts +++ b/app/modules/crawler/lib/sync.ts @@ -309,7 +309,7 @@ export class Synchroniser extends stream.Duplex { // Save currency parameters given by root block const rootBlock = await this.server.dal.getBlock(0); - await this.BlockchainService.saveParametersForRootBlock(rootBlock); + await this.BlockchainService.saveParametersForRootBlock(BlockDTO.fromJSONObject(rootBlock)) this.server.dal.blockDAL.cleanCache(); //======= diff --git a/app/modules/prover/lib/blockGenerator.ts b/app/modules/prover/lib/blockGenerator.ts index 3c6d67921060590fc4906325cb86d369955a2f4f..87af52071be917e027babd0ace8e48d6318d6990 100644 --- a/app/modules/prover/lib/blockGenerator.ts +++ b/app/modules/prover/lib/blockGenerator.ts @@ -726,7 +726,7 @@ class NextBlockGenerator implements BlockGeneratorInterface { // Do not rely on certification block UID, prefer using the known hash of the block by its given number const targetBlock = await this.dal.getBlock(cert.block_number); // Check if writable - let duration = current && targetBlock ? current.medianTime - parseInt(targetBlock.medianTime) : 0; + let duration = current && targetBlock ? current.medianTime - targetBlock.medianTime : 0; if (targetBlock && duration <= this.conf.sigWindow) { cert.sig = ''; cert.currency = this.conf.currency; diff --git a/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts b/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts index 8b27036a435b0e11c5180b1de7075c297037842e..49c04d411546fdc8b4a878b9d3624c35c985e4c4 100644 --- a/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts +++ b/app/modules/ws2p/lib/impl/WS2PReqMapperByServer.ts @@ -16,6 +16,7 @@ import {Server} from "../../../../../server" import {WS2PReqMapper} from "../interface/WS2PReqMapper" import {BlockDTO} from "../../../../lib/dto/BlockDTO" import {IindexEntry} from '../../../../lib/indexer'; +import {DBBlock} from "../../../../lib/db/DBBlock" export class WS2PReqMapperByServer implements WS2PReqMapper { @@ -25,8 +26,8 @@ export class WS2PReqMapperByServer implements WS2PReqMapper { return this.server.BlockchainService.current() } - getBlock(number: number): Promise<BlockDTO[]> { - return this.server.dal.getBlock(number) + getBlock(number: number): Promise<BlockDTO> { + return Promise.resolve(BlockDTO.fromJSONObject(this.server.dal.getBlock(number))) } async getBlocks(count: number, from: number): Promise<BlockDTO[]> { @@ -38,7 +39,7 @@ export class WS2PReqMapperByServer implements WS2PReqMapper { if (!current || current.number < from) { return [] } - return this.server.dal.getBlocksBetween(from, from + count - 1) + return (await this.server.dal.getBlocksBetween(from, from + count - 1)).map((b:DBBlock) => BlockDTO.fromJSONObject(b)) } async getRequirementsOfPending(minsig: number): Promise<any> { diff --git a/app/modules/ws2p/lib/interface/WS2PReqMapper.ts b/app/modules/ws2p/lib/interface/WS2PReqMapper.ts index 651fb22cb59cd04d70c09f2b549df0f5728a55ec..f410e8145303accc678c95c87dfd6238d97a0539 100644 --- a/app/modules/ws2p/lib/interface/WS2PReqMapper.ts +++ b/app/modules/ws2p/lib/interface/WS2PReqMapper.ts @@ -16,7 +16,7 @@ import {BlockDTO} from "../../../../lib/dto/BlockDTO" export interface WS2PReqMapper { getCurrent(): Promise<BlockDTO> - getBlock(number:number): Promise<BlockDTO[]> + getBlock(number:number): Promise<BlockDTO> getBlocks(count:number, fromNumber:number): Promise<BlockDTO[]> getRequirementsOfPending(minCert:number): Promise<any> } \ No newline at end of file diff --git a/app/service/IdentityService.ts b/app/service/IdentityService.ts index 167e3291d838baf94d5ace097ecaa6b634cf7a01..342c8dc682674149f0800283874864fcaabf9c45 100644 --- a/app/service/IdentityService.ts +++ b/app/service/IdentityService.ts @@ -198,7 +198,7 @@ export class IdentityService extends FIFOService { } if (!anErr) { try { - let basedBlock = await this.dal.getBlock(cert.block_number); + let basedBlock: { number:number, hash:string, medianTime?:number } = await this.dal.getBlock(cert.block_number); if (cert.block_number == 0 && !basedBlock) { basedBlock = { number: 0, @@ -213,7 +213,7 @@ export class IdentityService extends FIFOService { block_hash: basedBlock.hash, target: targetHash, to: idty.pubkey, - expires_on: basedBlock.medianTime + this.conf.sigWindow, + expires_on: (basedBlock.medianTime || 0) + this.conf.sigWindow, linked: false, written: false, expired: false, diff --git a/app/service/MembershipService.ts b/app/service/MembershipService.ts index a02eaa76866b79045cbe37e650e17940c1e47274..b0a75f51f02855e5ccdfaef4be37a17b6fd1dcb5 100644 --- a/app/service/MembershipService.ts +++ b/app/service/MembershipService.ts @@ -89,7 +89,7 @@ export class MembershipService extends FIFOService { idtyHash: entry.getIdtyHash(), written: false, written_number: null, - expires_on: basedBlock ? basedBlock.medianTime + this.conf.msWindow : null, + expires_on: basedBlock ? basedBlock.medianTime + this.conf.msWindow : 0, signature: entry.signature, expired: false, block_number: entry.number