본문 바로가기

반응형

All

(40)
201일 - 송이가 살이 좀 쪘다,, 옆모습이 너무 귀엽다. 볼살이랑 턱살 사이에 턱만 뽈록 튀어나온다. - 송이가 웃을 때 눈 사이에 코주름이 생겼다. 좀 더 기쁘게 웃는걸까..?
hex String 형변환 HTTP 통신 API 에서 JSON body 값은 보통 hex String 을 사용한다. Nodejs 에서 특정 데이터 타입을 hex String 으로 변환 또는 복구해야하기 때문에 아래 코드를 정리했다. Buffer -> hex String -> Buffer let buffer = new Buffer.from("hello world"); // let bufferHexString = buffer.toString('hex'); // 68656c6c6f20776f726c64 let bufferRecovered = Buffer.from(bufferHexString, 'hex'); // let isEqual = Buffer.compare(buffer, bufferRecovered);..
솔라나 개발툴 설치 nodejs (https://github.com/nvm-sh/nvm) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install --lts npm version solana (https://docs.solana.com/cli/install-solana-cli-tools)​ sh -c "$(curl -sSfL https://release.solana.com/v1.9.13/install)" // 터미널 재시작
spl-token multisig 문제 솔라나에서는 Token Program 을 사용하여 FT 또는 NFT 를 발행한다. 여기에 multisig 기능까지 지원하는데, 쉽게말해 여러명이 허가를 해야 전송 가능한 토큰을 만드는 것이다. 문제는 multisig 을 이용한 토큰을 만들면, 그 토큰 주소로 전송된 SOL 은 전송 불가한 상태가 된다. 이에 관련하여 논의가 나왔으며 (https://github.com/solana-labs/solana-program-library/issues/2742), multisig 토큰에 전송된 SOL 을 redeem 하는 방법을 추가하기보단 multisig 토큰에 SOL 을 전송하지 않도록 경고를 강화하는 방식으로 결론이 난 것 같다.
getPastEvents 함수의 방대한 결과값을 순차적으로 처리하는 방법 Error: Returned error: query returned more than 10000 results Infura API 를 통해 조회시 결과가 10000개 이상이면 에러가 발생한다. 대표적으로 getPastEvents 함수로 토큰의 모든 트랜스퍼 이벤트를 조회할 때 발생한다. 아래 링크에서는 이 에러를 우회하기 위해 결과값이 10000개 이상일 때 이분 탐색을 제시한다. Infura returns strange error: `query returned more than 10000 results` The purpose of the function below is to track USDT that is transferred to and from Yearn and Fulcrum. When I cal..
이더리움 화이트리스트 추출 방법 NFT 민팅 하다보면 화이트리스트 스냅샷을 찍게 된다. 방법 1. https://tethrr.io/ 스냅샷 서비스를 이용한다. 장점: 이메일과 컨트랙트 주소만 입력하면 이메일로 홀더 목록을 전달해준다. 단점: 특정 시점을 지정할 수 없다. 정확한 화이트리스트 목록을 못 가져올 수 있다. 언제 쓰면 좋은가? 손쉽게 사용하고 홀더들로부터 화리 수정 요청을 받을 경우 방법 2. 스마트 컨트랙트에 홀더 리스트를 관리하는 배열을 만든다. 장점: 쿼리 한번으로 홀더 목록을 가져올 수 있다. 단점: Openzeppelin 에서 제공하는 라이브러리가 없어서 직접 개발해야 하고, 배열을 관리하는 로직으로 gas 비용이 늘어난다. 방법 3. 트랜잭션 중에 transfer 이벤트 목록을 가져와 홀더를 추적한다. 장점: 블록..
이더스캔에서 ERC721 토큰을 추적하는 방식 ERC721 컨트랙트의 transfer 함수를 수행하면 이더스캔에서 관련된 트랜잭션과 토큰의 이동 내역을 확인할 수 있다. 이더스캔은 emit 된 이벤트을 참조하여 트랜스퍼 트랜잭션을 수집한다. 만약 나만의 transfer 함수에서 토큰 이동 없이 이벤트만 emit 하여도 이더스캔에서는 이를 감지한다. 그러나 실제 토큰의 이동은 없기 때문에 EOA 자산으로는 확인할 수 없다. 추가로 Opensea 또한 이더스캔의 이런 수집 내용을 API 를 통해 참조하는 것 같다. 내가 만든 솔리디티 코드를 통해 Etherscan 또는 Opensea 에 영향을 줄 수 있기 때문에 충분한 테스트를 거쳐야 한다.
솔리디티의 Safe Math 기능과 Counters 객체 솔리디티에서는 오버플로우/언더플로우에 의한 공격 사례가 발생했다. 이를 막기 위해서 Safe Math 기능이 ^0.8.0 버전부터 기본적으로 적용되어 수에 대한 증가/감소에 검사 로직이 추가되었다. 다만 Safe Math 로직을 수행하는 것도 gas 가 소요되는 부분이다. Openzeppelin 라이브러리 Counters 객체는 수를 증가시킬 때 Safe Math 를 사용하지 않는다. Counters 객체를 사용하면 오버플로우에 대한 로직은 없고, 수는 default 시작 값은 0 이다. 그리고 수를 증가시키는 로직은 unchecked 태그 내에서 수행하여 Safe Math 기능을 명시적으로 disable 한다. 이는 EVM 에서 0 부터 2^256 까지 증가시키는 로직은 사실상 불가능하다 라는 전재를 ..