
1. 스테이킹 이란?
스테이킹이란 보유한 암호화폐를 스마트 컨트랙트에 예치하여, 일정 기간 동안 락업(Lock-up)하고 그에 대한 보상(이자, 리워드 등)을 받는 행위를 의미합니다. 대표적으로 DeFi, PoS(Proof of Stake) 네트워크 등에서 활용되며, 사용자는 보유 자산을 단순히 지갑에 두는 것보다 스테이킹을 통해 추가 수익을 얻을 수 있고, 토큰 제공자는 유동성 확보를 할 수 있기 때문에 상부상조의 역할을 가지고 있습니다.
https://choseolmin.github.io/staking-dapp/
2. 주요 구조
(1) 배포 할 컨트랙트
| 이름 | 역할 |
| DonToken (ERC20) | 토큰 발행, approve 용도 |
| Staking | 스테이킹 / 언스테이킹 / 이자 관리 |
(2) Staking 컨트랙트 주요 함수
| 주요 함수 | 설명 |
| stake(uint256 amount) | 스테이킹 (토큰 예치) |
| unstake() | 원금 + 이자 수령 |
| getStakeInfo(address) | 현재 스테이킹 상태 조회 |
3. 프론트엔드 기능 구성
| 기능 | 역할 |
| 메타마스크 지갑 연결 | ethers.js 사용 |
| 스테이킹 컨트랙트 주소 입력 | 직접 입력 가능하게 구성 |
| 스테이킹 | approve 후 stake 실행 |
| 이자 확인 | getStakeInfo() 조회 후 표시 |
| 언스테이킹 | unstake() 실행 |
4. 중요한 포인트: permit vs transferFrom 비교
(1) transferFrom
- approve() 먼저 실행 → 지갑 서명 필요
- 이후 컨트랙트가 transferFrom() 으로 토큰 직접 이동
- 두 번 트랜잭션 필요 (approve, stake)
donToken.approve(stakingAddress, amount); staking.stake(amount);
장점: ERC20 표준 / 모든 토큰 호환
단점: 트랜잭션 2번 필요
(2) permit (ERC20Permit, EIP-2612)
- permit() 서명으로 승인 (on-chain 없이 오프체인 서명)
- 한번의 트랜잭션으로 바로 stake() 가능
token.permit(...) staking.stakeWithPermit(...)
장점: 사용자 입장에서 approve 트랜잭션 없음 (가스비 절약)
단점: permit 지원하는 토큰만 가능 (USDC, DAI는 OK, 오래된 토큰은 불가)
'공부 내용 정리' 카테고리의 다른 글
| 유니온 파인드란? (0) | 2025.07.21 |
|---|---|
| wagmi란? (0) | 2025.07.18 |
| 블록체인에서 오라클이란? (1) | 2025.07.16 |
| 블록체인에서 프록시란? (0) | 2025.07.15 |
| ERC-2612란? (0) | 2025.07.14 |