일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SBT표준
- ethers
- 스마트 컨트렉트 함수이름 중복
- 머신러닝기초
- ambiguous function description
- 체인의정석
- ethers websocket
- 스마트컨트렉트테스트
- ethers type
- ethers typescript
- vue기초
- 티스토리챌린지
- 러스트기초
- git rebase
- 러스트 기초
- 오블완
- chainlink 설명
- multicall
- 러스트 기초 학습
- 컨트렉트 동일한 함수이름 호출
- 스마트컨트렉트 예약어 함수이름 중복
- 스마트컨트렉트프록시
- 스마트컨트렉트 함수이름 중복 호출
- nest.js설명
- Vue.js
- Vue
- rust 기초
- 프록시배포구조
- 컨트렉트 배포 자동화
- ethers v6
- Today
- Total
목록개발/backend (92)
체인의정석
https://github.com/ethers-io/ethers.js/issues/1053 WebSocketProvider handle ws close and reconnect · Issue #1053 · ethers-io/ethers.js Hi @ricmoo, I'm using WebSocketProvider server-side to listen to blockchain events and performing calls to smart contracts. Sometimes the websocket pipe got broken and I need to reconnect it. I use... github.com 해당 링크에서는 지속적으로 코드가 업데이트 되고 있기 때문에 버전이 바뀜에 따라서 위의 링크..
A. 기본구조 1. 시작 지점인 Main.ts main.ts가 시작하는 지점이며 여기서는 AppMoudule을 받아서 app.listen 안에 있는 포트로 웹서버를 구동시킨다. import { NestFactory } from "@nestjs/core"; import { AppModule } from "./app.module"; // import * as dotenv from 'dotenv'; async function bootstrap() { // dotenv.config(); const app = await NestFactory.create(AppModule); await app.listen(3002); } bootstrap(); 2. module module의 경우 @module 데코레이터가 사용되..
예전에 컨트렉트 테스트를 할 때는 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..
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)); /..
하나의 객체 안에 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..
const arr1 = [ { pool_name: 'A', volume: null }, { pool_name: 'B', volume: 0.0999999972073686 } ]; // Pass a function to map const replaceNullWithZero = (arr) => { return arr.map(item => ({ ...item, volume: item.volume !== null ? item.volume : 0 })); }; console.log(replaceNullWithZero(arr1)) 다음과 같이 ...item을 하면 해당 객체가 그대로 나오지만 그 이후에 , 를 넣고 특정 요소에 대해서 정의해 주면 해당 조건대로 업데이트가 되어서 > Array [Object { poo..
사용한 상황 DB 정합성 체크를 받아야하는 상황 + 보안 문제로 DB에 접근이 어려운 상황에 따라서 필요한 부분만 DB에서 뽑아내서 받아오는 관리자 API를 만들어야 하는 상황이다. 여러 서버에 접근해서 DB값을 뽑아와야 하는 상황. 또한 테이블과 데이터베이스가 꾸준히 변동되는 구조이다. 그러나 sequalize를 사용중이므로 자동적으로 db에 대한 정보가 경로상의 폴더와 파일명으로 업데이트 되기 때문에 따라서 먼저 각 DB별로 db정보를 읽어와 파일을 생성해주는 api, path를 가져오는 함수를 만들어 두었으며, 이를 통해 특정 블록번호 기준으로 데이터를 조회하는 기능과 내부적으로 파일을 생성한 후 해당 파일 하나 또는 전체 데이터에 대해서 파일로 가져오는 부분을 구현하였다. 이러한 기능들을 이용하면..
이번에는 블록체인 데이터가 누락없이 저장되고 dev의 환경을 로컬에 다시 구현했을때 제대로 구현이 되고 누락된 사항이 없는지 체크하는 프로그램을 설계하고 구현하였다. 일단 각 데이터를 테이블별로 가져와서 json파일로 경로 생성 후 만들고 두 배열을 비교하는 모듈을 작성해서 두 배열을 비교했다. 이 경우 fs모듈을 통해 자유자재로 파일을 만들고 경로를 만드는 코딩이 필요했다. 이때 사용한 문법들을 아래에 정리해 보았다. fs 모듈 가져오기 var fs = require('fs'); makeFolder기능 const makeFolder = (dir) => { if(!fs.existsSync(dir)){ console.log("make folder in : ", dir) fs.mkdirSync(dir); }..