Skip to content

Commit

Permalink
applied recommended changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Alann27 committed Oct 1, 2024
1 parent 3b0a113 commit 4712bef
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 27 deletions.
9 changes: 5 additions & 4 deletions schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type Block @entity {
transactions: [Transaction] @derivedFrom(field: "block")
messages: [Message] @derivedFrom(field: "block")
events: [Event] @derivedFrom(field: "block")
balancesOfAccountByDenom: [BalanceOfAccountByDenom] @derivedFrom(field: "lastUpdatedBlock")
balancesOfAccountByDenom: [Balance] @derivedFrom(field: "lastUpdatedBlock")
}

type Transaction @entity {
Expand All @@ -35,13 +35,14 @@ type Transaction @entity {
status: TxStatus!
log: String
timeoutHeight: BigInt @index
# NB: only the first signer!
signerAddress: String @index
messages: [Message] @derivedFrom(field: "transaction")
}

type Message @entity {
id: ID!
typeUrl: String @index
typeUrl: String! @index
json: String
transaction: Transaction!
block: Block!
Expand Down Expand Up @@ -77,7 +78,7 @@ type Account @entity {
chainId: String! @index
nativeBalanceChanges: [NativeBalanceChange]! @derivedFrom(field: "account")
genesisBalances: [GenesisBalance] @derivedFrom(field: "account")
balances: [BalanceOfAccountByDenom] @derivedFrom(field: "account")
balances: [Balance] @derivedFrom(field: "account")
}

type GenesisBalance @entity {
Expand Down Expand Up @@ -106,7 +107,7 @@ type UnprocessedEntity @entity {
block: Block
}

type BalanceOfAccountByDenom @entity {
type Balance @entity {
id: ID!
account: Account! @index
denom: String! @index
Expand Down
26 changes: 13 additions & 13 deletions src/mappings/primitives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
TxStatus,
NativeBalanceChange,
GenesisBalance,
BalanceOfAccountByDenom,
Balance,
GenesisFile as GenesisEntity,
} from "../types";
import { PREFIX } from "./constants";
Expand All @@ -33,7 +33,7 @@ import {
stringify,
trackUnprocessed,
unprocessedEventHandler,
getBalanceOfAccountByDenomId,
getBalanceId,
} from "./utils";

export async function handleGenesis(block: CosmosBlock): Promise<void> {
Expand Down Expand Up @@ -63,9 +63,9 @@ export async function handleGenesis(block: CosmosBlock): Promise<void> {
)

type EntityToSave<T> = Omit<T, 'save' |'_name'>;
const nativeBalances: Array<EntityToSave<NativeBalanceChange>> = [];
const nativeBalanceChanges: Array<EntityToSave<NativeBalanceChange>> = [];
const genesisBalances: Array<EntityToSave<GenesisBalance>> = [];
const balancesByDenom: Array<EntityToSave<BalanceOfAccountByDenom>> = [];
const balances: Array<EntityToSave<Balance>> = [];

type AmountByAccountAndDenom = Record<string, {
accountId: string,
Expand All @@ -74,21 +74,21 @@ export async function handleGenesis(block: CosmosBlock): Promise<void> {
}>

// here we are grouping the amount of each denom for each account
const amountByAccountAndDenom: AmountByAccountAndDenom = genesis.app_state.bank.balances.reduce((acc, item) => {
const amountByDenom: Record<string, bigint> = item.coins.reduce((acc, item) => ({
const amountByAccountAndDenom: AmountByAccountAndDenom = genesis.app_state.bank.balances.reduce((acc, balance) => {
const amountByDenom: Record<string, bigint> = balance.coins.reduce((acc, coin) => ({
...acc,
[item.denom]: BigInt(acc[item.denom] || 0) + BigInt(item.amount),
[coin.denom]: BigInt(acc[coin.denom] || 0) + BigInt(coin.amount),
}), {} as Record<string, bigint>)

for (const [denom, amount] of Object.entries(amountByDenom)) {
const id = getBalanceOfAccountByDenomId(item.address, denom)
const id = getBalanceId(balance.address, denom)
if (acc[id]) {
acc[id].amount += amount
} else {
acc[id] = {
amount,
denom,
accountId: item.address,
accountId: balance.address,
}
}
}
Expand All @@ -97,7 +97,7 @@ export async function handleGenesis(block: CosmosBlock): Promise<void> {
}, {} as AmountByAccountAndDenom)

for (const [id, {accountId, amount, denom}] of Object.entries(amountByAccountAndDenom)) {
nativeBalances.push({
nativeBalanceChanges.push({
id,
balanceOffset: amount.valueOf(),
denom,
Expand All @@ -113,7 +113,7 @@ export async function handleGenesis(block: CosmosBlock): Promise<void> {
accountId: accountId,
});

balancesByDenom.push({
balances.push({
id,
amount: amount,
denom,
Expand All @@ -124,8 +124,8 @@ export async function handleGenesis(block: CosmosBlock): Promise<void> {

await Promise.all([
store.bulkCreate('GenesisBalance', genesisBalances),
store.bulkCreate('NativeBalanceChange', nativeBalances),
store.bulkCreate('BalanceOfAccountByDenom', balancesByDenom)
store.bulkCreate('NativeBalanceChange', nativeBalanceChanges),
store.bulkCreate('Balance', balances)
]);

await GenesisEntity.create({
Expand Down
20 changes: 10 additions & 10 deletions src/mappings/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
import { default as JSONBig } from "json-bigint";
import {
Account,
BalanceOfAccountByDenom,
Balance,
UnprocessedEntity,
} from "../types";

Expand Down Expand Up @@ -130,27 +130,27 @@ export async function trackUnprocessed(error: Error, primitives: Primitives): Pr
}
}

export function getBalanceOfAccountByDenomId(address: string, denom: string): string {
export function getBalanceId(address: string, denom: string): string {
return `${address}-${denom}`;
}

export async function updateAccountBalance(address: string, denom: string, offset: bigint, blockId: string): Promise<void> {
let balanceOfAccountByDenom = await BalanceOfAccountByDenom.get(getBalanceOfAccountByDenomId(address, denom));
let balance = await Balance.get(getBalanceId(address, denom));

if (!balanceOfAccountByDenom) {
balanceOfAccountByDenom = BalanceOfAccountByDenom.create({
id: getBalanceOfAccountByDenomId(address, denom),
if (!balance) {
balance = Balance.create({
id: getBalanceId(address, denom),
accountId: address,
denom,
amount: offset,
lastUpdatedBlockId: blockId,
})
} else {
balanceOfAccountByDenom.amount = balanceOfAccountByDenom.amount + offset;
balanceOfAccountByDenom.lastUpdatedBlockId = blockId;
balance.amount = balance.amount + offset;
balance.lastUpdatedBlockId = blockId;
}

await balanceOfAccountByDenom.save();
await balance.save();

logger.debug(`[updateAccountBalance] (address): ${address}, (denom): ${denom}, (offset): ${offset}, (newBalance): ${balanceOfAccountByDenom?.amount}`);
logger.debug(`[updateAccountBalance] (address): ${address}, (denom): ${denom}, (offset): ${offset}, (newBalance): ${balance?.amount}`);
}

0 comments on commit 4712bef

Please sign in to comment.