Scroll.io⚡️Деплоим смарт-контракт + токен + актив в UniSwap/SyncSwap

1️⃣ Что такое Scroll? 🧐

Scroll - это zk-Rollup решение, созданное для масштабирования сети Ethereum с целью предоставления пользователям практически мгновенных и экономически эффективных транзакций при сохранении высоких свойств безопасности, предлагаемых сетью Ethereum. Scroll создает полностью совместимый с EVM (Ethereum Virtual Machine) zk-Rollup.

Scroll недавно привлекла $50 млн в ходе недавнего раунда финансирования, при оценке в 1.8$ миллиарда.

Следовательно Scroll является одним из тех проектов, который может стрельнуть в этом году. Да-да, скажите Вы, это тестнет и могут не насыпать. Ноо! Развернув два контракта в их сети, мы можем сильно увеличить свои шансы на дроп, так как, большинстве кроме свапов и депозитов не делает:) Так что погнали 🚴‍♂️

2️⃣ Подготовка ✍️

Для начала нам нужно добавить сеть - Scroll Alpha testnet. 👉 Жмакаем СЮДА.

  • Клацаем по кнопке Add to Metamask, чтобы добавить Scroll Alpha testnet к нам в кошель

  • Можно добавить и Goerli Testnet (на случай если у вас нет ее)

  • Переходим на сайты с кранами🚰, чтоб получить немного Goerli ETH:

Теперь нам нужно перегнать наш тестовый ETH в сеть Scroll Alpha testnet. 👉 Клацаем ЗДЕСЬ.

  • Перегоняем чутка тестового ETH из Goerli Testnet (занимает около 10 минут)

3️⃣ Деплоим смарт-контракт 👨🏻‍🏭

Деплоить смарт-контракт будем через наш любимый миксер (remix). 👉 Тыкаем ЗДЕСЬ.

  • Создаем новый файл

  • Называем его как угодно (я назвал Scroll contract by drive)

  • Копируем и вставляем код, указанный ниже

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.4;
    contract FunctionTypes{
        uint256 public number = 5;
        
        constructor() payable {}
    
        // 函数类型
        // function (<parameter types>) {internal|external} [pure|view|payable] [returns (<return types>)]
        // 默认function
        function add() external{
            number = number + 1;
        }
    
        // pure: 纯纯牛马
        function addPure(uint256 _number) external pure returns(uint256 new_number){
            new_number = _number+1;
        }
        
        // view: 看客
        function addView() external view returns(uint256 new_number) {
            new_number = number + 1;
        }
    
        // internal: 内部
        function minus() internal {
            number = number - 1;
        }
    
        // 合约内的函数可以调用内部函数
        function minusCall() external {
            minus();
        }
    
        // payable: 递钱,能给合约支付eth的函数
        function minusPayable() external payable returns(uint256 balance) {
            minus();    
            balance = address(this).balance;
        }
    }
    

🔰 Выглядит всё это примерно так :)

  • Сверяем наш код

  • Клацаем на ♻️

  • Выбираем версию 0.8.7+commit.e28d00a7

  • Жмакаем по синей кнопке, чтоб скомпилировать наш смарт-контракт

🔰 Далее деплоим наш смарт-контракт следующим образом.

  • Клацаем на значок Эфира

  • Выбираем Metamask в Environment

  • Клацаем на Deploy

  • Подтверждаем нашу транзу в Metamask

Поздравляю, смарт-контракт развернут 😎 (0x9Cd2509303B80f3047f9cc8F8EE6E0F6df257600)

4️⃣ Деплоим свой токен ⚙️

  • Переходим в графу с файлами

  • Создаем новый файл (он же будущий токен)

  • Придумываем название нашему токену (мой - DRVE)

  • Жмакаем на Enter

  • Далее копируем и вставляем код ниже 👇👇👇

// SPDX-License-Identifier: MIT
// WTF Solidity by 0xAA

pragma solidity ^0.8.4;

interface IERC20 {
    /**
     * @dev 释放条件:当 `value` 单位的货币从账户 (`from`) 转账到另一账户 (`to`)时.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev 释放条件:当 `value` 单位的货币从账户 (`owner`) 授权给另一账户 (`spender`)时.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev 返回代币总供给.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev 返回账户`account`所持有的代币数.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev 转账 `amount` 单位代币,从调用者账户到另一账户 `to`.
     *
     * 如果成功,返回 `true`.
     *
     * 释放 {Transfer} 事件.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev 返回`owner`账户授权给`spender`账户的额度,默认为0。
     *
     * 当{approve} 或 {transferFrom} 被调用时,`allowance`会改变.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev 调用者账户给`spender`账户授权 `amount`数量代币。
     *
     * 如果成功,返回 `true`.
     *
     * 释放 {Approval} 事件.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev 通过授权机制,从`from`账户向`to`账户转账`amount`数量代币。转账的部分会从调用者的`allowance`中扣除。
     *
     * 如果成功,返回 `true`.
     *
     * 释放 {Transfer} 事件.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

contract ERC20 is IERC20 {

    mapping(address => uint256) public override balanceOf;

    mapping(address => mapping(address => uint256)) public override allowance;

    uint256 public override totalSupply;   // 代币总供给

    string public name;   // 名称
    string public symbol;  // 符号
    
    uint8 public decimals = 18; // 小数位数
    address public owner;

    // @dev 在合约部署的时候实现合约名称和符号
    constructor(string memory name_, string memory symbol_){
        name = name_;
        symbol = symbol_;
        owner = msg.sender;
    }

    // @dev 实现`transfer`函数,代币转账逻辑
    function transfer(address recipient, uint amount) external override returns (bool) {
        balanceOf[msg.sender] -= amount;
        balanceOf[recipient] += amount;
        emit Transfer(msg.sender, recipient, amount);
        return true;
    }

    // @dev 实现 `approve` 函数, 代币授权逻辑
    function approve(address spender, uint amount) external override returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // @dev 实现`transferFrom`函数,代币授权转账逻辑
    function transferFrom(
        address sender,
        address recipient,
        uint amount
    ) external override returns (bool) {
        allowance[sender][msg.sender] -= amount;
        balanceOf[sender] -= amount;
        balanceOf[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // @dev 铸造代币,从 `0` 地址转账给 调用者地址
    function mint(uint amount) external {
        require(owner == msg.sender);
        balanceOf[msg.sender] += amount;
        totalSupply += amount;
        emit Transfer(address(0), msg.sender, amount);
    }

    // @dev 销毁代币,从 调用者地址 转账给  `0` 地址
    function burn(uint amount) external {
        balanceOf[msg.sender] -= amount;
        totalSupply -= amount;
        emit Transfer(msg.sender, address(0), amount);
    }

}

Должно выглядеть как-то так :) 👇

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

  • Нажимаем CTRL+S / CMND+C (или на зеленый треугольник), чтобы скомпилировать контракт на токен

Теперь развертываем контракт нашего токена

  • Клацаем на значок Эфира

  • Выбираем Metamask в Environment

  • Клацаем на Deploy

  • Подтверждаем нашу транзу в Metamask

Далее минтим наши токены

  • Жмакаем по стрелочке, чтобы развернуть инфу о токене

  • В графе mint опять жмакаем по стрелочке

  • Указываем сумму 18000000000000000000000000, и нажимаем на mint

Ура, Поздравляю Вас. Вы только что создали свой собственный токен в сети Scroll Alpha. Теперь можно повзаимодействовать с ним. 😋 💪

Контракт моего $DRVE токена = 0xA5242FB95a28671e5Fb372cc3F7E9094aA637F05

5️⃣ Играемся с токеном на UniSwap 🦄

Перед тем как свапать наш токен на ETH, нужно добавить его в пул ликвидности. Переходим на Uniswap. 👉 Тык СюДоЙ.

  • Заходим в пул, выбирай ETH в качестве первого актива

  • В качестве второго актива выбирай наш токен. Нужно скопировать контракт нашего токена, и вставить в поисковую строку (0xA5242FB95a28671e5Fb372cc3F7E9094aA637F05)

  • Указываем Текущую цену своего токена ($DRV) за ETH. У меня цена 1 $DRV = 0.0001 ETH

  • Выставляем Уровень комсы = 0,05%

  • Выставляем диапазон, в котором будем ловить сливки

  • Указываем сумму, которую будем вносить в пул

  • Нажимаем 👉 Одобрить наш токен 👉 затем добавить в пул ликву

Теперь переходим к Свапам. Тыц СЮДА.

  • Делаем много свапов в обе стороны

  • $DRV 👉 $ETH / $ETH 👉 $DRV

Иии, напоследок, заходим обратно в наш пул и клеймим комсы, которую мы заработали на своих же свапах.

6️⃣ SyncSwap

Здесь работаем по такому же принципу. Заходим на SyncSwap. 👉 Жмакаем СюДоЙ.

P.S. Перечислю действия, которые нужно сделать 👇

  • Делаем депозит в пул с нашим токеном, который мы создали

  • Делаем множество свапов

  • Помимо свапов на наш токен, есть возможность свапать на USDC/USDT и тд.

  • Проделываем как можно больше взаимодействий с платформой

Не забываем вступить в Discord SyncSwap 👉 ЗДЕСЬ.

На этом пожалуй всё. Надеюсь материал будет Вам полезен! 💪 Если гайд пришелся по душе, поддержи подпиской и коллектом 😊

🐦 Мой Twitter: @yichuan_drive

🌐 Мой Link3: yichuan

Subscribe to 一川drive
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.