Для предоставленого смарт-контракта необходимо реализовать фронтенд. Флоу работы следущий
Создатель airdrop (рассылки):
- заходит на страницу dapp подключает кошелек (Metamask) и предоставляет a. адрес токена b. список адресов с соответствующими балансами
- приложение должно убедиться что а. у пользователя есть необходимый баланс выбранного токена b. пользователь выдал разрешение смарт-контракту тратить его токены (в терминах ERC20 стандарта, нужно убедится в достаточном allowance)
- если allowance недостаточный то предложить пользователю сделать approve на необходимую сумму.
- сформировать Merkle Tree из предоставленных пользователем данных. Листом дерева является keccak256(abi.encode(_recipient, _amount))
- загрузить список рассылки в любое обще-доступное хранилище (например ipfs)
- позвонить пользователю наконец создать airdrop (на этот момент у приложения есть все необходимые данные для формирования транзакции вызова метода createNewAirdrop)
- предоставить специальный URL для получателей токена
Получатель (юзеры из списка)
- Заходит по специально сформированному URL и подключает свой кошелек
- Приложение проверяет является ли подключенный кошелек получателем рассылки
- Если да то предлагает забрать токены из смарт-контракта. Для этого приложение должно сформировать транзакцию для вызова метода drop(bytes32[] proof, address _recipient, uint256 _amount, string _ipfs). Где proof это merkle tree proof для указанного элемента дерева (_recipient,_amount), а _ipfs идентификатор рассылки
Полезные ссылки
- Где взять ERC20 токены для рассылки и faucet ETH в сети goerli
- Смарт-контракт с которым взаимодействует приложение
- ERC20 standard
- Пример реализации Merkle tree. Обрати внимание по умолчанию там не другая хеш-функция используется, а тебе нужен keccak256(sha3)
- Еще ссылок: MerkleProof.test.js, презентация, multisender
npm run dev
npm run build
See Configuring quasar.conf.js.
docker run --rm -p 8080:8080 -v `pwd`:/app -it node:16.3.0-alpine sh
cd /app
yarn
npm run dev