Skip to content

Commit

Permalink
release (#347)
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]>

Co-authored-by: Ana G. <[email protected]>
Co-authored-by: Aleksey Rudometov <[email protected]>
Co-authored-by: Mario Pino <[email protected]>
Co-authored-by: Jordan Bibla <[email protected]>
  • Loading branch information
5 people authored Feb 20, 2020
1 parent b6620db commit 66c02d5
Show file tree
Hide file tree
Showing 13 changed files with 373 additions and 122 deletions.
34 changes: 0 additions & 34 deletions data/networks.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,40 +67,6 @@
"icon": "https://app.lunie.io/img/networks/cosmos-hub-mainnet.png",
"slug": "cosmos-hub"
},
{
"id": "regen-testnet",
"title": "Regen Testnet",
"chain_id": "congo-1",
"rpc_url": "wss://regen-congo-1.lunie.io/websocket",
"api_url": "https://regen-congo-1.lunie.io",
"bech32_prefix": "xrn:",
"address_prefix": "xrn:",
"address_creator": "cosmos",
"ledger_app": "cosmos",
"source_class_name": "source/regenV0-source",
"block_listener_class_name": "block-listeners/cosmos-node-subscription",
"testnet": true,
"feature_session": true,
"feature_explore": true,
"feature_portfolio": true,
"feature_validators": true,
"feature_proposals": true,
"feature_activity": true,
"feature_explorer": true,
"action_send": true,
"action_claim_rewards": true,
"action_delegate": true,
"action_redelegate": true,
"action_undelegate": true,
"action_deposit": true,
"action_vote": true,
"action_proposal": true,
"default": false,
"stakingDenom": "TREE",
"enabled": true,
"icon": "https://app.lunie.io/img/networks/regen-testnet.png",
"slug": "regen-testnet"
},
{
"id": "terra-mainnet",
"title": "Terra",
Expand Down
18 changes: 17 additions & 1 deletion lib/message-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,20 @@ const cosmosWhitelistedMessageTypes = new Set([
`MsgMultiSend`
])

module.exports = { cosmosMessageType, cosmosWhitelistedMessageTypes }
const lunieMessageTypes = {
SEND: `SendTx`,
STAKE: `StakeTx`,
RESTAKE: `RestakeTx`,
UNSTAKE: `UnstakeTx`,
VOTE: `VoteTx`,
DEPOSIT: `DepositTx`,
WITHDRAW_DELEGATION_REWARDS: `ClaimRewardsTx`,
SUBMIT_PROPOSAL: `SubmitProposalTx`,
UNKNOWN: `UnknownTx`
}

module.exports = {
cosmosMessageType,
cosmosWhitelistedMessageTypes,
lunieMessageTypes
}
186 changes: 178 additions & 8 deletions lib/reducers/cosmosV0-reducers.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
const { uniqWith, sortBy, reverse } = require('lodash')
const { cosmosMessageType } = require('../message-types')
const { cosmosWhitelistedMessageTypes } = require('../../lib/message-types')
const {
cosmosWhitelistedMessageTypes,
lunieMessageTypes
} = require('../../lib/message-types')
const BigNumber = require('bignumber.js')
const _ = require('lodash')
const Sentry = require('@sentry/node')
Expand Down Expand Up @@ -250,7 +253,16 @@ function denomLookup(denom) {
uatom: 'ATOM',
umuon: 'MUON',
uluna: 'LUNA',
seed: 'TREE'
ukrw: 'KRW',
umnt: 'MNT',
usdr: 'SDR',
uusd: 'USD',
seed: 'TREE',
ungm: 'NGM',
eeur: 'eEUR',
echf: 'eCHF',
ejpy: 'eJPY',
eusd: 'eUSD'
}
return lookup[denom] ? lookup[denom] : denom.toUpperCase()
}
Expand All @@ -271,11 +283,8 @@ function coinReducer(coin) {
}
}

function balanceReducer(coin, fiatValue) {
return {
...coin,
fiatValue
}
function balanceReducer(coin) {
return coin
}

function delegationReducer(delegation, validator) {
Expand Down Expand Up @@ -406,6 +415,41 @@ function formatTransactionsReducer(txs, reducers) {
return filteredTxs.map(tx => transactionReducer(tx, reducers))
}

function transactionReducerV2(transaction, reducers) {
// TODO check if this is anywhere not an array
let fees
if (Array.isArray(transaction.tx.value.fee.amount)) {
fees = transaction.tx.value.fee.amount.map(coinReducer)
} else {
fees = [coinReducer(transaction.tx.value.fee.amount)]
}
// We do display only the transactions we support in Lunie
const filteredMessages = transaction.tx.value.msg.filter(
({ type }) => getMessageType(type) !== 'Unknown'
)
const returnedMessages = filteredMessages.map(({ value, type }, index) => ({
type: getMessageType(type),
hash: transaction.txhash,
height: transaction.height,
details: transactionDetailsReducer(getMessageType(type), value, reducers),
timestamp: transaction.timestamp,
memo: transaction.tx.value.memo,
fees,
success: transaction.logs ? transaction.logs[index].success : false
}))
return returnedMessages
}

function transactionsReducerV2(txs, reducers) {
const duplicateFreeTxs = uniqWith(txs, (a, b) => a.txhash === b.txhash)
const sortedTxs = sortBy(duplicateFreeTxs, ['timestamp'])
const reversedTxs = reverse(sortedTxs)
// here we filter out all transactions related to validators
return reversedTxs.reduce((collection, transaction) => {
return collection.concat(transactionReducerV2(transaction, reducers))
}, [])
}

// to be able to catch all validators from a multi-claim reward tx, we need to capture
// more than just the first value message.
function txMultiClaimRewardReducer(txMessages) {
Expand Down Expand Up @@ -459,6 +503,130 @@ function transactionReducer(transaction, reducers) {
}
}

// map Cosmos SDK message types to Lunie message types
function getMessageType(type) {
// different networks use different prefixes for the transaction types like cosmos/MsgSend vs core/MsgSend in Terra
const transactionTypeSuffix = type.split('/')[1]
switch (transactionTypeSuffix) {
case 'MsgSend':
return lunieMessageTypes.SEND
case 'MsgDelegate':
return lunieMessageTypes.STAKE
case 'MsgBeginRedelegate':
return lunieMessageTypes.RESTAKE
case 'MsgUndelegate':
return lunieMessageTypes.UNSTAKE
case 'MsgWithdrawDelegationReward':
return lunieMessageTypes.WITHDRAW_DELEGATION_REWARDS
case 'MsgSubmitProposal':
return lunieMessageTypes.SUBMIT_PROPOSAL
case 'MsgVote':
return lunieMessageTypes.VOTE
case 'MsgDeposit':
return lunieMessageTypes.DEPOSIT
default:
return lunieMessageTypes.UNKNOWN
}
}

// function to map cosmos messages to our details format
function transactionDetailsReducer(type, message, reducers) {
let details
switch (type) {
case lunieMessageTypes.SEND:
details = sendDetailsReducer(message, reducers)
break
case lunieMessageTypes.STAKE:
details = stakeDetailsReducer(message, reducers)
break
case lunieMessageTypes.RESTAKE:
details = restakeDetailsReducer(message, reducers)
break
case lunieMessageTypes.UNSTAKE:
details = unstakeDetailsReducer(message, reducers)
break
case lunieMessageTypes.WITHDRAW_DELEGATION_REWARDS:
details = claimRewardsDetailsReducer(message, reducers)
break
case lunieMessageTypes.SUBMIT_PROPOSAL:
details = submitProposalDetailsReducer(message, reducers)
break
case lunieMessageTypes.VOTE:
details = voteProposalDetailsReducer(message, reducers)
break
case lunieMessageTypes.DEPOSIT:
details = depositDetailsReducer(message, reducers)
break
default:
details = {}
}

return {
type,
...details
}
}

function sendDetailsReducer(message, reducers) {
return {
to: [message.to_address],
amount: reducers.coinReducer(message.amount[0])
}
}

function stakeDetailsReducer(message, reducers) {
return {
to: [message.validator_address],
amount: reducers.coinReducer(message.amount)
}
}

function restakeDetailsReducer(message, reducers) {
return {
from: [message.validator_src_address],
to: [message.validator_dst_address],
amount: reducers.coinReducer(message.amount)
}
}

function unstakeDetailsReducer(message, reducers) {
return {
from: [message.validator_address],
amount: reducers.coinReducer(message.amount)
}
}

function claimRewardsDetailsReducer(message, reducers) {
return {
from: [message.validator_address],
amount: reducers.coinReducer(message.amount)
}
}

function submitProposalDetailsReducer(message, reducers) {
return {
proposalType: message.content.type,
proposalTitle: message.content.value.title,
proposalDescription: message.content.value.description,
initialDeposit: reducers.coinReducer(message.initial_deposit[0])
}
}

function voteProposalDetailsReducer(message) {
return {
proposalId: message.proposal_id,
voteOption: message.option
}
}

// TO TEST!
function depositDetailsReducer(message, reducers) {
return {
proposalId: message.proposal_id,
amount: reducers.coinReducer(message.amount)
}
}

module.exports = {
proposalReducer,
governanceParameterReducer,
Expand All @@ -476,6 +644,7 @@ module.exports = {
calculateTokens,
undelegationEndTimeReducer,
formatTransactionsReducer,
transactionsReducerV2,

atoms,
proposalBeginTime,
Expand All @@ -484,5 +653,6 @@ module.exports = {
getTotalVotePercentage,
getValidatorStatus,
expectedRewardsPerToken,
getGroupByType
getGroupByType,
denomLookup
}
3 changes: 2 additions & 1 deletion lib/reducers/emoneyV0-reducers.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ async function totalBackedValueReducer(totalBackedValue) {
// fiat currency
const fiatValue = exchangeRates[token]
? BigNumber(totalBackedValue.amount)
.div(100000000)
.div(1000000)
.times(exchangeRates[token][ticker])
.toNumber()
: null
Expand Down Expand Up @@ -120,5 +120,6 @@ async function expectedRewardsPerToken(
module.exports = {
...terraV3Reducers,
expectedRewardsPerToken,
fetchTokenExchangeRates,
totalBackedValueReducer
}
5 changes: 0 additions & 5 deletions lib/reducers/regenV0-reducers.js

This file was deleted.

29 changes: 28 additions & 1 deletion lib/reducers/terraV3-reducers.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const cosmosV2Reducers = require('./cosmosV2-reducers')
const { atoms } = cosmosV2Reducers
const BigNumber = require('bignumber.js')
const { atoms, denomLookup } = cosmosV2Reducers

// Terra has a slightly different structure and needs its own undelegationEndTimeReducer
function undelegationEndTimeReducer(transaction) {
Expand All @@ -24,6 +25,31 @@ function undelegationEndTimeReducer(transaction) {
}
}

function gasPriceReducer(gasPrice) {
if (!gasPrice) {
throw new Error(
'The token you are trying to request data for is not supported by Lunie.'
)
}

// we want to show only atoms as this is what users know
const denom = denomLookup(gasPrice.denom)
return {
denom: denom,
price: BigNumber(gasPrice.price).div(1000000) // Danger: this might not be the case for all future tokens
}
}

function balanceReducer(coin, fiatValue, gasPrices) {
return {
...coin,
fiatValue,
gasPrice: gasPriceReducer(
gasPrices.find(gasprice => denomLookup(gasprice.denom) === coin.denom)
).price
}
}

function rewardReducer(rewards, validatorsDictionary) {
const formattedRewards = rewards.map(
reward =>
Expand All @@ -47,6 +73,7 @@ function rewardReducer(rewards, validatorsDictionary) {

module.exports = {
...cosmosV2Reducers,
balanceReducer,
rewardReducer,
undelegationEndTimeReducer
}
14 changes: 13 additions & 1 deletion lib/resolvers.js
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,9 @@ const resolvers = {
return overview
},
transactions: (_, { networkId, address }, { dataSources }) =>
remoteFetch(dataSources, networkId).getTransactions(address)
remoteFetch(dataSources, networkId).getTransactions(address),
transactionsV2: (_, { networkId, address }, { dataSources }) =>
remoteFetch(dataSources, networkId).getTransactionsV2(address)
},
Subscription: {
blockAdded: {
Expand All @@ -326,6 +328,10 @@ const resolvers = {
subscribe: (_, { networkId, address }) =>
userTransactionAdded(networkId, address)
},
userTransactionAddedV2: {
subscribe: (_, { networkId, address }) =>
userTransactionAdded(networkId, address)
},
event: {
subscribe: withFilter(
event,
Expand All @@ -340,6 +346,12 @@ const resolvers = {
}
)
}
},
// Resolve type for TransactionDetails union
TransactionDetails: {
__resolveType(obj) {
return obj.type
}
}
}

Expand Down
Loading

0 comments on commit 66c02d5

Please sign in to comment.