화이트리스트 구현 #1 : https://serverdown.tistory.com/537

영상링크: https://youtu.be/jEpKPYbctlg

mapping 과 배열을 이용한 자료구조를 설명하려고 예를 든것일뿐
이렇게 복잡하게 구현할 필요는 굳이 없을것 같습니다.

소스코드 입니다.

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Storage {

    uint public count = 0;

    mapping(address => uint) private map_addr;
    address[] list_addr;
    bool use_whitelist = true;

    constructor() {
        address a = 0x1e0A33d97f7793035704F5B0d896c631fb47BbE4;
        // map_addr[a] = 1;
        add_whitelist(a);
    }

    function is_whitelist(address addr) public view returns(uint) {
        return map_addr[addr];
    }

    function get_whitelist_by_no(uint no) public view returns(address) {
        return list_addr[no-1];
    }

    function get_whitelist_by_addr(address a) public view returns(uint) {
        return map_addr[a];
    }
    
    function is_whitelist_2() public view returns(uint) {
        return map_addr[msg.sender];
    }

    function add_whitelist(address a) public {
        require(map_addr[a] == 0);

        list_addr.push(a);
        uint no = list_addr.length;
        map_addr[a] = no;
    }
    
    function del_whitelist(address a) public {
        require(map_addr[a] != 0);

        uint no = map_addr[a];
        uint index = no - 1;
        uint last_no = list_addr.length;
        uint last_index = last_no - 1;
        address last_a = list_addr[last_index];
        list_addr[index] = last_a;
        list_addr.pop();

        delete map_addr[a];
        // map_addr[a] = 0;
        if(index == last_index) {
            return;
        }
        
        map_addr[last_a] = no;
    }

    function set_use_whitelist(bool b) public {
        use_whitelist = b;
    }
    
    function mint_a() public {
        if(use_whitelist) {
            require(is_whitelist_2() != 0);
        }

        count++;
        // _mint(no, link);
    }
}

 

화이트리스트를 추가 / 삭제할때마다 이벤트를 남기면 스마트컨트랙트를 굳지 조회할 필요없이
이벤트로그를 모아 보면 현재 화이트리스트에 무엇이 저장되어있는지 알 수 있습니다.
이벤트 구현은 이 부분을 참고해주세요 

이벤트 구현 참고자료: https://serverdown.tistory.com/498

 

코딩자습서/019 스마트컨트렉트 이벤트 모니터 만들어봅시다. / caver-js

이 기능은 이벤트 모니터 라고도 부르고 이벤트 감시기 라고도 부릅니다. 영어로는 watch 나 monitor 라고 부르더군요. 영상주소: https://www.youtube.com/watch?v=HxGpjz9LCc8 소스코드: https://github.com/Go..

serverdown.tistory.com

 


WRITTEN BY
SIDNFT
게임개발자에서 WEBGL 웹개발자로 전환중

,