# Полюємо на дроп від Scroll **Published by:** [t0xci](https://paragraph.com/@t0xci/) **Published on:** 2023-03-18 **URL:** https://paragraph.com/@t0xci/scroll ## Content Scroll - це Layer2 проєкт по масштабуванню Ethereum з технологією ZK-Rollups.Проєкт залучив 50млн$ у новому раунді фінансування. Раніше Scroll залучив 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Покрокова інструкція:Добавляємо мережі: тутБеремо тестові монети $ETH: тик та монети $USDC: тик контракт $USDC 0xA0D71B9877f44C744546D649147E3F1e70a93760Ганяємо монети через офіційний Bridge (робимо по 5-10 транзакції хоча б раз в тиждень)Робимо декілька свапів на UniSwapДодаємо ліквідності до пулуРозгортаємо смарт контракт Переходимо на сайт remix.ethereum.orgСтворюємо новий файлДаємо йому любу назвуТиснем “Enter”Копіюємо код:// 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”Після цього нажимаємо комбінацію клавіш CTRL+S (якщо ви робите з Windows) і Command+S (для Mac), після цього зліва повинні побачити зелену галочку, йдемо в цей пунктУ верхньому полі міняємо версію компілятора на найбільш свіжу (чим більша цифра, тим свіжіше), тиснемо кнопку ComliteЯкщо все зробили правильно, то повинні побачити зелену галочкуТепер йдемо в найнижчій пункт, в пункті повинно бути вибрано Injected Provider - MetaMask, в пункті Account повинен підтягнутись ваш гаманець МетаМаск, після чого тиснемо кнопку DeployПідписуємо транзакцію в гаманці, тиснем кнопку Approve (перевірте чи у вас стоїть мережа Scroll Alpha Testnet)Через декілька секунд наш смарт контракт буде розвернутий, у підтвердження цьому повинна вилізти зелена галочкаТакож у гаманці повинна з’явитись транзакція “Розгортання смарт контракту” якщо така з’явилась то ми все зробили правильноТепер розгортаємо свій токен в мережі Scroll Alpha TestNetДобавляємо новий файлДаємо любу назвуТиснемо “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); } } Повертаємось на сайт, клікаємо ЛКМ на пусту ділянку файлу та тиснемо комбінацію клавіш Ctrl+V (вставляємо туди наш код), тиснемо “OK” у вікні яке вискочить (якщо воно вискочить)Після цього нажимаємо комбінацію клавіш CTRL+S (якщо ви робите з Windows) і Command+S (для Mac), після цього зліва повинні побачити зелену галочку, йдемо в цей пунктУ верхньому полі міняємо версію компілятора на найбільш свіжу (чим більша цифра, тим свіжіше), тиснемо кнопку ComliteТепер йдемо в найнижчий пункт, в ENVIRONMENT треба вибрати Injected Provider - Metamask, в пункті ACCOUNT має автоматично підтягнути адрес вашого гаманця, в пункті Deploy вписуємо назву та символ токенуПідтверджуємо дії в гаманці (перевірте чи стоїть мережа Scroll Alpha TestNet)Якщо ми все зробили правильно внизу з’явиться зелена галочкаРозгортуємо вкладку Deployed Contractsшукаємо ERC20 AT… копіюємо адресу (це адреса смарт-контракту нашого токену)Розвертаємо вкладку mintВ полі amount вставляємо значення 1800000000000000000000Тиснемо кнопку transactПідписуємо транзакцію в гаманці, кнопку approveДалі йдемо на тестовий пул UniSwap, тиснемо + New PositionДалі в першому полі вибираємо $ETH а у другому жмем Select token, куда вставляємо смарт-контракт нашого токенуКопіюєте значення зі скрінаТиснем кнопку “Preview” та “Add”Якщо ми зробили все праивльно вилізе зелена галочкаВітаю, ми зробили всі активності які на даний момент доступні від Scroll, поганяли токени через мости, розгорнули свій смарт-контракт та створили свій власний токенБільше корисної альфи дивись у нашому телеграм каналі - Alpha ResearchSubscribe ## Publication Information - [t0xci](https://paragraph.com/@t0xci/): Publication homepage - [All Posts](https://paragraph.com/@t0xci/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@t0xci): Subscribe to updates - [Twitter](https://twitter.com/0xt0xci): Follow on Twitter