Skip to main content

Documentation Index

Fetch the complete documentation index at: https://daehan-base.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Base에서 토큰을 출시하는 방법은 노코드 플랫폼부터 커스텀 스마트 컨트랙트 개발까지 다양합니다. 이 가이드는 올바른 방법을 선택하는 데 도움을 주고, 두 가지 접근 방식에 대한 구현 세부 사항을 제공합니다.

플랫폼 출시

빠른 배포를 위해 Zora, Clanker, Flaunch 등 기존 플랫폼 사용

커스텀 개발

최대한의 제어를 위해 Foundry로 커스텀 ERC-20 토큰 빌드

접근 방식 선택

올바른 방법을 선택하는 데 도움이 되는 의사결정 프레임워크

모범 사례

보안, 커뮤니티 빌딩, 출시 후 가이드
대부분의 사용자에게: Zora, Clanker, Flaunch 같은 기존 토큰 출시 플랫폼을 사용하세요. 이 도구들은 기술적 복잡성을 처리하면서 다양한 사용 사례에 대한 고유한 기능을 제공합니다.개발자에게: 최대한의 제어와 커스터마이징을 위해 Foundry와 OpenZeppelin의 검증된 컨트랙트를 사용하여 커스텀 ERC-20 토큰을 빌드하세요.

출시 방식 선택

플랫폼 기반 출시 (대부분의 사용자에게 권장)

다음을 원할 때 플랫폼을 선택하세요:
  • 코딩 없이 빠른 배포
  • 내장된 커뮤니티 기능
  • 자동화된 유동성 관리
  • 소셜 통합 기능

커스텀 개발 (개발자용)

다음이 필요할 때 자체 스마트 컨트랙트를 빌드하세요:
  • 커스텀 토크노믹스 또는 기능
  • 컨트랙트 동작에 대한 완전한 제어
  • 기존 시스템과의 통합
  • 고급 보안 요구사항

Base의 토큰 출시 플랫폼

Zora

최적 용도: 콘텐츠 크리에이터 및 소셜 토큰 Zora는 모든 게시물을 자동 Uniswap 통합이 있는 거래 가능한 ERC-20 토큰으로 변환합니다. 각 게시물은 10억 공급량의 “코인”이 되며, 크리에이터는 1천만 토큰을 받고 모든 거래 수수료의 1%를 얻습니다. 주요 기능:
  • 소셜 우선 토큰 생성
  • 자동 유동성 풀
  • 크리에이터를 위한 수익 공유
  • 내장된 거래 인터페이스
Zora 시작하기 →

Clanker

최적 용도: 소셜 미디어를 통한 빠른 밈코인 출시 Clanker는 Farcaster를 통해 운영되는 AI 기반 토큰 배포 도구입니다. 사용자는 토큰 개념과 함께 @clanker를 태그하여 Base에서 ERC-20 토큰을 만들 수 있습니다. 주요 기능:
  • AI 기반 자동화
  • Farcaster를 통한 소셜 미디어 통합
  • 즉각적인 배포
  • 커뮤니티 주도 발견
Clanker 시작하기 → 또는 clanker.world 방문

Flaunch

최적 용도: 정교한 토크노믹스를 갖춘 고급 밈코인 프로젝트 Flaunch는 Uniswap V4를 활용하여 프로그래밍 가능한 수익 분배, 자동화된 바이백, 가격 지지를 위한 Progressive Bid Wall을 가능하게 합니다. 크리에이터는 수수료 분배와 재무 관리를 커스터마이즈할 수 있습니다. 주요 기능:
  • 프로그래밍 가능한 수익 공유
  • 자동화된 바이백 메커니즘
  • Progressive Bid Wall 기술
  • 재무 관리 도구
Flaunch 시작하기 →

Mint Club

최적 용도: 토큰 패밀리 및 커뮤니티 주도 자산 Mint Club은 누구나 기존 ERC-20 토큰을 기반으로 새 토큰 또는 NFT를 출시할 수 있게 합니다. 각 거래는 본딩 커브 풀에 부모 토큰을 잠궈 온체인 자동 관리 유동성을 생성하여 부모 토큰을 강화하면서 새로운 커뮤니티 자산을 지원합니다. 주요 기능:
  • 어떤 ERC-20 토큰에서도 토큰 또는 NFT 출시
  • 커스터마이즈 가능한 본딩 커브로 자동화된 유동성
  • 크로스체인 스왑이 포함된 통합 거래 인터페이스
  • 내장된 에어드롭 및 잠금 도구
  • 토큰 및 NFT 간편 거래
  • 크리에이터 수익 공유
Mint Club 시작하기 →

Foundry를 사용한 기술적 구현

토큰 구현에 대한 완전한 제어를 원하는 개발자를 위해 Foundry를 사용하여 Base에서 커스텀 ERC-20 토큰을 만들고 배포하는 방법을 안내합니다.
커스텀 개발된 토큰을 프로덕션에 출시하기 전에 항상 전문 스마트 컨트랙트 개발자의 보안 검토를 받으세요.

사전 요구사항

1

Foundry 설치

시스템에 Foundry를 설치합니다:
Terminal
curl -L https://foundry.paradigm.xyz | bash
foundryup
자세한 설치 지침은 Foundry 문서를 참조하세요.
2

테스트 ETH 받기

Base 파우셋에서 테스트용 Base Sepolia ETH를 받으세요
3

개발 환경 설정

Base 테스트넷 배포를 위한 지갑과 개발 도구를 설정합니다

프로젝트 설정

새 Foundry 프로젝트를 초기화하고 템플릿 파일을 정리합니다:
Terminal
# 새 프로젝트 생성
forge init my-token-project
cd my-token-project

# 필요 없는 템플릿 파일 삭제
rm src/Counter.sol script/Counter.s.sol test/Counter.t.sol
안전하고 감사된 ERC-20 구현을 위해 OpenZeppelin 컨트랙트를 설치합니다:
Terminal
# OpenZeppelin 컨트랙트 라이브러리 설치
forge install OpenZeppelin/openzeppelin-contracts

스마트 컨트랙트 개발

OpenZeppelin의 ERC-20 구현을 사용하여 토큰 컨트랙트를 만듭니다:
src/MyToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title MyToken
 * @dev 발행 기능과 공급 상한이 있는 ERC-20 토큰
 */
contract MyToken is ERC20, Ownable {
    // 존재할 수 있는 최대 토큰 수
    uint256 public constant MAX_SUPPLY = 1_000_000_000 * 10**18; // 10억 토큰
    
    constructor(
        string memory name,
        string memory symbol,
        uint256 initialSupply,
        address initialOwner
    ) ERC20(name, symbol) Ownable(initialOwner) {
        require(initialSupply <= MAX_SUPPLY, "Initial supply exceeds max supply");
        // 컨트랙트 배포자에게 초기 공급량 발행
        _mint(initialOwner, initialSupply);
    }
    
    /**
     * @dev 새 토큰 발행 (컨트랙트 소유자만 호출 가능)
     * @param to 토큰을 발행할 주소
     * @param amount 발행할 토큰 수량
     */
    function mint(address to, uint256 amount) public onlyOwner {
        require(totalSupply() + amount <= MAX_SUPPLY, "Minting would exceed max supply");
        _mint(to, amount);
    }
    
    /**
     * @dev 호출자의 잔액에서 토큰 소각
     * @param amount 소각할 토큰 수량
     */
    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }
}

배포 스크립트

Foundry 모범 사례를 따르는 배포 스크립트를 만듭니다:
script/DeployToken.s.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {Script, console} from "forge-std/Script.sol";
import {MyToken} from "../src/MyToken.sol";

contract DeployToken is Script {
    function run() external {
        // 환경 변수에서 배포자의 개인 키 로드
        uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
        address deployerAddress = vm.addr(deployerPrivateKey);
        
        // 토큰 설정 매개변수
        string memory name = "My Token";
        string memory symbol = "MTK";
        uint256 initialSupply = 100_000_000 * 10**18; // 1억 토큰
        
        // 트랜잭션 브로드캐스팅 시작
        vm.startBroadcast(deployerPrivateKey);
        
        // 토큰 컨트랙트 배포
        MyToken token = new MyToken(
            name,
            symbol,
            initialSupply,
            deployerAddress
        );
        
        // 트랜잭션 브로드캐스팅 중지
        vm.stopBroadcast();
        
        // 배포 정보 로그
        console.log("Token deployed to:", address(token));
        console.log("Token name:", token.name());
        console.log("Token symbol:", token.symbol());
        console.log("Initial supply:", token.totalSupply());
        console.log("Deployer balance:", token.balanceOf(deployerAddress));
    }
}

환경 설정

설정이 포함된 .env 파일을 만듭니다:
.env
PRIVATE_KEY=your_private_key_here
BASE_SEPOLIA_RPC_URL=https://sepolia.base.org
BASE_MAINNET_RPC_URL=https://mainnet.base.org
BASESCAN_API_KEY=your_basescan_api_key_here
Base 네트워크 설정을 위해 foundry.toml을 업데이트합니다:
foundry.toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
remappings = ["@openzeppelin/=lib/openzeppelin-contracts/"]

[rpc_endpoints]
base_sepolia = "${BASE_SEPOLIA_RPC_URL}"
base_mainnet = "${BASE_MAINNET_RPC_URL}"

[etherscan]
base_sepolia = { key = "${BASESCAN_API_KEY}", url = "https://api-sepolia.basescan.org/api" }
base = { key = "${BASESCAN_API_KEY}", url = "https://api.basescan.org/api" }

테스트

토큰에 대한 포괄적인 테스트를 만듭니다:
test/MyToken.t.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import {Test, console} from "forge-std/Test.sol";
import {MyToken} from "../src/MyToken.sol";

contract MyTokenTest is Test {
    MyToken public token;
    address public owner = address(0x1);
    address public user = address(0x2);
    
    uint256 constant INITIAL_SUPPLY = 100_000_000 * 10**18;
    
    function setUp() public {
        // 각 테스트 전에 토큰 컨트랙트 배포
        vm.prank(owner);
        token = new MyToken("Test Token", "TEST", INITIAL_SUPPLY, owner);
    }
    
    function testInitialState() public {
        // 올바른 매개변수로 토큰이 배포됐는지 확인
        assertEq(token.name(), "Test Token");
        assertEq(token.symbol(), "TEST");
        assertEq(token.totalSupply(), INITIAL_SUPPLY);
        assertEq(token.balanceOf(owner), INITIAL_SUPPLY);
    }
    
    function testMinting() public {
        uint256 mintAmount = 1000 * 10**18;
        
        // 소유자만 발행할 수 있어야 함
        vm.prank(owner);
        token.mint(user, mintAmount);
        
        assertEq(token.balanceOf(user), mintAmount);
        assertEq(token.totalSupply(), INITIAL_SUPPLY + mintAmount);
    }
    
    function testBurning() public {
        uint256 burnAmount = 1000 * 10**18;
        
        // 소유자가 자신의 토큰 소각
        vm.prank(owner);
        token.burn(burnAmount);
        
        assertEq(token.balanceOf(owner), INITIAL_SUPPLY - burnAmount);
        assertEq(token.totalSupply(), INITIAL_SUPPLY - burnAmount);
    }
    
    function testFailMintExceedsMaxSupply() public {
        // 최대 공급량을 초과하여 발행하려 할 때 이 테스트는 실패해야 함
        uint256 excessiveAmount = token.MAX_SUPPLY() + 1;
        
        vm.prank(owner);
        token.mint(user, excessiveAmount);
    }
    
    function testFailUnauthorizedMinting() public {
        // 소유자가 아닌 사용자가 발행하려 할 때 이 테스트는 실패해야 함
        vm.prank(user);
        token.mint(user, 1000 * 10**18);
    }
}
테스트를 실행합니다:
Terminal
# 모든 테스트를 상세 출력으로 실행
forge test -vv

배포 및 검증

Base Sepolia 테스트넷에 배포합니다:
Terminal
# 환경 변수 로드
source .env

# 자동 검증과 함께 Base Sepolia에 배포
forge script script/DeployToken.s.sol:DeployToken \
    --rpc-url base_sepolia \
    --broadcast \
    --verify
--verify 플래그는 BaseScan에서 컨트랙트를 자동으로 검증하여 사용자가 토큰과 더 쉽게 상호작용할 수 있게 합니다.
Base 메인넷에 배포하려면 배포 명령에서 base_sepoliabase_mainnet으로 변경하세요. Base 메인넷에 배포와 가스 수수료를 위한 충분한 ETH가 있는지 확인하세요.

출시 후 고려사항

토큰이 배포된 후 고려해야 할 주요 다음 단계입니다:

토큰 배포 및 경제

토큰의 공급 및 배포 설정을 신중하게 고려하세요. 토큰이 커뮤니티, 팀, 에코시스템 참여자에게 어떻게 배포될지 생각하세요. 베스팅 일정, 배분 비율, 장기 인센티브 정렬 같은 요소들을 고려하세요.

커뮤니티 및 소셜 존재감

토큰 및 프로젝트 주변에 커뮤니티와 소셜 존재감을 구축하세요. 여기에는 문서 작성, 소셜 미디어 계정 설정, Base 에코시스템 참여, 다른 프로젝트 및 개발자와의 관계 구축이 포함됩니다.

유동성 및 거래

거래를 활성화하기 위해 Uniswap 같은 탈중앙화 거래소에 유동성을 추가하세요. 토큰 런처는 일반적으로 자동으로 처리해 주지만, 커스텀 배포의 경우 거래 쌍을 만들고 초기 유동성을 제공해야 합니다.

지속적인 개발

마케팅 전략, 에코시스템 통합, 성장 전술을 포함한 Base에서 프로젝트를 성장시키는 종합적인 가이드는 Base 출시 플레이북을 방문하세요.
토큰을 개발하고 출시할 때 항상 보안, 투명성, 커뮤니티 가치를 우선시하세요. 보안 감사를 진행하고 토큰 배포에 대한 모범 사례를 따르는 것을 고려하세요.

리소스

Base 퀵스타트 가이드

Base 시작을 위한 완전한 가이드

Base 네트워크 세부 정보

기술 사양 및 네트워크 정보

Foundry 문서

Foundry 사용에 대한 종합 가이드

OpenZeppelin 컨트랙트

보안 중심의 스마트 컨트랙트 라이브러리

BaseScan 탐색기

Base의 트랜잭션 및 컨트랙트 탐색

Base 파우셋

개발을 위한 테스트넷 ETH 받기

커뮤니티

Base Discord

Base 커뮤니티 참여

Base Twitter

Base 업데이트 팔로우

Base GitHub

Base 개발에 기여

속도와 편의를 위한 플랫폼 기반 접근 방식을 선택하든, 최대한의 제어를 위한 커스텀 개발을 선택하든, Base는 토큰 출시를 위한 강력한 기반을 제공합니다. 기술적 전문성과 프로젝트 요구사항에 가장 적합한 접근 방식으로 시작하고, Base의 성장하는 에코시스템을 활용하여 성공적인 토큰 프로젝트를 빌드하세요.