# Полюємо на дроп від Scroll

By [t0xci](https://paragraph.com/@t0xci) · 2023-03-18

---

### Scroll - це Layer2 проєкт по масштабуванню Ethereum з технологією ZK-Rollups.

Проєкт [залучив](https://www.theblock.co/post/217340/ethereum-scaling-scroll-50-million-funding-round-1-8-billion-valuation) **50млн$** у новому раунді фінансування. Раніше Scroll [залучив](https://www.theblock.co/post/142800/scroll-raises-ethereum-scaling-project-funding) **33млн$** доларів у двох раундах фінансування і тоді не розкрив свою вартість. Завдяки новому раунду загальне фінансування Scroll на сьогоднішній день становить **83млн$**.

**Інвестори:** Polychain Capital, Sequoia China, Bain Capital Crypto, Moore Capital Management, Variant Fund, Newman Capital, IOSG Ventures і Qiming Venture Partners       Проєкт запустив свій **тестнет** (_на даний момент він на 3 стадії :_ **_Alpha Testnet_**)

![Зараз ми знаходимось на 3 стадії, всього їх буде 6](https://storage.googleapis.com/papyrus_images/121302ff0ece5626da374d2bcb009f1be8add797be7164c9ff841cd0d266cd45.jpg)

Зараз ми знаходимось на 3 стадії, всього їх буде 6

**Покрокова інструкція:**

*   Добавляємо мережі: [тут](https://scroll.io/alpha)
    

![](https://storage.googleapis.com/papyrus_images/b372d95d8dee2c6fc143667933e597e36f96a2c62b2ea610389cb79804ac39b6.png)

*   Беремо тестові монети **$ETH**: [тик](https://goerlifaucet.com/) та монети **$USDC**: [тик](https://scroll-usdc-faucet.vercel.app/)
    
    контракт **$USDC**
    
    0xA0D71B9877f44C744546D649147E3F1e70a93760
    

![](https://storage.googleapis.com/papyrus_images/a3a6347c28e7f88272f15669c8832876f4525acb131a00df231c5adaf9418102.png)

*   Ганяємо монети через офіційний [Bridge](https://scroll.io/alpha/bridge) _(робимо по 5-10 транзакції хоча б раз в тиждень)_
    

![](https://storage.googleapis.com/papyrus_images/32b79b78238cbfc41fe38e6811e69cb5fb5ac01c8298f94776338602c0f52687.png)

*   Робимо декілька свапів на [UniSwap](https://uniswap-v3.scroll.io/#/swap)
    

![](https://storage.googleapis.com/papyrus_images/22a154cc12d09ae881fccc2230373f95e8988a7429d9662d7102562578759513.png)

*   Додаємо ліквідності до [пулу](https://uniswap-v3.scroll.io/#/pool)
    

![](https://storage.googleapis.com/papyrus_images/c678b08ae0521279928ab8ec396904aab54bd0f466bbc44952a7b8ba1f4bc962.png)

*   Розгортаємо смарт контракт
    
    Переходимо на сайт [remix.ethereum.org](https://remix.ethereum.org/#lang=en&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.18+commit.87f61d96.js)
    
    1.  Створюємо новий файл
        
    2.  Даємо йому любу назву
        
    3.  Тиснем “**Enter**”
        

![](https://storage.googleapis.com/papyrus_images/ef16fbacc0b0ddf43b762637b691e1143dec618a910965fd79df5f9e1a71e267.png)

*   Копіюємо код:
    

    // 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;
        }
    }
    

*   Вертаємось на сайт, клікаємо ЛКМ в пусте поле нашого файлу та тиснемо комбінацію клавіш **CTRL+V** (_вставляємо наш код)_, підтверджуємо дії кнопкою “**OK**”
    

![](https://storage.googleapis.com/papyrus_images/0cc68e03705d82f78802411036847ea1a506989bb1bd83211e295f18db46202d.png)

*   Після цього нажимаємо комбінацію клавіш **CTRL+S** (_якщо ви робите з Windows_) і **Command+S** (_для Mac_), після цього зліва повинні побачити зелену галочку, йдемо в цей пункт
    

![](https://storage.googleapis.com/papyrus_images/851532a530d10c80dafd247de7b96f9355b13ba3196fb2fdb18990422a4e7c57.png)

*   У верхньому полі міняємо версію компілятора на найбільш свіжу (_чим більша цифра, тим свіжіше_), тиснемо кнопку **Comlite**
    

![](https://storage.googleapis.com/papyrus_images/30a692b1163c220972067bd5d00678cb4eebea44ee5ea38e78fbdd5ed27d0bc8.png)

*   Якщо все зробили правильно, то повинні побачити зелену галочку
    

![](https://storage.googleapis.com/papyrus_images/8368702dcbbf12098fb801ccd45e9a642ccd0e37b351c31fb6aff859de6d3049.png)

*   Тепер йдемо в найнижчій пункт, в пункті повинно бути вибрано **Injected Provider - MetaMask**, в пункті **Account** повинен підтягнутись ваш гаманець МетаМаск, після чого тиснемо кнопку **Deploy**
    

![](https://storage.googleapis.com/papyrus_images/145cccbd4afefce0a30008d818a73879cdd40edb0fac797eefb6b97298545c0f.png)

*   Підписуємо транзакцію в гаманці, тиснем кнопку **Approve** (_перевірте чи у вас стоїть мережа_ **_Scroll Alpha Testnet_**)
    

![](https://storage.googleapis.com/papyrus_images/0cbd4726e0d676cb564c81898a33a3baa78ba03392bf551ba0379bba3a82b8cf.png)

*   Через декілька секунд наш смарт контракт буде розвернутий, у підтвердження цьому повинна вилізти зелена галочка
    

![](https://storage.googleapis.com/papyrus_images/151f4fa39e0b905e82eeb55de44e9859a4ca7ec414fb6fc90410c3a0743c8b93.png)

*   Також у гаманці повинна з’явитись транзакція “Розгортання смарт контракту” якщо така з’явилась то ми все зробили правильно
    

![](https://storage.googleapis.com/papyrus_images/a2c1566348b729ba19ccb3fa4a9d75bd4c97c272da820956c3edf0842fdb884d.png)

*   Тепер розгортаємо свій токен в мережі **Scroll Alpha TestNet**
    
    1.  Добавляємо новий файл
        
    2.  Даємо любу назву
        
    3.  Тиснемо “**Enter**”
        

![](https://storage.googleapis.com/papyrus_images/07e2738b3c4e8cb6d8c32556cad6f0f625169795dba835d1e86822a9011868c1.png)

*   Копіюємо код:
    

    // 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);
        }
    
    }
    

*   Повертаємось на сайт, клікаємо ЛКМ на пусту ділянку файлу та тиснемо комбінацію клавіш **Ctrl+V** (_вставляємо туди наш код_), тиснемо “**OK**” у вікні яке вискочить (_якщо воно вискочить_)
    

![](https://storage.googleapis.com/papyrus_images/ec044305b038cfb384ee9ac3655a220c4111ba4cad214f80414227e0c14bb391.png)

*   Після цього нажимаємо комбінацію клавіш **CTRL+S** (_якщо ви робите з Windows_) і **Command+S** (_для Mac_), після цього зліва повинні побачити зелену галочку, йдемо в цей пункт
    

![](https://storage.googleapis.com/papyrus_images/7f0e0f72149604399da9090fc021e87d6d387e4dcc154b2c122b2e697a0713fd.png)

*   У верхньому полі міняємо версію компілятора на найбільш свіжу (_чим більша цифра, тим свіжіше_), тиснемо кнопку **Comlite**
    

![](https://storage.googleapis.com/papyrus_images/d9db1603d0fb30fffec0be538b1afd688208f203ff56b3ff995f4628403295f7.png)

*   Тепер йдемо в найнижчий пункт, в **ENVIRONMENT** треба вибрати **Injected Provider - Metamask**, в пункті **ACCOUNT** має автоматично підтягнути адрес вашого гаманця, в пункті Deploy вписуємо назву та символ токену
    

![](https://storage.googleapis.com/papyrus_images/eb557bee24d52cc44b25e0d7219a7c71a340cb5656bc04792d9d294659801fd2.png)

*   Підтверджуємо дії в гаманці (перевірте чи стоїть мережа **Scroll Alpha TestNet**)
    

![](https://storage.googleapis.com/papyrus_images/e77ee08453f1b27ef8541a6f1722913440868c9afec9e6c46cdf0300cae47aa0.png)

*   Якщо ми все зробили правильно внизу з’явиться зелена галочка
    

![](https://storage.googleapis.com/papyrus_images/7a14a646a68190b75d6630608ee60fa55414d247be7af73a277d0b2045f8d191.png)

*   Розгортуємо вкладку Deployed Contracts
    
    1.  шукаємо **ERC20 AT…** копіюємо адресу (_це адреса смарт-контракту нашого токену_)
        
    2.  Розвертаємо вкладку mint
        
    3.  В полі **amount** вставляємо значення 1800000000000000000000
        
    4.  Тиснемо кнопку **transact**
        
    5.  Підписуємо транзакцію в гаманці, кнопку **approve**
        

![](https://storage.googleapis.com/papyrus_images/6fd76f749ce34194f7ef158866308e9801ed0e5caf9ec206f8a204e7c170351c.png)

*   Далі йдемо на тестовий пул [UniSwap](https://uniswap-v3.scroll.io/#/pool), тиснемо **\+ New Position**
    

![](https://storage.googleapis.com/papyrus_images/0135a3fbd7e34c989434557aa4cfbc2386dfef539b0af208b5845cbf770d49ab.png)

*   Далі в першому полі вибираємо **$ETH** а у другому жмем **Select token**, куда вставляємо смарт-контракт нашого токену
    
*   Копіюєте значення зі скріна
    

![](https://storage.googleapis.com/papyrus_images/ba5887e1399c7dcdaee8862d4c0398a19392560567ba4e0b71abfee2aeae35dc.png)

*   Тиснем кнопку “**Preview**” та “**Add**”
    

![](https://storage.googleapis.com/papyrus_images/6f3ece460fde3d79c48ee1a0ee40d6fd87311f4894d6c282f1c466f605a3ff4c.png)

*   Якщо ми зробили все праивльно вилізе зелена галочка
    

![](https://storage.googleapis.com/papyrus_images/526f3ed2fed56b9700a107ec0077691e0803f4c655e4e825ff2eb84a1d865859.png)

### Вітаю, ми зробили всі активності які на даний момент доступні від Scroll, поганяли токени через мости, розгорнули свій смарт-контракт та створили свій власний токен

Більше корисної альфи дивись у нашому телеграм каналі - [Alpha Research](https://t.me/AlphaResearch0)

[Subscribe](null)

---

*Originally published on [t0xci](https://paragraph.com/@t0xci/scroll)*
