Morph — модульний L2, який поєднуючи сильні сторони Optimistic і ZK roll-ups, прагне підвищити масштабованість, мінімізувати витрати, прискорити вирішення спорів і забезпечити безпечні та адаптовані транзакції.
Залучили на Seed раунді $20 млн. інвестицій від DragonFly Capital, Pantera Capital, The Spartan Group та інших.
Links:
Зараз йде остання фаза тестнету перед запуском майннет.
📝 Інструкція до тестнету
1. При потребі запрошуємо тестові токени для мережі Holesky:
2. Переходимо на брідж, підключаємо гаманець та відправляємо тестові ETH в мережу Morph Holesky
3. Так само тестуємо вивід
4. Приєднуємось до Discord та ознайомлюємось, як отримати ролі в каналі call-of-morphy
5. Виконуємо завдання в наступних каналах, відправляємо пруфи до proof-of-challenges та отримуємо XP
Якщо у вас не відображаються канали, перейдіть до Канали і ролі → Перегляд каналів → Підписатися на категорію
Щоб переглянути свої транзакції, на сайті бріджу натисніть на свій адрес та перейдіть до Transactions
6. Деплоїм свій контракт на Remix
Якщо ви не розумієте, як деплоїти контракт, можете скористатись гайдом по деплою контракту в тестнеті Botanix, лише замінивши код (в ньому можете редагувати назву контракту, нейм, тікер, саплай):
https://www.youtube.com/watch?t=47&v=GY2d94FJWJI&feature=youtu.be
Код:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract whereismymoney {
string public name = "whereismymoney";
string public symbol = "WIMM";
uint8 public decimals = 18;
uint256 public totalSupply = 1000000 * (10 ** uint256(decimals));
address public owner;
mapping(address => uint256) balances;
mapping(address => mapping(address => uint256)) allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor() {
owner = msg.sender;
balances[owner] = totalSupply;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can call this function.");
_;
}
function balanceOf(address account) public view returns (uint256) {
return balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(recipient != address(0), "ERC20: transfer to the zero address");
require(amount <= balances[msg.sender], "ERC20: transfer amount exceeds balance");
balances[msg.sender] -= amount;
balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
require(recipient != address(0), "ERC20: transfer to the zero address");
require(amount <= balances[sender], "ERC20: transfer amount exceeds balance");
require(amount <= allowances[sender][msg.sender], "ERC20: transfer amount exceeds allowance");
balances[sender] -= amount;
balances[recipient] += amount;
allowances[sender][msg.sender] -= amount;
emit Transfer(sender, recipient, amount);
return true;
}
function allowance(address account, address spender) public view returns (uint256) {
return allowances[account][spender];
}
function burn(uint256 amount) public returns (bool) {
require(amount <= balances[msg.sender], "ERC20: burn amount exceeds balance");
balances[msg.sender] -= amount;
totalSupply -= amount;
emit Transfer(msg.sender, address(0), amount);
return true;
}
function mint(uint256 amount) public onlyOwner returns (bool) {
require(totalSupply + amount <= 2**256 - 1, "ERC20: total supply exceeds uint256");
balances[owner] += amount;
totalSupply += amount;
emit Transfer(address(0), owner, amount);
return true;
}
}
Complier вибирайте такий, який вказаний в коді:
7. Заповнюємо форму на амбасадора
Якщо у вас будуть будь-які запитання, буду радий вас бачити в тг каналі