Skip to content

Commit

Permalink
Release, now for real (#439)
Browse files Browse the repository at this point in the history
* Fabo/fix gas (#250)

* fix gas estimate

* linted

* fixed test

* do not keep data sources (#251)

* track failing transactions in Sentry (#249)

* correctly set the tx schema for a failing tx (#248)

* Fabo/remove per block caching as not working (#247)

* remove per block caching as not working

* fix memoized results

Co-authored-by: Ana G. <[email protected]>

* delete perblockcachedatasource (#253)

* Ana/fix balances in actionmodal (#255)

* fix action modal available balance

* include regen

* use dictionary for denomlookup

* use correct events for received txs (#257)

* enable account creation for some networks (#252)

* network update time metric added (#256)

* network update time metric added

* added missing dep

Co-authored-by: Fabian <[email protected]>

* Fix proposal deposit (#261)

* Remove denom handling from getDeposit()

* Revert undesired change

* delete package-lock.json

* localtestnet config change (#265)

* Ana/handle "address not from this network" error (#263)

* add check address function for all queries

* apply suggestions

* Ana/add fiatvalue to balances query (e-Money) (#262)

* preparation

* more preparation

* add fiatvalue field to balances query

* fix get account info

* apply suggestions

* apply one last suggestion

* suggestions+

Co-authored-by: Fabian <[email protected]>

* Ana/emoney fix expected returns with inflation and totalbacked (#243)

* fix expected returns with inflation and supply

* minor fixes. dictionary

* query exchange rates from emoney api

* fix infinite expected returns

* convert api url to const

* add eur value to totalbackedvalue. totalngm gains

* add important comment

* finish calculation

* lint

* catch errors with sentry

Co-authored-by: Fabian <[email protected]>

* readd coin conversion (#268)

* delete amount field (#274)

* Fabo/increase gas again (#271)

* icrease gas again

* fixed test

* Fabo/load all txs (even if more then first page in response) (#270)

* load all txs (even if more then first page in response)

* improved handling of txs

* missing renaming

* fixed paginated load

* add pagination fix also to cosmosV0-source

Co-authored-by: iambeone <[email protected]>
Co-authored-by: Ana G. <[email protected]>

* fixing issue with multiple senders in one event (#273)

* fixing issue with multiple senders in one event

* Update lib/source/cosmosV2-source.js

Co-authored-by: Fabian <[email protected]>

* Fabo/allow signing for terra + emoney (#267)

* allow signing for terra

* readd coin conversion

* enable actions for terra

* fix correct terra testnet url

* comments and guards

* enabled more txs for emoney and fixed broadcasting

* added a catch for wrongly formatted broadcast urls

* recover default field. change some network titles (#277)

* Fabo/add network data to API (#278)

* non desctructive introduction of better address prefix wording

* added address creator to API

* adjusted test

* added ledger app to networks config

* add icon property to schema (#281)

* add icon property to schema

* fix network schema validation

Co-authored-by: Ana G. <[email protected]>

* filter out validator specific txs (#279)

* Ana/balances coinreducer good fix (#269)

* balances coinreducer good fix

* refactored fiat value logic

Co-authored-by: Fabian <[email protected]>

* Create network_integration.md

* Update network_integration.md

* Update network_integration.md

* Fabo/avoid 500 errors (#288)

* avoid using the latest query

* cleanup

* Ana/filter validator tx cross network and add txvalue reducer (#285)

* filter validators cross network

* add value reducer. necessary for multi claim txs

* add validator txs filter also for cosmosv0 source

* filter and make array only claim rewards msg value

* filter txs by whitelist

* change length in multi claim reward reducer

* add withdrawvalidators

* replace dictionary for set

* refactor transaction snippet. avoid repetition

* Ana/emoney upgrade (mergeable) (#282)

* update emoney api_url

* fix denom. add default fiat currency

* fix rpc endpoint

* fix value (my bad) (#293)

* fix value (my bad)

* trigger another ci flow

* erase space

* set correct new chain id (#294)

* restart API

* restart API

* fix pr alert (#297)

* Fabo/298 tendermint reconnect (#300)

* reconnect on tendermint disconnect

* cleanup

* comments

* Update cosmos-node-subscription.js

* Fabo/299 trigger a chain hangup error (#301)

* trigger a chain hangup error

* increase chain hangup time

* Apply suggestions from code review

* Fabo/store validator addresses (#296)

* add validator addresses to db

* linted

* ignore in local dev

* revert

* fixed fetch

* comment

* refactored db into constructor

* cleanup

* add clearTimeout to avoid reconnection hell (#306)

* add clearTimeout to avoid reconnection hell

* removed console.log

* Aleksei/luniedb replaced (#303)

* add validator addresses to db

* linted

* ignore in local dev

* revert

* fixed fetch

* comment

* refactored db into constructor

* cleanup

* replaced luniedb

* linted

Co-authored-by: Fabian <[email protected]>

* disable reconnection logic

* clear polling interval for tendermint connection

* simple api fixes (#310)

* Fabo/remove tendermint (#311)

* remove tendermint

*  fixed empty blockHeight issue

* small refactoring

* catch on fetches to get logging

* delay block updates

* add retry logic

* refactored getBlockByHeight

* remove pm2 dep

* validator profiles were returned as array (#312)

* remove pr github action (#316)

* fixing caching issue and more (#315)

* fixing caching issue and more

* clear chain hangup timeout

* timeout fixed

* Update lib/block-listeners/cosmos-node-subscription.js

Co-authored-by: Jordan Bibla <[email protected]>

* added terra_mainnet to networks (#309)

* added terra_mainnet to networks

* errors fix reverted

* Ana/add multidenom rewards. necessary for emoney (#308)

* add multidenom rewards. necessary for emoney

* add rewards to overview. improve code location

* lint

* add filter rewards for multidenom

* important fix

* another important fix

* fix cannot read propery constructor of undefined (#318)

* change terra mainnet title

* pushing something to trigger new build and to restart the node

* trying out nylira's node

* WIP: Ana/More Terra fixes (#323)

* fixing my mess

* move all rewards logic to terra

* clearly signal single denom rewards

* Revert "WIP: Ana/More Terra fixes (#323)" (#325)

This reverts commit 408186a.

* catch inside block polling function (#327)

* Fabo/disable writing validator addresses for now (#329)

* disable writing validator addresses for now

* linted

* flushing http cache (#332)

* Transaction abstraction schema (#333)

* tx abstraction proposal using union

* Use Coin type

* Cleanup, TransactionV2

* Cleanup, not multisend tx

* Unsupported tx (like multisend) don't have details

* Fabo/switch to docker swarm mode (#330)

* swtich to docker swarm mode

* typo

* Update .github/workflows/development.yml

* Ana/more terra fixes (***THE COMEBACK***) (#324)

* fixing my mess

* move all rewards logic to terra

* clearly signal single denom rewards

* error structure has changed. need to look into it

* also return denom for single denom rewards

* manage errors properly

* delete comments

* Update lib/reducers/terraV3-reducers.js

* loop through transaction messages

* doing crazy stuff

* rewrite the crazy bit

Co-authored-by: Fabian <[email protected]>

* cosmosv0 was missing the retry logic (#334)

* add back validator to db logic (#335)

* path_prefix added to network data (#338)

* path_prefix added to network data

* path_prefix replaced to slug

* tests fixed

* remove regen (#337)

Co-authored-by: Jordan Bibla <[email protected]>

* Fabo+Mario/transaction abstraction (#336)

* draft for transaction abstraction

* use lunie message types

* Add supported tx types

* WIP

* Draft new reducers

* Fix msg types

* Need to resolve type for TransactionDetails union

* debug resolver

* lint

* Fix

* Cleanup

* fix some union issues

* Almost done

* Small fixes

* Add userTransactionAddedV2

* Add userTransactionAddedV2 to resolvers

Co-authored-by: Mario Pino <[email protected]>

* emoney fixes for fiatvalue (#345)

* emoney fixes for fiatvalue

* refactor with coinreducer

* speaking functions are your friends

* refactor ugly nested code

* lint

* add denoms lookups for terra and emoney (#346)

* Ana/add only tokens gas prices 2nd attempt (#344)

* add terra and emoney gas price. terra reducer

* delete fiatvalue from get balances in cosmos

* add emoney reducer

* hyper important emoney fixes

* fix for emoney denoms

* change gas price to micro units

* add emoney denoms to denomlookup

* transform to microunit also for terra tokens

* return null for emoney gas prices

* add harcoded gas prices

* correct emoney hardcoded values

* hardcoded terra gas prices. not working

* update hardcoded values to working ones

* delete unrelated changes to gas prices

* apply suggestions except coinreducer

* they call me mr coinreducer

* change amount for price. add gas price reducer

* change naming in gas price reducer

* add error message

Co-authored-by: Fabian <[email protected]>

* fix rewards denoms (#351)

* updating image on deploy (#352)

* fix my mess once more (#353)

* Ana/add gas prices to other networks (#350)

* add gasprices to cosmos

* format gas prices to three decimals

* Apply suggestions from code review

* Update lib/reducers/cosmosV0-reducers.js

Co-authored-by: Fabian <[email protected]>
Co-authored-by: Jordan Bibla <[email protected]>

* added a tx success push, fallback (#354)

* fix cosmos gas price (#355)

* fix terra for new tmbalance (#358)

* Fabo/new emoney rewards (#357)

* intent to fix the emoney rewards

* intent to fix emoney rewards

* simplified code

* comments

* hack to fix reduce function

* eligable -> eligible

* correct reducer fix

Co-authored-by: Ana G. <[email protected]>
Co-authored-by: Jordan Bibla <[email protected]>

* Aleksei/prevent constant db calls (#304)

* add validator addresses to db

* linted

* ignore in local dev

* revert

* fixed fetch

* comment

* refactored db into constructor

* cleanup

* prevent constant db interaction

* stored object structure changed

* remove nesting in validators

* filter validators list

Co-authored-by: Fabian <[email protected]>

* limit txs pages load by two pages per request (#314)

* limit txs pages load by two pages per request

* delete block from loadpaginatedtxs

* small fixes

* Update lib/source/cosmosV2-source.js

* linted

Co-authored-by: Ana G. <[email protected]>
Co-authored-by: Fabian <[email protected]>

* linted

* linted

* Fabo/Use figment nodes (#362)

* use api keys

* add env variables for nodes

* hard code api keys (#365)

* fix ngm fiatvalue (#361)

* hardcoded urls fix (#366)

* WIP: Improve TransactionV2 implementation (#349)

* Add from field to SendTx type

* add amount to claim rewards transactions

* convert to units in string coin reducer

* fix typo

* add multidenom string coinreducer for claim amount

* Add UnknownTx to schema

* Add BlockV2 type which returns TransactionV2 txs

* Add blockV2 query that returns TransactionV2 txs

* kill handling claim rewards amount

* Update lib/reducers/cosmosV0-reducers.js

Co-Authored-By: Fabian <[email protected]>

* Update lib/reducers/cosmosV0-reducers.js

Co-Authored-By: Fabian <[email protected]>

* Cleanup

* lint

* Support claim rewards from multiple validators

* Fix, cleanup

Co-authored-by: Ana G. <[email protected]>
Co-authored-by: Fabian <[email protected]>

* Aleksei/fix db insert (#367)

* fixed insert function to allow empty schema

* Aleksei/statistics in the api (#364)

* collecting statistics in the API

* small fixes

* fixes

* changing address to key in clearOverviewedAddresses

Co-authored-by: Aleksey Rudometov <[email protected]>

* add pageNumber to schema (#370)

* add pageNumber to schema

* file wasn't saved

* trigger ci

* added pagination to tx v2 api (#372)

* Together with 3584: Ana/change fiatvalue to object (#360)

* change fiatvalue to object

* handle when selected currency is eur

* include ngm fiatvalue fix

* Ana/amount in claim rewards in transactions v2 (#373)

* bring amount in claim rewards back to life

* change to regex

* simplify

* make the regex understandable

* Ana/add powered to networks (#377)

* add powered by

* more logical powered

* add provider address for avatar

* fix powere validation

* Fabo/add network-type for selecting addrss and signing (#378)

* add network-type for selecting addrss and signing

* adjust according to new network_type param

* add network type to network schema

Co-authored-by: Ana G. <[email protected]>

* fix staking denom (#379)

* fix terra balances and overview (#380)

* Fabo/allow to query experimental networks (#382)

* all to query experimental networks

* fix old small typo

Co-authored-by: Ana G. <[email protected]>

* First steps to integrate Polkadot (#376)

* Add polkadot-testnet in networks.js

* Install polkadot-api, polkadot-node-sub. draft

* lint

* lint

* lint

* add polkadotV0 source

* add address creator

* Update data/networks.js

Co-Authored-By: Jordan Bibla <[email protected]>

* Update data/networks.js

Co-Authored-By: Jordan Bibla <[email protected]>

* blocks, events

* Cleanup

* polling instead subscription

* husky

* updateDBValidatorProfiles

* no wait for block data fetching, kind of stable

* Add reducers file

* block subscription works!

* Cleanup, fix memory leak

* lint, node

* comment

* Handle polkadot chain reorgs

* Cleanup

* Optimization, cleanup

* Optimization

* fixes, validators query working, cleanup

* comment

* lint

* fix block time

* handle polkadot chain hangups

* cleanup

* validator reducer

* lint

* wip

* calculate and include a bunch of validator fields

* add bech32_prefix address_prefix to networks.js

* add 1 space so we dont break tests

* remove chain reorg handling, more stable

Co-authored-by: Ana G. <[email protected]>
Co-authored-by: Fabian <[email protected]>
Co-authored-by: Jordan Bibla <[email protected]>

* transactions loading time reduced (#383)

* transactions loading time reduced

* increased page number

* add loki to docker-compose (#385)

* add network type (#386)

* removed livepeer from running in API (#390)

* set polkadot to disabled (#392)

* Ana/add totalstake-fiatvalue to Overview (#384)

* add totalstake fiat value to overview

* fix amount in totalstake fiatvalue

* make new code more readable

* Update lib/reducers/cosmosV0-reducers.js

* refactor unit conversion

Co-authored-by: Mario Pino <[email protected]>

* disable polkadot (#395)

Co-authored-by: Fabian <[email protected]>

* Fabo/terra returns (#389)

* better error logging

* add result selector to query

* split emoney getAllValidators from Terra

* add expected returns querying to terra

* filter out empty returns

* remove not used code

* missing return

* limit decimals

* fix not found in terra testnet

* temporary hacks

* Revert "temporary hacks"

This reverts commit 88d0918af70489422d6d5d84909df1186a23fa1c.

* Revert "fix not found in terra testnet"

This reverts commit 19a4eca6eb4a9eb2050b368b270d4a39847e016a.

* add terra testnet api

* switch to show all decimals

Co-authored-by: Ana G. <[email protected]>

* fix all fiat values to 2 decimals (#399)

* Ana/correct terra denoms (#398)

* correct terra denoms

* variable renaming

Co-authored-by: Fabian <[email protected]>

* Ana/add fiatvalue in rewards (#396)

* add fiatvalue to rewards

* add fiatcurrency to rewards query

* handle unsupported fiat currencies

* apply suggestions

* delete never used delegations parameter (#404)

* fix terra getrewards and gas prices (#409)

* reactivate kusama (#411)

* Ana/fix repeated claim rewards transactions in transaction abstraction (#400)

* fix terra repeated claim rewards transactions

* much better fix

* add claim rewards messages aggregator

* try to apply suggestion

* also not working

* working 🎉

* change name and add comment

* improved implementation by aggregating the claim messags correctly

Co-authored-by: Fabian Weber <[email protected]>

* disable polkadot once more for release (#412)

* readd memory limit (#413)

* Use polling instead subscription in Kusama (#406)

* uncomment polkadot

* bug fixes

* pollForNewBlock

* mod getBlockHeight

* add again commented api disconnect to not forget

* enqueueAndPublishBlockAdded

* re-subscribe on error

* stringify error

* stringify errors

* api.isReady

* Add delay to newBlockHandler

* Ana/add balances to kusama (#405)

* rudimentary balance

* add some comment

* Ana/switch polkadot to rest calls (#408)

* add rewards and overview functions. not working

* poll instead of subscribe to blocks

* switch over to http provider

* fix lint errors

* use httpprovider

* getting last block hash

* get blockhash and header. but no height

* back to normal. use mario node subscription

* successfully get block height polling with http

* get block hash from http. use polling

* uncomment all other networks

* pass the store to source classes

* create the api only once

* comment api.disconnect()

* added polling fix and quick querying

* fixed block height query

* clean up

* comment

* cleanup and optimization

Co-authored-by: Fabian Weber <[email protected]>
Co-authored-by: mariopino <[email protected]>

* remove unused dependency

Co-authored-by: Bitcoinera <[email protected]>
Co-authored-by: Ana G <[email protected]>
Co-authored-by: Fabian Weber <[email protected]>

* deactivate polkadot

* trigger deploy

* trigger CI

* swtich to newer caddy version

* activate polkadot again

* deactivate again

* Proposal to enable Kusama network (#424)

* working state

* cleanup

* getBlockHeight()

* update polkadot-api (#423)

* fixing node_exporter call in Caddyfile (#418)

* fixing send amount in statistics (#419)

* fixing send amount in statistics

* denom fixed

* fix validator as selected fiat bug (#415)

* Ana/correct terra denoms in activity (#425)

* correct fix terra denoms in activity

* delete correct terra denom as not needed

* Ana/fix amount null in claim rewards (#416)

* fix amount null in claim rewards

* small refactor

* apply suggestion

* add release script to api (#426)

* Add self stake to validators query (#433)

* add self stake

* Update lib/reducers/polkadotV0-reducers.js

Co-Authored-By: Ana G. <[email protected]>

* lint

Co-authored-by: Ana G. <[email protected]>
Co-authored-by: Bitcoinera <[email protected]>

* fix emoney balances denoms (#436)

Co-authored-by: Fabian <[email protected]>
Co-authored-by: iambeone <[email protected]>
Co-authored-by: Mario Pino <[email protected]>
Co-authored-by: Jordan Bibla <[email protected]>
  • Loading branch information
5 people authored Mar 11, 2020
1 parent 14eafa0 commit f33da44
Show file tree
Hide file tree
Showing 17 changed files with 861 additions and 306 deletions.
20 changes: 10 additions & 10 deletions Caddyfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
staging-api.lunie.io {
proxy / lunieapi:4000 {
transparent
header_downstream Access-Control-Allow-Origin "*"
websocket
}
}
:9100 {
basicauth / admin lunie1234
proxy / node_exporter:9100
staging-api.lunie.io {
proxy / lunieapi:4000 {
transparent
header_downstream Access-Control-Allow-Origin "*"
websocket
}
}
:9100 {
basicauth / admin lunie1234
proxy / lunieapi_node-exporter:9100
}
22 changes: 11 additions & 11 deletions Caddyfile.prod
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
production-api.lunie.io {
proxy / lunieapi:4000 {
transparent
header_downstream Access-Control-Allow-Origin "*"
websocket
}
}
:9100 {
basicauth / admin lunie1234
proxy / node_exporter:9100
}
production-api.lunie.io {
proxy / lunieapi:4000 {
transparent
header_downstream Access-Control-Allow-Origin "*"
websocket
}
}
:9100 {
basicauth / admin lunie1234
proxy / lunieapi_node-exporter:9100
}
71 changes: 36 additions & 35 deletions data/networks.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,43 +186,44 @@ module.exports = [
enabled: true,
icon: 'https://app.lunie.io/img/networks/emoney-testnet.png',
slug: 'emoney-testnet'
},
{
id: 'polkadot-testnet',
title: 'Kusama',
chain_id: 'kusama-cc3',
api_url: 'https://host-01.polkascan.io/kusama/api/v1/',
rpc_url:
'wss://kusama-rpc.polkastats.io/apikey/HunRG7eUwMTjaBAkz1A6GU1MqBJapaYsYfmU5EVzpAebMr8/',
bech32_prefix: ' ',
address_prefix: ' ',
ledger_app: 'polkadot',
address_creator: 'polkadot',
network_type: 'polkadot',
source_class_name: 'source/polkadotV0-source',
block_listener_class_name: 'block-listeners/polkadot-node-subscription',
testnet: true,
feature_session: true,
feature_explore: true,
feature_portfolio: true,
feature_validators: true,
feature_proposals: false,
feature_activity: false,
feature_explorer: false,
action_send: true,
action_claim_rewards: false,
action_delegate: true,
action_redelegate: true,
action_undelegate: true,
action_deposit: false,
action_vote: false,
action_proposal: false,
default: false,
stakingDenom: 'KSM',
enabled: true,
icon: 'https://app.lunie.io/img/networks/polkadot-testnet.png',
slug: 'kusama'
}
// {
// id: 'polkadot-testnet',
// title: 'Kusama',
// chain_id: 'kusama-cc3',
// api_url: 'https://host-01.polkascan.io/kusama/api/v1/',
// rpc_url: 'wss://kusama-rpc.polkadot.io/',
// bech32_prefix: ' ',
// address_prefix: ' ',
// ledger_app: 'polkadot',
// address_creator: 'polkadot',
// network_type: 'polkadot',
// source_class_name: 'source/polkadotV0-source',
// block_listener_class_name: 'block-listeners/polkadot-node-subscription',
// testnet: true,
// feature_session: true,
// feature_explore: true,
// feature_portfolio: true,
// feature_validators: true,
// feature_proposals: false,
// feature_activity: false,
// feature_explorer: false,
// action_send: true,
// action_claim_rewards: false,
// action_delegate: true,
// action_redelegate: true,
// action_undelegate: true,
// action_deposit: false,
// action_vote: false,
// action_proposal: false,
// default: false,
// stakingDenom: 'KSM',
// enabled: true,
// icon: 'https://app.lunie.io/img/networks/polkadot-testnet.png',
// slug: 'kusama'
// }
// {
// id: 'livepeer-mainnet',
// title: 'Livepeer',
// chain_id: 'ethereum-1',
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ services:
deploy:
mode: global
caddy:
image: abiosoft/caddy:0.11.0
image: abiosoft/caddy:1.0.3-no-stats
depends_on:
- "lunieapi"
restart: on-failure
Expand Down
67 changes: 58 additions & 9 deletions lib/block-listeners/polkadot-node-subscription.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const _ = require('lodash')
const { ApiPromise, WsProvider } = require('@polkadot/api')
const {
publishBlockAdded
// publishUserTransactionAdded,
Expand All @@ -8,12 +9,15 @@ const Sentry = require('@sentry/node')
const database = require('../database')
const config = require('../../config.js')

const POLLING_INTERVAL = 1000
// const NEW_BLOCK_DELAY = 2000

// This class polls for new blocks
// Used for listening to events, such as new blocks.
class PolkadotNodeSubscription {
constructor(network, PolkadotApiClass, store) {
this.network = network
this.polkadotAPI = new PolkadotApiClass(network)
this.polkadotAPI = new PolkadotApiClass(network, store)
this.store = store
this.validators = []
this.sessionValidators = []
Expand All @@ -25,11 +29,24 @@ class PolkadotNodeSubscription {
this.subscribeForNewBlock()
}

// here we init the polkadot rpc once for all processes
// the class gets stored in the store to be used by all instances
async initPolkadotRPC() {
this.api = new ApiPromise({
provider: new WsProvider(this.network.rpc_url)
})
this.store.polkadotRPC = this.api
await this.api.isReady
}

async subscribeForNewBlock() {
const api = await this.polkadotAPI.getAPIPromise()
// here we init the polkadot rpc once for all processes
if (!this.api) {
await this.initPolkadotRPC()
}

// Subscribe to new block headers
await api.rpc.chain.subscribeNewHeads(async blockHeader => {
await this.api.rpc.chain.subscribeNewHeads(async blockHeader => {
const blockHeight = blockHeader.number.toNumber()
if (this.height < blockHeight) {
this.height = blockHeight
Expand All @@ -44,16 +61,49 @@ class PolkadotNodeSubscription {
enqueueAndPublishBlockAdded(newBlock) {
this.blockQueue.push(newBlock)
if (this.blockQueue.length > 2) {
this.blockQueue.sort((a, b) =>
a.height > b.height ? 1 : b.height > a.height ? -1 : 0
)
this.blockQueue = this.blockQueue.sort((a, b) => a.height - b.height)
console.log(
`\x1b[36mPublishing new kusama block #${newBlock.height}\x1b[0m`
`\x1b[36mPublishing new kusama block #${this.blockQueue[0].height}\x1b[0m`
)
publishBlockAdded(this.network.id, this.blockQueue.shift())
}
}

// poll latest block height and handle all blocks unknown to this API yet in order
async checkForNewBlock() {
try {
const blockHeight = await this.polkadotAPI.getBlockHeight()

// if we get a newer block then expected query for all the outstanding blocks
while (blockHeight > this.height) {
this.height = this.height ? this.height++ : blockHeight
console.log(`New kusama block #${this.height}`)
this.newBlockHandler(this.height)

// we are safe, that the chain produced a block so it didn't hang up
if (this.chainHangup) clearTimeout(this.chainHangup)
}
} catch (error) {
console.error('Failed to check for a new block', error)
Sentry.captureException(error)
}
}

async pollForNewBlock() {
// here we init the polkadot rpc once for all processes
if (!this.api) {
await this.initPolkadotRPC()
}

// immediatly check and not wait the polling delay
await this.checkForNewBlock()

this.pollingTimeout = setTimeout(async () => {
await this.checkForNewBlock()
this.pollForNewBlock()
}, POLLING_INTERVAL)
}

// For each block event, we fetch the block information and publish a message.
// A GraphQL resolver is listening for these messages and sends the block to
// each subscribed user.
Expand All @@ -64,7 +114,6 @@ class PolkadotNodeSubscription {
})

const block = await this.polkadotAPI.getBlockByHeight(blockHeight)
// publishBlockAdded(this.network.id, block)
this.enqueueAndPublishBlockAdded(block)

// We dont need to fetch validators on every new block.
Expand Down Expand Up @@ -106,7 +155,7 @@ class PolkadotNodeSubscription {
// publishEvent(this.network.id, 'transaction', address, tx)
// })
} catch (error) {
console.error(`newBlockHandler failed: ${error}`)
console.error(`newBlockHandler failed`, JSON.stringify(error, null, 2))
Sentry.captureException(error)
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/network-container.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class NetworkContainer {
createDataSource() {
if (this.sourceClass) {
return {
api: new this.sourceClass(this.network),
api: new this.sourceClass(this.network, this.store),
store: this.store
}
}
Expand Down
20 changes: 14 additions & 6 deletions lib/reducers/cosmosV0-reducers.js
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,10 @@ function denomLookup(denom) {
uatom: 'ATOM',
umuon: 'MUON',
uluna: 'LUNA',
ukrw: 'KRW',
ukrw: 'KRT',
umnt: 'MNT',
usdr: 'SDR',
uusd: 'USD',
usdr: 'SDT',
uusd: 'UST',
seed: 'TREE',
ungm: 'NGM',
eeur: 'eEUR',
Expand Down Expand Up @@ -318,9 +318,17 @@ function rewardCoinReducer(reward, stakingDenom) {
const stringBit = reward.match(/[a-z]+/gi)
const multiDenomRewardsArray = reward.split(`,`)
if (multiDenomRewardsArray.length > 1) {
return multiDenomRewardsArray
.map(reward => rewardCoinReducer(reward))
.filter(({ denom }) => denom === denomLookup(stakingDenom))[0]
const mappedMultiDenomRewardsArray = multiDenomRewardsArray.map(reward =>
rewardCoinReducer(reward)
)
let stakingDenomRewards = mappedMultiDenomRewardsArray.find(
({ denom }) => denom === denomLookup(stakingDenom)
)
// if there is no staking denom reward we will display the first alt-token reward
return (
stakingDenomRewards ||
mappedMultiDenomRewardsArray.find(({ amount }) => amount > 0)
)
}
return {
denom: denomLookup(stringBit),
Expand Down
25 changes: 23 additions & 2 deletions lib/reducers/polkadotV0-reducers.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
const BigNumber = require('bignumber.js')

const POLKADOT_CONVERSION = 1000000000000

function blockReducer(
networkId,
blockHeight,
Expand Down Expand Up @@ -45,11 +49,28 @@ function validatorReducer(network, validator) {
maxChangeCommission: undefined,
status: `ACTIVE`, // We are fetching current session active validators only (not intentions)
statusDetailed: ``, // TODO: Include validator heartbeat messages
delegatorShares: undefined
delegatorShares: undefined,
selfStake:
(
BigNumber(validator.exposure.own).toNumber() / POLKADOT_CONVERSION
).toFixed(9) || 0
}
}

function balanceReducer(balance) {
// hack. We convert the balance into an Array to make it an Iterable
return [
{
amount: BigNumber(balance)
.div(POLKADOT_CONVERSION)
.toFixed(4),
denom: `KSM` // hardcoded for now. Looking how to do a more complete query
}
]
}

module.exports = {
blockReducer,
validatorReducer
validatorReducer,
balanceReducer
}
14 changes: 2 additions & 12 deletions lib/reducers/terraV3-reducers.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ function undelegationEndTimeReducer(transaction) {

function balanceReducer(coin, fiatValue, gasPrices) {
return {
amount: coin.amount,
denom: correctTerraDenomsReducer(coin.denom),
...coin,
fiatValue: fiatValue
? {
amount: fiatValue.amount || 0,
Expand All @@ -53,7 +52,7 @@ function rewardReducer(rewards, validatorsDictionary) {
formattedRewards.forEach(({ reward, validator }) =>
reward.forEach(denomReward => {
multiDenomRewardsArray.push({
denom: correctTerraDenomsReducer(denomLookup(denomReward.denom)),
denom: denomLookup(denomReward.denom),
amount: atoms(denomReward.amount),
fiatValue: denomReward.fiatValue,
validator: validator
Expand All @@ -63,15 +62,6 @@ function rewardReducer(rewards, validatorsDictionary) {
return multiDenomRewardsArray
}

function correctTerraDenomsReducer(viewDenom) {
const corrector = {
KRW: 'KRT',
SDR: 'SDT',
USD: 'UST'
}
return corrector[viewDenom] ? corrector[viewDenom] : viewDenom
}

module.exports = {
...cosmosV2Reducers,
balanceReducer,
Expand Down
5 changes: 3 additions & 2 deletions lib/resolvers.js
Original file line number Diff line number Diff line change
Expand Up @@ -317,13 +317,14 @@ const resolvers = {
},
overview: async (
_,
{ networkId, address },
{ networkId, address, fiatCurrency },
{ dataSources, fingerprint }
) => {
const validatorsDictionary = localStore(dataSources, networkId).validators
const overview = await remoteFetch(dataSources, networkId).getOverview(
address,
validatorsDictionary
validatorsDictionary,
fiatCurrency
)
overview.networkId = networkId
overview.address = address
Expand Down
Loading

0 comments on commit f33da44

Please sign in to comment.