화이트리스트 구현 #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 웹개발자로 전환중

,




영상링크: https://www.youtube.com/watch?v=cWM3704pUns

mapping 을 사용했습니다.

단순한 형태로 작성한거구요

솔리디티 코드:

// SPDX-License-Identifier: GPL-3.0
// 0x281725fc1AD9AEDeFb8ADb1f4572E97CA918ED00

pragma solidity >=0.7.0 <0.9.0;

contract Storage {

    mapping(address => uint) private map_addr;
    bool use_whitelist = true;
    uint count = 0;
    
    constructor() {
        address a = 0x1e0A33d97f7793035704F5B0d896c631fb47BbE4;
        add_whitelist(a);
    }

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

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

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

        map_addr[a] = 1;
    }
    
    function del_whitelist(address a) public {
        require(map_addr[a] != 0);

        // map_data[a] = 0;
        delete map_addr[a];
    }

    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);
    }
}

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

,




영상주소: https://www.youtube.com/watch?v=1Y73hFhND9w 
소스주소: https://github.com/GoToTheMetaverse/klay-tutorial-v2/tree/main 의 klaytn-01 폴더 입니다.

node v14 와 node v16 설명이 있습니다.

truffle 을 이용하는 방식은 클레이튼 업그레이드 시 버전이 바뀌는 경우가 있어서 
초보자분들이 사용하기 너무 어려울것 같습니다.

웹개발과 연동해서 개발하려면 truffle 이 편한점이 있긴합니다.
이미 완성된 솔리디티라면 오히려 Klaytn IDE 에서 진행하는게 좋다고 판단되는군요.

// 2022-06-11 기준 수동 설치시

npm install caver-js@1.8.0
npm install truffle-hdwallet-provider-klaytn
npm install -D truffle@5.5.6

 


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

,




영상: https://www.youtube.com/watch?v=5U55D1uDfCY

테스트넷 이름은 바오밥 네트워크 입니다. Baobab network

충전페이지: https://baobab.wallet.klaytn.com/faucet

 

Klaytn Wallet

 

baobab.wallet.klaytn.com

여기로 가셔서 지갑 주소 넣고 받기 버튼 누르면 끝입니다.

그러면 이전에는 어쨌냐가 중요한데요.
로그인 하라고 지갑 비밀키를 넣어야 했습니다.
보안이 취약한 방법이었죠.

클레이튼은 루나 사태와는 별도로 폭망중인데요. (수수료인상)
그래도 조금씩 개선되고 있는걸로봐선 살아있긴한가봅니다.


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

,




영상주소: https://www.youtube.com/watch?v=K0luq5uMDmo
소스주소: https://github.com/GoToTheMetaverse/klay-tutorial-v2/tree/main 의 klaytn-07-6폴더입니다.

참고자료

서명방법 코드: https://forum.klaytn.foundation/t/kaikas-sign-list/2395
cdnjs 의 caver-js: https://forum.klaytn.foundation/t/cdnjs-caver-js-cdn/4873

카이카스와 caver-js 를 이용한 검증방법입니다.

유저에게 서명받는 코드 (카이카스 UI 가 뜹니다. 아래쪽에 그림있음)

        const caver = new Caver(window.klaytn);
        console.log("create caver");

        const sig = await caver.klay.sign(1, wallet_addr, "");
        console.log("sig", sig);

        const v = `0x` + sig.substring(2).substring(128, 130);
        const r = `0x` + sig.substring(2).substring(0, 64);
        const s = `0x` + sig.substring(2).substring(64, 128);
        const signature = [v, r, s];
        console.log("signature", signature);

 

서버에서 signature 받아서 검증하는 코드:

let sign_ret = await caver.validator.validateSignedMessage(
    //
    "",
    signature,
    wallet_addr
  );
  console.log("sign_ret", sign_ret);
  // sign_ret: true or false

 

카이카스 메시지 서명 UI

서명란에 메시지가 횡한데 글씨 넣을 방법 없는지 찾고 있습니다.

 

 

 

 

 

 


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

,




이 기능은 이벤트 모니터 라고도 부르고 이벤트 감시기 라고도 부릅니다.
영어로는 watch 나 monitor 라고 부르더군요.

영상주소: https://www.youtube.com/watch?v=HxGpjz9LCc8
소스코드: 
https://github.com/GoToTheMetaverse/klay-tutorial-v2/tree/main klaytn-08-event-monitor 폴더입니다.

이벤트 모니터가 있어야 좀더 괜찮은 서비스를 만들수 있습니다.
스마트컨트렉트는 수정이 안되기 때문에 어려운 기능을 구현하다가 버그라도 생기면 리스크가 크기 때문에 적당히 쉬운 기능을 구현하고 이벤트를 이용해서 외부에서 어려운 기능을 구현하는 편이 수정이 용이 합니다.

이 소스는contract.getPastEvents() 를 활용합니다.
 
contract.events.allEvents() 를 이용하는 코드는 제대로 동작이 안되서 생략했습니다.
참고해주세요

 

디스코드봇과 연동했습니다. 디스코트로와서 구경해보세요

가위바위보 게임 페이지: https://klaytngame-1.gunillee.repl.co/
디스코드 초대링크: https://discord.gg/7REtkPHHJX

 

Join the SIDNFT Discord Server!

Check out the SIDNFT community on Discord - hang out with 10 other members and enjoy free voice and text chat.

discord.com

결과 스샷:

 

추후 개발 예정:
1. 전적관리
2. 웹페이지에 실시간 내역 추가
3. 차트나 그래프 추가

의견있으시면 디스코드로와서 이야기해주세요


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

,




https://www.youtube.com/watch?v=Iq4p2JVCmNw 

 

이번편 부터는 블로그에도 내용이 올라갑니다.

유니티로 full webgl page 을 계획중인데요 시작부터 꼬였습니다.
빌드용량이 너무 커졌습니다. 처음엔 32mb 였는데 현재는 60mb 입니다.
이 방법이 아닐 수도 있겠다는 솔솔 들고 있습니다.

두번째로는 뜬금없는 옛날 flash 이야기입니다.
유니티로 full webgl page <- webgl 의 시작 <- flash 의 보안문제 <- 옛날 flash 이야기가 되어버렸습니다.

유니티 주가도 태초마을로 가버려서 제 이야기도 태초로 가버렸다고 할까요

마지막으로 클레이튼 수수료 인하 이슈 입니다. 30배 -> 10배로 줄인다고 하네요
다시 클레이튼 개발에 손을 델 시기거 같습니다.

 


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

,




 

2022년 05월 09 업데이트

5월중에 가상화폐에 큰 하락빔이 있을 예정이라고 합니다.
주식 하락에 따른 마진콜을 막기위해 현금화가 필요한 기관들이 많아서
돈이 되는 가상화폐먼저 던지게 된다는 시나리오입니다.

큰하락을 보고 들어오는게 좋을꺼 같습니다. 에정일은 5월말 이내라고 하네요.

출처: https://www.youtube.com/watch?v=fcMX8C0S4so&t=1525s 

 

 

2022년 05월 03일 첫작성

클레이튼의 현재 가격은 874원이군요. 클레이튼만의 문제는 아니고 최근 다들 내리고 있긴합니다.
수수료인상 이야기가 나왔을때 가격이 1400원 정도 였습니다. 많이 하락했죠.

750ston 인 현재 장난질 했다간 코인이 녹나내리를 수준이라 사용하기 어렵습니다. 거기다 코인 가격 자체도 내리는 문제가 있어서 이러지도 저리지도 못하는 가두리 상황 비슷하군요.

그래서 5월 첫째주에 소각도 진행하고 다시 수수료를 30배에서 10배 수준으로 내린다고 하네요
참고내용: https://www.dstreet.io/blockchain/flash-news/2022/04/51938/

미국 금리 인상 상황도 있어서 현재 많은 자산들이 바닥권을 형성하고 있습니다.
금리가 결정나면 당분간은 오르고 다시 금리이슈가 나와서 또 떨어지고를 반복할것 같습니다.

다음번 하락 저점이 이번 하락 저점보다 높다면 장기적으로도 바닥이 아닐까 생각되구요
코인 원가가 이렇게 내리면 수수료 인상 이슈도 같이 희석됩니다.

클레이튼 측에서도 움직임이 있으니 더이상의 하락을 볼수만은 없다는 신호로 판단하구요.
(더 하락하면 회사에서 추가적인 움직일 것이라는 전제가 깔려있습니다.)

이 가격대가 지지되지 않을까 생각하구요.
다시 들어가봅니다. 코인 자산의 10% 정도만요 

 


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

,