Как купить токены во время и после ICO, и как не потерять свои инвестиции

Содержание

Официальный сайт: poocoin.app

Шиткоины стали появляться еще до того, как о криптовалюте узнали широкие массы. Блокчейн был не только средством борьбы с повсеместной централизацией всех сфер жизни, но и развлечением. Так и зародился знаменитый DOGE еще в далеком 2013 г. Имея под собой историю и предназначение, он смог добиться звания одного из самых популярных альткоинов. В попытке высмеять термин “шиткоин”, появился PooCoin, на площадке которого можно отслеживать появление токенов “низкого сорта” и строить графики их цен.

Цена POOCOIN

Где купить PooCoin

Проще всего приобрести PooCoin на традиционных криптовалютных биржах. Список крупнейших площадок, на которых торгуется POOCOIN: Binance, Huobi, Gate.io, Bittrex, KuCoin, FTX, и EXMO. Полный рейтинг криптобирж с обзорами можно посмотреть здесь. Если вы не хотите торговать, а планируете просто пополнить ваш кошелек, то проще всего совершить операции через обменник, выбрав лучший курс и проверив надежность на Bestchange.

Содержание

Проект PooCoin относится к отряду мемкоинов, как и Dogecoin. Датой запуска является 9 марта 2021 г. Сам проект – это площадка, которая позволяет облегчить пользователям работу с шиткоинами. С ее помощью можно отслеживать популярные монеты и новые токены, проверять надежность и т.д.image

Полный набор инструментов PooCoin расположен в разделе Tools. Здесь представлены следующие возможности.

  1. Telegram Price Bot – это бот в Телеграм, который может показать ценю любого токена. Для этого достаточно начать переписку и задать команду с указанием адреса криптовалюты, например, /set_token 0xb27adaffb9fea1801459a1a81b17218288c097cc. В ответ бот предоставит график, укажет стоимость и другие параметры монеты.
  2. Multi-Chart – возможность отслеживания сразу нескольких криптовалют. График, где реализован полный набор функций, по каждой из них добавляет сам пользователь.
  3. Trending (Most visited tokens) – это страница, где можно отслеживать рейтинг шиткоинов. Все монеты делятся на две категории сортировки: по упоминаниям и по просмотрам.
  4. Sniper Bot Watcher – система отслеживания на проверку, не запущен ли токен ботом.
  5. Trending (Most popular websites linking to poocoin) – ведет на страницу Trading, используемую для составления рейтинга шиткоинов.
  6. Ape (New token scanner) – это сканер, отслеживающий появление новых валют. Перед их покупкой рекомендуется проверить, не являются ли проекты мошенническими.
  7. Toilet (Farm yields) – раздел для фарминга монет.
  8. Rug Check – журнал действий выбранного токена. Информация берется из открытых источников, можно получить данные о любой монете, по которой проходили какие-либо сделки.
  9. External Tools – список внешних инструментов, которые могут пригодиться при работе с криптовалютой.

PooCoin – прямой ответ на термин shitcoin, под которым подразумевается валюты с низкой капитализацией и туманными перспективами. Он не только сам является им, но и собирает информацию о таких же криптовалютах, помогая пользователям определиться с краткосрочными инвестициями.

Как смотреть графики цен токенов BSC

Чтобы ознакомиться с графиками цен, необходимо посетить раздел Charts, где показывается стоимость любых монет BSC в выбранной валюте. Если токен малоизвестный, то для начала нужно посмотреть адрес его контракта на bscscan.com.image

Далее копируем адрес контракта и вставляем его в поле “Enter token name”. Система перебросит пользователя на новую страницу, где будет указываться полная информация о токене, включая искомый график, в котором он сопоставляется с BNB. Под кривой расположена история торгов клиентов (завершенные сделки по купле и продаже) с указанием подробной информации: количество монет, стоимость сделки, цена покупки и трек номер.

Как торговать на бирже PooCoin

Для начала торговли на площадке потребуется зарегистрироваться, привязав к системе свой криптокошелек. Для этого нужно:

  1. На любой странице сайта нажать на кнопку Connect в правой верхней части экрана.
  2. Выбрать тип привязываемого кошелька: MetaMask, TrustWallet, WalletConnect, Binance Chain Wallet.
  3. Подтвердить подключение счета к системе PooCoin в выбранном кошельке.

Теперь можно начинать трейдить. Для этого необходимо через основное меню в верхней части страницы найти раздел Trade. Пользователь увидит простую форму, где нужно установить процент проскальзывания и указать валютную пару.

Листинг и рейтинги шиткоинов

Чтобы открыть актуальный рейтинг шиткоинов, необходимо перейти в раздел Tools -> Trending на официальном сайте проекта. По умолчанию лист создается по данным за последних 24 часа, для разблокировки альтернативных временных рамок (от 30 минут до 48 часов), необходимо разблокировать третий уровень премиум-аккаунта. Для этого нужно держать на кошельке в POOCOIN минимум 2000 USD.

Все новые шиткоины можно найти в разделе Tools -> Ape. Представленные токены являются непроверенными, поэтому перед началом работы с ними необходимо придерживаться правил безопасности, проверив монету.

  1. Найти группу проекта через Telegram, если таковая имеется.
  2. Через “Contract”(ссылка на него есть в разделе Info напротив токена) убедиться в отсутствии функции Mint.
  3. Через “Holders” удостовериться, что большая часть токенов находится в пуле ликвидности.

Токен PooCoin и его токеномика

Количество выпущенных монет не указывается, но максимальная рыночная капитализация уже определена 29 млн USD. Предельное количество выпускаемых PooCoin составит 10 млн. Рынок формируется исключительно за счет платформ PancakeSwap и PancakeSwap (V2).

Где и как купить

На официальном сайте монеты poocoin.app в разделе Buy PooCoin можно найти инструмент для покупки токенов. На этой странице указан процент проскальзывания на PancakeSwap, единственной бирже, где можно уго купить и продать, и стоимость в данный момент. За каждую транзакцию взимается комиссия 8%: 4% из которых сжигаются, а другие 4% раздаются в качестве вознаграждения остальным владельцам монеты.

Фарминг в разделе Toilet

Сервис предоставляет несколько инструментов, одним из которых является Toilet (Farm yields) или Доходное фермерство. Пользователи могут предоставлять свои средства для повышения ликвидности биржи. Сюда “спускаются” активы, чтобы сделать из них еще больше монет. Используя полученные ресурсы биржа начнет реализовывать все больше PooCoin, выплачивая своим вкладчикам процент по взносам.

Стратегии инвестирования в шиткоины через PooCoin

Шиткоины – возможность заработать, но для этого необходимо придерживаться определенной стратегии инвестирования, т.к. в такие непостоянные монеты нельзя просто вложить деньги и оставить их на хранение. Они быстро могут взлететь в цене или полностью умереть, поэтому риск работы с такими валютами максимально высок.

Одним из самых популярных направлений инвестирования является покупка сразу множества типов различных шиткоинов. Это позволяет инвестору получит возможность стать обладателем большого количества токенов по минимальной цене, которые могут в один момент взлететь в цене. Даже успех с одной такой монетой может перекрыть все убытки от других активов и дать прибыль сверху.

Сколько можно заработать

PooCoin – это новая монета, которая показывает себя как нестабильный актив. Рассматривать площадку в качестве вложения можно только для получения краткосрочного дохода, оценивать риски на длинной дистанции невозможно. Также нужно учитывать характер отзывов в интернете. На большинстве сайтов проект не имеют суммарной оценки более 2.8 баллов из 10, что говорит о подозрительности монеты.

Некоторые считают, что такой наплыв негативных отзывов связан с пользователями, которые потеряли деньги на safemoon. В большинстве отзывов указывается на то, что платформа осуществляет мошеннические манипуляции на рынке. Поэтому при желании получить быстрые дивиденды от PooCoin, необходимо тщательно оценить все риски.

Отзывы и обсуждения

Лучшие альткоины

Название Рейтинг

Binance Coin

Cardano

Tether

Solana

Monero

IOTA

Internet Computer (Dfinity)

Litecoin

USD coin

Polkadot

Polygon

Stellar Lumens

Ripple

NEAR Protocol

Chainlink

Cosmos

Avalanche

OMG Network

NEM

PooCoin

Binance USD

Hedera Hashgraph

ZCash

Bitcoin Cash

Dash

IOST

CertiK

Venus.io

Golem

Enjin Coin

Dogecoin

NEO

Synthetix Network

DigiByte

Basic Attention Token

Polkastarter

TON Crystal

Siacoin

The Graph

Beta Finance

Gitcoin

Chromia

Augur

Automata Network

AAVE

Efinity

Stratis

Umee

FUN Token

Qtum

Qredo

pSTAKE

Bytecoin

Enzyme Finance

Shiba Inu

Litentry

Hot Cross

Fantom

Orion Protocol

Klaytn

Ardor

Kylin

Acala Network

HUMAN Protocol

Swarm

Braintrust

Bluzelle

EasyFi

Kalmar

GameFi Protocol

NXT

Biconomy

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

Путем наглядного примера по запуску собственного ICO, эта статья нацелена на объяснение основ функционирования смарт-контрактов (англ. smart-contract) в блокчейн-сети Ethereum.

Основы blockchain-сети Ethereum

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

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

Смарт-контракты: Смарт-контракты — это самозапускающиеся программные блоки, которые функционируют на блокчейне Ethereum. Смарт-контракты способны обрабатывать не только кодовую часть, но также и информационную. Такие контракты способны принимать решения, взаимодействовать с другими контрактами, хранить данные и обмениваться Ether (единица криптовалюты в блокчейне Ethereum) между пользователями.

Solidity: Solidity — это язык для создания смарт-контрактов.

MetaMask/Mist/Кошелек MEW: Все это является цифровой средой, которая хранит ваши Ether-средства и другие токены, на основе Ethereum.

Шаг 1: Код

Откройте ваш любимый текстовый редактор и вставьте следующий код:

Вышеуказанный код для создания простого ERC20 токена написан на языке Solidity. Он хорошо прокомментирован и его можно легко понять. Вставив код в ваш текстовый редактор, найдите надпись «CHANGE THIS». Здесь вам необходимо данные, в зависимости от характеристик вашего токена. В моем случае, я назвал мой токен HashnodeTestCoin (HTCN). Общий объем выпуска ограничен и составляет 1000 токенов HTCN, однако минимально-возможное количество для хранения HTCN равняется 0.000000000000000001, поскольку в строке «decimal» установлено значение 18 — стандартное количество знаков после запятой.

Вдобавок, владелец контракта (тот, кто его исполняет), получает все начальные токены. Я установил ценовое соотношение для ICO по следующим образом:

1 ETH = 10 HTCN

Это значит, что если кто-то отправит нашему смарт-контракту 1 ETH, то в обмен получит 10 HTCN.

Шаг 2

Скачайте MetaMask — расширения для Chrome, чтобы сгенерировать цифровой-кошелек. Владелец этого кошелька является и владельцем смарт-контракта. В качестве альтернативы, можно использовать Mist или My Ether Wallet. Для простоты примера, в нашем проекте мы будем использовать расширение MetaMask.

Скачав и установив расширение, создайте аккаунт, защищенный паролем. Затем, в верхнем левом углу расширения выберите «Ropsten TestNet». Прежде чем запустить контракт в Main-сети Ethereum’а, мы протестируем наш контракт с помощью TestNet, чтобы убедиться, что все работает как было запланировано. Выглядит все это следующим образом:

Теперь перейдите к Remix IDE (онлайн-компилятор и отладчик Solidity) и вставьте код, который вы изменили под свои параметры. Не обращайте внимания на все возможные предупреждения. Затем перейдите в настройки и уберите флажок «Enable optimization», если он установлен.

Дальше перейдите во вкладку «Run» и нажмите на кнопку «Create», которая расположена под надписью вашего токена. Нажав на кнопку, MetaMask предложить приобрести несколько единиц Ether для теста и отправит транзакцию. Выглядит примерно так:

Убедитесь, что вы используете сеть Ropsten TestNet, а не MainNet и нажмите «Submit». Вас перенаправит на сервис Etherscan, где можно отследить текущую транзакцию. Для верификации транзакции может потребоваться примерно 30 секунд. Как только произойдет подтверждение, выглядеть все будет следующим образом:

Поздравляю! Вы только что запустили собственный смарт-контракт. Заметьте, что адрес, указанный на изображении свыше — это адрес вашего смарт-контракта.

Теперь пора проверить, работает ли все на самом деле.

Шаг 3

Если ранее все было выполнено в соответствии с инструкцией, вам должны прийти все начальные токены (в моем случае — 1000 HTCN), как только вы добавить их в свой кошелек. Поэтому скопируйте адрес контракта, перейдите в MetaMask – > Add Token и вставьте скопированный адрес. Выглядит все это дело так:

Нажмите на кнопку «Add» и перезагрузите MetaMask. Теперь вы должны увидеть всю начальную поставку (в моем случае — это все те же 1000 HTCN).

Шаг 4

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

Теперь перейдите в Etherscan на адрес ваше смарт-контракта и нажмите вкладку «Contract Code».

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

Поздравляю! Теперь любой может посетить страницу вашего контракта и прочитать исходный код.

Шаг 5

Чтобы окончательно запустить контракт, остается только переключить с TestNet на MainNet в расширении MetaMask (в верхнем левом углу расширения) и повторить шаги со 2 по 4. Обратите внимание, что для запуска контракта на MainNet понадобится потратить настоящий Ether. Поэтому не запускайте контракт до тех пор, пока не будете уверены на 100% (Смарт-контракты невозможно изменить и нельзя обновить после запуска). В нашем уроке, мы продолжим использовать TestNet.

Покупка токенов за Ether

В вашем ICO, пользователи будут покупать ваши токены за ETH. Помните, что мы установили цену в 1 ETH = 10 HTCN, пока разрабатывали контракт? Так вот, если пользователь захочет на вашем ICO купить 10 HTCN, ему придется заплатить 1 ETH. Давайте проверим это на практике.

Перейдите в MetaMask, создайте новый аккаунт и заполните его для теста несколькими Ether. Как только на аккаунте будут средства, нажмите «Send» и в поле адреса, вставьте адрес вашего смарт-контракта. В поле для количества токенов, введите 2 (ETH).

Отправьте 2 ETH и дождитесь подтверждения транзакции. Перезагрузите MetaMask и проверьте ваши токены через несколько секунд. Новый пробный аккаунт должен получит 20 HTCN (или другую сумму, в зависимости от того характеристик контракта) а у владельца контракта (в нашем случае это вы) должно остаться 980 (или около того) токенов HTCN.

Вдобавок вы должны получить 2 ETH.

Поздравляю с успехом!

Запуск страницы ICO

Чтобы отобразить количество ETH, привлеченное нашим проектом, мы будем использовать а нашем сайте библиотеку JavaScript, под названием Web3.js.

Откройте исходник страницы Hashnode Test Coin ICO и проверьте код в последнем теге. Все очень просто и использует данные Web3.js наряду с двоичным интерфейсом приложения, полученные из вашего контракта.

Искренние поздравление, если вы добрались до этого шага! Помните, что настоящие смарт-контракты и ICO требуют значительных усилий и множества тестирований. 

Хоть этот урок и дал базовые знания для написания смарт-контрактов для ICO, он не предназначен для публичного использования. Не пытайтесь запустить наш пример на MainNet без детального тестирования.

Читать оригинал на английском языке.

Юра Никулин

❗️Мои каналы о крипте и хайпах:

📱 Telegram 📺 YouTube 🤳 Instagram

Всем привет! Я автор канала PYROMID в Telegram. Если что, там информация появляется быстрее!

Вы выиграли IDO или следите за проектом, который вот-вот залистится на Pancakeswap или Uniswap. В этот момент уверен, вы уже сидите с калькулятором и считаете свои иксы 😂. Какую ламбу в конфигураторе выбрать и какую квартиру купить. Вот поэтому вам нужно научиться быстрее всех сливать токены или купить в момент листинга. Сейчас я вас научу.

❗️ Обязательно воспользуйтесь всеми способами ниже, они ускорят покупку кратно. Выбрать только один способ – плохая затея.

1. Предварительный апрув (approve) токена для свапа на PancakeSwap или Uniswap заранее

Когда вы обмениваете токены на панкейке или юнисвапе, биржи спрашивают вашего разрешения, можно ли им работать с этой монетой – сокращенно, это называется апрув токена.

Фишка в том, пока мы будем апрувить токен, его цена может сильно изменится и вы не получите заветные иксы и ламбу. Поэтому делаем апрув заранее, а в момент листинга – просто свапаем токен. То есть, мы все манипуляции проводим заранее, ДО официального сейла.

2. Как сделать апрув токена до листинга на Pancakeswap?

Шаг 2.1: Переходим на сайт bscscan.com

Заранее переключите ваш кошелек на сеть Binance Smart Chain. Иначе ничего не получится. Обязательно имейте на личном кошельке BNB для оплаты комисси за апрув. Минимум 0,02 bnb.

Шаг 2.2: Вводим номер контракта токена

В поле поиска Binance Smart Chain Explorer вставляем номер контракта токена и нажимаем Лупу. Проверяйте тщательно номер контакта! Если проект еще не опубликовал его, просто ожидаем.

Шаг 2.3: Совершаем апрув токена в сети BSC

  • Переходем в раздел ContractWrite Contract
  • Где красный кружок нажимаем Connect to Web3. Появится окошко с выбором кошелька. В моём случае MetaMask. Выбираем его и нажимаем OK в следующем окне. Зеленый кружочек – мы подсоединили кошелек к сайту bscscan.
  • В блоке approve находим поле spender (address) и вставляем туда адрес смарт-контракта биржи pancakeswap. Для v.1 – 0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F. Для v.2 – 0x10ED43C718714eb63d5aA57B78B54704E256024E. Чаще всего торгуете на v.2 версии.
  • В поле amount (uint256) вставляем эти символы – 115792089237316195423570985008687907853269984665640564039457584007913129639935. Они позволяют купить или продать любое количество токенов на листинге.
  • Нажимаем кнопку Write и подтверждаем транзакцию.

Ожидаем 1-5 минут, пока она пройдёт и всё. Токен апрувнут и ждёт своего часа для продажи/покупки.

3. Как сделать апрув токена до листинга на Uniswap?

Шаг 3.1: Переходим на сайт bscscan.com

Заранее переключите ваш кошелек на сеть Ethereum (ERC-20). Иначе ничего не получится. Обязательно имейте на личном кошельке ETH для оплаты комисси за апрув. Минимум 0,1 eth. Да-да, комиссия в сети эфира очень дорогая, и может стоить от $100 до $700. С этим ничего не поделать, только если торговать на Binance Smart Chain.

Шаг 3.2: Вводим номер контракта токена

В поле поиска The Ethereum Blockchain Explorer вставляем номер контракта токена и нажимаем Лупу. Проверяйте тщательно номер контакта! Если проект еще не опубликовал его, просто ожидаем.

Шаг 3.3: Совершаем апрув токена в сети ERC-20

  • Переходем в раздел ContractWrite Contract
  • Где красный кружок нажимаем Connect to Web3. Появится окошко с выбором кошелька. В моём случае MetaMask. Выбираем его и нажимаем OK в следующем окне. Зеленый кружочек – мы подсоединили кошелек к сайту etherscan.
  • В блоке approve находим поле spender (address) и вставляем туда адрес смарт-контракта биржи uniswap. Для v.2 – 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D. Для v.3 – 0xE592427A0AEce92De3Edee1F18E0157C05861564. Чаще всего торгуете на v.3 версии.
  • В поле amount (uint256) вставляем эти символы – 11579208923731619542357098500868790785326998466564056403945758400791312963993. Они позволяют купить или продать любое количество токенов на листинге.
  • Нажимаем кнопку Write и подтверждаем транзакцию.

Ожидаем 5-10 минут, пока она пройдёт и всё. Токен апрувнут и ждёт своего часа для продажи/покупки.

4. Устанавливаем проскальзывание (slippage) на Pancake и Uniswap

При листинге новых токенов, их цена сильно меняется за секунды. Чтобы ваша транзакция прошла успешно, нужно выставлять значение Слиппейдж.

Slippage – это параметр, который позволяет вам задать процент расхождения цены в момент покупки токена. Если slippage установить 5%, а цена в момент обработки транзакции изменилась на 20%, то она не пройдёт, но комиссию вы заплатите.

Поэтому, для новых монет, рекомендую ставить slippage от 10% до 25%. Зависит от того, какую ликвидность добавляют и какой спрос на монете.

Шаг 4.1: Устанавливаем slippage (проскальзывание)

На pancakeswap и uniswap при свапе токенов есть шестеренка сверху. Нужно нажать на неё и в поле slippage (проскальзывание) установить нужное вам значение. При каждом открытии сайта – проверяйте этот параметр, он может сброситься через некоторое время.

5. Устанавливаем газ (GWEI) выше в момент свапа на PancakeSwap и Uniswap для MetaMask

Чтобы вы быстрее купили токен – нужно отвалить больше денег на комиссию за GWEI. Это самый важный фактор! Не скупитесь на газ и выставляйте значение в 5-7 раз больше, чем обычно. Если вдруг транзакция не прошла, вы увидите ошибку на сайте. Просто повторяете еще раз.

Газтрекер сети BSC – https://bscscan.com/gastracker Газтрекер сети ERC-20 – https://etherscan.io/gastracker

Видите значение Rapid и Height красным цветом. Вот его нужно умножить на 5-7 раз.

Шаг 5.1: выбираем пару на бирже и нажимаем SWAP

Допустим вы выбрали BNB-USDT.

Шаг 5.2: редактируем транзакцию

Всплывёт подтверждающее окно MetaMask и вам нужно нажать фразу Редактировать → Edit suggestion gas fee.

Шаг 5.3: вводим необходимое значение газа GWEI

В поле Gas price (GWEI) необходимо ввести значение в 5-7 раз больше, чем указано в газтрекерах, которые я указал выше. Нажимаем Сохранить и далее Подтвердить.

❗️ При каждом свапе токенов нужно повторно устанавливать газ. Значения не сохраняются.

Не нашли ответ на вопрос?

Смело пишите мне в Telegram. Постараюсь решить проблему. А благодарностью за это, будет круто, если вы подпишитесь на мой канал в Telegram, там я даю информацию про криптовалюту, инвестиции.

Нет никакой разницы между ETH и WETH, потому что последний представляет собой просто «обернутую» версию первого. Для криптовалют «завернутый» токен — это не что иное, как пустой сосуд, содержащий исходный актив. Процесс упаковки помогает использовать неродной актив в любой цепочке блоков. Подумайте об использовании BTC в блокчейне Ethereum.

Поскольку большинство блокчейнов сами по себе являются разрозненными, они не предлагают гибкой функциональной совместимости или возможности передавать собственные токены из одного блокчейна в другой. Как вы понимаете, это было бы неприятно для держателей одного конкретного типа криптовалюты.

Но зачем нам вообще нужна обернутая версия Ethereum для использования в блокчейне Ethereum? В этой статье мы рассмотрим для чего был создан WETH. 

Отличаются ли ETH и WETH ?

Да, они отличаются. WETH следует так называемому стандарту ERC-20, а ETH — нет. WETH был создан из-за невозможности использования ETH для различных приложений DeFi. Таким образом, обертывание токена ETH в стандарте, совместимом с ERC-20, означало, что его можно было легко использовать в широком спектре dApps. Кроме того, это означает, что пользователи могут создавать свои собственные версии токенов для своих пользовательских  приложений DeFi. 

Теперь в случае WETH это эквивалент ETH. Это означает, что нет разницы в цене между ETH и WETH. Таким образом, если вы хотите использовать свой ETH для участия в пользовательском dApp, вы можете легко преобразовать его в WETH в dApp, например 1inch, а затем продолжить его использование.

Помните, что ERC-20 — это технический стандарт для выпуска токенов в блокчейне Ethereum. Он только определяет свойства токена. Одним из наиболее важных аспектов токена ERC-20 является его взаимозаменяемость, что означает, что один токен всегда можно обменять на другой токена той же ценности.

Но почему я не могу просто использовать ETH для DApps на Ethereum?

Ответ заключается в том, что ETH был запущен до создания стандартов токенов. Это означает, что он не соответствует стандарту ERC-20, что затрудняет его частое использование. Таким образом, чтобы устранить необходимость в третьей стороне, вы можете просто отправить свой ETH на смарт-контракт и получить взамен WETH.

Помните, что ETH взаимозаменяем, потому что это криптовалюта.

Как работают обернутые токены WETH?

Теперь, когда мы понимаем разницу между ETH и WETH, давайте разберемся, как работают обернутые токены. Когда вы хотите создать обернутую версию любого токена, вы обычно отправляете собственный актив централизованному  хранителю (в идеале —  смарт-контракт). Этой централизованной организацией может быть любой, от  кошелька с мультиподписью до DAO и даже смарт-контракта (в случае Ethereum). Вот как работает этот процесс.

  • Предположим, вам нужно использовать WETH на Ethereum. В этом случае вы просто подключаете свой кошелек, где у вас есть ETH, к децентрализованной бирже, например 1inch.
  • После того, как вы подключили свой кошелек, вы просто решаете, какое количество ETH хотите конвертировать в WETH, а затем обмениваете токены.
  • Таким образом, вы получаете WETH в обмен на проданный ETH. Вы можете использовать это в любом децентрализованном приложении, которое захотите.

Для централизованной организации это будет просто в том смысле, что как только они получат собственный актив, они сожгут его и создадут его упакованную версию на неродном блокчейне. Как только пользователь хочет вернуть неродной актив и преобразовать его в исходный, он просто сжигает обернутый актив и создает нативный актив в исходной сети.

Погодите, а завернутые токены — это не стейблкоины?

Механизм очень похож на то, как будут работать стейблкоины, учитывая, что централизованная организация добывает и сжигает собственные и неродные активы соответственно. Однако здесь необходимо отметить важное отличие: в случае стейблкоинов эмитент может легко иметь альтернативные резервы активов (кроме самих физических фиатных денег) для выпуска стейблкоинов. С другой стороны, это невозможно с обернутыми токенами. Идея, однако, очень похожа, поэтому очень легко запутаться.

Нужны ли нам WETH в упаковке?

Ответ на это однозначный: да. Для децентрализованного пространства, которое мир криптовалют стремится создать, нам необходимо иметь возможность беспрепятственно использовать различные продукты в разных сетях — точно так же, как вы можете переводить деньги (потенциально) из внутреннего банка в международный банк. Хотя эта совместимость определенно проста с задействованными централизованными объектами, это становится слишком трудным для объектов, основанных на блокчейне, из-за гораздо более глубокой рассматриваемой сети.

Возможность переноса собственных ресурсов из одной сети в другую, безусловно, полезна, когда пользователи не хотят продавать свои активы, чтобы покупать отдельные. Просто подумайте о ком-то, у кого есть обширные запасы Bitcoin. Чтобы использовать это в Ethereum, им сначала нужно будет продать свои BTC за USDT, чтобы иметь возможность использовать их. Получив USDT, они могут легко использовать его для участия в любом dApp по своему выбору.

Обернутые токены можно рассматривать как деривативы в традиционных финансах, прежде всего потому, что они отслеживают цену базового актива. Таким образом, они привязаны к активу 1: 1. Хотя они не имеют всех общих черт с традиционными производными, они предлагают дополнительный уровень взаимодействия для пользователей внутри экосистемы. Ethereum — не единственная сеть, которая предлагает создание и применение обернутых токенов. Вы также можете создавать обернутые токены неродных активов в  Binance Smart Chain (BSC).

Как отправить WETH в Coinbase / MetaMask ?

Отправка WETH аналогична отправке любой другой криптовалюты между разными кошельками. Давайте посмотрим, как это можно сделать.

  1. Соберите WETH с 1 дюйма: перейдите к 1inch и обменяйте свой ETH на необходимое количество WETH. Вы можете проверить ссылку здесь.
  2. Как только вы увидите WETH в своем кошельке (например, Metamask), вы можете перенести их в другой кошелек, например Coinbase. Если вы не видите токены, просто выберите «Импортировать токены», и вам будет предложено подтвердить добавление WETH в качестве актива.
  3. Как только это будет сделано, вы можете просто скопировать адрес своего кошелька Coinbase и вставить его в свой кошелек Metamask, чтобы начать перевод. Опять же, если ваш кошелек не распознает актив, вам просто нужно добавить сведения о токене в кошелек.

Обратите внимание, что кошелек Coinbase поддерживает сеть Ethereum и «все токены ERC-20», что означает, что вы сможете легко добавить свой WETH в кошелек.

Заключение

Цель всех обернутых токенов — просто добавить дополнительный уровень взаимодействия между различными сетями. Для большинства пользователей не имеет смысла конвертировать неродной актив, такой как BTC, в токен, совместимый с ERC-20 (например, USDT), а затем конвертировать его в WBTC. В большинстве случаев они просто используют свои USDT для выполнения большинства своих транзакций. Но цель WETH — создать беспроблемный опыт для пользователей ETH.

Держим Вас в курсе событий! Подписывайтесь на Фридман клаб в соцсетях и наш Телеграм канал, чтобы всегда быть в курсе самых последних и горячих новостей @like_freedman

Автор: Ньют Саламандр, аналитик Freedman Сlub Crypto News

В Spring Security JWT-токен используется в OAuth 2 как access token. Он выдается клиенту сервером авторизации, клиент отправляет его при обращении к серверу ресурсов. (А сервер ресурсов проверяет его, обращаясь к серверу авторизации).

Но этот пример — самописная реализация stateless REST API на JWT, единое приложение, которое и выдает, и проверяет токен. И выдает REST API.

На этом примере можно увидеть, как написать свой фильтр авторизации, как сформировать и проверить JWT-токен. Но в реальном проекте этот пример лучше не использовать.

Если нужен JWT без OAuth2, то есть в Spring Boot есть и такое готовое решение.

Задача

В этой статье  будет чистый REST-сервис без фронтенда. Подразумевается, что фронтенд написан отдельно: например, на каком-нибудь JavaScript-фрейворке.

Для отправки запросов мы будем использовать программу POSTMAN. Например, для «входа» с именем/паролем и получения JWT-токена. А также для запроса защищенных страниц.

В этом примере наш старый REST-контроллер останется, а настройка Spring Security не особо поменяется — скорее, она дополнится.

  1. Мы добавим в приложение конечную точку /authenticate для аутентификации. Сюда приходят имя и пароль от пользователя. Приложение проверяет пароль, и если он верный, высылает пользователю в ответ JWT-токен.
  2. Во всех дальнейших запросах пользователь обязан высылать в заголовке JWT-токен, наше приложение проверяет подлинность токена в специально написанном фильтре JWTFilter и, если он корректен, пропускает запрос дальше.

Подготовка

REST-контроллер

Итак, наш основной REST-контроллер остается прежним:

@RestController  public class HelloController {        @GetMapping("/")      public String hello() {          return "Hello";      }        // сюда доступ разрешен только user и admin       @GetMapping("/user")      public String user() {          return "User";      }        // сюда доступ разрешен только admin       @GetMapping("/admin")      public String admin() {          return "Admin";      }    }  

Он нужен для того, чтобы запретить к нему доступ и потом разрешить только авторизованным пользователям.

Аутентификация с пользовательским UserDetailsService

Настройка аутентификации такая:

@EnableWebSecurity  public class SecurityConfig extends WebSecurityConfigurerAdapter {      @Autowired      private CustomUserDetailsService userDetailsService;        @Bean      public PasswordEncoder passwordEncoder() {          return NoOpPasswordEncoder.getInstance();      }        //...         @Override      public void configure(AuthenticationManagerBuilder auth) throws Exception {          auth.userDetailsService(userDetailsService);      }    }  

Подробнее об аутентификации с UserDetailsService есть статья.

Если кратко, мы переопределяем метод loadUserByUsername(), чтобы Spring Security понимал, как взять пользователя по его имени из хранилища. Имея этот метод, SS может сравнить переданный пароль с настоящим и аутентифицировать пользователя (либо не аутентифицировать).

CustomUserDetailsService:

@Service  public class CustomUserDetailsService implements UserDetailsService {      @Autowired      private MyUserRepository dao;      @Override      public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {          MyUser myUser= dao.findByLogin(userName);          if (myUser == null) {              throw new UsernameNotFoundException("Unknown user: "+userName);          }          UserDetails user = User.builder()                  .username(myUser.getLogin())                  .password(myUser.getPassword())                  .roles(myUser.getRole())                  .build();          return user;      }  }  

Пользователи хранятся в In-Memory базе данных H2. Работаем через Hibernate.

Модель пользователя:

@Entity  public class MyUser {      @Id      @GeneratedValue(strategy = GenerationType.IDENTITY)      long id;      private String login;      private String password;      private String position;      private String role;         // геттеры/сеттеры    }

И репозиторий:

@Repository  public interface MyUserRepository extends JpaRepository {      MyUser findByLogin(String login);  }

А данными заполняем базу на старте приложения с помощью data.sql (этот файл надо положить в папку /resources, а в application.yml включить его запуск):

insert into my_user(login, position, password, role) values('user', '1', 'password', 'USER');  insert into my_user( login, position, password, role) values('admin', '2', 'password', 'ADMIN');

А теперь перейдем собственно в JWT-токену.

Библиотека для работы с JWT-токеном

Для работы с JWT добавим Maven-зависимость:

  io.jsonwebtoken jjwt 0.9.1 

Для работы с JWT-токеном уже написаны утилиты, так что используем готовую. В ней есть метод формирования токена, методы извлечения имени пользователя и других данных. Метод формирования токена изменим так, чтобы записывать в токен еще список authorities в виде клейма authorities.

Во всех методах извлечения данных JWT-токен заодно проверяется на предмет не истек ли он, и валидна ли подпись.

Эти методы утилиты нам пригодятся:

@Service  public class JWTUtil {        @Value("${jwt.secret}")      private String SECRET_KEY;        @Value("${jwt.sessionTime}")      private long sessionTime;        // генерация токена (кладем в него имя пользователя и authorities)      public String generateToken(UserDetails userDetails) {          Map claims = new HashMap<>();          String commaSeparatedListOfAuthorities=  userDetails.getAuthorities().stream().map(a->a.getAuthority()).collect(Collectors.joining(","));          claims.put("authorities", commaSeparatedListOfAuthorities);          return createToken(claims, userDetails.getUsername());      }            //извлечение имени пользователя из токена (внутри валидация токена)      public String extractUsername(String token) {          return extractClaim(token, Claims::getSubject);      }        //извлечение authorities (внутри валидация токена)      public String extractAuthorities(String token) {         return extractClaim(token, claims -> (String)claims.get("authorities"));      }     // другие методы  }

Это была подготовка. Перейдем, наконец, к написанию своего кода, касающегося JWT.

Конечная точка аутентификации для выдачи JWT-токена

Тут собственно выдается  JWT-токен. Пользователь делает POST-запрос с именем и паролем по адресу /authenticate, а в ответ получает сгенерированынй токен. Токен генерится методом generateToken() из утилиты выше.

@RestController  public class AuthenticationController {          @Autowired      private AuthenticationManager authenticationManager;        @Autowired      private JWTUtil jwtTokenUtil;          @PostMapping("/authenticate")      @ResponseStatus(HttpStatus.OK)      public AuthResponse createAuthenticationToken(@RequestBody AuthRequest authRequest) {          Authentication authentication;          try {              authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(authRequest.getName(), authRequest.getPassword()));              System.out.println(authentication);          } catch (BadCredentialsException e) {              throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Имя или пароль неправильны", e);          }          // при создании токена в него кладется username как Subject claim и список authorities как кастомный claim          String jwt = jwtTokenUtil.generateToken((UserDetails) authentication.getPrincipal());            return new AuthResponse(jwt);      }  }  

Запрос имеет такой формат:

public class AuthRequest {      private String name;      private String password;      // геттеры сеттеры  }

А ответ такой:

public class AuthResponse {        private String jwtToken;       // геттер и сеттер  }

Если имя и пароль верные, токен возвращается в AuthResponse, а если нет — выбрасывается исключение и на фронтенд приходит сообщение об ошибке.

Фронтенд сохраняет у себя JWT-токен, и потом использует его при каждом запросе.

Немного о «разлогине»

Если пользователь хочет выйти, токен должен быть уничтожен на фронтенде. На бэкенде (в нашем Spring приложении) он продолжит действовать до истечения своего срока. А вообще теоретически можно сделать черный список токенов, но не в этом примере.

Еще: чтобы сделать токены сразу всех пользователей недействительными, достаточно поменять секретный код. Но тогда разлогинены будут все сразу.

В этом проблема JWT-токена  — нужны обходные пути для того, чтобы сделать его недействительным.

Перейдем ко второй принципиальной части — фильтру, проверяющему токен при каждом запросе.

Фильтр, проверяющий JWT-токен при каждом запросе

Итак, JWT-токен выдан, клиент его нам отправляет при каждом запросе, надо этот токен при каждом запросе проверять (и извлекать из него имя пользователя). Для этого напишем фильтр JWTFilter. Он расширяет OncePerRequestFilter и происходит в нем следующее:

  1. При каждом запросе из заголовка Authorization берем JWT-токен (он начинается с  префикса «Bearer«).
  2. Извлекаем из него имя пользователя (claim subject) и список authorities (claim authorities). Оба клейма мы записывали в токен при его генерации в контроллере.
  3. Одновременно при извлечении claims проверяется валидность токена. Для этого не надо делать никаких запросов в базу: достаточно самого токена и jwt.secret (прописанного в application.yml). На основе этого секрета токен генерился, и на основе него он потом каждый раз проверяется с помощью хеш-функции (это делает библиотека jjwt).
  4. Если все ок, то имея имя пользователя и список authorities (извлеченные в п.2), создаем объект Authentication (точнее, его подкласс UsernamePasswordAuthenticationToken). И устанавливаем объект Authentication  в SecurityContext. Так нужно для Spring Security.
  5. Если с токеном не все ок, то в п. 2-3 выбросился исключение, и  фильтр не пропустит запрос в контроллер к защищенному /url.
@Component  public class JWTFilter extends OncePerRequestFilter {        @Autowired      private JWTUtil jwtUtil;        @Autowired      CustomUserDetailsService userDetailsService;        @Override      protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)              throws ServletException, IOException {            final String authorizationHeader = request.getHeader("Authorization");            String username = null;          String jwt = null;            if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {              jwt = authorizationHeader.substring(7);              //если подпись не совпадает с вычисленной, то SignatureException              //если подпись некорректная (не парсится), то MalformedJwtException              //если время подписи истекло, то ExpiredJwtException              username = jwtUtil.extractUsername(jwt);          }              if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {                String commaSeparatedListOfAuthorities = jwtUtil.extractAuthorities(jwt);              List authorities = AuthorityUtils.commaSeparatedStringToAuthorityList(commaSeparatedListOfAuthorities);              UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =                      new UsernamePasswordAuthenticationToken(                              username, null, authorities);                SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);            }          chain.doFilter(request, response);      }    }  

Настройка авторизации: собираем все вместе

Тут все как раньше, но только:

  1. отключаем csrf,
  2. отключаем сессии
  3. и добавляем наш фильтр JWTFilter перед фильтром UsernamePasswordAuthenticationFilter.
@EnableWebSecurity  public class SecurityConfig extends WebSecurityConfigurerAdapter {            @Autowired      private JWTFilter jwtFilter;       // еще поля и методы         // Бин AuthenticationManager используется в контроллере аутентификации (см. выше)        @Bean      public AuthenticationManager authenticationManagerBean() throws Exception {          return super.authenticationManagerBean();      }        // тут отключаем сессии и добавляем фильтр JWTFilter         @Override      protected void configure(HttpSecurity http) throws Exception {          http.csrf().disable()                  .authorizeRequests()                  .antMatchers("/authenticate").permitAll()                  .and().authorizeRequests().antMatchers("/user/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")                  .and().authorizeRequests().antMatchers("/admin/**").hasAuthority("ROLE_ADMIN")                  .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);            http.addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class);      }  }  

Проверка

Запустим приложении и убедимся, что все работает.

Получение JWT-токена

Отправим POST-запрос нужного формата по адресу /authencate:

image
Этим запросом получаем jwt-токен

Отправка запроса с JWT-токеном

Токен получен, теперь с ним можно попасть на защищенную страницу. Для этого добавим его к запросу /user в заголовок Authorization.

При этом выберем тип Bearer-токен — это значит, что префикс Bearer будет добавлен к токену.

image
А теперь с ним запрашиваем защищенный url /user

Как видно, страница /user получена.

Вид JWT-токена

Если декодировать токен на сайте https://jwt.io/, то в нем видны наши добавленные клеймы sub (имя пользователя) и authorities:

image
Декодированный токен

Остальные два клейма:

  • exp — когда истекает токен
  • iat -когда выпущен токен

Исходный код

Он находится на GitHub.

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий