일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- rust 기초
- ethers type
- 스마트컨트렉트 예약어 함수이름 중복
- erc4337 contract
- 러스트 기초
- ambiguous function description
- 체인의정석
- 스마트 컨트렉트 함수이름 중복
- Vue
- 컨트렉트 동일한 함수이름 호출
- 머신러닝기초
- ethers typescript
- redux toolkit 설명
- 오블완
- vue기초
- Vue.js
- cloud hsm 사용하기
- 티스토리챌린지
- git rebase
- 스마트컨트렉트 함수이름 중복 호출
- ethers v6
- cloud hsm 서명
- redux 기초
- 러스트 기초 학습
- cloud hsm
- SBT표준
- erc4337
- 러스트기초
- 계정추상화
- ethers websocket
- Today
- Total
목록분류 전체보기 (526)
체인의정석
이번에 살펴볼 내용은 ERC-5484 이다. https://eips.ethereum.org/EIPS/eip-5484 ERC-5484: Consensual Soulbound Tokens Interface for special NFTs with immutable ownership and pre-determined immutable burn authorization eips.ethereum.org 먼저 해당 표준이 나온 동기부터 살펴보도록 하자 "소울바운드 토큰에 대한 아이디어는 출판 이후 상당한 주목을 받았습니다. 그러나 표준 인터페이스가 없으면 소울바운드 토큰은 호환되지 않습니다. 토큰 구현에 대한 최소한의 합의 없이 소울바운드 토큰을 대상으로 하는 보편적인 서비스를 개발하는 것은 어렵습니다. 이 EIP는..

1. 들어가며 먼저 SoulBoundToken이란 전송 불가능한 토큰으로서 최근 메타버스 분야를 비롯하여 많은 곳에서 인증의 수단이나 활용의 수단으로 쓰이고 있다. 필자는 서강대 메타버스전문대학원 과정의 학생으로서 SBT에 대한 공부를 좀 살펴보려는 취지에서 따로 조사를 진행하기 위하여 글로 정리하는 것이며 대략적으로 SBT는 전송이 불가능하다는 특징 외에는 아는 것이 없었는데 SBT와 관련된 공식 표준을 통해서 어떤 내용이 있는지 살펴보도록 하겠다. 필자도 처음 살펴보는 내용이므로 해당 내용은 투자정보 또는 100% 자세한 내용임은 보장할 수 없지만 더 전문적이고 자세한 연구글이 나오기 전까지 처음 SBT의 구현체를 접근하려는 사람들에게 도움을 주기 위하여 해당 글을 작성한다. 사실 SBT의 표준에 대..
예전에 컨트렉트 테스트를 할 때는 web3나 ethers의 단위 변환 특히 parseUnits(amount,decimal) 을 많이 썼었는데 사실 백엔드에서 소수점 계산등을 하려고 하면 잘 안된다. 따라서 예전부터 많이 쓰이는 bignumber.js를 사용해서 계산하는 것이 좋다. 물론 web3나 ethers의 최신 버전에서는 bignumber 없이도 bigint 형태로 모두 처리가 되지만 기존 코드들을 모두 업데이트 하는 것은 쉬운 일이 아니므로 bignumber.js를 사용할 경우가 더 많다. 일단 먼저 계산하기에 앞서서 10진수 숫자형으로 바꾸는 작업부터 해주고 const price0 = parseInt(data.price0, 10); const price1 = parseInt(data.price1..
시퀄라이즈를 이용하게 되면 기본적으로 created at, updated at을 만들어 준다. 다만 이렇게 할 경우 raw query 대신에 시퀄라이즈의 문법을 써주어야 한다. 내가 이번에 작업했던 쿼리는 upsert() 라는 시퀄라이즈 함수를 사용하면 되었는데 나는 raw query로 작업을 하였다. 그러다 보니 raw query로 Update, create를 하는 방법을 찾게 되었다. const table = sequelize.define(table_name, { createdAt: { type: DataTypes.DATE, field: 'created_at', defaultValue: sequelize.literal('CURRENT_TIMESTAMP'), }, updatedAt: { type: Da..
tickSpace 맞추기 tick별로 계산할 때 모든 틱을 다 관리할 수 없기에 uniswap V3에서 tick Space 단위로 맞출 때 올림 내림 처리를 해주어야 한다. 각 풀마다 tick이 다르다보니 각 풀별 기본 tickSpace를 컨트렉트 콜로 불러와서 사용해주어야 한다. function adjustedStartTick(tick, tickSpace) { return Math.floor(tick / tickSpace) * tickSpace; } function adjustedEndTick(tick, tickSpace) { return Math.ceil(tick / tickSpace) * tickSpace; } // Test console.log(adjustedStartTick(14, 10)); /..
현재 데이터의 상태를 업데이트 하는 쿼리를 만들다가 데이터가 있는지 DB접근 1 번 그리고 데이터가 없다면 삽입 있다면 업데이트를 하는 로직을 따로 만들었다. 그러나 이를 한번에 할 수 있는 방법이 있을거 같아 찾아보니 "MySQL에서는 INSERT ... ON DUPLICATE KEY UPDATE를 사용하여 레코드가 존재하면 업데이트하고, 존재하지 않으면 삽입하는 동작을 한 번의 쿼리로 수행할 수 있습니다. 그러나 먼저 이를 사용하려면 해당 테이블에 기본 키나 유니크 키 제약 조건이 있어야 합니다." 라고 챗 GPT가 알려줬다. const query = ` INSERT INTO DBNAME.${table_name} (A, B) VALUES ('${a}', '${b}') ON DUPLICATE KEY U..
실제 운영 서버 또는 공용 dev 서버 등에서는 매우 많은 양의 로그가 발생한다. 이러한 경우 일자별로 로그 파일이 압축되어 있기도 한다. 만약 에러가 발생했는데 로그를 보면서 원인을 파악해야 하는 상황이라면 압축파일을 복사해서 풀고 확인하려면 너무나도 번거롭고 복잡하며 부담감 까지 든다. 하지만 라인 하나로 압축을 안풀고 검색할 수 있는 방법이 있다. 사실 로그 파일을 검색하는 방법에 대해서는 이전에도 기록을 해두었는데 이번에 더 자세한 검색을 하면서 사용한 코드들을 기록해 보려고 한다. 먼저 터미널에서 특정 단어 검색하는 방법은 아래 링크에 정리되어 있다. https://it-timehacker.tistory.com/433 터미널에서 파일의앞,뒤,특정 부분만 뽑아서 출력하기(head, tail, g..
하나의 객체 안에 2개의 배열이 들어가 있는 상황이다. const tokensArr = TOKENS.map(t => { const path = {}; path.paths = t.paths; path.paths_v3 = t.paths_v3; path.tableName = t.tableName; path.address = t.address; return path }) 이런식으로 paths라는 배열과 paths_v3라는 배열이 있는데 두 배열을 모두 검색해서 내가 찾고자 하는 값이 양쪽 배열 중에 한쪽에 포함이 되어 있는지를 검토하는 함수를 짜고 싶었다. 평소에 자주 쓰던 filter가 생각나서 먼저 filter를 사용하려고 챗 gpt에게 물어보니 챗 gpt는 some 함수를 추천해주었다. checkPools..