Одна из моих любимых особенностей дизайна Эфириума по сравнению с Биткойном — это возможность хранить несколько токенов на одном адресе.

Существует так много токенов / платформ для взаимодействия, и все данные для каждой кроличьей норы, в которую вы когда-либо попадали, связаны с вашим единственным адресом Ethereum.

Я слышал, что кто-то описал ваш адрес Ethereum как ваше крипто-резюме. Знаете ли вы, как быть поставщиком ликвидности, создать имя ENS и/или участвовать в управлении. Ваш адрес Ethereum рассказывает всю историю, и их НИ В КОЕМ СЛУЧАЕ нельзя подделать, если только какая-нибудь бедняга не захочет передать вам свои ключи. Не может иметь мой.

В Dune есть действительно хорошие таблицы, показывающие вам все различные токены ERC20, связанные с вашим адресом. Есть три стола, и разница между ними действительно сводится к скорости.

Это erc20 «view_token_balances_daily», erc20 «view_token_balances_hourly» и erc20 «view_token_balances_latest». Как следует из названия, они просто агрегируются через разные промежутки времени.

Давайте проверим их, начиная с таблицы «_latest».

ВЫБЕРИТЕ
сумму («сумма») как «сумма_токена»,
«символ_токена»
ИЗ erc20.
И «количество»›.01
ГРУППИРОВАТЬ ПО «token_symbol»

Этот запрос покажет мне текущий баланс каждого токена erc20 в моем кошельке. Я добавил исключение «сумма» > 0,01, чтобы отфильтровать любую пыль, которая могла остаться от прошлых транзакций. В таблице также есть поле «amount_usd», но оно еще не заполнено для всех токенов.

Переход к таблице «_daily» открывает для нас гораздо больше возможностей, но чем больше данных, тем выше стоимость с точки зрения скорости, поэтому мы должны быть осторожны, вопросы, которые мы задаем, НЕ СЛИШКОМ ОБШИРНЫЕ. Если я попрошу всю историю моего кошелька для каждого токена, который когда-либо был там, я могу немного подождать, но если я попрошу историю одного токена, то смогу быстро получить ответ.

Допустим, наш вопрос касается токена UNI. Держал ли этот кошелек когда-либо токен UNI и как долго?

ВЫБЕРИТЕ
сумму ("сумма") как "token_amount",
"token_symbol",
"день"
FROM erc20. "view_token_balances_daily"
ГДЕ
«wallet_address» = '\xb9479331DF573d6BCa8b924f48e8CACB84664cE7'
И «token_symbol» = 'UNI'
СГРУППИРОВАТЬ ПО «token_symbol», «day»
Упорядочить по «token_symbol», «day» по возрастанию

Обратите внимание, что теперь я добавил поле «день» в свой SELECT и, в свою очередь, также в свой GROUP BY (не уверен, что мне нужна SUM здесь, но просто для уверенности). С помощью этого запроса вы можете увидеть, что этот адрес содержит 400 UNI, начиная с 9–22–20. Какой это был удивительный день.

Переходя к таблице «_hourly», мы должны быть ЕЩЕ БОЛЕЕ ОСТОРОЖНЫ в отношении того, насколько конкретны наши запросы. Допустим, мы хотели спросить, в какой «час» добавили 400 UNI 9–22–20?

ВЫБЕРИТЕ
сумму («сумма») как «token_amount»,
«token_symbol»,
«час»
FROM erc20.»view_token_balances_hourly»
ГДЕ
“wallet_address” = '\xb9479331DF573d6BCa8b924f48e8CACB84664cE7'
И “token_symbol” = 'UNI'
И date_trunc('день',"час")='2020–09–22'
СГРУППИРОВАТЬ ПО “ token_symbol", "hour"
Сортировать по "token_symbol", "hour" по возрастанию

Я снова использовал свою функцию date_trunc, чтобы преобразовать час в день и ограничить до 9–22–20, а также добавил поле час в свои операторы SELECT и GROUP BY. Результат 18:00 9–22–20. Не был уверен в часовом поясе, поэтому нажал Etherscan и подтвердил время 18:57 UTC.

Таблицы, рассмотренные в этом посте, демонстрируют одну из сильных сторон Dune. Эти таблицы называются «резюме», что означает, что они должны были быть построены из большего количества необработанных таблиц, подобных тем, которые мы рассмотрели в посте о транзакциях. Падение с точки зрения обучения заключается в том, что они защищают нас от базовых необработанных данных, но это ничем не отличается от представлений, используемых в традиционных системах баз данных, и просто облегчает нам извлечение ценности из системы.

Спасибо за прочтение :).