Skip to content
Merged
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
25 changes: 17 additions & 8 deletions tests/test_airdrops.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
import polars
import pytest
import requests
from decimal import Decimal
from eth_utils import is_checksum_address
from eth_utils import to_checksum_address
from jsonschema import validate
from typing import Final

Expand Down Expand Up @@ -42,12 +41,22 @@ def test_files_and_jsons():
if 'file_hash' in airdrop:
with open(airdrop['file_path'], 'br') as f:
assert airdrop['file_hash'] == hashlib.sha256(f.read()).hexdigest(), f'Invalid hash for {airdrop["file_path"]}'
df = polars.read_parquet(airdrop['file_path'])
assert df.columns[:2] == ['address', 'amount'], f'{airdrop["file_path"]} does not have address and amount columns'
assert len(df.rows()) > 0, f'{airdrop["file_path"]} is empty'
for i, (address, amount) in enumerate(df.select(polars.selectors.by_index(0, 1)).rows()):
assert is_checksum_address(address), f'{airdrop["file_path"]} address {address} is not checksummed at row {i+1}'
assert Decimal(amount) > 0, f'{airdrop["file_path"]} amount {amount} is negative at row {i+1}'
file_schema = polars.read_parquet_schema(airdrop['file_path'])
assert list(file_schema.keys())[:2] == ['address', 'amount'], f'{airdrop["file_path"]} does not have address and amount columns'

df = polars.read_parquet(airdrop['file_path'], columns=['address', 'amount'])
assert df.height > 0, f'{airdrop["file_path"]} is empty'

invalid_amounts = df.select(
(
polars.col('amount').cast(polars.Float64, strict=False).is_null() |
(polars.col('amount').cast(polars.Float64, strict=False) <= 0)
).sum()
).item()
assert invalid_amounts == 0, f'{airdrop["file_path"]} has invalid non-positive amounts'

for i, address in enumerate(df.get_column('address')):
assert to_checksum_address(address.lower()) == address, f'{airdrop["file_path"]} address {address} is not checksummed at row {i+1}'
else:
assert TEST_ADDR in airdrop['api_url'].format(address=TEST_ADDR) # check that the format variable is in the url
assert 'amount_path' in airdrop
Expand Down
2 changes: 1 addition & 1 deletion updates/info.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"spam_assets":{"latest":6},"rpc_nodes":{"latest":11,"limits":{"9":{"min_version":"1.39.0"},"10":{"min_version":"1.41.0"},"11":{"min_version":"1.43.0"}}},"contracts":{"latest":0},"global_addressbook":{"latest":0},"accounting_rules":{"latest":10,"limits":{"4":{"min_version":"1.35.0"},"5":{"min_version":"1.38.0"},"8":{"min_version":"1.41.3"},"9":{"min_version":"1.42.0"},"10":{"min_version":"1.42.1"}}},"location_asset_mappings":{"latest":13,"limits":{"9":{"min_version":"1.38.0"},"10":{"min_version":"1.39.0"},"11":{"min_version":"1.40.0"}}},"counterparty_asset_mappings":{"latest":1},"location_unsupported_assets":{"latest":4,"limits":{"2":{"min_version":"1.38.0"}}}}
{"spam_assets":{"latest":6},"rpc_nodes":{"latest":11,"limits":{"9":{"min_version":"1.39.0"},"10":{"min_version":"1.41.0"},"11":{"min_version":"1.43.0"}}},"contracts":{"latest":0},"global_addressbook":{"latest":0},"accounting_rules":{"latest":10,"limits":{"4":{"min_version":"1.35.0"},"5":{"min_version":"1.38.0"},"8":{"min_version":"1.41.3"},"9":{"min_version":"1.42.0"},"10":{"min_version":"1.42.1"}}},"location_asset_mappings":{"latest":14,"limits":{"9":{"min_version":"1.38.0"},"10":{"min_version":"1.39.0"},"11":{"min_version":"1.40.0"}}},"counterparty_asset_mappings":{"latest":1},"location_unsupported_assets":{"latest":4,"limits":{"2":{"min_version":"1.38.0"}}}}
141 changes: 141 additions & 0 deletions updates/location_asset_mappings/v14.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
{
"location_asset_mappings": {
"additions": [
{
"asset": "eip155:1/erc20:0x8e4cbbcc33db6c0a18561fde1f6ba35906d4848b",
"location": "kraken",
"location_symbol": "MEZO"
},
{
"asset": "eip155:1/erc20:0x2aeabde1ab736c59e9a19bed67681869eef39526",
"location": "kraken",
"location_symbol": "DOVU"
},
{
"asset": "MANTRA",
"location": "kraken",
"location_symbol": "MANTRA"
},
{
"asset": "PACT",
"location": "kraken",
"location_symbol": "PACT"
},
{
"asset": "PACK",
"location": "kraken",
"location_symbol": "PACK"
},
{
"asset": "SHAPE",
"location": "kraken",
"location_symbol": "SHAPE"
},
{
"asset": "eip155:1/erc20:0x4f2b33840227DDD0e28da8d4185D6fa07ADfed87",
"location": null,
"location_symbol": "BASED"
},
{
"asset": "eip155:56/erc20:0x7977BF3e7e0c954D12cdcA3E013ADAf57E0B06E0",
"location": null,
"location_symbol": "OPN"
},
{
"asset": "eip155:56/erc20:0x000008D2175F9AEAdDb2430c26f8A6f73c5A0000",
"location": "kraken",
"location_symbol": "UNITAS"
},
{
"asset": "eip155:42161/erc20:0x68731d6f14b827bbcffbebb62b19daa18de1d79c",
"location": "kraken",
"location_symbol": "IDOS"
},
{
"asset": "QUAI",
"location": "kraken",
"location_symbol": "QUAI"
},
{
"asset": "eip155:1/erc20:0x38eeb52f0771140d10c4e9a9a72349a329fe8a6a",
"location": "kraken",
"location_symbol": "APYUSD"
},
{
"asset": "eip155:1/erc20:0x6af487beb661ccecd1d045e9561a0dac9aa5c7db",
"location": "kraken",
"location_symbol": "DUAL"
},
{
"asset": "eip155:1/erc20:0x32b4d049fe4c888d2b92eecaf729f44df6b1f36e",
"location": null,
"location_symbol": "ROBO"
},
{
"asset": "BONZO",
"location": "kraken",
"location_symbol": "BONZO"
},
{
"asset": "eip155:8453/erc20:0xa4ff56ef7ef4a2cad03cfa130208c9bc1b45d293",
"location": "kraken",
"location_symbol": "SAUCE"
},
{
"asset": "eip155:1/erc20:0x8e4cbbcc33db6c0a18561fde1f6ba35906d4848b",
"location": "coinbase",
"location_symbol": "MEZO"
},
{
"asset": "eip155:1/erc20:0x9cb7a4ef0cae65b07362bc679a0b874041e3da53",
"location": "okx",
"location_symbol": "OFC"
},
{
"asset": "MANTRA",
"location": "binance",
"location_symbol": "MANTRA"
},
{
"asset": "eip155:1/erc20:0x32b4d049fe4c888d2b92eecaf729f44df6b1f36e",
"location": "binance",
"location_symbol": "ROBO"
},
{
"asset": "eip155:1/erc20:0x68749665FF8D2d112Fa859AA293F07A622782F38",
"location": "binance",
"location_symbol": "XAUT"
},
{
"asset": "eip155:1/erc20:0xfCCD6fBCa272B4cc11069402F4123b070B7838F9",
"location": "poloniex",
"location_symbol": "KIMCHI"
},
{
"asset": "solana/token:kLqMvUm1p4pRbxU4r8kWCTVAuWMJLtcTJqGb4b5pump",
"location": "poloniex",
"location_symbol": "BRENT"
},
{
"asset": "solana/token:CpP36fvZmbcDUH9tQihQZTcvH2ApwRzHh2pPojyWpump",
"location": "poloniex",
"location_symbol": "DAPANG"
},
{
"asset": "eip155:1/erc20:0xdC035D45d973E3EC169d2276DDab16f1e407384F",
"location": "poloniex",
"location_symbol": "USDS"
},
{
"asset": "solana/token:4fSWEw2wbYEUCcMtitzmeGUfqinoafXxkhqZrA9Gpump",
"location": "poloniex",
"location_symbol": "PIGEON"
},
{
"asset": "eip155:56/erc20:0x3e17ee3B1895dD1A7CF993A89769C5e029584444",
"location": "poloniex",
"location_symbol": "FREEDOMOFMONEY"
}
]
}
}
Loading