티스토리 뷰

Role을 자신뿐만 아니라 3자에게도 부여하여 해당 주소도 민팅이 가능하도록 해보기.

 

테스트를 위해 발행 주소 말고 하나의 버너지갑이 더 필요함. (미리 만들어두기 메타마스크 계정 생성하면 됨.)

 

1. 오픈재플린 Wizard 통해 Mintable, Role 체크하여 기본 코딩된 틀 생성

2. Remix IDE에 솔리디티 확장자로 컨트렉 생성

디플로이로 발행 및 verify까지 완료하기.

 

3. 3자 주소에 Role 부여하기

컨트렉 인증까지 끝나면 Read Contract, Write Contract가 뜬다. 이 중 Write Contract의 grantRole을 통해 제 3자에게 Role을 부여할 것이다.

Wizard로 작성된 코드를 보면 MITER_ROLE의 변수로 keccak256 해시 알고리즘을 통해 "MINTER_ROLE"이라는 변수가 32바이트로 암호화 되어 있다. 이를 해독하기 위해 하기 사이트를 이용.

(https://emn178.github.io/online-tools/keccak_256.html)

16진수의 해시값을 복사해서 grantRole의 role에 넣는다. account에는 준비한 두번째 버너지갑 주소를 넣는다.

0x는 16진수를 의미한다.

트랜젝션 컨펌 확인 후 Read contract의 hasRole을 "MINTER_ROLE"을 넣어 날려보면 true로 바껴있음을 알 수 있다.

 

4. Role 부여된 다른 지갑으로 민팅해보기.

발행한 주소가 아닌 Role을 부여한 주소로 Connect 후 자신의 주소에 민팅해본다.

amount에 10^18을 곱해주지 못해 해당과 같이 소수점 만큼만 전송됐다. (단위 실수 조심..)

아무튼 Role 부여안된 지갑으로하면 트랜젝션은 모두 실패되고 가스비만 나간다.

이런 Role을 부여하는 방식을 통해 다른 지갑으로도 민팅을 진행할 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함