Skip to content

Commit

Permalink
feat: Ethereum Registry Writer (#951)
Browse files Browse the repository at this point in the history
  • Loading branch information
lautarodragan authored Nov 12, 2019
1 parent ba62910 commit 50028ec
Show file tree
Hide file tree
Showing 30 changed files with 2,929 additions and 172 deletions.
2,080 changes: 2,011 additions & 69 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"scripts": {
"start": "node dist/babel/src",
"start:blockchain-writer": "node dist/babel/src/BlockchainWriter/index.js",
"start:ethereum-registry-writer": "node dist/babel/src/EthereumRegistryWriter/index.js",
"build": "npm run build-clear && npm run build-ts && npm run build-babel",
"lint": "tslint -p ./tsconfig.with-tests.json",
"lint:fix": "tslint -p ./tsconfig.with-tests.json --fix",
Expand Down Expand Up @@ -71,7 +72,8 @@
"pino": "4.17.6",
"protobufjs": "6.8.8",
"ramda": "0.26.1",
"string-to-stream": "1.1.1"
"string-to-stream": "1.1.1",
"web3": "1.2.2"
},
"devDependencies": {
"@po.et/tslint-rules": "2.2.0",
Expand All @@ -82,7 +84,7 @@
"@types/koa": "2.0.47",
"@types/koa-helmet": "3.1.2",
"@types/koa-router": "7.0.35",
"@types/mongodb": "3.1.17",
"@types/mongodb": "3.3.8",
"@types/node-fetch": "1.6.9",
"@types/pino": "4.16.1",
"@types/ramda": "0.26.0",
Expand Down
3 changes: 1 addition & 2 deletions src/API/FileController.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import * as FormData from 'form-data'
import FormData from 'form-data'
import * as fs from 'fs'
import fetch, {Response} from 'node-fetch'
import * as Pino from 'pino'

import { childWithFileName } from 'Helpers/Logging'
import { minutesToMiliseconds } from 'Helpers/Time'
import { asyncPipe } from 'Helpers/asyncPipe'

Expand Down
10 changes: 5 additions & 5 deletions src/API/Router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ import {
import * as fs from 'fs'
import * as http from 'http'
import * as Joi from 'joi'
import * as Koa from 'koa'
import * as KoaBody from 'koa-body'
import * as KoaCors from 'koa-cors'
import * as helmet from 'koa-helmet'
import * as KoaRouter from 'koa-router'
import Koa from 'koa'
import KoaBody from 'koa-body'
import KoaCors from 'koa-cors'
import helmet from 'koa-helmet'
import KoaRouter from 'koa-router'
import * as Pino from 'pino'
import { map, values, prop, pipe } from 'ramda'

Expand Down
5 changes: 3 additions & 2 deletions src/BatchReader/ClaimController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ export class ClaimController {
this.ipfs = ipfs
}

addEntries = (entries: ReadonlyArray<{ ipfsDirectoryHash: string }>): Promise<InsertWriteOpResult> =>
this.directoryDAO.addEntries(entries)
addEntries = async (entries: ReadonlyArray<{ ipfsDirectoryHash: string }>): Promise<void> => {
await this.directoryDAO.addEntries(entries)
}

readNextDirectory = async (): Promise<{ ipfsDirectoryHash: string; ipfsFileHashes: ReadonlyArray<string> }> => {
const collectionItem = await this.directoryDAO.findNextEntry()
Expand Down
7 changes: 4 additions & 3 deletions src/BatchReader/DirectoryDAO.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export interface Entry {

type start = () => Promise<void>

type addEntries = (xs: ReadonlyArray<Entry>) => Promise<InsertWriteOpResult>
type addEntries = (xs: ReadonlyArray<Entry>) => Promise<void>

type findNextEntry = (
options?: {
Expand Down Expand Up @@ -53,8 +53,8 @@ export class DirectoryDAO {
await this.directoryCollection.createIndex({ ipfsDirectoryHash: 1 }, { unique: true })
}

readonly addEntries: addEntries = async (entries = []) =>
this.directoryCollection
readonly addEntries: addEntries = async (entries = []) => {
await this.directoryCollection
.insertMany(
entries.map((entry: Entry) => ({
ipfsDirectoryHash: entry.ipfsDirectoryHash,
Expand All @@ -66,6 +66,7 @@ export class DirectoryDAO {
{ ordered: false },
)
.ignoreError(error => error.code === ErrorCodes.DuplicateKey)
}

readonly findNextEntry: findNextEntry = ({
currentTime = new Date().getTime(),
Expand Down
11 changes: 4 additions & 7 deletions src/BatchWriter/BatchWriter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,21 @@ import * as Pino from 'pino'
import { pick } from 'ramda'

import { LoggingConfiguration } from 'Configuration'
import { IPFS, IPFSConfiguration } from 'Helpers/IPFS'
import { createModuleLogger } from 'Helpers/Logging'
import { Messaging } from 'Messaging/Messaging'

import { ClaimController } from './ClaimController'
import { ExchangeConfiguration } from './ExchangeConfiguration'
import { FileDAO } from './FileDAO'
import { IPFS, IPFSConfiguration } from './IPFS'
import { Router } from './Router'
import { Service, ServiceConfiguration } from './Service'

export interface BatchWriterConfiguration extends LoggingConfiguration, ServiceConfiguration, IPFSConfiguration {
export interface BatchWriterConfiguration extends LoggingConfiguration, ServiceConfiguration {
readonly dbUrl: string
readonly rabbitmqUrl: string
readonly exchanges: ExchangeConfiguration
readonly ipfs: IPFSConfiguration
}

export class BatchWriter {
Expand All @@ -42,11 +43,7 @@ export class BatchWriter {
this.messaging = new Messaging(this.configuration.rabbitmqUrl, exchangesMessaging)
await this.messaging.start()

const ipfs = new IPFS({
configuration: {
ipfsUrl: this.configuration.ipfsUrl,
},
})
const ipfs = IPFS(this.configuration.ipfs)

const fileCollection: Collection = this.dbConnection.collection('batchWriter')

Expand Down
2 changes: 1 addition & 1 deletion src/BatchWriter/ClaimController.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { NoMoreEntriesException } from 'Exceptions'
import { IPFS } from 'Helpers/IPFS'

import { FileDAO } from './FileDAO'
import { IPFS } from './IPFS'

export interface Dependencies {
readonly fileDAO: FileDAO
Expand Down
7 changes: 4 additions & 3 deletions src/BatchWriter/FileDAO.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export interface Entry {

type start = () => Promise<void>

type addEntry = (x: Entry) => Promise<InsertOneWriteOpResult>
type addEntry = (x: Entry) => Promise<void>

type findNextEntries = () => Promise<ReadonlyArray<Entry>>

Expand Down Expand Up @@ -40,8 +40,9 @@ export class FileDAO {
await this.fileCollection.createIndex({ ipfsFileHash: 1 }, { unique: true })
}

addEntry: addEntry = ({ ipfsFileHash }) =>
this.fileCollection.insertOne({ ipfsFileHash, successTime: null, ipfsDirectoryHash: null })
addEntry: addEntry = async ({ ipfsFileHash }) => {
await this.fileCollection.insertOne({ ipfsFileHash, successTime: null, ipfsDirectoryHash: null })
}

findNextEntries: findNextEntries = () =>
this.fileCollection.find({ successTime: null }, { fields: { _id: false, ipfsFileHash: true } }).toArray()
Expand Down
45 changes: 0 additions & 45 deletions src/BatchWriter/IPFS.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/BlockchainWriter/BlockchainWriter.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import BitcoinCore = require('bitcoin-core')
import { Collection, MongoClient } from 'mongodb'
import * as Pino from 'pino'
import Pino from 'pino'
import { pick } from 'ramda'

import { BitcoinRPCConfiguration, LoggingConfiguration } from 'Configuration'
Expand Down
2 changes: 1 addition & 1 deletion src/BlockchainWriter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'Extensions/Array'
import 'Extensions/Error'
import 'Extensions/Promise'

import * as Pino from 'pino'
import Pino from 'pino'

import { catchStartupError } from 'Helpers/moduleStartStopCatch'
import { loadConfigurationWithDefaults } from 'LoadConfiguration'
Expand Down
14 changes: 14 additions & 0 deletions src/Configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ export interface Configuration extends LoggingConfiguration, BitcoinRPCConfigura

readonly bitcoinFeeEstimateMode: 'CONSERVATIVE' | 'ECONOMICAL'
readonly bitcoinFeeRate: number

readonly ethereumRpcUrl: string
readonly ethereumChainId: number
readonly ethereumRegistryContractAddress: string
readonly ethereumRegistryPrivateKey: string
readonly ethereumRegistryUploadAnchorReceiptIntervalInSeconds: number
readonly ethereumRegistryRegisterNextDirectoryIntervalInSeconds: number
}

export interface LoggingConfiguration {
Expand Down Expand Up @@ -128,6 +135,13 @@ export const DefaultConfiguration: Configuration = {

forceBlockHeight: undefined,

ethereumRpcUrl: 'http://localhost:8545',
ethereumChainId: 4,
ethereumRegistryContractAddress: '',
ethereumRegistryPrivateKey: '',
ethereumRegistryUploadAnchorReceiptIntervalInSeconds: 60,
ethereumRegistryRegisterNextDirectoryIntervalInSeconds: 60,

exchangeAnchorNextHashRequest: 'ANCHOR_NEXT_HASH_REQUEST',
exchangeBatchReaderReadNextDirectoryRequest: 'BATCH_READER::READ_NEXT_DIRECTORY_REQUEST',
exchangeBatchReaderReadNextDirectorySuccess: 'BATCH_READER::READ_NEXT_DIRECTORY_SUCCESS',
Expand Down
Loading

0 comments on commit 50028ec

Please sign in to comment.