Skip to content

Commit d270b20

Browse files
authored
Merge pull request #212 from layerx-labs/dev
BEPRO 2.25
2 parents 32b2db1 + eadb765 commit d270b20

File tree

6 files changed

+138
-83
lines changed

6 files changed

+138
-83
lines changed

package-lock.json

Lines changed: 7 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"dependencies": {
2828
"@elastic/elasticsearch": "^8.2.1",
2929
"@sendgrid/mail": "^7.7.0",
30-
"@taikai/dappkit": "^2.3.3",
30+
"@taikai/dappkit": "^2.3.4",
3131
"@taikai/scribal": "^1.0.3",
3232
"axios": "^0.27.2",
3333
"bignumber.js": "9.1.0",
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import logger from "src/utils/logger-handler";
2+
import { EventsProcessed, EventsQuery } from "src/interfaces/block-chain-service";
3+
import { DecodedLog } from "src/interfaces/block-sniffer";
4+
import { NetworkParamChanged } from "@taikai/dappkit/dist/src/interfaces/events/network-v2-events";
5+
import { updateNetworkParameters } from "src/modules/update-network-params";
6+
7+
export const name = "GetNetworkParamChanged";
8+
export const schedule = "0 0 * * *";
9+
export const description = "update network parameters on database";
10+
export const author = "Vitor Hugo";
11+
12+
export async function action(block: DecodedLog<NetworkParamChanged['returnValues']>, query?: EventsQuery): Promise<EventsProcessed> {
13+
const eventsProcessed: EventsProcessed = {};
14+
const { address: networkAddress, chainId, connection } = block;
15+
16+
logger.info(`${name} start`);
17+
18+
try {
19+
await updateNetworkParameters({
20+
networkAddress,
21+
chainId,
22+
connection
23+
});
24+
25+
eventsProcessed[networkAddress] = ["updated"];
26+
27+
logger.info(`${name} parameters saved ${networkAddress} ${chainId}`);
28+
} catch (error: any) {
29+
logger.error(`${name} Failed to save parameters of ${networkAddress} ${chainId}`, error?.message || error.toString());
30+
}
31+
32+
return eventsProcessed;
33+
}

src/actions/update-network-parameters.ts

Lines changed: 33 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,55 @@
11
import db from "src/db";
22
import logger from "src/utils/logger-handler";
3-
import {EventsProcessed, EventsQuery,} from "src/interfaces/block-chain-service";
4-
import {Network_v2, Web3Connection} from "@taikai/dappkit";
5-
import {Op} from "sequelize";
6-
import {getChainsRegistryAndNetworks} from "../utils/block-process";
7-
import { handleCurators, updateIsCurrentlyCurator } from "src/modules/handle-curators";
3+
import { EventsProcessed, EventsQuery } from "src/interfaces/block-chain-service";
4+
import { updateNetworkParameters } from "src/modules/update-network-params";
5+
import { Web3Connection } from "@taikai/dappkit";
86

9-
export const name = "updateNetworkParameters";
7+
export const name = "UpdateNetworkParameters";
108
export const schedule = "0 0 * * *";
119
export const description = "update network parameters on database";
1210
export const author = "Vitor Hugo";
1311

14-
const {NEXT_WALLET_PRIVATE_KEY: privateKey} = process.env;
15-
1612
export async function action(query?: EventsQuery): Promise<EventsProcessed> {
1713
const eventsProcessed: EventsProcessed = {};
1814

1915
logger.info(`${name} start`);
2016

21-
const entries = await getChainsRegistryAndNetworks();
22-
for (const [web3Host, {chainId: chain_id,}] of entries) {
23-
const where = {
24-
chain_id,
25-
...query?.networkName ? {name: {[Op.iLike]: query.networkName}} : {},
26-
}
27-
28-
const networks = await db.networks.findAll({
29-
where,
30-
include: [{ association: "curators", required: false }],
31-
});
32-
33-
try {
34-
35-
if (!networks || !networks.length) {
36-
logger.warn(`${name} found no networks`);
37-
return eventsProcessed;
38-
}
39-
40-
const web3Connection = new Web3Connection({web3Host, privateKey});
41-
await web3Connection.start();
42-
43-
for (const network of networks) {
44-
try {
45-
const networkContract = new Network_v2(web3Connection, network.networkAddress);
46-
await networkContract.start();
47-
const councilAmount = await networkContract.councilAmount();
48-
const needsToUpdateCurators = councilAmount !== network.councilAmount;
49-
50-
network.councilAmount = councilAmount;
51-
network.disputableTime = (await networkContract.disputableTime()) / 1000;
52-
network.draftTime = (await networkContract.draftTime()) / 1000;
53-
network.oracleExchangeRate = await networkContract.oracleExchangeRate();
54-
network.mergeCreatorFeeShare = await networkContract.mergeCreatorFeeShare();
55-
network.percentageNeededForDispute = await networkContract.percentageNeededForDispute();
56-
network.cancelableTime = (await networkContract.cancelableTime()) / 1000;
57-
network.proposerFeeShare = await networkContract.proposerFeeShare();
17+
if (!query || !query?.chainId || !query?.address) {
18+
logger.info(`${name} missing parameters`);
19+
return eventsProcessed;
20+
}
5821

59-
await network.save();
22+
const { chainId, address } = query;
6023

61-
if (needsToUpdateCurators) {
62-
await Promise.all(network.curators.map(async (curator) => {
63-
const actorVotesResume = await networkContract.getOraclesResume(curator.address);
64-
await handleCurators(curator.address, actorVotesResume, councilAmount, network.id);
65-
}));
24+
const chain = await db.chains.findOne({
25+
where: {
26+
chainId: +chainId
27+
}
28+
});
6629

67-
const currentCurators = await db.curators.findAll({
68-
where: {
69-
isCurrentlyCurator: true,
70-
networkId: network.id
71-
}
72-
});
30+
if (!chain) {
31+
logger.info(`${name} invalid chain ${chainId}`);
32+
return eventsProcessed;
33+
}
7334

74-
network.councilMembers = currentCurators.map(({ address }) => address);
75-
await network.save();
76-
}
35+
try {
36+
const connection = new Web3Connection({
37+
web3Host: chain.privateChainRpc,
38+
skipWindowAssignment: true,
39+
});
40+
await connection.start();
7741

78-
eventsProcessed[network.name!] = ["updated"];
42+
await updateNetworkParameters({
43+
networkAddress: address,
44+
chainId: +chainId,
45+
connection
46+
});
7947

80-
logger.info(`${name} parameters saved ${network.name} ${network.networkAddress}`);
81-
} catch (error: any) {
82-
logger.error(`${name} Failed to save parameters of ${network.name} ${network.networkAddress}`, error?.message || error.toString());
83-
}
84-
}
85-
} catch (err: any) {
86-
logger.error(`${name} Error`, err?.message || err.toString());
87-
}
48+
eventsProcessed[address] = ["updated"];
8849

50+
logger.info(`${name} parameters saved ${address} ${chainId}`);
51+
} catch (error: any) {
52+
logger.error(`${name} Failed to save parameters of ${address} ${chainId}`, error?.message || error.toString());
8953
}
9054

9155
return eventsProcessed;

src/modules/chain-events.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import {action as OraclesTransfer} from "../actions/get-oracles-transfer-events"
1717
import {action as UpdateBountiesToDraft} from "../actions/update-bounties-to-draft";
1818
import {action as DeletePendingNetworks} from "../actions/delete-pending-networks";
1919
import {action as DeletePendingBounties} from "../actions/delete-pending-bounties";
20-
import {action as UpdateNetworkParams} from "../actions/update-network-parameters";
20+
import {action as NetworkParamChanged} from "../actions/get-network-param-changed";
21+
import {action as UpdateNetworkParameters} from "../actions/update-network-parameters";
2122
import {action as BountyWithdrawReward} from "../actions/get-bounty-reward-withdraw";
2223
import {action as UpdateHeaders} from "../actions/get-prices-header-information";
2324
import {action as GenerateNftImage} from "../actions/generate-nft-images";
@@ -45,7 +46,7 @@ export const REGISTRY_EVENTS = {
4546
export const NETWORK_EVENTS = {
4647
BountyCreated, BountyCanceled, BountyFunded, BountyClosed, BountyPullRequestCreated, BountyPullRequestReadyForReview,
4748
BountyPullRequestCanceled, BountyProposalCreated, BountyProposalDisputed, BountyProposalRefused, BountyAmountUpdated,
48-
OraclesChanged, OraclesTransfer,
49+
OraclesChanged, OraclesTransfer, NetworkParamChanged,
4950
}
5051

5152
/**
@@ -57,10 +58,10 @@ export const MIDNIGHT_ACTIONS = {
5758
UpdateBountiesToDraft,
5859
DeletePendingNetworks,
5960
DeletePendingBounties,
60-
UpdateNetworkParams,
6161
SaveLockedTokensEvents,
6262
SaveDelegatedTokensEvents,
6363
CalculateUserPoints,
64+
UpdateNetworkParameters,
6465
}
6566

6667
export const MINUTE_ACTIONS = {
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { Network_v2, Web3Connection } from "@taikai/dappkit";
2+
3+
import db from "src/db";
4+
import { handleCurators } from "src/modules/handle-curators";
5+
6+
type UpdateNetworkParametersProps = {
7+
networkAddress: string,
8+
chainId: number,
9+
connection: Web3Connection,
10+
}
11+
export async function updateNetworkParameters({
12+
networkAddress,
13+
chainId,
14+
connection
15+
}: UpdateNetworkParametersProps) {
16+
const networkOnDb = await db.networks.findOne({
17+
where: {
18+
networkAddress: networkAddress,
19+
chain_id: chainId
20+
},
21+
include: [{ association: "curators", required: false }],
22+
});
23+
24+
if (!networkOnDb) {
25+
throw new Error(`Network with address ${networkAddress} not found for chain ${chainId}`);
26+
}
27+
28+
const networkContract = new Network_v2(connection, networkOnDb.networkAddress);
29+
await networkContract.start();
30+
const councilAmount = await networkContract.councilAmount();
31+
const needsToUpdateCurators = councilAmount !== networkOnDb.councilAmount;
32+
33+
networkOnDb.councilAmount = councilAmount;
34+
networkOnDb.disputableTime = (await networkContract.disputableTime()) / 1000;
35+
networkOnDb.draftTime = (await networkContract.draftTime()) / 1000;
36+
networkOnDb.oracleExchangeRate = await networkContract.oracleExchangeRate();
37+
networkOnDb.mergeCreatorFeeShare = await networkContract.mergeCreatorFeeShare();
38+
networkOnDb.percentageNeededForDispute = await networkContract.percentageNeededForDispute();
39+
networkOnDb.cancelableTime = (await networkContract.cancelableTime()) / 1000;
40+
networkOnDb.proposerFeeShare = await networkContract.proposerFeeShare();
41+
42+
await networkOnDb.save();
43+
44+
if (needsToUpdateCurators) {
45+
await Promise.all(networkOnDb.curators.map(async (curator) => {
46+
const actorVotesResume = await networkContract.getOraclesResume(curator.address);
47+
await handleCurators(curator.address, actorVotesResume, councilAmount, networkOnDb.id);
48+
}));
49+
50+
const currentCurators = await db.curators.findAll({
51+
where: {
52+
isCurrentlyCurator: true,
53+
networkId: networkOnDb.id
54+
}
55+
});
56+
57+
networkOnDb.councilMembers = currentCurators.map(({ address }) => address);
58+
await networkOnDb.save();
59+
}
60+
}

0 commit comments

Comments
 (0)