Skip to content

Commit 24aeb99

Browse files
author
sam
committed
feat(abstracts): update abstractions
1 parent d9109c4 commit 24aeb99

File tree

108 files changed

+575564
-192
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+575564
-192
lines changed

CHANGELOG.md

-7
This file was deleted.

README.md

+69-79
Large diffs are not rendered by default.

docs/README.md

+69-79
Large diffs are not rendered by default.

docs/index.html

+17-14
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
<!DOCTYPE html>
22
<html>
3-
<head>
4-
<meta charset="utf-8">
5-
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
7-
<title>docs</title>
8-
<link rel="stylesheet" href="https://unpkg.com/docute@3/dist/docute.css">
9-
</head>
10-
<body>
11-
<div id="app"></div>
12-
<script src="https://unpkg.com/docute@3/dist/docute.js"></script>
13-
<script>
14-
docute.init()
15-
</script>
16-
</body>
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6+
<meta
7+
name="viewport"
8+
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"
9+
/>
10+
<title>docs</title>
11+
<link rel="stylesheet" href="https://unpkg.com/docute@3/dist/docute.css" />
12+
</head>
13+
<body>
14+
<div id="app"></div>
15+
<script src="https://unpkg.com/docute@3/dist/docute.js"></script>
16+
<script>
17+
docute.init();
18+
</script>
19+
</body>
1720
</html>

dune/abstractions/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Ethereum

dune/abstractions/VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2021.01.30
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
CREATE OR REPLACE VIEW aave.view_atokens (symbol, contract_address, decimals, underlying_token_address) AS VALUES
2+
('aETH'::text, '\x3a3a65aab0dd2a17e3f1947ba16138cd37d08c04'::bytea, 18::numeric, '\xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'::bytea), -- note: using weth contract address here for convenience, actual underlying asset is ETH
3+
('aDAI'::text, '\xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d'::bytea, 18::numeric, '\x6b175474e89094c44da98b954eedeac495271d0f'::bytea),
4+
('aUSDC'::text, '\x9ba00d6856a4edf4665bca2c2309936572473b7e'::bytea, 6::numeric, '\xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'::bytea),
5+
('aSUSD'::text, '\x625ae63000f46200499120b906716420bd059240'::bytea, 18::numeric, '\x57Ab1ec28D129707052df4dF418D58a2D46d5f51'::bytea),
6+
('aTUSD'::text, '\x4da9b813057d04baef4e5800e36083717b4a0341'::bytea, 18::numeric, '\x0000000000085d4780B73119b644AE5ecd22b376'::bytea),
7+
('aUSDT'::text, '\x71fc860F7D3A592A4a98740e39dB31d25db65ae8'::bytea, 6::numeric, '\xdac17f958d2ee523a2206206994597c13d831ec7'::bytea),
8+
('aBUSD'::text, '\x6Ee0f7BB50a54AB5253dA0667B0Dc2ee526C30a8'::bytea, 18::numeric, '\x4fabb145d64652a948d72533023f6e7a623c7c53'::bytea),
9+
('aBAT'::text, '\xe1ba0fb44ccb0d11b80f92f4f8ed94ca3ff51d00'::bytea, 18::numeric, '\x0d8775f648430679a709e98d2b0cb6250d2887ef'::bytea),
10+
('aKNC'::text, '\x9d91be44c06d373a8a226e1f3b146956083803eb'::bytea, 18::numeric, '\xdd974d5c2e2928dea5f71b9825b8b646686bd200'::bytea),
11+
('aLEND'::text, '\x7D2D3688Df45Ce7C552E19c27e007673da9204B8'::bytea, 18::numeric, '\x80fB784B7eD66730e8b1DBd9820aFD29931aab03'::bytea),
12+
('aLINK'::text, '\xA64BD6C70Cb9051F6A9ba1F163Fdc07E0DfB5F84'::bytea, 18::numeric, '\x514910771af9ca656af840dff83e8264ecf986ca'::bytea),
13+
('aMANA'::text, '\x6FCE4A401B6B80ACe52baAefE4421Bd188e76F6f'::bytea, 18::numeric, '\x0f5d2fb29fb7d3cfee444a200298f468908cc942'::bytea),
14+
('aMKR'::text, '\x7deb5e830be29f91e298ba5ff1356bb7f8146998'::bytea, 18::numeric, '\x9f8f72aa9304c8b593d555f12ef6589cc3a579a2'::bytea),
15+
('aREP'::text, '\x71010a9d003445ac60c4e6a7017c1e89a477b438'::bytea, 18::numeric, '\x1985365e9f78359a9B6AD760e32412f4a445E862'::bytea),
16+
('aSNX'::text, '\x328c4c80bc7aca0834db37e6600a6c49e12da4de'::bytea, 18::numeric, '\xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f'::bytea),
17+
('aWBTC'::text, '\xfc4b8ed459e00e5400be803a9bb3954234fd50e3'::bytea, 8::numeric, '\x2260fac5e5542a773aa44fbcfedf7c193bc2c599'::bytea),
18+
('aZRX'::text, '\x6Fb0855c404E09c47C3fBCA25f08d4E41f9F062f'::bytea, 18::numeric, '\xe41d2489571d322189246dafa5ebde1f4699f498'::bytea),
19+
('aAAVE'::text, '\xba3D9687Cf50fE253cd2e1cFeEdE1d6787344Ed5'::bytea, 18::numeric, '\x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9'::bytea),
20+
('aUNI'::text, '\xB124541127A0A657f056D9Dd06188c4F1b0e5aab'::bytea, 18::numeric, '\x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'::bytea),
21+
('aYFI'::text, '\x12e51E77DAAA58aA0E9247db7510Ea4B46F9bEAd'::bytea, 18::numeric, '\x0bc529c00c6401aef6d220be8c6ea1667f6ad93e'::bytea),
22+
('aENJ'::text, '\x712db54daa836b53ef1ecbb9c6ba3b9efb073f40'::bytea, 18::numeric, '\xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c'::bytea)
23+
;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
--creating a custom table to map layers to their respective "master" artwork
2+
--the v2 contract is a upgradeable proxy
3+
4+
CREATE TABLE IF NOT EXISTS async_art_v2.token_mapping (
5+
token_id INT PRIMARY KEY,
6+
token_type VARCHAR(30),
7+
master_id INT,
8+
custom_id VARCHAR(30),
9+
layer_count INT
10+
11+
);
12+
--function to fill table
13+
CREATE OR REPLACE FUNCTION async_art_v2.update_token_mapping () RETURNS void
14+
LANGUAGE plpgsql AS $function$
15+
DECLARE
16+
r record;
17+
t_id int;
18+
type_art VARCHAR(30);
19+
result int;
20+
custom_id VARCHAR(30);
21+
c int;
22+
23+
24+
--selecting out of artworks and layers
25+
BEGIN
26+
FOR r IN select * from
27+
(SELECT
28+
token_id,
29+
CASE
30+
WHEN token_id IN (SELECT
31+
artwork_id
32+
FROM
33+
--this is only artworksv2
34+
(
35+
SELECT
36+
"masterTokenId" as artwork_id
37+
, call_success
38+
FROM async_art_v2."AsyncArtwork_v2_call_mintArtwork"
39+
WHERE call_success ='true'
40+
UNION
41+
--this is only artworksv1
42+
SELECT
43+
"artworkTokenId" as artwork_id
44+
, call_success
45+
FROM async."AsyncArtwork_call_mintArtwork"
46+
WHERE call_success ='true'
47+
) as artworks
48+
) THEN 'artwork'
49+
WHEN NOT token_id IN (SELECT
50+
artwork_id
51+
FROM
52+
(
53+
SELECT
54+
"masterTokenId" as artwork_id
55+
, call_success
56+
FROM async_art_v2."AsyncArtwork_v2_call_mintArtwork"
57+
WHERE call_success ='true'
58+
UNION
59+
SELECT
60+
"artworkTokenId" as artwork_id
61+
, call_success
62+
FROM async."AsyncArtwork_call_mintArtwork"
63+
WHERE call_success ='true'
64+
) as artworks
65+
) THEN 'layer'
66+
END as "token_type"
67+
From
68+
69+
(
70+
--all minted tokens in v1 and v2, this includes layers
71+
SELECT
72+
"tokenId" as token_id
73+
74+
FROM async_art_v2."AsyncArtwork_v2_evt_Transfer"
75+
WHERE "from" = '\x0000000000000000000000000000000000000000'
76+
77+
UNION
78+
79+
SELECT
80+
"tokenId" as token_id
81+
82+
FROM async."AsyncArtwork_evt_Transfer"
83+
WHERE "from" = '\x0000000000000000000000000000000000000000'
84+
85+
order by 1 asc
86+
) as x) as y order by 1 asc
87+
88+
89+
--loop to fill table and assign custom ID's
90+
LOOP
91+
92+
t_id = r.token_id;
93+
type_art = r.token_type;
94+
95+
96+
if r.token_type = 'artwork' then
97+
result := r.token_id;
98+
c := 0;
99+
custom_id:= CONCAT(r.token_id, '_', c);
100+
end if;
101+
102+
if r.token_type = 'layer' then
103+
c := c + 1;
104+
custom_id:= CONCAT(r.token_id, '_', c);
105+
end if;
106+
107+
insert into async_art_v2.token_mapping (token_ID, token_type, master_id, custom_id, layer_count)
108+
VALUES
109+
(t_id, type_art,result, custom_id, c)
110+
ON CONFLICT (token_id) DO UPDATE SET token_id=EXCLUDED.token_id, token_type=EXCLUDED.token_type;
111+
END LOOP;
112+
END;
113+
$function$;
114+
115+
--insert into automated update schedule
116+
INSERT INTO cron.job (schedule, command)
117+
VALUES ('59 * * * *', $$SELECT async_art_v2.update_token_mapping();$$)
118+
ON CONFLICT (command) DO UPDATE SET schedule=EXCLUDED.schedule;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
CREATE OR REPLACE VIEW balancer.view_add_liquidity AS
2+
SELECT
3+
a.caller AS liquidity_provider,
4+
a.contract_address AS exchange_address,
5+
a."tokenAmountIn" / 10 ^ t.decimals AS token_amount,
6+
(a."tokenAmountIn" / 10 ^ t.decimals) * p.price AS usd_amount,
7+
t.symbol AS token_symbol,
8+
a.evt_tx_hash AS tx_hash,
9+
a.evt_block_time AS block_time
10+
FROM
11+
balancer."BPool_evt_LOG_JOIN" a
12+
LEFT JOIN erc20.tokens t ON t.contract_address = a."tokenIn"
13+
LEFT JOIN prices.usd p ON date_trunc('minute', a.evt_block_time) = p.minute AND p.contract_address = t.contract_address
14+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
CREATE OR REPLACE VIEW balancer.view_pools_tokens_weights AS
2+
with events as (
3+
-- binds
4+
select call_block_number as block_number, index, call_trace_address,
5+
contract_address as pool, token, denorm
6+
from balancer."BPool_call_bind"
7+
INNER JOIN ethereum.transactions ON call_tx_hash = hash
8+
where call_success
9+
10+
union all
11+
12+
-- rebinds
13+
select call_block_number as block_number, index, call_trace_address,
14+
contract_address as pool, token, denorm
15+
from balancer."BPool_call_rebind"
16+
INNER JOIN ethereum.transactions ON call_tx_hash = hash
17+
where call_success
18+
19+
union all
20+
21+
-- unbinds
22+
select call_block_number as block_number, index, call_trace_address,
23+
contract_address as pool, token, 0 as denorm
24+
from balancer."BPool_call_unbind"
25+
INNER JOIN ethereum.transactions ON call_tx_hash = hash
26+
where call_success
27+
),
28+
state_with_gaps as (
29+
select events.block_number, events.pool, events.token, events.denorm,
30+
LEAD(cast(events.block_number as text), '1', '99999999') over (
31+
partition by events.pool, events.token
32+
order by events.block_number, index, call_trace_address) as next_block_number
33+
from events
34+
),
35+
settings as (
36+
select pool,
37+
token,
38+
denorm
39+
from state_with_gaps s
40+
where next_block_number = '99999999'
41+
and denorm > 0
42+
),
43+
sum_denorm as (
44+
select pool, sum(denorm) as sum_denorm
45+
from state_with_gaps s
46+
where next_block_number = '99999999'
47+
and denorm > 0
48+
group by pool
49+
),
50+
norm_weights as (
51+
select settings.pool AS pool_address, token AS token_address, denorm/sum_denorm as normalized_weight
52+
from settings inner join sum_denorm on settings.pool = sum_denorm.pool
53+
)
54+
select * from norm_weights
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
CREATE OR REPLACE VIEW balancer.view_remove_liquidity AS
2+
SELECT
3+
a.caller AS liquidity_provider,
4+
a.contract_address AS exchange_address,
5+
a."tokenAmountOut" / 10 ^ t.decimals AS token_amount,
6+
(a."tokenAmountOut" / 10 ^ t.decimals) * p.price AS usd_amount,
7+
t.symbol AS token_symbol,
8+
a.evt_tx_hash AS tx_hash,
9+
a.evt_block_time AS block_time
10+
FROM
11+
balancer."BPool_evt_LOG_EXIT" a
12+
LEFT JOIN erc20.tokens t ON t.contract_address = a."tokenOut"
13+
LEFT JOIN prices.usd p ON date_trunc('minute', a.evt_block_time) = p.minute AND p.contract_address = t.contract_address
14+
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
CREATE OR REPLACE VIEW balancer.view_swaps AS
2+
SELECT
3+
block_time,
4+
token_a_symbol,
5+
token_b_symbol,
6+
token_a_amount,
7+
token_b_amount,
8+
trader_a,
9+
trader_b,
10+
token_a_amount_raw,
11+
token_b_amount_raw,
12+
usd_amount,
13+
token_a_address,
14+
token_b_address,
15+
exchange_contract_address AS contract_address,
16+
tx_hash,
17+
tx_from,
18+
trace_address,
19+
evt_index
20+
FROM dex.trades
21+
WHERE project = 'Balancer'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
CREATE OR REPLACE VIEW bancornetwork.view_add_convertible_token AS
2+
WITH convertible_tokens AS (
3+
SELECT *
4+
FROM bancornetwork."BancorConverterRegistry_v3_evt_ConvertibleTokenAdded"
5+
UNION ALL
6+
SELECT *
7+
FROM bancornetwork."BancorConverterRegistry_v4_evt_ConvertibleTokenAdded"
8+
UNION ALL
9+
SELECT *
10+
FROM bancornetwork."BancorConverterRegistry_v5_evt_ConvertibleTokenAdded"
11+
UNION ALL
12+
SELECT *
13+
FROM bancornetwork."BancorConverterRegistry_v6_evt_ConvertibleTokenAdded"
14+
UNION ALL
15+
SELECT *
16+
FROM bancornetwork."BancorConverterRegistry_v7_evt_ConvertibleTokenAdded"
17+
)
18+
SELECT "_convertibleToken" AS convertible_token,
19+
symbol,
20+
decimals,
21+
"_smartToken" AS smart_token,
22+
s.contract_address,
23+
evt_tx_hash AS tx_hash,
24+
evt_block_time AS block_time
25+
FROM convertible_tokens s
26+
LEFT JOIN erc20.tokens t ON s."_convertibleToken" = t.contract_address
27+
;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
CREATE OR REPLACE VIEW bancornetwork.view_add_liquidity_pool AS
2+
WITH liquidity_pool_added AS (
3+
SELECT *
4+
FROM bancornetwork."BancorConverterRegistry_v3_evt_LiquidityPoolAdded"
5+
UNION ALL
6+
SELECT *
7+
FROM bancornetwork."BancorConverterRegistry_v4_evt_LiquidityPoolAdded"
8+
UNION ALL
9+
SELECT *
10+
FROM bancornetwork."BancorConverterRegistry_v5_evt_LiquidityPoolAdded"
11+
UNION ALL
12+
SELECT *
13+
FROM bancornetwork."BancorConverterRegistry_v6_evt_LiquidityPoolAdded"
14+
UNION ALL
15+
SELECT *
16+
FROM bancornetwork."BancorConverterRegistry_v7_evt_LiquidityPoolAdded"
17+
)
18+
SELECT r."exchange_token",
19+
r."exchange_token_symbol",
20+
r."exchange_token_decimals",
21+
r."base_token",
22+
r."base_token_symbol",
23+
r."base_token_decimals",
24+
"_liquidityPool" AS liquidity_pool,
25+
q.contract_address,
26+
q.evt_tx_hash AS tx_hash,
27+
q.evt_block_time AS block_time
28+
FROM liquidity_pool_added q
29+
LEFT JOIN
30+
(SELECT DISTINCT ON (s.smart_token) s.convertible_token AS "exchange_token",
31+
t2.symbol AS "exchange_token_symbol",
32+
t2.decimals AS "exchange_token_decimals",
33+
p.convertible_token AS "base_token",
34+
p.symbol AS "base_token_symbol",
35+
p.decimals AS "base_token_decimals",
36+
s.smart_token
37+
FROM bancornetwork.view_add_convertible_token s
38+
INNER JOIN
39+
(SELECT *
40+
FROM bancornetwork.view_add_convertible_token
41+
) p ON s.smart_token = p.smart_token
42+
AND s.convertible_token != p.convertible_token
43+
AND (s.convertible_token NOT IN ('\x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
44+
'\x309627af60f0926daa6041b8279484312f2bf060')
45+
OR (s.convertible_token = '\x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c'
46+
AND p.convertible_token = '\x309627af60f0926daa6041b8279484312f2bf060'))
47+
LEFT JOIN erc20.tokens t2 ON s.convertible_token = t2.contract_address) r ON q."_liquidityPool" = r.smart_token
48+
;
49+
50+
-- use BNT and USDB as base token for convenience
51+
-- add exception for the case USDB <> BNT

0 commit comments

Comments
 (0)