From 42cd32f37608542d2bc9a34a1f0b32f4d84fc7cb Mon Sep 17 00:00:00 2001 From: Joe Tsang <30622993+jtsang586@users.noreply.github.com> Date: Tue, 14 Feb 2023 16:44:36 +0000 Subject: [PATCH 01/18] test(governance): refactor proposal enactment tests (#2897) --- .../flow/governance-enacted-flow.cy.js | 143 ++++++++++++++++++ .../integration/flow/governance-flow.cy.js | 105 +------------ apps/token-e2e/src/support/index.js | 2 +- .../src/support/proposal.functions.js | 103 ------------- .../src/support/proposal.functions.ts | 82 ++++++++++ libs/cypress/src/index.ts | 2 + .../commands/vega-wallet-submit-proposal.ts | 25 +++ 7 files changed, 254 insertions(+), 208 deletions(-) create mode 100644 apps/token-e2e/src/integration/flow/governance-enacted-flow.cy.js delete mode 100644 apps/token-e2e/src/support/proposal.functions.js create mode 100644 apps/token-e2e/src/support/proposal.functions.ts create mode 100644 libs/cypress/src/lib/commands/vega-wallet-submit-proposal.ts diff --git a/apps/token-e2e/src/integration/flow/governance-enacted-flow.cy.js b/apps/token-e2e/src/integration/flow/governance-enacted-flow.cy.js new file mode 100644 index 000000000..a875d2b2b --- /dev/null +++ b/apps/token-e2e/src/integration/flow/governance-enacted-flow.cy.js @@ -0,0 +1,143 @@ +/// + +import { + createUpdateNetworkProposalTxBody, + createFreeFormProposalTxBody, +} from '../../support/proposal.functions'; + +const closedProposals = '[data-testid="closed-proposals"]'; +const proposalStatus = '[data-testid="proposal-status"]'; +const viewProposalButton = '[data-testid="view-proposal-btn"]'; +const votesTable = '[data-testid="votes-table"]'; +const openProposals = '[data-testid="open-proposals"]'; +const proposalVoteProgressForPercentage = + '[data-testid="vote-progress-indicator-percentage-for"]'; +const proposalTimeout = { timeout: 8000 }; + +context( + 'Proposal flow - with proposals enacted or failed', + { tags: '@slow' }, + function () { + before('Connect wallets and set approval', function () { + cy.visit('/'); + cy.vega_wallet_set_specified_approval_amount('1000'); + cy.connectVegaWallet(); + cy.ethereum_wallet_connect(); + cy.ensure_specified_unstaked_tokens_are_associated(1); + cy.clearLocalStorage(); + }); + + beforeEach('visit proposals', function () { + cy.reload(); + cy.wait_for_spinner(); + cy.connectVegaWallet(); + cy.ethereum_wallet_connect(); + cy.navigate_to('proposals'); + }); + + // 3001-VOTE-006 + it('Able to view enacted proposal', function () { + const proposalTitle = 'Add Lorem Ipsum market'; + + cy.createMarket(); + cy.reload(); + cy.wait_for_spinner(); + cy.get(closedProposals).within(() => { + cy.contains(proposalTitle) + .parentsUntil('[data-testid="proposals-list-item"]') + .within(() => { + cy.get(proposalStatus).should('have.text', 'Enacted '); + cy.get(viewProposalButton).click(); + }); + }); + cy.getByTestId('proposal-type').should('have.text', 'New market'); + cy.get_proposal_information_from_table('State') + .contains('Enacted') + .and('be.visible'); + cy.get(votesTable).within(() => { + cy.contains('Vote passed.').should('be.visible'); + cy.contains('Voting has ended.').should('be.visible'); + }); + }); + + // 3001-VOTE-046 3001-VOTE-044 3001-VOTE-074 3001-VOTE-074 + it('Able to enact proposal by voting', function () { + const proposalTitle = 'Add New proposal with short enactment'; + const proposalTx = createUpdateNetworkProposalTxBody(); + + cy.VegaWalletSubmitProposal(proposalTx); + cy.navigate_to('proposals'); + cy.reload(); + cy.wait_for_spinner(); + cy.get(openProposals).within(() => { + cy.contains(proposalTitle) + .parentsUntil('[data-testid="proposals-list-item"]') + .within(() => cy.get(viewProposalButton).click()); + }); + cy.get_proposal_information_from_table('State') + .contains('Open') + .and('be.visible'); + cy.vote_for_proposal('for'); + cy.get_proposal_information_from_table('State') // 3001-VOTE-047 + .contains('Passed', proposalTimeout) + .and('be.visible'); + cy.get_proposal_information_from_table('State') + .contains('Enacted', proposalTimeout) + .and('be.visible'); + cy.get(votesTable).within(() => { + cy.contains('Vote passed.').should('be.visible'); + cy.contains('Voting has ended.').should('be.visible'); + }); + cy.get(proposalVoteProgressForPercentage) + .contains('100.00%') + .and('be.visible'); + }); + + // 3001-VOTE-047 + it('Able to enact freeform proposal', function () { + const proposalTitle = 'Add New free form proposal with short enactment'; + const proposalTx = createFreeFormProposalTxBody(); + + cy.VegaWalletSubmitProposal(proposalTx); + cy.navigate_to('proposals'); + cy.reload(); + cy.wait_for_spinner(); + cy.get(openProposals).within(() => { + cy.contains(proposalTitle) + .parentsUntil('[data-testid="proposals-list-item"]') + .within(() => cy.get(viewProposalButton).click()); + }); + cy.get_proposal_information_from_table('State') + .contains('Open') + .and('be.visible'); + cy.vote_for_proposal('for'); + cy.get_proposal_information_from_table('State') + .contains('Enacted', proposalTimeout) + .and('be.visible'); + }); + + // 3001-VOTE-048 3001-VOTE-049 + it('Able to fail proposal due to lack of participation', function () { + const proposalTitle = 'Add New free form proposal with short enactment'; + const proposalTx = createFreeFormProposalTxBody(); + cy.VegaWalletSubmitProposal(proposalTx); + cy.navigate_to('proposals'); + cy.reload(); + cy.wait_for_spinner(); + cy.get(openProposals).within(() => { + cy.contains(proposalTitle) + .parentsUntil('[data-testid="proposals-list-item"]') + .within(() => cy.get(viewProposalButton).click()); + }); + cy.get_proposal_information_from_table('State') + .contains('Open') + .and('be.visible'); + cy.get_proposal_information_from_table('State') // 3001-VOTE-047 + .contains('Declined', proposalTimeout) + .and('be.visible'); + cy.get_proposal_information_from_table('Rejection reason') + .contains('PROPOSAL_ERROR_PARTICIPATION_THRESHOLD_NOT_REACHED') + .and('be.visible'); + }); + } +); diff --git a/apps/token-e2e/src/integration/flow/governance-flow.cy.js b/apps/token-e2e/src/integration/flow/governance-flow.cy.js index 2d0a2db6d..1d5802430 100644 --- a/apps/token-e2e/src/integration/flow/governance-flow.cy.js +++ b/apps/token-e2e/src/integration/flow/governance-flow.cy.js @@ -1,4 +1,5 @@ /// + const vegaWalletUnstakedBalance = '[data-testid="vega-wallet-balance-unstaked"]'; const vegaWalletStakedBalances = @@ -11,7 +12,6 @@ const newProposalSubmitButton = '[data-testid="proposal-submit"]'; const dialogCloseButton = '[data-testid="dialog-close"]'; const viewProposalButton = '[data-testid="view-proposal-btn"]'; const openProposals = '[data-testid="open-proposals"]'; -const closedProposals = '[data-testid="closed-proposals"]'; const proposalVoteProgressForPercentage = '[data-testid="vote-progress-indicator-percentage-for"]'; const proposalVoteProgressAgainstPercentage = @@ -23,9 +23,7 @@ const proposalVoteProgressAgainstTokens = const changeVoteButton = '[data-testid="change-vote-button"]'; const proposalDetailsTitle = '[data-testid="proposal-title"]'; const proposalDetailsDescription = '[data-testid="proposal-description"]'; -const proposalStatus = '[data-testid="proposal-status"]'; const rawProposalData = '[data-testid="proposal-data"]'; -const votesTable = '[data-testid="votes-table"]'; const minVoteButton = '[data-testid="min-vote"]'; const maxVoteButton = '[data-testid="max-vote"]'; const voteButtons = '[data-testid="vote-buttons"]'; @@ -787,107 +785,6 @@ context( cy.contains('You voted: Against').should('be.visible'); }); - // 3001-VOTE-006 - it('Able to view enacted proposal', function () { - cy.createMarket(); - cy.reload(); - cy.wait_for_spinner(); - cy.get(closedProposals).within(() => { - cy.get(proposalDetailsTitle).should( - 'have.text', - 'Add Lorem Ipsum market' - ); - cy.get(proposalStatus).should('have.text', 'Enacted '); - cy.get(viewProposalButton).click(); - }); - cy.getByTestId('proposal-type').should('have.text', 'New market'); - cy.get_proposal_information_from_table('State') - .contains('Enacted') - .and('be.visible'); - cy.get(votesTable).within(() => { - cy.contains('Vote passed.').should('be.visible'); - cy.contains('Voting has ended.').should('be.visible'); - }); - }); - - // 3001-VOTE-047 - it('Able to enact freeform proposal', function () { - const proposalTitle = 'Add New free form proposal with short enactment'; - cy.ensure_specified_unstaked_tokens_are_associated( - this.minProposerBalance - ); - cy.sendWalletTxFreeFormProposal(); - cy.navigate_to('proposals'); - cy.reload(); - cy.wait_for_spinner(); - cy.contains(proposalTitle) - .parentsUntil('[data-testid="proposals-list-item"]') - .within(() => cy.get(viewProposalButton).click()); - cy.get_proposal_information_from_table('State') - .contains('Open') - .and('be.visible'); - cy.vote_for_proposal('for'); - cy.get_proposal_information_from_table('State') - .contains('Enacted', epochTimeout) - .and('be.visible'); - }); - - // 3001-VOTE-046 3001-VOTE-044 3001-VOTE-074 3001-VOTE-074 - it('Able to enact proposal by voting', function () { - const proposalTitle = 'Add New proposal with short enactment'; - cy.ensure_specified_unstaked_tokens_are_associated( - this.minProposerBalance - ); - cy.sendWalletTxUpdateNetworkProposal(); - cy.navigate_to('proposals'); - cy.reload(); - cy.wait_for_spinner(); - cy.contains(proposalTitle) - .parentsUntil('[data-testid="proposals-list-item"]') - .within(() => cy.get(viewProposalButton).click()); - cy.get_proposal_information_from_table('State') - .contains('Open') - .and('be.visible'); - cy.vote_for_proposal('for'); - cy.get_proposal_information_from_table('State') // 3001-VOTE-047 - .contains('Passed', txTimeout) - .and('be.visible'); - cy.get_proposal_information_from_table('State') - .contains('Enacted', epochTimeout) - .and('be.visible'); - cy.get(votesTable).within(() => { - cy.contains('Vote passed.').should('be.visible'); - cy.contains('Voting has ended.').should('be.visible'); - }); - cy.get(proposalVoteProgressForPercentage) - .contains('100.00%') - .and('be.visible'); - }); - - // 3001-VOTE-048 3001-VOTE-049 - it('Able to fail proposal due to lack of participation', function () { - const proposalTitle = 'Add New free form proposal with short enactment'; - cy.ensure_specified_unstaked_tokens_are_associated( - this.minProposerBalance - ); - cy.sendWalletTxFreeFormProposal(); - cy.navigate_to('proposals'); - cy.reload(); - cy.wait_for_spinner(); - cy.contains(proposalTitle) - .parentsUntil('[data-testid="proposals-list-item"]') - .within(() => cy.get(viewProposalButton).click()); - cy.get_proposal_information_from_table('State') - .contains('Open') - .and('be.visible'); - cy.get_proposal_information_from_table('State') // 3001-VOTE-047 - .contains('Declined', txTimeout) - .and('be.visible'); - cy.get_proposal_information_from_table('Rejection reason') - .contains('PROPOSAL_ERROR_PARTICIPATION_THRESHOLD_NOT_REACHED') - .and('be.visible'); - }); - function createRawProposal(proposerBalance) { if (proposerBalance) cy.ensure_specified_unstaked_tokens_are_associated(proposerBalance); diff --git a/apps/token-e2e/src/support/index.js b/apps/token-e2e/src/support/index.js index b795caa83..ae744251e 100644 --- a/apps/token-e2e/src/support/index.js +++ b/apps/token-e2e/src/support/index.js @@ -7,7 +7,7 @@ import './governance.functions.js'; import './wallet-eth.functions.js'; import './wallet-teardown.functions.js'; import './wallet-vega.functions.js'; -import './proposal.functions.js'; +import './proposal.functions.ts'; import registerCypressGrep from '@cypress/grep'; import { aliasGQLQuery } from '@vegaprotocol/cypress'; import { chainIdQuery, statisticsQuery } from '@vegaprotocol/mock'; diff --git a/apps/token-e2e/src/support/proposal.functions.js b/apps/token-e2e/src/support/proposal.functions.js deleted file mode 100644 index 018ed3cc9..000000000 --- a/apps/token-e2e/src/support/proposal.functions.js +++ /dev/null @@ -1,103 +0,0 @@ -import { addSeconds, millisecondsToSeconds } from 'date-fns'; - -const walletName = Cypress.env('vegaWalletName'); -const walletPubKey = Cypress.env('vegaWalletPublicKey'); -const walletLocation = Cypress.env('vegaWalletLocation'); -const walletPassphraseFile = './src/fixtures/wallet/passphrase'; - -Cypress.Commands.add('sendWalletTxUpdateNetworkProposal', () => { - const MIN_CLOSE_SEC = 8; - const MIN_ENACT_SEC = 5; - - const closingDate = addSeconds(new Date(), MIN_CLOSE_SEC); - const enactmentDate = addSeconds(closingDate, MIN_ENACT_SEC); - const closingTimestamp = millisecondsToSeconds(closingDate.getTime()); - const enactmentTimestamp = millisecondsToSeconds(enactmentDate.getTime()); - - cy.exec( - `vegawallet transaction send --wallet ${walletName} --pubkey ${walletPubKey} -p ${walletPassphraseFile} --network DV '{ - "proposalSubmission": { - "rationale": { - "title": "Add New proposal with short enactment", - "description": "E2E enactment test" - }, - "terms": { - "updateNetworkParameter": { - "changes": { - "key": "governance.proposal.updateNetParam.minProposerBalance", - "value": "2" - } - }, - "closingTimestamp": ${closingTimestamp}, - "enactmentTimestamp": ${enactmentTimestamp} - } - } - }' --home ${walletLocation}`, - { failOnNonZeroExit: false } - ) - .its('stderr') - .should('contain', ''); -}); - -Cypress.Commands.add('sendWalletTxUpdateAssetProposal', () => { - const MIN_CLOSE_SEC = 8; - const MIN_ENACT_SEC = 5; - - const closingDate = addSeconds(new Date(), MIN_CLOSE_SEC); - const enactmentDate = addSeconds(closingDate, MIN_ENACT_SEC); - const closingTimestamp = millisecondsToSeconds(closingDate.getTime()); - const enactmentTimestamp = millisecondsToSeconds(enactmentDate.getTime()); - - cy.exec( - `vegawallet transaction send --wallet ${walletName} --pubkey ${walletPubKey} -p ${walletPassphraseFile} --network DV '{ - "proposalSubmission": { - "rationale": { - "title": "Update Asset set to fail", - "description": "E2E fail test" - }, - "terms": { - "updateAsset": { - "assetId": "ebcd94151ae1f0d39a4bde3b21a9c7ae81a80ea4352fb075a92e07608d9c953d", - "changes": { - "quantum": "1", - "erc20": { - "withdrawThreshold": "10", - "lifetimeLimit": "10" - } - } - }, - "closingTimestamp": ${closingTimestamp}, - "enactmentTimestamp": ${enactmentTimestamp} - } - } - }' --home ${walletLocation}`, - { failOnNonZeroExit: false } - ) - .its('stderr') - .should('contain', ''); -}); - -Cypress.Commands.add('sendWalletTxFreeFormProposal', () => { - const MIN_CLOSE_SEC = 5; - - const closingDate = addSeconds(new Date(), MIN_CLOSE_SEC); - const closingTimestamp = millisecondsToSeconds(closingDate.getTime()); - - cy.exec( - `vegawallet transaction send --wallet ${walletName} --pubkey ${walletPubKey} -p ${walletPassphraseFile} --network DV '{ - "proposalSubmission": { - "rationale": { - "title": "Add New free form proposal with short enactment", - "description": "E2E enactment test" - }, - "terms": { - "newFreeform": {}, - "closingTimestamp": ${closingTimestamp} - } - } - }' --home ${walletLocation}`, - { failOnNonZeroExit: false } - ) - .its('stderr') - .should('contain', ''); -}); diff --git a/apps/token-e2e/src/support/proposal.functions.ts b/apps/token-e2e/src/support/proposal.functions.ts new file mode 100644 index 000000000..45760aa57 --- /dev/null +++ b/apps/token-e2e/src/support/proposal.functions.ts @@ -0,0 +1,82 @@ +import { addSeconds, millisecondsToSeconds } from 'date-fns'; +import type { ProposalSubmissionBody } from '@vegaprotocol/wallet'; + +export function createUpdateNetworkProposalTxBody(): ProposalSubmissionBody { + const MIN_CLOSE_SEC = 5; + const MIN_ENACT_SEC = 7; + + const closingDate = addSeconds(new Date(), MIN_CLOSE_SEC); + const enactmentDate = addSeconds(closingDate, MIN_ENACT_SEC); + const closingTimestamp = millisecondsToSeconds(closingDate.getTime()); + const enactmentTimestamp = millisecondsToSeconds(enactmentDate.getTime()); + return { + proposalSubmission: { + rationale: { + title: 'Add New proposal with short enactment', + description: 'E2E enactment test', + }, + terms: { + updateNetworkParameter: { + changes: { + key: 'governance.proposal.updateNetParam.minProposerBalance', + value: '2', + }, + }, + closingTimestamp, + enactmentTimestamp, + }, + }, + }; +} + +export function createUpdateAssetProposalTxBody(): ProposalSubmissionBody { + const MIN_CLOSE_SEC = 5; + const MIN_ENACT_SEC = 7; + + const closingDate = addSeconds(new Date(), MIN_CLOSE_SEC); + const enactmentDate = addSeconds(closingDate, MIN_ENACT_SEC); + const closingTimestamp = millisecondsToSeconds(closingDate.getTime()); + const enactmentTimestamp = millisecondsToSeconds(enactmentDate.getTime()); + return { + proposalSubmission: { + rationale: { + title: 'Update Asset set to fail', + description: 'E2E fail test', + }, + terms: { + updateAsset: { + assetId: + 'ebcd94151ae1f0d39a4bde3b21a9c7ae81a80ea4352fb075a92e07608d9c953d', + changes: { + quantum: '1', + erc20: { + withdrawThreshold: '10', + lifetimeLimit: '10', + }, + }, + }, + closingTimestamp, + enactmentTimestamp, + }, + }, + }; +} + +export function createFreeFormProposalTxBody(): ProposalSubmissionBody { + const MIN_CLOSE_SEC = 7; + + const closingDate = addSeconds(new Date(), MIN_CLOSE_SEC); + const closingTimestamp = millisecondsToSeconds(closingDate.getTime()); + return { + proposalSubmission: { + rationale: { + title: 'Add New free form proposal with short enactment', + description: 'E2E enactment test', + }, + terms: { + newFreeform: {}, + closingTimestamp, + }, + }, + }; +} diff --git a/libs/cypress/src/index.ts b/libs/cypress/src/index.ts index 489056453..ce6086e98 100644 --- a/libs/cypress/src/index.ts +++ b/libs/cypress/src/index.ts @@ -17,6 +17,7 @@ import { import { addMockTransactionResponse } from './lib/commands/mock-transaction-response'; import { addCreateMarket } from './lib/commands/create-market'; import { addConnectPublicKey } from './lib/commands/add-connect-public-key'; +import { addVegaWalletSubmitProposal } from './lib/commands/vega-wallet-submit-proposal'; addGetTestIdcommand(); addSlackCommand(); @@ -35,6 +36,7 @@ addSetVegaWallet(); addMockTransactionResponse(); addCreateMarket(); addConnectPublicKey(); +addVegaWalletSubmitProposal(); export { mockConnectWallet } from './lib/commands/vega-wallet-connect'; export type { onMessage } from './lib/mock-ws'; diff --git a/libs/cypress/src/lib/commands/vega-wallet-submit-proposal.ts b/libs/cypress/src/lib/commands/vega-wallet-submit-proposal.ts new file mode 100644 index 000000000..8ebf69a38 --- /dev/null +++ b/libs/cypress/src/lib/commands/vega-wallet-submit-proposal.ts @@ -0,0 +1,25 @@ +import { createWalletClient, sendVegaTx } from '../capsule/wallet-client'; +import type { ProposalSubmissionBody } from '@vegaprotocol/wallet'; + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + VegaWalletSubmitProposal(proposalTx: ProposalSubmissionBody): void; + } + } +} + +export const addVegaWalletSubmitProposal = () => { + Cypress.Commands.add('VegaWalletSubmitProposal', (proposalTx) => { + const vegaWalletUrl = Cypress.env('VEGA_WALLET_URL'); + const token = Cypress.env('VEGA_WALLET_API_TOKEN'); + const vegaPubKey = Cypress.env('VEGA_PUBLIC_KEY'); + + createWalletClient(vegaWalletUrl, token); + + cy.highlight('Submitting proposal'); + sendVegaTx(vegaPubKey, proposalTx); + }); +}; From b95462ea3847b1c803eed88c0e7eb8228921f6f6 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Tue, 14 Feb 2023 18:08:30 +0000 Subject: [PATCH 02/18] chore: update tranches Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/static/src/assets/mainnet-tranches.json | 139 ++++++++++++++----- 1 file changed, 103 insertions(+), 36 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index bf761c394..9c99d1a24 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -2761,7 +2761,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "86666.297", "total_removed": "0", - "locked_amount": "69688.1039444538563298071", + "locked_amount": "69628.4411683291212030893", "deposits": [ { "amount": "86666.297", @@ -2827,7 +2827,7 @@ "tranche_end": "2023-06-01T00:00:00.000Z", "total_added": "2500", "total_removed": "0", - "locked_amount": "1462.84865308302825", + "locked_amount": "1459.397098850224", "deposits": [ { "amount": "2500", @@ -3214,8 +3214,8 @@ "tranche_start": "2023-02-01T00:00:00.000Z", "tranche_end": "2023-08-01T00:00:00.000Z", "total_added": "37500", - "total_removed": "470.314897875", - "locked_amount": "34702.08189456721875", + "total_removed": "2836.415649675", + "locked_amount": "34650.02254066912125", "deposits": [ { "amount": "7500", @@ -3234,6 +3234,16 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0x7b40703e0fb0e1da154999d5d022df7b5dec42d14d9ff75298233227da2770c5" }, + { + "amount": "90.9875691", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0x5bfef799be13741d89872cc604df1f35b41069397e681577fc15c039866d8707" + }, + { + "amount": "2275.1131827", + "user": "0x0B4e6fcE839B01ef43DA6F890FAC7B1Afb004600", + "tx": "0x78fd0cf1ca8de93d15eee1424146bcd70b84cc168b4c1ea1ac50020b8d67bcc1" + }, { "amount": "183.137181525", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -3263,6 +3273,12 @@ "tranche_id": 34, "tx": "0x7b40703e0fb0e1da154999d5d022df7b5dec42d14d9ff75298233227da2770c5" }, + { + "amount": "90.9875691", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 34, + "tx": "0x5bfef799be13741d89872cc604df1f35b41069397e681577fc15c039866d8707" + }, { "amount": "183.137181525", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -3277,8 +3293,8 @@ } ], "total_tokens": "7500", - "withdrawn_tokens": "470.314897875", - "remaining_tokens": "7029.685102125" + "withdrawn_tokens": "561.302466975", + "remaining_tokens": "6938.697533025" }, { "address": "0x0B4e6fcE839B01ef43DA6F890FAC7B1Afb004600", @@ -3290,10 +3306,17 @@ "tx": "0x302591debd812f93121a17dd0413ae5084f3743a868b4325f81990eac58f8292" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "2275.1131827", + "user": "0x0B4e6fcE839B01ef43DA6F890FAC7B1Afb004600", + "tranche_id": 34, + "tx": "0x78fd0cf1ca8de93d15eee1424146bcd70b84cc168b4c1ea1ac50020b8d67bcc1" + } + ], "total_tokens": "30000", - "withdrawn_tokens": "0", - "remaining_tokens": "30000" + "withdrawn_tokens": "2275.1131827", + "remaining_tokens": "27724.8868173" } ] }, @@ -3303,7 +3326,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "69624.522318098021561175", + "locked_amount": "69564.913976749418994585", "deposits": [ { "amount": "129999.45", @@ -3369,7 +3392,7 @@ "tranche_end": "2023-09-03T00:00:00.000Z", "total_added": "62600", "total_removed": "0", - "locked_amount": "34386.33125951293992", + "locked_amount": "34343.23619355657442", "deposits": [ { "amount": "10000", @@ -3562,7 +3585,7 @@ "tranche_end": "2023-09-17T00:00:00.000Z", "total_added": "5000", "total_removed": "0", - "locked_amount": "2938.292903348554", + "locked_amount": "2934.8508054287165", "deposits": [ { "amount": "5000", @@ -3773,7 +3796,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "11517.3721993387044218526", + "locked_amount": "11458.901969243903370945", "deposits": [ { "amount": "97499.58", @@ -3806,7 +3829,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "98230.390980249184455396", - "locked_amount": "15742.259405136849384682186284", + "locked_amount": "15662.3406950613549586301724", "deposits": [ { "amount": "135173.4239508", @@ -3852,7 +3875,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "4845.1595898824455710212", + "locked_amount": "4820.5621738084295690256", "deposits": [ { "amount": "32499.86", @@ -3885,7 +3908,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "1577.052430190972462962", + "locked_amount": "1569.0462099465551990007", "deposits": [ { "amount": "10833.29", @@ -3918,7 +3941,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "22749.93", "total_removed": "4720.860935375", - "locked_amount": "5895.374212352749174155", + "locked_amount": "5865.445172922119371125", "deposits": [ { "amount": "6500", @@ -4069,8 +4092,8 @@ "tranche_start": "2022-11-01T00:00:00.000Z", "tranche_end": "2023-05-01T00:00:00.000Z", "total_added": "22500", - "total_removed": "4282.463838975", - "locked_amount": "9384.785048342541375", + "total_removed": "4373.451408", + "locked_amount": "9353.549436003684", "deposits": [ { "amount": "7500", @@ -4089,6 +4112,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0xf121e9810d454c5814a73b5b58e28c026bc53246bad6f6ba7836fb9e0adbd12a" }, + { + "amount": "90.987569025", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0x4a7c7462e3bb6abe2d33dfe5a1bf1e4211e52e5e03239c02554988f7d3635523" + }, { "amount": "167.6680479", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -4178,6 +4206,12 @@ "tranche_id": 33, "tx": "0xf121e9810d454c5814a73b5b58e28c026bc53246bad6f6ba7836fb9e0adbd12a" }, + { + "amount": "90.987569025", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 33, + "tx": "0x4a7c7462e3bb6abe2d33dfe5a1bf1e4211e52e5e03239c02554988f7d3635523" + }, { "amount": "167.6680479", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -4264,8 +4298,8 @@ } ], "total_tokens": "7500", - "withdrawn_tokens": "4282.463838975", - "remaining_tokens": "3217.536161025" + "withdrawn_tokens": "4373.451408", + "remaining_tokens": "3126.548592" }, { "address": "0x2539b51EbDE65a75672aBcfE9439a706a99D18D1", @@ -4290,7 +4324,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "928642.9598472029154", - "locked_amount": "571324.225076622795836682", + "locked_amount": "569988.740388336449589032", "deposits": [ { "amount": "1852091.69", @@ -36560,7 +36594,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "592998.0503546212334", - "locked_amount": "902427.744703753194520599278", + "locked_amount": "900375.569704240824984490974", "deposits": [ { "amount": "1998.95815", @@ -37885,8 +37919,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15870102.715470999700000001", - "total_removed": "565200.35868260229965452", - "locked_amount": "8499638.4269611804875989817529270644971615", + "total_removed": "565476.66021794547915452", + "locked_amount": "8492361.5461751373169210395250503968545553", "deposits": [ { "amount": "16249.93", @@ -38405,6 +38439,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0x3d26957f37b25306381e1cd2f6d9efea7ec698e837c4b2bda76ca2e2ef8028ba" }, + { + "amount": "276.3015353431795", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0x71e874dd2277e6c5838399943e59bae3b006a06505fb3eacb81a4a6b6bf51a0b" + }, { "amount": "856.08784586478614", "user": "0xe3eB4CF43C072658401996b71D43eE26E573562D", @@ -40101,6 +40140,12 @@ "tranche_id": 2, "tx": "0x3d26957f37b25306381e1cd2f6d9efea7ec698e837c4b2bda76ca2e2ef8028ba" }, + { + "amount": "276.3015353431795", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 2, + "tx": "0x71e874dd2277e6c5838399943e59bae3b006a06505fb3eacb81a4a6b6bf51a0b" + }, { "amount": "966.75883976995675", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -41243,8 +41288,8 @@ } ], "total_tokens": "259998.8875", - "withdrawn_tokens": "120493.09714116867225", - "remaining_tokens": "139505.79035883132775" + "withdrawn_tokens": "120769.39867651185175", + "remaining_tokens": "139229.48882348814825" }, { "address": "0x89051CAb67Bc7F8CC44F7e270c6EDaf1EC57676c", @@ -43451,8 +43496,8 @@ "tranche_start": "2021-11-05T00:00:00.000Z", "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", - "total_removed": "3925878.714389493431486282", - "locked_amount": "2125366.69877648768310833917076124", + "total_removed": "3926262.119252669397786782", + "locked_amount": "2118648.728898136211938441806431298", "deposits": [ { "amount": "129284.449", @@ -43676,6 +43721,11 @@ "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", "tx": "0xddcbb09fcdd4093749d76f4d5f882339989f87089ebe36ac64c4243b6f09b976" }, + { + "amount": "383.4048631759663005", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tx": "0xf1c4c72d4c71eb26378b943efeafb5c1607a79d5163a2c8ae8c4ddce2afaf7ad" + }, { "amount": "1333.9237119810715295", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -46560,6 +46610,12 @@ "tranche_id": 3, "tx": "0xddcbb09fcdd4093749d76f4d5f882339989f87089ebe36ac64c4243b6f09b976" }, + { + "amount": "383.4048631759663005", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tranche_id": 3, + "tx": "0xf1c4c72d4c71eb26378b943efeafb5c1607a79d5163a2c8ae8c4ddce2afaf7ad" + }, { "amount": "1333.9237119810715295", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -49004,8 +49060,8 @@ } ], "total_tokens": "359123.469575", - "withdrawn_tokens": "306480.52161894473088575", - "remaining_tokens": "52642.94795605526911425" + "withdrawn_tokens": "306863.92648212069718625", + "remaining_tokens": "52259.54309287930281375" }, { "address": "0xBdd412797c1B78535Afc5F71503b91fAbD0160fB", @@ -50343,7 +50399,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "2731059.487268130842706642", - "locked_amount": "522841.833257185626759758659733921", + "locked_amount": "520187.522728305183563542468210741", "deposits": [ { "amount": "552496.6455", @@ -52336,8 +52392,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", - "total_removed": "33576.5289478972685", - "locked_amount": "142994.834645218686769341671841696", + "total_removed": "33624.6023877752685", + "locked_amount": "142669.640807515121014888389345492", "deposits": [ { "amount": "3000", @@ -59011,6 +59067,11 @@ "user": "0xb1EAD214506D0cD73785Dd09B3EfC2307133bf69", "tx": "0x6b3f814e3018e59a0557e5e377ee2b8962db59171fe3bff57e887f58f732c1b5" }, + { + "amount": "48.073439878", + "user": "0xC91A06E92bFc696BCcFcDd564F376beDC40932cF", + "tx": "0x20750a137fa15fd06a1c7b0a40226fd2f78310bba9b2246b1b4ab23db72e5177" + }, { "amount": "13.1116203702", "user": "0x4cBC0C88d8FE503f62823B42f30a4900292C13bE", @@ -75018,6 +75079,12 @@ } ], "withdrawals": [ + { + "amount": "48.073439878", + "user": "0xC91A06E92bFc696BCcFcDd564F376beDC40932cF", + "tranche_id": 5, + "tx": "0x20750a137fa15fd06a1c7b0a40226fd2f78310bba9b2246b1b4ab23db72e5177" + }, { "amount": "91.388045408", "user": "0xC91A06E92bFc696BCcFcDd564F376beDC40932cF", @@ -75026,8 +75093,8 @@ } ], "total_tokens": "200", - "withdrawn_tokens": "91.388045408", - "remaining_tokens": "108.611954592" + "withdrawn_tokens": "139.461485286", + "remaining_tokens": "60.538514714" }, { "address": "0xca680a0524F1440bA14afA3d6A57D73bBA7E138d", From fcace223933b5a17a638894128bd4a475a5e22e3 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 15 Feb 2023 00:12:52 +0000 Subject: [PATCH 03/18] chore: update tranches Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/static/src/assets/mainnet-tranches.json | 83 ++++++++++++++------ 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 9c99d1a24..0270805a0 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -2761,7 +2761,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "86666.297", "total_removed": "0", - "locked_amount": "69628.4411683291212030893", + "locked_amount": "69568.3579221561395345826", "deposits": [ { "amount": "86666.297", @@ -2827,7 +2827,7 @@ "tranche_end": "2023-06-01T00:00:00.000Z", "total_added": "2500", "total_removed": "0", - "locked_amount": "1459.397098850224", + "locked_amount": "1455.92121998372025", "deposits": [ { "amount": "2500", @@ -3215,7 +3215,7 @@ "tranche_end": "2023-08-01T00:00:00.000Z", "total_added": "37500", "total_removed": "2836.415649675", - "locked_amount": "34650.02254066912125", + "locked_amount": "34597.5963014119125", "deposits": [ { "amount": "7500", @@ -3326,7 +3326,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "69564.913976749418994585", + "locked_amount": "69504.885548978620656615", "deposits": [ { "amount": "129999.45", @@ -3392,7 +3392,7 @@ "tranche_end": "2023-09-03T00:00:00.000Z", "total_added": "62600", "total_removed": "0", - "locked_amount": "34343.23619355657442", + "locked_amount": "34299.83741755454156", "deposits": [ { "amount": "10000", @@ -3585,7 +3585,7 @@ "tranche_end": "2023-09-17T00:00:00.000Z", "total_added": "5000", "total_removed": "0", - "locked_amount": "2934.8508054287165", + "locked_amount": "2931.384449518011", "deposits": [ { "amount": "5000", @@ -3796,7 +3796,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "11458.901969243903370945", + "locked_amount": "11400.0196735017245359218", "deposits": [ { "amount": "97499.58", @@ -3829,7 +3829,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "98230.390980249184455396", - "locked_amount": "15662.3406950613549586301724", + "locked_amount": "15581.858762386075895873994744", "deposits": [ { "amount": "135173.4239508", @@ -3875,7 +3875,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "4820.5621738084295690256", + "locked_amount": "4795.7914088325511148428", "deposits": [ { "amount": "32499.86", @@ -3908,7 +3908,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "1569.0462099465551990007", + "locked_amount": "1560.9835663167216294824", "deposits": [ { "amount": "10833.29", @@ -3941,7 +3941,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "22749.93", "total_removed": "4720.860935375", - "locked_amount": "5865.445172922119371125", + "locked_amount": "5835.30521027486770269", "deposits": [ { "amount": "6500", @@ -4093,7 +4093,7 @@ "tranche_end": "2023-05-01T00:00:00.000Z", "total_added": "22500", "total_removed": "4373.451408", - "locked_amount": "9353.549436003684", + "locked_amount": "9322.0936924493556", "deposits": [ { "amount": "7500", @@ -4324,7 +4324,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "928642.9598472029154", - "locked_amount": "569988.740388336449589032", + "locked_amount": "568643.843947064974527452", "deposits": [ { "amount": "1852091.69", @@ -36594,7 +36594,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "592998.0503546212334", - "locked_amount": "900375.569704240824984490974", + "locked_amount": "898308.9321172145252782982", "deposits": [ { "amount": "1998.95815", @@ -37920,7 +37920,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15870102.715470999700000001", "total_removed": "565476.66021794547915452", - "locked_amount": "8492361.5461751373169210395250503968545553", + "locked_amount": "8485033.3819823595669181994950770177642607", "deposits": [ { "amount": "16249.93", @@ -43497,7 +43497,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "3926262.119252669397786782", - "locked_amount": "2118648.728898136211938441806431298", + "locked_amount": "2111883.414506134136228036415136674", "deposits": [ { "amount": "129284.449", @@ -50398,8 +50398,8 @@ "tranche_start": "2021-10-05T00:00:00.000Z", "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", - "total_removed": "2731059.487268130842706642", - "locked_amount": "520187.522728305183563542468210741", + "total_removed": "2749067.463242913023296295", + "locked_amount": "517514.506095744104601839105801837", "deposits": [ { "amount": "552496.6455", @@ -50548,6 +50548,21 @@ "user": "0xBc934494675a6ceB639B9EfEe5b9C0f017D35a75", "tx": "0x33da947571f71b4cd31f2cfc13cbcceba0bac110b7a975a4793afe40566d3741" }, + { + "amount": "4961.957448767374506", + "user": "0xafa64cCa337eFEE0AD827F6C2684e69275226e90", + "tx": "0x5ee84120105b5caa7e2d12e10bb2aeb234fcfaa416203d8b2b2fe68c06ed535e" + }, + { + "amount": "10871.612867264090097103", + "user": "0xC24da173A250e9Ca5c54870639EbE5f88be5102d", + "tx": "0xf39eb46d1f973f6a0bb31a553dc087fa94933994d18b1e46a630490c2b7cbb04" + }, + { + "amount": "2174.40565875071598655", + "user": "0x6ae83EAB68b7112BaD5AfD72d6B24546AbFF137D", + "tx": "0xb49529fae65600b960a8a6cebd02a4c8480983d0f399a14167b14462583cac47" + }, { "amount": "19117.297184565582142", "user": "0x1dD2718fd01d05C9F50Fce8Bb723A4C7483A1E15", @@ -51619,6 +51634,12 @@ } ], "withdrawals": [ + { + "amount": "2174.40565875071598655", + "user": "0x6ae83EAB68b7112BaD5AfD72d6B24546AbFF137D", + "tranche_id": 4, + "tx": "0xb49529fae65600b960a8a6cebd02a4c8480983d0f399a14167b14462583cac47" + }, { "amount": "3751.78499041934834165", "user": "0x6ae83EAB68b7112BaD5AfD72d6B24546AbFF137D", @@ -51705,8 +51726,8 @@ } ], "total_tokens": "92082.572555", - "withdrawn_tokens": "81632.04967906306698935", - "remaining_tokens": "10450.52287593693301065" + "withdrawn_tokens": "83806.4553378137829759", + "remaining_tokens": "8276.1172171862170241" }, { "address": "0x1dC9B91DE003fd503F25cB5d114cf0fc68F7aFe6", @@ -51734,6 +51755,12 @@ } ], "withdrawals": [ + { + "amount": "10871.612867264090097103", + "user": "0xC24da173A250e9Ca5c54870639EbE5f88be5102d", + "tranche_id": 4, + "tx": "0xf39eb46d1f973f6a0bb31a553dc087fa94933994d18b1e46a630490c2b7cbb04" + }, { "amount": "18757.845956872719119701", "user": "0xC24da173A250e9Ca5c54870639EbE5f88be5102d", @@ -51844,8 +51871,8 @@ } ], "total_tokens": "460415.072915097", - "withdrawn_tokens": "408161.740088926747515886", - "remaining_tokens": "52253.332826170252484114" + "withdrawn_tokens": "419033.352956190837612989", + "remaining_tokens": "41381.719958906162387011" }, { "address": "0xd66e4853c0880df150e7329974715BFC8d2da47D", @@ -52054,6 +52081,12 @@ } ], "withdrawals": [ + { + "amount": "4961.957448767374506", + "user": "0xafa64cCa337eFEE0AD827F6C2684e69275226e90", + "tranche_id": 4, + "tx": "0x5ee84120105b5caa7e2d12e10bb2aeb234fcfaa416203d8b2b2fe68c06ed535e" + }, { "amount": "4217.129347329502683", "user": "0xafa64cCa337eFEE0AD827F6C2684e69275226e90", @@ -52296,8 +52329,8 @@ } ], "total_tokens": "331498.5873", - "withdrawn_tokens": "296737.775114654365887", - "remaining_tokens": "34760.812185345634113" + "withdrawn_tokens": "301699.732563421740393", + "remaining_tokens": "29798.854736578259607" }, { "address": "0x16da609341ed67750A8BCC5AAa2005471006Cd77", @@ -52393,7 +52426,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "33624.6023877752685", - "locked_amount": "142669.640807515121014888389345492", + "locked_amount": "142342.18524674517985812977828514", "deposits": [ { "amount": "3000", From 05726c6a5a9ddd0d5bd0441a9293b40cdba0d3ea Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 15 Feb 2023 06:06:31 +0000 Subject: [PATCH 04/18] chore: update tranches Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/static/src/assets/mainnet-tranches.json | 36 ++++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 0270805a0..fa1451772 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -2761,7 +2761,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "86666.297", "total_removed": "0", - "locked_amount": "69568.3579221561395345826", + "locked_amount": "69510.0527421348261748854", "deposits": [ { "amount": "86666.297", @@ -2827,7 +2827,7 @@ "tranche_end": "2023-06-01T00:00:00.000Z", "total_added": "2500", "total_removed": "0", - "locked_amount": "1455.92121998372025", + "locked_amount": "1452.548204110704", "deposits": [ { "amount": "2500", @@ -3215,7 +3215,7 @@ "tranche_end": "2023-08-01T00:00:00.000Z", "total_added": "37500", "total_removed": "2836.415649675", - "locked_amount": "34597.5963014119125", + "locked_amount": "34546.72153161448875", "deposits": [ { "amount": "7500", @@ -3326,7 +3326,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "69504.885548978620656615", + "locked_amount": "69446.633565097834371165", "deposits": [ { "amount": "129999.45", @@ -3392,7 +3392,7 @@ "tranche_end": "2023-09-03T00:00:00.000Z", "total_added": "62600", "total_removed": "0", - "locked_amount": "34299.83741755454156", + "locked_amount": "34257.72295788940006", "deposits": [ { "amount": "10000", @@ -3585,7 +3585,7 @@ "tranche_end": "2023-09-17T00:00:00.000Z", "total_added": "5000", "total_removed": "0", - "locked_amount": "2931.384449518011", + "locked_amount": "2928.0206747843735", "deposits": [ { "amount": "5000", @@ -3796,7 +3796,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "11400.0196735017245359218", + "locked_amount": "11342.8799037324276367386", "deposits": [ { "amount": "97499.58", @@ -3829,7 +3829,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "98230.390980249184455396", - "locked_amount": "15581.858762386075895873994744", + "locked_amount": "15503.75856188116892882194152", "deposits": [ { "amount": "135173.4239508", @@ -3875,7 +3875,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "4795.7914088325511148428", + "locked_amount": "4771.7536944416561668758", "deposits": [ { "amount": "32499.86", @@ -3908,7 +3908,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "1560.9835663167216294824", + "locked_amount": "1553.1595235389431174483", "deposits": [ { "amount": "10833.29", @@ -3941,7 +3941,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "22749.93", "total_removed": "4720.860935375", - "locked_amount": "5835.30521027486770269", + "locked_amount": "5806.0571909031417520242", "deposits": [ { "amount": "6500", @@ -4093,7 +4093,7 @@ "tranche_end": "2023-05-01T00:00:00.000Z", "total_added": "22500", "total_removed": "4373.451408", - "locked_amount": "9322.0936924493556", + "locked_amount": "9291.56883057090225", "deposits": [ { "amount": "7500", @@ -4324,7 +4324,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "928642.9598472029154", - "locked_amount": "568643.843947064974527452", + "locked_amount": "567338.747533122715158164", "deposits": [ { "amount": "1852091.69", @@ -36594,7 +36594,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "592998.0503546212334", - "locked_amount": "898308.9321172145252782982", + "locked_amount": "896303.45331529618714078435", "deposits": [ { "amount": "1998.95815", @@ -37920,7 +37920,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15870102.715470999700000001", "total_removed": "565476.66021794547915452", - "locked_amount": "8485033.3819823595669181994950770177642607", + "locked_amount": "8477922.0829148016708502771674732236847797", "deposits": [ { "amount": "16249.93", @@ -43497,7 +43497,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "3926262.119252669397786782", - "locked_amount": "2111883.414506134136228036415136674", + "locked_amount": "2105318.308613038493896215510379221", "deposits": [ { "amount": "129284.449", @@ -50399,7 +50399,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "2749067.463242913023296295", - "locked_amount": "517514.506095744104601839105801837", + "locked_amount": "514920.593051952177933681285084806", "deposits": [ { "amount": "552496.6455", @@ -52426,7 +52426,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "33624.6023877752685", - "locked_amount": "142342.18524674517985812977828514", + "locked_amount": "142024.405666775607105232156976172", "deposits": [ { "amount": "3000", From 3f330e78c5fd0bdbffa19143ccf799041e8dc224 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 15 Feb 2023 10:11:01 +0100 Subject: [PATCH 05/18] chore(ci): print logs files in cypress pr workflow (#2906) --- .github/workflows/cypress-pr.yml | 14 -------------- .github/workflows/cypress-run.yml | 4 ++++ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cypress-pr.yml b/.github/workflows/cypress-pr.yml index 856633cd7..cfacf6ef5 100644 --- a/.github/workflows/cypress-pr.yml +++ b/.github/workflows/cypress-pr.yml @@ -50,20 +50,6 @@ jobs: projects=[${projects// /,}] echo PROJECTS=$projects >> $GITHUB_ENV - # Rename required because some of the files contains the colon character (in the dates) - - name: Rename files to allow archive - if: ${{ always() }} - run: | - while read -r file; do - mv "${file}" "$(echo ${file} | sed 's|:|-|g')" - done< <(find /home/runner/.vegacapsule/testnet/logs -type f) - - - uses: actions/upload-artifact@v3 - if: ${{ always() }} - with: - name: logs-${{ matrix.project }} - path: /home/runner/.vegacapsule/testnet/logs - outputs: projects: ${{ env.PROJECTS }} diff --git a/.github/workflows/cypress-run.yml b/.github/workflows/cypress-run.yml index c329bad8d..36696f31b 100644 --- a/.github/workflows/cypress-run.yml +++ b/.github/workflows/cypress-run.yml @@ -82,6 +82,10 @@ jobs: mv "${file}" "$(echo ${file} | sed 's|:|-|g')" done< <(find /home/runner/.vegacapsule/testnet/logs -type f) + - name: Print logs files + if: ${{ always() }} + run: ls -alsh /home/runner/.vegacapsule/testnet/logs/ + - uses: actions/upload-artifact@v3 if: ${{ always() }} with: From 200487a6fc2cf63dd855cd921612020e5de6f121 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 15 Feb 2023 12:07:55 +0000 Subject: [PATCH 06/18] chore: update tranches Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/static/src/assets/mainnet-tranches.json | 53 ++++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index fa1451772..58fc9aa1b 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -2761,7 +2761,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "86666.297", "total_removed": "0", - "locked_amount": "69510.0527421348261748854", + "locked_amount": "69450.4559220960784403951", "deposits": [ { "amount": "86666.297", @@ -2827,7 +2827,7 @@ "tranche_end": "2023-06-01T00:00:00.000Z", "total_added": "2500", "total_removed": "0", - "locked_amount": "1452.548204110704", + "locked_amount": "1449.1004655067155", "deposits": [ { "amount": "2500", @@ -3215,7 +3215,7 @@ "tranche_end": "2023-08-01T00:00:00.000Z", "total_added": "37500", "total_removed": "2836.415649675", - "locked_amount": "34546.72153161448875", + "locked_amount": "34494.7197283609575", "deposits": [ { "amount": "7500", @@ -3326,7 +3326,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "69446.633565097834371165", + "locked_amount": "69387.09111965860323927", "deposits": [ { "amount": "129999.45", @@ -3392,7 +3392,7 @@ "tranche_end": "2023-09-03T00:00:00.000Z", "total_added": "62600", "total_removed": "0", - "locked_amount": "34257.72295788940006", + "locked_amount": "34214.67553272451032", "deposits": [ { "amount": "10000", @@ -3585,7 +3585,7 @@ "tranche_end": "2023-09-17T00:00:00.000Z", "total_added": "5000", "total_removed": "0", - "locked_amount": "2928.0206747843735", + "locked_amount": "2924.582382039574", "deposits": [ { "amount": "5000", @@ -3796,7 +3796,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "11342.8799037324276367386", + "locked_amount": "11284.474311386236853919", "deposits": [ { "amount": "97499.58", @@ -3829,7 +3829,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "98230.390980249184455396", - "locked_amount": "15503.75856188116892882194152", + "locked_amount": "15423.928200448787463838379676", "deposits": [ { "amount": "135173.4239508", @@ -3875,7 +3875,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "4771.7536944416561668758", + "locked_amount": "4747.1834703522424073958", "deposits": [ { "amount": "32499.86", @@ -3908,7 +3908,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "1553.1595235389431174483", + "locked_amount": "1545.162154021650553376", "deposits": [ { "amount": "10833.29", @@ -3941,7 +3941,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "22749.93", "total_removed": "4720.860935375", - "locked_amount": "5806.0571909031417520242", + "locked_amount": "5776.1612374672770999372", "deposits": [ { "amount": "6500", @@ -4093,7 +4093,7 @@ "tranche_end": "2023-05-01T00:00:00.000Z", "total_added": "22500", "total_removed": "4373.451408", - "locked_amount": "9291.56883057090225", + "locked_amount": "9260.367748618784625", "deposits": [ { "amount": "7500", @@ -4324,7 +4324,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "928642.9598472029154", - "locked_amount": "567338.747533122715158164", + "locked_amount": "566004.739198245785666202", "deposits": [ { "amount": "1852091.69", @@ -36594,7 +36594,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "592998.0503546212334", - "locked_amount": "896303.45331529618714078435", + "locked_amount": "894253.452430246625983855407", "deposits": [ { "amount": "1998.95815", @@ -37920,7 +37920,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15870102.715470999700000001", "total_removed": "565476.66021794547915452", - "locked_amount": "8477922.0829148016708502771674732236847797", + "locked_amount": "8470652.9113990548483707594767424118153556", "deposits": [ { "amount": "16249.93", @@ -43497,7 +43497,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "3926262.119252669397786782", - "locked_amount": "2105318.308613038493896215510379221", + "locked_amount": "2098607.45588379818701050768788919", "deposits": [ { "amount": "129284.449", @@ -50399,7 +50399,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "2749067.463242913023296295", - "locked_amount": "514920.593051952177933681285084806", + "locked_amount": "512269.094551730007274963067958717", "deposits": [ { "amount": "552496.6455", @@ -52425,8 +52425,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", - "total_removed": "33624.6023877752685", - "locked_amount": "142024.405666775607105232156976172", + "total_removed": "33643.6376997992685", + "locked_amount": "141699.5713082349310180798604769", "deposits": [ { "amount": "3000", @@ -59105,6 +59105,11 @@ "user": "0xC91A06E92bFc696BCcFcDd564F376beDC40932cF", "tx": "0x20750a137fa15fd06a1c7b0a40226fd2f78310bba9b2246b1b4ab23db72e5177" }, + { + "amount": "19.035312024", + "user": "0x4F4A140E9B4a8403792970C6b5535ed0AA32c8A4", + "tx": "0x181a9afe9b3592427f1ee10f205e01f34ae7be383294e8d93e397766092bf6df" + }, { "amount": "13.1116203702", "user": "0x4cBC0C88d8FE503f62823B42f30a4900292C13bE", @@ -75384,6 +75389,12 @@ } ], "withdrawals": [ + { + "amount": "19.035312024", + "user": "0x4F4A140E9B4a8403792970C6b5535ed0AA32c8A4", + "tranche_id": 5, + "tx": "0x181a9afe9b3592427f1ee10f205e01f34ae7be383294e8d93e397766092bf6df" + }, { "amount": "19.78325723", "user": "0x4F4A140E9B4a8403792970C6b5535ed0AA32c8A4", @@ -75410,8 +75421,8 @@ } ], "total_tokens": "200", - "withdrawn_tokens": "120.858288938", - "remaining_tokens": "79.141711062" + "withdrawn_tokens": "139.893600962", + "remaining_tokens": "60.106399038" }, { "address": "0x4DA5acEc788beF3d7F67cEA1c3CfeE1a41c1A21A", From 969bfd694564292550182ead8ab69dddceb42eaa Mon Sep 17 00:00:00 2001 From: Art Date: Wed, 15 Feb 2023 15:20:01 +0100 Subject: [PATCH 07/18] feat(explorer): markets and market details pages (#2914) --- .../src/integration/network.cy.js | 2 +- apps/explorer/src/app/app.tsx | 30 +-- .../components/dialogs/json-viewer-dialog.tsx | 56 ++++ .../src/app/components/header/header.spec.tsx | 2 +- .../src/app/components/header/header.tsx | 14 +- .../src/app/components/main/index.tsx | 2 +- .../app/components/markets/market-details.tsx | 246 ++++++++++++++++++ .../app/components/markets/markets-table.tsx | 132 ++++++++++ .../explorer/src/app/components/nav/index.tsx | 46 +--- apps/explorer/src/app/components/nav/nav.tsx | 181 +++++++++++++ .../src/app/routes/markets/Markets.graphql | 140 ---------- .../routes/markets/__generated__/Markets.ts | 180 ------------- .../src/app/routes/markets/index.spec.tsx | 48 ---- .../explorer/src/app/routes/markets/index.tsx | 46 +--- .../src/app/routes/markets/market-page.tsx | 68 +++++ .../src/app/routes/markets/markets-page.tsx | 31 +++ .../explorer/src/app/routes/router-config.tsx | 33 ++- libs/apollo-client/src/cache-config.ts | 52 ++++ libs/apollo-client/src/index.ts | 1 + .../market-info/MarketInfoNoCandles.graphql | 147 +++++++++++ .../__generated__/MarketInfoNoCandles.ts | 190 ++++++++++++++ .../src/components/market-info/index.ts | 2 + .../market-info/info-key-value-table.tsx | 7 +- .../market-info/market-info-data-provider.ts | 12 + 24 files changed, 1163 insertions(+), 505 deletions(-) create mode 100644 apps/explorer/src/app/components/dialogs/json-viewer-dialog.tsx create mode 100644 apps/explorer/src/app/components/markets/market-details.tsx create mode 100644 apps/explorer/src/app/components/markets/markets-table.tsx create mode 100644 apps/explorer/src/app/components/nav/nav.tsx delete mode 100644 apps/explorer/src/app/routes/markets/Markets.graphql delete mode 100644 apps/explorer/src/app/routes/markets/__generated__/Markets.ts delete mode 100644 apps/explorer/src/app/routes/markets/index.spec.tsx create mode 100644 apps/explorer/src/app/routes/markets/market-page.tsx create mode 100644 apps/explorer/src/app/routes/markets/markets-page.tsx create mode 100644 libs/apollo-client/src/cache-config.ts create mode 100644 libs/market-info/src/components/market-info/MarketInfoNoCandles.graphql create mode 100644 libs/market-info/src/components/market-info/__generated__/MarketInfoNoCandles.ts diff --git a/apps/explorer-e2e/src/integration/network.cy.js b/apps/explorer-e2e/src/integration/network.cy.js index 5afd69d36..cea6b65f9 100644 --- a/apps/explorer-e2e/src/integration/network.cy.js +++ b/apps/explorer-e2e/src/integration/network.cy.js @@ -247,7 +247,7 @@ context('Network parameters page', { tags: '@smoke' }, function () { .and('include', darkThemeSideMenuBackgroundColor); }); - it('should be able to see network parameters - on mobile', function () { + it.skip('should be able to see network parameters - on mobile', function () { cy.common_switch_to_mobile_and_click_toggle(); cy.get(networkParametersNavigation).click(); cy.get_network_parameters().then((network_parameters) => { diff --git a/apps/explorer/src/app/app.tsx b/apps/explorer/src/app/app.tsx index 7621aada8..440ff3756 100644 --- a/apps/explorer/src/app/app.tsx +++ b/apps/explorer/src/app/app.tsx @@ -1,18 +1,16 @@ import classnames from 'classnames'; -import { useState, useEffect } from 'react'; -import { useLocation } from 'react-router-dom'; import { EnvironmentProvider, NetworkLoader } from '@vegaprotocol/environment'; import { Nav } from './components/nav'; import { Header } from './components/header'; import { Main } from './components/main'; import { TendermintWebsocketProvider } from './contexts/websocket/tendermint-websocket-provider'; -import type { InMemoryCacheConfig } from '@apollo/client'; import { Footer } from './components/footer/footer'; import { AnnouncementBanner, ExternalLink } from '@vegaprotocol/ui-toolkit'; import { AssetDetailsDialog, useAssetDetailsDialogStore, } from '@vegaprotocol/assets'; +import { DEFAULT_CACHE_CONFIG } from '@vegaprotocol/apollo-client'; const DialogsContainer = () => { const { isOpen, id, trigger, asJson, setOpen } = useAssetDetailsDialogStore(); @@ -28,36 +26,18 @@ const DialogsContainer = () => { }; function App() { - const [menuOpen, setMenuOpen] = useState(false); - - const location = useLocation(); - - useEffect(() => { - setMenuOpen(false); - }, [location]); - - const cacheConfig: InMemoryCacheConfig = { - typePolicies: { - statistics: { - keyFields: false, - }, - }, - }; - const layoutClasses = classnames( 'grid grid-rows-[auto_1fr_auto] grid-cols-[1fr] md:grid-rows-[auto_minmax(700px,_1fr)_auto] md:grid-cols-[300px_1fr]', 'min-h-[100vh] mx-auto my-0', 'border-neutral-700 dark:border-neutral-300 lg:border-l lg:border-r', 'bg-white dark:bg-black', 'antialiased text-black dark:text-white', - { - 'h-[100vh] min-h-auto overflow-hidden': menuOpen, - } + 'overflow-hidden relative' ); return ( - +
Mainnet sim 2 coming in March! @@ -68,8 +48,8 @@ function App() {
-
-
diff --git a/apps/explorer/src/app/components/dialogs/json-viewer-dialog.tsx b/apps/explorer/src/app/components/dialogs/json-viewer-dialog.tsx new file mode 100644 index 000000000..a3c032f4e --- /dev/null +++ b/apps/explorer/src/app/components/dialogs/json-viewer-dialog.tsx @@ -0,0 +1,56 @@ +import { t } from '@vegaprotocol/react-helpers'; +import { + Button, + Dialog, + Icon, + SyntaxHighlighter, +} from '@vegaprotocol/ui-toolkit'; + +type JsonViewerDialogProps = { + title: string; + content: unknown; + open: boolean; + onChange: (isOpen: boolean) => void; + trigger?: HTMLElement; +}; +export const JsonViewerDialog = ({ + title, + content, + open, + onChange, + trigger, +}: JsonViewerDialogProps) => { + return ( + } + open={open} + onChange={(isOpen) => onChange(isOpen)} + onCloseAutoFocus={(e) => { + /** + * This mimics radix's default behaviour that focuses the dialog's + * trigger after closing itself + */ + if (trigger) { + e.preventDefault(); + trigger.focus(); + } + }} + > +
+ +
+
+ +
+
+ ); +}; diff --git a/apps/explorer/src/app/components/header/header.spec.tsx b/apps/explorer/src/app/components/header/header.spec.tsx index 36c727f5f..b6a1cb184 100644 --- a/apps/explorer/src/app/components/header/header.spec.tsx +++ b/apps/explorer/src/app/components/header/header.spec.tsx @@ -14,7 +14,7 @@ jest.mock('../search', () => ({ const renderComponent = () => ( -
+
); diff --git a/apps/explorer/src/app/components/header/header.tsx b/apps/explorer/src/app/components/header/header.tsx index 4d0b3b1f1..67cc12488 100644 --- a/apps/explorer/src/app/components/header/header.tsx +++ b/apps/explorer/src/app/components/header/header.tsx @@ -4,15 +4,11 @@ import { ThemeSwitcher, Icon } from '@vegaprotocol/ui-toolkit'; import { t } from '@vegaprotocol/react-helpers'; import { Search } from '../search'; import { Routes } from '../../routes/route-names'; -import type { Dispatch, SetStateAction } from 'react'; import { NetworkSwitcher } from '@vegaprotocol/environment'; +import { useNavStore } from '../nav'; -interface ThemeToggleProps { - menuOpen: boolean; - setMenuOpen: Dispatch>; -} - -export const Header = ({ menuOpen, setMenuOpen }: ThemeToggleProps) => { +export const Header = () => { + const [open, toggle] = useNavStore((state) => [state.open, state.toggle]); const headerClasses = classnames( 'md:col-span-2', 'grid grid-rows-2 md:grid-rows-1 grid-cols-[1fr_auto] md:grid-cols-[auto_1fr_auto] items-center', @@ -36,9 +32,9 @@ export const Header = ({ menuOpen, setMenuOpen }: ThemeToggleProps) => { diff --git a/apps/explorer/src/app/components/main/index.tsx b/apps/explorer/src/app/components/main/index.tsx index 15fa742ad..022d5f98c 100644 --- a/apps/explorer/src/app/components/main/index.tsx +++ b/apps/explorer/src/app/components/main/index.tsx @@ -2,7 +2,7 @@ import { AppRouter } from '../../routes'; export const Main = () => { return ( -
+
); diff --git a/apps/explorer/src/app/components/markets/market-details.tsx b/apps/explorer/src/app/components/markets/market-details.tsx new file mode 100644 index 000000000..27fffab12 --- /dev/null +++ b/apps/explorer/src/app/components/markets/market-details.tsx @@ -0,0 +1,246 @@ +import { + addDecimalsFormatNumber, + formatNumberPercentage, + getMarketExpiryDateFormatted, + t, +} from '@vegaprotocol/react-helpers'; +import type { MarketInfoNoCandlesQuery } from '@vegaprotocol/market-info'; +import { MarketInfoTable } from '@vegaprotocol/market-info'; +import pick from 'lodash/pick'; +import { + MarketStateMapping, + MarketTradingModeMapping, +} from '@vegaprotocol/types'; +import { AssetDetailsTable, useAssetDataProvider } from '@vegaprotocol/assets'; +import { Splash } from '@vegaprotocol/ui-toolkit'; +import BigNumber from 'bignumber.js'; +import { useMemo } from 'react'; +import { Link } from 'react-router-dom'; + +export const MarketDetails = ({ + market, +}: { + market: MarketInfoNoCandlesQuery['market']; +}) => { + const assetSymbol = + market?.tradableInstrument.instrument.product?.settlementAsset.symbol; + const assetId = useMemo( + () => market?.tradableInstrument.instrument.product?.settlementAsset.id, + [market] + ); + const { data: asset } = useAssetDataProvider(assetId ?? ''); + + if (!market) return null; + + const keyDetails = { + ...pick(market, 'decimalPlaces', 'positionDecimalPlaces', 'tradingMode'), + state: MarketStateMapping[market.state], + }; + const assetDecimals = + market.tradableInstrument.instrument.product.settlementAsset.decimals; + + const panels = [ + { + title: t('Key details'), + content: ( + + ), + }, + { + title: t('Instrument'), + content: ( + + ), + }, + { + title: t('Settlement asset'), + content: asset ? ( + + ) : ( + {t('No data')} + ), + }, + { + title: t('Metadata'), + content: ( + { + const [key, value] = tag.split(':'); + return { [key]: value }; + }) + .reduce((acc, curr) => ({ ...acc, ...curr }), {}), + }} + /> + ), + }, + { + title: t('Risk model'), + content: ( + + ), + }, + { + title: t('Risk parameters'), + content: ( + + ), + }, + { + title: t('Risk factors'), + content: ( + + ), + }, + ...(market.priceMonitoringSettings?.parameters?.triggers || []).map( + (trigger, i) => ({ + title: t(`Price monitoring trigger ${i + 1}`), + content: , + }) + ), + ...(market.data?.priceMonitoringBounds || []).map((trigger, i) => ({ + title: t(`Price monitoring bound ${i + 1}`), + content: ( + <> + + + + ), + })), + { + title: t('Liquidity monitoring parameters'), + content: ( + + ), + }, + { + title: t('Liquidity price range'), + content: ( + + ), + }, + { + title: t('Oracle'), + content: ( + + + {t('View settlement data oracle specification')} + + + {t('View termination oracle specification')} + + + ), + }, + ]; + + return ( + <> + {panels.map((p) => ( +
+

{p.title}

+ {p.content} +
+ ))} + + ); +}; diff --git a/apps/explorer/src/app/components/markets/markets-table.tsx b/apps/explorer/src/app/components/markets/markets-table.tsx new file mode 100644 index 000000000..680cbaa61 --- /dev/null +++ b/apps/explorer/src/app/components/markets/markets-table.tsx @@ -0,0 +1,132 @@ +import type { MarketFieldsFragment } from '@vegaprotocol/market-list'; +import { t } from '@vegaprotocol/react-helpers'; +import type { + VegaICellRendererParams, + VegaValueGetterParams, +} from '@vegaprotocol/ui-toolkit'; +import { ButtonLink } from '@vegaprotocol/ui-toolkit'; +import type { AgGridReact } from 'ag-grid-react'; +import { AgGridColumn } from 'ag-grid-react'; +import { AgGridDynamic as AgGrid } from '@vegaprotocol/ui-toolkit'; +import { useRef, useLayoutEffect } from 'react'; +import { BREAKPOINT_MD } from '../../config/breakpoints'; +import { MarketStateMapping } from '@vegaprotocol/types'; +import { useAssetDetailsDialogStore } from '@vegaprotocol/assets'; +import type { RowClickedEvent } from 'ag-grid-community'; +import { Link, useNavigate } from 'react-router-dom'; + +type MarketsTableProps = { + data: MarketFieldsFragment[] | null; +}; +export const MarketsTable = ({ data }: MarketsTableProps) => { + const openAssetDetailsDialog = useAssetDetailsDialogStore( + (state) => state.open + ); + + const navigate = useNavigate(); + + const gridRef = useRef(null); + useLayoutEffect(() => { + const showColumnsOnDesktop = () => { + gridRef.current?.columnApi.setColumnsVisible( + ['id', 'state', 'asset'], + window.innerWidth > BREAKPOINT_MD + ); + }; + window.addEventListener('resize', showColumnsOnDesktop); + return () => { + window.removeEventListener('resize', showColumnsOnDesktop); + }; + }, []); + + return ( + data.id} + overlayNoRowsTemplate={t('This chain has no markets')} + domLayout="autoHeight" + defaultColDef={{ + flex: 1, + resizable: true, + sortable: true, + filter: true, + filterParams: { buttons: ['reset'] }, + autoHeight: true, + }} + suppressCellFocus={true} + onRowClicked={({ data, event }: RowClickedEvent) => { + if ((event?.target as HTMLElement).tagName.toUpperCase() !== 'BUTTON') { + navigate(data.id); + } + }} + > + + + ) => { + return data?.state ? MarketStateMapping[data?.state] : '-'; + }} + /> + ) => + value ? ( + { + openAssetDetailsDialog(value.id, e.target as HTMLElement); + }} + > + {value.symbol} + + ) : ( + '' + ) + } + /> + + ) => + value ? ( + + {t('View details')} + + ) : ( + '' + ) + } + /> + + ); +}; diff --git a/apps/explorer/src/app/components/nav/index.tsx b/apps/explorer/src/app/components/nav/index.tsx index 0b2c88330..38d674589 100644 --- a/apps/explorer/src/app/components/nav/index.tsx +++ b/apps/explorer/src/app/components/nav/index.tsx @@ -1,45 +1 @@ -import { NavLink } from 'react-router-dom'; -import routerConfig from '../../routes/router-config'; -import classnames from 'classnames'; - -interface NavProps { - menuOpen: boolean; -} - -export const Nav = ({ menuOpen }: NavProps) => { - return ( - - ); -}; +export * from './nav'; diff --git a/apps/explorer/src/app/components/nav/nav.tsx b/apps/explorer/src/app/components/nav/nav.tsx new file mode 100644 index 000000000..8b511e9a2 --- /dev/null +++ b/apps/explorer/src/app/components/nav/nav.tsx @@ -0,0 +1,181 @@ +import { NavLink, useLocation } from 'react-router-dom'; +import type { Navigable } from '../../routes/router-config'; +import routerConfig from '../../routes/router-config'; +import classnames from 'classnames'; +import { create } from 'zustand'; +import { + useCallback, + useEffect, + useLayoutEffect, + useMemo, + useRef, +} from 'react'; +import { Icon } from '@vegaprotocol/ui-toolkit'; +import first from 'lodash/first'; +import last from 'lodash/last'; +import { BREAKPOINT_MD } from '../../config/breakpoints'; + +type NavStore = { + open: boolean; + toggle: () => void; + hide: () => void; +}; + +export const useNavStore = create((set, get) => ({ + open: false, + toggle: () => set({ open: !get().open }), + hide: () => set({ open: false }), +})); + +const NavLinks = ({ links }: { links: Navigable[] }) => { + const navLinks = links.map((r) => ( +
  • + + classnames( + 'block mb-2 px-2', + 'text-lg hover:bg-vega-pink dark:hover:bg-vega-yellow hover:text-white dark:hover:text-black', + { + 'bg-vega-pink text-white dark:bg-vega-yellow dark:text-black': + isActive, + } + ) + } + > + {r.text} + +
  • + )); + + return
      {navLinks}
    ; +}; + +export const Nav = () => { + const [open, hide] = useNavStore((state) => [state.open, state.hide]); + const location = useLocation(); + + const navRef = useRef(null); + const btnRef = useRef(null); + + const focusable = useMemo( + () => + navRef.current + ? [ + ...(navRef.current.querySelectorAll( + 'a, button' + ) as NodeListOf), + ] + : [], + // eslint-disable-next-line react-hooks/exhaustive-deps + [navRef.current] // do not remove `navRef.current` from deps + ); + + const closeNav = useCallback(() => { + hide(); + console.log(focusable); + focusable.forEach((fe) => + fe.setAttribute( + 'tabindex', + window.innerWidth > BREAKPOINT_MD ? '0' : '-1' + ) + ); + }, [focusable, hide]); + + // close navigation when location changes + useEffect(() => { + closeNav(); + }, [closeNav, location]); + + useLayoutEffect(() => { + if (open) { + focusable.forEach((fe) => fe.setAttribute('tabindex', '0')); + } + + document.body.style.overflow = open ? 'hidden' : ''; + const offset = + document.querySelector('header')?.getBoundingClientRect().top || 0; + if (navRef.current) { + navRef.current.style.height = `calc(100vh - ${offset}px)`; + } + + // focus current by default + if (navRef.current && open) { + (navRef.current.querySelector('a[aria-current]') as HTMLElement)?.focus(); + } + + const closeOnEsc = (e: KeyboardEvent) => { + if (e.key === 'Escape') { + closeNav(); + } + }; + + // tabbing loop + const focusLast = (e: FocusEvent) => { + e.preventDefault(); + const isNavElement = + e.relatedTarget && navRef.current?.contains(e.relatedTarget as Node); + if (!isNavElement && open) { + last(focusable)?.focus(); + } + }; + const focusFirst = (e: FocusEvent) => { + e.preventDefault(); + const isNavElement = + e.relatedTarget && navRef.current?.contains(e.relatedTarget as Node); + if (!isNavElement && open) { + first(focusable)?.focus(); + } + }; + + const resetOnDesktop = () => { + focusable.forEach((fe) => + fe.setAttribute( + 'tabindex', + window.innerWidth > BREAKPOINT_MD ? '0' : '-1' + ) + ); + }; + + window.addEventListener('resize', resetOnDesktop); + + first(focusable)?.addEventListener('focusout', focusLast); + last(focusable)?.addEventListener('focusout', focusFirst); + + document.addEventListener('keydown', closeOnEsc); + return () => { + window.removeEventListener('resize', resetOnDesktop); + document.removeEventListener('keydown', closeOnEsc); + first(focusable)?.removeEventListener('focusout', focusLast); + last(focusable)?.removeEventListener('focusout', focusFirst); + }; + }, [closeNav, focusable, open]); + + return ( + + ); +}; diff --git a/apps/explorer/src/app/routes/markets/Markets.graphql b/apps/explorer/src/app/routes/markets/Markets.graphql deleted file mode 100644 index 89fd5e170..000000000 --- a/apps/explorer/src/app/routes/markets/Markets.graphql +++ /dev/null @@ -1,140 +0,0 @@ -query ExplorerMarkets { - marketsConnection { - edges { - node { - id - fees { - factors { - makerFee - infrastructureFee - liquidityFee - } - } - tradableInstrument { - instrument { - name - metadata { - tags - } - code - product { - ... on Future { - settlementAsset { - id - name - decimals - globalRewardPoolAccount { - balance - } - } - } - } - } - riskModel { - ... on LogNormalRiskModel { - tau - riskAversionParameter - params { - r - sigma - mu - } - } - ... on SimpleRiskModel { - params { - factorLong - factorShort - } - } - } - marginCalculator { - scalingFactors { - searchLevel - initialMargin - collateralRelease - } - } - } - decimalPlaces - openingAuction { - durationSecs - volume - } - priceMonitoringSettings { - parameters { - triggers { - horizonSecs - probability - auctionExtensionSecs - } - } - } - liquidityMonitoringParameters { - triggeringRatio - targetStakeParameters { - timeWindow - scalingFactor - } - } - tradingMode - state - proposal { - id - } - state - accountsConnection { - edges { - node { - asset { - id - name - } - balance - type - } - } - } - data { - markPrice - bestBidPrice - bestBidVolume - bestOfferPrice - bestOfferVolume - bestStaticBidPrice - bestStaticBidVolume - bestStaticOfferPrice - bestStaticOfferVolume - midPrice - staticMidPrice - timestamp - openInterest - auctionEnd - auctionStart - indicativePrice - indicativeVolume - trigger - extensionTrigger - targetStake - suppliedStake - priceMonitoringBounds { - minValidPrice - maxValidPrice - trigger { - auctionExtensionSecs - probability - } - referencePrice - } - marketValueProxy - liquidityProviderFeeShare { - party { - id - } - equityLikeShare - averageEntryValuation - } - } - } - } - } -} diff --git a/apps/explorer/src/app/routes/markets/__generated__/Markets.ts b/apps/explorer/src/app/routes/markets/__generated__/Markets.ts deleted file mode 100644 index 3ef1a43f3..000000000 --- a/apps/explorer/src/app/routes/markets/__generated__/Markets.ts +++ /dev/null @@ -1,180 +0,0 @@ -import * as Types from '@vegaprotocol/types'; - -import { gql } from '@apollo/client'; -import * as Apollo from '@apollo/client'; -const defaultOptions = {} as const; -export type ExplorerMarketsQueryVariables = Types.Exact<{ [key: string]: never; }>; - - -export type ExplorerMarketsQuery = { __typename?: 'Query', marketsConnection?: { __typename?: 'MarketConnection', edges: Array<{ __typename?: 'MarketEdge', node: { __typename?: 'Market', id: string, decimalPlaces: number, tradingMode: Types.MarketTradingMode, state: Types.MarketState, fees: { __typename?: 'Fees', factors: { __typename?: 'FeeFactors', makerFee: string, infrastructureFee: string, liquidityFee: string } }, tradableInstrument: { __typename?: 'TradableInstrument', instrument: { __typename?: 'Instrument', name: string, code: string, metadata: { __typename?: 'InstrumentMetadata', tags?: Array | null }, product: { __typename?: 'Future', settlementAsset: { __typename?: 'Asset', id: string, name: string, decimals: number, globalRewardPoolAccount?: { __typename?: 'AccountBalance', balance: string } | null } } }, riskModel: { __typename?: 'LogNormalRiskModel', tau: number, riskAversionParameter: number, params: { __typename?: 'LogNormalModelParams', r: number, sigma: number, mu: number } } | { __typename?: 'SimpleRiskModel', params: { __typename?: 'SimpleRiskModelParams', factorLong: number, factorShort: number } }, marginCalculator?: { __typename?: 'MarginCalculator', scalingFactors: { __typename?: 'ScalingFactors', searchLevel: number, initialMargin: number, collateralRelease: number } } | null }, openingAuction: { __typename?: 'AuctionDuration', durationSecs: number, volume: number }, priceMonitoringSettings: { __typename?: 'PriceMonitoringSettings', parameters?: { __typename?: 'PriceMonitoringParameters', triggers?: Array<{ __typename?: 'PriceMonitoringTrigger', horizonSecs: number, probability: number, auctionExtensionSecs: number }> | null } | null }, liquidityMonitoringParameters: { __typename?: 'LiquidityMonitoringParameters', triggeringRatio: string, targetStakeParameters: { __typename?: 'TargetStakeParameters', timeWindow: number, scalingFactor: number } }, proposal?: { __typename?: 'Proposal', id?: string | null } | null, accountsConnection?: { __typename?: 'AccountsConnection', edges?: Array<{ __typename?: 'AccountEdge', node: { __typename?: 'AccountBalance', balance: string, type: Types.AccountType, asset: { __typename?: 'Asset', id: string, name: string } } } | null> | null } | null, data?: { __typename?: 'MarketData', markPrice: string, bestBidPrice: string, bestBidVolume: string, bestOfferPrice: string, bestOfferVolume: string, bestStaticBidPrice: string, bestStaticBidVolume: string, bestStaticOfferPrice: string, bestStaticOfferVolume: string, midPrice: string, staticMidPrice: string, timestamp: any, openInterest: string, auctionEnd?: string | null, auctionStart?: string | null, indicativePrice: string, indicativeVolume: string, trigger: Types.AuctionTrigger, extensionTrigger: Types.AuctionTrigger, targetStake?: string | null, suppliedStake?: string | null, marketValueProxy: string, priceMonitoringBounds?: Array<{ __typename?: 'PriceMonitoringBounds', minValidPrice: string, maxValidPrice: string, referencePrice: string, trigger: { __typename?: 'PriceMonitoringTrigger', auctionExtensionSecs: number, probability: number } }> | null, liquidityProviderFeeShare?: Array<{ __typename?: 'LiquidityProviderFeeShare', equityLikeShare: string, averageEntryValuation: string, party: { __typename?: 'Party', id: string } }> | null } | null } }> } | null }; - - -export const ExplorerMarketsDocument = gql` - query ExplorerMarkets { - marketsConnection { - edges { - node { - id - fees { - factors { - makerFee - infrastructureFee - liquidityFee - } - } - tradableInstrument { - instrument { - name - metadata { - tags - } - code - product { - ... on Future { - settlementAsset { - id - name - decimals - globalRewardPoolAccount { - balance - } - } - } - } - } - riskModel { - ... on LogNormalRiskModel { - tau - riskAversionParameter - params { - r - sigma - mu - } - } - ... on SimpleRiskModel { - params { - factorLong - factorShort - } - } - } - marginCalculator { - scalingFactors { - searchLevel - initialMargin - collateralRelease - } - } - } - decimalPlaces - openingAuction { - durationSecs - volume - } - priceMonitoringSettings { - parameters { - triggers { - horizonSecs - probability - auctionExtensionSecs - } - } - } - liquidityMonitoringParameters { - triggeringRatio - targetStakeParameters { - timeWindow - scalingFactor - } - } - tradingMode - state - proposal { - id - } - state - accountsConnection { - edges { - node { - asset { - id - name - } - balance - type - } - } - } - data { - markPrice - bestBidPrice - bestBidVolume - bestOfferPrice - bestOfferVolume - bestStaticBidPrice - bestStaticBidVolume - bestStaticOfferPrice - bestStaticOfferVolume - midPrice - staticMidPrice - timestamp - openInterest - auctionEnd - auctionStart - indicativePrice - indicativeVolume - trigger - extensionTrigger - targetStake - suppliedStake - priceMonitoringBounds { - minValidPrice - maxValidPrice - trigger { - auctionExtensionSecs - probability - } - referencePrice - } - marketValueProxy - liquidityProviderFeeShare { - party { - id - } - equityLikeShare - averageEntryValuation - } - } - } - } - } -} - `; - -/** - * __useExplorerMarketsQuery__ - * - * To run a query within a React component, call `useExplorerMarketsQuery` and pass it any options that fit your needs. - * When your component renders, `useExplorerMarketsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useExplorerMarketsQuery({ - * variables: { - * }, - * }); - */ -export function useExplorerMarketsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ExplorerMarketsDocument, options); - } -export function useExplorerMarketsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ExplorerMarketsDocument, options); - } -export type ExplorerMarketsQueryHookResult = ReturnType; -export type ExplorerMarketsLazyQueryHookResult = ReturnType; -export type ExplorerMarketsQueryResult = Apollo.QueryResult; \ No newline at end of file diff --git a/apps/explorer/src/app/routes/markets/index.spec.tsx b/apps/explorer/src/app/routes/markets/index.spec.tsx deleted file mode 100644 index 7786261a6..000000000 --- a/apps/explorer/src/app/routes/markets/index.spec.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { MockedProvider } from '@apollo/client/testing'; -import { render } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import Markets from './index'; -import type { MockedResponse } from '@apollo/client/testing'; -import { ExplorerMarketsDocument } from './__generated__/Markets'; - -function renderComponent(mock: MockedResponse[]) { - return ( - - - - - - ); -} - -describe('Markets index', () => { - it('Renders loader when loading', async () => { - const mock = { - request: { - query: ExplorerMarketsDocument, - }, - result: { - data: { - marketsConnection: [], - }, - }, - }; - const res = render(renderComponent([mock])); - expect(await res.findByTestId('loader')).toBeInTheDocument(); - }); - - it('Renders EmptyList when loading completes and there are no results', async () => { - const mock = { - request: { - query: ExplorerMarketsDocument, - }, - result: { - data: { - marketsConnection: [], - }, - }, - }; - const res = render(renderComponent([mock])); - expect(await res.findByTestId('emptylist')).toBeInTheDocument(); - }); -}); diff --git a/apps/explorer/src/app/routes/markets/index.tsx b/apps/explorer/src/app/routes/markets/index.tsx index 3c87feb68..23da6fdc1 100644 --- a/apps/explorer/src/app/routes/markets/index.tsx +++ b/apps/explorer/src/app/routes/markets/index.tsx @@ -1,44 +1,2 @@ -import React from 'react'; -import { Loader, SyntaxHighlighter } from '@vegaprotocol/ui-toolkit'; -import { RouteTitle } from '../../components/route-title'; -import { SubHeading } from '../../components/sub-heading'; -import { t } from '@vegaprotocol/react-helpers'; -import { useExplorerMarketsQuery } from './__generated__/Markets'; -import { useScrollToLocation } from '../../hooks/scroll-to-location'; -import { useDocumentTitle } from '../../hooks/use-document-title'; -import EmptyList from '../../components/empty-list/empty-list'; - -const Markets = () => { - const { data, loading } = useExplorerMarketsQuery(); - - useScrollToLocation(); - useDocumentTitle(['Markets']); - - const m = data?.marketsConnection?.edges; - - return ( -
    - {t('Markets')} - - {m ? ( - m.map((e) => ( - - - {e.node.tradableInstrument.instrument.name} - - - - )) - ) : loading ? ( - - ) : ( - - )} -
    - ); -}; - -export default Markets; +export * from './markets-page'; +export * from './market-page'; diff --git a/apps/explorer/src/app/routes/markets/market-page.tsx b/apps/explorer/src/app/routes/markets/market-page.tsx new file mode 100644 index 000000000..7c90251e5 --- /dev/null +++ b/apps/explorer/src/app/routes/markets/market-page.tsx @@ -0,0 +1,68 @@ +import { t, useDataProvider } from '@vegaprotocol/react-helpers'; +import { AsyncRenderer, Button } from '@vegaprotocol/ui-toolkit'; +import { useMemo, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { MarketDetails } from '../../components/markets/market-details'; +import { RouteTitle } from '../../components/route-title'; +import { useScrollToLocation } from '../../hooks/scroll-to-location'; +import { useDocumentTitle } from '../../hooks/use-document-title'; +import compact from 'lodash/compact'; +import { JsonViewerDialog } from '../../components/dialogs/json-viewer-dialog'; +import { marketInfoNoCandlesDataProvider } from '@vegaprotocol/market-info'; + +export const MarketPage = () => { + useScrollToLocation(); + + const { marketId } = useParams<{ marketId: string }>(); + + const variables = useMemo( + () => ({ + marketId, + }), + [marketId] + ); + + const { data, loading, error } = useDataProvider({ + dataProvider: marketInfoNoCandlesDataProvider, + skipUpdates: true, + variables, + }); + + useDocumentTitle( + compact([ + 'Market details', + data?.market?.tradableInstrument.instrument.name, + ]) + ); + + const [dialogOpen, setDialogOpen] = useState(false); + + return ( + <> +
    + + {data?.market?.tradableInstrument.instrument.name} + + +
    + +
    + +
    +
    + setDialogOpen(isOpen)} + title={data?.market?.tradableInstrument.instrument.name || ''} + content={data?.market} + /> + + ); +}; diff --git a/apps/explorer/src/app/routes/markets/markets-page.tsx b/apps/explorer/src/app/routes/markets/markets-page.tsx new file mode 100644 index 000000000..04033c957 --- /dev/null +++ b/apps/explorer/src/app/routes/markets/markets-page.tsx @@ -0,0 +1,31 @@ +import { useScrollToLocation } from '../../hooks/scroll-to-location'; +import { useDocumentTitle } from '../../hooks/use-document-title'; +import { marketsProvider } from '@vegaprotocol/market-list'; +import { RouteTitle } from '../../components/route-title'; +import { AsyncRenderer } from '@vegaprotocol/ui-toolkit'; +import { t, useDataProvider } from '@vegaprotocol/react-helpers'; +import { MarketsTable } from '../../components/markets/markets-table'; + +export const MarketsPage = () => { + useDocumentTitle(['Markets']); + useScrollToLocation(); + + const { data, loading, error } = useDataProvider({ + dataProvider: marketsProvider, + skipUpdates: true, + }); + + return ( +
    + {t('Markets')} + + + +
    + ); +}; diff --git a/apps/explorer/src/app/routes/router-config.tsx b/apps/explorer/src/app/routes/router-config.tsx index b55b5bdae..aa6fdb1e1 100644 --- a/apps/explorer/src/app/routes/router-config.tsx +++ b/apps/explorer/src/app/routes/router-config.tsx @@ -2,7 +2,6 @@ import { Assets } from './assets'; import BlockPage from './blocks'; import Governance from './governance'; import Home from './home'; -import Markets from './markets'; import OraclePage from './oracles'; import Oracles from './oracles/home'; import { Oracle } from './oracles/id'; @@ -21,8 +20,13 @@ import flags from '../config/flags'; import { t } from '@vegaprotocol/react-helpers'; import { Routes } from './route-names'; import { NetworkParameters } from './network-parameters'; +import type { RouteObject } from 'react-router-dom'; +import { MarketPage, MarketsPage } from './markets'; -const partiesRoutes = flags.parties +export type Navigable = { path: string; name: string; text: string }; +type Route = RouteObject & Navigable; + +const partiesRoutes: Route[] = flags.parties ? [ { path: Routes.PARTIES, @@ -43,7 +47,7 @@ const partiesRoutes = flags.parties ] : []; -const assetsRoutes = flags.assets +const assetsRoutes: Route[] = flags.assets ? [ { path: Routes.ASSETS, @@ -54,7 +58,7 @@ const assetsRoutes = flags.assets ] : []; -const genesisRoutes = flags.genesis +const genesisRoutes: Route[] = flags.genesis ? [ { path: Routes.GENESIS, @@ -65,7 +69,7 @@ const genesisRoutes = flags.genesis ] : []; -const governanceRoutes = flags.governance +const governanceRoutes: Route[] = flags.governance ? [ { path: Routes.GOVERNANCE, @@ -76,18 +80,27 @@ const governanceRoutes = flags.governance ] : []; -const marketsRoutes = flags.markets +const marketsRoutes: Route[] = flags.markets ? [ { path: Routes.MARKETS, name: 'Markets', text: t('Markets'), - element: , + children: [ + { + index: true, + element: , + }, + { + path: ':marketId', + element: , + }, + ], }, ] : []; -const networkParametersRoutes = flags.networkParameters +const networkParametersRoutes: Route[] = flags.networkParameters ? [ { path: Routes.NETWORK_PARAMETERS, @@ -97,7 +110,7 @@ const networkParametersRoutes = flags.networkParameters }, ] : []; -const validators = flags.validators +const validators: Route[] = flags.validators ? [ { path: Routes.VALIDATORS, @@ -108,7 +121,7 @@ const validators = flags.validators ] : []; -const routerConfig = [ +const routerConfig: Route[] = [ { path: Routes.HOME, name: 'Home', diff --git a/libs/apollo-client/src/cache-config.ts b/libs/apollo-client/src/cache-config.ts new file mode 100644 index 000000000..789d2096a --- /dev/null +++ b/libs/apollo-client/src/cache-config.ts @@ -0,0 +1,52 @@ +import type { InMemoryCacheConfig } from '@apollo/client'; + +export const DEFAULT_CACHE_CONFIG: InMemoryCacheConfig = { + typePolicies: { + Account: { + keyFields: false, + fields: { + balanceFormatted: {}, + }, + }, + Instrument: { + keyFields: false, + }, + TradableInstrument: { + keyFields: ['instrument'], + }, + Product: { + keyFields: ['settlementAsset', ['id']], + }, + MarketData: { + keyFields: ['market', ['id']], + }, + Node: { + keyFields: false, + }, + Withdrawal: { + fields: { + pendingOnForeignChain: { + read: (isPending = false) => isPending, + }, + }, + }, + ERC20: { + keyFields: ['contractAddress'], + }, + PositionUpdate: { + keyFields: false, + }, + AccountUpdate: { + keyFields: false, + }, + Party: { + keyFields: false, + }, + Fees: { + keyFields: false, + }, + statistics: { + keyFields: false, + }, + }, +}; diff --git a/libs/apollo-client/src/index.ts b/libs/apollo-client/src/index.ts index bc8a1d463..867adb98a 100644 --- a/libs/apollo-client/src/index.ts +++ b/libs/apollo-client/src/index.ts @@ -1 +1,2 @@ export * from './lib/apollo-client'; +export * from './cache-config'; diff --git a/libs/market-info/src/components/market-info/MarketInfoNoCandles.graphql b/libs/market-info/src/components/market-info/MarketInfoNoCandles.graphql new file mode 100644 index 000000000..179ed4b53 --- /dev/null +++ b/libs/market-info/src/components/market-info/MarketInfoNoCandles.graphql @@ -0,0 +1,147 @@ +query MarketInfoNoCandles($marketId: ID!) { + market(id: $marketId) { + id + decimalPlaces + positionDecimalPlaces + state + tradingMode + lpPriceRange + proposal { + id + rationale { + title + description + } + } + marketTimestamps { + open + close + } + openingAuction { + durationSecs + volume + } + accountsConnection { + edges { + node { + type + asset { + id + } + balance + } + } + } + tradingMode + fees { + factors { + makerFee + infrastructureFee + liquidityFee + } + } + priceMonitoringSettings { + parameters { + triggers { + horizonSecs + probability + auctionExtensionSecs + } + } + } + riskFactors { + market + short + long + } + data { + market { + id + } + markPrice + midPrice + bestBidVolume + bestOfferVolume + bestStaticBidVolume + bestStaticOfferVolume + bestBidPrice + bestOfferPrice + trigger + openInterest + suppliedStake + openInterest + targetStake + marketValueProxy + priceMonitoringBounds { + minValidPrice + maxValidPrice + trigger { + horizonSecs + probability + auctionExtensionSecs + } + referencePrice + } + } + liquidityMonitoringParameters { + triggeringRatio + targetStakeParameters { + timeWindow + scalingFactor + } + } + tradableInstrument { + instrument { + id + name + code + metadata { + tags + } + product { + ... on Future { + quoteName + settlementAsset { + id + symbol + name + decimals + } + dataSourceSpecForSettlementData { + id + } + dataSourceSpecForTradingTermination { + id + } + dataSourceSpecBinding { + settlementDataProperty + tradingTerminationProperty + } + } + } + } + riskModel { + ... on LogNormalRiskModel { + tau + riskAversionParameter + params { + r + sigma + mu + } + } + ... on SimpleRiskModel { + params { + factorLong + factorShort + } + } + } + } + depth { + lastTrade { + price + } + } + } +} diff --git a/libs/market-info/src/components/market-info/__generated__/MarketInfoNoCandles.ts b/libs/market-info/src/components/market-info/__generated__/MarketInfoNoCandles.ts new file mode 100644 index 000000000..e2d7e2c52 --- /dev/null +++ b/libs/market-info/src/components/market-info/__generated__/MarketInfoNoCandles.ts @@ -0,0 +1,190 @@ +import * as Types from '@vegaprotocol/types'; + +import { gql } from '@apollo/client'; +import * as Apollo from '@apollo/client'; +const defaultOptions = {} as const; +export type MarketInfoNoCandlesQueryVariables = Types.Exact<{ + marketId: Types.Scalars['ID']; +}>; + + +export type MarketInfoNoCandlesQuery = { __typename?: 'Query', market?: { __typename?: 'Market', id: string, decimalPlaces: number, positionDecimalPlaces: number, state: Types.MarketState, tradingMode: Types.MarketTradingMode, lpPriceRange: string, proposal?: { __typename?: 'Proposal', id?: string | null, rationale: { __typename?: 'ProposalRationale', title: string, description: string } } | null, marketTimestamps: { __typename?: 'MarketTimestamps', open: any, close: any }, openingAuction: { __typename?: 'AuctionDuration', durationSecs: number, volume: number }, accountsConnection?: { __typename?: 'AccountsConnection', edges?: Array<{ __typename?: 'AccountEdge', node: { __typename?: 'AccountBalance', type: Types.AccountType, balance: string, asset: { __typename?: 'Asset', id: string } } } | null> | null } | null, fees: { __typename?: 'Fees', factors: { __typename?: 'FeeFactors', makerFee: string, infrastructureFee: string, liquidityFee: string } }, priceMonitoringSettings: { __typename?: 'PriceMonitoringSettings', parameters?: { __typename?: 'PriceMonitoringParameters', triggers?: Array<{ __typename?: 'PriceMonitoringTrigger', horizonSecs: number, probability: number, auctionExtensionSecs: number }> | null } | null }, riskFactors?: { __typename?: 'RiskFactor', market: string, short: string, long: string } | null, data?: { __typename?: 'MarketData', markPrice: string, midPrice: string, bestBidVolume: string, bestOfferVolume: string, bestStaticBidVolume: string, bestStaticOfferVolume: string, bestBidPrice: string, bestOfferPrice: string, trigger: Types.AuctionTrigger, openInterest: string, suppliedStake?: string | null, targetStake?: string | null, marketValueProxy: string, market: { __typename?: 'Market', id: string }, priceMonitoringBounds?: Array<{ __typename?: 'PriceMonitoringBounds', minValidPrice: string, maxValidPrice: string, referencePrice: string, trigger: { __typename?: 'PriceMonitoringTrigger', horizonSecs: number, probability: number, auctionExtensionSecs: number } }> | null } | null, liquidityMonitoringParameters: { __typename?: 'LiquidityMonitoringParameters', triggeringRatio: string, targetStakeParameters: { __typename?: 'TargetStakeParameters', timeWindow: number, scalingFactor: number } }, tradableInstrument: { __typename?: 'TradableInstrument', instrument: { __typename?: 'Instrument', id: string, name: string, code: string, metadata: { __typename?: 'InstrumentMetadata', tags?: Array | null }, product: { __typename?: 'Future', quoteName: string, settlementAsset: { __typename?: 'Asset', id: string, symbol: string, name: string, decimals: number }, dataSourceSpecForSettlementData: { __typename?: 'DataSourceSpec', id: string }, dataSourceSpecForTradingTermination: { __typename?: 'DataSourceSpec', id: string }, dataSourceSpecBinding: { __typename?: 'DataSourceSpecToFutureBinding', settlementDataProperty: string, tradingTerminationProperty: string } } }, riskModel: { __typename?: 'LogNormalRiskModel', tau: number, riskAversionParameter: number, params: { __typename?: 'LogNormalModelParams', r: number, sigma: number, mu: number } } | { __typename?: 'SimpleRiskModel', params: { __typename?: 'SimpleRiskModelParams', factorLong: number, factorShort: number } } }, depth: { __typename?: 'MarketDepth', lastTrade?: { __typename?: 'Trade', price: string } | null } } | null }; + + +export const MarketInfoNoCandlesDocument = gql` + query MarketInfoNoCandles($marketId: ID!) { + market(id: $marketId) { + id + decimalPlaces + positionDecimalPlaces + state + tradingMode + lpPriceRange + proposal { + id + rationale { + title + description + } + } + marketTimestamps { + open + close + } + openingAuction { + durationSecs + volume + } + accountsConnection { + edges { + node { + type + asset { + id + } + balance + } + } + } + tradingMode + fees { + factors { + makerFee + infrastructureFee + liquidityFee + } + } + priceMonitoringSettings { + parameters { + triggers { + horizonSecs + probability + auctionExtensionSecs + } + } + } + riskFactors { + market + short + long + } + data { + market { + id + } + markPrice + midPrice + bestBidVolume + bestOfferVolume + bestStaticBidVolume + bestStaticOfferVolume + bestBidPrice + bestOfferPrice + trigger + openInterest + suppliedStake + openInterest + targetStake + marketValueProxy + priceMonitoringBounds { + minValidPrice + maxValidPrice + trigger { + horizonSecs + probability + auctionExtensionSecs + } + referencePrice + } + } + liquidityMonitoringParameters { + triggeringRatio + targetStakeParameters { + timeWindow + scalingFactor + } + } + tradableInstrument { + instrument { + id + name + code + metadata { + tags + } + product { + ... on Future { + quoteName + settlementAsset { + id + symbol + name + decimals + } + dataSourceSpecForSettlementData { + id + } + dataSourceSpecForTradingTermination { + id + } + dataSourceSpecBinding { + settlementDataProperty + tradingTerminationProperty + } + } + } + } + riskModel { + ... on LogNormalRiskModel { + tau + riskAversionParameter + params { + r + sigma + mu + } + } + ... on SimpleRiskModel { + params { + factorLong + factorShort + } + } + } + } + depth { + lastTrade { + price + } + } + } +} + `; + +/** + * __useMarketInfoNoCandlesQuery__ + * + * To run a query within a React component, call `useMarketInfoNoCandlesQuery` and pass it any options that fit your needs. + * When your component renders, `useMarketInfoNoCandlesQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useMarketInfoNoCandlesQuery({ + * variables: { + * marketId: // value for 'marketId' + * }, + * }); + */ +export function useMarketInfoNoCandlesQuery(baseOptions: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(MarketInfoNoCandlesDocument, options); + } +export function useMarketInfoNoCandlesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(MarketInfoNoCandlesDocument, options); + } +export type MarketInfoNoCandlesQueryHookResult = ReturnType; +export type MarketInfoNoCandlesLazyQueryHookResult = ReturnType; +export type MarketInfoNoCandlesQueryResult = Apollo.QueryResult; \ No newline at end of file diff --git a/libs/market-info/src/components/market-info/index.ts b/libs/market-info/src/components/market-info/index.ts index 6144ab2bb..261a271ec 100644 --- a/libs/market-info/src/components/market-info/index.ts +++ b/libs/market-info/src/components/market-info/index.ts @@ -2,3 +2,5 @@ export * from './info-key-value-table'; export * from './info-market'; export * from './tooltip-mapping'; export * from './__generated__/MarketInfo'; +export * from './__generated__/MarketInfoNoCandles'; +export * from './market-info-data-provider'; diff --git a/libs/market-info/src/components/market-info/info-key-value-table.tsx b/libs/market-info/src/components/market-info/info-key-value-table.tsx index 14cc16f71..fc41af6a5 100644 --- a/libs/market-info/src/components/market-info/info-key-value-table.tsx +++ b/libs/market-info/src/components/market-info/info-key-value-table.tsx @@ -22,6 +22,7 @@ interface RowProps { asPercentage?: boolean; unformatted?: boolean; assetSymbol?: string; + noBorder?: boolean; } const Row = ({ @@ -31,6 +32,7 @@ const Row = ({ asPercentage, unformatted, assetSymbol = '', + noBorder = true, }: RowProps) => { const className = 'text-black dark:text-white text-sm !px-0'; @@ -55,7 +57,7 @@ const Row = ({ @@ -75,6 +77,7 @@ export interface MarketInfoTableProps { omits?: string[]; children?: ReactNode; assetSymbol?: string; + noBorder?: boolean; } export const MarketInfoTable = ({ @@ -85,6 +88,7 @@ export const MarketInfoTable = ({ omits = ['__typename'], children, assetSymbol, + noBorder, }: MarketInfoTableProps) => { if (!data || typeof data !== 'object') { return null; @@ -103,6 +107,7 @@ export const MarketInfoTable = ({ assetSymbol={assetSymbol} asPercentage={asPercentage} unformatted={unformatted || key.toLowerCase().includes('volume')} + noBorder={noBorder} /> ))} diff --git a/libs/market-info/src/components/market-info/market-info-data-provider.ts b/libs/market-info/src/components/market-info/market-info-data-provider.ts index ae477fa44..87cbcf7b1 100644 --- a/libs/market-info/src/components/market-info/market-info-data-provider.ts +++ b/libs/market-info/src/components/market-info/market-info-data-provider.ts @@ -1,6 +1,8 @@ import { makeDataProvider } from '@vegaprotocol/react-helpers'; import type { MarketInfoQuery } from './__generated__/MarketInfo'; import { MarketInfoDocument } from './__generated__/MarketInfo'; +import type { MarketInfoNoCandlesQuery } from './__generated__/MarketInfoNoCandles'; +import { MarketInfoNoCandlesDocument } from './__generated__/MarketInfoNoCandles'; export const marketInfoDataProvider = makeDataProvider< MarketInfoQuery, @@ -11,3 +13,13 @@ export const marketInfoDataProvider = makeDataProvider< query: MarketInfoDocument, getData: (responseData: MarketInfoQuery | null) => responseData, }); + +export const marketInfoNoCandlesDataProvider = makeDataProvider< + MarketInfoNoCandlesQuery, + MarketInfoNoCandlesQuery, + never, + never +>({ + query: MarketInfoNoCandlesDocument, + getData: (responseData: MarketInfoNoCandlesQuery | null) => responseData, +}); From b7426e73d8848c9375cc8cc65545bbdc2f055f07 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 15 Feb 2023 18:07:58 +0000 Subject: [PATCH 08/18] chore: update tranches Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/static/src/assets/mainnet-tranches.json | 70 +++++++++++++------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 58fc9aa1b..3ead9048b 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -2761,7 +2761,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "86666.297", "total_removed": "0", - "locked_amount": "69450.4559220960784403951", + "locked_amount": "69391.0872001880742983107", "deposits": [ { "amount": "86666.297", @@ -2827,7 +2827,7 @@ "tranche_end": "2023-06-01T00:00:00.000Z", "total_added": "2500", "total_removed": "0", - "locked_amount": "1449.1004655067155", + "locked_amount": "1445.66592261904775", "deposits": [ { "amount": "2500", @@ -3215,7 +3215,7 @@ "tranche_end": "2023-08-01T00:00:00.000Z", "total_added": "37500", "total_removed": "2836.415649675", - "locked_amount": "34494.7197283609575", + "locked_amount": "34442.91695441989125", "deposits": [ { "amount": "7500", @@ -3326,7 +3326,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "69387.09111965860323927", + "locked_amount": "69327.776564239291943985", "deposits": [ { "amount": "129999.45", @@ -3392,7 +3392,7 @@ "tranche_end": "2023-09-03T00:00:00.000Z", "total_added": "62600", "total_removed": "0", - "locked_amount": "34214.67553272451032", + "locked_amount": "34171.79286529680654", "deposits": [ { "amount": "10000", @@ -3585,7 +3585,7 @@ "tranche_end": "2023-09-17T00:00:00.000Z", "total_added": "5000", "total_removed": "0", - "locked_amount": "2924.582382039574", + "locked_amount": "2921.1572488584475", "deposits": [ { "amount": "5000", @@ -3796,7 +3796,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "11284.474311386236853919", + "locked_amount": "11226.2922579206452066194", "deposits": [ { "amount": "97499.58", @@ -3829,7 +3829,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "98230.390980249184455396", - "locked_amount": "15423.928200448787463838379676", + "locked_amount": "15344.40337807380869704113192", "deposits": [ { "amount": "135173.4239508", @@ -3875,7 +3875,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "4747.1834703522424073958", + "locked_amount": "4722.707285209589580316", "deposits": [ { "amount": "32499.86", @@ -3908,7 +3908,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "1545.162154021650553376", + "locked_amount": "1537.1953932689953826786", "deposits": [ { "amount": "10833.29", @@ -3941,7 +3941,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "22749.93", "total_removed": "4720.860935375", - "locked_amount": "5776.1612374672770999372", + "locked_amount": "5746.3797064299737259078", "deposits": [ { "amount": "6500", @@ -4093,7 +4093,7 @@ "tranche_end": "2023-05-01T00:00:00.000Z", "total_added": "22500", "total_removed": "4373.451408", - "locked_amount": "9260.367748618784625", + "locked_amount": "9229.28608425414375", "deposits": [ { "amount": "7500", @@ -4324,7 +4324,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "928642.9598472029154", - "locked_amount": "566004.739198245785666202", + "locked_amount": "564675.8365855764677193232", "deposits": [ { "amount": "1852091.69", @@ -36594,7 +36594,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "592998.0503546212334", - "locked_amount": "894253.452430246625983855407", + "locked_amount": "892211.486316038327909139488", "deposits": [ { "amount": "1998.95815", @@ -37919,8 +37919,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15870102.715470999700000001", - "total_removed": "565476.66021794547915452", - "locked_amount": "8470652.9113990548483707594767424118153556", + "total_removed": "565985.90378116129377952", + "locked_amount": "8463412.2306648275892962453531986551946473", "deposits": [ { "amount": "16249.93", @@ -38444,6 +38444,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0x71e874dd2277e6c5838399943e59bae3b006a06505fb3eacb81a4a6b6bf51a0b" }, + { + "amount": "509.243563215814625", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0x307e498402679f0f8ee11dcd3dfc684db5558203469f07ce58e98a4f87f0fa62" + }, { "amount": "856.08784586478614", "user": "0xe3eB4CF43C072658401996b71D43eE26E573562D", @@ -40146,6 +40151,12 @@ "tranche_id": 2, "tx": "0x71e874dd2277e6c5838399943e59bae3b006a06505fb3eacb81a4a6b6bf51a0b" }, + { + "amount": "509.243563215814625", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 2, + "tx": "0x307e498402679f0f8ee11dcd3dfc684db5558203469f07ce58e98a4f87f0fa62" + }, { "amount": "966.75883976995675", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -41288,8 +41299,8 @@ } ], "total_tokens": "259998.8875", - "withdrawn_tokens": "120769.39867651185175", - "remaining_tokens": "139229.48882348814825" + "withdrawn_tokens": "121278.642239727666375", + "remaining_tokens": "138720.245260272333625" }, { "address": "0x89051CAb67Bc7F8CC44F7e270c6EDaf1EC57676c", @@ -43496,8 +43507,8 @@ "tranche_start": "2021-11-05T00:00:00.000Z", "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", - "total_removed": "3926262.119252669397786782", - "locked_amount": "2098607.45588379818701050768788919", + "total_removed": "3926967.723059737571037032", + "locked_amount": "2091922.905662142960425555307396306", "deposits": [ { "amount": "129284.449", @@ -43726,6 +43737,11 @@ "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", "tx": "0xf1c4c72d4c71eb26378b943efeafb5c1607a79d5163a2c8ae8c4ddce2afaf7ad" }, + { + "amount": "705.60380706817325025", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tx": "0x532c270b8a50b8e2923a96b038129a203e01eba1b84faf238dd9b48aeceb1c91" + }, { "amount": "1333.9237119810715295", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -46616,6 +46632,12 @@ "tranche_id": 3, "tx": "0xf1c4c72d4c71eb26378b943efeafb5c1607a79d5163a2c8ae8c4ddce2afaf7ad" }, + { + "amount": "705.60380706817325025", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tranche_id": 3, + "tx": "0x532c270b8a50b8e2923a96b038129a203e01eba1b84faf238dd9b48aeceb1c91" + }, { "amount": "1333.9237119810715295", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -49060,8 +49082,8 @@ } ], "total_tokens": "359123.469575", - "withdrawn_tokens": "306863.92648212069718625", - "remaining_tokens": "52259.54309287930281375" + "withdrawn_tokens": "307569.5302891888704365", + "remaining_tokens": "51553.9392858111295635" }, { "address": "0xBdd412797c1B78535Afc5F71503b91fAbD0160fB", @@ -50399,7 +50421,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "2749067.463242913023296295", - "locked_amount": "512269.094551730007274963067958717", + "locked_amount": "509627.9883313308999788596484477", "deposits": [ { "amount": "552496.6455", @@ -52426,7 +52448,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "33643.6376997992685", - "locked_amount": "141699.5713082349310180798604769", + "locked_amount": "141376.01010506265186415083105024", "deposits": [ { "amount": "3000", From 64c92ce91d33ccbddbbde2fcb407aa1c692fd8dc Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Thu, 16 Feb 2023 00:10:37 +0000 Subject: [PATCH 09/18] chore: update tranches Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/static/src/assets/mainnet-tranches.json | 53 ++++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 3ead9048b..bf2e0ed67 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -2761,7 +2761,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "86666.297", "total_removed": "0", - "locked_amount": "69391.0872001880742983107", + "locked_amount": "69331.2952600615723342134", "deposits": [ { "amount": "86666.297", @@ -2827,7 +2827,7 @@ "tranche_end": "2023-06-01T00:00:00.000Z", "total_added": "2500", "total_removed": "0", - "locked_amount": "1445.66592261904775", + "locked_amount": "1442.20689611314625", "deposits": [ { "amount": "2500", @@ -3215,7 +3215,7 @@ "tranche_end": "2023-08-01T00:00:00.000Z", "total_added": "37500", "total_removed": "2836.415649675", - "locked_amount": "34442.91695441989125", + "locked_amount": "34390.74489717618", "deposits": [ { "amount": "7500", @@ -3326,7 +3326,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "69327.776564239291943985", + "locked_amount": "69268.0391767348331928", "deposits": [ { "amount": "129999.45", @@ -3392,7 +3392,7 @@ "tranche_end": "2023-09-03T00:00:00.000Z", "total_added": "62600", "total_removed": "0", - "locked_amount": "34171.79286529680654", + "locked_amount": "34128.60450279046246", "deposits": [ { "amount": "10000", @@ -3585,7 +3585,7 @@ "tranche_end": "2023-09-17T00:00:00.000Z", "total_added": "5000", "total_removed": "0", - "locked_amount": "2921.1572488584475", + "locked_amount": "2917.707699137494", "deposits": [ { "amount": "5000", @@ -3796,7 +3796,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "11226.2922579206452066194", + "locked_amount": "11167.69544556814969737", "deposits": [ { "amount": "97499.58", @@ -3829,7 +3829,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "98230.390980249184455396", - "locked_amount": "15344.40337807380869704113192", + "locked_amount": "15264.311651905574255734284468", "deposits": [ { "amount": "135173.4239508", @@ -3875,7 +3875,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "4722.707285209589580316", + "locked_amount": "4698.0566181657195846782", "deposits": [ { "amount": "32499.86", @@ -3908,7 +3908,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "1537.1953932689953826786", + "locked_amount": "1529.1718403506269085127", "deposits": [ { "amount": "10833.29", @@ -3941,7 +3941,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "22749.93", "total_removed": "4720.860935375", - "locked_amount": "5746.3797064299737259078", + "locked_amount": "5716.385873592932873727", "deposits": [ { "amount": "6500", @@ -4093,7 +4093,7 @@ "tranche_end": "2023-05-01T00:00:00.000Z", "total_added": "22500", "total_removed": "4373.451408", - "locked_amount": "9229.28608425414375", + "locked_amount": "9197.98284990791925", "deposits": [ { "amount": "7500", @@ -4324,7 +4324,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "928642.9598472029154", - "locked_amount": "564675.8365855764677193232", + "locked_amount": "563337.460705196635060122", "deposits": [ { "amount": "1852091.69", @@ -36594,7 +36594,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "592998.0503546212334", - "locked_amount": "892211.486316038327909139488", + "locked_amount": "890154.77403416890016270853", "deposits": [ { "amount": "1998.95815", @@ -37919,8 +37919,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15870102.715470999700000001", - "total_removed": "565985.90378116129377952", - "locked_amount": "8463412.2306648275892962453531986551946473", + "total_removed": "567626.84057226362274952", + "locked_amount": "8456119.260966867470024768504474003764531", "deposits": [ { "amount": "16249.93", @@ -38449,6 +38449,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0x307e498402679f0f8ee11dcd3dfc684db5558203469f07ce58e98a4f87f0fa62" }, + { + "amount": "1640.93679110232897", + "user": "0xe3eB4CF43C072658401996b71D43eE26E573562D", + "tx": "0x4870598253a2a664d9c96af37904f08ac772ee9620b5975560ef7e7fb51c9a7f" + }, { "amount": "856.08784586478614", "user": "0xe3eB4CF43C072658401996b71D43eE26E573562D", @@ -41521,6 +41526,12 @@ } ], "withdrawals": [ + { + "amount": "1640.93679110232897", + "user": "0xe3eB4CF43C072658401996b71D43eE26E573562D", + "tranche_id": 2, + "tx": "0x4870598253a2a664d9c96af37904f08ac772ee9620b5975560ef7e7fb51c9a7f" + }, { "amount": "856.08784586478614", "user": "0xe3eB4CF43C072658401996b71D43eE26E573562D", @@ -41751,8 +41762,8 @@ } ], "total_tokens": "150551.801", - "withdrawn_tokens": "68648.27553278775093", - "remaining_tokens": "81903.52546721224907" + "withdrawn_tokens": "70289.2123238900799", + "remaining_tokens": "80262.5886761099201" }, { "address": "0x4d982Ab0823fD2f48e934a7be2bb0a5374a26148", @@ -43508,7 +43519,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "3926967.723059737571037032", - "locked_amount": "2091922.905662142960425555307396306", + "locked_amount": "2085190.082603037310819339279526118", "deposits": [ { "amount": "129284.449", @@ -50421,7 +50432,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "2749067.463242913023296295", - "locked_amount": "509627.9883313308999788596484477", + "locked_amount": "506967.809220903986070663468874033", "deposits": [ { "amount": "552496.6455", @@ -52448,7 +52459,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "33643.6376997992685", - "locked_amount": "141376.01010506265186415083105024", + "locked_amount": "141050.112287331809518128692643336", "deposits": [ { "amount": "3000", From a82509f0e0053dd0a5460a2d47767ae859d447b4 Mon Sep 17 00:00:00 2001 From: Matthew Russell Date: Wed, 15 Feb 2023 19:52:54 -0800 Subject: [PATCH 10/18] feat(trading): datanode block header for env and node switcher (#2905) --- apps/explorer/src/app/app.tsx | 9 +- .../src/app/components/footer/footer.tsx | 65 +- .../src/app/app.tsx | 36 +- .../src/main.tsx | 31 +- apps/multisig-signer/.env | 1 + apps/multisig-signer/src/app/app.tsx | 12 +- apps/token/src/app.tsx | 12 +- apps/token/src/components/nav/nav.spec.tsx | 13 +- .../trading-e2e/src/integration/markets.cy.ts | 6 +- .../components/app-loader/app-failure.tsx | 30 + .../components/app-loader/app-loader.tsx | 96 +++ apps/trading/components/app-loader/index.tsx | 124 +--- .../components/app-loader/web3-provider.tsx | 58 ++ .../trading/components/footer/footer.spec.tsx | 49 +- apps/trading/components/footer/footer.tsx | 29 +- .../risk-notice-dialog.spec.tsx | 36 +- apps/trading/pages/_app.page.tsx | 79 +-- apps/trading/stores/global.ts | 4 +- libs/apollo-client/src/index.ts | 1 + libs/apollo-client/src/lib/apollo-client.ts | 33 +- libs/apollo-client/src/lib/header-store.ts | 12 + libs/environment/__mocks__/zustand.js | 18 + libs/environment/src/components/index.ts | 2 +- .../network-loader/network-loader.spec.tsx | 6 +- .../network-loader/network-loader.tsx | 26 +- .../src/components/node-guard/index.ts | 1 + .../src/components/node-guard/node-guard.tsx | 26 + .../components/node-switcher-dialog/index.tsx | 1 - .../node-switcher-dialog.tsx | 59 -- .../node-switcher/apollo-wrapper.tsx | 25 + .../src/components/node-switcher/index.tsx | 1 + .../components/node-switcher/layout-row.tsx | 2 +- .../node-switcher/node-block-height.tsx | 34 - .../components/node-switcher/node-stats.tsx | 137 ---- .../node-switcher/node-switcher-dialog.tsx | 16 + .../node-switcher/node-switcher.spec.tsx | 584 ----------------- .../node-switcher/node-switcher.tsx | 384 ++++++----- .../node-switcher/node-swticher.spec.tsx | 174 +++++ .../node-switcher/row-data.spec.tsx | 254 ++++++++ .../src/components/node-switcher/row-data.tsx | 207 ++++++ .../src/hooks/environment-provider.spec.tsx | 22 - .../environment/src/hooks/use-config.spec.tsx | 140 ---- libs/environment/src/hooks/use-config.tsx | 72 --- .../src/hooks/use-environment-errors.spec.tsx | 218 ------- .../src/hooks/use-environment.spec.ts | 259 ++++++++ .../src/hooks/use-environment.spec.tsx | 609 ------------------ libs/environment/src/hooks/use-environment.ts | 315 +++++++++ .../environment/src/hooks/use-environment.tsx | 181 ------ .../src/hooks/use-node-health.spec.tsx | 187 +++--- libs/environment/src/hooks/use-node-health.ts | 123 ++-- libs/environment/src/hooks/use-nodes.spec.tsx | 366 ----------- libs/environment/src/hooks/use-nodes.tsx | 253 -------- libs/environment/src/types.ts | 49 +- libs/environment/src/utils/Node.graphql | 1 + .../src/utils/__generated__/Node.ts | 3 +- .../src/utils/compile-environment.ts | 140 ---- libs/environment/src/utils/compile-errors.ts | 25 +- .../environment/src/utils/initialize-node.tsx | 55 -- libs/environment/src/utils/node.mock.ts | 1 + libs/environment/src/utils/request-node.ts | 87 --- .../src/utils/validate-configuration.ts | 14 - .../src/utils/validate-environment.ts | 52 +- libs/environment/src/utils/validate-node.tsx | 121 ---- libs/network-info/src/network-info.tsx | 106 +-- libs/react-helpers/src/lib/index.ts | 1 + libs/react-helpers/src/lib/is-valid-url.ts | 9 + .../connect-dialog/connect-dialog.spec.tsx | 38 +- libs/web3/src/index.ts | 1 - libs/web3/src/lib/web3-container.spec.tsx | 180 ------ libs/web3/src/lib/web3-container.tsx | 147 ----- 70 files changed, 2201 insertions(+), 4267 deletions(-) create mode 100644 apps/trading/components/app-loader/app-failure.tsx create mode 100644 apps/trading/components/app-loader/app-loader.tsx create mode 100644 apps/trading/components/app-loader/web3-provider.tsx create mode 100644 libs/apollo-client/src/lib/header-store.ts create mode 100644 libs/environment/__mocks__/zustand.js create mode 100644 libs/environment/src/components/node-guard/index.ts create mode 100644 libs/environment/src/components/node-guard/node-guard.tsx delete mode 100644 libs/environment/src/components/node-switcher-dialog/index.tsx delete mode 100644 libs/environment/src/components/node-switcher-dialog/node-switcher-dialog.tsx create mode 100644 libs/environment/src/components/node-switcher/apollo-wrapper.tsx delete mode 100644 libs/environment/src/components/node-switcher/node-block-height.tsx delete mode 100644 libs/environment/src/components/node-switcher/node-stats.tsx create mode 100644 libs/environment/src/components/node-switcher/node-switcher-dialog.tsx delete mode 100644 libs/environment/src/components/node-switcher/node-switcher.spec.tsx create mode 100644 libs/environment/src/components/node-switcher/node-swticher.spec.tsx create mode 100644 libs/environment/src/components/node-switcher/row-data.spec.tsx create mode 100644 libs/environment/src/components/node-switcher/row-data.tsx delete mode 100644 libs/environment/src/hooks/environment-provider.spec.tsx delete mode 100644 libs/environment/src/hooks/use-config.spec.tsx delete mode 100644 libs/environment/src/hooks/use-config.tsx delete mode 100644 libs/environment/src/hooks/use-environment-errors.spec.tsx create mode 100644 libs/environment/src/hooks/use-environment.spec.ts delete mode 100644 libs/environment/src/hooks/use-environment.spec.tsx create mode 100644 libs/environment/src/hooks/use-environment.ts delete mode 100644 libs/environment/src/hooks/use-environment.tsx delete mode 100644 libs/environment/src/hooks/use-nodes.spec.tsx delete mode 100644 libs/environment/src/hooks/use-nodes.tsx delete mode 100644 libs/environment/src/utils/compile-environment.ts delete mode 100644 libs/environment/src/utils/initialize-node.tsx delete mode 100644 libs/environment/src/utils/request-node.ts delete mode 100644 libs/environment/src/utils/validate-node.tsx create mode 100644 libs/react-helpers/src/lib/is-valid-url.ts delete mode 100644 libs/web3/src/lib/web3-container.spec.tsx delete mode 100644 libs/web3/src/lib/web3-container.tsx diff --git a/apps/explorer/src/app/app.tsx b/apps/explorer/src/app/app.tsx index 440ff3756..1d6ad315c 100644 --- a/apps/explorer/src/app/app.tsx +++ b/apps/explorer/src/app/app.tsx @@ -1,5 +1,5 @@ import classnames from 'classnames'; -import { EnvironmentProvider, NetworkLoader } from '@vegaprotocol/environment'; +import { NetworkLoader, useInitializeEnv } from '@vegaprotocol/environment'; import { Nav } from './components/nav'; import { Header } from './components/header'; import { Main } from './components/main'; @@ -61,11 +61,8 @@ function App() { } const Wrapper = () => { - return ( - - - - ); + useInitializeEnv(); + return ; }; export default Wrapper; diff --git a/apps/explorer/src/app/components/footer/footer.tsx b/apps/explorer/src/app/components/footer/footer.tsx index bc038b364..fd361c458 100644 --- a/apps/explorer/src/app/components/footer/footer.tsx +++ b/apps/explorer/src/app/components/footer/footer.tsx @@ -1,39 +1,46 @@ -import { useEnvironment } from '@vegaprotocol/environment'; +import { NodeSwitcherDialog, useEnvironment } from '@vegaprotocol/environment'; import { t } from '@vegaprotocol/react-helpers'; import { Link } from '@vegaprotocol/ui-toolkit'; +import { useState } from 'react'; export const Footer = () => { - const { VEGA_URL, GIT_COMMIT_HASH, GIT_ORIGIN_URL, setNodeSwitcherOpen } = - useEnvironment(); + const { VEGA_URL, GIT_COMMIT_HASH, GIT_ORIGIN_URL } = useEnvironment(); + const [nodeSwitcherOpen, setNodeSwitcherOpen] = useState(false); return ( -
    -
    -
    - {GIT_COMMIT_HASH && ( -

    - {t('Version')}:{' '} - - {GIT_COMMIT_HASH} - -

    - )} -
    + <> +
    +
    +
    + {GIT_COMMIT_HASH && ( +

    + {t('Version')}:{' '} + + {GIT_COMMIT_HASH} + +

    + )} +
    -
    - {VEGA_URL && } - - {t('Change')} - +
    + {VEGA_URL && } + setNodeSwitcherOpen(true)}> + {t('Change')} + +
    -
    -
    +
    + + ); }; diff --git a/apps/liquidity-provision-dashboard/src/app/app.tsx b/apps/liquidity-provision-dashboard/src/app/app.tsx index 757b88c0f..357d05186 100644 --- a/apps/liquidity-provision-dashboard/src/app/app.tsx +++ b/apps/liquidity-provision-dashboard/src/app/app.tsx @@ -1,3 +1,5 @@ +import type { InMemoryCacheConfig } from '@apollo/client'; +import { NetworkLoader, useInitializeEnv } from '@vegaprotocol/environment'; import { useRoutes } from 'react-router-dom'; import '../styles.scss'; @@ -5,14 +7,40 @@ import { Navbar } from './components/navbar'; import { routerConfig } from './routes/router-config'; +const cache: InMemoryCacheConfig = { + typePolicies: { + Market: { + merge: true, + }, + Party: { + merge: true, + }, + Query: {}, + Account: { + keyFields: false, + fields: { + balanceFormatted: {}, + }, + }, + Node: { + keyFields: false, + }, + Instrument: { + keyFields: false, + }, + }, +}; const AppRouter = () => useRoutes(routerConfig); export function App() { + useInitializeEnv(); return ( -
    - - -
    + +
    + + +
    +
    ); } diff --git a/apps/liquidity-provision-dashboard/src/main.tsx b/apps/liquidity-provision-dashboard/src/main.tsx index addcc9921..7615e405e 100644 --- a/apps/liquidity-provision-dashboard/src/main.tsx +++ b/apps/liquidity-provision-dashboard/src/main.tsx @@ -1,44 +1,15 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; -import { EnvironmentProvider, NetworkLoader } from '@vegaprotocol/environment'; import App from './app/app'; -import type { InMemoryCacheConfig } from '@apollo/client'; const rootElement = document.getElementById('root'); const root = rootElement && createRoot(rootElement); -const cache: InMemoryCacheConfig = { - typePolicies: { - Market: { - merge: true, - }, - Party: { - merge: true, - }, - Query: {}, - Account: { - keyFields: false, - fields: { - balanceFormatted: {}, - }, - }, - Node: { - keyFields: false, - }, - Instrument: { - keyFields: false, - }, - }, -}; root?.render( - - - - - + ); diff --git a/apps/multisig-signer/.env b/apps/multisig-signer/.env index 02483fefb..ddb4546bd 100644 --- a/apps/multisig-signer/.env +++ b/apps/multisig-signer/.env @@ -2,3 +2,4 @@ NX_VEGA_URL=https://api.stagnet3.vega.xyz/graphql NX_VEGA_CONFIG_URL=https://static.vega.xyz/assets/stagnet3-network.json NX_VEGA_NETWORKS='{"TESTNET":"https://multisig-signer.fairground.wtf","MAINNET":"https://multisig-signer.vega.xyz"}' NX_VEGA_ENV=STAGNET3 + diff --git a/apps/multisig-signer/src/app/app.tsx b/apps/multisig-signer/src/app/app.tsx index f20c6abbe..4707f6f50 100644 --- a/apps/multisig-signer/src/app/app.tsx +++ b/apps/multisig-signer/src/app/app.tsx @@ -3,9 +3,9 @@ import classnames from 'classnames'; import { useEffect, useMemo, useState } from 'react'; import { BrowserTracing } from '@sentry/tracing'; import { - EnvironmentProvider, NetworkLoader, useEnvironment, + useInitializeEnv, } from '@vegaprotocol/environment'; import { AsyncRenderer, Button, Lozenge } from '@vegaprotocol/ui-toolkit'; import type { EthereumConfig } from '@vegaprotocol/web3'; @@ -64,6 +64,7 @@ function App() { environment: VEGA_ENV, }); }, [VEGA_ENV]); + const Connectors = useMemo(() => { if (config?.chain_id) { return createConnectors(ETHEREUM_PROVIDER_URL, Number(config.chain_id)); @@ -107,12 +108,11 @@ const Wrapper = () => { }, }, }; + useInitializeEnv(); return ( - - - - - + + + ); }; diff --git a/apps/token/src/app.tsx b/apps/token/src/app.tsx index 31321f7de..525b6f6b2 100644 --- a/apps/token/src/app.tsx +++ b/apps/token/src/app.tsx @@ -24,8 +24,8 @@ import { AsyncRenderer } from '@vegaprotocol/ui-toolkit'; import { useEthereumConfig } from '@vegaprotocol/web3'; import { useEnvironment, - EnvironmentProvider, NetworkLoader, + useInitializeEnv, } from '@vegaprotocol/environment'; import { createConnectors } from './lib/web3-connectors'; import { ENV } from './config/env'; @@ -166,12 +166,12 @@ const AppContainer = () => { }; function App() { + useInitializeEnv(); + return ( - - - - - + + + ); } diff --git a/apps/token/src/components/nav/nav.spec.tsx b/apps/token/src/components/nav/nav.spec.tsx index 54ed7b30c..3d29a4e38 100644 --- a/apps/token/src/components/nav/nav.spec.tsx +++ b/apps/token/src/components/nav/nav.spec.tsx @@ -1,23 +1,18 @@ import { render, screen, within } from '@testing-library/react'; -import { EnvironmentProvider, Networks } from '@vegaprotocol/environment'; import { MemoryRouter } from 'react-router-dom'; import { Nav } from './nav'; jest.mock('@vegaprotocol/environment', () => ({ ...jest.requireActual('@vegaprotocol/environment'), NetworkSwitcher: () =>
    , + useEnvironment: () => ({ VEGA_ENV: 'MAINNET' }), })); const renderComponent = (initialEntries?: string[]) => { return render( - - -