본문 바로가기
개발 💻/Blockchain

[Ethereum] Remix 로 Base Sepolia (Superchain) 컨트랙트 배포하기

by 감사로봇 2025. 4. 1.

Base Sepolia (Superchain) 컨트랙트 배포하기

이 글에서는 Remix 를 사용해 Solidity 로 작성한 스마트 컨트랙트를 Base Sepolia 테스트넷에 배포하는 방법을 소개합니다.

글을 따라하면, 아래와 같은 것들을 경험할 수 있습니다.

  • Base Sepolia 테스트넷 설정
  • Base Sepolia Faucet 이용 - 테스트용 ETH 얻기
  • Remix 에서 컨트랙트 작성, 컴파일, 배포
  • 배포 후 ethers.js 로 컨트랙트에 접근해 보기

스마트 컨트랙트를 테스트넷에서 실전처럼 다루고 싶은 분들에게 추천합니다.

 

Base Sepolia 테스트넷

Base Sepolia 는 Superchain 에 배포된 Layer2 블록체인 중 하나인 Base Mainnet 의 테스트넷입니다. [공식]

Superchain 공식(Optimism) 사이트에서 Superchain Faucet 을 이용할 수 있습니다.

 

Superchain Dev Console

Tools to help you build, launch, and grow your app on the Superchain

console.optimism.io

해당 Faucet 은 24시간당 하나의 테스트넷에 0.1 ETH 를 수신할 수 있습니다.

 

회원가입은 이메일을 입력하는 것으로 충분합니다. 이메일 인증 코드를 통해 회원가입합니다.

이후 Github 연결을 수행해야 Superchain Faucet 을 이용할 수 있습니다. Github 연결이 완료되면, Connect Wallet 을 통해 자신의 지갑 주소를 연결합니다.

 

필요한 Network 의 테스트용 토큰을 수신하면 되는데, 여기서는 Base Sepolia 의 ETH 를 수신하고자 합니다.
아래 Claim 버튼을 통해 입금을 기다립니다.

 

Superchain Faucet

 

연결된 지갑 주소로 전송이 완료되면, Etherscan 주소가 안내됩니다. 그러나 해당 주소는 Sepolia 테스트넷 주소로 가게 되므로, 우리가 원하는 주소인 Base Sepolia 는 아래 링크를 이용합니다.

https://sepolia.basescan.org/

 

TESTNET Base Sepolia Network (ETH) Blockchain Explorer

BaseScan allows you to explore and search the Ethereum blockchain for transactions, addresses, tokens, prices and other activities taking place on Ethereum (ETH)

sepolia.basescan.org

 

여기서 자신의 지갑 주소를 입력하여, 트랜잭션 처리 결과를 기다리면 됩니다. Base Sepolia 의 경우 입금까지 약 1~2분 정도의 시간이 소요되니, 새로고침을 하며 기다리면 입금된 것을 확인할 수 있습니다.

Base Sepolia Scan 입금 확인완료

 

참고로 Superchain Faucet 은 어떤 테스트넷에 지급 받더라도, 24시간에 0.1 ETH 를 수신하게 되므로 네트워크를 혼동하지 않도록 합니다.

Faucet 제한

 

동일하게 MetaMask 에서도 Base Sepolia Faucet 입금을 확인할 수 있는데, 기본적인 블록체인 목록으로 제공하지 않기 때문에 네트워크 추가가 필요합니다.

https://docs.base.org/chain/using-base#testnet

 

Base Docs

Explore the documentation for Base, a secure, low-cost, builder-friendly Ethereum L2

docs.base.org

 

MetaMask 사용자 지정 네트워크 추가를 통해, 아래 정보를 입력합니다.

Key Value
Network Name Base Sepolia
RPC Endpoint https://sepolia.base.org
Chain ID 84532
Currency Symbol ETH
Block Explorer https://sepolia-explorer.base.org

Base Sepolia 테스트넷 추가 완료

 

해당 Base Sepolia 네트워크를 선택하고 메인화면으로 돌아오면 입금이 완료되어 있는 것을 확인할 수 있습니다.

Faucet 입금완료

 

이제 Remix 를 통해 스마트 컨트랙트를 배포할 수 있게 되었습니다.

 

Remix 로 테스트넷에 컨트랙트 배포하기

Remix 를 이용하면 브라우저 IDE 에서 스마트 컨트랙트를 구현할 수 있습니다.

 

[Ethereum] Remix를 이용하여 스마트 컨트랙트 배포하기

Remix 만약 이더리움 블록체인에 대해서도 잘 알지도 못하는데 스마트 컨트랙트를 구현해서 배포해야 하는 상황이 왔다면 적잖이 당황할 것입니다. 제가 그랬습니다. 인터넷에서 자료를 검색하

ts01.tistory.com

 

이 글에서는 Base Sepolia 테스트넷에 컨트랙트를 배포하는 것이 중심이므로, Remix 에서 기본 제공하는 컨트랙트를 이용하여 수행하도록 하겠습니다.

Remix 에 처음 접속하게 되면, 아래 컨트랙트들이 예시로 구현되어 있습니다.

Smart Contract Example in Remix

 

여기서 구현된 Solidity 파일을 선택하면, 자동으로 컴파일이 진행됩니다. 컴파일 진행이 성공적으로 완료되면, 좌측에 보이는 것처럼 체크 표시가 생겨나게 되며, 선택한 해당 Solidity 파일에 대한 컴파일이 완료된 것입니다. (Auto compile 옵션 때문)

Compile Succeeded

 

배포는 4번째 아이콘인 Deploy & Run transactions 메뉴를 이용하도록 합니다.

Deploy & Run transactions 메뉴

 

컨트랙트를 배포할 환경 Environmet 를 'Injected Provider - MetaMask' 로 선택합니다. 앞서 Base Sepolia ETH 를 수신하면서, 테스트넷을 설정하였기 때문에, 바로 해당 테스트넷 환경으로 연결이 됩니다.

MetaMask 연결

 

지갑 주소 및 잔고가 올바르게 연결된 것을 확인하면, 해당 네트워크로 컨트랙트 배포가 가능하게 설정된 것입니다. 배포할 컨트랙트를 설정하면 되는데, 앞서 파일 선택 > 자동 컴파일을 통해 선택된 컨트랙트가 배포될 수 있게 준비되어 있습니다.

Smart Contract

 

'Deploy' 버튼을 누르면, MetaMask 가 계약 배포를 수행할 것인지 물어봅니다.

Smart Contract 배포 확인

 

'컨펌'을 누르면 약간의 시간 뒤에, Remix 내에서 컨트랙트 배포가 완료된 것을 확인할 수 있습니다.

Smart Contract 배포 성공

 

실행 결과 중 'view on Blocksout' 을 클릭하면 트랜잭션 처리 상세를 사이트에서 확인할 수 있습니다.

컨트랙트 배포가 완료되었으므로, 이제 ethers.js 를 통해 직접 컨트랙트를 호출해 보도록 하겠습니다.

 

TypeScript 에서 ethers.js 사용하기

먼저, 원하는 경로에서 YARN 패키지를 이용해 단순한 TypeScript 환경을 구성하겠습니다.


        
yarn init

명령어를 입력하면, 이름, 버전, 설명 등 몇가지 정보를 포함한 package.json 이 생성됩니다.

 

아래 명령어를 통해 TypeScript 환경 조성에 필요한 패키지들을 설치합니다.


        
yarn add --dev typescript ts-node @types/node

 

추가적으로 ethers.js 를 사용하기 위한 패키지들을 설치합니다.


        
yarn add ethers dotenv

dotenv 패키지는 환경변수 (.env) 파일에서 민감한 정보(API 키, 지갑 키 등)를 불러오기 위해 사용됩니다.

 

 

tsconfig.json 파일을 생성하여 아래와 같이 기본적인 설정을 추가합니다.


        
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"outDir": "dist"
},
"include": ["./src"]
}

 

src 디렉토리에 index.ts 파일을 생성합니다.

그리고 package.json 에서 실행 스크립트를 하나 추가하여, 아래와 같이 되도록 합니다.


        
{
"name": "ethers-example",
"version": "0.0.1",
"main": "index.js",
"author": "anonymous",
"license": "MIT",
"scripts": {
"start": "ts-node src/index.ts"
},
"devDependencies": {
"@types/node": "^22.13.15",
"ts-node": "^10.9.2",
"typescript": "^5.8.2"
},
"dependencies": {
"dotenv": "^16.4.7",
"ethers": "^6.13.5"
}
}

 

터미널에 yarn start 명령어를 입력하면, TypeSciprt 실행이 성공적으로 되는 것을 확인할 수 있습니다.

 

다음으로 환경변수 .env 파일을 생성하고 아래 값들을 채워 줍니다.


        
RPC_ENDPOINT=https://sepolia.base.org
CONTRACT_ADDRESS=?
PRIVATE_KEY=?

 

Contract Address 값은 Remix 에서 컨트랙트를 배포한 뒤 나타나는 값이나, 트랜잭션 처리 결과 상세에서 확인할 수 있습니다. 해당 값을 복사하여 입력합니다.

배포된 컨트랙트 주소

 

지갑 주소 개인 키는 MetaMask 의 '계정 세부 정보' 에서 '개인 키 표시' 를 통해 확인할 수 있습니다.

MetaMask 에서 개인 키 보기

 

확인한 개인 키는 그 어떤 누구에게도 공유하지 않도록 합니다. 환경변수 파일에 세 가지 값을 모두 마련하면 환경설정은 끝입니다.

 

이제 index.ts 에 아래 코드를 작성합니다.


        
import { config } from "dotenv";
import { ethers } from "ethers";
// Load .env file
config();
const provider = new ethers.JsonRpcProvider(process.env.RPC_ENDPOINT);
const contractAddress = process.env.CONTRACT_ADDRESS as string;
const privateKey = process.env.PRIVATE_KEY as string;
if (!provider || !contractAddress || !privateKey) {
console.error(
"Please set the RPC_ENDPOINT, CONTRACT_ADDRESS, and PRIVATE_KEY in your .env file."
);
process.exit(1);
}
const abis = [
"function store(uint256 num) public",
"function retrieve() public view returns (uint256)",
];
async function main() {
const wallet = new ethers.Wallet(privateKey, provider);
const contract = new ethers.Contract(contractAddress, abis, wallet);
console.log("📥 현재 저장된 값 불러오는 중...");
const current = await contract.retrieve();
console.log("현재 값:", current.toString());
console.log("📝 새 값 42를 저장합니다...");
const tx = await contract.store(42);
await tx.wait(); // 트랜잭션이 완료될 때까지 대기
console.log("✅ 값 저장 완료");
const updated = await contract.retrieve();
console.log("📤 업데이트된 값:", updated.toString());
}
main();

 

소스코드를 분석하면 아래와 같습니다.

  • 먼저, 상단에서 dotenv 를 이용하여 필요한 환경변수들을 불러옵니다. 환경변수들이 세팅되지 않은 경우 프로그램이 종료됩니다.
  • abis 값에는 배포된 컨트랙트의 함수 형태를 선언합니다. Storage.sol 에는 2개의 함수가 선언되어 있으므로, 해당 변수의 인터페이스를 적어줍니다.
  • 메인 함수에서는 각각 저장(store) 함수와 조회(retrieve) 함수를 실행하는 예시를 보여주고 있습니다.

 

실행 결과를 통해, ethers.js 를 통한 이더리움 컨트랙트 호출 결과를 확인할 수 있습니다.


        
yarn start

실행 결과

 

이제 이더리움 스마트 컨트랙트를 구현하면, 테스트넷에 배포를 수행하고 직접 호출해볼 수 있는 소스코드 영역을 마련하였습니다.

본 글을 통해, 아래 내용을 달성하였습니다.

  • Base Sepolia 테스트넷 설정
  • Base Sepolia Faucet 이용 - 테스트용 ETH 얻기
  • Remix 에서 컨트랙트 작성, 컴파일, 배포
  • 배포 후 ethers.js 로 컨트랙트에 접근해 보기

 

감사합니다.