Web3 개발 초보자에게 있어 자신만의 토큰을 개발하고 배포하는 것은 온체인 소프트웨어 구축을 시작하고, Solidity 실력을 향상시키며, Web3 개발 라이프사이클을 이해하는 가장 인기 있는 방법 중 하나입니다.
이더리움에는 다양한 토큰 표준이 존재하며, 이는 토큰이 이더리움 네트워크 및 다른 dapp과의 호환성, 준수성, 상호운용성을 보장하기 위해 따라야 하는 사전 정의된 규칙 집합입니다.
이러한 표준에는 대체 가능 토큰을 위한 ERC-20, 대체 불가능 토큰(NFT)을 위한 ERC-721, 멀티 토큰 유형을 위한 ERC-1155, 고급 토큰 기능을 위한 ERC-777, 증권형 토큰을 위한 ERC-1400, 그리고 토큰화된 볼트를 위한 ERC-4626이 포함됩니다.
이 블로그에서는 표준 스마트 컨트랙트 템플릿의 안전하고 검증된 구현을 제공하는 라이브러리인 OpenZeppelin을 활용하여 ERC-20 토큰을 개발할 것입니다. 개발 환경 설정, 토큰 컨트랙트 작성, 그리고 Linea 레이어 2 네트워크에 배포하는 과정을 단계별로 살펴보겠습니다.
1단계: Hardhat으로 개발 환경 설정하기
이더리움 토큰 개발을 시작하기 전에 개발 환경을 설정해야 합니다. 이 블로그에서는 Hardhat을 사용할 것입니다. 아래 단계를 따라 진행하세요:
Node.js 및 npm 설치: Node.js는 JavaScript 런타임이며, npm은 패키지 관리자입니다. 공식 Node.js 웹사이트에서 다운로드하여 설치하세요.
새 Hardhat 프로젝트 생성: 터미널을 열고, 프로젝트를 위한 새 디렉토리를 만든 후 해당 디렉토리로 이동합니다. 그런 다음 아래 명령어를 실행하세요:
mkdir my-token
cd my-token
npm init -y
npm install --save-dev hardhat
npx hardhat
필요한 Hardhat 플러그인 및 OpenZeppelin 컨트랙트 설치:
npm install @nomiclabs/hardhat-ethers ethers @openzeppelin/contracts
2단계: 이더리움 토큰 생성하기
간단한 ERC-20 토큰을 생성하려면 다음 단계를 따르세요:
토큰 컨트랙트 생성: Hardhat 프로젝트에서 contracts 디렉토리로 이동하여 MyToken.sol이라는 새 파일을 만듭니다. 이 파일을 열고 토큰 컨트랙트를 정의하세요:
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);
}
}
이 스마트 컨트랙트는 OpenZeppelin 라이브러리를 사용하여 심볼 "MTK"를 가진 "MyToken"이라는 ERC-20 토큰을 생성합니다. 배포 시 배포자가 지정한 초기 공급량의 토큰을 발행하고 배포자의 주소에 할당합니다.
배포 스크립트 작성: scripts 디렉토리에 deploy.js라는 새 파일을 만들고, 컨트랙트를 배포하기 위한 다음 코드를 추가하세요:
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);
});
위 스크립트는 Hardhat과 ethers.js를 사용하여 "MyToken" 스마트 컨트랙트를 배포하며, 1,000,000개의 토큰 공급량으로 초기화합니다. 배포자의 주소를 가져와 컨트랙트를 배포합니다.
컨트랙트 로컬 컴파일 및 배포: 터미널에서 Hardhat이 제공하는 로컬 블록체인에 컨트랙트를 컴파일하고 배포하세요:
npx hardhat compile
npx hardhat run scripts/deploy.js --network localhost
3단계: Linea 테스트넷에 토큰 컨트랙트 배포하기
ERC-20 토큰을 로컬에서 개발하고 배포했으니, 이제 Infura와 MetaMask를 사용하여 Linea 테스트넷에 배포할 차례입니다. 다음 단계에 따라 Linea 테스트넷에서 토큰을 라이브로 운영하세요.
Infura 계정 설정: Infura는 다양한 블록체인 네트워크와 테스트넷에 쉽게 접근할 수 있도록 해줍니다. 새 프로젝트를 생성하고, 지원 네트워크 메뉴에서 Linea Sepolia 테스트넷을 선택한 후 프로젝트 ID를 복사하세요.
MetaMask 설정: MetaMask 지갑을 열고 네트워크 섹션으로 이동합니다. 드롭다운 메뉴에서 "테스트 네트워크 표시"가 활성화되어 있는지 확인한 후 Linea Sepolia 테스트넷을 선택하세요.
Linea Sepolia ETH 받기: 컨트랙트를 배포할 때 가스비를 지불하기 위해 Linea Sepolia ETH가 필요합니다. 공식 Linea Sepolia 파우셋을 방문하여 Linea ETH를 받을 수 있습니다.
Hardhat 설정 업데이트: Hardhat 프로젝트에서 hardhat.config.js를 업데이트하여 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
}
}
};
.env 파일에 필요한 환경 변수가 포함되어 있는지 확인하세요:
INFURA_PROJECT_ID=your_infura_project_id
PRIVATE_KEY=your_private_key
Linea Sepolia 테스트넷에 컨트랙트 배포하기
이제 Linea 테스트넷에 토큰 컨트랙트를 배포하려면 다음 명령어를 실행하세요:
npx hardhat compile
npx hardhat run scripts/deploy.js --network lineaTestnet
이 스크립트는 MetaMask에 연결된 계정을 사용하여 ERC-20 토큰 컨트랙트를 Linea 테스트넷에 배포합니다.
MetaMask Developer로 Web3 dapp 개발 역량 높이기
이더리움 토큰 개발의 기초를 익히고, 개발 환경을 설정하며, 모범 사례를 준수함으로써 자신만의 이더리움 토큰을 성공적으로 개발하고 배포할 수 있습니다. 새로운 암호화폐를 만들거나 자산을 토큰화하는 경우 모두, 이더리움은 아이디어를 현실로 구현할 수 있는 도구와 생태계를 제공합니다.
Sign-in-with-Ethereum(SIWE), EIP-6963 지원, Snaps를 통한 MetaMask와의 원활한 통합 등 더 고급 개발 요구 사항을 위해 MetaMask Developer 포털을 방문하세요. 이 포털은 사용자 온보딩을 간소화하고, 개발자가 MetaMask 사용자를 위한 고유하고 퍼미션리스한 지갑 연결 및 인앱 경험을 구축할 수 있도록 설계된 포괄적인 도구, API, SDK 모음을 제공합니다.