From 0cca25801ebee1e760de6ff91f50357d790a03c0 Mon Sep 17 00:00:00 2001 From: v1nvn Date: Tue, 18 Jun 2024 12:35:31 +0530 Subject: [PATCH] fix: token transfer columns --- .../contrib/debt-dao/generalized_cashflow.py | 10 +- models/contrib/exa/token.py | 8 +- models/contrib/kunlun/uniswap_fee.py | 7 +- models/contrib/neilz/research.py | 46 +- models/credmark/ledger/transfers.py | 36 -- models/credmark/tokens/netflow.py | 33 +- models/credmark/tokens/transaction.py | 10 +- models/credmark/tokens/volume.py | 26 +- notebook/demo.ipynb | 542 +++++++----------- 9 files changed, 276 insertions(+), 442 deletions(-) diff --git a/models/contrib/debt-dao/generalized_cashflow.py b/models/contrib/debt-dao/generalized_cashflow.py index 778398d9..984b6be4 100644 --- a/models/contrib/debt-dao/generalized_cashflow.py +++ b/models/contrib/debt-dao/generalized_cashflow.py @@ -18,7 +18,7 @@ class Config: @Model.describe( slug='contrib.debt-dao-generalized-cashflow', - version='1.2', + version='1.3', display_name='Generalized Cashflow', description='Tracks cashflow from sender address to receiver address.', category='protocol', @@ -30,8 +30,8 @@ class GeneralizedCashflow(Model): def run(self, input: GCInput) -> dict: with self.context.ledger.TokenTransfer as q: transfers = q.select( + aggregates=[(q.RAW_AMOUNT, 'value')], columns=[q.BLOCK_NUMBER, - q.VALUE, q.TOKEN_ADDRESS, q.TRANSACTION_HASH], where=q.TO_ADDRESS.eq(input.receiver_address).and_( @@ -48,7 +48,9 @@ def run(self, input: GCInput) -> dict: transfer['price'] = 0 if transfer['price'] is None: transfer['price'] = 0 - transfer['value_usd'] = transfer['price'] * float(transfer['value']) / (10 ** token.decimals) - transfer['block_time'] = str(BlockNumber(int(transfer['block_number'])).timestamp_datetime) + transfer['value_usd'] = transfer['price'] * \ + float(transfer['value']) / (10 ** token.decimals) + transfer['block_time'] = str(BlockNumber( + int(transfer['block_number'])).timestamp_datetime) transfer['token_symbol'] = token.symbol return transfers.dict() diff --git a/models/contrib/exa/token.py b/models/contrib/exa/token.py index f6aa1743..1704a1e0 100644 --- a/models/contrib/exa/token.py +++ b/models/contrib/exa/token.py @@ -54,7 +54,7 @@ def run(self, input: TokenBalanceInput): description=("return net token outflow from an address on a given time range" "net inflow is total token inflow - total token outflow" ), - version='1.1', + version='1.2', developer='exa256', input=TokenNetInflowInput, output=dict @@ -72,7 +72,7 @@ def run(self, input: TokenNetInflowInput): columns=[ q.TO_ADDRESS, q.FROM_ADDRESS, - q.VALUE, + q.RAW_AMOUNT, ], where=q.BLOCK_NUMBER.gt(past_block).and_( q.TOKEN_ADDRESS.eq(token.address).and_( @@ -85,9 +85,9 @@ def run(self, input: TokenNetInflowInput): ).to_dataframe() inflow = transfers.query( - 'to_address == @from_addr')['value'].astype(float).sum() + 'to_address == @from_addr')['raw_amount'].astype(float).sum() outflow = transfers.query( - 'from_address == @from_addr')['value'].astype(float).sum() + 'from_address == @from_addr')['raw_amount'].astype(float).sum() return { 'inflow': token.scaled(inflow), diff --git a/models/contrib/kunlun/uniswap_fee.py b/models/contrib/kunlun/uniswap_fee.py index babdbb39..d4074673 100644 --- a/models/contrib/kunlun/uniswap_fee.py +++ b/models/contrib/kunlun/uniswap_fee.py @@ -48,7 +48,7 @@ def default(cls, input: UniswapFeeInput): @Model.describe(slug='contrib.uniswap-fee', - version='1.2', + version='1.3', display_name='Calculate fee from swaps in Uniswap V3 pool', description="Ledger", input=UniswapFeeInput, @@ -83,7 +83,7 @@ def run(self, input: UniswapFeeInput) -> UniswapFeeOutput: df_tt = q.select( columns=q_cols, aggregates=[((f'CASE WHEN {q.TO_ADDRESS.eq(uni_pool_addr)} ' - f'THEN {q.VALUE} ELSE {q.VALUE.neg_()} END'), + f'THEN {q.RAW_AMOUNT} ELSE {q.RAW_AMOUNT.neg_()} END'), 'transaction_value')], where=(q.BLOCK_NUMBER.gt(block_start).and_(q.BLOCK_NUMBER.le(block_end)) .and_(q.FROM_ADDRESS.eq(uni_pool_addr) @@ -183,7 +183,8 @@ def calculate_fee(r, models, t0, t1, fee): df_new_cols = df_tx_swap_one_line.apply( lambda r, self=self, t0=t0, t1=t1, fee=fee: - calculate_fee(r, self.context.models, t0, t1, fee), axis=1, result_type='expand') # type: ignore + # type: ignore + calculate_fee(r, self.context.models, t0, t1, fee), axis=1, result_type='expand') df_new_cols.columns = pd.Index(['in_value', 'out_value', 'fee']) diff --git a/models/contrib/neilz/research.py b/models/contrib/neilz/research.py index 1c5f3856..82a3c205 100644 --- a/models/contrib/neilz/research.py +++ b/models/contrib/neilz/research.py @@ -1,19 +1,12 @@ # pylint: disable=line-too-long from credmark.cmf.model import Model -from credmark.cmf.types import ( - Address, - BlockNumber, - MapBlocksOutput, - Maybe, - PriceWithQuote, - Token, -) +from credmark.cmf.types import Address, BlockNumber, MapBlocksOutput, Maybe, PriceWithQuote, Token from credmark.dto import EmptyInputSkipTest @Model.describe(slug='contrib.neilz-redacted-votium-cashflow', - version='1.2', + version='1.3', display_name='Redacted Cartel Votium Cashflow', description='Redacted Cartel Votium Cashflow', category='protocol', @@ -28,13 +21,15 @@ def run(self, _) -> dict: redacted_multisig_address = Address( "0xA52Fd396891E7A74b641a2Cb1A6999Fcf56B077e") with self.context.ledger.TokenTransfer as q: - transfers = q.select(columns=[ - q.BLOCK_NUMBER, - q.VALUE, - q.TOKEN_ADDRESS, - q.TRANSACTION_HASH - ], where=q.TO_ADDRESS.eq(redacted_multisig_address).and_( - q.FROM_ADDRESS.eq(votium_claim_address))) + transfers = q.select( + aggregates=[(q.RAW_AMOUNT, 'value')], + columns=[ + q.BLOCK_NUMBER, + q.RAW_AMOUNT, + q.TOKEN_ADDRESS, + q.TRANSACTION_HASH + ], where=q.TO_ADDRESS.eq(redacted_multisig_address).and_( + q.FROM_ADDRESS.eq(votium_claim_address))) for transfer in transfers: transfer['block_number'] = int(transfer['block_number']) @@ -48,7 +43,8 @@ def run(self, _) -> dict: transfer['price'] = 0 if transfer['price'] is None: transfer['price'] = 0 - transfer['value_usd'] = transfer['price'] * float(transfer['value']) / (10 ** token.decimals) + transfer['value_usd'] = transfer['price'] * \ + float(transfer['value']) / (10 ** token.decimals) transfer['block_time'] = str(BlockNumber(transfer['block_number']) .timestamp_datetime) transfer['token_symbol'] = token.symbol @@ -56,7 +52,7 @@ def run(self, _) -> dict: @Model.describe(slug='contrib.neilz-redacted-convex-cashflow', - version='1.4', + version='1.5', display_name='Redacted Cartel Convex Cashflow', description='Redacted Cartel Convex Cashflow', category='protocol', @@ -73,12 +69,14 @@ class RedactedConvexCashflow(Model): def run(self, _) -> dict: with self.context.ledger.TokenTransfer as q: - transfers = q.select(columns=[ - q.BLOCK_NUMBER, - q.VALUE, - q.TOKEN_ADDRESS - ], where=q.TO_ADDRESS.eq(self.REDACTED_MULTISIG_ADDRESS).and_( - q.FROM_ADDRESS.in_(self.CONVEX_ADDRESSES)) + transfers = q.select( + aggregates=[(q.RAW_AMOUNT, 'value')], + columns=[ + q.BLOCK_NUMBER, + q.RAW_AMOUNT, + q.TOKEN_ADDRESS + ], where=q.TO_ADDRESS.eq(self.REDACTED_MULTISIG_ADDRESS).and_( + q.FROM_ADDRESS.in_(self.CONVEX_ADDRESSES)) ) token_prices = {} diff --git a/models/credmark/ledger/transfers.py b/models/credmark/ledger/transfers.py index 9b512c8a..b58c7e3f 100644 --- a/models/credmark/ledger/transfers.py +++ b/models/credmark/ledger/transfers.py @@ -93,42 +93,6 @@ def get_token_transfer(_context, start_block: int, fix_int: bool = True, limit: Optional[int] = None) -> pd.DataFrame: - def _use_ledger(): - with _context.ledger.TokenTransfer as q: - transfer_cols = [q.BLOCK_NUMBER, q.TO_ADDRESS, q.FROM_ADDRESS, q.TOKEN_ADDRESS, - q.TRANSACTION_HASH, q.LOG_INDEX] - df_ts = [pd.DataFrame(columns=transfer_cols+['value'], data=[])] - - with _context.ledger.TokenTransfer as q: - for _address in _accounts: - where_cond = (q.TO_ADDRESS.eq(_address).or_( - q.FROM_ADDRESS.eq(_address))).parentheses_() - if len(_tokens) > 0: - where_cond = where_cond.and_(q.TOKEN_ADDRESS.in_(_tokens)) - if start_block > 0: - where_cond = where_cond.and_( - q.BLOCK_NUMBER.le(start_block)) - offset = 0 - while True: - df_tt = (q.select( - columns=transfer_cols, - aggregates=[((f'CASE WHEN {q.TO_ADDRESS.eq(_address)} ' - f'THEN {q.VALUE} ELSE {q.VALUE.neg_()} END'), 'value')], - where=where_cond, - order_by=q.BLOCK_NUMBER.comma_(q.LOG_INDEX), - offset=offset).to_dataframe()) - - if df_tt.shape[0] > 0: - df_ts.append(df_tt) - if df_tt.shape[0] < 5000: - break - offset += 5000 - - return (pd.concat(df_ts) - .assign(block_number=lambda x: x.block_number.apply(int)) - .drop_duplicates() - .sort_values('block_number') - .reset_index(drop=True)) def _use_model(): req = {'accounts': _accounts, 'startBlock': start_block} diff --git a/models/credmark/tokens/netflow.py b/models/credmark/tokens/netflow.py index d6a7a3e0..2181a211 100644 --- a/models/credmark/tokens/netflow.py +++ b/models/credmark/tokens/netflow.py @@ -3,14 +3,7 @@ from credmark.cmf.model import Model from credmark.cmf.model.errors import ModelRunError -from credmark.cmf.types import ( - Address, - BlockNumber, - JoinType, - NativeToken, - PriceWithQuote, - Token, -) +from credmark.cmf.types import Address, BlockNumber, JoinType, NativeToken, PriceWithQuote, Token from credmark.dto import DTO, DTOField @@ -64,7 +57,7 @@ class TokenNetflowOutput(TokenNetflowBlockRange): @Model.describe(slug='token.netflow-block', - version='1.4', + version='1.5', display_name='Token netflow', description='The Current Credmark Supported netflow algorithm', category='protocol', @@ -108,11 +101,11 @@ def run(self, input: TokenNetflowBlockInput) -> TokenNetflowOutput: df = q.select( aggregates=[ ((f'SUM(CASE WHEN {q.TO_ADDRESS.eq(input.netflow_address)} ' - f'THEN {q.VALUE} ELSE 0::INTEGER END)'), 'inflow'), + f'THEN {q.RAW_AMOUNT} ELSE 0::INTEGER END)'), 'inflow'), ((f'SUM(CASE WHEN {q.FROM_ADDRESS.eq(input.netflow_address)} ' - f'THEN {q.VALUE} ELSE 0::INTEGER END)'), 'outflow'), + f'THEN {q.RAW_AMOUNT} ELSE 0::INTEGER END)'), 'outflow'), ((f'SUM(CASE WHEN {q.TO_ADDRESS.eq(input.netflow_address)} ' - f'THEN {q.VALUE} ELSE {q.VALUE.neg_()} END)'), 'netflow')], + f'THEN {q.RAW_AMOUNT} ELSE {q.RAW_AMOUNT.neg_()} END)'), 'netflow')], where=q.BLOCK_NUMBER.gt(old_block) .and_(q.TOKEN_ADDRESS.eq(token_address)) .and_(q.TO_ADDRESS.eq(input.netflow_address) @@ -224,7 +217,7 @@ class TokenNetflowSegmentOutput(DTO): @Model.describe(slug='token.netflow-segment-block', - version='1.4', + version='1.5', display_name='Token netflow by segment by block', description='The Current Credmark Supported netflow algorithm', category='protocol', @@ -270,8 +263,8 @@ def run(self, input: TokenNetflowSegmentBlockInput) -> TokenNetflowSegmentOutput native_token = NativeToken() if token_address == native_token.address: input_token = native_token - with self.context.ledger.Transaction.as_('t') as t,\ - self.context.ledger.Block.as_('s') as s,\ + with self.context.ledger.Transaction.as_('t') as t, \ + self.context.ledger.Block.as_('s') as s, \ self.context.ledger.Block.as_('e') as e: df = s.select( @@ -304,8 +297,8 @@ def run(self, input: TokenNetflowSegmentBlockInput) -> TokenNetflowSegmentOutput from_iso8601_str = t.field('').from_iso8601_str else: input_token = input.token - with self.context.ledger.TokenTransfer.as_('t') as t,\ - self.context.ledger.Block.as_('s') as s,\ + with self.context.ledger.TokenTransfer.as_('t') as t, \ + self.context.ledger.Block.as_('s') as s, \ self.context.ledger.Block.as_('e') as e: df = s.select( @@ -315,11 +308,11 @@ def run(self, input: TokenNetflowSegmentBlockInput) -> TokenNetflowSegmentOutput (e.NUMBER, 'to_block'), (e.TIMESTAMP, 'to_timestamp'), ((f'SUM(CASE WHEN {t.TO_ADDRESS.eq(input.netflow_address)} ' - f'THEN {t.VALUE} ELSE 0::INTEGER END)'), 'inflow'), + f'THEN {t.RAW_AMOUNT} ELSE 0::INTEGER END)'), 'inflow'), ((f'SUM(CASE WHEN {t.FROM_ADDRESS.eq(input.netflow_address)} ' - f'THEN {t.VALUE} ELSE 0::INTEGER END)'), 'outflow'), + f'THEN {t.RAW_AMOUNT} ELSE 0::INTEGER END)'), 'outflow'), ((f'SUM(CASE WHEN {t.TO_ADDRESS.eq(input.netflow_address)} ' - f'THEN {t.VALUE} ELSE {t.VALUE.neg_()} END)'), 'netflow') + f'THEN {t.RAW_AMOUNT} ELSE {t.RAW_AMOUNT.neg_()} END)'), 'netflow') ], joins=[ (e, e.NUMBER.eq(s.NUMBER.plus_(str(block_seg)).minus_(str(1)))), diff --git a/models/credmark/tokens/transaction.py b/models/credmark/tokens/transaction.py index c4720848..2659c56a 100644 --- a/models/credmark/tokens/transaction.py +++ b/models/credmark/tokens/transaction.py @@ -172,7 +172,7 @@ def plot_dig(dig: nx.DiGraph, figsize=(7, 7)): # credmark-dev run token.transaction -i '{"hash": "0x319552805d5f3d0c97e7b6c1e40d0c42817c49406fbff41af0f3ac88b590aa34", "block_number": 15125867}' @Model.describe(slug='token.transaction', - version='0.2', + version='0.3', display_name='Token Transaction', description='Tagged transactions for token transfer', developer='Credmark', @@ -198,9 +198,11 @@ def run(self, input: TransactionTagInput) -> dict: return self.context.run_model(self.slug, input=input, block_number=input_block_number) with self.context.ledger.TokenTransfer as q: - df_txn = q.select(columns=q.columns, - where=q.TRANSACTION_HASH.eq(input.hash).and_( - q.BLOCK_NUMBER.eq(input_block_number))).to_dataframe() + df_txn = q.select( + aggregates=[(q.RAW_AMOUNT, 'value')], + columns=q.columns, + where=q.TRANSACTION_HASH.eq(input.hash).and_( + q.BLOCK_NUMBER.eq(input_block_number))).to_dataframe() return self.context.run_model('token.txn-classify', input=Records.from_dataframe(df_txn)) diff --git a/models/credmark/tokens/volume.py b/models/credmark/tokens/volume.py index b3126c69..29b6508a 100644 --- a/models/credmark/tokens/volume.py +++ b/models/credmark/tokens/volume.py @@ -3,14 +3,7 @@ from credmark.cmf.model import Model from credmark.cmf.model.errors import ModelRunError -from credmark.cmf.types import ( - Address, - BlockNumber, - JoinType, - NativeToken, - PriceWithQuote, - Token, -) +from credmark.cmf.types import Address, BlockNumber, JoinType, NativeToken, PriceWithQuote, Token from credmark.dto import DTO, DTOField @@ -54,7 +47,7 @@ class TokenVolumeOutput(TokenVolumeBlockRange): @Model.describe(slug='token.overall-volume-block', - version='1.3', + version='1.4', display_name='Token Volume', description='The Current Credmark Supported trading volume algorithm', category='protocol', @@ -86,7 +79,7 @@ def run(self, input: TokenVolumeBlockInput) -> TokenVolumeOutput: else: input_token = input.token with self.context.ledger.TokenTransfer as q: - df = q.select(aggregates=[(q.VALUE.sum_(), 'sum_value')], + df = q.select(aggregates=[(q.RAW_AMOUNT.sum_(), 'sum_value')], where=(q.TOKEN_ADDRESS.eq(token_address) .and_(q.BLOCK_NUMBER.gt(old_block))), bigint_cols=['sum_value'], @@ -205,8 +198,8 @@ def run(self, input: TokenVolumeSegmentBlockInput) -> TokenVolumeSegmentOutput: native_token = NativeToken() if token_address == native_token.address: input_token = native_token - with self.context.ledger.Transaction.as_('t') as t,\ - self.context.ledger.Block.as_('s') as s,\ + with self.context.ledger.Transaction.as_('t') as t, \ + self.context.ledger.Block.as_('s') as s, \ self.context.ledger.Block.as_('e') as e: df = s.select( aggregates=[ @@ -219,7 +212,8 @@ def run(self, input: TokenVolumeSegmentBlockInput) -> TokenVolumeSegmentOutput: where=s.NUMBER.ge(block_start).and_(s.NUMBER.lt(block_end)), joins=[ (e, e.NUMBER.eq(s.NUMBER.plus_(str(block_seg)).minus_(str(1)))), - (JoinType.LEFT_OUTER, t, t.field(f'{t.BLOCK_NUMBER} between {s.NUMBER} and {e.NUMBER}')) + (JoinType.LEFT_OUTER, t, t.field( + f'{t.BLOCK_NUMBER} between {s.NUMBER} and {e.NUMBER}')) ], group_by=[s.NUMBER, s.TIMESTAMP, e.NUMBER, e.TIMESTAMP], having=f'MOD({e.NUMBER} - {block_start}, {block_seg}) = 0', @@ -230,8 +224,8 @@ def run(self, input: TokenVolumeSegmentBlockInput) -> TokenVolumeSegmentOutput: from_iso8601_str = t.field('').from_iso8601_str else: input_token = input.token - with self.context.ledger.TokenTransfer.as_('t') as t,\ - self.context.ledger.Block.as_('s') as s,\ + with self.context.ledger.TokenTransfer.as_('t') as t, \ + self.context.ledger.Block.as_('s') as s, \ self.context.ledger.Block.as_('e') as e: df = s.select( aggregates=[ @@ -239,7 +233,7 @@ def run(self, input: TokenVolumeSegmentBlockInput) -> TokenVolumeSegmentOutput: (s.TIMESTAMP, 'from_timestamp'), (e.NUMBER, 'to_block'), (e.TIMESTAMP, 'to_timestamp'), - (t.VALUE.as_numeric().sum_(), 'sum_value') + (t.RAW_AMOUNT.as_numeric().sum_(), 'sum_value') ], where=s.NUMBER.ge(block_start).and_(s.NUMBER.lt(block_end)), joins=[ diff --git a/notebook/demo.ipynb b/notebook/demo.ipynb index 4574363c..0a6e7a26 100644 --- a/notebook/demo.ipynb +++ b/notebook/demo.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -105,7 +105,7 @@ "'0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8'" ] }, - "execution_count": 18, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -125,7 +125,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -156,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -174,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -185,13 +185,14 @@ " 'block_timestamp',\n", " 'from_address',\n", " 'log_index',\n", + " 'raw_amount',\n", " 'token_address',\n", " 'to_address',\n", " 'transaction_hash',\n", - " 'value']" + " 'usd_amount']" ] }, - "execution_count": 21, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -204,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -236,7 +237,8 @@ " token_address\n", " to_address\n", " transaction_hash\n", - " value\n", + " usd_amount\n", + " raw_amount\n", " \n", " \n", " \n", @@ -244,61 +246,66 @@ " 0\n", " 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798...\n", " 17000000\n", - " 2023-04-07T23:58:11.000Z\n", - " 0x17ae9865994f03890148125d884a175806f9dde1\n", - " 134\n", - " 0x0000000000a39bb272e79075ade125fd351887ac\n", - " 0xc35be11967d522f81ccb3eb053a3ec0a212e5e6b\n", - " 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd...\n", - " 500000000000000\n", + " 2023-04-07T23:58:11\n", + " 0x2b0051dbdfdfc78bb4ed6afba4abd35f817bc2a1\n", + " 178\n", + " 0x06450dee7fd2fb8e39061434babcfc05599a6fb8\n", + " 0xc229fcff8882cfc38bafbf16d993a67a89975915\n", + " 0xe26280c28e3105f336a04a8815d0d60ce4283404697b...\n", + " NaN\n", + " 2.5e+25\n", " \n", " \n", " 1\n", - " 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798...\n", - " 17000000\n", - " 2023-04-07T23:58:11.000Z\n", - " 0x17ae9865994f03890148125d884a175806f9dde1\n", - " 135\n", - " 0x0000000000a39bb272e79075ade125fd351887ac\n", - " 0x93ebe894b914ce093c0582065d72ff608c2dda3f\n", - " 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd...\n", - " 99500000000000000\n", + " 0x635fd8fc06f00df0365d35df42b2ebe081b3e08e84a6...\n", + " 16999995\n", + " 2023-04-07T23:57:11\n", + " 0x74de5d4fcbf63e00296fd95d33236b9794016631\n", + " 102\n", + " 0x0cec1a9154ff802e7934fc916ed7ca50bde6844e\n", + " 0xff2bdf3044c601679dede16f5d4a460b35cebfee\n", + " 0x8cf18a1dddcae7db6bfea426d41867ef7b499fe2c918...\n", + " NaN\n", + " 8e+20\n", " \n", " \n", " 2\n", - " 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798...\n", - " 17000000\n", - " 2023-04-07T23:58:11.000Z\n", - " 0x8d0b7814adde1315a9829d83083a4675bbeb68c2\n", - " 139\n", - " 0x0000000000a39bb272e79075ade125fd351887ac\n", - " 0xc35be11967d522f81ccb3eb053a3ec0a212e5e6b\n", - " 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd...\n", - " 500000000000000\n", + " 0x635fd8fc06f00df0365d35df42b2ebe081b3e08e84a6...\n", + " 16999995\n", + " 2023-04-07T23:57:11\n", + " 0xac3ec79c4c26c90311d93c2d5ecbfe86f5424af3\n", + " 100\n", + " 0x0cec1a9154ff802e7934fc916ed7ca50bde6844e\n", + " 0x74de5d4fcbf63e00296fd95d33236b9794016631\n", + " 0x8cf18a1dddcae7db6bfea426d41867ef7b499fe2c918...\n", + " NaN\n", + " 8e+20\n", " \n", " \n", " 3\n", - " 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798...\n", - " 17000000\n", - " 2023-04-07T23:58:11.000Z\n", - " 0x8d0b7814adde1315a9829d83083a4675bbeb68c2\n", - " 140\n", - " 0x0000000000a39bb272e79075ade125fd351887ac\n", - " 0x93ebe894b914ce093c0582065d72ff608c2dda3f\n", - " 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd...\n", - " 99500000000000000\n", + " 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77...\n", + " 16999997\n", + " 2023-04-07T23:57:35\n", + " 0xac4a1764dbcb537ca55de08c0bd03526312866d8\n", + " 156\n", + " 0x0d229c3ff2d76e4b88ca4f9d3d3353f4545ec53f\n", + " 0x0d229c3ff2d76e4b88ca4f9d3d3353f4545ec53f\n", + " 0xf364a3a1690fd9ab32f8959a6aa4f3854435312ab7db...\n", + " NaN\n", + " 3.15705407894709e+26\n", " \n", " \n", " 4\n", " 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77...\n", " 16999997\n", - " 2023-04-07T23:57:35.000Z\n", - " 0x9dcca7eb2ae12aa4304a3eb994eaec636203a128\n", - " 129\n", - " 0x0000000000a39bb272e79075ade125fd351887ac\n", - " 0x0000000000000000000000000000000000000000\n", - " 0xc8eda4eebfddda90ff5feb69bd93cb4ce75517187d34...\n", - " 1050000000000000000\n", + " 2023-04-07T23:57:35\n", + " 0xac4a1764dbcb537ca55de08c0bd03526312866d8\n", + " 155\n", + " 0x0d229c3ff2d76e4b88ca4f9d3d3353f4545ec53f\n", + " 0xaaaf2143a96a0d893242b303946aa04948ee2bf5\n", + " 0xf364a3a1690fd9ab32f8959a6aa4f3854435312ab7db...\n", + " NaN\n", + " 5.99840274999947e+27\n", " \n", " \n", " ...\n", @@ -311,152 +318,158 @@ " ...\n", " ...\n", " ...\n", + " ...\n", " \n", " \n", - " 557\n", + " 519\n", " 0x9890d3fa4066c7014e93a82d4ff3546d9ccc935beb06...\n", " 16999998\n", - " 2023-04-07T23:57:47.000Z\n", - " 0xa809401d17444c9c26b990abfc6751059687477a\n", - " 222\n", - " 0xf8209a55a4579207610a9ecd080bf3b8899d0e69\n", - " 0x0a386e172de366d03ce8da32f6b88ab0cf99b893\n", - " 0x1de68596e34aa8253d7d9f860f43af8a76df74d6d3a8...\n", - " 1895\n", + " 2023-04-07T23:57:47\n", + " 0x0000000000000000000000000000000000000000\n", + " 191\n", + " 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\n", + " 0x74de5d4fcbf63e00296fd95d33236b9794016631\n", + " 0x246347a31f829d4ffc113819cbe325a1acc1bff9bd87...\n", + " 1400.865000\n", + " 7.5e+17\n", " \n", " \n", - " 558\n", + " 520\n", " 0x9890d3fa4066c7014e93a82d4ff3546d9ccc935beb06...\n", " 16999998\n", - " 2023-04-07T23:57:47.000Z\n", - " 0xa809401d17444c9c26b990abfc6751059687477a\n", - " 225\n", - " 0xf8209a55a4579207610a9ecd080bf3b8899d0e69\n", - " 0x0a386e172de366d03ce8da32f6b88ab0cf99b893\n", - " 0x1de68596e34aa8253d7d9f860f43af8a76df74d6d3a8...\n", - " 2136\n", + " 2023-04-07T23:57:47\n", + " 0x74de5d4fcbf63e00296fd95d33236b9794016631\n", + " 192\n", + " 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\n", + " 0xa69babef1ca67a37ffaf7a485dfff3382056e78c\n", + " 0x246347a31f829d4ffc113819cbe325a1acc1bff9bd87...\n", + " 1389.475968\n", + " 7.439025e+17\n", " \n", " \n", - " 559\n", - " 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798...\n", - " 17000000\n", - " 2023-04-07T23:58:11.000Z\n", - " 0xc728f2dac6cef1df193f05e69dec73cf1bc1b89c\n", - " 86\n", - " 0xfa55aa3ac0b1738b92ec4bc172e9520aae54e135\n", - " 0x000000000000000000000000000000000000dead\n", - " 0xc02403b5de0a8a2995896fa7023f427a6c1b38f30526...\n", - " 1145859110891606899\n", + " 521\n", + " 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3...\n", + " 16999999\n", + " 2023-04-07T23:57:59\n", + " 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b\n", + " 15\n", + " 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\n", + " 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b\n", + " 0xed96827beb451a93f9c5227a6f1b99914c79fa4da559...\n", + " 541.667800\n", + " 2.9e+17\n", " \n", " \n", - " 560\n", + " 522\n", " 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3...\n", " 16999999\n", - " 2023-04-07T23:57:59.000Z\n", - " 0x1fc037ac35af9b940e28e97c2faf39526fbb4556\n", - " 95\n", - " 0xfac0403a24229d7e2edd994d50f5940624cbeac2\n", - " 0x78511c546609ac2321058a832ba362692d865104\n", - " 0x66b1e35f8f5028698336a350a0b681b345c48375dfd2...\n", - " 1533838724603\n", + " 2023-04-07T23:57:59\n", + " 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b\n", + " 16\n", + " 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\n", + " 0x2e5a4ccfe8681aa0bb45fea027750020988c442c\n", + " 0xed96827beb451a93f9c5227a6f1b99914c79fa4da559...\n", + " 541.667800\n", + " 2.9e+17\n", " \n", " \n", - " 561\n", - " 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77...\n", - " 16999997\n", - " 2023-04-07T23:57:35.000Z\n", - " 0x1f1b3581a737e4080b50654f66166540cc0bbdf9\n", - " 223\n", - " 0xff2d6934fb49e3e883dc03871d081a1c21ad7984\n", - " 0xf98f5c0c6bf92bdfae9a43d67b84ca6104c8aae9\n", - " 0x13df8c519edc31db47b808d0af6bbf8e59bd19deb5b7...\n", - " 28890165711822770540486\n", + " 523\n", + " 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3...\n", + " 16999999\n", + " 2023-04-07T23:57:59\n", + " 0x0000000000000000000000000000000000000000\n", + " 14\n", + " 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\n", + " 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b\n", + " 0xed96827beb451a93f9c5227a6f1b99914c79fa4da559...\n", + " 541.667800\n", + " 2.9e+17\n", " \n", " \n", "\n", - "

562 rows × 9 columns

\n", + "

524 rows × 10 columns

\n", "" ], "text/plain": [ - " block_hash block_number \\\n", - "0 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798... 17000000 \n", - "1 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798... 17000000 \n", - "2 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798... 17000000 \n", - "3 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798... 17000000 \n", - "4 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77... 16999997 \n", - ".. ... ... \n", - "557 0x9890d3fa4066c7014e93a82d4ff3546d9ccc935beb06... 16999998 \n", - "558 0x9890d3fa4066c7014e93a82d4ff3546d9ccc935beb06... 16999998 \n", - "559 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798... 17000000 \n", - "560 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3... 16999999 \n", - "561 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77... 16999997 \n", + " block_hash block_number \\\n", + "0 0x96cfa0fb5e50b0a3f6cc76f3299cfbf48f17e8b41798... 17000000 \n", + "1 0x635fd8fc06f00df0365d35df42b2ebe081b3e08e84a6... 16999995 \n", + "2 0x635fd8fc06f00df0365d35df42b2ebe081b3e08e84a6... 16999995 \n", + "3 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77... 16999997 \n", + "4 0xb85aa0e1077425497fe9ca7a6384a48c50a04d827d77... 16999997 \n", + ".. ... ... \n", + "519 0x9890d3fa4066c7014e93a82d4ff3546d9ccc935beb06... 16999998 \n", + "520 0x9890d3fa4066c7014e93a82d4ff3546d9ccc935beb06... 16999998 \n", + "521 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3... 16999999 \n", + "522 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3... 16999999 \n", + "523 0xe464691f28218637d00ac4d694a86c0e01044b0a76b3... 16999999 \n", "\n", - " block_timestamp from_address \\\n", - "0 2023-04-07T23:58:11.000Z 0x17ae9865994f03890148125d884a175806f9dde1 \n", - "1 2023-04-07T23:58:11.000Z 0x17ae9865994f03890148125d884a175806f9dde1 \n", - "2 2023-04-07T23:58:11.000Z 0x8d0b7814adde1315a9829d83083a4675bbeb68c2 \n", - "3 2023-04-07T23:58:11.000Z 0x8d0b7814adde1315a9829d83083a4675bbeb68c2 \n", - "4 2023-04-07T23:57:35.000Z 0x9dcca7eb2ae12aa4304a3eb994eaec636203a128 \n", - ".. ... ... \n", - "557 2023-04-07T23:57:47.000Z 0xa809401d17444c9c26b990abfc6751059687477a \n", - "558 2023-04-07T23:57:47.000Z 0xa809401d17444c9c26b990abfc6751059687477a \n", - "559 2023-04-07T23:58:11.000Z 0xc728f2dac6cef1df193f05e69dec73cf1bc1b89c \n", - "560 2023-04-07T23:57:59.000Z 0x1fc037ac35af9b940e28e97c2faf39526fbb4556 \n", - "561 2023-04-07T23:57:35.000Z 0x1f1b3581a737e4080b50654f66166540cc0bbdf9 \n", + " block_timestamp from_address \\\n", + "0 2023-04-07T23:58:11 0x2b0051dbdfdfc78bb4ed6afba4abd35f817bc2a1 \n", + "1 2023-04-07T23:57:11 0x74de5d4fcbf63e00296fd95d33236b9794016631 \n", + "2 2023-04-07T23:57:11 0xac3ec79c4c26c90311d93c2d5ecbfe86f5424af3 \n", + "3 2023-04-07T23:57:35 0xac4a1764dbcb537ca55de08c0bd03526312866d8 \n", + "4 2023-04-07T23:57:35 0xac4a1764dbcb537ca55de08c0bd03526312866d8 \n", + ".. ... ... \n", + "519 2023-04-07T23:57:47 0x0000000000000000000000000000000000000000 \n", + "520 2023-04-07T23:57:47 0x74de5d4fcbf63e00296fd95d33236b9794016631 \n", + "521 2023-04-07T23:57:59 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b \n", + "522 2023-04-07T23:57:59 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b \n", + "523 2023-04-07T23:57:59 0x0000000000000000000000000000000000000000 \n", "\n", - " log_index token_address \\\n", - "0 134 0x0000000000a39bb272e79075ade125fd351887ac \n", - "1 135 0x0000000000a39bb272e79075ade125fd351887ac \n", - "2 139 0x0000000000a39bb272e79075ade125fd351887ac \n", - "3 140 0x0000000000a39bb272e79075ade125fd351887ac \n", - "4 129 0x0000000000a39bb272e79075ade125fd351887ac \n", - ".. ... ... \n", - "557 222 0xf8209a55a4579207610a9ecd080bf3b8899d0e69 \n", - "558 225 0xf8209a55a4579207610a9ecd080bf3b8899d0e69 \n", - "559 86 0xfa55aa3ac0b1738b92ec4bc172e9520aae54e135 \n", - "560 95 0xfac0403a24229d7e2edd994d50f5940624cbeac2 \n", - "561 223 0xff2d6934fb49e3e883dc03871d081a1c21ad7984 \n", + " log_index token_address \\\n", + "0 178 0x06450dee7fd2fb8e39061434babcfc05599a6fb8 \n", + "1 102 0x0cec1a9154ff802e7934fc916ed7ca50bde6844e \n", + "2 100 0x0cec1a9154ff802e7934fc916ed7ca50bde6844e \n", + "3 156 0x0d229c3ff2d76e4b88ca4f9d3d3353f4545ec53f \n", + "4 155 0x0d229c3ff2d76e4b88ca4f9d3d3353f4545ec53f \n", + ".. ... ... \n", + "519 191 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 \n", + "520 192 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 \n", + "521 15 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 \n", + "522 16 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 \n", + "523 14 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 \n", "\n", " to_address \\\n", - "0 0xc35be11967d522f81ccb3eb053a3ec0a212e5e6b \n", - "1 0x93ebe894b914ce093c0582065d72ff608c2dda3f \n", - "2 0xc35be11967d522f81ccb3eb053a3ec0a212e5e6b \n", - "3 0x93ebe894b914ce093c0582065d72ff608c2dda3f \n", - "4 0x0000000000000000000000000000000000000000 \n", + "0 0xc229fcff8882cfc38bafbf16d993a67a89975915 \n", + "1 0xff2bdf3044c601679dede16f5d4a460b35cebfee \n", + "2 0x74de5d4fcbf63e00296fd95d33236b9794016631 \n", + "3 0x0d229c3ff2d76e4b88ca4f9d3d3353f4545ec53f \n", + "4 0xaaaf2143a96a0d893242b303946aa04948ee2bf5 \n", ".. ... \n", - "557 0x0a386e172de366d03ce8da32f6b88ab0cf99b893 \n", - "558 0x0a386e172de366d03ce8da32f6b88ab0cf99b893 \n", - "559 0x000000000000000000000000000000000000dead \n", - "560 0x78511c546609ac2321058a832ba362692d865104 \n", - "561 0xf98f5c0c6bf92bdfae9a43d67b84ca6104c8aae9 \n", + "519 0x74de5d4fcbf63e00296fd95d33236b9794016631 \n", + "520 0xa69babef1ca67a37ffaf7a485dfff3382056e78c \n", + "521 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b \n", + "522 0x2e5a4ccfe8681aa0bb45fea027750020988c442c \n", + "523 0xef1c6e67703c7bd7107eed8303fbe6ec2554bf6b \n", "\n", - " transaction_hash \\\n", - "0 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd... \n", - "1 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd... \n", - "2 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd... \n", - "3 0x517faf4b222db84a142603444fca6ea19ecb516ddfcd... \n", - "4 0xc8eda4eebfddda90ff5feb69bd93cb4ce75517187d34... \n", - ".. ... \n", - "557 0x1de68596e34aa8253d7d9f860f43af8a76df74d6d3a8... \n", - "558 0x1de68596e34aa8253d7d9f860f43af8a76df74d6d3a8... \n", - "559 0xc02403b5de0a8a2995896fa7023f427a6c1b38f30526... \n", - "560 0x66b1e35f8f5028698336a350a0b681b345c48375dfd2... \n", - "561 0x13df8c519edc31db47b808d0af6bbf8e59bd19deb5b7... \n", + " transaction_hash usd_amount \\\n", + "0 0xe26280c28e3105f336a04a8815d0d60ce4283404697b... NaN \n", + "1 0x8cf18a1dddcae7db6bfea426d41867ef7b499fe2c918... NaN \n", + "2 0x8cf18a1dddcae7db6bfea426d41867ef7b499fe2c918... NaN \n", + "3 0xf364a3a1690fd9ab32f8959a6aa4f3854435312ab7db... NaN \n", + "4 0xf364a3a1690fd9ab32f8959a6aa4f3854435312ab7db... NaN \n", + ".. ... ... \n", + "519 0x246347a31f829d4ffc113819cbe325a1acc1bff9bd87... 1400.865000 \n", + "520 0x246347a31f829d4ffc113819cbe325a1acc1bff9bd87... 1389.475968 \n", + "521 0xed96827beb451a93f9c5227a6f1b99914c79fa4da559... 541.667800 \n", + "522 0xed96827beb451a93f9c5227a6f1b99914c79fa4da559... 541.667800 \n", + "523 0xed96827beb451a93f9c5227a6f1b99914c79fa4da559... 541.667800 \n", "\n", - " value \n", - "0 500000000000000 \n", - "1 99500000000000000 \n", - "2 500000000000000 \n", - "3 99500000000000000 \n", - "4 1050000000000000000 \n", - ".. ... \n", - "557 1895 \n", - "558 2136 \n", - "559 1145859110891606899 \n", - "560 1533838724603 \n", - "561 28890165711822770540486 \n", + " raw_amount \n", + "0 2.5e+25 \n", + "1 8e+20 \n", + "2 8e+20 \n", + "3 3.15705407894709e+26 \n", + "4 5.99840274999947e+27 \n", + ".. ... \n", + "519 7.5e+17 \n", + "520 7.439025e+17 \n", + "521 2.9e+17 \n", + "522 2.9e+17 \n", + "523 2.9e+17 \n", "\n", - "[562 rows x 9 columns]" + "[524 rows x 10 columns]" ] }, "metadata": {}, @@ -475,163 +488,30 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 9, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
addresssymboldecimalssum_valuetransfer_count
00xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2WETH1856.6265110300463354129
10xdac17f958d2ee523a2206206994597c13d831ec7USDT6428299.38853800000059
20x0fe0ed7f146cb12e4b9759aff4fa8d34571802caPARTY18391479.80743571833410
30x4d224452801aced8b2f0aebe155379bb5d594381APE18676.031995541268533010
40x4f06229a42e344b361d8dc9ca58d73e2597a9f1fUSDT1527104.4171100000007
..................
940x34f0915a5f15a66eba86f6a58be1a471fb7836a7PLSD125.45172665636100001
950x72377f31e30a405282b522d588aebbea202b4f23VRN185.00068782423552651
960x97d4f49eeb0e2c96d5ebaa71ab8418e563ecd9fdLSD92.40000000000000001
970x9f8f72aa9304c8b593d555f12ef6589cc3a579a2MKR180.513230000000000000001
980xbffb152b9392e38cddc275d818a3db7fe364596bFGEN180.0000000000000000000000000000000000001
\n", - "

99 rows × 5 columns

\n", - "
" - ], - "text/plain": [ - " address symbol decimals \\\n", - "0 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 WETH 18 \n", - "1 0xdac17f958d2ee523a2206206994597c13d831ec7 USDT 6 \n", - "2 0x0fe0ed7f146cb12e4b9759aff4fa8d34571802ca PARTY 18 \n", - "3 0x4d224452801aced8b2f0aebe155379bb5d594381 APE 18 \n", - "4 0x4f06229a42e344b361d8dc9ca58d73e2597a9f1f USDT 15 \n", - ".. ... ... ... \n", - "94 0x34f0915a5f15a66eba86f6a58be1a471fb7836a7 PLSD 12 \n", - "95 0x72377f31e30a405282b522d588aebbea202b4f23 VRN 18 \n", - "96 0x97d4f49eeb0e2c96d5ebaa71ab8418e563ecd9fd LSD 9 \n", - "97 0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2 MKR 18 \n", - "98 0xbffb152b9392e38cddc275d818a3db7fe364596b FGEN 18 \n", - "\n", - " sum_value transfer_count \n", - "0 56.6265110300463354 129 \n", - "1 428299.388538000000 59 \n", - "2 391479.807435718334 10 \n", - "3 676.0319955412685330 10 \n", - "4 27104.417110000000 7 \n", - ".. ... ... \n", - "94 5.4517266563610000 1 \n", - "95 5.0006878242355265 1 \n", - "96 2.4000000000000000 1 \n", - "97 0.51323000000000000000 1 \n", - "98 0.000000000000000000000000000000000000 1 \n", - "\n", - "[99 rows x 5 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stderr", + "output_type": "stream", + "text": [ + "Error running api request for ledger.erc20_token_transfer_data https://gateway.credmark.com: 500 Server Error: Internal Server Error for url: https://gateway.credmark.com/v1/model/run\n" + ] + }, + { + "ename": "ModelRunError", + "evalue": "Query error: SQL compilation error:\nObject 'ETHEREUM.RAW.TOKENS' does not exist or not authorized.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModelRunError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m context\u001b[38;5;241m.\u001b[39mledger\u001b[38;5;241m.\u001b[39mTokenTransfer\u001b[38;5;241m.\u001b[39mas_(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtt\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m tt:\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m context\u001b[38;5;241m.\u001b[39mledger\u001b[38;5;241m.\u001b[39mToken\u001b[38;5;241m.\u001b[39mas_(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtok\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m tok:\n\u001b[0;32m----> 5\u001b[0m df \u001b[38;5;241m=\u001b[39m \u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mselect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43maggregates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mADDRESS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43maddress\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 7\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSYMBOL\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msymbol\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDECIMALS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdecimals\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 9\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfield\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mRAW_AMOUNT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msum_\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m / power(10, \u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDECIMALS\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m)\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mas_numeric\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msum_value\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 11\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mRAW_AMOUNT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcount_\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtransfer_count\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 12\u001b[0m \u001b[43m \u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 13\u001b[0m \u001b[43m \u001b[49m\u001b[43mwhere\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mBLOCK_NUMBER\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbetween_\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mblock_number\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mblock_number\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mand_\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDECIMALS\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mis_not_null\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[43m \u001b[49m\u001b[43mgroup_by\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mADDRESS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDECIMALS\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSYMBOL\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 16\u001b[0m \u001b[43m \u001b[49m\u001b[43morder_by\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfield\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtransfer_count\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdesc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcomma_\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 17\u001b[0m \u001b[43m \u001b[49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfield\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msum_value\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdesc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 18\u001b[0m \u001b[43m \u001b[49m\u001b[43mjoins\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mJoinType\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mINNER\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtok\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtok\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mADDRESS\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43meq\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTOKEN_ADDRESS\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 19\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mto_dataframe()\n\u001b[1;32m 21\u001b[0m display(df)\n", + "File \u001b[0;32m~/.virtualenvs/credmark-models-py-nugs/lib/python3.12/site-packages/credmark/cmf/types/ledger_query.py:167\u001b[0m, in \u001b[0;36mLedgerQuery.select\u001b[0;34m(self, columns, joins, where, group_by, order_by, limit, offset, aggregates, having, bigint_cols, analytics_mode)\u001b[0m\n\u001b[1;32m 152\u001b[0m context \u001b[38;5;241m=\u001b[39m credmark\u001b[38;5;241m.\u001b[39mcmf\u001b[38;5;241m.\u001b[39mmodel\u001b[38;5;241m.\u001b[39mModelContext\u001b[38;5;241m.\u001b[39mcurrent_context()\n\u001b[1;32m 153\u001b[0m model_input \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_gen_model_input(\n\u001b[1;32m 154\u001b[0m model_slug\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cwgo_query,\n\u001b[1;32m 155\u001b[0m originator\u001b[38;5;241m=\u001b[39mcontext\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mslug\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 164\u001b[0m having\u001b[38;5;241m=\u001b[39mhaving,\n\u001b[1;32m 165\u001b[0m analytics_mode\u001b[38;5;241m=\u001b[39manalytics_mode)\n\u001b[0;32m--> 167\u001b[0m ledger_out \u001b[38;5;241m=\u001b[39m \u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43mslug\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cwgo_query\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 168\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel_input\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 169\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mLedgerModelOutput\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 170\u001b[0m ledger_out\u001b[38;5;241m.\u001b[39mset_bigint_cols(\n\u001b[1;32m 171\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbigint_cols \u001b[38;5;241m+\u001b[39m \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 172\u001b[0m ([] \u001b[38;5;28;01mif\u001b[39;00m bigint_cols \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m bigint_cols))\n\u001b[1;32m 173\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ledger_out\n", + "File \u001b[0;32m~/.virtualenvs/credmark-models-py-nugs/lib/python3.12/site-packages/credmark/cmf/engine/context.py:550\u001b[0m, in \u001b[0;36mEngineModelContext.run_model\u001b[0;34m(self, slug, input, return_type, block_number, version, local)\u001b[0m\n\u001b[1;32m 547\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(block_number, \u001b[38;5;28mint\u001b[39m):\n\u001b[1;32m 548\u001b[0m block_number \u001b[38;5;241m=\u001b[39m BlockNumber(block_number)\n\u001b[0;32m--> 550\u001b[0m res_tuple \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_run_model\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 551\u001b[0m \u001b[43m \u001b[49m\u001b[43mslug\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mblock_number\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mversion\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlocal\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 553\u001b[0m \u001b[38;5;66;03m# The last item of the tuple is the output.\u001b[39;00m\n\u001b[1;32m 554\u001b[0m output \u001b[38;5;241m=\u001b[39m res_tuple[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n", + "File \u001b[0;32m~/.virtualenvs/credmark-models-py-nugs/lib/python3.12/site-packages/credmark/cmf/engine/context.py:632\u001b[0m, in \u001b[0;36mEngineModelContext._run_model\u001b[0;34m(self, slug, input, block_number, version, from_block, local)\u001b[0m\n\u001b[1;32m 628\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__depth \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_run_depth:\n\u001b[1;32m 629\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxModelRunDepthError(\n\u001b[1;32m 630\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMax model run depth hit \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__depth\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m--> 632\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_run_model_with_class\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 633\u001b[0m \u001b[43m \u001b[49m\u001b[43mslug\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 634\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[43m \u001b[49m\u001b[43mblock_number\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 636\u001b[0m \u001b[43m \u001b[49m\u001b[43mversion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 637\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel_class\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 638\u001b[0m \u001b[43m \u001b[49m\u001b[43mfrom_block\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 639\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_local\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 640\u001b[0m \u001b[43m \u001b[49m\u001b[43mtry_remote\u001b[49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 642\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__depth \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n", + "File \u001b[0;32m~/.virtualenvs/credmark-models-py-nugs/lib/python3.12/site-packages/credmark/cmf/engine/context.py:747\u001b[0m, in \u001b[0;36mEngineModelContext._run_model_with_class\u001b[0;34m(self, slug, input, block_number, version, model_class, from_block, use_local, try_remote)\u001b[0m\n\u001b[1;32m 743\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m debug_log:\n\u001b[1;32m 744\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdebug_logger\u001b[38;5;241m.\u001b[39mdebug(\n\u001b[1;32m 745\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m< Run API model \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mslug\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m error: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00merror\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 746\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_block_number: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrun_block_number\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 747\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m create_instance_from_error_dict(error)\n\u001b[1;32m 749\u001b[0m EngineModelContext\u001b[38;5;241m.\u001b[39mnotify_model_run(slug, version, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchain_id,\n\u001b[1;32m 750\u001b[0m run_block_number, \u001b[38;5;28minput\u001b[39m, output, error)\n\u001b[1;32m 752\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m debug_log:\n", + "\u001b[0;31mModelRunError\u001b[0m: Query error: SQL compilation error:\nObject 'ETHEREUM.RAW.TOKENS' does not exist or not authorized." + ] } ], "source": [ @@ -644,8 +524,8 @@ " (tok.SYMBOL, 'symbol'),\n", " (tok.DECIMALS, 'decimals'),\n", " (tt.field(\n", - " f'{tt.VALUE.sum_()} / power(10, {tok.DECIMALS})').as_numeric(), 'sum_value'),\n", - " (tt.VALUE.count_(), 'transfer_count'),\n", + " f'{tt.RAW_AMOUNT.sum_()} / power(10, {tok.DECIMALS})').as_numeric(), 'sum_value'),\n", + " (tt.RAW_AMOUNT.count_(), 'transfer_count'),\n", " ],\n", " where=tt.BLOCK_NUMBER.between_(\n", " context.block_number - 5, context.block_number).and_(tok.DECIMALS.is_not_null()),\n", @@ -668,7 +548,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -692,7 +572,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -722,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -761,7 +641,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1321,7 +1201,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1379,7 +1259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.12.1" }, "orig_nbformat": 4, "vscode": {