Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 28 additions & 18 deletions apps/server/src/api/protocols/users/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ export default defineCachedEventHandler(async (event) => {
}));

return stats;
}, apiCacheConfig);
// }, apiCacheConfig);
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO

});

interface QueryParams {
limit: number;
Expand All @@ -63,22 +64,29 @@ const getProtocolUsersDirect = async ({
}

const result = await sql`
SELECT
dapps.id as protocol_name,
COUNT(DISTINCT txs.sender_address) AS unique_senders
FROM
txs
JOIN
dapps ON txs.contract_call_contract_id = ANY (dapps.contracts)
WHERE
txs.type_id = 2
${sql.unsafe(dateCondition)}
GROUP BY
dapps.id
ORDER BY
unique_senders DESC
LIMIT ${limit};
`;
WITH protocol_contracts AS (
SELECT id, UNNEST(contracts) AS contract_address
FROM dapps
)

SELECT
protocol_contracts.id as protocol_name,
COUNT(DISTINCT txs.sender_address) AS unique_senders
FROM
txs
JOIN
protocol_contracts ON txs.contract_call_contract_id LIKE protocol_contracts.contract_address
WHERE
txs.type_id = 2
${sql.unsafe(dateCondition)}
GROUP BY
protocol_contracts.id
ORDER BY
unique_senders DESC
LIMIT ${limit};
`;

console.log("result", JSON.stringify(result, null, 2));

return result;
};
Expand Down Expand Up @@ -125,7 +133,7 @@ address_txs AS (
SELECT tx_id, index_block_hash, microblock_hash, recipient
FROM nft_events
) sub
JOIN protocol_contracts ON sub.address = protocol_contracts.contract_address
JOIN protocol_contracts ON sub.address LIKE protocol_contracts.contract_address
)

SELECT
Expand All @@ -147,5 +155,7 @@ ORDER BY
LIMIT ${limit};
`;

console.log("result", JSON.stringify(result, null, 2));

return result;
};
15 changes: 10 additions & 5 deletions apps/server/src/api/transactions/index.get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ type TransactionsRouteResponse = (ContractCallTransaction & {
export default defineCachedEventHandler(async (event) => {
const query = await getValidatedQueryZod(event, transactionsRouteSchema);

let protocolCondition = "";
let protocolContractsCondition = "";
if (query.protocol) {
protocolCondition = `AND dapps.id = '${query.protocol}'`;
protocolContractsCondition = `WHERE id = '${query.protocol}'`;
}

const result = await sql<
Expand All @@ -28,16 +28,21 @@ export default defineCachedEventHandler(async (event) => {
tx_id: Buffer;
}[]
>`
WITH protocol_contracts AS (
SELECT id, UNNEST(contracts) AS contract_address
FROM dapps
${sql.unsafe(protocolContractsCondition)}
)

SELECT
dapps.id as protocol,
protocol_contracts.id as protocol,
tx_id
FROM
txs
JOIN
dapps ON txs.contract_call_contract_id = ANY (dapps.contracts)
protocol_contracts ON txs.contract_call_contract_id LIKE protocol_contracts.contract_address
WHERE
txs.type_id = 2
${sql.unsafe(protocolCondition)}
AND canonical = TRUE
AND microblock_canonical = TRUE
ORDER BY
Expand Down
58 changes: 30 additions & 28 deletions apps/server/src/api/transactions/stats/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,50 +23,52 @@ export default defineCachedEventHandler(async (event) => {

const result = await sql`
WITH protocol_contracts AS (
SELECT UNNEST(contracts) AS contract_address
FROM dapps
${sql.unsafe(protocolContractsCondition)}
SELECT DISTINCT contract_id as contract_address
FROM smart_contracts
WHERE contract_id LIKE ANY (
SELECT contract_address
FROM dapps, UNNEST(contracts) AS contract_address
${sql.unsafe(protocolContractsCondition)}
)
),

address_txs AS (
SELECT DISTINCT tx_id, index_block_hash, microblock_hash
FROM (
SELECT tx_id, index_block_hash, microblock_hash, contract_call_contract_id AS address
FROM txs
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, principal
SELECT tx_id, index_block_hash, microblock_hash
FROM principal_stx_txs
WHERE principal IN (SELECT contract_address FROM protocol_contracts)

UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, sender
FROM stx_events
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, recipient

SELECT tx_id, index_block_hash, microblock_hash
FROM stx_events
WHERE sender IN (SELECT contract_address FROM protocol_contracts)
OR recipient IN (SELECT contract_address FROM protocol_contracts)

UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, sender
FROM ft_events
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, recipient

SELECT tx_id, index_block_hash, microblock_hash
FROM ft_events
WHERE sender IN (SELECT contract_address FROM protocol_contracts)
OR recipient IN (SELECT contract_address FROM protocol_contracts)

UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, sender
FROM nft_events
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, recipient

SELECT tx_id, index_block_hash, microblock_hash
FROM nft_events
) sub
WHERE address IN (SELECT contract_address FROM protocol_contracts)
WHERE sender IN (SELECT contract_address FROM protocol_contracts)
OR recipient IN (SELECT contract_address FROM protocol_contracts)
) combined_events
)

SELECT
COUNT(DISTINCT atxs.tx_id) AS count,
COUNT(DISTINCT address_txs.tx_id) AS count,
COUNT(DISTINCT txs.sender_address) AS unique_senders
FROM
txs
JOIN
address_txs atxs ON atxs.tx_id = txs.tx_id
AND atxs.index_block_hash = txs.index_block_hash
AND atxs.microblock_hash = txs.microblock_hash
FROM address_txs
INNER JOIN txs USING (tx_id, index_block_hash, microblock_hash)
WHERE txs.canonical = TRUE
AND txs.microblock_canonical = TRUE;
`;

const stats: TransactionStatsRouteResponse = {
Expand Down
21 changes: 14 additions & 7 deletions apps/server/src/api/transactions/unique-senders/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,39 +32,46 @@ WITH monthly_blocks AS (
),

protocol_contracts AS (
SELECT UNNEST(contracts) AS contract_address
FROM dapps
WHERE id = ${query.protocol}
SELECT DISTINCT contract_id as contract_address
FROM smart_contracts
WHERE contract_id LIKE ANY (
SELECT contract_address
FROM dapps, UNNEST(contracts) AS contract_address
WHERE id = ${query.protocol}
)
),

address_txs AS (
SELECT DISTINCT tx_id, index_block_hash, microblock_hash
FROM (
SELECT tx_id, index_block_hash, microblock_hash, contract_call_contract_id AS address
FROM txs
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, principal
FROM principal_stx_txs
WHERE principal IN (SELECT contract_address FROM protocol_contracts)
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, sender
FROM stx_events
WHERE sender IN (SELECT contract_address FROM protocol_contracts)
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, recipient
FROM stx_events
WHERE recipient IN (SELECT contract_address FROM protocol_contracts)
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, sender
FROM ft_events
WHERE sender IN (SELECT contract_address FROM protocol_contracts)
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, recipient
FROM ft_events
WHERE recipient IN (SELECT contract_address FROM protocol_contracts)
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, sender
FROM nft_events
WHERE sender IN (SELECT contract_address FROM protocol_contracts)
UNION ALL
SELECT tx_id, index_block_hash, microblock_hash, recipient
FROM nft_events
WHERE recipient IN (SELECT contract_address FROM protocol_contracts)
) sub
WHERE address IN (SELECT contract_address FROM protocol_contracts)
)

SELECT
Expand Down
79 changes: 10 additions & 69 deletions packages/protocols/src/protocols.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,7 @@ export const protocolsInfo: {
"SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-pool-v2-01",
"SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.amm-vault-v2-01",
"SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.amm-swap-pool-v1-1",
"SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.swap-helper-v1-01",
"SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.swap-helper-v1-02",
"SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.swap-helper-v1-03",
"SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.swap-helper-%",
],
},
arkadiko: {
Expand All @@ -47,7 +45,7 @@ export const protocolsInfo: {
website: "https://arkadiko.finance/",
x: "https://twitter.com/ArkadikoFinance",
contracts: [
"SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-swap-v2-1",
"SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-swap-%",
"SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-multi-hop-swap-v1-1",
],
},
Expand All @@ -59,56 +57,14 @@ export const protocolsInfo: {
// List of contract https://docs.bitflow.finance/bitflow-documentation/developers/deployed-contracts/stacks
contracts: [
// StableSwap Contracts
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-stx-ststx-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-stx-ststx-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-usda-susdt-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-aeusdc-susdt-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-usda-aeusdc-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-usda-aeusdc-v-1-4",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-abtc-xbtc-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-abtc-xbtc-v-1-2",
"SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdh-v-1-1",
"SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-pool-aeusdc-usdh-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.stableswap-%",
"SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-%",
// Earn Contracts
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-stx-ststx-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-stx-ststx-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-usda-susdt-v-1-3",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-aeusdc-susdt-v-1-3",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-usda-aeusdc-v-1-3",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-usda-aeusdc-v-1-5",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-abtc-xbtc-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-abtc-xbtc-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-abtc-xbtc-v-1-3",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.earn-%",
// Router Contracts
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-arkadiko-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-velar-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-velar-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-alex-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-alex-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-alex-v-2-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-ststx-bitflow-xyk-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-usda-arkadiko-alex-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stx-usda-arkadiko-velar-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-xyk-arkadiko-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-xyk-velar-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-xyk-alex-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-xyk-alex-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-velar-alex-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-velar-alex-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-aeusdc-ststx-v-2-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-susdt-ststx-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-xyk-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-xyk-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-velar-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-velar-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-alex-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-alex-v-1-2",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-stableswap-usda-aeusdc-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.router-%",
// Wrapper Contracts
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.wrapper-velar-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.wrapper-alex-v-2-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.wrapper-velar-multihop-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.wrapper-arkadiko-v-1-1",
"SPQC38PW542EQJ5M11CR25P7BS1CA6QT4TBXGB3M.wrapper-%",
// Core Contracts
"SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.xyk-core-v-1-1",
"SM1793C4R5PZ4NS4VQ4WMP7SKKYVH8JZEWSZ9HCCR.stableswap-core-v-1-1",
Expand All @@ -121,10 +77,7 @@ export const protocolsInfo: {
"Liquid stacking on Stacks. Earn 10% APY on STX with instant liquidity 📈",
website: "https://www.stackingdao.com/",
x: "https://twitter.com/StackingDao",
contracts: [
"SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-v1",
"SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-v2",
],
contracts: ["SP4SZE494VC2YC5JYG7AYFQ44F5Q4PYV7DVMDPBG.stacking-dao-core-%"],
},
stackswap: {
name: "StackSwap",
Expand All @@ -144,21 +97,9 @@ export const protocolsInfo: {
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-path2",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-core",
// V1
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0001",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0002",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0003",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0004",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0005",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0006",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0007",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0008",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0009",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0010",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0011",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0012",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-v1_0_0-0013",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.univ2-pool-%",
// Stables
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-v1_1_0-0001",
"SP1Y5YSTAHZ88XYK1VPDH24GY0HPX5J4JECTMY4A1.curve-pool-%",
],
},
zest: {
Expand Down