From 6c3a510bf92906229239aa999ac6a7a78959dbff Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 16:51:18 +1030 Subject: [PATCH 01/19] Modify the aggregate table instead of using the function for tracking lootbottles seen so far --- .../main.go | 11 ++- ...ns_user_actions_lootbottles_make_table.sql | 67 +++++++++++++++++++ .../user-actions/user-actions-aggregate.go | 47 ++++++++++++- 3 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql diff --git a/cmd/connector-common-lootboxes-timescale/main.go b/cmd/connector-common-lootboxes-timescale/main.go index b7f0d2e10..2ef4db027 100644 --- a/cmd/connector-common-lootboxes-timescale/main.go +++ b/cmd/connector-common-lootboxes-timescale/main.go @@ -2,9 +2,18 @@ package main import ( "github.com/fluidity-money/fluidity-app/lib/databases/timescale/lootboxes" + "github.com/fluidity-money/fluidity-app/lib/databases/timescale/user-actions" queue "github.com/fluidity-money/fluidity-app/lib/queues/lootboxes" ) func main() { - queue.LootboxesAll(lootboxes.InsertLootbox) + queue.LootboxesAll(func(lootbox lootboxes.Lootbox) { + user_actions.UpdateAggregatedUserTransactionByHashWithLootbottles( + lootbox.LootboxCount, + lootbox.RewardTier, + lootbox.TransactionHash, + ) + + lootboxes.InsertLootbox(lootbox) + }) } diff --git a/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql b/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql new file mode 100644 index 000000000..f8106c544 --- /dev/null +++ b/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql @@ -0,0 +1,67 @@ +-- migrate:up + +DROP TABLE aggregated_user_transactions_lootbottles_return; + +DROP FUNCTION aggregated_user_transactions_lootbottles; + +ALTER TABLE aggregated_user_transactions + ADD COLUMN lootbox_count DECIMAL, + ADD COLUMN reward_tier INTEGER; + +-- migrate:down + +ALTER TABLE aggregated_user_transactions + DROP COLUMN lootbox_count, + DROP COLUMN reward_tier; + +CREATE TABLE aggregated_user_transactions_lootbottles_return ( + token_short_name VARCHAR NOT NULL, + network network_blockchain NOT NULL, + time TIMESTAMP WITHOUT TIME ZONE NOT NULL, + transaction_hash VARCHAR NOT NULL, + sender_address VARCHAR NOT NULL, + recipient_address VARCHAR NOT NULL, + amount DOUBLE PRECISION NOT NULL, + application VARCHAR NOT NULL, + winning_amount DOUBLE PRECISION NOT NULL, + winning_address VARCHAR NOT NULL, + reward_hash VARCHAR NOT NULL, + type user_action NOT NULL, + swap_in BOOLEAN NOT NULL, + utility_amount DOUBLE PRECISION NOT NULL, + utility_name VARCHAR NOT NULL, + + lootbox_count DECIMAL, + reward_tier INTEGER +); + +CREATE FUNCTION aggregated_user_transactions_lootbottles() +RETURNS SETOF aggregated_user_transactions_lootbottles_return +LANGUAGE SQL +STABLE +AS +$$ +SELECT + token_short_name, + network, + time, + transaction_hash, + sender_address, + recipient_address, + amount, + application, + winning_amount, + winning_address, + reward_hash, + type user_action, + swap_in, + utility_amount, + utility_name, + lootbox_count, + reward_tier +FROM + aggregated_user_transactions +LEFT JOIN ( + SELECT reward_tier, lootbox_count FROM lootbox +) AS lootbox_user_actions ON transaction_hash = aggregated_user_transactions.transaction_hash +$$; diff --git a/lib/databases/timescale/user-actions/user-actions-aggregate.go b/lib/databases/timescale/user-actions/user-actions-aggregate.go index 1fa7f7538..ef5e752b8 100644 --- a/lib/databases/timescale/user-actions/user-actions-aggregate.go +++ b/lib/databases/timescale/user-actions/user-actions-aggregate.go @@ -14,9 +14,7 @@ import ( user_actions "github.com/fluidity-money/fluidity-app/lib/types/user-actions" ) -const ( - TableAggregatedUserTransactions = `aggregated_user_transactions` -) +const TableAggregatedUserTransactions = `aggregated_user_transactions` func InsertAggregatedUserTransaction(userTransaction user_actions.AggregatedUserTransaction) { timescaleClient := timescale.Client() @@ -218,3 +216,46 @@ func UpdateAggregatedUserTransactionByHash(userTransaction user_actions.Aggregat }) } } + +// UpdateAggregatedUserTransactionByHashWithLootbottles after finding it first +func UpdateAggregatedUserTransactionByHashWithLootbottles(lootbottlesCount float64, rewardTier int, transactionHash string) { + timescaleClient := timescale.Client() + + statementText := fmt.Sprintf( + `UPDATE %s + SET lootbox_count = $1, reward_tier = $2 + WHERE transaction_hash = $3`, + + TableAggregatedUserTransactions, + ) + + r, err := timescaleClient.Exec( + statementText, + lootbottlesCount, + rewardTier, + transactionHash, + ) + + if err != nil { + log.Fatal(func(k *log.Log) { + k.Context = Context + k.Message = "Failed to update an aggregated user transaction with a lootbottle" + k.Payload = err + }) + } + + rows, _ := r.RowsAffected() + + if rows != 1 { + log.Fatal(func(k *log.Log) { + k.Context = Context + + k.Format( + "%d rows affected by an aggregate user transaction with lootbottle update, expected 1!", + rows, + ) + + k.Payload = err + }) + } +} From 2fe13cdacb4ea15400cba91c48510ba22add94a3 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 16:53:06 +1030 Subject: [PATCH 02/19] Use aggregated_user_transactions as the new database for the user actions aggregate query --- .../app/queries/useUserActionsAggregate.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts b/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts index 7f037e802..9434d0137 100644 --- a/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts +++ b/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts @@ -22,7 +22,7 @@ const queryByAddress: Queryable = { $address: String! $token: String ) { - arbitrum: aggregated_user_transactions_lootbottles( + arbitrum: aggregated_user_transactions( order_by: { time: desc } limit: $limit offset: $offset @@ -62,7 +62,7 @@ const queryByAddress: Queryable = { $limit: Int = 12 $address: String! ) { - solana: aggregated_user_transactions_lootbottles( + solana: aggregated_user_transactions( order_by: { time: desc } limit: $limit offset: $offset @@ -100,7 +100,7 @@ const queryByAddress: Queryable = { const queryAll: Queryable = { arbitrum: gql` query aggregatedUserTransactionsAll($offset: Int = 0, $limit: Int = 12) { - arbitrum: aggregated_user_transactions_lootbottles( + arbitrum: aggregated_user_transactions( order_by: { time: desc } limit: $limit offset: $offset @@ -128,7 +128,7 @@ const queryAll: Queryable = { `, solana: gql` query aggregatedUserTransactionsAll($offset: Int = 0, $limit: Int = 12) { - solana: aggregated_user_transactions_lootbottles( + solana: aggregated_user_transactions( order_by: { time: desc } limit: $limit offset: $offset From c571c8b84af81cffa74a23d5c135741d3196d2a9 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 17:04:58 +1030 Subject: [PATCH 03/19] Flip the order of the up migration with the lootbottles make table --- ...63905-user_actions_user_actions_lootbottles_make_table.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql b/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql index f8106c544..241c9029c 100644 --- a/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql +++ b/database/102-up-timescale/20240110163905-user_actions_user_actions_lootbottles_make_table.sql @@ -1,9 +1,9 @@ -- migrate:up -DROP TABLE aggregated_user_transactions_lootbottles_return; - DROP FUNCTION aggregated_user_transactions_lootbottles; +DROP TABLE aggregated_user_transactions_lootbottles_return; + ALTER TABLE aggregated_user_transactions ADD COLUMN lootbox_count DECIMAL, ADD COLUMN reward_tier INTEGER; From aff35991bc3f2573835e6a85d53fb16b331f2888 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 17:42:02 +1030 Subject: [PATCH 04/19] Experiment with 0 reward tier to see if it renders better in the UI --- .../$network/query/winningUserTransactions.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index 7380b3d3e..cbebaf8b9 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -26,8 +26,6 @@ type UserTransaction = { value: number; currency: string; application: string; - lootboxCount: number; - rewardTier: number; }; export type TransactionsLoaderData = { @@ -208,8 +206,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { amount: value, currency: { symbol: currency }, application, - lootboxCount, - rewardTier, } = transaction; return { @@ -226,8 +222,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { : value, currency, application, - lootboxCount, - rewardTier, }; } ); @@ -292,8 +286,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { swapType, utilityTokens: winner.utility, application: tx.application, - lootboxCount: tx.lootboxCount, - rewardTier: tx.rewardTier, + rewardTier: 0, + lootboxCount: 0, }; }); @@ -316,4 +310,4 @@ export const loader: LoaderFunction = async ({ params, request }) => { ); return new Error("Server could not fulfill request"); } -}; +}; \ No newline at end of file From 48538391dbdf953cc59218080c4f46f388ebaf69 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 18:44:57 +1030 Subject: [PATCH 05/19] Use the aggregate transactions table for the rewards table --- lib/types/user-actions/user-actions.go | 4 +-- .../app/queries/useUserTransactions.ts | 33 ++++++------------- .../$network/query/dashboard/prizePool.tsx | 1 - .../query/winningUserTransactions.tsx | 15 +++++++++ 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/lib/types/user-actions/user-actions.go b/lib/types/user-actions/user-actions.go index f799592ae..fecc3eb6a 100644 --- a/lib/types/user-actions/user-actions.go +++ b/lib/types/user-actions/user-actions.go @@ -132,7 +132,7 @@ type ( // AggregatedTransactionFromUserAction to create a partially aggregated transaction from a user action func AggregatedTransactionFromUserAction(userAction UserAction) AggregatedUserTransaction { - var ( + var ( senderAddress string recipientAddress string ) @@ -180,7 +180,7 @@ func AggregatedTransactionFromPendingWinner(pendingWinner winners.PendingWinner) SenderAddress: senderAddress, // the sender is the winner of a pending win WinningAddress: senderAddress, - Type: "send", + Type: "send", } if pendingWinner.Utility == "FLUID" { diff --git a/web/app.fluidity.money/app/queries/useUserTransactions.ts b/web/app.fluidity.money/app/queries/useUserTransactions.ts index 8db0ae4f9..56a1919c7 100644 --- a/web/app.fluidity.money/app/queries/useUserTransactions.ts +++ b/web/app.fluidity.money/app/queries/useUserTransactions.ts @@ -21,7 +21,7 @@ const queryByAddress: Queryable = { $limit: Int = 12 $tokens: [String!] = [] ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "arbitrum" } token_short_name: { _in: $tokens } @@ -59,7 +59,7 @@ const queryByAddress: Queryable = { $limit: Int = 12 $tokens: [String!] = [] ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "solana" } token_short_name: { _in: $tokens } @@ -79,7 +79,6 @@ const queryByAddress: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -97,7 +96,7 @@ const queryByAddress: Queryable = { $limit: Int = 12 $tokens: [String!] = [] ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "polygon_zk" } token_short_name: { _in: $tokens } @@ -117,7 +116,6 @@ const queryByAddress: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -135,7 +133,7 @@ const queryByTxHash: Queryable = { $filterHashes: [String!] = [] $limit: Int = 12 ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "arbitrum" } _not: { transaction_hash: { _in: $filterHashes } } @@ -150,7 +148,6 @@ const queryByTxHash: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -165,7 +162,7 @@ const queryByTxHash: Queryable = { $filterHashes: [String!] = [] $limit: Int = 12 ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "solana" } _not: { transaction_hash: { _in: $filterHashes } } @@ -180,7 +177,6 @@ const queryByTxHash: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -196,7 +192,7 @@ const queryByTxHash: Queryable = { $filterHashes: [String!] = [] $limit: Int = 12 ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "polygon_zk" } _not: { transaction_hash: { _in: $filterHashes } } @@ -211,7 +207,6 @@ const queryByTxHash: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -230,7 +225,7 @@ const queryAll: Queryable = { $limit: Int = 12 $tokens: [String!] = [] ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "arbitrum" } _not: { transaction_hash: { _in: $filterHashes } } @@ -263,7 +258,7 @@ const queryAll: Queryable = { $limit: Int = 12 $tokens: [String!] = [] ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "solana" } _not: { transaction_hash: { _in: $filterHashes } } @@ -279,7 +274,6 @@ const queryAll: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -296,7 +290,7 @@ const queryAll: Queryable = { $limit: Int = 12 $tokens: [String!] = [] ) { - transfers: user_actions_lootbottles( + transfers: aggregated_user_transactions( where: { network: { _eq: "polygon_zk" } _not: { transaction_hash: { _in: $filterHashes } } @@ -312,7 +306,6 @@ const queryAll: Queryable = { time transaction_hash amount - token_decimals type swap_in application @@ -375,7 +368,6 @@ type HasuraUserTransaction = { sender_address: string; recipient_address: string; amount: number; - token_decimals: number; token_short_name: string; transaction_hash: string; time: string; @@ -552,12 +544,7 @@ const parseHasuraUserTransactions = ( return { sender: { address: senderAddress }, receiver: { address: recipientAddress }, - amount: Number( - addDecimalToBn( - new BN(String(transfer.amount)), - transfer.token_decimals - ) - ), + amount: transfer.amount, currency: { symbol: "f" + transfer.token_short_name }, transaction: { hash: transfer.transaction_hash }, block: { diff --git a/web/app.fluidity.money/app/routes/$network/query/dashboard/prizePool.tsx b/web/app.fluidity.money/app/routes/$network/query/dashboard/prizePool.tsx index 30fcbda26..182786e8d 100644 --- a/web/app.fluidity.money/app/routes/$network/query/dashboard/prizePool.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/dashboard/prizePool.tsx @@ -25,7 +25,6 @@ export async function loader() { }, ].map(({ network, abi, getPrizePool }) => { const infuraRpc = config.drivers[network][mainnetId].rpc.http; - console.log("infura rpc", infuraRpc); const provider = new JsonRpcProvider(infuraRpc); const rewardPoolAddr = config.contract.prize_pool[network as Chain]; diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index cbebaf8b9..c566ef2f0 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -48,6 +48,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { if (!page || page < 1 || page > 20) return new Error("Invalid Request"); + console.log("beginning"); + try { const [ { data: winnersData, errors: winnersErr }, @@ -73,6 +75,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { throw winnersErr; } + console.log("winnersErr", winnersErr, "pendingWinnersErr", pendingWinnersErr); + const castPending: Winner[] = pendingWinnersData.ethereum_pending_winners.map((pending_winner) => { return { @@ -100,6 +104,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { Date.parse(second.awarded_time) - Date.parse(first.awarded_time) ); + console.log("mergedWinners", mergedWinners); + // If no wins found, return early if (!mergedWinners.length) { return json({ @@ -152,6 +158,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { } ); + console.log("mergedWinnersMap", mergedWinnersMap); + // winnersMap looks up if a transaction was the send that caused a win const winners = Object.values< Winner & { @@ -160,6 +168,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { } >(mergedWinnersMap).slice((page - 1) * 12, page * 12); + console.log("winners", winners); + const winnerAddrs = winners.map( ({ send_transaction_hash }) => send_transaction_hash ); @@ -178,6 +188,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { ); if (!userTransactionsData || userTransactionsErr) { + console.log("userTransactionsErr", userTransactionsErr); captureException( new Error( `Could not fetch User Transactions for ${address}, on ${network}` @@ -291,6 +302,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { }; }); + console.log("merged transactions", mergedTransactions); + return json({ page, transactions: mergedTransactions, @@ -298,6 +311,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { loaded: true, } satisfies TransactionsLoaderData); } catch (err) { + console.error("err", err); + captureException( new Error( `BitQuery returned an invalid response for ${address}, on ${network}. Maybe your API key is invalid?` From 108bb6c151179745c21ca09807b17332b404d7f5 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 18:46:09 +1030 Subject: [PATCH 06/19] Remove extraneous logging --- .../$network/query/winningUserTransactions.tsx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index c566ef2f0..14e774fa1 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -48,8 +48,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { if (!page || page < 1 || page > 20) return new Error("Invalid Request"); - console.log("beginning"); - try { const [ { data: winnersData, errors: winnersErr }, @@ -75,8 +73,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { throw winnersErr; } - console.log("winnersErr", winnersErr, "pendingWinnersErr", pendingWinnersErr); - const castPending: Winner[] = pendingWinnersData.ethereum_pending_winners.map((pending_winner) => { return { @@ -104,8 +100,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { Date.parse(second.awarded_time) - Date.parse(first.awarded_time) ); - console.log("mergedWinners", mergedWinners); - // If no wins found, return early if (!mergedWinners.length) { return json({ @@ -158,8 +152,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { } ); - console.log("mergedWinnersMap", mergedWinnersMap); - // winnersMap looks up if a transaction was the send that caused a win const winners = Object.values< Winner & { @@ -168,8 +160,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { } >(mergedWinnersMap).slice((page - 1) * 12, page * 12); - console.log("winners", winners); - const winnerAddrs = winners.map( ({ send_transaction_hash }) => send_transaction_hash ); @@ -188,7 +178,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { ); if (!userTransactionsData || userTransactionsErr) { - console.log("userTransactionsErr", userTransactionsErr); captureException( new Error( `Could not fetch User Transactions for ${address}, on ${network}` @@ -302,8 +291,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { }; }); - console.log("merged transactions", mergedTransactions); - return json({ page, transactions: mergedTransactions, From 11ccf921e37e4453e6483b1edc5ae6fefdbd072c Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 18:47:28 +1030 Subject: [PATCH 07/19] Remove extraneous logging and set the bottle count appropriately --- .../app/routes/$network/query/winningUserTransactions.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index 14e774fa1..7513771c9 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -286,8 +286,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { swapType, utilityTokens: winner.utility, application: tx.application, - rewardTier: 0, - lootboxCount: 0, + rewardTier: tx.rewardTier, + lootboxCount: tx.lootboxCount, }; }); @@ -298,8 +298,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { loaded: true, } satisfies TransactionsLoaderData); } catch (err) { - console.error("err", err); - captureException( new Error( `BitQuery returned an invalid response for ${address}, on ${network}. Maybe your API key is invalid?` From d902a28aab9c755b300ed385a15370d17a5837b9 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 18:48:30 +1030 Subject: [PATCH 08/19] Add back lootbox/reward tier --- .../app/routes/$network/query/winningUserTransactions.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index 7513771c9..1bd542780 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -26,6 +26,8 @@ type UserTransaction = { value: number; currency: string; application: string; + rewardTier: number; + lootboxCount: number; }; export type TransactionsLoaderData = { @@ -206,6 +208,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { amount: value, currency: { symbol: currency }, application, + rewardTier, + lootboxCount } = transaction; return { @@ -222,6 +226,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { : value, currency, application, + lootboxCount, + rewardTier, }; } ); From 76f86b86949a03336ae64d024209dc66ee07885c Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 18:51:59 +1030 Subject: [PATCH 09/19] Remove some unused imports --- web/app.fluidity.money/app/queries/useUserTransactions.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/web/app.fluidity.money/app/queries/useUserTransactions.ts b/web/app.fluidity.money/app/queries/useUserTransactions.ts index 56a1919c7..c83278903 100644 --- a/web/app.fluidity.money/app/queries/useUserTransactions.ts +++ b/web/app.fluidity.money/app/queries/useUserTransactions.ts @@ -4,9 +4,7 @@ import { hasuraDateToUnix, networkGqlBackend, } from "~/util/api/graphql"; -import BN from "bn.js"; import { - addDecimalToBn, getTokenFromAddress, Token, } from "~/util/chainUtils/tokens"; From 574f8074959581cedbf98efea14161b7df22573e Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 22:09:45 +1030 Subject: [PATCH 10/19] Adjust the links on the page, and update the currently used epoch to a testing one --- lib/databases/timescale/lootboxes/config.go | 2 +- .../JoeFarmlandsOrCamelotKingdom/index.tsx | 12 ++- .../app/queries/useAirdropLeaderboard.ts | 6 +- .../app/queries/useLootBottlesCount.ts | 2 +- .../$network/dashboard/airdrop/common.tsx | 6 +- .../$network/dashboard/airdrop/index.tsx | 18 ++--- .../app/styles/dashboard.css | 30 +------ .../app/styles/dashboard/airdrop.css | 79 +++---------------- .../app/styles/transfer.css | 15 +--- web/app.fluidity.money/config.toml | 14 +++- 10 files changed, 52 insertions(+), 132 deletions(-) diff --git a/lib/databases/timescale/lootboxes/config.go b/lib/databases/timescale/lootboxes/config.go index 5f8e1f12e..d7d171a10 100644 --- a/lib/databases/timescale/lootboxes/config.go +++ b/lib/databases/timescale/lootboxes/config.go @@ -33,7 +33,7 @@ func GetLootboxConfig() (programFound bool, hasBegun bool, curEpoch string, curA program_begin < (select timestamp from t) AND program_end > (select timestamp from t), epoch_identifier, - current_application + application FROM %s WHERE is_current_program;`, diff --git a/web/app.fluidity.money/app/components/JoeFarmlandsOrCamelotKingdom/index.tsx b/web/app.fluidity.money/app/components/JoeFarmlandsOrCamelotKingdom/index.tsx index 1339df2c4..90d2cc980 100644 --- a/web/app.fluidity.money/app/components/JoeFarmlandsOrCamelotKingdom/index.tsx +++ b/web/app.fluidity.money/app/components/JoeFarmlandsOrCamelotKingdom/index.tsx @@ -7,13 +7,21 @@ export const JoeFarmlandsOrCamelotKingdomLinks = () => [ const JoeFarmlandsOrCamelotKingdom = () => { return (
- + - + { const providerLinks: { provider: Provider; link: string }[] = [ - { provider: "Uniswap", link: "https://app.uniswap.org/#/swap" }, + { provider: "Jumper", link: "https://jumper.exchange/" }, { - provider: "Sushiswap", - link: "https://www.sushi.com/swap?fromChainId=42161&fromCurrency=0x4CFA50B7Ce747e2D61724fcAc57f24B748FF2b2A&toChainId=42161&toCurrency=NATIVE&amount=", + provider: "Trader Joe", + link: "https://traderjoexyz.com/arbitrum/trade?outputCurrency=0x4cfa50b7ce747e2d61724fcac57f24b748ff2b2a", }, { provider: "Camelot", link: "https://app.camelot.exchange/" }, { provider: "Saddle", link: "https://saddle.exchange/#/" }, diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx index ab33e0a5d..e0a4a2b1a 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx @@ -57,7 +57,7 @@ import { ReferralBottlesCountLoaderData } from "../../query/referralBottles"; import { HowItWorksContent } from "~/components/ReferralModal"; import JoeFarmlandsOrCamelotKingdom from "~/components/JoeFarmlandsOrCamelotKingdom"; -const EPOCH_CURRENT_IDENTIFIER = "epoch_1"; +const EPOCH_CURRENT_IDENTIFIER = "epoch_testing"; const AIRDROP_MODALS = [ "recap", @@ -119,7 +119,7 @@ const SAFE_DEFAULT_AIRDROP: AirdropLoaderData = { programEnd: new Date("2023-06-28 T12:00:00+02:00"), epochDaysTotal: 30, epochDaysElapsed: 30, - epochIdentifier: "epoch_1", + epochIdentifier: "", ethereumApplication: "none", epochFound: false, loaded: false, @@ -558,7 +558,6 @@ const Airdrop = () => { onClick={() => setCurrentModal("testnet-rewards")} groupId="airdrop" isSelected={isMobile && currentModal === "testnet-rewards"} - disabled={true} > Testnet Rewards @@ -1164,17 +1163,12 @@ const MultiplierTasks = () => { const [tasks, setTasks] = useState<"1x" | "6x">("6x"); const providerLinks: { provider: Provider; link: string }[] = [ - { provider: "Jumper", link: "https://app.uniswap.org/#/swap" }, - { - provider: "Uniswap", - link: "https://app.uniswap.org/#/swap", - }, - { provider: "Trader Joe", link: "https://app.camelot.exchange/" }, - { provider: "Camelot", link: "https://saddle.exchange/#/" }, - { provider: "Sushiswap", link: "https://app.chronos.exchange/" }, + { provider: "Jumper", link: "https://jumper.exchange/" }, + { provider: "Trader Joe", link: "https://traderjoexyz.com/arbitrum/trade?outputCurrency=0x4cfa50b7ce747e2d61724fcac57f24b748ff2b2a" }, + { provider: "Camelot", link: "https://app.camelot.exchange/" }, { provider: "Ramses", - link: "https://kyberswap.com/swap/arbitrum/fusdc-to-usdc", + link: "https://app.ramses.exchange/liquidity/v2/0xf73c87736008ad3af9973b357c97ab8c60d8ca63", }, ]; diff --git a/web/app.fluidity.money/app/styles/dashboard.css b/web/app.fluidity.money/app/styles/dashboard.css index 7d3166ba0..443d14bf4 100644 --- a/web/app.fluidity.money/app/styles/dashboard.css +++ b/web/app.fluidity.money/app/styles/dashboard.css @@ -149,20 +149,7 @@ body { background-repeat: no-repeat; background-size: 100%; background-position: 0 0, 100% 0, 100% 100%, 0 100%; - background-image: linear-gradient( - 45deg, - #f3b8d8, - #b793e9, - #9fd4f3, - #ffd2c4, - #fbf3f3, - #d9abdf, - #af9ce3, - #aae4e1, - #c6ead0, - #ffffff, - #fdb5e4 - ); + background-image: linear-gradient(45deg, #f3b8d8, #b793e9, #9fd4f3, #ffd2c4, #fbf3f3, #d9abdf, #af9ce3, #aae4e1, #c6ead0, #ffffff, #fdb5e4); animation: rotate 4s linear infinite; } @@ -630,20 +617,7 @@ ul.sidebar-nav li div.active { } .holo { - background: conic-gradient( - from 209.59deg at 50% 50%, - #f3b8d8 0deg, - #b793e9 50.06deg, - #9fd4f3 85.94deg, - #ffd2c4 134.97deg, - #fbf3f3 172.05deg, - #d9abdf 200.75deg, - #af9ce3 224.67deg, - #aae4e1 259.36deg, - #c6ead0 298.82deg, - #ffffff 328.72deg, - #fdb5e4 360deg - ); + background: conic-gradient(from 209.59deg at 50% 50%, #f3b8d8 0deg, #b793e9 50.06deg, #9fd4f3 85.94deg, #ffd2c4 134.97deg, #fbf3f3 172.05deg, #d9abdf 200.75deg, #af9ce3 224.67deg, #aae4e1 259.36deg, #c6ead0 298.82deg, #ffffff 328.72deg, #fdb5e4 360deg); height: 40px; width: 40px; border-radius: 50%; diff --git a/web/app.fluidity.money/app/styles/dashboard/airdrop.css b/web/app.fluidity.money/app/styles/dashboard/airdrop.css index 4e0b8e444..3d22d2968 100644 --- a/web/app.fluidity.money/app/styles/dashboard/airdrop.css +++ b/web/app.fluidity.money/app/styles/dashboard/airdrop.css @@ -273,19 +273,7 @@ } .transaction-table > thead > tr.highlighted-row, .transaction-table > tbody > tr.airdrop-row.highlighted-row { - background: linear-gradient( - 90deg, - #f3b8d8 0%, - #b793e9 15.1%, - #9fd4f3 26.04%, - #ffd2c4 36.46%, - #fbf3f3 46.88%, - #d9abdf 57.29%, - #af9ce3 72.4%, - #aae4e1 85.42%, - #c6ead0 93.23%, - #fdb5e4 100% - ); + background: linear-gradient(90deg, #f3b8d8 0%, #b793e9 15.1%, #9fd4f3 26.04%, #ffd2c4 36.46%, #fbf3f3 46.88%, #d9abdf 57.29%, #af9ce3 72.4%, #aae4e1 85.42%, #c6ead0 93.23%, #fdb5e4 100%); } .transaction-table > thead > tr.highlighted-row td, .transaction-table > tbody > tr.airdrop-row.highlighted-row td { @@ -314,30 +302,14 @@ } .airdrop-leaderboard-mobile .transaction-table > thead > tr td:first-child, .airdrop-leaderboard-mobile .transaction-table > thead > tr th:first-child, -.airdrop-leaderboard-mobile - .transaction-table - > tbody - > tr.airdrop-row - td:first-child, -.airdrop-leaderboard-mobile - .transaction-table - > tbody - > tr.airdrop-row - th:first-child { +.airdrop-leaderboard-mobile .transaction-table > tbody > tr.airdrop-row td:first-child, +.airdrop-leaderboard-mobile .transaction-table > tbody > tr.airdrop-row th:first-child { padding-left: 1em; } .airdrop-leaderboard-mobile .transaction-table > thead > tr td:last-child, .airdrop-leaderboard-mobile .transaction-table > thead > tr th:last-child, -.airdrop-leaderboard-mobile - .transaction-table - > tbody - > tr.airdrop-row - td:last-child, -.airdrop-leaderboard-mobile - .transaction-table - > tbody - > tr.airdrop-row - th:last-child { +.airdrop-leaderboard-mobile .transaction-table > tbody > tr.airdrop-row td:last-child, +.airdrop-leaderboard-mobile .transaction-table > tbody > tr.airdrop-row th:last-child { padding-right: 1em; } .airdrop-leaderboard-mobile .transaction-table > thead > tr td, @@ -708,10 +680,7 @@ align-items: flex-start; gap: 0.5em; } -.staking-stats-container - .staking-stats-stakes-container - .stake - .stake-multiplier { +.staking-stats-container .staking-stats-stakes-container .stake .stake-multiplier { width: 100%; display: flex; flex-wrap: wrap; @@ -784,31 +753,18 @@ width: 150px; height: 150px; } -.recap-container - .recap-hero - .recap-hero-text - .recap-circle-scroll - .recap-circle-scroll-arrow { +.recap-container .recap-hero .recap-hero-text .recap-circle-scroll .recap-circle-scroll-arrow { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } -.recap-container - .recap-hero - .recap-hero-text - .recap-circle-scroll - .recap-circle-scroll-arrow - svg { +.recap-container .recap-hero .recap-hero-text .recap-circle-scroll .recap-circle-scroll-arrow svg { fill: none; stroke: white; transform: scale(3); } -.recap-container - .recap-hero - .recap-hero-text - .recap-circle-scroll - .recap-circle-scroll-text { +.recap-container .recap-hero .recap-hero-text .recap-circle-scroll .recap-circle-scroll-text { font-size: 10px; fill: grey; letter-spacing: 0.4em; @@ -900,28 +856,19 @@ /* Track */ /* Handle */ } -.recap-container - .recap-stats - .recap-bottle-distribution-container::-webkit-scrollbar { +.recap-container .recap-stats .recap-bottle-distribution-container::-webkit-scrollbar { height: 10px; } -.recap-container - .recap-stats - .recap-bottle-distribution-container::-webkit-scrollbar-track { +.recap-container .recap-stats .recap-bottle-distribution-container::-webkit-scrollbar-track { background: transparent; border: 1px solid white; border-radius: 5px; } -.recap-container - .recap-stats - .recap-bottle-distribution-container::-webkit-scrollbar-thumb { +.recap-container .recap-stats .recap-bottle-distribution-container::-webkit-scrollbar-thumb { background: white; border-radius: 5px; } -.recap-container - .recap-stats - .recap-bottle-distribution-container - .bottle-container { +.recap-container .recap-stats .recap-bottle-distribution-container .bottle-container { gap: 1em; display: flex; flex-direction: column; diff --git a/web/app.fluidity.money/app/styles/transfer.css b/web/app.fluidity.money/app/styles/transfer.css index 0d4055653..337cd2928 100644 --- a/web/app.fluidity.money/app/styles/transfer.css +++ b/web/app.fluidity.money/app/styles/transfer.css @@ -276,20 +276,7 @@ body { right: 0; bottom: 0; z-index: 1; - background: conic-gradient( - from 209.59deg at 50% 50%, - #f3b8d8 0deg, - #b793e9 50.06deg, - #9fd4f3 85.94deg, - #ffd2c4 134.97deg, - #fbf3f3 172.05deg, - #d9abdf 200.75deg, - #af9ce3 224.67deg, - #aae4e1 259.36deg, - #c6ead0 298.82deg, - #ffffff 328.72deg, - #fdb5e4 360deg - ); + background: conic-gradient(from 209.59deg at 50% 50%, #f3b8d8 0deg, #b793e9 50.06deg, #9fd4f3 85.94deg, #ffd2c4 134.97deg, #fbf3f3 172.05deg, #d9abdf 200.75deg, #af9ce3 224.67deg, #aae4e1 259.36deg, #c6ead0 298.82deg, #ffffff 328.72deg, #fdb5e4 360deg); filter: blur(10px); scale: 1.1; } diff --git a/web/app.fluidity.money/config.toml b/web/app.fluidity.money/config.toml index a92e6d18e..09eff9ce6 100644 --- a/web/app.fluidity.money/config.toml +++ b/web/app.fluidity.money/config.toml @@ -341,10 +341,10 @@ fUSDT = "https://app.meteora.ag" [liquidity_providers.arbitrum] [[liquidity_providers.arbitrum.providers]] -name= "uniswap" +name= "Trader Joe" [liquidity_providers.arbitrum.providers.link] -fUSDC = "https://app.uniswap.org/#/add/0xaf88d065e77c8cC2239327C5EDb3A432268e5831/0x4CFA50B7Ce747e2D61724fcAc57f24B748FF2b2A/500" +fUSDC = "https://traderjoexyz.com/arbitrum/pool/v21/0x4cfa50b7ce747e2d61724fcac57f24b748ff2b2a/0x912ce59144191c1204e64559fe8253a0e49e6548/25" [[liquidity_providers.arbitrum.providers]] name= "camelot" @@ -353,10 +353,16 @@ name= "camelot" fUSDC = "https://app.camelot.exchange/liquidity/?token1=0xaf88d065e77c8cC2239327C5EDb3A432268e5831&token2=0x4CFA50B7Ce747e2D61724fcAc57f24B748FF2b2A" [[liquidity_providers.arbitrum.providers]] -name= "Chronos" +name= "Ramses" + +[liquidity_providers.arbitrum.providers.link] +fUSDC = "https://app.ramses.exchange/liquidity/v2/0xf73c87736008ad3af9973b357c97ab8c60d8ca63" + +[[liquidity_providers.arbitrum.providers]] +name= "uniswap" [liquidity_providers.arbitrum.providers.link] -fUSDC = "https://app.chronos.exchange/liquidity" +fUSDC = "https://app.uniswap.org/#/add/0xaf88d065e77c8cC2239327C5EDb3A432268e5831/0x4CFA50B7Ce747e2D61724fcAc57f24B748FF2b2A/500" [[config.ethereum.wallets]] name = "Browser" From 9a3441300e0da6f86bcd8be7432fc4d2298b2424 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 22:23:24 +1030 Subject: [PATCH 11/19] Replace the name from application to ethereum_application --- lib/databases/timescale/lootboxes/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/databases/timescale/lootboxes/config.go b/lib/databases/timescale/lootboxes/config.go index d7d171a10..ce39b1383 100644 --- a/lib/databases/timescale/lootboxes/config.go +++ b/lib/databases/timescale/lootboxes/config.go @@ -33,7 +33,7 @@ func GetLootboxConfig() (programFound bool, hasBegun bool, curEpoch string, curA program_begin < (select timestamp from t) AND program_end > (select timestamp from t), epoch_identifier, - application + ethereum_application FROM %s WHERE is_current_program;`, From b25bc0cdf847c9ceb8591961b99f1b4835247935 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 10 Jan 2024 23:26:27 +1030 Subject: [PATCH 12/19] Fix composite key usage --- lib/databases/timescale/lootboxes/rewards.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/databases/timescale/lootboxes/rewards.go b/lib/databases/timescale/lootboxes/rewards.go index a0df54a3b..a9ac2ed5c 100644 --- a/lib/databases/timescale/lootboxes/rewards.go +++ b/lib/databases/timescale/lootboxes/rewards.go @@ -301,11 +301,11 @@ func UpdateOrInsertAmountsRewarded(network_ network.BlockchainNetwork, lootboxCu $4, $5, $6, - $7 + CURRENT_TIMESTAMP ) - ON CONFLICT (id) + ON CONFLICT (network, epoch, token_short_name, winner, application) DO UPDATE SET - amount_earned = amount_earned + $4, + amount_earned = lootbox_amounts_rewarded.amount_earned + $4, last_updated = CURRENT_TIMESTAMP`, TableLootboxAmountsRewarded, From 197347dacd7120afc16c385ba87d334bf8df0325 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 00:45:34 +1030 Subject: [PATCH 13/19] Don't display the lootbox icon until we have the information rendering fine --- .../main.go | 1 + .../app/routes/$network/dashboard/home.tsx | 7 +------ .../$network/query/dashboard/airdropLeaderboard.tsx | 8 ++++++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/cmd/microservice-ethereum-create-transaction-lootboxes/main.go b/cmd/microservice-ethereum-create-transaction-lootboxes/main.go index a523578a7..4d03a67a9 100644 --- a/cmd/microservice-ethereum-create-transaction-lootboxes/main.go +++ b/cmd/microservice-ethereum-create-transaction-lootboxes/main.go @@ -309,6 +309,7 @@ func main() { RewardTier: rewardTier, LootboxCount: lootboxCountFloat, Application: application, + Epoch: currentEpoch, } queue.SendMessage(lootboxes_queue.TopicLootboxes, lootbox) diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx index 0539d1cba..35791facf 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx @@ -21,7 +21,6 @@ import { TabButton, toDecimalPlaces, ProviderIcon, - LootBottle, TokenIcon, } from "@fluidity-money/surfing"; import { useState, useContext, useEffect, useMemo } from "react"; @@ -466,11 +465,7 @@ export default function Home() { className="table-address" href={`/${network}/dashboard/airdrop`} > - + { lootboxCount } ) : ( - diff --git a/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx b/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx index 044c8fff0..6aa2a57f3 100644 --- a/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx @@ -73,6 +73,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { const { data: globalLeaderboardData, errors: globalLeaderboardErrors } = await useAllQuery(); + console.log("globalLeaderboardErrors", globalLeaderboardErrors); + if (!globalLeaderboardData || globalLeaderboardErrors) throw globalLeaderboardErrors; @@ -87,6 +89,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { !address || leaderboard.find(({ user: rowAddress }) => rowAddress === address) ) { + console.log("returning leaderboard early", leaderboard); return json({ leaderboard, loaded: true, @@ -96,6 +99,8 @@ export const loader: LoaderFunction = async ({ params, request }) => { const { data: userLeaderboardData, errors: userLeaderboardErrors } = await useUserQuery(address); + console.log("userLeaderboardErrors", userLeaderboardErrors); + if (!userLeaderboardData || userLeaderboardErrors) throw userLeaderboardErrors; @@ -119,11 +124,14 @@ export const loader: LoaderFunction = async ({ params, request }) => { ] ).concat(leaderboard); + console.log("asssssssss", jointLeaderboardData); + return json({ leaderboard: jointLeaderboardData, loaded: true, } satisfies AirdropLeaderboardLoaderData); } catch (err) { + console.log("err", err); captureException(new Error(`Could not fetch airdrop data: ${err}`), { tags: { section: "network/index", From 2ca9c655b69f0af874998f7071b136e88c33be43 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 00:47:09 +1030 Subject: [PATCH 14/19] Remove extraneous logging --- .../$network/query/dashboard/airdropLeaderboard.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx b/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx index 6aa2a57f3..044c8fff0 100644 --- a/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/dashboard/airdropLeaderboard.tsx @@ -73,8 +73,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { const { data: globalLeaderboardData, errors: globalLeaderboardErrors } = await useAllQuery(); - console.log("globalLeaderboardErrors", globalLeaderboardErrors); - if (!globalLeaderboardData || globalLeaderboardErrors) throw globalLeaderboardErrors; @@ -89,7 +87,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { !address || leaderboard.find(({ user: rowAddress }) => rowAddress === address) ) { - console.log("returning leaderboard early", leaderboard); return json({ leaderboard, loaded: true, @@ -99,8 +96,6 @@ export const loader: LoaderFunction = async ({ params, request }) => { const { data: userLeaderboardData, errors: userLeaderboardErrors } = await useUserQuery(address); - console.log("userLeaderboardErrors", userLeaderboardErrors); - if (!userLeaderboardData || userLeaderboardErrors) throw userLeaderboardErrors; @@ -124,14 +119,11 @@ export const loader: LoaderFunction = async ({ params, request }) => { ] ).concat(leaderboard); - console.log("asssssssss", jointLeaderboardData); - return json({ leaderboard: jointLeaderboardData, loaded: true, } satisfies AirdropLeaderboardLoaderData); } catch (err) { - console.log("err", err); captureException(new Error(`Could not fetch airdrop data: ${err}`), { tags: { section: "network/index", From 39a9bc9a2193c736a73927b3c47bb0bd15231c75 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 00:47:35 +1030 Subject: [PATCH 15/19] Remove rewardTier --- web/app.fluidity.money/app/routes/$network/dashboard/home.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx index 35791facf..0c30c7f6d 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/home.tsx @@ -376,7 +376,6 @@ export default function Home() { logo, utilityTokens, application, - rewardTier, lootboxCount, } = data; From 3a58af3489a8950db2e8446c5303637a284cabf4 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 14:06:07 +1030 Subject: [PATCH 16/19] Remove errornous lootbottle from the rewards tab --- .../app/routes/$network/dashboard/rewards/index.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx index a9d1ab7a5..b0638525c 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx @@ -38,7 +38,6 @@ import { WalletIcon, TabButton, toDecimalPlaces, - LootBottle, } from "@fluidity-money/surfing"; import { useContext, useEffect, useState, useMemo } from "react"; import { ToolTipContent, useToolTip, UtilityToken } from "~/components"; @@ -435,7 +434,6 @@ export default function Rewards() { utilityTokens, application, lootboxCount, - rewardTier, } = data; const toolTip = useToolTip(); @@ -549,11 +547,7 @@ export default function Rewards() { className="table-address" href={`/${network}/dashboard/airdrop`} > - + { lootboxCount } ) : ( - From 9b0bda04fbbc0d8a7552a0a607fa0157da180355 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 14:07:06 +1030 Subject: [PATCH 17/19] Enclose in text --- .../app/routes/$network/dashboard/rewards/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx index b0638525c..ce178599b 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx @@ -547,7 +547,7 @@ export default function Rewards() { className="table-address" href={`/${network}/dashboard/airdrop`} > - { lootboxCount } + { lootboxCount } ) : ( - From 66cea87c1cf8eddae591ff1966f3ab37928af2e9 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 16:46:54 +1030 Subject: [PATCH 18/19] Restore the lootbottles to their former glory --- web/app.fluidity.money/app/queries/index.ts | 1 + web/app.fluidity.money/app/queries/useLootBottles.ts | 2 +- .../app/queries/useUserActionsAggregate.ts | 3 ++- web/app.fluidity.money/app/queries/useUserTransactions.ts | 6 ++++-- .../app/routes/$network/dashboard/rewards/index.tsx | 8 +++++++- .../app/routes/$network/query/userTransactions.tsx | 6 ++++-- .../app/routes/$network/query/winningUserTransactions.tsx | 6 ++++-- web/app.fluidity.money/app/types/Transaction.ts | 4 +++- 8 files changed, 26 insertions(+), 10 deletions(-) diff --git a/web/app.fluidity.money/app/queries/index.ts b/web/app.fluidity.money/app/queries/index.ts index a959ac1e8..38b9ba46c 100644 --- a/web/app.fluidity.money/app/queries/index.ts +++ b/web/app.fluidity.money/app/queries/index.ts @@ -10,3 +10,4 @@ export * from "./addReferral"; export * from "./useReferralCode"; export * from "./addReferralCode"; export * from "./useLootboxConfig"; +export * from "./useLootBottles"; diff --git a/web/app.fluidity.money/app/queries/useLootBottles.ts b/web/app.fluidity.money/app/queries/useLootBottles.ts index 6f5025298..4d185b26d 100644 --- a/web/app.fluidity.money/app/queries/useLootBottles.ts +++ b/web/app.fluidity.money/app/queries/useLootBottles.ts @@ -14,7 +14,7 @@ const QUERY_BY_TX_HASH = gql` export type Lootbox = { txHash?: string; lootboxCount: number; - rewardTier: number; + rewardTier: Rarity; }; type LootboxesByTxHashBody = { diff --git a/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts b/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts index 9434d0137..79ed2a061 100644 --- a/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts +++ b/web/app.fluidity.money/app/queries/useUserActionsAggregate.ts @@ -1,5 +1,6 @@ import Transaction from "~/types/Transaction"; import { fetchGqlEndpoint, gql, jsonPost, Queryable } from "~/util"; +import { Rarity } from "@fluidity-money/surfing"; export type AggregatedTransaction = Omit< Transaction, @@ -10,7 +11,7 @@ export type AggregatedTransaction = Omit< swap_in: boolean; type: "send" | "swap"; timestamp: string; - rewardTier: number; + rewardTier: Rarity; lootboxCount: number; }; diff --git a/web/app.fluidity.money/app/queries/useUserTransactions.ts b/web/app.fluidity.money/app/queries/useUserTransactions.ts index c83278903..8ae3d87a2 100644 --- a/web/app.fluidity.money/app/queries/useUserTransactions.ts +++ b/web/app.fluidity.money/app/queries/useUserTransactions.ts @@ -8,7 +8,9 @@ import { getTokenFromAddress, Token, } from "~/util/chainUtils/tokens"; +import { Rarity } from "@fluidity-money/surfing"; import { MintAddress } from "~/types/MintAddress"; +import { translateRewardTierToRarity } from "./useLootBottles"; const queryByAddress: Queryable = { arbitrum: gql` @@ -359,7 +361,7 @@ export type UserTransaction = { currency: { symbol: string }; application: string; lootboxCount: number; - rewardTier: number; + rewardTier: Rarity; }; type HasuraUserTransaction = { @@ -550,7 +552,7 @@ const parseHasuraUserTransactions = ( }, application: transfer.application, lootboxCount: transfer.lootboxCount, - rewardTier: transfer.rewardTier, + rewardTier: translateRewardTierToRarity(transfer.rewardTier), }; }), }, diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx index ce178599b..a9d1ab7a5 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/rewards/index.tsx @@ -38,6 +38,7 @@ import { WalletIcon, TabButton, toDecimalPlaces, + LootBottle, } from "@fluidity-money/surfing"; import { useContext, useEffect, useState, useMemo } from "react"; import { ToolTipContent, useToolTip, UtilityToken } from "~/components"; @@ -434,6 +435,7 @@ export default function Rewards() { utilityTokens, application, lootboxCount, + rewardTier, } = data; const toolTip = useToolTip(); @@ -547,7 +549,11 @@ export default function Rewards() { className="table-address" href={`/${network}/dashboard/airdrop`} > - { lootboxCount } + ) : ( - diff --git a/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx index 2000c80a1..1cdb53205 100644 --- a/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx @@ -12,6 +12,7 @@ import { useUserRewardsByAddress, useUserTransactionsAll, useUserTransactionsByAddress, + translateRewardTierToRarity } from "~/queries"; import { captureException } from "@sentry/react"; import { MintAddress } from "~/types/MintAddress"; @@ -24,6 +25,7 @@ import { useUserActionsAll, useUserActionsByAddress, } from "~/queries/useUserActionsAggregate"; +import { Rarity } from "@fluidity-money/surfing"; import { chainType } from "~/util/chainUtils/chains"; const FLUID_UTILITY = "FLUID"; @@ -38,7 +40,7 @@ type UserTransaction = { value: number; currency: string; application: string; - rewardTier: number; + rewardTier: Rarity; lootboxCount: number; }; @@ -377,7 +379,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { currency, application, lootboxCount, - rewardTier, + rewardTier: translateRewardTierToRarity(Object.values(Rarity).indexOf(rewardTier)), }; } ); diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index 1bd542780..75be12448 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -8,7 +8,9 @@ import { useUserRewardsAll, useUserRewardsByAddress, useUserTransactionsByTxHash, + translateRewardTierToRarity } from "~/queries"; +import { Rarity } from "@fluidity-money/surfing"; import { captureException } from "@sentry/react"; import { MintAddress } from "~/types/MintAddress"; import { Winner } from "~/queries/useUserRewards"; @@ -26,7 +28,7 @@ type UserTransaction = { value: number; currency: string; application: string; - rewardTier: number; + rewardTier: Rarity; lootboxCount: number; }; @@ -227,7 +229,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { currency, application, lootboxCount, - rewardTier, + rewardTier: translateRewardTierToRarity(Object.values(Rarity).indexOf(rewardTier)), }; } ); diff --git a/web/app.fluidity.money/app/types/Transaction.ts b/web/app.fluidity.money/app/types/Transaction.ts index 47597bc68..5c01555eb 100644 --- a/web/app.fluidity.money/app/types/Transaction.ts +++ b/web/app.fluidity.money/app/types/Transaction.ts @@ -1,3 +1,5 @@ +import { Rarity } from "@fluidity-money/surfing"; + type Transaction = { sender: string; receiver: string; @@ -14,7 +16,7 @@ type Transaction = { swapType?: "in" | "out"; utilityTokens?: { [tokens: string]: number }; application: string; - rewardTier: number; + rewardTier: Rarity; lootboxCount: number; }; From 8252cfa7727bece046a15036e348d6a155e678e9 Mon Sep 17 00:00:00 2001 From: user Date: Thu, 11 Jan 2024 18:22:26 +1030 Subject: [PATCH 19/19] Final work to prepare the launch of the airdrop v2 --- ..._reward_ambassadors_and_launch_epoch_2.sql | 83 +++++++++++++++++++ lib/databases/timescale/lootboxes/rewards.go | 2 +- .../$network/dashboard/airdrop/index.tsx | 6 +- .../$network/query/userTransactions.tsx | 7 +- .../query/winningUserTransactions.tsx | 7 +- web/app.fluidity.money/config.toml | 2 +- 6 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 database/102-up-timescale/20240111140041-lootbottles_reward_ambassadors_and_launch_epoch_2.sql diff --git a/database/102-up-timescale/20240111140041-lootbottles_reward_ambassadors_and_launch_epoch_2.sql b/database/102-up-timescale/20240111140041-lootbottles_reward_ambassadors_and_launch_epoch_2.sql new file mode 100644 index 000000000..8c13f97e4 --- /dev/null +++ b/database/102-up-timescale/20240111140041-lootbottles_reward_ambassadors_and_launch_epoch_2.sql @@ -0,0 +1,83 @@ + +-- migrate:up + +INSERT INTO lootbox ( + address, + source, + awarded_time, + volume, + reward_tier, + lootbox_count, + application, + epoch +) + +VALUES + ('0x75964ac8cc1676eb51451f25faaaefd40ccde602', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x75964ac8cc1676eb51451f25faaaefd40ccde602', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x75964ac8cc1676eb51451f25faaaefd40ccde602', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x75964ac8cc1676eb51451f25faaaefd40ccde602', 'airdrop', timezone('utc', now()), 0, 4, 1, 'none', 'epoch_2'), + ('0xd1d13003128cb454ff562850f86413498c1ebedf', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0xd1d13003128cb454ff562850f86413498c1ebedf', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0xd1d13003128cb454ff562850f86413498c1ebedf', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x8cb42fe548bb51ca4125eac3c14cf177b2b183d8', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x8cb42fe548bb51ca4125eac3c14cf177b2b183d8', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x8cb42fe548bb51ca4125eac3c14cf177b2b183d8', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0xb363335ff6e0a91f870c200bf6fcb38d1fd0f346', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0xb363335ff6e0a91f870c200bf6fcb38d1fd0f346', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0xb363335ff6e0a91f870c200bf6fcb38d1fd0f346', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x2d0eb64ffc36339a15c531b64fd55404ca7f8f62', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x2d0eb64ffc36339a15c531b64fd55404ca7f8f62', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x2d0eb64ffc36339a15c531b64fd55404ca7f8f62', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x32f5de0d8f24094c660979ae34772985a1a8c831', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x32f5de0d8f24094c660979ae34772985a1a8c831', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x32f5de0d8f24094c660979ae34772985a1a8c831', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x2da7958dc2a33e7720935102107f0886e8ab6574', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x2da7958dc2a33e7720935102107f0886e8ab6574', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x2da7958dc2a33e7720935102107f0886e8ab6574', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0xf6352e3a8e502b93af36821cc6f45d6f37ac4aed', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0xf6352e3a8e502b93af36821cc6f45d6f37ac4aed', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0xf6352e3a8e502b93af36821cc6f45d6f37ac4aed', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0xef05ee60799ea122db2ace21425f6d4991dd3805', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0xef05ee60799ea122db2ace21425f6d4991dd3805', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0xef05ee60799ea122db2ace21425f6d4991dd3805', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x0b0154cbfaba8a18caf5fcba2b83ce383c1a0095', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x0b0154cbfaba8a18caf5fcba2b83ce383c1a0095', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x0b0154cbfaba8a18caf5fcba2b83ce383c1a0095', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'), + ('0x225e02bd307a5af7608ceff02a4e48ba06be4ddd', 'airdrop', timezone('utc', now()), 0, 1, 100, 'none', 'epoch_2'), + ('0x225e02bd307a5af7608ceff02a4e48ba06be4ddd', 'airdrop', timezone('utc', now()), 0, 2, 50, 'none', 'epoch_2'), + ('0x225e02bd307a5af7608ceff02a4e48ba06be4ddd', 'airdrop', timezone('utc', now()), 0, 3, 10, 'none', 'epoch_2'); + +INSERT INTO lootbox_config ( + is_current_program, + program_begin, + program_end, + epoch_identifier, + ethereum_application +) + +VALUES ( + FALSE, + CURRENT_TIMESTAMP, + CURRENT_TIMESTAMP + INTERVAL '30 days', + 'epoch_2', + 'none' +); + +-- migrate:down + +DELETE FROM lootbox +WHERE + (address = '0x75964ac8cc1676eb51451f25faaaefd40ccde602' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x75964ac8cc1676eb51451f25faaaefd40ccde602' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x75964ac8cc1676eb51451f25faaaefd40ccde602' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') OR (address = '0x75964ac8cc1676eb51451f25faaaefd40ccde602' AND source = 'airdrop' AND reward_tier = 4 AND lootbox_count = 1 AND epoch = 'epoch_2') + OR (address = '0xd1d13003128cb454ff562850f86413498c1ebedf' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0xd1d13003128cb454ff562850f86413498c1ebedf' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0xd1d13003128cb454ff562850f86413498c1ebedf' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0x8cb42fe548bb51ca4125eac3c14cf177b2b183d8' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x8cb42fe548bb51ca4125eac3c14cf177b2b183d8' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x8cb42fe548bb51ca4125eac3c14cf177b2b183d8' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0xb363335ff6e0a91f870c200bf6fcb38d1fd0f346' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0xb363335ff6e0a91f870c200bf6fcb38d1fd0f346' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0xb363335ff6e0a91f870c200bf6fcb38d1fd0f346' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0x2d0eb64ffc36339a15c531b64fd55404ca7f8f62' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x2d0eb64ffc36339a15c531b64fd55404ca7f8f62' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x2d0eb64ffc36339a15c531b64fd55404ca7f8f62' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0x32f5de0d8f24094c660979ae34772985a1a8c831' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x32f5de0d8f24094c660979ae34772985a1a8c831' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x32f5de0d8f24094c660979ae34772985a1a8c831' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0x2da7958dc2a33e7720935102107f0886e8ab6574' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x2da7958dc2a33e7720935102107f0886e8ab6574' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x2da7958dc2a33e7720935102107f0886e8ab6574' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0xf6352e3a8e502b93af36821cc6f45d6f37ac4aed' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0xf6352e3a8e502b93af36821cc6f45d6f37ac4aed' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0xf6352e3a8e502b93af36821cc6f45d6f37ac4aed' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0xef05ee60799ea122db2ace21425f6d4991dd3805' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0xef05ee60799ea122db2ace21425f6d4991dd3805' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0xef05ee60799ea122db2ace21425f6d4991dd3805' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0x0b0154cbfaba8a18caf5fcba2b83ce383c1a0095' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x0b0154cbfaba8a18caf5fcba2b83ce383c1a0095' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x0b0154cbfaba8a18caf5fcba2b83ce383c1a0095' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + OR (address = '0x225e02bd307a5af7608ceff02a4e48ba06be4ddd' AND source = 'airdrop' AND reward_tier = 1 AND lootbox_count = 100 AND epoch = 'epoch_2') OR (address = '0x225e02bd307a5af7608ceff02a4e48ba06be4ddd' AND source = 'airdrop' AND reward_tier = 2 AND lootbox_count = 50 AND epoch = 'epoch_2') OR (address = '0x225e02bd307a5af7608ceff02a4e48ba06be4ddd' AND source = 'airdrop' AND reward_tier = 3 AND lootbox_count = 10 AND epoch = 'epoch_2') + +DELETE FROM lootbox_config WHERE epoch_identifier = 'epoch_2'; diff --git a/lib/databases/timescale/lootboxes/rewards.go b/lib/databases/timescale/lootboxes/rewards.go index a9ac2ed5c..d5887f843 100644 --- a/lib/databases/timescale/lootboxes/rewards.go +++ b/lib/databases/timescale/lootboxes/rewards.go @@ -317,8 +317,8 @@ func UpdateOrInsertAmountsRewarded(network_ network.BlockchainNetwork, lootboxCu lootboxCurrentEpoch, tokenShortName, amountNormalLossy, - application, winnerAddress, + application, ) if err != nil { diff --git a/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx b/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx index e0a4a2b1a..81dec1ff4 100644 --- a/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx +++ b/web/app.fluidity.money/app/routes/$network/dashboard/airdrop/index.tsx @@ -24,6 +24,8 @@ import { BloomEffect, toSignificantDecimals, useViewport, + numberToMonetaryString, + toDecimalPlaces, } from "@fluidity-money/surfing"; import { BottlesDetailsModal, @@ -1389,7 +1391,7 @@ const airdropRankRow = ( : {} } > - {fusdcEarned} + {numberToMonetaryString(fusdcEarned)} ); @@ -1406,7 +1408,7 @@ const airdropRankRow = ( : {} } > - {arbEarned} + {toDecimalPlaces(arbEarned, 4)} ); diff --git a/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx index 1cdb53205..fdc412bc7 100644 --- a/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/userTransactions.tsx @@ -361,9 +361,12 @@ export const loader: LoaderFunction = async ({ params, request }) => { currency: { symbol: currency }, application, lootboxCount, - rewardTier, + rewardTier: rewardTier_, } = transaction; + const rewardTier = + rewardTier_ ?? translateRewardTierToRarity(Object.values(Rarity).indexOf(rewardTier_)); + return { sender, receiver, @@ -379,7 +382,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { currency, application, lootboxCount, - rewardTier: translateRewardTierToRarity(Object.values(Rarity).indexOf(rewardTier)), + rewardTier }; } ); diff --git a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx index 75be12448..dacce59c3 100644 --- a/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx +++ b/web/app.fluidity.money/app/routes/$network/query/winningUserTransactions.tsx @@ -210,10 +210,13 @@ export const loader: LoaderFunction = async ({ params, request }) => { amount: value, currency: { symbol: currency }, application, - rewardTier, + rewardTier: rewardTier_, lootboxCount } = transaction; + const rewardTier = + rewardTier_ ?? translateRewardTierToRarity(Object.values(Rarity).indexOf(rewardTier_)); + return { sender, receiver, @@ -229,7 +232,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { currency, application, lootboxCount, - rewardTier: translateRewardTierToRarity(Object.values(Rarity).indexOf(rewardTier)), + rewardTier, }; } ); diff --git a/web/app.fluidity.money/config.toml b/web/app.fluidity.money/config.toml index 09eff9ce6..d55563b02 100644 --- a/web/app.fluidity.money/config.toml +++ b/web/app.fluidity.money/config.toml @@ -341,7 +341,7 @@ fUSDT = "https://app.meteora.ag" [liquidity_providers.arbitrum] [[liquidity_providers.arbitrum.providers]] -name= "Trader Joe" +name= "trader_joe" [liquidity_providers.arbitrum.providers.link] fUSDC = "https://traderjoexyz.com/arbitrum/pool/v21/0x4cfa50b7ce747e2d61724fcac57f24b748ff2b2a/0x912ce59144191c1204e64559fe8253a0e49e6548/25"