From 12529a4fd2cd4129df98faeceb8767eab2b2ceb1 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 27 Jul 2022 00:09:55 +0000 Subject: [PATCH 01/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 28 +++++++++---------- apps/static/src/assets/stagnet1-tranches.json | 4 +-- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 63f612fb5..e2054fe87 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117722.18818369513317219", + "locked_amount": "117662.104842666510138705", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58696.701913247477199432", + "locked_amount": "58637.765752714800207624", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "80228.25795257262490728767616", + "locked_amount": "80147.70239602807648265760492", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24692.688857079010352968", + "locked_amount": "24667.895432115962171694", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "8037.23061079827060276", + "locked_amount": "8029.1605915625", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11891.54353487318775", + "locked_amount": "11860.57235054347875", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1648919.99192040261888734", + "locked_amount": "1647573.865184623231865074", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "10191.2646876420868592017845866885", + "locked_amount": "10151.7039262265070101442307730765", "deposits": [ { "amount": "2833.333333", @@ -5514,7 +5514,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "24994.000000000000000003", "total_removed": "8288.51201225622", - "locked_amount": "2618.98776211313942074031435397640791463", + "locked_amount": "2601.64429109589130458031227226027397271", "deposits": [ { "amount": "2", @@ -16382,7 +16382,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "144843.5352821052414", - "locked_amount": "2558317.1648180147802561215", + "locked_amount": "2556248.73122338896563520861", "deposits": [ { "amount": "1998.95815", @@ -17128,7 +17128,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "67542.001079865509505", - "locked_amount": "14297739.632184757022370311873006803811841", + "locked_amount": "14290442.6498335591993551557757998734306569", "deposits": [ { "amount": "16249.93", @@ -19570,7 +19570,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2421946.596295493754033047", - "locked_amount": "7546061.93619634790916496991038218", + "locked_amount": "7539290.74242029588729622654692751", "deposits": [ { "amount": "129284.449", @@ -24158,7 +24158,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2664591.30565361576883153539717868", + "locked_amount": "2661915.96604085886879872818605393", "deposits": [ { "amount": "552496.6455", @@ -25402,7 +25402,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "580.0445766491", - "locked_amount": "405379.97872978654505782214916288", + "locked_amount": "405052.2236030475504343156164384", "deposits": [ { "amount": "3000", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index e30651e0b..c71c4b434 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.64974949264333", + "locked_amount": "33.580352612886855", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "232.909199010654485", + "locked_amount": "232.145833333333348", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index c540ff2e6..ace2722b2 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "213.85302384576360370021173566717402337", + "locked_amount": "213.1521153602232870002110416983764587", "deposits": [ { "amount": "1000", From bb5067146c75371d55ae11b28fa5c1850d8e112c Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 27 Jul 2022 06:05:08 +0000 Subject: [PATCH 02/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 110 +++++++++++++++--- apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 94 insertions(+), 22 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index e2054fe87..e91e26671 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117662.104842666510138705", + "locked_amount": "117603.58652948537742957", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58637.765752714800207624", + "locked_amount": "58580.3647387115488332", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "80147.70239602807648265760492", + "locked_amount": "80069.24511975730205463012744", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24667.895432115962171694", + "locked_amount": "24643.747816787289562354", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "8029.1605915625", + "locked_amount": "8021.300777095928290488", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11860.57235054347875", + "locked_amount": "11830.40789175724725", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1647573.865184623231865074", + "locked_amount": "1646262.801842317880776074", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "10151.7039262265070101442307730765", + "locked_amount": "10113.1736283674289138887899580508", "deposits": [ { "amount": "2833.333333", @@ -5512,9 +5512,9 @@ "tranche_id": 11, "tranche_start": "2021-09-03T00:00:00.000Z", "tranche_end": "2022-09-03T00:00:00.000Z", - "total_added": "24994.000000000000000003", + "total_added": "25010.000000000000000003", "total_removed": "8288.51201225622", - "locked_amount": "2601.64429109589130458031227226027397271", + "locked_amount": "2586.40721492897082590031024476788432277", "deposits": [ { "amount": "2", @@ -5556,6 +5556,21 @@ "user": "0xfeDf4b4406B3126744047be05A013570b09DC0cC", "tx": "0xd8fb387a63f4c66e0745787c5468f08bb8321b284ee8275ab961a52b51726381" }, + { + "amount": "12", + "user": "0x54e6627177165Aa7b6F31752c744c306FaC993dB", + "tx": "0x846ec1e97e805281e019842be187b58f63237c0ea04cc2abd002899e86762b39" + }, + { + "amount": "2", + "user": "0xcd6f7FBa16933469bd99F714CC802849216C532A", + "tx": "0x05bbc77056939645ce69b9dba25d17697f4aa348ffbdb88e55abe467bd7d2839" + }, + { + "amount": "2", + "user": "0x7cad86eC6007Ad16B0D50366Ffc5C5182636EB1d", + "tx": "0x432102400ff0ac55b2028d5cac2e5d50155c469d03318f50beca8f704494b37a" + }, { "amount": "25", "user": "0x2c51Dc5A225a9d8542FBf28BA9dC501f026CD5e8", @@ -9719,6 +9734,51 @@ "withdrawn_tokens": "0", "remaining_tokens": "157" }, + { + "address": "0x54e6627177165Aa7b6F31752c744c306FaC993dB", + "deposits": [ + { + "amount": "12", + "user": "0x54e6627177165Aa7b6F31752c744c306FaC993dB", + "tranche_id": 11, + "tx": "0x846ec1e97e805281e019842be187b58f63237c0ea04cc2abd002899e86762b39" + } + ], + "withdrawals": [], + "total_tokens": "12", + "withdrawn_tokens": "0", + "remaining_tokens": "12" + }, + { + "address": "0xcd6f7FBa16933469bd99F714CC802849216C532A", + "deposits": [ + { + "amount": "2", + "user": "0xcd6f7FBa16933469bd99F714CC802849216C532A", + "tranche_id": 11, + "tx": "0x05bbc77056939645ce69b9dba25d17697f4aa348ffbdb88e55abe467bd7d2839" + } + ], + "withdrawals": [], + "total_tokens": "2", + "withdrawn_tokens": "0", + "remaining_tokens": "2" + }, + { + "address": "0x7cad86eC6007Ad16B0D50366Ffc5C5182636EB1d", + "deposits": [ + { + "amount": "2", + "user": "0x7cad86eC6007Ad16B0D50366Ffc5C5182636EB1d", + "tranche_id": 11, + "tx": "0x432102400ff0ac55b2028d5cac2e5d50155c469d03318f50beca8f704494b37a" + } + ], + "withdrawals": [], + "total_tokens": "2", + "withdrawn_tokens": "0", + "remaining_tokens": "2" + }, { "address": "0x2c51Dc5A225a9d8542FBf28BA9dC501f026CD5e8", "deposits": [ @@ -16382,7 +16442,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "144843.5352821052414", - "locked_amount": "2556248.73122338896563520861", + "locked_amount": "2554234.08333003981993526604", "deposits": [ { "amount": "1998.95815", @@ -17128,7 +17188,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "67542.001079865509505", - "locked_amount": "14290442.6498335591993551557757998734306569", + "locked_amount": "14283335.4116994277150854091125720206555826", "deposits": [ { "amount": "16249.93", @@ -19570,7 +19630,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2421946.596295493754033047", - "locked_amount": "7539290.74242029588729622654692751", + "locked_amount": "7532695.62072442640108897986457835", "deposits": [ { "amount": "129284.449", @@ -24158,7 +24218,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2661915.96604085886879872818605393", + "locked_amount": "2659310.19357185744888163578522694", "deposits": [ { "amount": "552496.6455", @@ -25401,8 +25461,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", - "total_removed": "580.0445766491", - "locked_amount": "405052.2236030475504343156164384", + "total_removed": "622.9814487941", + "locked_amount": "404732.99112812817606477193505832", "deposits": [ { "amount": "3000", @@ -32031,6 +32091,11 @@ "user": "0x7708B79e2bc3b7ab816E66aF33A8c9385f0FcA4b", "tx": "0x3ce37e2dab3f254ec65285b01ded923f8acc03d4e0ed0fdae383bcc46c94800e" }, + { + "amount": "42.936872145", + "user": "0xdc040917f80aC350460e55467e4B6c52Fc5e220E", + "tx": "0x1177079901d6f5b6a6b2e8597f7c7b774e5fefa0f820ffe47a0fcf1dd274172e" + }, { "amount": "18.521226534", "user": "0xfeF4b56A370135A17Eef5ba8f5c308451a64Cf86", @@ -50004,10 +50069,17 @@ "tx": "0xb59405747c8088945a412703637a7b422f3639439ec2ee15e180c0a2a0d71ee4" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "42.936872145", + "user": "0xdc040917f80aC350460e55467e4B6c52Fc5e220E", + "tranche_id": 5, + "tx": "0x1177079901d6f5b6a6b2e8597f7c7b774e5fefa0f820ffe47a0fcf1dd274172e" + } + ], "total_tokens": "300", - "withdrawn_tokens": "0", - "remaining_tokens": "300" + "withdrawn_tokens": "42.936872145", + "remaining_tokens": "257.063127855" }, { "address": "0x8D01053B4f4857Ff453CAeDBf8387Cd57a5a2A2b", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index c71c4b434..c5009ef71 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.580352612886855", + "locked_amount": "33.51278221714865", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "232.145833333333348", + "locked_amount": "231.402558980213115", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index ace2722b2..70c4a5653 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "213.1521153602232870002110416983764587", + "locked_amount": "212.46962233637749650021036596270928465", "deposits": [ { "amount": "1000", From 54cf70fa42448ca50ad1a5a02949f4062842d986 Mon Sep 17 00:00:00 2001 From: "m.ray" <16125548+MadalinaRaicu@users.noreply.github.com> Date: Wed, 27 Jul 2022 10:26:32 +0200 Subject: [PATCH 03/61] fix: scrolling trades grid prevRowNode data becomes undefined (#874) --- libs/trades/src/lib/trades-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/trades/src/lib/trades-table.tsx b/libs/trades/src/lib/trades-table.tsx index af9dbda1f..94e165572 100644 --- a/libs/trades/src/lib/trades-table.tsx +++ b/libs/trades/src/lib/trades-table.tsx @@ -24,7 +24,7 @@ const changeCellClass = if (typeof rowIndex === 'number') { const prevRowNode = api.getModel().getRow(rowIndex + 1); - const prevValue = prevRowNode?.data[dataKey]; + const prevValue = prevRowNode?.data && prevRowNode.data[dataKey]; const valueNum = new BigNumber(value); if (valueNum.isGreaterThan(prevValue)) { From e275460c769f4d6d8a47cc9b733f5bb62dfa9100 Mon Sep 17 00:00:00 2001 From: Dexter Edwards Date: Wed, 27 Jul 2022 11:28:29 +0100 Subject: [PATCH 04/61] feat: allow default wallet url to be configured (#875) * feat: allow default wallet url to be configured * docs: add docs to environement package --- apps/token-e2e/.env | 3 ++- apps/token/.env | 1 + apps/trading-e2e/.env | 1 + apps/trading/.env | 1 + libs/environment/README.md | 2 ++ .../src/utils/compile-environment.ts | 2 ++ .../src/utils/validate-environment.ts | 1 + .../connect-dialog/connect-dialog.spec.tsx | 23 +++++++++++++++---- libs/wallet/src/rest-connector-form.tsx | 7 +++--- 9 files changed, 31 insertions(+), 10 deletions(-) diff --git a/apps/token-e2e/.env b/apps/token-e2e/.env index 6d3d52c1f..253cd8dda 100644 --- a/apps/token-e2e/.env +++ b/apps/token-e2e/.env @@ -12,7 +12,8 @@ NX_ETHEREUM_CHAIN_ID=1440 NX_ETH_URL_CONNECT=1 NX_ETH_WALLET_MNEMONIC=ozone access unlock valid olympic save include omit supply green clown session NX_LOCAL_PROVIDER_URL=http://localhost:8545/ +NX_VEGA_WALLET_URL=http://localhost:1789/api/v1 #Test configuration variables CYPRESS_FAIRGROUND=false -CYPRESS_INCLUDE_FLOWS=true \ No newline at end of file +CYPRESS_INCLUDE_FLOWS=true diff --git a/apps/token/.env b/apps/token/.env index c5982dfb4..b254c7be6 100644 --- a/apps/token/.env +++ b/apps/token/.env @@ -8,6 +8,7 @@ NX_FAIRGROUND=false NX_IS_NEW_BRIDGE_CONTRACT=true NX_VEGA_NETWORKS='{"DEVNET":"https://dev.token.vega.xyz","STAGNET":"https://dev.token.vega.xyz","STAGNET2":"staging2.token.vega.xyz","TESTNET":"token.fairground.wtf","MAINNET":"token.vega.xyz"}' NX_GITHUB_FEEDBACK_URL=https://github.com/vegaprotocol/feedback/discussions +NX_VEGA_WALLET_URL=http://localhost:1789/api/v1 #Test configuration variables CYPRESS_FAIRGROUND=false diff --git a/apps/trading-e2e/.env b/apps/trading-e2e/.env index 92559423b..fab1c558d 100644 --- a/apps/trading-e2e/.env +++ b/apps/trading-e2e/.env @@ -1 +1,2 @@ NX_USE_ENV_OVERRIDES=0 +NX_VEGA_WALLET_URL=http://localhost:1789/api/v1 diff --git a/apps/trading/.env b/apps/trading/.env index 1e7125719..cf3e5ef66 100644 --- a/apps/trading/.env +++ b/apps/trading/.env @@ -6,3 +6,4 @@ NX_ETHERSCAN_URL=https://ropsten.etherscan.io NX_VEGA_NETWORKS={\"MAINNET\":\"https://alpha.console.vega.xyz\"} NX_USE_ENV_OVERRIDES=1 NX_VEGA_EXPLORER_URL=https://explorer.fairground.wtf +NX_VEGA_WALLET_URL=http://localhost:1789/api/v1 diff --git a/libs/environment/README.md b/libs/environment/README.md index 32ad9c42f..0666759b5 100644 --- a/libs/environment/README.md +++ b/libs/environment/README.md @@ -12,6 +12,8 @@ The environment variables needed to be present for any app consuming this librar `NX_VEGA_URL` OR `NX_VEGA_CONFIG_URL` - either the network configuration url or a url to a node to directly connect to +`NX_VEGA_WALLET_URL` the default vega wallet URL + For examples, see Block Explorer's .env files [here](../../apps/explorer) ## Running unit tests diff --git a/libs/environment/src/utils/compile-environment.ts b/libs/environment/src/utils/compile-environment.ts index 445c4f786..c733e6434 100644 --- a/libs/environment/src/utils/compile-environment.ts +++ b/libs/environment/src/utils/compile-environment.ts @@ -68,6 +68,8 @@ const getBundledEnvironmentValue = (key: EnvKey) => { return process.env['NX_GITHUB_FEEDBACK_URL']; case 'VEGA_EXPLORER_URL': return process.env['NX_VEGA_EXPLORER_URL']; + case 'VEGA_WALLET_URL': + return process.env['NX_VEGA_WALLET_URL']; } }; diff --git a/libs/environment/src/utils/validate-environment.ts b/libs/environment/src/utils/validate-environment.ts index 2289ab6a2..d3a659c6d 100644 --- a/libs/environment/src/utils/validate-environment.ts +++ b/libs/environment/src/utils/validate-environment.ts @@ -14,6 +14,7 @@ export enum Networks { const schemaObject = { VEGA_URL: z.optional(z.string()), + VEGA_WALLET_URL: z.optional(z.string()), VEGA_CONFIG_URL: z.optional(z.string()), GIT_BRANCH: z.optional(z.string()), GIT_COMMIT_HASH: z.optional(z.string()), diff --git a/libs/wallet/src/connect-dialog/connect-dialog.spec.tsx b/libs/wallet/src/connect-dialog/connect-dialog.spec.tsx index 10bcc271d..77c85e000 100644 --- a/libs/wallet/src/connect-dialog/connect-dialog.spec.tsx +++ b/libs/wallet/src/connect-dialog/connect-dialog.spec.tsx @@ -10,6 +10,7 @@ import { VegaWalletContext } from '../context'; import { VegaConnectDialog } from './connect-dialog'; import type { VegaConnectDialogProps } from '..'; import { RestConnector } from '../connectors'; +import { EnvironmentProvider } from '@vegaprotocol/environment'; let defaultProps: VegaConnectDialogProps; let defaultContextValue: VegaWalletContextShape; @@ -35,16 +36,28 @@ beforeEach(() => { const DEFAULT_URL = 'http://localhost:1789/api/v1'; +const mockEnvironment = { + VEGA_ENV: 'TESTNET', + VEGA_URL: 'https://vega-node.url', + VEGA_NETWORKS: JSON.stringify({}), + GIT_BRANCH: 'test', + GIT_COMMIT_HASH: 'abcdef', + GIT_ORIGIN_URL: 'https://github.com/test/repo', + VEGA_WALLET_URL: DEFAULT_URL, +}; + function generateJSX( props?: Partial, contextValue?: Partial ) { return ( - - - + + + + + ); } diff --git a/libs/wallet/src/rest-connector-form.tsx b/libs/wallet/src/rest-connector-form.tsx index 84666c582..8cbbb6be7 100644 --- a/libs/wallet/src/rest-connector-form.tsx +++ b/libs/wallet/src/rest-connector-form.tsx @@ -1,3 +1,4 @@ +import { useEnvironment } from '@vegaprotocol/environment'; import { t } from '@vegaprotocol/react-helpers'; import { Button, FormGroup, Input, InputError } from '@vegaprotocol/ui-toolkit'; import { useState } from 'react'; @@ -15,21 +16,19 @@ interface RestConnectorFormProps { onAuthenticate: () => void; } -const VEGA_DEFAULT_URL = 'http://localhost:1789/api/v1'; - export function RestConnectorForm({ connector, onAuthenticate, }: RestConnectorFormProps) { const [error, setError] = useState(''); - + const { VEGA_WALLET_URL } = useEnvironment(); const { register, handleSubmit, formState: { errors }, } = useForm({ defaultValues: { - url: VEGA_DEFAULT_URL, + url: VEGA_WALLET_URL, }, }); From b9db97c276b8b73065e9272200f73e072343ec3e Mon Sep 17 00:00:00 2001 From: "m.ray" <16125548+MadalinaRaicu@users.noreply.github.com> Date: Wed, 27 Jul 2022 12:28:43 +0200 Subject: [PATCH 05/61] feat: #876 add explicit time in force labels (#877) * feat: #876 add explicit time in force labels * fix: update GTC and GTT * fix: update GTC and GTT * fix: deal ticket test update --- .../src/components/deal-ticket.spec.tsx | 194 +++++++++--------- .../src/components/time-in-force-selector.tsx | 22 +- 2 files changed, 119 insertions(+), 97 deletions(-) diff --git a/libs/deal-ticket/src/components/deal-ticket.spec.tsx b/libs/deal-ticket/src/components/deal-ticket.spec.tsx index 2b06c0c6e..59431d73c 100644 --- a/libs/deal-ticket/src/components/deal-ticket.spec.tsx +++ b/libs/deal-ticket/src/components/deal-ticket.spec.tsx @@ -7,8 +7,8 @@ import { addDecimal } from '@vegaprotocol/react-helpers'; import { fireEvent, render, screen, act } from '@testing-library/react'; import { DealTicket } from './deal-ticket'; import type { DealTicketQuery_market } from './__generated__/DealTicketQuery'; -import type { Order } from '../utils/get-default-order'; import { MarketState, MarketTradingMode } from '@vegaprotocol/types'; +import type { Order } from '@vegaprotocol/orders'; const market: DealTicketQuery_market = { __typename: 'Market', @@ -59,109 +59,111 @@ function generateJsx(order?: Order) { ); } -it('Displays ticket defaults', () => { - render(generateJsx()); +describe('DealTicket', () => { + it('Displays ticket defaults', () => { + render(generateJsx()); - // Assert defaults are used - expect( - screen.getByTestId(`order-type-${VegaWalletOrderType.Market}-selected`) - ).toBeInTheDocument(); - expect( - screen.queryByTestId('order-side-SIDE_BUY-selected') - ).toBeInTheDocument(); - expect( - screen.queryByTestId('order-side-SIDE_SELL-selected') - ).not.toBeInTheDocument(); - expect(screen.getByTestId('order-size')).toHaveDisplayValue( - String(1 / Math.pow(10, market.positionDecimalPlaces)) - ); - expect(screen.getByTestId('order-tif')).toHaveValue( - VegaWalletOrderTimeInForce.IOC - ); + // Assert defaults are used + expect( + screen.getByTestId(`order-type-${VegaWalletOrderType.Market}-selected`) + ).toBeInTheDocument(); + expect( + screen.queryByTestId('order-side-SIDE_BUY-selected') + ).toBeInTheDocument(); + expect( + screen.queryByTestId('order-side-SIDE_SELL-selected') + ).not.toBeInTheDocument(); + expect(screen.getByTestId('order-size')).toHaveDisplayValue( + String(1 / Math.pow(10, market.positionDecimalPlaces)) + ); + expect(screen.getByTestId('order-tif')).toHaveValue( + VegaWalletOrderTimeInForce.IOC + ); - // Assert last price is shown - expect(screen.getByTestId('last-price')).toHaveTextContent( - // eslint-disable-next-line - `~${addDecimal(market.depth.lastTrade!.price, market.decimalPlaces)} ${ - market.tradableInstrument.instrument.product.quoteName - }` - ); -}); + // Assert last price is shown + expect(screen.getByTestId('last-price')).toHaveTextContent( + // eslint-disable-next-line + `~${addDecimal(market.depth.lastTrade!.price, market.decimalPlaces)} ${ + market.tradableInstrument.instrument.product.quoteName + }` + ); + }); -it('Can edit deal ticket', async () => { - render(generateJsx()); + it('Can edit deal ticket', async () => { + render(generateJsx()); - // BUY is selected by default - screen.getByTestId('order-side-SIDE_BUY-selected'); + // BUY is selected by default + screen.getByTestId('order-side-SIDE_BUY-selected'); - await act(async () => { - fireEvent.change(screen.getByTestId('order-size'), { - target: { value: '200' }, + await act(async () => { + fireEvent.change(screen.getByTestId('order-size'), { + target: { value: '200' }, + }); }); + + expect(screen.getByTestId('order-size')).toHaveDisplayValue('200'); + + fireEvent.change(screen.getByTestId('order-tif'), { + target: { value: VegaWalletOrderTimeInForce.IOC }, + }); + expect(screen.getByTestId('order-tif')).toHaveValue( + VegaWalletOrderTimeInForce.IOC + ); + + // Switch to limit order + fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT')); + + // Assert price input shown with default value + expect(screen.getByTestId('order-price')).toHaveDisplayValue('0'); + + // Check all TIF options shown + expect(screen.getByTestId('order-tif').children).toHaveLength( + Object.keys(VegaWalletOrderTimeInForce).length + ); }); - expect(screen.getByTestId('order-size')).toHaveDisplayValue('200'); + it('Handles TIF select box dependent on order type', () => { + render(generateJsx()); - fireEvent.change(screen.getByTestId('order-tif'), { - target: { value: VegaWalletOrderTimeInForce.IOC }, + // Check only IOC and + expect( + Array.from(screen.getByTestId('order-tif').children).map( + (o) => o.textContent + ) + ).toEqual(['Immediate or Cancel (IOC)', 'Fill or Kill (FOK)']); + + // Switch to limit order and check all TIF options shown + fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT')); + expect(screen.getByTestId('order-tif').children).toHaveLength( + Object.keys(VegaWalletOrderTimeInForce).length + ); + + // Change to GTC + fireEvent.change(screen.getByTestId('order-tif'), { + target: { value: VegaWalletOrderTimeInForce.GTC }, + }); + expect(screen.getByTestId('order-tif')).toHaveValue( + VegaWalletOrderTimeInForce.GTC + ); + + // Switch back to market order and TIF should now be IOC + fireEvent.click(screen.getByTestId('order-type-TYPE_MARKET')); + expect(screen.getByTestId('order-tif')).toHaveValue( + VegaWalletOrderTimeInForce.IOC + ); + + // Switch tif to FOK + fireEvent.change(screen.getByTestId('order-tif'), { + target: { value: VegaWalletOrderTimeInForce.FOK }, + }); + expect(screen.getByTestId('order-tif')).toHaveValue( + VegaWalletOrderTimeInForce.FOK + ); + + // Change back to limit and check we are still on FOK + fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT')); + expect(screen.getByTestId('order-tif')).toHaveValue( + VegaWalletOrderTimeInForce.FOK + ); }); - expect(screen.getByTestId('order-tif')).toHaveValue( - VegaWalletOrderTimeInForce.IOC - ); - - // Switch to limit order - fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT')); - - // Assert price input shown with default value - expect(screen.getByTestId('order-price')).toHaveDisplayValue('0'); - - // Check all TIF options shown - expect(screen.getByTestId('order-tif').children).toHaveLength( - Object.keys(VegaWalletOrderTimeInForce).length - ); -}); - -it('Handles TIF select box dependent on order type', () => { - render(generateJsx()); - - // Check only IOC and - expect( - Array.from(screen.getByTestId('order-tif').children).map( - (o) => o.textContent - ) - ).toEqual(['IOC', 'FOK']); - - // Switch to limit order and check all TIF options shown - fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT')); - expect(screen.getByTestId('order-tif').children).toHaveLength( - Object.keys(VegaWalletOrderTimeInForce).length - ); - - // Change to GTC - fireEvent.change(screen.getByTestId('order-tif'), { - target: { value: VegaWalletOrderTimeInForce.GTC }, - }); - expect(screen.getByTestId('order-tif')).toHaveValue( - VegaWalletOrderTimeInForce.GTC - ); - - // Switch back to market order and TIF should now be IOC - fireEvent.click(screen.getByTestId('order-type-TYPE_MARKET')); - expect(screen.getByTestId('order-tif')).toHaveValue( - VegaWalletOrderTimeInForce.IOC - ); - - // Switch tif to FOK - fireEvent.change(screen.getByTestId('order-tif'), { - target: { value: VegaWalletOrderTimeInForce.FOK }, - }); - expect(screen.getByTestId('order-tif')).toHaveValue( - VegaWalletOrderTimeInForce.FOK - ); - - // Change back to limit and check we are still on FOK - fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT')); - expect(screen.getByTestId('order-tif')).toHaveValue( - VegaWalletOrderTimeInForce.FOK - ); }); diff --git a/libs/deal-ticket/src/components/time-in-force-selector.tsx b/libs/deal-ticket/src/components/time-in-force-selector.tsx index 6f7dd17b7..5852aca45 100644 --- a/libs/deal-ticket/src/components/time-in-force-selector.tsx +++ b/libs/deal-ticket/src/components/time-in-force-selector.tsx @@ -11,6 +11,26 @@ interface TimeInForceSelectorProps { onSelect: (tif: VegaWalletOrderTimeInForce) => void; } +// More detail in https://docs.vega.xyz/docs/mainnet/graphql/enums/order-time-in-force +export const timeInForceLabel = (tif: string) => { + switch (tif) { + case VegaWalletOrderTimeInForce.GTC: + return t(`Good 'til Cancelled`); + case VegaWalletOrderTimeInForce.IOC: + return t('Immediate or Cancel'); + case VegaWalletOrderTimeInForce.FOK: + return t('Fill or Kill'); + case VegaWalletOrderTimeInForce.GTT: + return t(`Good 'til Time`); + case VegaWalletOrderTimeInForce.GFN: + return t('Good for Normal'); + case VegaWalletOrderTimeInForce.GFA: + return t('Good for Auction'); + default: + return t(tif); + } +}; + export const TimeInForceSelector = ({ value, orderType, @@ -37,7 +57,7 @@ export const TimeInForceSelector = ({ {options.map(([key, value]) => { return ( ); })} From 714f5fc8e8db4d16d9432f23fbea399f5c7ba9f0 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 27 Jul 2022 11:40:39 +0100 Subject: [PATCH 06/61] frontend-monorepo-863 Block explorer menu: "Proposals" should say Governance proposals (#878) --- apps/explorer/src/app/routes/governance/index.tsx | 4 +++- apps/explorer/src/app/routes/router-config.tsx | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/explorer/src/app/routes/governance/index.tsx b/apps/explorer/src/app/routes/governance/index.tsx index 659cdcd82..b64bed16f 100644 --- a/apps/explorer/src/app/routes/governance/index.tsx +++ b/apps/explorer/src/app/routes/governance/index.tsx @@ -108,7 +108,9 @@ const Governance = () => { if (!data) return null; return (
- {t('Governance')} + + {t('Governance Proposals')} + {data.proposals?.map((p) => ( {getProposalName(p.terms.change)} diff --git a/apps/explorer/src/app/routes/router-config.tsx b/apps/explorer/src/app/routes/router-config.tsx index 7117c326f..5dd0d3ac3 100644 --- a/apps/explorer/src/app/routes/router-config.tsx +++ b/apps/explorer/src/app/routes/router-config.tsx @@ -66,8 +66,8 @@ const governanceRoutes = flags.governance ? [ { path: Routes.GOVERNANCE, - name: 'Governance', - text: t('Proposals'), + name: 'Governance proposals', + text: t('Governance Proposals'), element: , }, ] From 228cda40546fb836bd32e642b6758b3be2b812e5 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 27 Jul 2022 12:12:05 +0100 Subject: [PATCH 07/61] frontend-monorepo-836: Theme switcher - light toggle had wrong font colour (#879) --- .../ui-toolkit/src/components/theme-switcher/theme-switcher.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/ui-toolkit/src/components/theme-switcher/theme-switcher.tsx b/libs/ui-toolkit/src/components/theme-switcher/theme-switcher.tsx index 3edbd9fbf..e64076eaa 100644 --- a/libs/ui-toolkit/src/components/theme-switcher/theme-switcher.tsx +++ b/libs/ui-toolkit/src/components/theme-switcher/theme-switcher.tsx @@ -13,7 +13,7 @@ export const ThemeSwitcher = ({ sunClassName?: string; moonClassName?: string; }) => { - const sunClasses = classNames('dark:hidden text-white', sunClassName); + const sunClasses = classNames('dark:hidden text-black', sunClassName); const moonClasses = classNames( 'hidden dark:inline text-white', moonClassName From 6382d3fb220abacefd271f400ab128c07daee52d Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 27 Jul 2022 12:45:38 +0100 Subject: [PATCH 08/61] Fix/881: Removed testing message in proposals list voteStatus (#882) --- .../proposals-list-item/proposals-list-item-details.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/token/src/routes/governance/components/proposals-list-item/proposals-list-item-details.tsx b/apps/token/src/routes/governance/components/proposals-list-item/proposals-list-item-details.tsx index 0a607e3b3..cb12ae611 100644 --- a/apps/token/src/routes/governance/components/proposals-list-item/proposals-list-item-details.tsx +++ b/apps/token/src/routes/governance/components/proposals-list-item/proposals-list-item-details.tsx @@ -189,7 +189,6 @@ export const ProposalsListItemDetails = ({ className="col-start-2 row-start-1 justify-self-end" data-testid="vote-status" > - testing testing 123 {voteStatus} )} From be8bfc81de2e25687d431dcfb5e1b4625c814f4e Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 27 Jul 2022 12:46:00 +0100 Subject: [PATCH 09/61] Fix/829: Git info word length broke responsiveness (#880) --- libs/network-info/src/network-info.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/network-info/src/network-info.tsx b/libs/network-info/src/network-info.tsx index 35967de16..3db53eb69 100644 --- a/libs/network-info/src/network-info.tsx +++ b/libs/network-info/src/network-info.tsx @@ -31,7 +31,7 @@ export const NetworkInfo = () => { . setNodeSwitcherOpen()}>{t('Edit')}

-

+

{t('Reading Ethereum data from')}{' '} {ETHEREUM_PROVIDER_URL} From 20720c6ddc109a1373b7d847485dbbdff62dd5ee Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 27 Jul 2022 12:05:01 +0000 Subject: [PATCH 10/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 85 +++++++++++++------ apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 63 insertions(+), 28 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index e91e26671..2fdab46ca 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117603.58652948537742957", + "locked_amount": "117544.29943069494598218", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58580.3647387115488332", + "locked_amount": "58522.209617641210164276", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "80069.24511975730205463012744", + "locked_amount": "79989.75710931694850663014992", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24643.747816787289562354", + "locked_amount": "24619.282961638217373838", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "8021.300777095928290488", + "locked_amount": "8013.337704146241582245", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11830.40789175724725", + "locked_amount": "11799.847146739131", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1646262.801842317880776074", + "locked_amount": "1644934.51437690273220166", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "10113.1736283674289138887899580508", + "locked_amount": "10074.1371378841014463592117794488", "deposits": [ { "amount": "2833.333333", @@ -5514,7 +5514,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8288.51201225622", - "locked_amount": "2586.40721492897082590031024476788432277", + "locked_amount": "2569.28262937595102120030819063926940636", "deposits": [ { "amount": "2", @@ -16441,8 +16441,8 @@ "tranche_start": "2022-03-05T00:00:00.000Z", "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", - "total_removed": "144843.5352821052414", - "locked_amount": "2554234.08333003981993526604", + "total_removed": "148381.2401909658774", + "locked_amount": "2552192.96795627356824965788", "deposits": [ { "amount": "1998.95815", @@ -16611,6 +16611,11 @@ } ], "withdrawals": [ + { + "amount": "3537.704908860636", + "user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0", + "tx": "0x94e1cf9e13f0d65808fb9a27364952be89155eab13f6b4259acced06c18694fc" + }, { "amount": "20676.42232", "user": "0x93b478148FF792B00076B7EdC89Db1FdE7772079", @@ -16710,6 +16715,12 @@ } ], "withdrawals": [ + { + "amount": "3537.704908860636", + "user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0", + "tranche_id": 1, + "tx": "0x94e1cf9e13f0d65808fb9a27364952be89155eab13f6b4259acced06c18694fc" + }, { "amount": "38390.8952661194945", "user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0", @@ -16724,8 +16735,8 @@ } ], "total_tokens": "187637.95", - "withdrawn_tokens": "55736.5564673891205", - "remaining_tokens": "131901.3935326108795" + "withdrawn_tokens": "59274.2613762497565", + "remaining_tokens": "128363.6886237502435" }, { "address": "0x1A71e3ED1996CAbB91bB043f880CE963D601707e", @@ -17187,8 +17198,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", - "total_removed": "67542.001079865509505", - "locked_amount": "14283335.4116994277150854091125720206555826", + "total_removed": "68723.265724167975505", + "locked_amount": "14276134.8020700778558626189285810241200324", "deposits": [ { "amount": "16249.93", @@ -17692,6 +17703,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0x4303f2bca5e794329a9dd8b34e0bf4f29234f1fa5a920c48a8203b62529aba13" }, + { + "amount": "1181.264644302466", + "user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0", + "tx": "0xa67914a8bbc426c6faa561af9417fafae696f08823d534b37a93adc0801e66a7" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -19002,10 +19018,17 @@ "tx": "0x2fbd183386974d45954eb28b4def917a8c9dfb1cf6538d754378ba4ce9756126" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "1181.264644302466", + "user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0", + "tranche_id": 2, + "tx": "0xa67914a8bbc426c6faa561af9417fafae696f08823d534b37a93adc0801e66a7" + } + ], "total_tokens": "12362.05", - "withdrawn_tokens": "0", - "remaining_tokens": "12362.05" + "withdrawn_tokens": "1181.264644302466", + "remaining_tokens": "11180.785355697534" }, { "address": "0xb091D456d0dFCB94dcba6f355379056C5bb995fC", @@ -19630,7 +19653,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2421946.596295493754033047", - "locked_amount": "7532695.62072442640108897986457835", + "locked_amount": "7526013.85547416362304739291461938", "deposits": [ { "amount": "129284.449", @@ -24218,7 +24241,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2659310.19357185744888163578522694", + "locked_amount": "2656670.18771049829400989350494552", "deposits": [ { "amount": "552496.6455", @@ -25462,7 +25485,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "622.9814487941", - "locked_amount": "404732.99112812817606477193505832", + "locked_amount": "404409.56472964196813674575038052", "deposits": [ { "amount": "3000", @@ -51354,7 +51377,7 @@ "tranche_start": "2021-12-05T00:00:00.000Z", "tranche_end": "2022-06-05T00:00:00.000Z", "total_added": "171288.42", - "total_removed": "40866.0912801057989", + "total_removed": "41016.0912801057989", "locked_amount": "0", "deposits": [ { @@ -55599,6 +55622,11 @@ "user": "0x72bB3eB15F285F8e2893a29287186d5210590C22", "tx": "0xc47354b308b7512768605c9e908e87620df22c197d7d2c769728f1d64dc164d3" }, + { + "amount": "150", + "user": "0x6EE016F4512C910b401B18087BBAC15412dD97cA", + "tx": "0xbc09d1b5e70ce11912142519f7372859423f6475ce3c0f38c098b6bdf8be4480" + }, { "amount": "250", "user": "0x1f7C20Bd98B2f346A58d2c5faaFc940E0C36450E", @@ -59577,10 +59605,17 @@ "tx": "0x1c2c084e3efafb2ffa09c0b259bd229cce0d6da04dd092d911c7e6136a7ac8a9" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "150", + "user": "0x6EE016F4512C910b401B18087BBAC15412dD97cA", + "tranche_id": 6, + "tx": "0xbc09d1b5e70ce11912142519f7372859423f6475ce3c0f38c098b6bdf8be4480" + } + ], "total_tokens": "150", - "withdrawn_tokens": "0", - "remaining_tokens": "150" + "withdrawn_tokens": "150", + "remaining_tokens": "0" }, { "address": "0xaA6522d3c033Adf9C149408526C539aaa91d5b67", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index c5009ef71..28a440e1c 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.51278221714865", + "locked_amount": "33.44429857940132", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "231.402558980213115", + "locked_amount": "230.649238964992364", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index 70c4a5653..28c4d7bcb 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "212.46962233637749650021036596270928465", + "locked_amount": "211.77793759512935240020968112633181124", "deposits": [ { "amount": "1000", From 363562e3305cd18b3d960c7d2a41c2e173561823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szpiech?= Date: Wed, 27 Jul 2022 14:46:02 +0200 Subject: [PATCH 11/61] test: fix staking functions and association tests (#883) Co-authored-by: Rado --- apps/token-e2e/src/integration/flow/staking-flow.cy.js | 3 ++- .../src/integration/flow/token-association-flow.cy.js | 4 ++-- apps/token-e2e/src/support/wallet-teardown.functions.js | 8 ++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/token-e2e/src/integration/flow/staking-flow.cy.js b/apps/token-e2e/src/integration/flow/staking-flow.cy.js index 3621305d4..0d7d826bd 100644 --- a/apps/token-e2e/src/integration/flow/staking-flow.cy.js +++ b/apps/token-e2e/src/integration/flow/staking-flow.cy.js @@ -25,7 +25,8 @@ const ethWalletContainer = '[data-testid="ethereum-wallet"]'; const txTimeout = { timeout: 40000 }; const epochTimeout = { timeout: 10000 }; -context('Staking Tab - with eth and vega wallets connected', function () { +// Tests skipped because of change of the UI of data nodes +context.skip('Staking Tab - with eth and vega wallets connected', function () { before('visit staking tab and connect vega wallet', function () { cy.vega_wallet_import(); cy.visit('/'); diff --git a/apps/token-e2e/src/integration/flow/token-association-flow.cy.js b/apps/token-e2e/src/integration/flow/token-association-flow.cy.js index 12074d615..394023492 100644 --- a/apps/token-e2e/src/integration/flow/token-association-flow.cy.js +++ b/apps/token-e2e/src/integration/flow/token-association-flow.cy.js @@ -1,4 +1,4 @@ -const validatorList = '[data-testid="node-list-item-name"]'; +const validatorsGrid = '[data-testid="validators-grid"]'; const ethWalletContainer = '[data-testid="ethereum-wallet"]'; const ethWalletAssociatedBalances = '[data-testid="eth-wallet-associated-balances"]'; @@ -23,7 +23,7 @@ context( cy.ethereum_wallet_connect(); cy.navigate_to('staking'); cy.wait_for_spinner(); - cy.get(validatorList).first().invoke('text').as('validatorName'); + cy.get(validatorsGrid).should('be.visible'); }); describe('Eth wallet - contains VEGA tokens', function () { diff --git a/apps/token-e2e/src/support/wallet-teardown.functions.js b/apps/token-e2e/src/support/wallet-teardown.functions.js index 46eabf2f6..b34700bfe 100644 --- a/apps/token-e2e/src/support/wallet-teardown.functions.js +++ b/apps/token-e2e/src/support/wallet-teardown.functions.js @@ -75,7 +75,7 @@ Cypress.Commands.add( (stakingBridgeContract) => { cy.highlight('Tearing down staking tokens from vega wallet if present'); cy.wrap( - stakingBridgeContract.stakeBalance(ethWalletPubKey, vegaWalletPubKey), + stakingBridgeContract.stake_balance(ethWalletPubKey, vegaWalletPubKey), { timeout: transactionTimeout, log: false, @@ -83,7 +83,7 @@ Cypress.Commands.add( ).then((stake_amount) => { if (String(stake_amount) != '0') { cy.wrap( - stakingBridgeContract.removeStake(stake_amount, vegaWalletPubKey), + stakingBridgeContract.remove_stake(stake_amount, vegaWalletPubKey), { timeout: transactionTimeout, log: false } ).then((tx) => { cy.wait_for_transaction(tx); @@ -95,12 +95,12 @@ Cypress.Commands.add( Cypress.Commands.add('vega_wallet_teardown_vesting', (vestingContract) => { cy.highlight('Tearing down vesting tokens from vega wallet if present'); - cy.wrap(vestingContract.stakeBalance(ethWalletPubKey, vegaWalletPubKey), { + cy.wrap(vestingContract.stake_balance(ethWalletPubKey, vegaWalletPubKey), { timeout: transactionTimeout, log: false, }).then((vesting_amount) => { if (String(vesting_amount) != '0') { - cy.wrap(vestingContract.removeStake(vesting_amount, vegaWalletPubKey), { + cy.wrap(vestingContract.remove_stake(vesting_amount, vegaWalletPubKey), { timeout: transactionTimeout, log: false, }).then((tx) => { From e3dd73531cd8d31c76ccb53ca12eb0a27450ba39 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 27 Jul 2022 15:30:29 +0100 Subject: [PATCH 12/61] Fix/872: Remove useThemeSwitcher from Token as it's redundant and was stripping dark class (#886) --- apps/token/src/app.tsx | 2 +- apps/token/src/hooks/use-animate-value.ts | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/apps/token/src/app.tsx b/apps/token/src/app.tsx index 4c9e2edcf..15c1f6e73 100644 --- a/apps/token/src/app.tsx +++ b/apps/token/src/app.tsx @@ -49,7 +49,7 @@ const AppContainer = () => { <> -

+
diff --git a/apps/token/src/hooks/use-animate-value.ts b/apps/token/src/hooks/use-animate-value.ts index fd376663c..174b32892 100644 --- a/apps/token/src/hooks/use-animate-value.ts +++ b/apps/token/src/hooks/use-animate-value.ts @@ -2,7 +2,6 @@ import React from 'react'; import { usePrevious } from './use-previous'; import type { BigNumber } from '../lib/bignumber'; import { theme as tailwindcss } from '@vegaprotocol/tailwindcss-config'; -import { useThemeSwitcher } from '@vegaprotocol/react-helpers'; const Colors = tailwindcss.colors; const FLASH_DURATION = 1200; // Duration of flash animation in milliseconds @@ -13,7 +12,6 @@ export function useAnimateValue( ) { const shouldAnimate = React.useRef(false); const previous = usePrevious(value); - const [theme] = useThemeSwitcher(); React.useEffect(() => { const timeout = setTimeout(() => { @@ -38,8 +36,7 @@ export function useAnimateValue( offset: 0.8, }, { - backgroundColor: - theme === 'dark' ? Colors.white[60] : Colors.black[60], + backgroundColor: Colors.white[60], color: Colors.white.DEFAULT, }, ], @@ -64,8 +61,7 @@ export function useAnimateValue( offset: 0.8, }, { - backgroundColor: - theme === 'dark' ? Colors.white[60] : Colors.black[60], + backgroundColor: Colors.white[60], color: Colors.white.DEFAULT, }, ], From f1c3eab914696855908af335a9b1347e6556e1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szpiech?= Date: Wed, 27 Jul 2022 16:46:30 +0200 Subject: [PATCH 13/61] test(token): validations added for vega wallet widget (#885) * test(token): validations added for vega wallet widget * test: add missing vega wallet import * test: add validation for url value Co-authored-by: Rado --- .../src/integration/view/wallet-vega.cy.js | 287 ++++++++++++++++++ .../components/vega-wallet/vega-wallet.tsx | 11 +- .../src/manage-dialog/manage-dialog.tsx | 17 +- 3 files changed, 310 insertions(+), 5 deletions(-) create mode 100644 apps/token-e2e/src/integration/view/wallet-vega.cy.js diff --git a/apps/token-e2e/src/integration/view/wallet-vega.cy.js b/apps/token-e2e/src/integration/view/wallet-vega.cy.js new file mode 100644 index 000000000..1ab4d69db --- /dev/null +++ b/apps/token-e2e/src/integration/view/wallet-vega.cy.js @@ -0,0 +1,287 @@ +const walletContainer = '[data-testid="vega-wallet"]'; +const walletHeader = '[data-testid="wallet-header"] h1'; +const connectButton = '[data-testid="connect-vega"]'; +const getVegaLink = '[data-testid="link"]'; +const dialog = '[role="dialog"]'; +const dialogHeader = '[data-testid="dialog-title"]'; +const connectorsList = '[data-testid="connectors-list"]'; +const dialogCloseBtn = '[data-testid="dialog-close"]'; +const restConnectorForm = '[data-testid="rest-connector-form"]'; +const restUrl = '#url'; +const restWallet = '#wallet'; +const restPassphrase = '#passphrase'; +const restConnectBtn = '[type="submit"]'; +const accountNo = '[data-testid="vega-account-truncated"]'; +const walletName = '[data-testid="wallet-name"]'; +const currencyTitle = '[data-testid="currency-title"]'; +const currencyValue = '[data-testid="currency-value"]'; +const vegaUnstaked = '[data-testid="vega-wallet-balance-unstaked"] .text-right'; +const governanceBtn = '[href="/governance"]'; +const stakingBtn = '[href="/staking"]'; +const manageLink = '[data-testid="manage-vega-wallet"]'; +const dialogWalletName = `[data-testid="key-${Cypress.env( + 'vegaWalletPublicKey' +)}"] h2`; +const dialogVegaKey = '[data-testid="vega-public-key-full"]'; +const dialogDisconnectBtn = '[data-testid="disconnect"]'; +const copyPublicKeyBtn = '[data-testid="copy-vega-public-key"]'; + +context('Vega Wallet - verify elements on widget', function () { + before('visit token home page', function () { + cy.visit('/'); + }); + + describe('with wallets disconnected', function () { + before('wait for widget to load', function () { + cy.get(walletContainer, { timeout: 10000 }).should('be.visible'); + }); + + it('should have VEGA WALLET header visible', function () { + cy.get(walletContainer).within(() => { + cy.get(walletHeader) + .should('be.visible') + .and('have.text', 'Vega Wallet'); + }); + }); + + it('should have Connect Vega button visible', function () { + cy.get(walletContainer).within(() => { + cy.get(connectButton) + .should('be.visible') + .and('have.text', 'Connect Vega wallet to use associated $VEGA'); + }); + }); + + it('should have Get a Vega wallet link visible', function () { + cy.get(walletContainer).within(() => { + cy.get(getVegaLink) + .should('be.visible') + .and('have.text', 'Get a Vega wallet') + .and('have.attr', 'href', 'https://vega.xyz/wallet'); + }); + }); + }); + + describe('when connect button clicked', function () { + before('click connect vega wallet button', function () { + cy.get(walletContainer).within(() => { + cy.get(connectButton).click(); + }); + }); + + it('should have Connect Vega header visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogHeader) + .should('be.visible') + .and('have.text', 'Connect to your Vega Wallet'); + }); + }); + + it('should have REST connector visible on list', function () { + cy.get(connectorsList).within(() => { + cy.get('button').should('be.visible').and('have.text', 'rest provider'); + }); + }); + + it('should have close button visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogCloseBtn).should('be.visible'); + }); + }); + }); + + describe('when rest connector form opened', function () { + before('click rest provider link', function () { + cy.get(connectorsList).within(() => { + cy.get('button').click(); + }); + }); + + it('should have url field visible', function () { + cy.get(restConnectorForm).within(() => { + cy.get(restUrl) + .should('be.visible') + .and('have.value', 'http://localhost:1789/api/v1'); + }); + }); + + it('should have wallet field visible', function () { + cy.get(restConnectorForm).within(() => { + cy.get(restWallet).should('be.visible'); + }); + }); + + it('should have password field visible', function () { + cy.get(restConnectorForm).within(() => { + cy.get(restPassphrase).should('be.visible'); + }); + }); + + it('should have connect button visible', function () { + cy.get(restConnectorForm).within(() => { + cy.get(restConnectBtn).should('be.visible').and('have.text', 'Connect'); + }); + }); + + it('should have Connect Vega header visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogHeader) + .should('be.visible') + .and('have.text', 'Connect to your Vega Wallet'); + }); + }); + + it('should have close button visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogCloseBtn).should('be.visible'); + }); + }); + + // after('close dialog', function () { + // cy.get(dialogCloseBtn).click().should('not.exist'); + // }); - to be changed when dialog state is fixed - https://github.com/vegaprotocol/frontend-monorepo/issues/838 + }); + + describe('when vega wallet connected', function () { + before('connect vega wallet', function () { + cy.vega_wallet_import(); + + // cy.vega_wallet_connect(); - to be changed when dialog state is fixed - https://github.com/vegaprotocol/frontend-monorepo/issues/838 + // then code below can be removed + cy.get(restConnectorForm).within(() => { + cy.get('#wallet').click().type(Cypress.env('vegaWalletName')); + cy.get('#passphrase').click().type(Cypress.env('vegaWalletPassphrase')); + cy.get('button').contains('Connect').click(); + }); + }); + + it('should have VEGA WALLET header visible', function () { + cy.get(walletContainer).within(() => { + cy.get(walletHeader) + .should('be.visible') + .and('have.text', 'Vega Wallet'); + }); + }); + + it('should have truncated account number visible', function () { + cy.get(walletContainer).within(() => { + cy.get(accountNo) + .should('be.visible') + .and('have.text', Cypress.env('vegaWalletPublicKeyShort')); + }); + }); + + it('should have wallet name visible', function () { + cy.get(walletContainer).within(() => { + cy.get(walletName) + .should('be.visible') + .and('have.text', `${Cypress.env('vegaWalletName')} key 1`); + }); + }); + + it('should have Vega Associated currency title visible', function () { + cy.get(walletContainer).within(() => { + cy.get(currencyTitle) + .should('be.visible') + .and('have.text', `VEGAAssociated`); + }); + }); + + it('should have Vega Associated currency value visible', function () { + cy.get(walletContainer).within(() => { + cy.get(currencyValue) + .should('be.visible') + .and('have.text', `0.000000000000000000`); + }); + }); + + it('should have Unstaked value visible', function () { + cy.get(walletContainer).within(() => { + cy.get(vegaUnstaked) + .should('be.visible') + .and('have.text', `0.000000000000000000`); + }); + }); + + it('should have Governance button visible', function () { + cy.get(walletContainer).within(() => { + cy.get(governanceBtn) + .should('be.visible') + .and('have.text', 'Governance'); + }); + }); + + it('should have Staking button visible', function () { + cy.get(walletContainer).within(() => { + cy.get(stakingBtn).should('be.visible').and('have.text', 'Staking'); + }); + }); + + it('should have Manage link visible', function () { + cy.get(walletContainer).within(() => { + cy.get(manageLink).should('be.visible').and('have.text', 'Manage'); + }); + }); + }); + + describe('when Manage dialog opened', function () { + before('click Manage link', function () { + cy.get(walletContainer).within(() => { + cy.get(manageLink).click(); + }); + }); + + it('should have SELECT A VEGA KEY dialog title visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogHeader) + .should('be.visible') + .and('have.text', 'SELECT A VEGA KEY'); + }); + }); + + it('should have wallet name visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogWalletName) + .should('be.visible') + .and('have.text', `${Cypress.env('vegaWalletName')} key 1`); + }); + }); + + it('should have vega wallet public key visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogVegaKey) + .should('be.visible') + .and('have.text', `${Cypress.env('vegaWalletPublicKey')}`); + }); + }); + + it('should have copy public key button visible', function () { + cy.get(dialog).within(() => { + cy.get(copyPublicKeyBtn).should('be.visible').and('have.text', 'Copy'); + }); + }); + + it('should have close button visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogCloseBtn).should('be.visible'); + }); + }); + + it('should have vega Disconnect all keys button visible', function () { + cy.get(dialog).within(() => { + cy.get(dialogDisconnectBtn) + .should('be.visible') + .and('have.text', 'Disconnect all keys'); + }); + }); + + it('should be able to disconnect all keys', function () { + cy.get(dialog).within(() => { + cy.get(dialogDisconnectBtn).click(); + }); + cy.get(walletContainer).within(() => { + cy.get(connectButton).should('be.visible'); + }); + }); + }); +}); diff --git a/apps/token/src/components/vega-wallet/vega-wallet.tsx b/apps/token/src/components/vega-wallet/vega-wallet.tsx index ff81d2a17..a73e6f5a6 100644 --- a/apps/token/src/components/vega-wallet/vega-wallet.tsx +++ b/apps/token/src/components/vega-wallet/vega-wallet.tsx @@ -43,10 +43,16 @@ export const VegaWallet = () => {

{t('vegaWallet')}

{keypair && ( <> -
+
{keypair.name}
- + {truncateMiddle(keypair.pub)} @@ -129,6 +135,7 @@ const VegaWalletConnected = ({ vegaKeys }: VegaWalletConnectedProps) => { const footer = ( )}
-

+

{truncateByChars(kp.pub, 23, 23)}

-

{kp.pub}

+

+ {kp.pub} +

- From 6c976a0da327c551d31747b0dbb314cd56e59167 Mon Sep 17 00:00:00 2001 From: macqbat Date: Wed, 27 Jul 2022 18:09:27 +0200 Subject: [PATCH 14/61] feat: [console-lite] - trading - order review (#842) * feat: [console-lite] - trading - order review * feat: [console-lite] - trading - order review - fix margin calcs * feat: [console-lite] - add order margin calcs * feat: [console-lite] - add order margin calcs - improve margin calcs * feat: [console-lite] - add order margin calcs - add int test * feat: [console-lite] - add order margin calcs - improve int test Co-authored-by: maciek --- apps/simple-trading-app-e2e/.env | 1 + apps/simple-trading-app-e2e/cypress.config.js | 18 +++ .../src/integration/market-trade.test.ts | 48 ++++++ .../support/mocks/generate-estimate-order.ts | 12 ++ .../mocks/generate-market-positions.ts | 43 ++++++ .../src/support/mocks/generate-market-tags.ts | 25 +++ .../support/mocks/generate-party-balance.ts | 53 +++++++ apps/simple-trading-app/.env | 1 + .../deal-ticket/__generated__/MarketTags.ts | 51 ++++++ .../deal-ticket/deal-ticket-container.tsx | 2 +- .../deal-ticket/deal-ticket-steps.tsx | 53 ++++--- .../components/deal-ticket/review-trade.tsx | 146 ++++++++++++++++++ .../components/deal-ticket/side-selector.tsx | 2 + .../simple-market-expires.spec.tsx | 4 +- .../src/app/constants/index.ts | 2 +- .../app/hooks/__generated__/estimateOrder.ts | 48 ++++++ .../hooks/__generated__/marketPositions.ts | 76 +++++++++ .../src/app/hooks/use-market-positions.ts | 70 +++++++++ .../src/app/hooks/use-order-closeout.ts | 39 +++++ .../src/app/hooks/use-order-margin.ts | 112 ++++++++++++++ .../src/components/deal-ticket-manager.tsx | 6 +- .../src/vega-custom-classes-lite.js | 4 - 22 files changed, 787 insertions(+), 29 deletions(-) create mode 100644 apps/simple-trading-app-e2e/src/support/mocks/generate-estimate-order.ts create mode 100644 apps/simple-trading-app-e2e/src/support/mocks/generate-market-positions.ts create mode 100644 apps/simple-trading-app-e2e/src/support/mocks/generate-market-tags.ts create mode 100644 apps/simple-trading-app-e2e/src/support/mocks/generate-party-balance.ts create mode 100644 apps/simple-trading-app/src/app/components/deal-ticket/__generated__/MarketTags.ts create mode 100644 apps/simple-trading-app/src/app/components/deal-ticket/review-trade.tsx create mode 100644 apps/simple-trading-app/src/app/hooks/__generated__/estimateOrder.ts create mode 100644 apps/simple-trading-app/src/app/hooks/__generated__/marketPositions.ts create mode 100644 apps/simple-trading-app/src/app/hooks/use-market-positions.ts create mode 100644 apps/simple-trading-app/src/app/hooks/use-order-closeout.ts create mode 100644 apps/simple-trading-app/src/app/hooks/use-order-margin.ts diff --git a/apps/simple-trading-app-e2e/.env b/apps/simple-trading-app-e2e/.env index 16bb3ce7c..979b577d6 100644 --- a/apps/simple-trading-app-e2e/.env +++ b/apps/simple-trading-app-e2e/.env @@ -24,3 +24,4 @@ NX_DEPLOY_PRIME_URL=$DEPLOY_PRIME_URL NX_VEGA_URL=https://lb.testnet.vega.xyz/query NX_VEGA_ENV=TESTNET NX_VEGA_REST=https://lb.testnet.vega.xyz/datanode/rest +NX_VEGA_WALLET_URL=http://localhost:1789/api/v1 diff --git a/apps/simple-trading-app-e2e/cypress.config.js b/apps/simple-trading-app-e2e/cypress.config.js index 1436e587c..889458a22 100644 --- a/apps/simple-trading-app-e2e/cypress.config.js +++ b/apps/simple-trading-app-e2e/cypress.config.js @@ -18,4 +18,22 @@ module.exports = defineConfig({ viewportWidth: 1440, viewportHeight: 900, }, + env: { + TRADING_TEST_VEGA_WALLET_NAME: 'UI_Trading_Test', + ETHEREUM_PROVIDER_URL: + 'https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8', + VEGA_PUBLIC_KEY: + '47836c253520d2661bf5bed6339c0de08fd02cf5d4db0efee3b4373f20c7d278', + VEGA_PUBLIC_KEY2: + '1a18cdcaaa4f44a57b35a4e9b77e0701c17a476f2b407620f8c17371740cf2e4', + TRUNCATED_VEGA_PUBLIC_KEY: '47836c…c7d278', + TRUNCATED_VEGA_PUBLIC_KEY2: '1a18cd…0cf2e4', + ETHEREUM_WALLET_ADDRESS: '0x265Cc6d39a1B53d0d92068443009eE7410807158', + ETHERSCAN_URL: 'https://ropsten.etherscan.io', + tsConfig: 'tsconfig.json', + TAGS: 'not @todo and not @ignore and not @manual', + TRADING_TEST_VEGA_WALLET_PASSPHRASE: '123', + ETH_WALLET_MNEMONIC: + 'ugly gallery notice network true range brave clarify flat logic someone chunk', + }, }); diff --git a/apps/simple-trading-app-e2e/src/integration/market-trade.test.ts b/apps/simple-trading-app-e2e/src/integration/market-trade.test.ts index e88b7d90d..0c09677c1 100644 --- a/apps/simple-trading-app-e2e/src/integration/market-trade.test.ts +++ b/apps/simple-trading-app-e2e/src/integration/market-trade.test.ts @@ -1,6 +1,22 @@ import { aliasQuery } from '@vegaprotocol/cypress'; import { generateSimpleMarkets } from '../support/mocks/generate-markets'; import { generateDealTicket } from '../support/mocks/generate-deal-ticket'; +import { generateMarketTags } from '../support/mocks/generate-market-tags'; +import { generateMarketPositions } from '../support/mocks/generate-market-positions'; +import { generateEstimateOrder } from '../support/mocks/generate-estimate-order'; +import { generatePartyBalance } from '../support/mocks/generate-party-balance'; + +const connectVegaWallet = () => { + const form = 'rest-connector-form'; + const walletName = Cypress.env('TRADING_TEST_VEGA_WALLET_NAME'); + const walletPassphrase = Cypress.env('TRADING_TEST_VEGA_WALLET_PASSPHRASE'); + + cy.getByTestId('connect-vega-wallet').click(); + cy.getByTestId('connectors-list').find('button').click(); + cy.getByTestId(form).find('#wallet').click().type(walletName); + cy.getByTestId(form).find('#passphrase').click().type(walletPassphrase); + cy.getByTestId('rest-connector-form').find('button[type=submit]').click(); +}; describe('Market trade', () => { let markets; @@ -8,6 +24,10 @@ describe('Market trade', () => { cy.mockGQL((req) => { aliasQuery(req, 'SimpleMarkets', generateSimpleMarkets()); aliasQuery(req, 'DealTicketQuery', generateDealTicket()); + aliasQuery(req, 'MarketTags', generateMarketTags()); + aliasQuery(req, 'MarketPositions', generateMarketPositions()); + aliasQuery(req, 'EstimateOrder', generateEstimateOrder()); + aliasQuery(req, 'PartyBalanceQuery', generatePartyBalance()); }); cy.visit('/markets'); cy.wait('@SimpleMarkets').then((response) => { @@ -64,4 +84,32 @@ describe('Market trade', () => { ); } }); + + it('order review should display proper calculations', () => { + if (markets?.length) { + cy.visit(`/trading/${markets[0].id}`); + connectVegaWallet(); + cy.get('h3').contains('Review Trade').click(); + cy.getByTestId('key-value-table') + .find('dl') + .eq(1) + .find('dd div') + .should('have.text', '3.44055'); + cy.getByTestId('key-value-table') + .find('dl') + .eq(2) + .find('dd div') + .should('have.text', '1.00000'); + cy.getByTestId('key-value-table') + .find('dl') + .eq(3) + .find('dd div') + .should('have.text', '-785.81045'); + cy.getByTestId('place-order').click(); + cy.getByTestId('dialog-title').should( + 'have.text', + 'Confirm transaction in wallet' + ); + } + }); }); diff --git a/apps/simple-trading-app-e2e/src/support/mocks/generate-estimate-order.ts b/apps/simple-trading-app-e2e/src/support/mocks/generate-estimate-order.ts new file mode 100644 index 000000000..f7ee51bc1 --- /dev/null +++ b/apps/simple-trading-app-e2e/src/support/mocks/generate-estimate-order.ts @@ -0,0 +1,12 @@ +export const generateEstimateOrder = () => { + return { + estimateOrder: { + totalFeeAmount: '16085.09240212.7380425.46', + marginLevels: { + initialLevel: '2844054.80937741220203', + __typename: 'MarginLevels', + }, + __typename: 'OrderEstimate', + }, + }; +}; diff --git a/apps/simple-trading-app-e2e/src/support/mocks/generate-market-positions.ts b/apps/simple-trading-app-e2e/src/support/mocks/generate-market-positions.ts new file mode 100644 index 000000000..aa0f2f329 --- /dev/null +++ b/apps/simple-trading-app-e2e/src/support/mocks/generate-market-positions.ts @@ -0,0 +1,43 @@ +export const generateMarketPositions = () => { + return { + party: { + id: '2e1ef32e5804e14232406aebaad719087d326afa5c648b7824d0823d8a46c8d1', + positionsConnection: { + edges: [ + { + node: { + openVolume: '3', + market: { + id: '2751c508f9759761f912890f37fb3f97a00300bf7685c02a56a86e05facfe221', + accounts: [ + { balance: '0', __typename: 'Account' }, + { balance: '0', __typename: 'Account' }, + ], + __typename: 'Market', + }, + __typename: 'Position', + }, + __typename: 'PositionEdge', + }, + { + node: { + openVolume: '12', + market: { + id: 'first-btcusd-id', + accounts: [ + { balance: '10', __typename: 'Account' }, + { balance: '15', __typename: 'Account' }, + ], + __typename: 'Market', + }, + __typename: 'Position', + }, + __typename: 'PositionEdge', + }, + ], + __typename: 'PositionConnection', + }, + __typename: 'Party', + }, + }; +}; diff --git a/apps/simple-trading-app-e2e/src/support/mocks/generate-market-tags.ts b/apps/simple-trading-app-e2e/src/support/mocks/generate-market-tags.ts new file mode 100644 index 000000000..abf5477e3 --- /dev/null +++ b/apps/simple-trading-app-e2e/src/support/mocks/generate-market-tags.ts @@ -0,0 +1,25 @@ +export const generateMarketTags = () => { + return { + market: { + tradableInstrument: { + instrument: { + metadata: { + tags: [ + 'formerly:2839D9B2329C9E70', + 'base:AAVE', + 'quote:DAI', + 'class:fx/crypto', + 'monthly', + 'sector:defi', + 'settlement:2022-08-01', + ], + __typename: 'InstrumentMetadata', + }, + __typename: 'Instrument', + }, + __typename: 'TradableInstrument', + }, + __typename: 'Market', + }, + }; +}; diff --git a/apps/simple-trading-app-e2e/src/support/mocks/generate-party-balance.ts b/apps/simple-trading-app-e2e/src/support/mocks/generate-party-balance.ts new file mode 100644 index 000000000..c38801314 --- /dev/null +++ b/apps/simple-trading-app-e2e/src/support/mocks/generate-party-balance.ts @@ -0,0 +1,53 @@ +export const generatePartyBalance = () => { + return { + party: { + accounts: [ + { + balance: '88474051', + asset: { + id: '6d9d35f657589e40ddfb448b7ad4a7463b66efb307527fedd2aa7df1bbd5ea61', + symbol: 'tDAI', + name: 'tDAI TEST', + decimals: 5, + __typename: 'Asset', + }, + __typename: 'Account', + }, + { + balance: '100000000', + asset: { + id: '8b52d4a3a4b0ffe733cddbc2b67be273816cfeb6ca4c8b339bac03ffba08e4e4', + symbol: 'tEURO', + name: 'tEURO TEST', + decimals: 5, + __typename: 'Asset', + }, + __typename: 'Account', + }, + { + balance: '3412867', + asset: { + id: '6d9d35f657589e40ddfb448b7ad4a7463b66efb307527fedd2aa7df1bbd5ea61', + symbol: 'tDAI', + name: 'tDAI TEST', + decimals: 5, + __typename: 'Asset', + }, + __typename: 'Account', + }, + { + balance: '70007', + asset: { + id: '6d9d35f657589e40ddfb448b7ad4a7463b66efb307527fedd2aa7df1bbd5ea61', + symbol: 'tDAI', + name: 'tDAI TEST', + decimals: 5, + __typename: 'Asset', + }, + __typename: 'Account', + }, + ], + __typename: 'Party', + }, + }; +}; diff --git a/apps/simple-trading-app/.env b/apps/simple-trading-app/.env index 72bdc67a8..f572c2eeb 100644 --- a/apps/simple-trading-app/.env +++ b/apps/simple-trading-app/.env @@ -21,3 +21,4 @@ NX_DEPLOY_PRIME_URL=$DEPLOY_PRIME_URL NX_VEGA_CONFIG_URL="https://static.vega.xyz/assets/testnet-network.json" NX_VEGA_ENV = 'TESTNET' NX_VEGA_URL="https://lb.testnet.vega.xyz/query" +NX_VEGA_WALLET_URL=http://localhost:1789/api/v1 diff --git a/apps/simple-trading-app/src/app/components/deal-ticket/__generated__/MarketTags.ts b/apps/simple-trading-app/src/app/components/deal-ticket/__generated__/MarketTags.ts new file mode 100644 index 000000000..36694839a --- /dev/null +++ b/apps/simple-trading-app/src/app/components/deal-ticket/__generated__/MarketTags.ts @@ -0,0 +1,51 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: MarketTags +// ==================================================== + +export interface MarketTags_market_tradableInstrument_instrument_metadata { + __typename: "InstrumentMetadata"; + /** + * An arbitrary list of tags to associated to associate to the Instrument (string list) + */ + tags: string[] | null; +} + +export interface MarketTags_market_tradableInstrument_instrument { + __typename: "Instrument"; + /** + * Metadata for this instrument + */ + metadata: MarketTags_market_tradableInstrument_instrument_metadata; +} + +export interface MarketTags_market_tradableInstrument { + __typename: "TradableInstrument"; + /** + * An instance of or reference to a fully specified instrument. + */ + instrument: MarketTags_market_tradableInstrument_instrument; +} + +export interface MarketTags_market { + __typename: "Market"; + /** + * An instance of or reference to a tradable instrument. + */ + tradableInstrument: MarketTags_market_tradableInstrument; +} + +export interface MarketTags { + /** + * An instrument that is trading on the VEGA network + */ + market: MarketTags_market | null; +} + +export interface MarketTagsVariables { + marketId: string; +} diff --git a/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-container.tsx b/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-container.tsx index 57c974f16..f645feb52 100644 --- a/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-container.tsx +++ b/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-container.tsx @@ -61,7 +61,7 @@ export const DealTicketContainer = () => { isWalletConnected={!!keypair?.pub} /> )} - + )} diff --git a/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-steps.tsx b/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-steps.tsx index 137bd6c11..4be517c03 100644 --- a/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-steps.tsx +++ b/apps/simple-trading-app/src/app/components/deal-ticket/deal-ticket-steps.tsx @@ -1,9 +1,16 @@ -import * as React from 'react'; +import React, { useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; import { useForm, Controller } from 'react-hook-form'; import { Stepper } from '../stepper'; import type { DealTicketQuery_market } from '@vegaprotocol/deal-ticket'; -import { Button, InputError } from '@vegaprotocol/ui-toolkit'; -import { DealTicketAmount, MarketSelector } from '@vegaprotocol/deal-ticket'; +import { InputError } from '@vegaprotocol/ui-toolkit'; +import { + DealTicketAmount, + getDialogTitle, + getDialogIntent, + getDialogIcon, + MarketSelector, +} from '@vegaprotocol/deal-ticket'; import type { Order } from '@vegaprotocol/orders'; import { VegaTxStatus } from '@vegaprotocol/wallet'; import { t, addDecimal, toDecimal } from '@vegaprotocol/react-helpers'; @@ -11,17 +18,22 @@ import { getDefaultOrder, useOrderValidation, useOrderSubmit, + OrderFeedback, } from '@vegaprotocol/orders'; -import { useCallback } from 'react'; -import { useNavigate } from 'react-router-dom'; import MarketNameRenderer from '../simple-market-list/simple-market-renderer'; import SideSelector, { SIDE_NAMES } from './side-selector'; +import ReviewTrade from './review-trade'; +import type { PartyBalanceQuery } from './__generated__/PartyBalanceQuery'; interface DealTicketMarketProps { market: DealTicketQuery_market; + partyData?: PartyBalanceQuery; } -export const DealTicketSteps = ({ market }: DealTicketMarketProps) => { +export const DealTicketSteps = ({ + market, + partyData, +}: DealTicketMarketProps) => { const navigate = useNavigate(); const setMarket = useCallback( (marketId) => { @@ -45,6 +57,7 @@ export const DealTicketSteps = ({ market }: DealTicketMarketProps) => { const orderType = watch('type'); const orderTimeInForce = watch('timeInForce'); const orderSide = watch('side'); + const order = watch(); const { message: invalidText, isDisabled } = useOrderValidation({ step, @@ -54,7 +67,8 @@ export const DealTicketSteps = ({ market }: DealTicketMarketProps) => { fieldErrors: errors, }); - const { submit, transaction } = useOrderSubmit(market); + const { submit, transaction, finalizedOrder, TransactionDialog } = + useOrderSubmit(market); const transactionStatus = transaction.status === VegaTxStatus.Requested || @@ -101,7 +115,7 @@ export const DealTicketSteps = ({ market }: DealTicketMarketProps) => { component: ( { {invalidText} )} - + +
), disabled: true, diff --git a/apps/simple-trading-app/src/app/components/deal-ticket/review-trade.tsx b/apps/simple-trading-app/src/app/components/deal-ticket/review-trade.tsx new file mode 100644 index 000000000..81527e229 --- /dev/null +++ b/apps/simple-trading-app/src/app/components/deal-ticket/review-trade.tsx @@ -0,0 +1,146 @@ +import { addDecimal, formatNumber, t } from '@vegaprotocol/react-helpers'; +import { + Button, + Icon, + KeyValueTable, + KeyValueTableRow, +} from '@vegaprotocol/ui-toolkit'; +import * as React from 'react'; +import classNames from 'classnames'; +import type { DealTicketQuery_market } from '@vegaprotocol/deal-ticket'; +import type { Order } from '@vegaprotocol/orders'; +import { SIDE_NAMES } from './side-selector'; +import { useVegaWallet, VegaWalletOrderSide } from '@vegaprotocol/wallet'; +import SimpleMarketExpires from '../simple-market-list/simple-market-expires'; +import { gql, useQuery } from '@apollo/client'; +import type { + MarketTags, + MarketTagsVariables, +} from './__generated__/MarketTags'; +import useOrderMargin from '../../hooks/use-order-margin'; +import useOrderCloseOut from '../../hooks/use-order-closeout'; +import { IconNames } from '@blueprintjs/icons'; +import type { PartyBalanceQuery } from './__generated__/PartyBalanceQuery'; + +export const MARKET_TAGS_QUERY = gql` + query MarketTags($marketId: ID!) { + market(id: $marketId) { + tradableInstrument { + instrument { + metadata { + tags + } + } + } + } + } +`; + +interface Props { + market: DealTicketQuery_market; + isDisabled: boolean; + transactionStatus?: string; + order: Order; + partyData?: PartyBalanceQuery; +} + +export default ({ + isDisabled, + market, + order, + transactionStatus, + partyData, +}: Props) => { + const { keypair } = useVegaWallet(); + const { data: tagsData } = useQuery( + MARKET_TAGS_QUERY, + { + variables: { marketId: market.id }, + } + ); + const estMargin = useOrderMargin({ + order, + market, + partyId: keypair?.pub || '', + }); + const estCloseOut = useOrderCloseOut({ order, market, partyData }); + return ( +
+ + +
+
+ {SIDE_NAMES[order.side]} +
+
{market.tradableInstrument.instrument.product.quoteName}
+
+ {tagsData?.market?.tradableInstrument.instrument.metadata + .tags && ( + + )} +
+
+
+ @{' '} + {market.depth.lastTrade + ? addDecimal(market.depth.lastTrade.price, market.decimalPlaces) + : ' - '}{' '} + (EST) +
+
+ + <>{t('Est. margin')} +
+ {estMargin} + +
+
+ + <> + {t('Size')}{' '} +
+ ({market.tradableInstrument.instrument.product.quoteName}) +
+ +
+ {formatNumber(order.size, market.decimalPlaces)} + +
+
+ + <>{t('Est. close out')} +
+ {estCloseOut} + +
+
+
+ + +
+ ); +}; diff --git a/apps/simple-trading-app/src/app/components/deal-ticket/side-selector.tsx b/apps/simple-trading-app/src/app/components/deal-ticket/side-selector.tsx index 1c03d045d..292975695 100644 --- a/apps/simple-trading-app/src/app/components/deal-ticket/side-selector.tsx +++ b/apps/simple-trading-app/src/app/components/deal-ticket/side-selector.tsx @@ -29,6 +29,7 @@ export default ({ value, onSelect }: SideSelectorProps) => { variant="inline-link" aria-label={t('Open long position')} className={classNames( + 'py-8', 'buyButton hover:buyButton dark:buyButtonDark dark:hover:buyButtonDark', { selected: value === VegaWalletOrderSide.Buy } )} @@ -40,6 +41,7 @@ export default ({ value, onSelect }: SideSelectorProps) => { variant="inline-link" aria-label={t('Open short position')} className={classNames( + 'py-8', 'sellButton hover:sellButton dark:sellButtonDark dark:hover:sellButtonDark', { selected: value === VegaWalletOrderSide.Sell } )} diff --git a/apps/simple-trading-app/src/app/components/simple-market-list/simple-market-expires.spec.tsx b/apps/simple-trading-app/src/app/components/simple-market-list/simple-market-expires.spec.tsx index a3da535f6..ed08fcbda 100644 --- a/apps/simple-trading-app/src/app/components/simple-market-list/simple-market-expires.spec.tsx +++ b/apps/simple-trading-app/src/app/components/simple-market-list/simple-market-expires.spec.tsx @@ -23,7 +23,7 @@ describe('SimpleMarketExpires', () => { 'settlement-date:2022-04-25T1200', ]; render(); - expect(screen.getByText('April 25')).toBeInTheDocument(); + expect(screen.getByText('Apr 25')).toBeInTheDocument(); }); it('last one proper tag should matter', () => { @@ -33,7 +33,7 @@ describe('SimpleMarketExpires', () => { 'settlement-expiry-date:2022-03-25T12:00:00', ]; render(); - expect(screen.getByText('March 25')).toBeInTheDocument(); + expect(screen.getByText('Mar 25')).toBeInTheDocument(); }); it('when no proper tag nor date should be null', () => { diff --git a/apps/simple-trading-app/src/app/constants/index.ts b/apps/simple-trading-app/src/app/constants/index.ts index 7de82e7f5..30885f110 100644 --- a/apps/simple-trading-app/src/app/constants/index.ts +++ b/apps/simple-trading-app/src/app/constants/index.ts @@ -1,7 +1,7 @@ import type { SimpleMarkets_markets } from '../components/simple-market-list/__generated__/SimpleMarkets'; export const DATE_FORMAT = 'dd MMMM yyyy HH:mm'; -export const EXPIRE_DATE_FORMAT = 'MMMM dd'; +export const EXPIRE_DATE_FORMAT = 'MMM dd'; export const TRADABLE_STATES = { Active: true, diff --git a/apps/simple-trading-app/src/app/hooks/__generated__/estimateOrder.ts b/apps/simple-trading-app/src/app/hooks/__generated__/estimateOrder.ts new file mode 100644 index 000000000..108368d2e --- /dev/null +++ b/apps/simple-trading-app/src/app/hooks/__generated__/estimateOrder.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +import { Side, OrderTimeInForce, OrderType } from "@vegaprotocol/types"; + +// ==================================================== +// GraphQL query operation: EstimateOrder +// ==================================================== + +export interface EstimateOrder_estimateOrder_marginLevels { + __typename: "MarginLevels"; + /** + * this is the minimal margin required for a party to place a new order on the network (unsigned int actually) + */ + initialLevel: string; +} + +export interface EstimateOrder_estimateOrder { + __typename: "OrderEstimate"; + /** + * The total estimated amount of fee if the order was to trade + */ + totalFeeAmount: string; + /** + * The margin requirement for this order + */ + marginLevels: EstimateOrder_estimateOrder_marginLevels; +} + +export interface EstimateOrder { + /** + * return an estimation of the potential cost for a new order + */ + estimateOrder: EstimateOrder_estimateOrder; +} + +export interface EstimateOrderVariables { + marketId: string; + partyId: string; + price?: string | null; + size: string; + side: Side; + timeInForce: OrderTimeInForce; + expiration?: string | null; + type: OrderType; +} diff --git a/apps/simple-trading-app/src/app/hooks/__generated__/marketPositions.ts b/apps/simple-trading-app/src/app/hooks/__generated__/marketPositions.ts new file mode 100644 index 000000000..4f2426fec --- /dev/null +++ b/apps/simple-trading-app/src/app/hooks/__generated__/marketPositions.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: MarketPositions +// ==================================================== + +export interface MarketPositions_party_positionsConnection_edges_node_market_accounts { + __typename: "Account"; + /** + * Balance as string - current account balance (approx. as balances can be updated several times per second) + */ + balance: string; +} + +export interface MarketPositions_party_positionsConnection_edges_node_market { + __typename: "Market"; + /** + * Market ID + */ + id: string; + /** + * Get account for a party or market + */ + accounts: MarketPositions_party_positionsConnection_edges_node_market_accounts[] | null; +} + +export interface MarketPositions_party_positionsConnection_edges_node { + __typename: "Position"; + /** + * Open volume (uint64) + */ + openVolume: string; + /** + * Market relating to this position + */ + market: MarketPositions_party_positionsConnection_edges_node_market; +} + +export interface MarketPositions_party_positionsConnection_edges { + __typename: "PositionEdge"; + node: MarketPositions_party_positionsConnection_edges_node; +} + +export interface MarketPositions_party_positionsConnection { + __typename: "PositionConnection"; + /** + * The positions in this connection + */ + edges: MarketPositions_party_positionsConnection_edges[] | null; +} + +export interface MarketPositions_party { + __typename: "Party"; + /** + * Party identifier + */ + id: string; + /** + * Trading positions relating to a party + */ + positionsConnection: MarketPositions_party_positionsConnection; +} + +export interface MarketPositions { + /** + * An entity that is trading on the VEGA network + */ + party: MarketPositions_party | null; +} + +export interface MarketPositionsVariables { + partyId: string; +} diff --git a/apps/simple-trading-app/src/app/hooks/use-market-positions.ts b/apps/simple-trading-app/src/app/hooks/use-market-positions.ts new file mode 100644 index 000000000..f80c1cc83 --- /dev/null +++ b/apps/simple-trading-app/src/app/hooks/use-market-positions.ts @@ -0,0 +1,70 @@ +import { gql, useQuery } from '@apollo/client'; +import { BigNumber } from 'bignumber.js'; +import type { + MarketPositions, + MarketPositionsVariables, +} from './__generated__/marketPositions'; + +const MARKET_POSITIONS_QUERY = gql` + query MarketPositions($partyId: ID!) { + party(id: $partyId) { + id + positionsConnection { + edges { + node { + openVolume + market { + id + accounts { + balance + } + } + } + } + } + } + } +`; + +interface Props { + marketId: string; + partyId: string; +} + +type PositionMargin = { + openVolume: BigNumber; + balanceSum: BigNumber; +} | null; + +export default ({ marketId, partyId }: Props): PositionMargin => { + const { data } = useQuery( + MARKET_POSITIONS_QUERY, + { + pollInterval: 15000, + variables: { partyId }, + skip: !partyId, + } + ); + + const markets = + data?.party?.positionsConnection?.edges + ?.filter((nodes) => nodes.node.market.id === marketId) + .map((nodes) => nodes.node) || []; + + return markets.length + ? markets.reduce( + (agg, item) => { + const balance = item.market.accounts?.reduce( + (acagg, account) => acagg.plus(account.balance || 0), + new BigNumber(0) + ); + if (balance) { + agg.balanceSum = agg.balanceSum.plus(balance); + agg.openVolume = agg.openVolume.plus(item.openVolume); + } + return agg; + }, + { openVolume: new BigNumber(0), balanceSum: new BigNumber(0) } + ) + : null; +}; diff --git a/apps/simple-trading-app/src/app/hooks/use-order-closeout.ts b/apps/simple-trading-app/src/app/hooks/use-order-closeout.ts new file mode 100644 index 000000000..aade7e728 --- /dev/null +++ b/apps/simple-trading-app/src/app/hooks/use-order-closeout.ts @@ -0,0 +1,39 @@ +import { BigNumber } from 'bignumber.js'; +import type { Order } from '@vegaprotocol/orders'; +import type { DealTicketQuery_market } from '@vegaprotocol/deal-ticket'; +import type { PartyBalanceQuery } from '../components/deal-ticket/__generated__/PartyBalanceQuery'; +import { useSettlementAccount } from './use-settlement-account'; +import { VegaWalletOrderSide } from '@vegaprotocol/wallet'; +import { addDecimal, formatNumber } from '@vegaprotocol/react-helpers'; + +interface Props { + order: Order; + market: DealTicketQuery_market; + partyData?: PartyBalanceQuery; +} + +const useOrderCloseOut = ({ order, market, partyData }: Props): string => { + const account = useSettlementAccount( + market.tradableInstrument.instrument.product.settlementAsset.id, + partyData?.party?.accounts || [] + ); + if (account?.balance && market.depth.lastTrade) { + const price = new BigNumber( + addDecimal(market.depth.lastTrade.price, market.decimalPlaces) + ); + const balance = new BigNumber( + addDecimal(account.balance, account.asset.decimals) + ); + const { size, side } = order; + const bigOne = new BigNumber(1); + return formatNumber( + side === VegaWalletOrderSide.Buy + ? bigOne.minus(balance.div(price.times(size))).times(price) + : bigOne.plus(balance.div(price.times(size))).times(price), + market.decimalPlaces + ); + } + return ' - '; +}; + +export default useOrderCloseOut; diff --git a/apps/simple-trading-app/src/app/hooks/use-order-margin.ts b/apps/simple-trading-app/src/app/hooks/use-order-margin.ts new file mode 100644 index 000000000..81f5073f9 --- /dev/null +++ b/apps/simple-trading-app/src/app/hooks/use-order-margin.ts @@ -0,0 +1,112 @@ +import type { Order } from '@vegaprotocol/orders'; +import { gql, useQuery } from '@apollo/client'; +import type { + EstimateOrder, + EstimateOrderVariables, +} from './__generated__/estimateOrder'; +import type { DealTicketQuery_market } from '@vegaprotocol/deal-ticket'; +import { OrderTimeInForce, OrderType, Side } from '@vegaprotocol/types'; +import { + VegaWalletOrderSide, + VegaWalletOrderTimeInForce, + VegaWalletOrderType, +} from '@vegaprotocol/wallet'; +import { addDecimal, formatNumber } from '@vegaprotocol/react-helpers'; +import useMarketPositions from './use-market-positions'; +import { BigNumber } from 'bignumber.js'; + +export const ESTIMATE_ORDER_QUERY = gql` + query EstimateOrder( + $marketId: ID! + $partyId: ID! + $price: String + $size: String! + $side: Side! + $timeInForce: OrderTimeInForce! + $expiration: String + $type: OrderType! + ) { + estimateOrder( + marketId: $marketId + partyId: $partyId + price: $price + size: $size + side: $side + timeInForce: $timeInForce + expiration: $expiration + type: $type + ) { + totalFeeAmount + marginLevels { + initialLevel + } + } + } +`; + +interface Props { + order: Order; + market: DealTicketQuery_market; + partyId: string; +} + +const times: Record = { + [VegaWalletOrderTimeInForce.GTC]: OrderTimeInForce.GTC, + [VegaWalletOrderTimeInForce.GTT]: OrderTimeInForce.GTT, + [VegaWalletOrderTimeInForce.IOC]: OrderTimeInForce.IOC, + [VegaWalletOrderTimeInForce.FOK]: OrderTimeInForce.FOK, + [VegaWalletOrderTimeInForce.GFN]: OrderTimeInForce.GFN, + [VegaWalletOrderTimeInForce.GFA]: OrderTimeInForce.GFA, +}; + +const types: Record = { + [VegaWalletOrderType.Market]: OrderType.Market, + [VegaWalletOrderType.Limit]: OrderType.Limit, +}; + +const useOrderMargin = ({ order, market, partyId }: Props) => { + const marketPositions = useMarketPositions({ marketId: market.id, partyId }); + console.log('marketPositions', marketPositions); + console.log( + 'marketPositions.openVolume', + marketPositions?.openVolume.toNumber() + ); + console.log( + 'marketPositions.balanceSum', + marketPositions?.balanceSum.toNumber() + ); + const { data } = useQuery( + ESTIMATE_ORDER_QUERY, + { + variables: { + marketId: market.id, + partyId, + price: market.depth.lastTrade?.price, + size: order.size + (marketPositions?.openVolume.toNumber() || 0), + side: order.side === VegaWalletOrderSide.Buy ? Side.Buy : Side.Sell, + timeInForce: times[order.timeInForce], + type: types[order.type], + }, + skip: !partyId || !market.id || !order.size, + } + ); + if (data?.estimateOrder.marginLevels.initialLevel) { + return formatNumber( + Math.max( + 0, + new BigNumber( + addDecimal( + data.estimateOrder.marginLevels.initialLevel, + market.decimalPlaces + ) + ) + .minus(marketPositions?.balanceSum.toNumber() || 0) + .toNumber() + ), + market.decimalPlaces + ); + } + return ' - '; +}; + +export default useOrderMargin; diff --git a/libs/deal-ticket/src/components/deal-ticket-manager.tsx b/libs/deal-ticket/src/components/deal-ticket-manager.tsx index 76dbd130d..01d0d2e86 100644 --- a/libs/deal-ticket/src/components/deal-ticket-manager.tsx +++ b/libs/deal-ticket/src/components/deal-ticket-manager.tsx @@ -44,7 +44,7 @@ export const DealTicketManager = ({ ); }; -const getDialogTitle = (status?: OrderStatus): string | undefined => { +export const getDialogTitle = (status?: OrderStatus): string | undefined => { if (!status) { return; } @@ -63,7 +63,7 @@ const getDialogTitle = (status?: OrderStatus): string | undefined => { } }; -const getDialogIntent = (status?: OrderStatus): Intent | undefined => { +export const getDialogIntent = (status?: OrderStatus): Intent | undefined => { if (!status) { return; } @@ -81,7 +81,7 @@ const getDialogIntent = (status?: OrderStatus): Intent | undefined => { } }; -const getDialogIcon = (status?: OrderStatus): ReactNode | undefined => { +export const getDialogIcon = (status?: OrderStatus): ReactNode | undefined => { if (!status) { return; } diff --git a/libs/tailwindcss-config/src/vega-custom-classes-lite.js b/libs/tailwindcss-config/src/vega-custom-classes-lite.js index 470774b1b..0e8a38a82 100644 --- a/libs/tailwindcss-config/src/vega-custom-classes-lite.js +++ b/libs/tailwindcss-config/src/vega-custom-classes-lite.js @@ -45,8 +45,6 @@ const vegaCustomClassesLite = plugin(function ({ addUtilities }) { backgroundColor: 'rgba(0, 143, 74, 0.1)', border: `1px solid ${theme.colors.darkerGreen}`, color: theme.colors.darkerGreen, - paddingTop: '0.5rem', - paddingBottom: '0.5rem', '&:hover': { backgroundColor: theme.colors.darkerGreen, color: theme.colors.white.DEFAULT, @@ -68,8 +66,6 @@ const vegaCustomClassesLite = plugin(function ({ addUtilities }) { '.sellButton': { textTransform: 'uppercase', textDecoration: 'none', - paddingTop: '0.5rem', - paddingBottom: '0.5rem', backgroundColor: 'rgba(255, 8, 126, 0.1)', border: `1px solid ${theme.colors.pink}`, color: theme.colors.pink, From bc27e436cacafb28537dcfd534f7ac4cdcc8bd14 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Wed, 27 Jul 2022 18:05:11 +0000 Subject: [PATCH 15/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 62 +++++++++++++------ apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 2fdab46ca..688b29c1c 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117544.29943069494598218", + "locked_amount": "117484.962909972489208755", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58522.209617641210164276", + "locked_amount": "58464.006018259413794286", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79989.75710931694850663014992", + "locked_amount": "79910.2028373942568584932346", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24619.282961638217373838", + "locked_amount": "24594.797712500696590922", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "8013.337704146241582245", + "locked_amount": "8005.367993151211078253", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11799.847146739131", + "locked_amount": "11769.26092617753675", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1644934.51437690273220166", + "locked_amount": "1643605.119646430133074804", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "10074.1371378841014463592117794488", + "locked_amount": "10035.068106446361128539391419595", "deposits": [ { "amount": "2833.333333", @@ -5514,7 +5514,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8288.51201225622", - "locked_amount": "2569.28262937595102120030819063926940636", + "locked_amount": "2552.14376870877640960030613479832572288", "deposits": [ { "amount": "2", @@ -16442,7 +16442,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2552192.96795627356824965788", + "locked_amount": "2550150.15110162314913846486", "deposits": [ { "amount": "1998.95815", @@ -17198,8 +17198,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", - "total_removed": "68723.265724167975505", - "locked_amount": "14276134.8020700778558626189285810241200324", + "total_removed": "69123.834585739765555", + "locked_amount": "14268928.1899874640823052643183845374141659", "deposits": [ { "amount": "16249.93", @@ -17708,6 +17708,11 @@ "user": "0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0", "tx": "0xa67914a8bbc426c6faa561af9417fafae696f08823d534b37a93adc0801e66a7" }, + { + "amount": "400.56886157179005", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0x36922428802b59ffa5372882e41946441a94a2adeeb9d85a8b701880d50e7a5e" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -17981,6 +17986,12 @@ "tranche_id": 2, "tx": "0x4303f2bca5e794329a9dd8b34e0bf4f29234f1fa5a920c48a8203b62529aba13" }, + { + "amount": "400.56886157179005", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 2, + "tx": "0x36922428802b59ffa5372882e41946441a94a2adeeb9d85a8b701880d50e7a5e" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -18205,8 +18216,8 @@ } ], "total_tokens": "194999.1675", - "withdrawn_tokens": "18304.412614954827825", - "remaining_tokens": "176694.754885045172175" + "withdrawn_tokens": "18704.981476526617875", + "remaining_tokens": "176294.186023473382125" }, { "address": "0x89051CAb67Bc7F8CC44F7e270c6EDaf1EC57676c", @@ -19652,8 +19663,8 @@ "tranche_start": "2021-11-05T00:00:00.000Z", "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", - "total_removed": "2421946.596295493754033047", - "locked_amount": "7526013.85547416362304739291461938", + "total_removed": "2422756.585128064230582297", + "locked_amount": "7519326.52028111623987319599653858", "deposits": [ { "amount": "129284.449", @@ -19872,6 +19883,11 @@ "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", "tx": "0x20171309054732628e1b86149642280cde77c3318a2ef37ec6f4a40ff8126228" }, + { + "amount": "809.98883257047654925", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tx": "0x9531a4b8f6db038e5a1889be447cd1573c12c0c9e203038984dcc45de810ea6b" + }, { "amount": "600.79246609513746875", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -21710,6 +21726,12 @@ "tranche_id": 3, "tx": "0x20171309054732628e1b86149642280cde77c3318a2ef37ec6f4a40ff8126228" }, + { + "amount": "809.98883257047654925", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tranche_id": 3, + "tx": "0x9531a4b8f6db038e5a1889be447cd1573c12c0c9e203038984dcc45de810ea6b" + }, { "amount": "600.79246609513746875", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -23176,8 +23198,8 @@ } ], "total_tokens": "359123.469575", - "withdrawn_tokens": "173203.61934691521133675", - "remaining_tokens": "185919.85022808478866325" + "withdrawn_tokens": "174013.608179485687886", + "remaining_tokens": "185109.861395514312114" }, { "address": "0xBdd412797c1B78535Afc5F71503b91fAbD0160fB", @@ -24241,7 +24263,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2656670.18771049829400989350494552", + "locked_amount": "2654027.98113105854090478200029327", "deposits": [ { "amount": "552496.6455", @@ -25485,7 +25507,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "622.9814487941", - "locked_amount": "404409.56472964196813674575038052", + "locked_amount": "404085.868721783617756913876205", "deposits": [ { "amount": "3000", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index 28a440e1c..63a092fe3 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.44429857940132", + "locked_amount": "33.375773718924406", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "230.649238964992364", + "locked_amount": "229.89546549974631", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index 28c4d7bcb..fe491546f 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "211.77793759512935240020968112633181124", + "locked_amount": "211.0858685312024410002089959094368341", "deposits": [ { "amount": "1000", From 3697f935e5a14327a775dc626f4c1b68d1004cd6 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Thu, 28 Jul 2022 00:10:06 +0000 Subject: [PATCH 16/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 48 ++++++++++++------- apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 688b29c1c..d84afee6c 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117484.962909972489208755", + "locked_amount": "117424.84662098919995784", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58464.006018259413794286", + "locked_amount": "58405.037538852421918476", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79910.2028373942568584932346", + "locked_amount": "79829.60310652818574668492504", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24594.797712500696590922", + "locked_amount": "24569.990691545351513372", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "8005.367993151211078253", + "locked_amount": "7997.293548551878667213", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11769.26092617753675", + "locked_amount": "11738.272758152175", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1643605.119646430133074804", + "locked_amount": "1642258.254733946037674694", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "10035.068106446361128539391419595", + "locked_amount": "9995.485651061172306510565042926", "deposits": [ { "amount": "2833.333333", @@ -5514,7 +5514,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8288.51201225622", - "locked_amount": "2552.14376870877640960030613479832572288", + "locked_amount": "2534.77967846270956480030405194063926944", "deposits": [ { "amount": "2", @@ -16442,7 +16442,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2550150.15110162314913846486", + "locked_amount": "2548080.48865969214395872365", "deposits": [ { "amount": "1998.95815", @@ -17199,7 +17199,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "69123.834585739765555", - "locked_amount": "14268928.1899874640823052643183845374141659", + "locked_amount": "14261626.8725311321749228323588125124655312", "deposits": [ { "amount": "16249.93", @@ -19664,7 +19664,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2422756.585128064230582297", - "locked_amount": "7519326.52028111623987319599653858", + "locked_amount": "7512551.30376861069731229607934313", "deposits": [ { "amount": "129284.449", @@ -24263,7 +24263,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2654027.98113105854090478200029327", + "locked_amount": "2651351.05211079946810943517289489", "deposits": [ { "amount": "552496.6455", @@ -25507,7 +25507,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "622.9814487941", - "locked_amount": "404085.868721783617756913876205", + "locked_amount": "403757.91887716482907230023439876", "deposits": [ { "amount": "3000", @@ -51399,7 +51399,7 @@ "tranche_start": "2021-12-05T00:00:00.000Z", "tranche_end": "2022-06-05T00:00:00.000Z", "total_added": "171288.42", - "total_removed": "41016.0912801057989", + "total_removed": "41266.0912801057989", "locked_amount": "0", "deposits": [ { @@ -55649,6 +55649,11 @@ "user": "0x6EE016F4512C910b401B18087BBAC15412dD97cA", "tx": "0xbc09d1b5e70ce11912142519f7372859423f6475ce3c0f38c098b6bdf8be4480" }, + { + "amount": "250", + "user": "0xb21715Fe20319202d7AcC12320A8121760EF83dD", + "tx": "0x409e2ea40dba97134578e1b0fd560c7652aac5939bb830f0fad1180cb3321ae1" + }, { "amount": "250", "user": "0x1f7C20Bd98B2f346A58d2c5faaFc940E0C36450E", @@ -66973,10 +66978,17 @@ "tx": "0x9f916cf09e8a3c4ade0ffce5190db464d0a2b1dadba78e1ee7ba5d6e751d6148" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "250", + "user": "0xb21715Fe20319202d7AcC12320A8121760EF83dD", + "tranche_id": 6, + "tx": "0x409e2ea40dba97134578e1b0fd560c7652aac5939bb830f0fad1180cb3321ae1" + } + ], "total_tokens": "250", - "withdrawn_tokens": "0", - "remaining_tokens": "250" + "withdrawn_tokens": "250", + "remaining_tokens": "0" }, { "address": "0x8433BF349d4f71FB37c8CacF5D6D4863D43EaE23", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index 63a092fe3..7aff7d71d 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.375773718924406", + "locked_amount": "33.306335616438354", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "229.89546549974631", + "locked_amount": "229.131646372399848", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index fe491546f..7ca0f060e 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "211.0858685312024410002089959094368341", + "locked_amount": "210.38451166920349680020830149670218168", "deposits": [ { "amount": "1000", From 4f341b20469458b5429f6d30ef6105bbe46cf8e4 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Thu, 28 Jul 2022 06:04:58 +0000 Subject: [PATCH 17/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 28 +++++++++---------- apps/static/src/assets/stagnet1-tranches.json | 4 +-- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index d84afee6c..19961b179 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117424.84662098919995784", + "locked_amount": "117366.38596672876562907", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58405.037538852421918476", + "locked_amount": "58347.693082879219153566", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79829.60310652818574668492504", + "locked_amount": "79751.22313532009629723295724", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24569.990691545351513372", + "locked_amount": "24545.866869203200097508", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "7997.293548551878667213", + "locked_amount": "7989.44147847154120552", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11738.272758152175", + "locked_amount": "11708.138020833333", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1642258.254733946037674694", + "locked_amount": "1640948.48320087402324334", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "9995.485651061172306510565042926", + "locked_amount": "9956.993317648905953371517901581", "deposits": [ { "amount": "2833.333333", @@ -5514,7 +5514,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8288.51201225622", - "locked_amount": "2534.77967846270956480030405194063926944", + "locked_amount": "2517.89380454084163130030202644596651439", "deposits": [ { "amount": "2", @@ -16442,7 +16442,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2548080.48865969214395872365", + "locked_amount": "2546067.82582737477574652789", "deposits": [ { "amount": "1998.95815", @@ -17199,7 +17199,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "69123.834585739765555", - "locked_amount": "14261626.8725311321749228323588125124655312", + "locked_amount": "14254526.6372591421871909619506743932224926", "deposits": [ { "amount": "16249.93", @@ -19664,7 +19664,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2422756.585128064230582297", - "locked_amount": "7512551.30376861069731229607934313", + "locked_amount": "7505962.68033932300713132694901444", "deposits": [ { "amount": "129284.449", @@ -24263,7 +24263,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2651351.05211079946810943517289489", + "locked_amount": "2648747.847146224892759454991066808", "deposits": [ { "amount": "552496.6455", @@ -25507,7 +25507,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "622.9814487941", - "locked_amount": "403757.91887716482907230023439876", + "locked_amount": "403439.00094651283614095819076612", "deposits": [ { "amount": "3000", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index 7aff7d71d..a4da69027 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.306335616438354", + "locked_amount": "33.238828640284124", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "229.131646372399848", + "locked_amount": "228.389069634703186", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index 7ca0f060e..b3e471263 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "210.38451166920349680020830149670218168", + "locked_amount": "209.70272323693559280020762645865043128", "deposits": [ { "amount": "1000", From b8100423189c1c59a4b104ca35661dfff3038f54 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Thu, 28 Jul 2022 10:40:31 +0100 Subject: [PATCH 18/61] Fix/748-correct-order-of-shadows-on-input-fields (#887) --- libs/tailwindcss-config/src/theme.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/tailwindcss-config/src/theme.js b/libs/tailwindcss-config/src/theme.js index 6001a1b68..95c321fff 100644 --- a/libs/tailwindcss-config/src/theme.js +++ b/libs/tailwindcss-config/src/theme.js @@ -204,10 +204,10 @@ module.exports = { 'inset-danger': `${boxShadowPosition.insetUnderline} ${colours.danger}`, input: `${boxShadowPosition.insetShading} ${colours.white['80']}`, 'input-dark': `${boxShadowPosition.insetShading} ${colours.black['80']}`, - 'input-focus': `${boxShadowPosition.insetShading} ${colours.white['80']}, ${boxShadowPosition.insetUnderline} ${colours.vega.pink}`, - 'input-focus-dark': `${boxShadowPosition.insetShading} ${colours.black['80']}, ${boxShadowPosition.insetUnderline} ${colours.vega.yellow}`, - 'input-focus-error': `${boxShadowPosition.insetShading} ${colours.white['80']}, ${boxShadowPosition.insetUnderline} ${colours.danger}`, - 'input-focus-error-dark': `${boxShadowPosition.insetShading} ${colours.black['80']}, ${boxShadowPosition.insetUnderline} ${colours.danger}`, + 'input-focus': `${boxShadowPosition.insetUnderline} ${colours.vega.pink}, ${boxShadowPosition.insetShading} ${colours.white['80']}`, + 'input-focus-dark': `${boxShadowPosition.insetUnderline} ${colours.vega.yellow}, ${boxShadowPosition.insetShading} ${colours.black['80']}`, + 'input-focus-error': `${boxShadowPosition.insetUnderline} ${colours.danger}, ${boxShadowPosition.insetShading} ${colours.white['80']}`, + 'input-focus-error-dark': `${boxShadowPosition.insetUnderline} ${colours.danger}, ${boxShadowPosition.insetShading} ${colours.black['80']}`, 'checkbox-focus': `${boxShadowPosition.insetShading} ${colours.white['80']}, ${boxShadowPosition.outer} ${colours.vega.pink}`, 'checkbox-focus-dark': `${boxShadowPosition.insetShading} ${colours.black['80']}, ${boxShadowPosition.outer} ${colours.vega.yellow}`, }, From aa6c7fd37665a90aeb85ec1cdeb1e0b8e8096cf0 Mon Sep 17 00:00:00 2001 From: Dexter Edwards Date: Thu, 28 Jul 2022 12:04:53 +0100 Subject: [PATCH 19/61] Fix/environement checking (#892) * fix: chain id check logic * ci: froce build --- libs/environment/src/utils/validate-node.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/environment/src/utils/validate-node.tsx b/libs/environment/src/utils/validate-node.tsx index 95b1c110f..d931187bc 100644 --- a/libs/environment/src/utils/validate-node.tsx +++ b/libs/environment/src/utils/validate-node.tsx @@ -17,7 +17,7 @@ export const getIsNodeLoading = ({ }; export const getHasInvalidChain = (env: Networks, chain = '') => { - return !(chain.split('-')[0] === env.toLowerCase() ?? false); + return !chain.split('-').includes(env.toLowerCase()); }; export const getIsInvalidUrl = (url: string) => { From 3498b9d54b814f147dfe9b810aef8b369940e3a2 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Thu, 28 Jul 2022 12:06:07 +0000 Subject: [PATCH 20/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 117 +++++++++++++----- apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 90 insertions(+), 33 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 19961b179..7794f2bd5 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117366.38596672876562907", + "locked_amount": "117306.890197558673138415", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58347.693082879219153566", + "locked_amount": "58289.333275604951219016", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79751.22313532009629723295724", + "locked_amount": "79671.45535417659000498633432", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24545.866869203200097508", + "locked_amount": "24521.315906102882816046", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "7989.44147847154120552", + "locked_amount": "7981.450378219294572622", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11708.138020833333", + "locked_amount": "11677.46971240941975", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1640948.48320087402324334", + "locked_amount": "1639615.520616328731621184", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "9956.993317648905953371517901581", + "locked_amount": "9917.8194320247151592461024147252", "deposits": [ { "amount": "2833.333333", @@ -3373,7 +3373,7 @@ "tranche_id": 10, "tranche_start": "2021-07-15T23:37:11.000Z", "tranche_end": "2021-07-15T23:37:11.000Z", - "total_added": "4620969.150000000000000001", + "total_added": "4630969.150000000000000001", "total_removed": "4618402.640000000000000001", "locked_amount": "0", "deposits": [ @@ -3387,6 +3387,11 @@ "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", "tx": "0x0cd7dab19227ea994201ea2c7e5456e83568c5985b86376bf7e1223df351491f" }, + { + "amount": "10000", + "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", + "tx": "0x2b30ce4ea28386740738bf02913088eca12adc5138fd81f3390e7589136b7d11" + }, { "amount": "114000", "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", @@ -4265,6 +4270,12 @@ "tranche_id": 10, "tx": "0x0cd7dab19227ea994201ea2c7e5456e83568c5985b86376bf7e1223df351491f" }, + { + "amount": "10000", + "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", + "tranche_id": 10, + "tx": "0x2b30ce4ea28386740738bf02913088eca12adc5138fd81f3390e7589136b7d11" + }, { "amount": "114000", "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", @@ -4484,9 +4495,9 @@ "tx": "0xac16a4ce688d40a482a59914d68c3a676592f8804ee8f0781b66a4ba5ccfbdfc" } ], - "total_tokens": "1461651", + "total_tokens": "1471651", "withdrawn_tokens": "1461651", - "remaining_tokens": "0" + "remaining_tokens": "10000" }, { "address": "0x3e3B3C3027cbBDa4D5F2bE6c8eBc8D856FBaD044", @@ -5513,8 +5524,8 @@ "tranche_start": "2021-09-03T00:00:00.000Z", "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", - "total_removed": "8288.51201225622", - "locked_amount": "2517.89380454084163130030202644596651439", + "total_removed": "8291.95420530622", + "locked_amount": "2500.70894628361116910029996508751902573", "deposits": [ { "amount": "2", @@ -9288,6 +9299,11 @@ "user": "0x57AF825ff979Bd64B841ab525A5C743912abBC59", "tx": "0x623596de3b43952854ab08fcbac3044c500bbe8dcd54f4ffb8f1b2c898fbe71d" }, + { + "amount": "3.44219305", + "user": "0xc5467213593778E528f0eB8117cc7AFBC5b7491b", + "tx": "0xf1be3a0908eb819cafd136a09720acbde12b65cdd5d2034ba0da7eb13908ab66" + }, { "amount": "842.29689345648", "user": "0xab6dE081Af6C78433AFDaC5B756804bcE17e9eC1", @@ -16336,6 +16352,12 @@ } ], "withdrawals": [ + { + "amount": "3.44219305", + "user": "0xc5467213593778E528f0eB8117cc7AFBC5b7491b", + "tranche_id": 11, + "tx": "0xf1be3a0908eb819cafd136a09720acbde12b65cdd5d2034ba0da7eb13908ab66" + }, { "amount": "5.695719178", "user": "0xc5467213593778E528f0eB8117cc7AFBC5b7491b", @@ -16416,8 +16438,8 @@ } ], "total_tokens": "200", - "withdrawn_tokens": "176.472355402", - "remaining_tokens": "23.527644598" + "withdrawn_tokens": "179.914548452", + "remaining_tokens": "20.085451548" }, { "address": "0x1775cc97E5c05Fde8b571ef75CA52d0A9ff19025", @@ -16442,7 +16464,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2546067.82582737477574652789", + "locked_amount": "2544019.52642320912074939111", "deposits": [ { "amount": "1998.95815", @@ -17199,7 +17221,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "69123.834585739765555", - "locked_amount": "14254526.6372591421871909619506743932224926", + "locked_amount": "14247300.6839382337539872671390491015233847", "deposits": [ { "amount": "16249.93", @@ -19664,7 +19686,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2422756.585128064230582297", - "locked_amount": "7505962.68033932300713132694901444", + "locked_amount": "7499257.39755286423985995971871326", "deposits": [ { "amount": "129284.449", @@ -24263,7 +24285,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2648747.847146224892759454991066808", + "locked_amount": "2646098.54936408314698794426183364", "deposits": [ { "amount": "552496.6455", @@ -25506,8 +25528,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", - "total_removed": "622.9814487941", - "locked_amount": "403439.00094651283614095819076612", + "total_removed": "739.13362915466", + "locked_amount": "403114.4361973442647171619837646", "deposits": [ { "amount": "3000", @@ -32141,6 +32163,16 @@ "user": "0xdc040917f80aC350460e55467e4B6c52Fc5e220E", "tx": "0x1177079901d6f5b6a6b2e8597f7c7b774e5fefa0f820ffe47a0fcf1dd274172e" }, + { + "amount": "57.78402967656", + "user": "0xE0961E5C38D733bE59369BB62D6b3c3B5FADf3d2", + "tx": "0x247b8b961532a75d6863a4c613e57a85122c0e2bfa988e24ef00bb44b270d329" + }, + { + "amount": "58.368150684", + "user": "0xD1549131c3f33B69f31f3Fc6D581d49d6c8dc6f0", + "tx": "0x4d37aa485a412a9dd32f724de7e6c65ba69a95be216593918ef63419b3e4f6c7" + }, { "amount": "18.521226534", "user": "0xfeF4b56A370135A17Eef5ba8f5c308451a64Cf86", @@ -45913,10 +45945,17 @@ "tx": "0xb1425d9b0d5f10c5b06236d6f9d61ebddd21c4027e0f41deb5ec227a1753c715" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "57.78402967656", + "user": "0xE0961E5C38D733bE59369BB62D6b3c3B5FADf3d2", + "tranche_id": 5, + "tx": "0x247b8b961532a75d6863a4c613e57a85122c0e2bfa988e24ef00bb44b270d329" + } + ], "total_tokens": "396", - "withdrawn_tokens": "0", - "remaining_tokens": "396" + "withdrawn_tokens": "57.78402967656", + "remaining_tokens": "338.21597032344" }, { "address": "0xbd6aeC2cd1Cc9fE80b4154E1cCD29bBe15854E8d", @@ -49822,10 +49861,17 @@ "tx": "0xb59405747c8088945a412703637a7b422f3639439ec2ee15e180c0a2a0d71ee4" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "58.368150684", + "user": "0xD1549131c3f33B69f31f3Fc6D581d49d6c8dc6f0", + "tranche_id": 5, + "tx": "0x4d37aa485a412a9dd32f724de7e6c65ba69a95be216593918ef63419b3e4f6c7" + } + ], "total_tokens": "400", - "withdrawn_tokens": "0", - "remaining_tokens": "400" + "withdrawn_tokens": "58.368150684", + "remaining_tokens": "341.631849316" }, { "address": "0xaCc993013812e5524102474Ba78f3a278c6d2eFc", @@ -51399,7 +51445,7 @@ "tranche_start": "2021-12-05T00:00:00.000Z", "tranche_end": "2022-06-05T00:00:00.000Z", "total_added": "171288.42", - "total_removed": "41266.0912801057989", + "total_removed": "41374.2240385532989", "locked_amount": "0", "deposits": [ { @@ -55654,6 +55700,11 @@ "user": "0xb21715Fe20319202d7AcC12320A8121760EF83dD", "tx": "0x409e2ea40dba97134578e1b0fd560c7652aac5939bb830f0fad1180cb3321ae1" }, + { + "amount": "108.1327584475", + "user": "0x207EeAb5F72e3F9e831428eF54dCaDc8B8727c85", + "tx": "0x73eb6423003425d47a97876737e6c1fe31f492c7cd196b472f5565c8f2f2ce22" + }, { "amount": "250", "user": "0x1f7C20Bd98B2f346A58d2c5faaFc940E0C36450E", @@ -67100,6 +67151,12 @@ } ], "withdrawals": [ + { + "amount": "108.1327584475", + "user": "0x207EeAb5F72e3F9e831428eF54dCaDc8B8727c85", + "tranche_id": 6, + "tx": "0x73eb6423003425d47a97876737e6c1fe31f492c7cd196b472f5565c8f2f2ce22" + }, { "amount": "98.96596459", "user": "0x207EeAb5F72e3F9e831428eF54dCaDc8B8727c85", @@ -67114,8 +67171,8 @@ } ], "total_tokens": "250", - "withdrawn_tokens": "141.8672415525", - "remaining_tokens": "108.1327584475" + "withdrawn_tokens": "250", + "remaining_tokens": "0" }, { "address": "0xc9f98A16690fa9D19c5A475Cd818d030fb035b27", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index a4da69027..56cb2d058 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.238828640284124", + "locked_amount": "33.170119863013703", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "228.389069634703186", + "locked_amount": "227.633273084728555", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index b3e471263..ecc4c6093 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "209.70272323693559280020762645865043128", + "locked_amount": "209.00876458650434070020693937087772707", "deposits": [ { "amount": "1000", From 11be7aaa8a70846f65d25d36ca1e3c907193de57 Mon Sep 17 00:00:00 2001 From: Matthew Russell Date: Thu, 28 Jul 2022 13:23:59 +0100 Subject: [PATCH 21/61] refacotr: deposit manager (#867) * refactor: deposit manager with a zustand store and refetching balances after contracts complete * refactor: remove assetId query string functionality * chore: remove unused import * chore: add a comment with a link to code explanation * refactor: capture errors from deposit value get functions * refactor: add error handling for async perform funcs * feat: add assets to react helpers for types and erc20 check --- .../token/src/components/vega-wallet/hooks.ts | 10 +- .../portfolio/deposit/deposit-container.tsx | 7 +- .../pages/portfolio/deposit/index.page.tsx | 19 +-- libs/deposits/src/lib/deposit-form.spec.tsx | 27 ++--- libs/deposits/src/lib/deposit-form.tsx | 76 ++++++------ libs/deposits/src/lib/deposit-limits.tsx | 24 ++-- libs/deposits/src/lib/deposit-manager.tsx | 111 ++++-------------- libs/deposits/src/lib/deposit-store.ts | 24 ++++ libs/deposits/src/lib/use-deposit-balances.ts | 59 ++++++++++ libs/deposits/src/lib/use-get-allowance.ts | 37 +++--- .../src/lib/use-get-balance-of-erc20-token.ts | 29 +++-- .../src/lib/use-get-deposit-limits.ts | 69 ----------- .../src/lib/use-get-deposit-maximum.ts | 32 +++++ .../src/lib/use-get-deposited-amount.ts | 50 ++++++++ libs/deposits/src/lib/use-submit-approval.ts | 37 +++++- libs/deposits/src/lib/use-submit-deposit.tsx | 41 +++++-- libs/deposits/src/lib/use-submit-faucet.ts | 29 ++++- libs/react-helpers/src/index.ts | 1 + libs/react-helpers/src/lib/assets.ts | 30 +++++ .../src/lib/use-ethereum-read-contract.ts | 2 + .../web3/src/lib/use-ethereum-transaction.tsx | 1 + libs/web3/src/lib/use-token-contract.ts | 15 ++- libs/withdraws/src/lib/test-helpers.ts | 4 +- libs/withdraws/src/lib/types.ts | 19 --- .../src/lib/use-get-withdraw-limits.tsx | 2 +- libs/withdraws/src/lib/withdraw-form.spec.tsx | 2 +- libs/withdraws/src/lib/withdraw-form.tsx | 15 ++- libs/withdraws/src/lib/withdraw-manager.tsx | 3 +- 28 files changed, 444 insertions(+), 331 deletions(-) create mode 100644 libs/deposits/src/lib/deposit-store.ts create mode 100644 libs/deposits/src/lib/use-deposit-balances.ts delete mode 100644 libs/deposits/src/lib/use-get-deposit-limits.ts create mode 100644 libs/deposits/src/lib/use-get-deposit-maximum.ts create mode 100644 libs/deposits/src/lib/use-get-deposited-amount.ts create mode 100644 libs/react-helpers/src/lib/assets.ts diff --git a/apps/token/src/components/vega-wallet/hooks.ts b/apps/token/src/components/vega-wallet/hooks.ts index da7df7337..54a3b3a59 100644 --- a/apps/token/src/components/vega-wallet/hooks.ts +++ b/apps/token/src/components/vega-wallet/hooks.ts @@ -18,6 +18,7 @@ import type { } from './__generated__/Delegations'; import { useVegaWallet } from '@vegaprotocol/wallet'; import { useContracts } from '../../contexts/contracts/contracts-context'; +import { isAssetTypeERC20 } from '@vegaprotocol/react-helpers'; const DELEGATIONS_QUERY = gql` query Delegations($partyId: ID!) { @@ -117,7 +118,7 @@ export const usePollForDelegations = () => { .filter((a) => a.type === AccountType.General) .map((a) => { const isVega = - a.asset.source.__typename === 'ERC20' && + isAssetTypeERC20(a.asset) && a.asset.source.contractAddress === vegaToken.address; return { @@ -131,10 +132,9 @@ export const usePollForDelegations = () => { ), image: isVega ? vegaBlack : noIcon, border: isVega, - address: - a.asset.source.__typename === 'ERC20' - ? a.asset.source.contractAddress - : undefined, + address: isAssetTypeERC20(a.asset) + ? a.asset.source.contractAddress + : undefined, }; }) .sort((a, b) => { diff --git a/apps/trading/pages/portfolio/deposit/deposit-container.tsx b/apps/trading/pages/portfolio/deposit/deposit-container.tsx index 98f34c2e9..8cd07878e 100644 --- a/apps/trading/pages/portfolio/deposit/deposit-container.tsx +++ b/apps/trading/pages/portfolio/deposit/deposit-container.tsx @@ -16,14 +16,10 @@ const DEPOSIT_PAGE_QUERY = gql` } `; -interface DepositContainerProps { - assetId?: string; -} - /** * Fetches data required for the Deposit page */ -export const DepositContainer = ({ assetId }: DepositContainerProps) => { +export const DepositContainer = () => { const { VEGA_ENV } = useEnvironment(); return ( @@ -41,7 +37,6 @@ export const DepositContainer = ({ assetId }: DepositContainerProps) => { return ( ); diff --git a/apps/trading/pages/portfolio/deposit/index.page.tsx b/apps/trading/pages/portfolio/deposit/index.page.tsx index d9d7b2ea7..a7c6feb87 100644 --- a/apps/trading/pages/portfolio/deposit/index.page.tsx +++ b/apps/trading/pages/portfolio/deposit/index.page.tsx @@ -1,29 +1,12 @@ -import { useRouter } from 'next/router'; -import { useMemo } from 'react'; import { Web3Container } from '../../../components/web3-container'; import { DepositContainer } from './deposit-container'; const Deposit = () => { - const { query } = useRouter(); - - // AssetId can be specified in the query string to allow link to deposit a particular asset - const assetId = useMemo(() => { - if (query.assetId && Array.isArray(query.assetId)) { - return undefined; - } - - if (Array.isArray(query.assetId)) { - return undefined; - } - - return query.assetId; - }, [query]); - return (

Deposit

- +
); diff --git a/libs/deposits/src/lib/deposit-form.spec.tsx b/libs/deposits/src/lib/deposit-form.spec.tsx index 0fae80b5b..4adeda9b4 100644 --- a/libs/deposits/src/lib/deposit-form.spec.tsx +++ b/libs/deposits/src/lib/deposit-form.spec.tsx @@ -37,10 +37,8 @@ beforeEach(() => { submitApprove: jest.fn(), submitDeposit: jest.fn(), requestFaucet: jest.fn(), - limits: { - max: new BigNumber(20), - deposited: new BigNumber(10), - }, + max: new BigNumber(20), + deposited: new BigNumber(10), allowance: new BigNumber(30), isFaucetable: true, }; @@ -134,7 +132,8 @@ describe('Deposit form', () => { ); @@ -213,18 +212,16 @@ describe('Deposit form', () => { const mockUseWeb3React = useWeb3React as jest.Mock; mockUseWeb3React.mockReturnValue({ account }); - const limits = { - max: new BigNumber(20), - deposited: new BigNumber(10), - }; const balance = new BigNumber(50); - + const max = new BigNumber(20); + const deposited = new BigNumber(10); render( ); @@ -237,13 +234,13 @@ describe('Deposit form', () => { expect( screen.getByText('Maximum total deposit amount', { selector: 'th' }) .nextElementSibling - ).toHaveTextContent(limits.max.toString()); + ).toHaveTextContent(max.toString()); expect( screen.getByText('Deposited', { selector: 'th' }).nextElementSibling - ).toHaveTextContent(limits.deposited.toString()); + ).toHaveTextContent(deposited.toString()); expect( screen.getByText('Remaining', { selector: 'th' }).nextElementSibling - ).toHaveTextContent(limits.max.minus(limits.deposited).toString()); + ).toHaveTextContent(max.minus(deposited).toString()); fireEvent.change(screen.getByLabelText('Amount'), { target: { value: '8' }, @@ -257,7 +254,7 @@ describe('Deposit form', () => { expect(props.submitDeposit).toHaveBeenCalledWith({ // @ts-ignore contract address definitely defined assetSource: asset.source.contractAddress, - amount: '800', + amount: '8', vegaPublicKey: vegaKey, }); }); diff --git a/libs/deposits/src/lib/deposit-form.tsx b/libs/deposits/src/lib/deposit-form.tsx index fb2fbf9b9..acff042da 100644 --- a/libs/deposits/src/lib/deposit-form.tsx +++ b/libs/deposits/src/lib/deposit-form.tsx @@ -1,5 +1,5 @@ +import type { Asset } from '@vegaprotocol/react-helpers'; import { - removeDecimal, ethereumAddress, t, required, @@ -7,6 +7,7 @@ import { minSafe, maxSafe, addDecimal, + isAssetTypeERC20, } from '@vegaprotocol/react-helpers'; import { Button, @@ -21,10 +22,9 @@ import { useWeb3React } from '@web3-react/core'; import { Web3WalletInput } from '@vegaprotocol/web3'; import BigNumber from 'bignumber.js'; import type { ReactNode } from 'react'; -import { useMemo, useEffect } from 'react'; -import { useForm, useWatch } from 'react-hook-form'; +import { useMemo } from 'react'; +import { Controller, useForm, useWatch } from 'react-hook-form'; import { DepositLimits } from './deposit-limits'; -import type { Asset } from './deposit-manager'; interface FormFields { asset: string; @@ -45,10 +45,8 @@ export interface DepositFormProps { vegaPublicKey: string; }) => void; requestFaucet: () => void; - limits: { - max: BigNumber; - deposited: BigNumber; - } | null; + max: BigNumber | undefined; + deposited: BigNumber | undefined; allowance: BigNumber | undefined; isFaucetable?: boolean; } @@ -58,10 +56,11 @@ export const DepositForm = ({ selectedAsset, onSelectAsset, balance, + max, + deposited, submitApprove, submitDeposit, requestFaucet, - limits, allowance, isFaucetable, }: DepositFormProps) => { @@ -89,15 +88,14 @@ export const DepositForm = ({ submitDeposit({ assetSource: selectedAsset.source.contractAddress, - amount: removeDecimal(fields.amount, selectedAsset.decimals), + amount: fields.amount, vegaPublicKey: fields.to, }); }; - const assetId = useWatch({ name: 'asset', control }); const amount = useWatch({ name: 'amount', control }); - const max = useMemo(() => { + const maxAmount = useMemo(() => { const maxApproved = allowance ? allowance : new BigNumber(0); const maxAvailable = balance ? balance : new BigNumber(0); @@ -106,8 +104,8 @@ export const DepositForm = ({ let maxLimit = new BigNumber(Infinity); // A max limit of zero indicates that there is no limit - if (limits && limits.max.isGreaterThan(0)) { - maxLimit = limits.max.minus(limits.deposited); + if (max && deposited && max.isGreaterThan(0)) { + maxLimit = max.minus(deposited); } return { @@ -116,7 +114,7 @@ export const DepositForm = ({ limit: maxLimit, amount: BigNumber.minimum(maxLimit, maxApproved, maxAvailable), }; - }, [limits, allowance, balance]); + }, [max, deposited, allowance, balance]); const min = useMemo(() => { // Min viable amount given asset decimals EG for WEI 0.000000000000000001 @@ -127,10 +125,6 @@ export const DepositForm = ({ return minViableAmount; }, [selectedAsset]); - useEffect(() => { - onSelectAsset(assetId); - }, [assetId, onSelectAsset]); - return (
- + ( + + )} + /> {errors.asset?.message && ( {errors.asset.message} @@ -196,9 +202,9 @@ export const DepositForm = ({ )} - {selectedAsset && limits && ( + {selectedAsset && max && deposited && (
- +
)} @@ -212,14 +218,14 @@ export const DepositForm = ({ minSafe: (value) => minSafe(new BigNumber(min))(value), maxSafe: (v) => { const value = new BigNumber(v); - if (value.isGreaterThan(max.available)) { + if (value.isGreaterThan(maxAmount.available)) { return t('Insufficient amount in Ethereum wallet'); - } else if (value.isGreaterThan(max.limit)) { + } else if (value.isGreaterThan(maxAmount.limit)) { return t('Amount is above temporary deposit limit'); - } else if (value.isGreaterThan(max.approved)) { + } else if (value.isGreaterThan(maxAmount.approved)) { return t('Amount is above approved amount'); } - return maxSafe(max.amount)(v); + return maxSafe(maxAmount.amount)(v); }, }, })} diff --git a/libs/deposits/src/lib/deposit-limits.tsx b/libs/deposits/src/lib/deposit-limits.tsx index 8599a2d14..2068ddb32 100644 --- a/libs/deposits/src/lib/deposit-limits.tsx +++ b/libs/deposits/src/lib/deposit-limits.tsx @@ -2,28 +2,30 @@ import { t } from '@vegaprotocol/react-helpers'; import type BigNumber from 'bignumber.js'; interface DepositLimitsProps { - limits: { - max: BigNumber; - deposited: BigNumber; - }; + max: BigNumber; + deposited: BigNumber; balance?: BigNumber; } -export const DepositLimits = ({ limits, balance }: DepositLimitsProps) => { +export const DepositLimits = ({ + max, + deposited, + balance, +}: DepositLimitsProps) => { let maxLimit = ''; - if (limits.max.isEqualTo(Infinity)) { + if (max.isEqualTo(Infinity)) { maxLimit = t('No limit'); - } else if (limits.max.isGreaterThan(1_000_000)) { + } else if (max.isGreaterThan(1_000_000)) { maxLimit = t('1m+'); } else { - maxLimit = limits.max.toString(); + maxLimit = max.toString(); } let remaining = ''; - if (limits.deposited.isEqualTo(0)) { + if (deposited.isEqualTo(0)) { remaining = maxLimit; } else { - const amountRemaining = limits.max.minus(limits.deposited); + const amountRemaining = max.minus(deposited); remaining = amountRemaining.isGreaterThan(1_000_000) ? t('1m+') : amountRemaining.toString(); @@ -44,7 +46,7 @@ export const DepositLimits = ({ limits, balance }: DepositLimitsProps) => { {t('Deposited')} - {limits.deposited.toString()} + {deposited.toString()} {t('Remaining')} diff --git a/libs/deposits/src/lib/deposit-manager.tsx b/libs/deposits/src/lib/deposit-manager.tsx index 4d6187028..9c52800d6 100644 --- a/libs/deposits/src/lib/deposit-manager.tsx +++ b/libs/deposits/src/lib/deposit-manager.tsx @@ -1,121 +1,56 @@ -import { useEffect, useMemo, useState } from 'react'; import { DepositForm } from './deposit-form'; -import { useGetBalanceOfERC20Token } from './use-get-balance-of-erc20-token'; import { useSubmitDeposit } from './use-submit-deposit'; import sortBy from 'lodash/sortBy'; import { useSubmitApproval } from './use-submit-approval'; -import { useGetDepositLimits } from './use-get-deposit-limits'; -import { useGetAllowance } from './use-get-allowance'; import { useSubmitFaucet } from './use-submit-faucet'; -import { EthTxStatus, useEthereumConfig } from '@vegaprotocol/web3'; -import { useTokenContract } from '@vegaprotocol/web3'; -import { removeDecimal } from '@vegaprotocol/react-helpers'; - -interface ERC20AssetSource { - __typename: 'ERC20'; - contractAddress: string; -} - -interface BuiltinAssetSource { - __typename: 'BuiltinAsset'; -} - -type AssetSource = ERC20AssetSource | BuiltinAssetSource; -export interface Asset { - __typename: 'Asset'; - id: string; - symbol: string; - name: string; - decimals: number; - source: AssetSource; -} +import { useDepositStore } from './deposit-store'; +import { useCallback } from 'react'; +import { useDepositBalances } from './use-deposit-balances'; +import type { Asset } from '@vegaprotocol/react-helpers'; interface DepositManagerProps { assets: Asset[]; - initialAssetId?: string; - isFaucetable?: boolean; + isFaucetable: boolean; } export const DepositManager = ({ assets, - initialAssetId, isFaucetable, }: DepositManagerProps) => { - const [assetId, setAssetId] = useState(initialAssetId); - - // Find the asset object from the select box - const asset = useMemo(() => { - const asset = assets?.find((a) => a.id === assetId); - return asset; - }, [assets, assetId]); - - const { config } = useEthereumConfig(); - - const tokenContract = useTokenContract( - asset?.source.__typename === 'ERC20' - ? asset.source.contractAddress - : undefined, - isFaucetable - ); - - // Get users balance of the erc20 token selected - const { balance, refetch: refetchBalance } = useGetBalanceOfERC20Token( - tokenContract, - asset?.decimals - ); - - // Get temporary deposit limits - const limits = useGetDepositLimits(asset); - - // Get allowance (approved spending limit of brdige contract) for the selected asset - const { allowance, refetch: refetchAllowance } = useGetAllowance( - tokenContract, - asset?.decimals - ); + const { asset, balance, allowance, deposited, max, update } = + useDepositStore(); + useDepositBalances(isFaucetable); // Set up approve transaction - const approve = useSubmitApproval(tokenContract); + const approve = useSubmitApproval(); // Set up deposit transaction const deposit = useSubmitDeposit(); // Set up faucet transaction - const faucet = useSubmitFaucet(tokenContract); + const faucet = useSubmitFaucet(); - // Update balance after confirmation event has been received - useEffect(() => { - if ( - faucet.transaction.status === EthTxStatus.Confirmed || - deposit.transaction.status === EthTxStatus.Confirmed - ) { - refetchBalance(); - } - }, [deposit.transaction.status, faucet.transaction.status, refetchBalance]); - - // After an approval transaction refetch allowance - useEffect(() => { - if (approve.transaction.status === EthTxStatus.Confirmed) { - refetchAllowance(); - } - }, [approve.transaction.status, refetchAllowance]); + const handleSelectAsset = useCallback( + (id) => { + const asset = assets.find((a) => a.id === id); + if (!asset) return; + update({ asset }); + }, + [assets, update] + ); return ( <> setAssetId(id)} + onSelectAsset={handleSelectAsset} assets={sortBy(assets, 'name')} - submitApprove={() => { - if (!asset || !config) return; - const amount = removeDecimal('1000000', asset.decimals); - approve.perform(config.collateral_bridge_contract.address, amount); - }} - submitDeposit={(args) => { - deposit.perform(args.assetSource, args.amount, args.vegaPublicKey); - }} + submitApprove={() => approve.perform()} + submitDeposit={(args) => deposit.perform(args)} requestFaucet={() => faucet.perform()} - limits={limits} + deposited={deposited} + max={max} allowance={allowance} isFaucetable={isFaucetable} /> diff --git a/libs/deposits/src/lib/deposit-store.ts b/libs/deposits/src/lib/deposit-store.ts new file mode 100644 index 000000000..17a04b3c9 --- /dev/null +++ b/libs/deposits/src/lib/deposit-store.ts @@ -0,0 +1,24 @@ +import type { Asset } from '@vegaprotocol/react-helpers'; +import BigNumber from 'bignumber.js'; +import type { SetState } from 'zustand'; +import create from 'zustand'; + +interface DepositStore { + balance: BigNumber; + allowance: BigNumber; + asset: Asset | undefined; + deposited: BigNumber; + max: BigNumber; + update: (state: Partial) => void; +} + +export const useDepositStore = create((set: SetState) => ({ + balance: new BigNumber(0), + allowance: new BigNumber(0), + deposited: new BigNumber(0), + max: new BigNumber(0), + asset: undefined, + update: (updatedState) => { + set(updatedState); + }, +})); diff --git a/libs/deposits/src/lib/use-deposit-balances.ts b/libs/deposits/src/lib/use-deposit-balances.ts new file mode 100644 index 000000000..67b2c20df --- /dev/null +++ b/libs/deposits/src/lib/use-deposit-balances.ts @@ -0,0 +1,59 @@ +import { useBridgeContract, useTokenContract } from '@vegaprotocol/web3'; +import { useEffect } from 'react'; +import * as Sentry from '@sentry/react'; +import { useDepositStore } from './deposit-store'; +import { useGetAllowance } from './use-get-allowance'; +import { useGetBalanceOfERC20Token } from './use-get-balance-of-erc20-token'; +import { useGetDepositMaximum } from './use-get-deposit-maximum'; +import { useGetDepositedAmount } from './use-get-deposited-amount'; +import { isAssetTypeERC20 } from '@vegaprotocol/react-helpers'; + +/** + * Hook which fetches all the balances required for despoiting + * whenever the asset changes in the form + */ +export const useDepositBalances = (isFaucetable: boolean) => { + const { asset, update } = useDepositStore(); + const tokenContract = useTokenContract( + isAssetTypeERC20(asset) ? asset : undefined, + isFaucetable + ); + const bridgeContract = useBridgeContract(true); + const getAllowance = useGetAllowance(tokenContract, asset); + const getBalance = useGetBalanceOfERC20Token(tokenContract, asset); + const getDepositMaximum = useGetDepositMaximum(bridgeContract, asset); + const getDepositedAmount = useGetDepositedAmount(asset); + + useEffect(() => { + const getBalances = async () => { + try { + const [max, deposited, balance, allowance] = await Promise.all([ + getDepositMaximum(), + getDepositedAmount(), + getBalance(), + getAllowance(), + ]); + + update({ + max, + deposited, + balance, + allowance, + }); + } catch (err) { + Sentry.captureException(err); + } + }; + + if (asset) { + getBalances(); + } + }, [ + asset, + update, + getDepositMaximum, + getDepositedAmount, + getAllowance, + getBalance, + ]); +}; diff --git a/libs/deposits/src/lib/use-get-allowance.ts b/libs/deposits/src/lib/use-get-allowance.ts index c20f450ab..42468e69e 100644 --- a/libs/deposits/src/lib/use-get-allowance.ts +++ b/libs/deposits/src/lib/use-get-allowance.ts @@ -1,30 +1,35 @@ import type { Token } from '@vegaprotocol/smart-contracts'; +import * as Sentry from '@sentry/react'; import { useWeb3React } from '@web3-react/core'; import { useCallback } from 'react'; -import { useEthereumConfig, useEthereumReadContract } from '@vegaprotocol/web3'; +import { useEthereumConfig } from '@vegaprotocol/web3'; import BigNumber from 'bignumber.js'; +import type { Asset } from '@vegaprotocol/react-helpers'; import { addDecimal } from '@vegaprotocol/react-helpers'; -export const useGetAllowance = (contract: Token | null, decimals?: number) => { +export const useGetAllowance = ( + contract: Token | null, + asset: Asset | undefined +) => { const { account } = useWeb3React(); const { config } = useEthereumConfig(); - const getAllowance = useCallback(() => { - if (!contract || !account || !config) { + const getAllowance = useCallback(async () => { + if (!contract || !account || !config || !asset) { return; } - return contract.allowance( - account, - config.collateral_bridge_contract.address - ); - }, [contract, account, config]); + try { + const res = await contract.allowance( + account, + config.collateral_bridge_contract.address + ); - const { state, refetch } = useEthereumReadContract(getAllowance); + return new BigNumber(addDecimal(res.toString(), asset.decimals)); + } catch (err) { + Sentry.captureException(err); + return; + } + }, [contract, account, config, asset]); - const allowance = - state.data && decimals - ? new BigNumber(addDecimal(state.data.toString(), decimals)) - : undefined; - - return { allowance, refetch }; + return getAllowance; }; diff --git a/libs/deposits/src/lib/use-get-balance-of-erc20-token.ts b/libs/deposits/src/lib/use-get-balance-of-erc20-token.ts index 0d507c33d..7ffb0b311 100644 --- a/libs/deposits/src/lib/use-get-balance-of-erc20-token.ts +++ b/libs/deposits/src/lib/use-get-balance-of-erc20-token.ts @@ -1,30 +1,29 @@ -import { useEthereumReadContract } from '@vegaprotocol/web3'; import type { Token } from '@vegaprotocol/smart-contracts'; +import * as Sentry from '@sentry/react'; import { useWeb3React } from '@web3-react/core'; import { useCallback } from 'react'; import BigNumber from 'bignumber.js'; +import type { Asset } from '@vegaprotocol/react-helpers'; import { addDecimal } from '@vegaprotocol/react-helpers'; export const useGetBalanceOfERC20Token = ( contract: Token | null, - decimals: number | undefined + asset: Asset | undefined ) => { const { account } = useWeb3React(); - - const getBalance = useCallback(() => { - if (!contract || !account) { + const getBalance = useCallback(async () => { + if (!contract || !asset || !account) { return; } - return contract.balanceOf(account); - }, [contract, account]); + try { + const res = await contract.balanceOf(account); + return new BigNumber(addDecimal(res.toString(), asset.decimals)); + } catch (err) { + Sentry.captureException(err); + return; + } + }, [contract, asset, account]); - const { state, refetch } = useEthereumReadContract(getBalance); - - const balance = - state.data && decimals - ? new BigNumber(addDecimal(state.data?.toString(), decimals)) - : undefined; - - return { balance, refetch }; + return getBalance; }; diff --git a/libs/deposits/src/lib/use-get-deposit-limits.ts b/libs/deposits/src/lib/use-get-deposit-limits.ts deleted file mode 100644 index 9173ea2af..000000000 --- a/libs/deposits/src/lib/use-get-deposit-limits.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { useCallback, useEffect, useState } from 'react'; -import { ethers } from 'ethers'; -import type { Asset } from './deposit-manager'; -import { - useBridgeContract, - useEthereumConfig, - useEthereumReadContract, -} from '@vegaprotocol/web3'; -import BigNumber from 'bignumber.js'; -import { addDecimal } from '@vegaprotocol/react-helpers'; -import { useWeb3React } from '@web3-react/core'; - -export const useGetDepositLimits = (asset?: Asset) => { - const { account, provider } = useWeb3React(); - const { config } = useEthereumConfig(); - const contract = useBridgeContract(true); - const [userTotal, setUserTotal] = useState(null); - const getLimits = useCallback(async () => { - if (!contract || !asset || asset.source.__typename !== 'ERC20') { - return; - } - - return contract.get_deposit_maximum(asset.source.contractAddress); - }, [asset, contract]); - - useEffect(() => { - if ( - !provider || - !config || - !account || - !asset || - asset.source.__typename !== 'ERC20' - ) { - return; - } - - const abicoder = new ethers.utils.AbiCoder(); - const innerHash = ethers.utils.keccak256( - abicoder.encode(['address', 'uint256'], [account, 4]) - ); - const storageLocation = ethers.utils.keccak256( - abicoder.encode( - ['address', 'bytes32'], - [asset.source.contractAddress, innerHash] - ) - ); - (async () => { - const res = await provider.getStorageAt( - config.collateral_bridge_contract.address, - storageLocation - ); - const value = new BigNumber(res, 16).toString(); - setUserTotal(new BigNumber(addDecimal(value, asset.decimals))); - })(); - }, [provider, config, account, asset]); - - const { - state: { data }, - } = useEthereumReadContract(getLimits); - - if (!data || !userTotal || !asset) return null; - - const max = new BigNumber(addDecimal(data.toString(), asset.decimals)); - - return { - max: max.isEqualTo(0) ? new BigNumber(Infinity) : max, - deposited: userTotal, - }; -}; diff --git a/libs/deposits/src/lib/use-get-deposit-maximum.ts b/libs/deposits/src/lib/use-get-deposit-maximum.ts new file mode 100644 index 000000000..beec6d081 --- /dev/null +++ b/libs/deposits/src/lib/use-get-deposit-maximum.ts @@ -0,0 +1,32 @@ +import { useCallback } from 'react'; +import * as Sentry from '@sentry/react'; +import BigNumber from 'bignumber.js'; +import type { Asset } from '@vegaprotocol/react-helpers'; +import { addDecimal } from '@vegaprotocol/react-helpers'; +import type { + CollateralBridge, + CollateralBridgeNew, +} from '@vegaprotocol/smart-contracts'; + +export const useGetDepositMaximum = ( + contract: CollateralBridge | CollateralBridgeNew | null, + asset: Asset | undefined +) => { + const getDepositMaximum = useCallback(async () => { + if (!contract || !asset || asset.source.__typename !== 'ERC20') { + return; + } + try { + const res = await contract.get_deposit_maximum( + asset.source.contractAddress + ); + const max = new BigNumber(addDecimal(res.toString(), asset.decimals)); + return max.isEqualTo(0) ? new BigNumber(Infinity) : max; + } catch (err) { + Sentry.captureException(err); + return; + } + }, [contract, asset]); + + return getDepositMaximum; +}; diff --git a/libs/deposits/src/lib/use-get-deposited-amount.ts b/libs/deposits/src/lib/use-get-deposited-amount.ts new file mode 100644 index 000000000..ad85f4050 --- /dev/null +++ b/libs/deposits/src/lib/use-get-deposited-amount.ts @@ -0,0 +1,50 @@ +import { useCallback } from 'react'; +import * as Sentry from '@sentry/react'; +import { ethers } from 'ethers'; +import { useEthereumConfig } from '@vegaprotocol/web3'; +import BigNumber from 'bignumber.js'; +import type { Asset } from '@vegaprotocol/react-helpers'; +import { addDecimal } from '@vegaprotocol/react-helpers'; +import { useWeb3React } from '@web3-react/core'; + +export const useGetDepositedAmount = (asset: Asset | undefined) => { + const { account, provider } = useWeb3React(); + const { config } = useEthereumConfig(); + + // For an explaination of how this code works see here: https://gist.github.com/emilbayes/44a36f59b06b1f3edb9cf914041544ed + const getDepositedAmount = useCallback(async () => { + if ( + !provider || + !config || + !account || + !asset || + asset.source.__typename !== 'ERC20' + ) { + return; + } + + try { + const abicoder = new ethers.utils.AbiCoder(); + const innerHash = ethers.utils.keccak256( + abicoder.encode(['address', 'uint256'], [account, 4]) + ); + const storageLocation = ethers.utils.keccak256( + abicoder.encode( + ['address', 'bytes32'], + [asset.source.contractAddress, innerHash] + ) + ); + const res = await provider.getStorageAt( + config.collateral_bridge_contract.address, + storageLocation + ); + const value = new BigNumber(res, 16).toString(); + return new BigNumber(addDecimal(value, asset.decimals)); + } catch (err) { + Sentry.captureException(err); + return; + } + }, [provider, asset, config, account]); + + return getDepositedAmount; +}; diff --git a/libs/deposits/src/lib/use-submit-approval.ts b/libs/deposits/src/lib/use-submit-approval.ts index 3ee9f9c5f..55255be38 100644 --- a/libs/deposits/src/lib/use-submit-approval.ts +++ b/libs/deposits/src/lib/use-submit-approval.ts @@ -1,10 +1,41 @@ +import { isAssetTypeERC20, removeDecimal } from '@vegaprotocol/react-helpers'; +import * as Sentry from '@sentry/react'; import type { Token } from '@vegaprotocol/smart-contracts'; -import { useEthereumTransaction } from '@vegaprotocol/web3'; +import { + useEthereumConfig, + useEthereumTransaction, + useTokenContract, +} from '@vegaprotocol/web3'; +import { useDepositStore } from './deposit-store'; +import { useGetAllowance } from './use-get-allowance'; -export const useSubmitApproval = (contract: Token | null) => { +export const useSubmitApproval = () => { + const { config } = useEthereumConfig(); + const { asset, update } = useDepositStore(); + const contract = useTokenContract( + isAssetTypeERC20(asset) ? asset : undefined, + true + ); + const getAllowance = useGetAllowance(contract, asset); const transaction = useEthereumTransaction( contract, 'approve' ); - return transaction; + return { + ...transaction, + perform: async () => { + if (!asset || !config) return; + try { + const amount = removeDecimal('1000000', asset.decimals); + await transaction.perform( + config.collateral_bridge_contract.address, + amount + ); + const allowance = await getAllowance(); + update({ allowance }); + } catch (err) { + Sentry.captureException(err); + } + }, + }; }; diff --git a/libs/deposits/src/lib/use-submit-deposit.tsx b/libs/deposits/src/lib/use-submit-deposit.tsx index 9ed43f514..ca9630913 100644 --- a/libs/deposits/src/lib/use-submit-deposit.tsx +++ b/libs/deposits/src/lib/use-submit-deposit.tsx @@ -1,21 +1,29 @@ import { gql, useSubscription } from '@apollo/client'; +import * as Sentry from '@sentry/react'; import type { DepositEvent, DepositEventVariables, } from './__generated__/DepositEvent'; import { DepositStatus } from '@vegaprotocol/types'; import { useState } from 'react'; -import { remove0x } from '@vegaprotocol/react-helpers'; +import { + isAssetTypeERC20, + remove0x, + removeDecimal, +} from '@vegaprotocol/react-helpers'; import { useBridgeContract, useEthereumConfig, useEthereumTransaction, + useTokenContract, } from '@vegaprotocol/web3'; import type { CollateralBridge, CollateralBridgeNew, } from '@vegaprotocol/smart-contracts'; import { prepend0x } from '@vegaprotocol/smart-contracts'; +import { useDepositStore } from './deposit-store'; +import { useGetBalanceOfERC20Token } from './use-get-balance-of-erc20-token'; const DEPOSIT_EVENT_SUB = gql` subscription DepositEvent($partyId: ID!) { @@ -32,17 +40,24 @@ const DEPOSIT_EVENT_SUB = gql` `; export const useSubmitDeposit = () => { + const { asset, update } = useDepositStore(); const { config } = useEthereumConfig(); - const contract = useBridgeContract(true); + const bridgeContract = useBridgeContract(true); + const tokenContract = useTokenContract( + isAssetTypeERC20(asset) ? asset : undefined, + true + ); // Store public key from contract arguments for use in the subscription, // NOTE: it may be different from the users connected key const [partyId, setPartyId] = useState(null); + const getBalance = useGetBalanceOfERC20Token(tokenContract, asset); + const transaction = useEthereumTransaction< CollateralBridgeNew | CollateralBridge, 'deposit_asset' - >(contract, 'deposit_asset', config?.confirmations, true); + >(bridgeContract, 'deposit_asset', config?.confirmations, true); useSubscription(DEPOSIT_EVENT_SUB, { variables: { partyId: partyId ? remove0x(partyId) : '' }, @@ -78,10 +93,22 @@ export const useSubmitDeposit = () => { return { ...transaction, - perform: (...args: Parameters) => { - setPartyId(args[2]); - const publicKey = prepend0x(args[2]); - transaction.perform(args[0], args[1], publicKey); + perform: async (args: { + assetSource: string; + amount: string; + vegaPublicKey: string; + }) => { + if (!asset) return; + try { + setPartyId(args.vegaPublicKey); + const publicKey = prepend0x(args.vegaPublicKey); + const amount = removeDecimal(args.amount, asset.decimals); + await transaction.perform(args.assetSource, amount, publicKey); + const balance = await getBalance(); + update({ balance }); + } catch (err) { + Sentry.captureException(err); + } }, }; }; diff --git a/libs/deposits/src/lib/use-submit-faucet.ts b/libs/deposits/src/lib/use-submit-faucet.ts index a0eb4ab7a..4bc28e7e8 100644 --- a/libs/deposits/src/lib/use-submit-faucet.ts +++ b/libs/deposits/src/lib/use-submit-faucet.ts @@ -1,10 +1,31 @@ -import type { Token, TokenFaucetable } from '@vegaprotocol/smart-contracts'; -import { useEthereumTransaction } from '@vegaprotocol/web3'; +import type { TokenFaucetable } from '@vegaprotocol/smart-contracts'; +import * as Sentry from '@sentry/react'; +import { useEthereumTransaction, useTokenContract } from '@vegaprotocol/web3'; +import { useDepositStore } from './deposit-store'; +import { useGetBalanceOfERC20Token } from './use-get-balance-of-erc20-token'; +import { isAssetTypeERC20 } from '@vegaprotocol/react-helpers'; -export const useSubmitFaucet = (contract: Token | TokenFaucetable | null) => { +export const useSubmitFaucet = () => { + const { asset, update } = useDepositStore(); + const contract = useTokenContract( + isAssetTypeERC20(asset) ? asset : undefined, + true + ); + const getBalance = useGetBalanceOfERC20Token(contract, asset); const transaction = useEthereumTransaction( contract, 'faucet' ); - return transaction; + return { + ...transaction, + perform: async () => { + try { + await transaction.perform(); + const balance = await getBalance(); + update({ balance }); + } catch (err) { + Sentry.captureException(err); + } + }, + }; }; diff --git a/libs/react-helpers/src/index.ts b/libs/react-helpers/src/index.ts index 75f83254e..9611b2cd4 100644 --- a/libs/react-helpers/src/index.ts +++ b/libs/react-helpers/src/index.ts @@ -1,4 +1,5 @@ export * from './hooks'; +export * from './lib/assets'; export * from './lib/context'; export * from './lib/determine-id'; export * from './lib/format'; diff --git a/libs/react-helpers/src/lib/assets.ts b/libs/react-helpers/src/lib/assets.ts new file mode 100644 index 000000000..df799b3ae --- /dev/null +++ b/libs/react-helpers/src/lib/assets.ts @@ -0,0 +1,30 @@ +export interface ERC20AssetSource { + __typename: 'ERC20'; + contractAddress: string; +} + +export interface BuiltinAssetSource { + __typename: 'BuiltinAsset'; +} + +export interface Asset { + __typename: 'Asset'; + id: string; + symbol: string; + name: string; + decimals: number; + source: ERC20AssetSource | BuiltinAssetSource; +} + +export type ERC20Asset = Omit & { + source: ERC20AssetSource; +}; + +export type BuiltinAsset = Omit & { + source: BuiltinAssetSource; +}; + +export const isAssetTypeERC20 = (asset?: Asset): asset is ERC20Asset => { + if (!asset?.source) return false; + return asset.source.__typename === 'ERC20'; +}; diff --git a/libs/web3/src/lib/use-ethereum-read-contract.ts b/libs/web3/src/lib/use-ethereum-read-contract.ts index 982fd35ee..dfe0ee2f4 100644 --- a/libs/web3/src/lib/use-ethereum-read-contract.ts +++ b/libs/web3/src/lib/use-ethereum-read-contract.ts @@ -51,9 +51,11 @@ export const useEthereumReadContract = ( const response = await result; if (cancelRequest.current) return; dispatch({ type: ActionType.FETCHED, payload: response }); + return response; } catch (error) { if (cancelRequest.current) return; dispatch({ type: ActionType.ERROR, error: error as Error }); + return; } }, [contractFunc]); diff --git a/libs/web3/src/lib/use-ethereum-transaction.tsx b/libs/web3/src/lib/use-ethereum-transaction.tsx index 9d48a4956..cbd043642 100644 --- a/libs/web3/src/lib/use-ethereum-transaction.tsx +++ b/libs/web3/src/lib/use-ethereum-transaction.tsx @@ -130,6 +130,7 @@ export const useEthereumTransaction = < error: new Error('Something went wrong'), }); } + return; } }, [ diff --git a/libs/web3/src/lib/use-token-contract.ts b/libs/web3/src/lib/use-token-contract.ts index 49cbae48f..1cefd7030 100644 --- a/libs/web3/src/lib/use-token-contract.ts +++ b/libs/web3/src/lib/use-token-contract.ts @@ -1,26 +1,25 @@ +import type { ERC20Asset } from '@vegaprotocol/react-helpers'; import { Token, TokenFaucetable } from '@vegaprotocol/smart-contracts'; import { useWeb3React } from '@web3-react/core'; import { useMemo } from 'react'; -export const useTokenContract = ( - contractAddress?: string, - faucetable = false -) => { +export const useTokenContract = (asset?: ERC20Asset, faucetable = false) => { const { provider } = useWeb3React(); const contract = useMemo(() => { - if (!provider || !contractAddress) { + if (!provider || !asset) { return null; } const signer = provider.getSigner(); + const address = asset.source.contractAddress; if (faucetable) { - return new TokenFaucetable(contractAddress, signer || provider); + return new TokenFaucetable(address, signer || provider); } else { - return new Token(contractAddress, signer || provider); + return new Token(address, signer || provider); } - }, [provider, contractAddress, faucetable]); + }, [provider, asset, faucetable]); return contract; }; diff --git a/libs/withdraws/src/lib/test-helpers.ts b/libs/withdraws/src/lib/test-helpers.ts index afd650b86..28168f00a 100644 --- a/libs/withdraws/src/lib/test-helpers.ts +++ b/libs/withdraws/src/lib/test-helpers.ts @@ -1,11 +1,13 @@ +import type { Asset } from '@vegaprotocol/react-helpers'; import { AccountType, WithdrawalStatus } from '@vegaprotocol/types'; import merge from 'lodash/merge'; import type { PartialDeep } from 'type-fest'; -import type { Asset, Account } from './types'; +import type { Account } from './types'; import type { Withdrawals_party_withdrawals } from './__generated__/Withdrawals'; export const generateAsset = (override?: PartialDeep) => { const defaultAsset: Asset = { + __typename: 'Asset', id: 'asset-id', symbol: 'asset-symbol', name: 'asset-name', diff --git a/libs/withdraws/src/lib/types.ts b/libs/withdraws/src/lib/types.ts index 27a95ab91..16b6cab16 100644 --- a/libs/withdraws/src/lib/types.ts +++ b/libs/withdraws/src/lib/types.ts @@ -1,24 +1,5 @@ import type { AccountType } from '@vegaprotocol/types'; -interface ERC20AssetSource { - __typename: 'ERC20'; - contractAddress: string; -} - -interface BuiltinAssetSource { - __typename: 'BuiltinAsset'; -} - -type AssetSource = ERC20AssetSource | BuiltinAssetSource; - -export interface Asset { - id: string; - symbol: string; - name: string; - decimals: number; - source: AssetSource; -} - export interface Account { type: AccountType; balance: string; diff --git a/libs/withdraws/src/lib/use-get-withdraw-limits.tsx b/libs/withdraws/src/lib/use-get-withdraw-limits.tsx index 12d6eec65..44556b04a 100644 --- a/libs/withdraws/src/lib/use-get-withdraw-limits.tsx +++ b/libs/withdraws/src/lib/use-get-withdraw-limits.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react'; -import type { Asset } from './types'; import { useBridgeContract, useEthereumReadContract } from '@vegaprotocol/web3'; import BigNumber from 'bignumber.js'; +import type { Asset } from '@vegaprotocol/react-helpers'; import { addDecimal } from '@vegaprotocol/react-helpers'; export const useGetWithdrawLimits = (asset?: Asset) => { diff --git a/libs/withdraws/src/lib/withdraw-form.spec.tsx b/libs/withdraws/src/lib/withdraw-form.spec.tsx index 31cda4804..fe9883ae7 100644 --- a/libs/withdraws/src/lib/withdraw-form.spec.tsx +++ b/libs/withdraws/src/lib/withdraw-form.spec.tsx @@ -3,8 +3,8 @@ import BigNumber from 'bignumber.js'; import { useWeb3React } from '@web3-react/core'; import { WithdrawForm } from './withdraw-form'; import { generateAsset } from './test-helpers'; -import type { Asset } from './types'; import type { WithdrawFormProps } from './withdraw-form'; +import type { Asset } from '@vegaprotocol/react-helpers'; jest.mock('@web3-react/core'); diff --git a/libs/withdraws/src/lib/withdraw-form.tsx b/libs/withdraws/src/lib/withdraw-form.tsx index ae0d6db5d..49969649c 100644 --- a/libs/withdraws/src/lib/withdraw-form.tsx +++ b/libs/withdraws/src/lib/withdraw-form.tsx @@ -1,3 +1,4 @@ +import type { Asset } from '@vegaprotocol/react-helpers'; import { ethereumAddress, minSafe, @@ -5,6 +6,7 @@ import { removeDecimal, required, maxSafe, + isAssetTypeERC20, } from '@vegaprotocol/react-helpers'; import { Button, @@ -19,7 +21,6 @@ import BigNumber from 'bignumber.js'; import type { ButtonHTMLAttributes, ReactNode } from 'react'; import { useForm, Controller } from 'react-hook-form'; import type { WithdrawalFields } from './use-withdraw'; -import type { Asset } from './types'; import { WithdrawLimits } from './withdraw-limits'; interface FormFields { @@ -99,13 +100,11 @@ export const WithdrawForm = ({ id="asset" > - {assets - .filter((a) => a.source.__typename === 'ERC20') - .map((a) => ( - - ))} + {assets.filter(isAssetTypeERC20).map((a) => ( + + ))} )} /> diff --git a/libs/withdraws/src/lib/withdraw-manager.tsx b/libs/withdraws/src/lib/withdraw-manager.tsx index 056bbe09a..27fc4319d 100644 --- a/libs/withdraws/src/lib/withdraw-manager.tsx +++ b/libs/withdraws/src/lib/withdraw-manager.tsx @@ -5,10 +5,11 @@ import type { WithdrawalFields } from './use-withdraw'; import { useWithdraw } from './use-withdraw'; import { WithdrawDialog } from './withdraw-dialog'; import { isExpectedEthereumError, EthTxStatus } from '@vegaprotocol/web3'; +import type { Asset } from '@vegaprotocol/react-helpers'; import { addDecimal } from '@vegaprotocol/react-helpers'; import { AccountType } from '@vegaprotocol/types'; import BigNumber from 'bignumber.js'; -import type { Account, Asset } from './types'; +import type { Account } from './types'; import { useGetWithdrawLimits } from './use-get-withdraw-limits'; export interface WithdrawManagerProps { From 70aae5003da61a931d09a9a49e9e284b58e82b11 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Thu, 28 Jul 2022 14:43:17 +0100 Subject: [PATCH 22/61] Fix/898: Avatar images now only displaying if avatarUrl is valid (#899) --- apps/token/src/routes/staking/node-list.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/token/src/routes/staking/node-list.tsx b/apps/token/src/routes/staking/node-list.tsx index 0130112dc..2c628bf37 100644 --- a/apps/token/src/routes/staking/node-list.tsx +++ b/apps/token/src/routes/staking/node-list.tsx @@ -66,6 +66,7 @@ const ValidatorRenderer = ({ data }: ValidatorRendererProps) => { className="h-24 w-24 rounded-full mr-8" src={avatarUrl} alt={`Avatar icon for ${name}`} + onError={(e) => (e.currentTarget.style.display = 'none')} /> )} {name} From 4f3409c106e429d0d25071845e7c8c6c198c1df4 Mon Sep 17 00:00:00 2001 From: Dexter Edwards Date: Thu, 28 Jul 2022 14:44:29 +0100 Subject: [PATCH 23/61] fix: broder colour wrong for tranches overview (#894) --- apps/token/src/routes/redemption/home/vesting-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/token/src/routes/redemption/home/vesting-table.tsx b/apps/token/src/routes/redemption/home/vesting-table.tsx index 72b0f0194..0b5a07187 100644 --- a/apps/token/src/routes/redemption/home/vesting-table.tsx +++ b/apps/token/src/routes/redemption/home/vesting-table.tsx @@ -63,7 +63,7 @@ export const VestingTable = ({ {formatNumber(associated)} -
+
Date: Thu, 28 Jul 2022 14:48:15 +0100 Subject: [PATCH 24/61] Feat/710: Block time display improved in block explorer (#897) * Feat/710: Block time display improved in block explorer * Feat/710: Removed unused useMemo * Feat/710: Updated tests to reflect always passing a string to TimeAgo --- .../src/app/components/blocks/block-data.tsx | 15 ++++- .../src/app/components/seconds-ago/index.tsx | 33 ----------- .../seconds-ago/seconds-ago.spec.tsx | 36 ----------- .../src/app/components/time-ago/index.tsx | 26 ++++++++ .../app/components/time-ago/time-ago.spec.tsx | 45 ++++++++++++++ .../src/app/routes/blocks/id/block.spec.tsx | 2 +- .../src/app/routes/blocks/id/block.tsx | 59 +++++++++++-------- 7 files changed, 119 insertions(+), 97 deletions(-) delete mode 100644 apps/explorer/src/app/components/seconds-ago/index.tsx delete mode 100644 apps/explorer/src/app/components/seconds-ago/seconds-ago.spec.tsx create mode 100644 apps/explorer/src/app/components/time-ago/index.tsx create mode 100644 apps/explorer/src/app/components/time-ago/time-ago.spec.tsx diff --git a/apps/explorer/src/app/components/blocks/block-data.tsx b/apps/explorer/src/app/components/blocks/block-data.tsx index b392892e3..8092f8275 100644 --- a/apps/explorer/src/app/components/blocks/block-data.tsx +++ b/apps/explorer/src/app/components/blocks/block-data.tsx @@ -2,7 +2,9 @@ import React from 'react'; import type { BlockMeta } from '../../routes/blocks/tendermint-blockchain-response'; import { Routes } from '../../routes/route-names'; import { Link } from 'react-router-dom'; -import { SecondsAgo } from '../seconds-ago'; +import { getDateTimeFormat } from '@vegaprotocol/react-helpers'; +import { Tooltip } from '@vegaprotocol/ui-toolkit'; +import { TimeAgo } from '../time-ago'; import { TableWithTbody, TableRow, TableCell } from '../table'; import { t } from '@vegaprotocol/react-helpers'; @@ -53,7 +55,16 @@ export const BlockData = ({ block, className }: BlockProps) => { className="text-center pr-28 text-neutral-300 w-[170px]" aria-label={t('Block genesis')} > - + + {/*For some reason we get forwardRef errors if we pass in the TimeAgo component directly*/} + + + + diff --git a/apps/explorer/src/app/components/seconds-ago/index.tsx b/apps/explorer/src/app/components/seconds-ago/index.tsx deleted file mode 100644 index 4a1d4e732..000000000 --- a/apps/explorer/src/app/components/seconds-ago/index.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { t } from '@vegaprotocol/react-helpers'; -import { useEffect, useState } from 'react'; - -interface SecondsAgoProps { - date: string | undefined; -} - -export const SecondsAgo = ({ date, ...props }: SecondsAgoProps) => { - const [now, setNow] = useState(Date.now()); - - useEffect(() => { - const int = setInterval(() => { - setNow(Date.now()); - }, 500); - return () => clearInterval(int); - }, [setNow]); - - if (!date) { - return <>{t('Date unknown')}; - } - - const timeAgoInSeconds = Math.floor((now - new Date(date).getTime()) / 1000); - - return ( -
- {t( - `${ - timeAgoInSeconds === 1 ? '1 second' : `${timeAgoInSeconds} seconds` - } ago` - )} -
- ); -}; diff --git a/apps/explorer/src/app/components/seconds-ago/seconds-ago.spec.tsx b/apps/explorer/src/app/components/seconds-ago/seconds-ago.spec.tsx deleted file mode 100644 index 86a05ad41..000000000 --- a/apps/explorer/src/app/components/seconds-ago/seconds-ago.spec.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { render, screen, act } from '@testing-library/react'; -import { SecondsAgo } from './index'; - -beforeEach(() => { - jest.useFakeTimers(); -}); - -afterEach(() => { - jest.useRealTimers(); -}); - -describe('Seconds ago', () => { - it('should render successfully', () => { - const dateInString = new Date().toString(); - render(); - - expect(screen.getByTestId('test-seconds-ago')).toBeInTheDocument(); - }); - - it('should show the correct amount of seconds ago', () => { - const secondsToWait = 10; - const dateInString = new Date().toString(); - - act(() => { - jest.advanceTimersByTime(secondsToWait * 1000); - }); - - jest.runOnlyPendingTimers(); - - render(); - - expect(screen.getByTestId('test-seconds-ago')).toHaveTextContent( - `${secondsToWait} seconds ago` - ); - }); -}); diff --git a/apps/explorer/src/app/components/time-ago/index.tsx b/apps/explorer/src/app/components/time-ago/index.tsx new file mode 100644 index 000000000..e1b4ce672 --- /dev/null +++ b/apps/explorer/src/app/components/time-ago/index.tsx @@ -0,0 +1,26 @@ +import { formatDistanceToNowStrict } from 'date-fns'; +import { t } from '@vegaprotocol/react-helpers'; +import { useEffect, useState } from 'react'; + +interface TimeAgoProps { + date: string; +} + +export const TimeAgo = ({ date, ...props }: TimeAgoProps) => { + const [distanceToNow, setDistanceToNow] = useState( + formatDistanceToNowStrict(new Date(date)) + ); + + useEffect(() => { + const int = setInterval(() => { + date && setDistanceToNow(formatDistanceToNowStrict(new Date(date))); + }, 500); + return () => clearInterval(int); + }, [setDistanceToNow, date]); + + if (!date) { + return <>{t('Date unknown')}; + } + + return {t(`${distanceToNow} ago`)}; +}; diff --git a/apps/explorer/src/app/components/time-ago/time-ago.spec.tsx b/apps/explorer/src/app/components/time-ago/time-ago.spec.tsx new file mode 100644 index 000000000..2055525f5 --- /dev/null +++ b/apps/explorer/src/app/components/time-ago/time-ago.spec.tsx @@ -0,0 +1,45 @@ +import { render, screen, act } from '@testing-library/react'; +import { TimeAgo } from './index'; + +beforeEach(() => { + jest.useFakeTimers(); + jest.setSystemTime(0); +}); + +afterEach(() => { + jest.useRealTimers(); +}); + +describe('Time ago', () => { + it('should render successfully', () => { + const dateString = new Date().toString(); + render(); + + expect(screen.getByTestId('date')).toBeInTheDocument(); + }); + + it('should show the correct amount of time ago', () => { + const secondsToWait = 10; + const date = new Date(-(secondsToWait * 1000)).toString(); + + render(); + + expect(screen.getByTestId('test-time-ago')).toHaveTextContent( + `${secondsToWait} seconds ago` + ); + }); + + it('should show the correct amount of time ago after time has advanced', () => { + const date = new Date().toString(); + + render(); + + act(() => { + jest.advanceTimersByTime(30000); + }); + + expect(screen.getByTestId('test-time-elapsed')).toHaveTextContent( + `30 seconds ago` + ); + }); +}); diff --git a/apps/explorer/src/app/routes/blocks/id/block.spec.tsx b/apps/explorer/src/app/routes/blocks/id/block.spec.tsx index c3cf88cbb..140ab9102 100644 --- a/apps/explorer/src/app/routes/blocks/id/block.spec.tsx +++ b/apps/explorer/src/app/routes/blocks/id/block.spec.tsx @@ -174,7 +174,7 @@ describe('Block', () => { ); expect(proposer).toHaveAttribute('href', `/${RouteNames.VALIDATORS}`); expect(screen.getByTestId('block-time')).toHaveTextContent( - '3528 seconds ago' + '59 minutes ago' ); }); diff --git a/apps/explorer/src/app/routes/blocks/id/block.tsx b/apps/explorer/src/app/routes/blocks/id/block.tsx index f0b2244f4..0ee4535eb 100644 --- a/apps/explorer/src/app/routes/blocks/id/block.tsx +++ b/apps/explorer/src/app/routes/blocks/id/block.tsx @@ -1,9 +1,10 @@ import React from 'react'; import { Link, useParams } from 'react-router-dom'; import { DATA_SOURCES } from '../../../config'; +import { getDateTimeFormat } from '@vegaprotocol/react-helpers'; import type { TendermintBlocksResponse } from '../tendermint-blocks-response'; import { RouteTitle } from '../../../components/route-title'; -import { SecondsAgo } from '../../../components/seconds-ago'; +import { TimeAgo } from '../../../components/time-ago'; import { TableWithTbody, TableRow, @@ -53,30 +54,38 @@ const Block = () => {
- - - Mined by - - - - - - Time - - - - - - {blockData && blockData.result.block.data.txs.length > 0 ? ( - - ) : null} + {blockData && ( + <> + + + Mined by + + + + + + Time + + {' '} + -{' '} + {getDateTimeFormat().format( + new Date(blockData.result.block.header.time) + )} + + + + {blockData.result.block.data.txs.length > 0 ? ( + + ) : null} + + )}
From 4fd6630ca55d44ba864860dda69f9a15c4e19994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szpiech?= Date: Thu, 28 Jul 2022 16:24:11 +0200 Subject: [PATCH 25/61] test: maybe passing true as string would work (#895) * test: maybe passing true as string would work * test: lets just create copy of nightly run but with manual trigger Co-authored-by: Rado --- .../capsule-cypress-nightly copy.yml | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 .github/workflows/capsule-cypress-nightly copy.yml diff --git a/.github/workflows/capsule-cypress-nightly copy.yml b/.github/workflows/capsule-cypress-nightly copy.yml new file mode 100644 index 000000000..3ec046ba0 --- /dev/null +++ b/.github/workflows/capsule-cypress-nightly copy.yml @@ -0,0 +1,133 @@ +name: Capsule tests -- nightly test copy + +# This workflow runs the frontend tests against latest develop of the core to preempt breaking changes + +on: workflow_dispatch + +jobs: + nightly: + name: Run capsule tests -- nightly + runs-on: ubuntu-latest + env: + GO111MODULE: 'on' + steps: + ####### + ## Setup langs + ####### + - name: Set up Go + uses: actions/setup-go@v3 + id: go + with: + go-version: 1.18 + - name: Set up Node 16 + uses: actions/setup-node@v2 + id: npm + with: + node-version: 16 + + ####### + ## Checkout capsule + ####### + + # Checkout capsule to build local network + - name: Checkout capsule + uses: actions/checkout@v2 + with: + repository: vegaprotocol/vegacapsule + ref: v0.2.1 + token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} + path: './capsule' + + ####### + ## Build binaries + ####### + - name: Build capsule + run: go install + working-directory: capsule + + - name: Set GOBIN + run: echo GOBIN=$(go env GOPATH)/bin >> $GITHUB_ENV + + - name: Install binaries + run: vegacapsule install-bins + env: + GITHUB_TOKEN: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} + GOBIN: ${{ env.GOBIN }} + + - name: Checkout Vega + uses: actions/checkout@v2 + with: + repository: vegaprotocol/vega + ref: tm35.9 + token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} + path: './vega' + + - name: Install binary from Vega repo + run: go install ./cmd/vega + working-directory: vega + + ###### + ## Start capsule + ###### + - name: Login to docker + run: echo -n ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} | docker login https://ghcr.io -u vega-ci-bot --password-stdin + + - name: Start nomad + run: vegacapsule nomad & + + - name: Bootstrap network + run: vegacapsule network bootstrap --config-path=./net_confs/config.hcl --force + working-directory: capsule + + ###### + ## Setup a Vega wallet for our user + ###### + - name: Create passphrase + run: echo "${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }}" > ./passphrase + - name: Create recovery + run: echo "${{ secrets.TRADING_TEST_VEGA_WALLET_RECOVERY }}" > ./recovery + + - name: Initialize wallet + run: vegawallet init -f --home ~/.vegacapsule/testnet/wallet + - name: Import wallet + run: vegawallet import -w UI_Trading_Test --recovery-phrase-file ./recovery -p ./passphrase --home ~/.vegacapsule/testnet/wallet + - name: Create public key 2 + run: vegawallet key generate -w UI_Trading_Test -p ./passphrase --home ~/.vegacapsule/testnet/wallet + - name: Start service + run: vegawallet service run --network DV --automatic-consent --home ~/.vegacapsule/testnet/wallet & + + ###### + ## Run some tests + ###### + + # Checkout front ends + - name: Checkout frontend mono repo + uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 0 + + - name: Install root dependencies + run: yarn install + + - name: Run Cypress tests + run: yarn nx run-many --target=e2e --all --record --key ${{ secrets.CYPRESS_RECORD_KEY }} --browser chrome + env: + CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE: ${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }} + CYPRESS_SLACK_WEBHOOK: ${{ secrets.CYPRESS_SLACK_WEBHOOK }} + CYPRESS_ETH_WALLET_MNEMONIC: ${{ secrets.CYPESS_ETH_WALLET_MNEMONIC }} + CYPRESS_NIGHTLY_RUN: true + CYPRESS_INCLUDE_FLOWS: 'true' + + ###### + ## Upload logs + ###### + + - name: Logs + if: ${{ always() }} + run: vegacapsule network logs > vega-capsule-logs.txt + + - uses: actions/upload-artifact@v2 + with: + name: logs + path: ./vega-capsule-logs.txt From 48d69ed0cc84d51f30f5dd814526e4b04c60a789 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Thu, 28 Jul 2022 18:05:02 +0000 Subject: [PATCH 26/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 79 +++++++++++++------ apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 59 insertions(+), 26 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 7794f2bd5..5931c2e3d 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117306.890197558673138415", + "locked_amount": "117247.7623472158904082", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58289.333275604951219016", + "locked_amount": "58231.334362427074364694", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79671.45535417659000498633432", + "locked_amount": "79592.18085295709165312324964", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24521.315906102882816046", + "locked_amount": "24496.916764916610376062", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "7981.450378219294572622", + "locked_amount": "7973.508694526825076614", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11677.46971240941975", + "locked_amount": "11646.99105525362475", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1639615.520616328731621184", + "locked_amount": "1638290.801004985887556394", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "9917.8194320247151592461024147252", + "locked_amount": "9878.8877957278442596887859964622", "deposits": [ { "amount": "2833.333333", @@ -3374,7 +3374,7 @@ "tranche_start": "2021-07-15T23:37:11.000Z", "tranche_end": "2021-07-15T23:37:11.000Z", "total_added": "4630969.150000000000000001", - "total_removed": "4618402.640000000000000001", + "total_removed": "4628402.640000000000000001", "locked_amount": "0", "deposits": [ { @@ -3854,6 +3854,11 @@ "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", "tx": "0x5445fefd6548404e650f9c5065b5462548ed5ed206cd0f2782d4f72a1b23a56d" }, + { + "amount": "10000", + "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", + "tx": "0x4c2a70e8bc8f56171e4666d65fafca445006ee53e9593777d6fe297579217713" + }, { "amount": "114000", "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", @@ -4392,6 +4397,12 @@ "tranche_id": 10, "tx": "0x5445fefd6548404e650f9c5065b5462548ed5ed206cd0f2782d4f72a1b23a56d" }, + { + "amount": "10000", + "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", + "tranche_id": 10, + "tx": "0x4c2a70e8bc8f56171e4666d65fafca445006ee53e9593777d6fe297579217713" + }, { "amount": "114000", "user": "0xb2d6DEC77558Cf8EdB7c428d23E70Eab0688544f", @@ -4496,8 +4507,8 @@ } ], "total_tokens": "1471651", - "withdrawn_tokens": "1461651", - "remaining_tokens": "10000" + "withdrawn_tokens": "1471651", + "remaining_tokens": "0" }, { "address": "0x3e3B3C3027cbBDa4D5F2bE6c8eBc8D856FBaD044", @@ -5525,7 +5536,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8291.95420530622", - "locked_amount": "2500.70894628361116910029996508751902573", + "locked_amount": "2483.63035832065021620029791647640791486", "deposits": [ { "amount": "2", @@ -16464,7 +16475,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2544019.52642320912074939111", + "locked_amount": "2541983.89359895773171288", "deposits": [ { "amount": "1998.95815", @@ -17220,8 +17231,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", - "total_removed": "69123.834585739765555", - "locked_amount": "14247300.6839382337539872671390491015233847", + "total_removed": "69518.332787828712505", + "locked_amount": "14240119.415547180133296123703586879981076", "deposits": [ { "amount": "16249.93", @@ -17735,6 +17746,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0x36922428802b59ffa5372882e41946441a94a2adeeb9d85a8b701880d50e7a5e" }, + { + "amount": "394.49820208894695", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0xe41aea73669c53b7a3687a3ee635cff1926833a692679899e01e837d69223351" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -18014,6 +18030,12 @@ "tranche_id": 2, "tx": "0x36922428802b59ffa5372882e41946441a94a2adeeb9d85a8b701880d50e7a5e" }, + { + "amount": "394.49820208894695", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 2, + "tx": "0xe41aea73669c53b7a3687a3ee635cff1926833a692679899e01e837d69223351" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -18238,8 +18260,8 @@ } ], "total_tokens": "194999.1675", - "withdrawn_tokens": "18704.981476526617875", - "remaining_tokens": "176294.186023473382125" + "withdrawn_tokens": "19099.479678615564825", + "remaining_tokens": "175899.687821384435175" }, { "address": "0x89051CAb67Bc7F8CC44F7e270c6EDaf1EC57676c", @@ -19685,8 +19707,8 @@ "tranche_start": "2021-11-05T00:00:00.000Z", "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", - "total_removed": "2422756.585128064230582297", - "locked_amount": "7499257.39755286423985995971871326", + "total_removed": "2423484.539752785628848047", + "locked_amount": "7492593.57989601138614493861624468", "deposits": [ { "amount": "129284.449", @@ -19910,6 +19932,11 @@ "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", "tx": "0x9531a4b8f6db038e5a1889be447cd1573c12c0c9e203038984dcc45de810ea6b" }, + { + "amount": "727.95462472139826575", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tx": "0x8ae703a4a5f720f8f0e5e7f10e90b35ab67c3eef6448346c1e4526a9f8fe52ac" + }, { "amount": "600.79246609513746875", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -21754,6 +21781,12 @@ "tranche_id": 3, "tx": "0x9531a4b8f6db038e5a1889be447cd1573c12c0c9e203038984dcc45de810ea6b" }, + { + "amount": "727.95462472139826575", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tranche_id": 3, + "tx": "0x8ae703a4a5f720f8f0e5e7f10e90b35ab67c3eef6448346c1e4526a9f8fe52ac" + }, { "amount": "600.79246609513746875", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -23220,8 +23253,8 @@ } ], "total_tokens": "359123.469575", - "withdrawn_tokens": "174013.608179485687886", - "remaining_tokens": "185109.861395514312114" + "withdrawn_tokens": "174741.56280420708615175", + "remaining_tokens": "184381.90677079291384825" }, { "address": "0xBdd412797c1B78535Afc5F71503b91fAbD0160fB", @@ -24285,7 +24318,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2646098.54936408314698794426183364", + "locked_amount": "2643465.63470542621591081685477035", "deposits": [ { "amount": "552496.6455", @@ -25529,7 +25562,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "739.13362915466", - "locked_amount": "403114.4361973442647171619837646", + "locked_amount": "402791.87854016837230422413191272", "deposits": [ { "amount": "3000", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index 56cb2d058..6895b13c7 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.170119863013703", + "locked_amount": "33.10182014205987", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "227.633273084728555", + "locked_amount": "226.88197615423637", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index ecc4c6093..b5bdc3374 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "209.00876458650434070020693937087772707", + "locked_amount": "208.3189053779806670002062563419583967", "deposits": [ { "amount": "1000", From 855934d639e6614ea00d6068bfac9d790c85c7e8 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Fri, 29 Jul 2022 00:09:24 +0000 Subject: [PATCH 27/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 28 +++++++++---------- apps/static/src/assets/stagnet1-tranches.json | 4 +-- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 5931c2e3d..5141b345a 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117247.7623472158904082", + "locked_amount": "117187.739410770852439875", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58231.334362427074364694", + "locked_amount": "58172.457453163953535314", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79592.18085295709165312324964", + "locked_amount": "79511.70628266872222435619564", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24496.916764916610376062", + "locked_amount": "24472.148265939455004562", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "7973.508694526825076614", + "locked_amount": "7965.446788457584094591", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11646.99105525362475", + "locked_amount": "11616.05100769927425", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1638290.801004985887556394", + "locked_amount": "1636946.027593165455881572", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "9878.8877957278442596887859964622", + "locked_amount": "9839.3668065898824855230096506779", "deposits": [ { "amount": "2833.333333", @@ -5536,7 +5536,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8291.95420530622", - "locked_amount": "2483.63035832065021620029791647640791486", + "locked_amount": "2466.29323217909714520029583685312024356", "deposits": [ { "amount": "2", @@ -16475,7 +16475,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2541983.89359895773171288", + "locked_amount": "2539917.44506536369457971392", "deposits": [ { "amount": "1998.95815", @@ -17232,7 +17232,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "69518.332787828712505", - "locked_amount": "14240119.415547180133296123703586879981076", + "locked_amount": "14232829.4360581222279335373143697131319275", "deposits": [ { "amount": "16249.93", @@ -19708,7 +19708,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2423484.539752785628848047", - "locked_amount": "7492593.57989601138614493861624468", + "locked_amount": "7485828.88438653970053186834008049", "deposits": [ { "amount": "129284.449", @@ -24318,7 +24318,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2643465.63470542621591081685477035", + "locked_amount": "2640792.86259709639157333751128172", "deposits": [ { "amount": "552496.6455", @@ -25562,7 +25562,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "739.13362915466", - "locked_amount": "402791.87854016837230422413191272", + "locked_amount": "402464.43795769690082560523693556", "deposits": [ { "amount": "3000", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index 6895b13c7..fb0512df5 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.10182014205987", + "locked_amount": "33.03249936580416", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "226.88197615423637", + "locked_amount": "226.119447615423681", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index b5bdc3374..ff795da74 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "208.3189053779806670002062563419583967", + "locked_amount": "207.61876553779810710020556313419583971", "deposits": [ { "amount": "1000", From cc6e62cff59d2b046c5159ef52129811627515fe Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Fri, 29 Jul 2022 06:05:29 +0000 Subject: [PATCH 28/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 28 +++++++++---------- apps/static/src/assets/stagnet1-tranches.json | 4 +-- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index 5141b345a..a7792b60a 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117187.739410770852439875", + "locked_amount": "117129.078323119417122225", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58172.457453163953535314", + "locked_amount": "58114.916390705383163352", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79511.70628266872222435619564", + "locked_amount": "79433.05758433788097846573464", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24472.148265939455004562", + "locked_amount": "24447.941734644131094828", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "7965.446788457584094591", + "locked_amount": "7957.567797415578243642", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11616.05100769927425", + "locked_amount": "11585.81295289855125", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1636946.027593165455881572", + "locked_amount": "1635631.765485139572493356", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "9839.3668065898824855230096506779", + "locked_amount": "9800.742501529157790280943326845", "deposits": [ { "amount": "2833.333333", @@ -5536,7 +5536,7 @@ "tranche_end": "2022-09-03T00:00:00.000Z", "total_added": "25010.000000000000000003", "total_removed": "8291.95420530622", - "locked_amount": "2466.29323217909714520029583685312024356", + "locked_amount": "2449.34867167681489440029380431887366832", "deposits": [ { "amount": "2", @@ -16475,7 +16475,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2539917.44506536369457971392", + "locked_amount": "2537897.78725607828986058413", "deposits": [ { "amount": "1998.95815", @@ -17232,7 +17232,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", "total_removed": "69518.332787828712505", - "locked_amount": "14232829.4360581222279335373143697131319275", + "locked_amount": "14225704.5240338243350994324664534809664774", "deposits": [ { "amount": "16249.93", @@ -19708,7 +19708,7 @@ "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", "total_removed": "2423484.539752785628848047", - "locked_amount": "7485828.88438653970053186834008049", + "locked_amount": "7479217.362303589914667904759892", "deposits": [ { "amount": "129284.449", @@ -24318,7 +24318,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2640792.86259709639157333751128172", + "locked_amount": "2638180.610235969728781112041351225", "deposits": [ { "amount": "552496.6455", @@ -25562,7 +25562,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "739.13362915466", - "locked_amount": "402464.43795769690082560523693556", + "locked_amount": "402144.41163295941762498580314564", "deposits": [ { "amount": "3000", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index fb0512df5..cbd650c43 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "33.03249936580416", + "locked_amount": "32.964760908168445", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "226.119447615423681", + "locked_amount": "225.374324581430717", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index ff795da74..7d09e5764 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "207.61876553779810710020556313419583971", + "locked_amount": "206.93460711567729470020488574961948247", "deposits": [ { "amount": "1000", From 3c8a0b182f25be55d9feb60584409384285c3a2b Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Fri, 29 Jul 2022 10:08:02 +0100 Subject: [PATCH 29/61] Fix/900: Validator list - pending stake formatted as per current stake (#901) --- apps/token/src/routes/staking/node-list.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/token/src/routes/staking/node-list.tsx b/apps/token/src/routes/staking/node-list.tsx index 2c628bf37..67b1dba1a 100644 --- a/apps/token/src/routes/staking/node-list.tsx +++ b/apps/token/src/routes/staking/node-list.tsx @@ -143,7 +143,7 @@ export const NodeList = ({ epoch }: NodeListProps) => { [TOTAL_STAKE_THIS_EPOCH]: formatNumber(stakedTotal, 2), [SHARE]: stakedTotalPercentage, [VALIDATOR_STAKE]: formatNumber(stakedOnNode, 2), - [PENDING_STAKE]: pendingStake, + [PENDING_STAKE]: formatNumber(pendingStake, 2), [RANKING_SCORE]: formatNumber(new BigNumber(rankingScore), 5), [STAKE_SCORE]: formatNumber(new BigNumber(stakeScore), 5), [PERFORMANCE_SCORE]: formatNumber(new BigNumber(performanceScore), 5), From 394c38c601e2f33b1462d36be40d2b5db37d9dd4 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Fri, 29 Jul 2022 11:01:11 +0100 Subject: [PATCH 30/61] Feat/633: Oracles MVP in block explorer (#871) * frontend-monorepo-633: Oracles in block explorer - initial oracles page and router setup * frontend-monorepo-633: Oracles in block explorer - added generated types file * Feat/633: Cleanup for MVP1 * Feat/633: Cleanup of route name --- apps/explorer-e2e/.env | 1 + apps/explorer-e2e/.env.devnet | 1 + apps/explorer-e2e/.env.stagnet1 | 1 + apps/explorer-e2e/.env.stagnet2 | 1 + apps/explorer-e2e/.env.testnet | 1 + apps/explorer/.env | 1 + apps/explorer/.env.capsule | 1 + apps/explorer/README.md | 1 + apps/explorer/src/app/config/env.ts | 1 + .../oracles/__generated__/OracleSpecs.ts | 97 +++++++++++++++++++ .../explorer/src/app/routes/oracles/index.tsx | 53 ++++++++++ apps/explorer/src/app/routes/route-names.tsx | 1 + .../explorer/src/app/routes/router-config.tsx | 13 +++ libs/types/src/__generated__/globalTypes.ts | 32 ++++++ 14 files changed, 205 insertions(+) create mode 100644 apps/explorer/src/app/routes/oracles/__generated__/OracleSpecs.ts create mode 100644 apps/explorer/src/app/routes/oracles/index.tsx diff --git a/apps/explorer-e2e/.env b/apps/explorer-e2e/.env index 5577c7a3e..cda5965c4 100644 --- a/apps/explorer-e2e/.env +++ b/apps/explorer-e2e/.env @@ -12,6 +12,7 @@ NX_EXPLORER_ASSETS=1 NX_EXPLORER_GENESIS=1 NX_EXPLORER_GOVERNANCE=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=0 NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 diff --git a/apps/explorer-e2e/.env.devnet b/apps/explorer-e2e/.env.devnet index 3065f3c3a..0956ee9f3 100644 --- a/apps/explorer-e2e/.env.devnet +++ b/apps/explorer-e2e/.env.devnet @@ -11,6 +11,7 @@ NX_EXPLORER_ASSETS=1 NX_EXPLORER_GENESIS=1 NX_EXPLORER_GOVERNANCE=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=1 NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 diff --git a/apps/explorer-e2e/.env.stagnet1 b/apps/explorer-e2e/.env.stagnet1 index 1d833d3c9..19d6fd050 100644 --- a/apps/explorer-e2e/.env.stagnet1 +++ b/apps/explorer-e2e/.env.stagnet1 @@ -11,6 +11,7 @@ NX_EXPLORER_ASSETS=1 NX_EXPLORER_GENESIS=1 NX_EXPLORER_GOVERNANCE=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=1 NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 diff --git a/apps/explorer-e2e/.env.stagnet2 b/apps/explorer-e2e/.env.stagnet2 index 4352d0666..c55daeed5 100644 --- a/apps/explorer-e2e/.env.stagnet2 +++ b/apps/explorer-e2e/.env.stagnet2 @@ -11,6 +11,7 @@ NX_EXPLORER_ASSETS=1 NX_EXPLORER_GENESIS=1 NX_EXPLORER_GOVERNANCE=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=1 NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 diff --git a/apps/explorer-e2e/.env.testnet b/apps/explorer-e2e/.env.testnet index add164e7a..3b5c6f537 100644 --- a/apps/explorer-e2e/.env.testnet +++ b/apps/explorer-e2e/.env.testnet @@ -11,6 +11,7 @@ NX_EXPLORER_ASSETS=1 NX_EXPLORER_GENESIS=1 NX_EXPLORER_GOVERNANCE=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=1 NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 diff --git a/apps/explorer/.env b/apps/explorer/.env index b6b59b054..844001e0f 100644 --- a/apps/explorer/.env +++ b/apps/explorer/.env @@ -23,4 +23,5 @@ NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 NX_EXPLORER_VALIDATORS=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=1 diff --git a/apps/explorer/.env.capsule b/apps/explorer/.env.capsule index e603825a6..302407622 100644 --- a/apps/explorer/.env.capsule +++ b/apps/explorer/.env.capsule @@ -13,6 +13,7 @@ NX_EXPLORER_ASSETS=1 NX_EXPLORER_GENESIS=1 NX_EXPLORER_GOVERNANCE=1 NX_EXPLORER_MARKETS=1 +NX_EXPLORER_ORACLES=1 NX_EXPLORER_TXS_LIST=1 NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 diff --git a/apps/explorer/README.md b/apps/explorer/README.md index 0a8e8cc7c..f16ef2536 100644 --- a/apps/explorer/README.md +++ b/apps/explorer/README.md @@ -58,6 +58,7 @@ There are a few different configuration options offered for this app: | `NX_EXPLORER_GENESIS` | Enable the genesis page for the explorer | | `NX_EXPLORER_GOVERNANCE` | Enable the governance page for the explorer | | `NX_EXPLORER_MARKETS` | Enable the markets page for the explorer | +| `NX_EXPLORER_ORACLES` | Enable the oracles page for the explorer | | `NX_EXPLORER_TXS_LIST` | Enable the transactions list page for the explorer | | `NX_EXPLORER_NETWORK_PARAMETERS` | Enable the network parameters page for the explorer | | `NX_EXPLORER_PARTIES` | Enable the parties page for the explorer | diff --git a/apps/explorer/src/app/config/env.ts b/apps/explorer/src/app/config/env.ts index 6340d421f..c59d53168 100644 --- a/apps/explorer/src/app/config/env.ts +++ b/apps/explorer/src/app/config/env.ts @@ -24,6 +24,7 @@ export const ENV = { genesis: truthy.includes(windowOrDefault('NX_EXPLORER_GENESIS')), governance: truthy.includes(windowOrDefault('NX_EXPLORER_GOVERNANCE')), markets: truthy.includes(windowOrDefault('NX_EXPLORER_MARKETS')), + oracles: truthy.includes(windowOrDefault('NX_EXPLORER_ORACLES')), txsList: truthy.includes(windowOrDefault('NX_EXPLORER_TXS_LIST')), networkParameters: truthy.includes( windowOrDefault('NX_EXPLORER_NETWORK_PARAMETERS') diff --git a/apps/explorer/src/app/routes/oracles/__generated__/OracleSpecs.ts b/apps/explorer/src/app/routes/oracles/__generated__/OracleSpecs.ts new file mode 100644 index 000000000..676ebde9b --- /dev/null +++ b/apps/explorer/src/app/routes/oracles/__generated__/OracleSpecs.ts @@ -0,0 +1,97 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +import { OracleSpecStatus, PropertyKeyType, ConditionOperator } from "@vegaprotocol/types"; + +// ==================================================== +// GraphQL query operation: OracleSpecs +// ==================================================== + +export interface OracleSpecs_oracleSpecs_filters_key { + __typename: "PropertyKey"; + /** + * name is the name of the property. + */ + name: string | null; + /** + * type is the type of the property. + */ + type: PropertyKeyType; +} + +export interface OracleSpecs_oracleSpecs_filters_conditions { + __typename: "Condition"; + /** + * value is used by the comparator. + */ + value: string | null; + /** + * comparator is the type of comparison to make on the value. + */ + operator: ConditionOperator; +} + +export interface OracleSpecs_oracleSpecs_filters { + __typename: "Filter"; + /** + * key is the oracle data property key targeted by the filter. + */ + key: OracleSpecs_oracleSpecs_filters_key; + /** + * conditions are the conditions that should be matched by the data to be + * considered of interest. + */ + conditions: OracleSpecs_oracleSpecs_filters_conditions[] | null; +} + +export interface OracleSpecs_oracleSpecs_data { + __typename: "OracleData"; + /** + * pubKeys is the list of public keys that signed the data + */ + pubKeys: string[] | null; +} + +export interface OracleSpecs_oracleSpecs { + __typename: "OracleSpec"; + /** + * status describes the status of the oracle spec + */ + status: OracleSpecStatus; + /** + * id is a hash generated from the OracleSpec data. + */ + id: string; + /** + * RFC3339Nano creation date time + */ + createdAt: string; + /** + * RFC3339Nano last updated timestamp + */ + updatedAt: string | null; + /** + * pubKeys is the list of authorized public keys that signed the data for this + * oracle. All the public keys in the oracle data should be contained in these + * public keys. + */ + pubKeys: string[] | null; + /** + * filters describes which oracle data are considered of interest or not for + * the product (or the risk model). + */ + filters: OracleSpecs_oracleSpecs_filters[] | null; + /** + * data list all the oracle data broadcast to this spec + */ + data: OracleSpecs_oracleSpecs_data[]; +} + +export interface OracleSpecs { + /** + * All registered oracle specs + */ + oracleSpecs: OracleSpecs_oracleSpecs[] | null; +} diff --git a/apps/explorer/src/app/routes/oracles/index.tsx b/apps/explorer/src/app/routes/oracles/index.tsx new file mode 100644 index 000000000..a9a78ee0f --- /dev/null +++ b/apps/explorer/src/app/routes/oracles/index.tsx @@ -0,0 +1,53 @@ +import { gql, useQuery } from '@apollo/client'; +import type { OracleSpecs as OracleSpecsQuery } from './__generated__/OracleSpecs'; + +import React from 'react'; +import { SyntaxHighlighter } from '@vegaprotocol/ui-toolkit'; +import { RouteTitle } from '../../components/route-title'; +import { t } from '@vegaprotocol/react-helpers'; +import { SubHeading } from '../../components/sub-heading'; + +const ORACLE_SPECS_QUERY = gql` + query OracleSpecs { + oracleSpecs { + status + id + createdAt + updatedAt + pubKeys + filters { + key { + name + type + } + conditions { + value + operator + } + } + data { + pubKeys + } + } + } +`; + +const Oracles = () => { + const { data } = useQuery(ORACLE_SPECS_QUERY); + + return ( +
+ {t('Oracles')} + {data?.oracleSpecs + ? data.oracleSpecs.map((o) => ( + + {o.id} + + + )) + : null} +
+ ); +}; + +export default Oracles; diff --git a/apps/explorer/src/app/routes/route-names.tsx b/apps/explorer/src/app/routes/route-names.tsx index 0cf20aa2a..3abbc1572 100644 --- a/apps/explorer/src/app/routes/route-names.tsx +++ b/apps/explorer/src/app/routes/route-names.tsx @@ -8,5 +8,6 @@ export const Routes = { GENESIS: 'genesis', GOVERNANCE: 'governance', MARKETS: 'markets', + ORACLES: 'oracles', NETWORK_PARAMETERS: 'network-parameters', }; diff --git a/apps/explorer/src/app/routes/router-config.tsx b/apps/explorer/src/app/routes/router-config.tsx index 5dd0d3ac3..b8602ff31 100644 --- a/apps/explorer/src/app/routes/router-config.tsx +++ b/apps/explorer/src/app/routes/router-config.tsx @@ -3,6 +3,7 @@ import BlockPage from './blocks'; import Governance from './governance'; import Home from './home'; import Markets from './markets'; +import Oracles from './oracles'; import Party from './parties'; import { Parties } from './parties/home'; import { Party as PartySingle } from './parties/id'; @@ -84,6 +85,17 @@ const marketsRoutes = flags.markets ] : []; +const oraclesRoutes = flags.oracles + ? [ + { + path: Routes.ORACLES, + name: 'Oracles', + text: t('Oracles'), + element: , + }, + ] + : []; + const networkParametersRoutes = flags.networkParameters ? [ { @@ -154,6 +166,7 @@ const routerConfig = [ ...genesisRoutes, ...governanceRoutes, ...marketsRoutes, + ...oraclesRoutes, ...networkParametersRoutes, ...validators, ]; diff --git a/libs/types/src/__generated__/globalTypes.ts b/libs/types/src/__generated__/globalTypes.ts index aaf291df8..edf55e031 100644 --- a/libs/types/src/__generated__/globalTypes.ts +++ b/libs/types/src/__generated__/globalTypes.ts @@ -67,6 +67,17 @@ export enum BusEventType { Withdrawal = "Withdrawal", } +/** + * Comparator describes the type of comparison. + */ +export enum ConditionOperator { + OperatorEquals = "OperatorEquals", + OperatorGreaterThan = "OperatorGreaterThan", + OperatorGreaterThanOrEqual = "OperatorGreaterThanOrEqual", + OperatorLessThan = "OperatorLessThan", + OperatorLessThanOrEqual = "OperatorLessThanOrEqual", +} + /** * The status of a deposit */ @@ -119,6 +130,14 @@ export enum NodeStatus { Validator = "Validator", } +/** + * Status describe the status of the oracle spec + */ +export enum OracleSpecStatus { + StatusActive = "StatusActive", + StatusUnused = "StatusUnused", +} + /** * Reason for the order being rejected by the core node */ @@ -202,6 +221,19 @@ export enum OrderType { Network = "Network", } +/** + * Type describes the type of properties that are supported by the oracle + * engine. + */ +export enum PropertyKeyType { + TypeBoolean = "TypeBoolean", + TypeDecimal = "TypeDecimal", + TypeEmpty = "TypeEmpty", + TypeInteger = "TypeInteger", + TypeString = "TypeString", + TypeTimestamp = "TypeTimestamp", +} + /** * Reason for the proposal being rejected by the core node */ From 5f29d0ccb32d6b411c1a10ae1324eea94cdf8b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szpiech?= Date: Fri, 29 Jul 2022 12:10:15 +0200 Subject: [PATCH 31/61] Remove nightly runs (#906) * test: maybe passing true as string would work * test: lets just create copy of nightly run but with manual trigger * test: change to boolean true * test: just remove old flows and create new ones - monkey would be better dev than me if it works * test: forgot to delete workflows: * test: yeah remove all of workflows because github does not differentiate removing from renaming Co-authored-by: Rado --- .../capsule-cypress-nightly copy.yml | 133 ----------------- .github/workflows/capsule-cypress-nightly.yml | 135 ------------------ 2 files changed, 268 deletions(-) delete mode 100644 .github/workflows/capsule-cypress-nightly copy.yml delete mode 100644 .github/workflows/capsule-cypress-nightly.yml diff --git a/.github/workflows/capsule-cypress-nightly copy.yml b/.github/workflows/capsule-cypress-nightly copy.yml deleted file mode 100644 index 3ec046ba0..000000000 --- a/.github/workflows/capsule-cypress-nightly copy.yml +++ /dev/null @@ -1,133 +0,0 @@ -name: Capsule tests -- nightly test copy - -# This workflow runs the frontend tests against latest develop of the core to preempt breaking changes - -on: workflow_dispatch - -jobs: - nightly: - name: Run capsule tests -- nightly - runs-on: ubuntu-latest - env: - GO111MODULE: 'on' - steps: - ####### - ## Setup langs - ####### - - name: Set up Go - uses: actions/setup-go@v3 - id: go - with: - go-version: 1.18 - - name: Set up Node 16 - uses: actions/setup-node@v2 - id: npm - with: - node-version: 16 - - ####### - ## Checkout capsule - ####### - - # Checkout capsule to build local network - - name: Checkout capsule - uses: actions/checkout@v2 - with: - repository: vegaprotocol/vegacapsule - ref: v0.2.1 - token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} - path: './capsule' - - ####### - ## Build binaries - ####### - - name: Build capsule - run: go install - working-directory: capsule - - - name: Set GOBIN - run: echo GOBIN=$(go env GOPATH)/bin >> $GITHUB_ENV - - - name: Install binaries - run: vegacapsule install-bins - env: - GITHUB_TOKEN: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} - GOBIN: ${{ env.GOBIN }} - - - name: Checkout Vega - uses: actions/checkout@v2 - with: - repository: vegaprotocol/vega - ref: tm35.9 - token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} - path: './vega' - - - name: Install binary from Vega repo - run: go install ./cmd/vega - working-directory: vega - - ###### - ## Start capsule - ###### - - name: Login to docker - run: echo -n ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} | docker login https://ghcr.io -u vega-ci-bot --password-stdin - - - name: Start nomad - run: vegacapsule nomad & - - - name: Bootstrap network - run: vegacapsule network bootstrap --config-path=./net_confs/config.hcl --force - working-directory: capsule - - ###### - ## Setup a Vega wallet for our user - ###### - - name: Create passphrase - run: echo "${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }}" > ./passphrase - - name: Create recovery - run: echo "${{ secrets.TRADING_TEST_VEGA_WALLET_RECOVERY }}" > ./recovery - - - name: Initialize wallet - run: vegawallet init -f --home ~/.vegacapsule/testnet/wallet - - name: Import wallet - run: vegawallet import -w UI_Trading_Test --recovery-phrase-file ./recovery -p ./passphrase --home ~/.vegacapsule/testnet/wallet - - name: Create public key 2 - run: vegawallet key generate -w UI_Trading_Test -p ./passphrase --home ~/.vegacapsule/testnet/wallet - - name: Start service - run: vegawallet service run --network DV --automatic-consent --home ~/.vegacapsule/testnet/wallet & - - ###### - ## Run some tests - ###### - - # Checkout front ends - - name: Checkout frontend mono repo - uses: actions/checkout@v2 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: 0 - - - name: Install root dependencies - run: yarn install - - - name: Run Cypress tests - run: yarn nx run-many --target=e2e --all --record --key ${{ secrets.CYPRESS_RECORD_KEY }} --browser chrome - env: - CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE: ${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }} - CYPRESS_SLACK_WEBHOOK: ${{ secrets.CYPRESS_SLACK_WEBHOOK }} - CYPRESS_ETH_WALLET_MNEMONIC: ${{ secrets.CYPESS_ETH_WALLET_MNEMONIC }} - CYPRESS_NIGHTLY_RUN: true - CYPRESS_INCLUDE_FLOWS: 'true' - - ###### - ## Upload logs - ###### - - - name: Logs - if: ${{ always() }} - run: vegacapsule network logs > vega-capsule-logs.txt - - - uses: actions/upload-artifact@v2 - with: - name: logs - path: ./vega-capsule-logs.txt diff --git a/.github/workflows/capsule-cypress-nightly.yml b/.github/workflows/capsule-cypress-nightly.yml deleted file mode 100644 index c13468c35..000000000 --- a/.github/workflows/capsule-cypress-nightly.yml +++ /dev/null @@ -1,135 +0,0 @@ -name: Capsule tests -- nightly - -# This workflow runs the frontend tests against latest develop of the core to preempt breaking changes - -on: - schedule: - - cron: '0 4 * * *' - -jobs: - nightly: - name: Run capsule tests -- nightly - runs-on: ubuntu-latest - env: - GO111MODULE: 'on' - steps: - ####### - ## Setup langs - ####### - - name: Set up Go - uses: actions/setup-go@v3 - id: go - with: - go-version: 1.18 - - name: Set up Node 16 - uses: actions/setup-node@v2 - id: npm - with: - node-version: 16 - - ####### - ## Checkout capsule - ####### - - # Checkout capsule to build local network - - name: Checkout capsule - uses: actions/checkout@v2 - with: - repository: vegaprotocol/vegacapsule - ref: v0.2.1 - token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} - path: './capsule' - - ####### - ## Build binaries - ####### - - name: Build capsule - run: go install - working-directory: capsule - - - name: Set GOBIN - run: echo GOBIN=$(go env GOPATH)/bin >> $GITHUB_ENV - - - name: Install binaries - run: vegacapsule install-bins - env: - GITHUB_TOKEN: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} - GOBIN: ${{ env.GOBIN }} - - - name: Checkout Vega - uses: actions/checkout@v2 - with: - repository: vegaprotocol/vega - ref: tm35.9 - token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} - path: './vega' - - - name: Install binary from Vega repo - run: go install ./cmd/vega - working-directory: vega - - ###### - ## Start capsule - ###### - - name: Login to docker - run: echo -n ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} | docker login https://ghcr.io -u vega-ci-bot --password-stdin - - - name: Start nomad - run: vegacapsule nomad & - - - name: Bootstrap network - run: vegacapsule network bootstrap --config-path=./net_confs/config.hcl --force - working-directory: capsule - - ###### - ## Setup a Vega wallet for our user - ###### - - name: Create passphrase - run: echo "${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }}" > ./passphrase - - name: Create recovery - run: echo "${{ secrets.TRADING_TEST_VEGA_WALLET_RECOVERY }}" > ./recovery - - - name: Initialize wallet - run: vegawallet init -f --home ~/.vegacapsule/testnet/wallet - - name: Import wallet - run: vegawallet import -w UI_Trading_Test --recovery-phrase-file ./recovery -p ./passphrase --home ~/.vegacapsule/testnet/wallet - - name: Create public key 2 - run: vegawallet key generate -w UI_Trading_Test -p ./passphrase --home ~/.vegacapsule/testnet/wallet - - name: Start service - run: vegawallet service run --network DV --automatic-consent --home ~/.vegacapsule/testnet/wallet & - - ###### - ## Run some tests - ###### - - # Checkout front ends - - name: Checkout frontend mono repo - uses: actions/checkout@v2 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: 0 - - - name: Install root dependencies - run: yarn install - - - name: Run Cypress tests - run: yarn nx run-many --target=e2e --all --record --key ${{ secrets.CYPRESS_RECORD_KEY }} --browser chrome - env: - CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE: ${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }} - CYPRESS_SLACK_WEBHOOK: ${{ secrets.CYPRESS_SLACK_WEBHOOK }} - CYPRESS_ETH_WALLET_MNEMONIC: ${{ secrets.CYPESS_ETH_WALLET_MNEMONIC }} - CYPRESS_NIGHTLY_RUN: true - CYPRESS_INCLUDE_FLOWS: true - - ###### - ## Upload logs - ###### - - - name: Logs - if: ${{ always() }} - run: vegacapsule network logs > vega-capsule-logs.txt - - - uses: actions/upload-artifact@v2 - with: - name: logs - path: ./vega-capsule-logs.txt From e026fa62449bb193c48cdf353fb06f7061d1131b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Szpiech?= Date: Fri, 29 Jul 2022 13:00:34 +0200 Subject: [PATCH 32/61] test: add night runs again (#917) Co-authored-by: Rado --- .../workflows/capsule-cypress-night-run.yml | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 .github/workflows/capsule-cypress-night-run.yml diff --git a/.github/workflows/capsule-cypress-night-run.yml b/.github/workflows/capsule-cypress-night-run.yml new file mode 100644 index 000000000..b77e23636 --- /dev/null +++ b/.github/workflows/capsule-cypress-night-run.yml @@ -0,0 +1,135 @@ +name: Capsule tests -- night run + +# This workflow runs the frontend tests against latest develop of the core to preempt breaking changes + +on: + schedule: + - cron: '0 4 * * *' + +jobs: + nightly: + name: Run capsule tests -- nightly + runs-on: ubuntu-latest + env: + GO111MODULE: 'on' + steps: + ####### + ## Setup langs + ####### + - name: Set up Go + uses: actions/setup-go@v3 + id: go + with: + go-version: 1.18 + - name: Set up Node 16 + uses: actions/setup-node@v2 + id: npm + with: + node-version: 16 + + ####### + ## Checkout capsule + ####### + + # Checkout capsule to build local network + - name: Checkout capsule + uses: actions/checkout@v2 + with: + repository: vegaprotocol/vegacapsule + ref: v0.2.1 + token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} + path: './capsule' + + ####### + ## Build binaries + ####### + - name: Build capsule + run: go install + working-directory: capsule + + - name: Set GOBIN + run: echo GOBIN=$(go env GOPATH)/bin >> $GITHUB_ENV + + - name: Install binaries + run: vegacapsule install-bins + env: + GITHUB_TOKEN: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} + GOBIN: ${{ env.GOBIN }} + + - name: Checkout Vega + uses: actions/checkout@v2 + with: + repository: vegaprotocol/vega + ref: tm35.9 + token: ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} + path: './vega' + + - name: Install binary from Vega repo + run: go install ./cmd/vega + working-directory: vega + + ###### + ## Start capsule + ###### + - name: Login to docker + run: echo -n ${{ secrets.VEGA_CI_BOT_GITHUB_TOKEN }} | docker login https://ghcr.io -u vega-ci-bot --password-stdin + + - name: Start nomad + run: vegacapsule nomad & + + - name: Bootstrap network + run: vegacapsule network bootstrap --config-path=./net_confs/config.hcl --force + working-directory: capsule + + ###### + ## Setup a Vega wallet for our user + ###### + - name: Create passphrase + run: echo "${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }}" > ./passphrase + - name: Create recovery + run: echo "${{ secrets.TRADING_TEST_VEGA_WALLET_RECOVERY }}" > ./recovery + + - name: Initialize wallet + run: vegawallet init -f --home ~/.vegacapsule/testnet/wallet + - name: Import wallet + run: vegawallet import -w UI_Trading_Test --recovery-phrase-file ./recovery -p ./passphrase --home ~/.vegacapsule/testnet/wallet + - name: Create public key 2 + run: vegawallet key generate -w UI_Trading_Test -p ./passphrase --home ~/.vegacapsule/testnet/wallet + - name: Start service + run: vegawallet service run --network DV --automatic-consent --home ~/.vegacapsule/testnet/wallet & + + ###### + ## Run some tests + ###### + + # Checkout front ends + - name: Checkout frontend mono repo + uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 0 + + - name: Install root dependencies + run: yarn install + + - name: Run Cypress tests + run: yarn nx run-many --target=e2e --all --record --key ${{ secrets.CYPRESS_RECORD_KEY }} --browser chrome + env: + CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE: ${{ secrets.CYPRESS_TRADING_TEST_VEGA_WALLET_PASSPHRASE }} + CYPRESS_SLACK_WEBHOOK: ${{ secrets.CYPRESS_SLACK_WEBHOOK }} + CYPRESS_ETH_WALLET_MNEMONIC: ${{ secrets.CYPESS_ETH_WALLET_MNEMONIC }} + CYPRESS_NIGHTLY_RUN: true + CYPRESS_INCLUDE_FLOWS: true + + ###### + ## Upload logs + ###### + + - name: Logs + if: ${{ always() }} + run: vegacapsule network logs > vega-capsule-logs.txt + + - uses: actions/upload-artifact@v2 + with: + name: logs + path: ./vega-capsule-logs.txt From e1c532cc052bfef096962deb1a9b08db6288fd02 Mon Sep 17 00:00:00 2001 From: mattrussell36 Date: Fri, 29 Jul 2022 12:05:28 +0000 Subject: [PATCH 33/61] chore: update tranches Signed-off-by: github-actions[bot] --- apps/static/src/assets/mainnet-tranches.json | 162 ++++++++++++++---- apps/static/src/assets/stagnet1-tranches.json | 4 +- apps/static/src/assets/testnet-tranches.json | 2 +- 3 files changed, 134 insertions(+), 34 deletions(-) diff --git a/apps/static/src/assets/mainnet-tranches.json b/apps/static/src/assets/mainnet-tranches.json index a7792b60a..a6ed90266 100644 --- a/apps/static/src/assets/mainnet-tranches.json +++ b/apps/static/src/assets/mainnet-tranches.json @@ -71,7 +71,7 @@ "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "129999.45", "total_removed": "0", - "locked_amount": "117129.078323119417122225", + "locked_amount": "117069.77200468877888127", "deposits": [ { "amount": "129999.45", @@ -521,7 +521,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "97499.58", "total_removed": "0", - "locked_amount": "58114.916390705383163352", + "locked_amount": "58056.742416958364874576", "deposits": [ { "amount": "97499.58", @@ -554,7 +554,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "135173.4239508", "total_removed": "0", - "locked_amount": "79433.05758433788097846573464", + "locked_amount": "79353.54380554328558693152548", "deposits": [ { "amount": "135173.4239508", @@ -587,7 +587,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "32499.86", "total_removed": "0", - "locked_amount": "24447.941734644131094828", + "locked_amount": "24423.468948499555091806", "deposits": [ { "amount": "32499.86", @@ -620,7 +620,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "10833.29", "total_removed": "0", - "locked_amount": "7957.567797415578243642", + "locked_amount": "7949.602143003813091683", "deposits": [ { "amount": "10833.29", @@ -728,7 +728,7 @@ "tranche_end": "2022-11-01T00:00:00.000Z", "total_added": "22500", "total_removed": "0", - "locked_amount": "11585.81295289855125", + "locked_amount": "11555.2423007246385", "deposits": [ { "amount": "15000", @@ -814,7 +814,7 @@ "tranche_end": "2023-06-02T00:00:00.000Z", "total_added": "1939928.38", "total_removed": "179856.049568108351", - "locked_amount": "1635631.765485139572493356", + "locked_amount": "1634303.047416646257047384", "deposits": [ { "amount": "1852091.69", @@ -1889,7 +1889,7 @@ "tranche_end": "2022-09-30T00:00:00.000Z", "total_added": "60916.66666633337", "total_removed": "19238.601152747179372649", - "locked_amount": "9800.742501529157790280943326845", + "locked_amount": "9761.6933562302268144903450325719", "deposits": [ { "amount": "2833.333333", @@ -5534,9 +5534,9 @@ "tranche_id": 11, "tranche_start": "2021-09-03T00:00:00.000Z", "tranche_end": "2022-09-03T00:00:00.000Z", - "total_added": "25010.000000000000000003", + "total_added": "25022.000000000000000003", "total_removed": "8291.95420530622", - "locked_amount": "2449.34867167681489440029380431887366832", + "locked_amount": "2433.38632623034105642029174961948249633", "deposits": [ { "amount": "2", @@ -5593,6 +5593,11 @@ "user": "0x7cad86eC6007Ad16B0D50366Ffc5C5182636EB1d", "tx": "0x432102400ff0ac55b2028d5cac2e5d50155c469d03318f50beca8f704494b37a" }, + { + "amount": "12", + "user": "0xeeb7c600722630Dd0b7698a23236E8465c1d2D79", + "tx": "0xce7584fd21075fed120b7dc297a1c72ce213b4735246138f6bd0efbf5e8aa8f9" + }, { "amount": "25", "user": "0x2c51Dc5A225a9d8542FBf28BA9dC501f026CD5e8", @@ -9806,6 +9811,21 @@ "withdrawn_tokens": "0", "remaining_tokens": "2" }, + { + "address": "0xeeb7c600722630Dd0b7698a23236E8465c1d2D79", + "deposits": [ + { + "amount": "12", + "user": "0xeeb7c600722630Dd0b7698a23236E8465c1d2D79", + "tranche_id": 11, + "tx": "0xce7584fd21075fed120b7dc297a1c72ce213b4735246138f6bd0efbf5e8aa8f9" + } + ], + "withdrawals": [], + "total_tokens": "12", + "withdrawn_tokens": "0", + "remaining_tokens": "12" + }, { "address": "0x2c51Dc5A225a9d8542FBf28BA9dC501f026CD5e8", "deposits": [ @@ -16475,7 +16495,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "3732368.4671", "total_removed": "148381.2401909658774", - "locked_amount": "2537897.78725607828986058413", + "locked_amount": "2535856.10472201756452434549", "deposits": [ { "amount": "1998.95815", @@ -17231,8 +17251,8 @@ "tranche_start": "2022-06-05T00:00:00.000Z", "tranche_end": "2023-12-05T00:00:00.000Z", "total_added": "15788853.065470999700000001", - "total_removed": "69518.332787828712505", - "locked_amount": "14225704.5240338243350994324664534809664774", + "total_removed": "69790.47464583735853", + "locked_amount": "14218501.9135867224692406317188939377074886", "deposits": [ { "amount": "16249.93", @@ -17751,6 +17771,11 @@ "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", "tx": "0xe41aea73669c53b7a3687a3ee635cff1926833a692679899e01e837d69223351" }, + { + "amount": "272.141858008646025", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tx": "0xb06fd9b057c2b92266a06f4d02a291882bb263f10ff5b4d35874aa9a5143bb54" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -18036,6 +18061,12 @@ "tranche_id": 2, "tx": "0xe41aea73669c53b7a3687a3ee635cff1926833a692679899e01e837d69223351" }, + { + "amount": "272.141858008646025", + "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", + "tranche_id": 2, + "tx": "0xb06fd9b057c2b92266a06f4d02a291882bb263f10ff5b4d35874aa9a5143bb54" + }, { "amount": "325.1056930428465", "user": "0x20CD77B9FC2f1fEDfb6F184E25f7127BFE991C8b", @@ -18260,8 +18291,8 @@ } ], "total_tokens": "194999.1675", - "withdrawn_tokens": "19099.479678615564825", - "remaining_tokens": "175899.687821384435175" + "withdrawn_tokens": "19371.62153662421085", + "remaining_tokens": "175627.54596337578915" }, { "address": "0x89051CAb67Bc7F8CC44F7e270c6EDaf1EC57676c", @@ -19707,8 +19738,8 @@ "tranche_start": "2021-11-05T00:00:00.000Z", "tranche_end": "2023-05-05T00:00:00.000Z", "total_added": "14597706.0446472999", - "total_removed": "2423484.539752785628848047", - "locked_amount": "7479217.362303589914667904759892", + "total_removed": "2423974.887505558415776547", + "locked_amount": "7472533.74040572983529777371267577", "deposits": [ { "amount": "129284.449", @@ -19937,6 +19968,11 @@ "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", "tx": "0x8ae703a4a5f720f8f0e5e7f10e90b35ab67c3eef6448346c1e4526a9f8fe52ac" }, + { + "amount": "490.3477527727869285", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tx": "0x61bf5aeef6deab3f2fcb49b0608e32af09bdbd9fdf4af90db69625c5e0a063d0" + }, { "amount": "600.79246609513746875", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -21787,6 +21823,12 @@ "tranche_id": 3, "tx": "0x8ae703a4a5f720f8f0e5e7f10e90b35ab67c3eef6448346c1e4526a9f8fe52ac" }, + { + "amount": "490.3477527727869285", + "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", + "tranche_id": 3, + "tx": "0x61bf5aeef6deab3f2fcb49b0608e32af09bdbd9fdf4af90db69625c5e0a063d0" + }, { "amount": "600.79246609513746875", "user": "0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b", @@ -23253,8 +23295,8 @@ } ], "total_tokens": "359123.469575", - "withdrawn_tokens": "174741.56280420708615175", - "remaining_tokens": "184381.90677079291384825" + "withdrawn_tokens": "175231.91055697987308025", + "remaining_tokens": "183891.55901802012691975" }, { "address": "0xBdd412797c1B78535Afc5F71503b91fAbD0160fB", @@ -24318,7 +24360,7 @@ "tranche_end": "2023-04-05T00:00:00.000Z", "total_added": "5778205.3912159303", "total_removed": "1580907.252363731354286516", - "locked_amount": "2638180.610235969728781112041351225", + "locked_amount": "2635539.87080191733007518291374271", "deposits": [ { "amount": "552496.6455", @@ -25562,7 +25604,7 @@ "tranche_end": "2023-06-05T00:00:00.000Z", "total_added": "472355.6199999996", "total_removed": "739.13362915466", - "locked_amount": "402144.41163295941762498580314564", + "locked_amount": "401820.89536468259001748172196852", "deposits": [ { "amount": "3000", @@ -51478,7 +51520,7 @@ "tranche_start": "2021-12-05T00:00:00.000Z", "tranche_end": "2022-06-05T00:00:00.000Z", "total_added": "171288.42", - "total_removed": "41374.2240385532989", + "total_removed": "42124.2240385532989", "locked_amount": "0", "deposits": [ { @@ -55738,6 +55780,31 @@ "user": "0x207EeAb5F72e3F9e831428eF54dCaDc8B8727c85", "tx": "0x73eb6423003425d47a97876737e6c1fe31f492c7cd196b472f5565c8f2f2ce22" }, + { + "amount": "250", + "user": "0x823bedF06B12FB80cf60f0c3979E12b4Cd980E55", + "tx": "0x42311b1f41b9a5589ffaf83c0406aa6af812038b8990a294715d710afab57a91" + }, + { + "amount": "0", + "user": "0x823bedF06B12FB80cf60f0c3979E12b4Cd980E55", + "tx": "0x342315d292800d3c0da2696468b90c9bb14ff7734daadde2a73b1adeab9f170a" + }, + { + "amount": "250", + "user": "0xD53c2eaE5f37009afF895AA2c7EFbBF757d96F2e", + "tx": "0xf43ae78aedbdba7880b34b4721f5d3e2776d3144fda27c694adcf9c11e0f64a9" + }, + { + "amount": "250", + "user": "0x027306C886Da27fa29Ce9B4DB489C6E44d2ECc55", + "tx": "0xd179cb428095eb8fb78a8e5cce7f4845a75756d817cbadbeba05fcf555d72c12" + }, + { + "amount": "0", + "user": "0x823bedF06B12FB80cf60f0c3979E12b4Cd980E55", + "tx": "0xd2c0a9a3339417736df0a526a2d393774e86c785c9f99e93dd0cee5f107f7ffd" + }, { "amount": "250", "user": "0x1f7C20Bd98B2f346A58d2c5faaFc940E0C36450E", @@ -60358,10 +60425,29 @@ "tx": "0x1c2c084e3efafb2ffa09c0b259bd229cce0d6da04dd092d911c7e6136a7ac8a9" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "250", + "user": "0x823bedF06B12FB80cf60f0c3979E12b4Cd980E55", + "tranche_id": 6, + "tx": "0x42311b1f41b9a5589ffaf83c0406aa6af812038b8990a294715d710afab57a91" + }, + { + "amount": "0", + "user": "0x823bedF06B12FB80cf60f0c3979E12b4Cd980E55", + "tranche_id": 6, + "tx": "0x342315d292800d3c0da2696468b90c9bb14ff7734daadde2a73b1adeab9f170a" + }, + { + "amount": "0", + "user": "0x823bedF06B12FB80cf60f0c3979E12b4Cd980E55", + "tranche_id": 6, + "tx": "0xd2c0a9a3339417736df0a526a2d393774e86c785c9f99e93dd0cee5f107f7ffd" + } + ], "total_tokens": "250", - "withdrawn_tokens": "0", - "remaining_tokens": "250" + "withdrawn_tokens": "250", + "remaining_tokens": "0" }, { "address": "0x251ff8E9C055B19f76aDe0890b1Abc8b2aA91aE8", @@ -62796,10 +62882,17 @@ "tx": "0xc7dd4c2b995cc486fcd8b7892cd79f8fb393ada004dc68cf66ec82d99b35763c" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "250", + "user": "0xD53c2eaE5f37009afF895AA2c7EFbBF757d96F2e", + "tranche_id": 6, + "tx": "0xf43ae78aedbdba7880b34b4721f5d3e2776d3144fda27c694adcf9c11e0f64a9" + } + ], "total_tokens": "250", - "withdrawn_tokens": "0", - "remaining_tokens": "250" + "withdrawn_tokens": "250", + "remaining_tokens": "0" }, { "address": "0x99492aF57325BA3971542B9ea4036186BE50fa07", @@ -63492,10 +63585,17 @@ "tx": "0x057f65938b1360b6d2c4ebf5e789c67897cf60cb6a13f947004def03891afbd8" } ], - "withdrawals": [], + "withdrawals": [ + { + "amount": "250", + "user": "0x027306C886Da27fa29Ce9B4DB489C6E44d2ECc55", + "tranche_id": 6, + "tx": "0xd179cb428095eb8fb78a8e5cce7f4845a75756d817cbadbeba05fcf555d72c12" + } + ], "total_tokens": "250", - "withdrawn_tokens": "0", - "remaining_tokens": "250" + "withdrawn_tokens": "250", + "remaining_tokens": "0" }, { "address": "0x4C916514eb2721A2d74387DAc3b925568f488177", diff --git a/apps/static/src/assets/stagnet1-tranches.json b/apps/static/src/assets/stagnet1-tranches.json index cbd650c43..af373538b 100644 --- a/apps/static/src/assets/stagnet1-tranches.json +++ b/apps/static/src/assets/stagnet1-tranches.json @@ -38,7 +38,7 @@ "tranche_end": "2022-11-26T13:48:10.000Z", "total_added": "100", "total_removed": "0", - "locked_amount": "32.964760908168445", + "locked_amount": "32.896255073566716", "deposits": [ { "amount": "100", @@ -242,7 +242,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1100", "total_removed": "673.04388635", - "locked_amount": "225.374324581430717", + "locked_amount": "224.62076040081183", "deposits": [ { "amount": "1000", diff --git a/apps/static/src/assets/testnet-tranches.json b/apps/static/src/assets/testnet-tranches.json index 7d09e5764..2400b88be 100644 --- a/apps/static/src/assets/testnet-tranches.json +++ b/apps/static/src/assets/testnet-tranches.json @@ -69,7 +69,7 @@ "tranche_end": "2022-10-12T00:53:20.000Z", "total_added": "1010.000000000000000001", "total_removed": "668.4622323651", - "locked_amount": "206.93460711567729470020488574961948247", + "locked_amount": "206.2426981861999530002042006912734653", "deposits": [ { "amount": "1000", From b9d57efacf7d881f48c8d556d64772e4584dda79 Mon Sep 17 00:00:00 2001 From: Edd Date: Fri, 29 Jul 2022 12:06:49 +0000 Subject: [PATCH 34/61] Feat/893 anchor per network param (#907) * feat: highlight network param targeted by anchor * Feat/893: Highlighted key-value row colours * Feat/893: Removed unneeded important bangs Co-authored-by: sam-keen --- .../network-parameters.spec.tsx | 8 ++++---- .../network-parameters/network-parameters.tsx | 12 +++++++++--- .../key-value-table/key-value-table.spec.tsx | 16 ++++++++++++++++ .../key-value-table/key-value-table.tsx | 13 ++++++++++++- 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/apps/explorer/src/app/routes/network-parameters/network-parameters.spec.tsx b/apps/explorer/src/app/routes/network-parameters/network-parameters.spec.tsx index 7d9f3445e..db966e9dc 100644 --- a/apps/explorer/src/app/routes/network-parameters/network-parameters.spec.tsx +++ b/apps/explorer/src/app/routes/network-parameters/network-parameters.spec.tsx @@ -24,10 +24,10 @@ describe('NetworkParametersTable', () => { ); const rows = screen.getAllByTestId('key-value-table-row'); expect(rows[0].children[0]).toHaveTextContent( - 'Market Fee Factors Infrastructure Fee' + 'market.fee.factors.infrastructureFee' ); expect(rows[1].children[0]).toHaveTextContent( - 'Market Liquidity Provision Min Lp Stake Quantum Multiple' + 'market.liquidityProvision.minLpStakeQuantumMultiple' ); expect(rows[0].children[1]).toHaveTextContent('0.0005'); expect(rows[1].children[1]).toHaveTextContent('1'); @@ -54,10 +54,10 @@ describe('NetworkParametersTable', () => { ); const rows = screen.getAllByTestId('key-value-table-row'); expect(rows[0].children[0]).toHaveTextContent( - 'Market Fee Factors Infrastructure Fee' + 'market.fee.factors.infrastructureFee' ); expect(rows[1].children[0]).toHaveTextContent( - 'Market Liquidity Provision Min Lp Stake Quantum Multiple' + 'market.liquidityProvision.minLpStakeQuantumMultiple' ); expect(rows[0].children[1]).toHaveTextContent('0.0005'); expect(rows[1].children[1]).toHaveTextContent('1'); diff --git a/apps/explorer/src/app/routes/network-parameters/network-parameters.tsx b/apps/explorer/src/app/routes/network-parameters/network-parameters.tsx index 47c859ebb..f6466b805 100644 --- a/apps/explorer/src/app/routes/network-parameters/network-parameters.tsx +++ b/apps/explorer/src/app/routes/network-parameters/network-parameters.tsx @@ -16,7 +16,6 @@ import type { NetworkParametersQuery_networkParameters, } from './__generated__/NetworkParametersQuery'; import orderBy from 'lodash/orderBy'; -import startCase from 'lodash/startCase'; const BIG_NUMBER_PARAMS = [ 'spam.protection.delegation.min.tokens', @@ -42,8 +41,15 @@ export const renderRow = ({ }: NetworkParametersQuery_networkParameters) => { const isSyntaxRow = isJsonObject(value); return ( - - {startCase(key)} + + {key} {isSyntaxRow ? ( ) : isNaN(Number(value)) ? ( diff --git a/libs/ui-toolkit/src/components/key-value-table/key-value-table.spec.tsx b/libs/ui-toolkit/src/components/key-value-table/key-value-table.spec.tsx index 78ae0ac6d..8e891f4b5 100644 --- a/libs/ui-toolkit/src/components/key-value-table/key-value-table.spec.tsx +++ b/libs/ui-toolkit/src/components/key-value-table/key-value-table.spec.tsx @@ -90,3 +90,19 @@ it('Applies muted class if prop is passed', () => { 'w-full border-collapse mb-8 [border-spacing:0] break-all' ); }); + +it('Applies id to row if passed', () => { + render( + + + My value + My value + + + ); + + expect(screen.getByTestId('key-value-table-row')).toHaveAttribute( + 'id', + 'thisistheid' + ); +}); diff --git a/libs/ui-toolkit/src/components/key-value-table/key-value-table.tsx b/libs/ui-toolkit/src/components/key-value-table/key-value-table.tsx index ae71f9ad7..4b5b8d4f1 100644 --- a/libs/ui-toolkit/src/components/key-value-table/key-value-table.tsx +++ b/libs/ui-toolkit/src/components/key-value-table/key-value-table.tsx @@ -77,6 +77,7 @@ export const KeyValueTableRow = ({ noBorder = false, dtClassName, ddClassName, + id, }: KeyValueTableRowProps) => { const dlClassName = classNames( 'flex gap-1 flex-wrap justify-between ', @@ -92,14 +93,24 @@ export const KeyValueTableRow = ({ const dtClassNames = `break-words font-medium uppercase align-top p-4 capitalize ${dtClassName}`; const ddClassNames = classNames( 'align-top p-4 text-black/60 dark:text-white/60 break-words', + 'group-target:text-white dark:group-target:text-black', { 'font-mono': numerical, }, ddClassName ); + const attributes = {} as Partial>; + if (id) { + attributes.id = id; + } + return ( -
+
{children[0]}
{children[1]}
From a4a1c20c7c94404b78ca5657f7770a5285db569e Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Fri, 29 Jul 2022 16:20:29 +0100 Subject: [PATCH 35/61] Fix/687: Jump to block input should not allow negative block numbers or 0 (#918) * Fix/687: Jump to block input should not allow negative block numbers * Fix/687: Jump to block input should have a minimum of 1 --- apps/explorer/src/app/components/jump-to-block/index.tsx | 1 + apps/explorer/src/app/components/jump-to/index.tsx | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/apps/explorer/src/app/components/jump-to-block/index.tsx b/apps/explorer/src/app/components/jump-to-block/index.tsx index f6c6e5cfc..41396344d 100644 --- a/apps/explorer/src/app/components/jump-to-block/index.tsx +++ b/apps/explorer/src/app/components/jump-to-block/index.tsx @@ -29,6 +29,7 @@ export const JumpToBlock = () => { inputType="number" inputName="blockNumber" submitHandler={handleSubmit} + inputMin={1} /> ); }; diff --git a/apps/explorer/src/app/components/jump-to/index.tsx b/apps/explorer/src/app/components/jump-to/index.tsx index c00f47de8..79d1ac21b 100644 --- a/apps/explorer/src/app/components/jump-to/index.tsx +++ b/apps/explorer/src/app/components/jump-to/index.tsx @@ -9,6 +9,8 @@ interface JumpToProps { inputType: HTMLInputTypeAttribute; inputName: string; submitHandler: (arg0: SyntheticEvent) => void; + inputMin?: string | number; + inputMax?: string | number; } export const JumpTo = ({ @@ -18,6 +20,8 @@ export const JumpTo = ({ inputType, inputName, submitHandler, + inputMin, + inputMax, }: JumpToProps) => { return ( @@ -35,6 +39,8 @@ export const JumpTo = ({ name={inputName} placeholder={placeholder} className="max-w-[200px]" + min={inputMin} + max={inputMax} />