PCL을 활용한 규제 준수 토큰 만들기
ERC20 토큰을 배포하고 마루의 프로그래머블 컴플라이언스 레이어를 사용하여 KYC 요구사항을 강제하는 방법을 배웁니다.
학습 목표
- ✓마루에 표준 ERC20 배포하기
- ✓PCL 정책 템플릿 생성하기
- ✓컨트랙트에 정책 바인딩하기
- ✓비준수 사용자에 대한 트랜잭션 거부 확인하기
사전 요구사항
- 기본 Solidity 지식
- OKRW가 있는 마루 테스트넷 계정
필요 도구
HardhatMaroo CLI (marood)Go
이 튜토리얼에서는 유효한 KYC 증명이 있는 사용자 간에만 전송할 수 있는 '제한된 토큰'을 만듭니다. 화이트리스트를 추가하기 위해 Solidity 코드를 수정하지 않고, 대신 PCL을 사용하여 체인 수준에서 이를 강제합니다.
1
1. 토큰 배포
먼저 Hardhat을 사용하여 표준 OpenZeppelin ERC20 토큰을 배포합니다. 컨트랙트 주소를 기록해 두세요.
scripts/deploy.js javascript
const Token = await ethers.getContractFactory('MyToken');
const token = await Token.deploy();
await token.waitForDeployment();
console.log('Token deployed to:', token.target); 2
2. 정책 템플릿 생성
Maroo CLI를 사용하여 특정 EAS 스키마 UID(KYC를 나타냄)를 요구하는 정책을 생성합니다.
terminal bash
marood tx pcl create-policy-template --name "KYC-Required" --rules "require-schema:0x123..." --from my-wallet 참고: 규칙 구문은 특정 PCL 버전에 따라 다릅니다. 규칙 정의에 대한 참조를 확인하세요.
3
3. 컨트랙트에 정책 바인딩
이제 2단계에서 반환된 템플릿 ID를 배포된 컨트랙트 주소에 연결합니다.
terminal bash
marood tx pcl set-contract-policy --contract 0xYourTokenAddress --template-id 1 --from my-wallet 4
4. 강제 집행 테스트
증명이 없는 주소로 토큰을 전송해 봅니다. 트랜잭션은 프로토콜 수준에서 실패해야 합니다.
test/compliance.js javascript
try {
await token.transfer(nonKycUser, 100);
} catch (error) {
console.log('Transaction blocked by PCL:', error.message);
} 마무리
컴플라이언스 로직을 비즈니스 로직에서 성공적으로 분리했습니다. 이제 귀하의 토큰은 복잡한 Solidity 화이트리스트 없이도 규제를 준수합니다.