Como iniciante no desenvolvimento web3, criar e implantar seu próprio token é uma das formas mais populares de começar a desenvolver software on-chain, aprimorar suas habilidades em Solidity e entender o ciclo de vida do desenvolvimento web3.
No Ethereum, existem diversos padrões de token, que são conjuntos predefinidos de regras que os tokens devem seguir para garantir compatibilidade, conformidade e interoperabilidade com a rede Ethereum e outros dapps.
Esses padrões incluem ERC-20 para tokens fungíveis, ERC-721 para tokens não fungíveis (NFTs), ERC-1155 para múltiplos tipos de tokens, ERC-777 para funcionalidades avançadas de tokens, ERC-1400 para security tokens e ERC-4626 para vaults tokenizados.
Neste blog, vamos desenvolver um token ERC-20 utilizando o OpenZeppelin, uma biblioteca que oferece implementações seguras e testadas de templates padrão de smart contracts. Vamos percorrer a configuração do seu ambiente de desenvolvimento, a escrita do contrato do token e sua implantação na rede layer 2 Linea.
Etapa 1: Configure seu ambiente de desenvolvimento com Hardhat
Antes de começar a desenvolver seu token Ethereum, você precisará configurar seu ambiente de desenvolvimento. Neste blog, utilizaremos o Hardhat. Siga os passos abaixo:
Instale o Node.js e o npm: O Node.js é um runtime JavaScript, e o npm é seu gerenciador de pacotes. Faça o download e instale-os pelo site oficial do Node.js.
Crie um novo projeto Hardhat: Abra seu terminal, crie um novo diretório para o seu projeto e navegue até ele. Em seguida, execute:
mkdir my-token
cd my-token
npm init -y
npm install --save-dev hardhat
npx hardhat
Instale os plugins necessários do Hardhat e os contratos do OpenZeppelin:
npm install @nomiclabs/hardhat-ethers ethers @openzeppelin/contracts
Etapa 2: Crie seu token Ethereum
Siga estas etapas para criar um token ERC-20 simples:
Crie um contrato de token: No seu projeto Hardhat, navegue até o diretório de contratos e crie um novo arquivo chamado MyToken.sol. Abra esse arquivo e defina o contrato do seu token:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
_mint(msg.sender, initialSupply);
}
}
Este smart contract cria um token ERC-20 chamado "MyToken" com o símbolo "MTK" utilizando a biblioteca do OpenZeppelin. Quando implantado, ele cunha um fornecimento inicial de tokens especificado pelo deployer e os atribui ao endereço do deployer.
Escreva um script de implantação: No diretório de scripts, crie um novo arquivo chamado deploy.js e adicione o seguinte código para implantar seu contrato:
async function main() {
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account:", deployer.address);
const MyToken = await ethers.getContractFactory("MyToken");
const myToken = await MyToken.deploy(1000000);
console.log("MyToken deployed to:", myToken.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
O script acima implanta o smart contract "MyToken" usando Hardhat e ethers.js, inicializando-o com um fornecimento de 1.000.000 de tokens. Ele recupera o endereço do deployer e implanta o contrato.
Compile e implante seu contrato localmente: No seu terminal, compile e implante seu contrato em uma blockchain local fornecida pelo Hardhat:
npx hardhat compile
npx hardhat run scripts/deploy.js --network localhost
Etapa 3: Implante seu contrato de token na testnet da Linea
Agora que desenvolvemos e implantamos nosso token ERC-20 localmente, é hora de implantá-lo na testnet da Linea usando Infura e MetaMask. Siga estas etapas para colocar seu token em funcionamento na testnet da Linea.
Configure uma conta na Infura: A Infura oferece acesso fácil às diversas redes blockchain e suas testnets. Crie um novo projeto, selecione a testnet Linea Sepolia no menu de redes suportadas e copie o ID do projeto.
Configure a MetaMask: Abra sua carteira MetaMask e navegue até a seção de redes. No menu suspenso, certifique-se de que "mostrar redes de teste" esteja ativado. Em seguida, selecione a testnet Linea Sepolia.
Obtenha ETH da Linea Sepolia: Ao implantar seu contrato, você precisará de ETH da Linea Sepolia para pagar as taxas de gas. Você pode obter algum ETH da Linea visitando a faucet oficial da Linea Sepolia.
Atualize a configuração do Hardhat: No seu projeto Hardhat, atualize seu hardhat.config.js para incluir a configuração da testnet da Linea:
require("@nomiclabs/hardhat-ethers");
require("dotenv").config();
module.exports = {
solidity: "0.8.0",
networks: {
lineaTestnet: {
url: `https://linea-sepolia.infura.io/v3/${process.env.INFURA_PROJECT_ID}`,
accounts: [`0x${process.env.PRIVATE_KEY}`],
chainId: 59141
}
}
};
Certifique-se de que seu arquivo .env contenha as variáveis de ambiente necessárias:
INFURA_PROJECT_ID=your_infura_project_id
PRIVATE_KEY=your_private_key
Implante seu contrato na testnet Linea Sepolia
Agora, para implantar seu contrato de token na testnet da Linea, execute este comando:
npx hardhat compile
npx hardhat run scripts/deploy.js --network lineaTestnet
Este script implantará seu contrato de token ERC-20 na testnet da Linea usando a conta conectada à MetaMask.
Avance no desenvolvimento de dapps web3 com o MetaMask Developer
Ao dominar os fundamentos do desenvolvimento de tokens Ethereum, configurar seu ambiente de desenvolvimento e seguir as melhores práticas, você poderá desenvolver e implantar seu próprio token Ethereum com sucesso. Seja criando uma nova criptomoeda ou tokenizando um ativo, o Ethereum oferece as ferramentas e o ecossistema para transformar suas ideias em realidade.
Visite o portal MetaMask Developer para necessidades de desenvolvimento mais avançadas, como Sign-in-with-Ethereum (SIWE), suporte para EIP-6963 e integração perfeita com a MetaMask via Snaps. Ele oferece um conjunto abrangente de ferramentas, APIs e SDKs projetados para simplificar o onboarding de usuários e permitir que desenvolvedores criem conexões de carteira únicas e sem permissão, além de experiências in-dapp personalizadas para usuários da MetaMask.