일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 머신러닝기초
- 스마트 컨트렉트 함수이름 중복
- ethers typescript
- 체인의정석
- ethers websocket
- ethers
- ethers type
- Vue.js
- 러스트 기초
- 스마트컨트렉트테스트
- multicall
- 컨트렉트 배포 자동화
- ethers v6
- 스마트컨트렉트 함수이름 중복 호출
- vue기초
- erc4337
- 러스트기초
- 스마트컨트렉트 예약어 함수이름 중복
- Vue
- 오블완
- git rebase
- erc4337 contract
- rust 기초
- ambiguous function description
- 티스토리챌린지
- SBT표준
- 계정추상화
- chainlink 설명
- 컨트렉트 동일한 함수이름 호출
- 러스트 기초 학습
- Today
- Total
목록개발/database (29)
체인의정석
상황 : 트랜잭션 데이터 중 이벤트 로그 같은 것들은 json 형태로 조회된다. 이런 자료형들을 DB에서 접근해와서 api를 제작해야 하는 상황 1. json_extract 사용하기 먼저 mysql에서 JSON 형태로 된 자료형의 특정 요소를 뽑아서 쿼리를 하려면 json_extract 를 사용하면 된다. json_extract(event_data,'$.KEY') as borrower 만약 블록체인 이벤트를 조회하는 event_data가 DB에 저장 되어 있다고 하면 이와 같은 문구에서 KEY에 JSON의 키 값을 넣어주면 된다. 2. grop by 사용하기 여러 데이터들을 합산하기 위해서는 grop by를 사용하면 된다. 다만 이때 select 문에서 선택되는 값들은 합산을 하지 않는 값들을 모두 gr..
sequalize에서 토큰의 데이터 타입을 정의하려면 숫자형을 쓰면 너무 높아서 에러가 난다. 블록 넘버의 경우 그냥 숫자형을 써주면 되지만 토큰의 경우 빅넘버를 쓰는것처럼 따로 처리해주어야 한다. 컨트렉트에서 자료를 조회해오면 그 값을 바로 db에 저장시킬때 데이터 타입을 type: DataTypes.DECIMAL(숫자), 이런식으로 해주면 DECIMAL(숫자,뒤의 자리수)로 해서 소수점이 안 붙은 상태로 큰 숫자를 넣을 수 있다. 실제로 db에 넣을때는 이렇게 wei또는 토큰 최소단위로 넣은 후 나중에 값을 꺼내와서 /e18 을 해주는 식으로 해서 소수점을 맞춰준 상태로 데이터를 리턴해 주면 된다.
json_extract를 이용하여 값을 뽑아낸 후 해당 값을 가지고 계산을 해야하는 경우 스칼라 서브 쿼리를 사용할 수 있다. 스칼라 서브쿼리의 경우에는 상수나 열명을 쓸 수 있는 곳이라면 어디든지 가능하다. 즉 하나의 열이 리턴되면 되면 되는 것이다. 따라서 SUM과 같이 연산을 한 값을 SELECT 문으로 바로 가져오고 싶을 때 사용할 수 있다. SELECT DISTINCT (SELECT SUM(json_extract(event_data,'$.amount'))/1e18 as burned_amount FROM 테이블명 WHERE event_name = "이벤트명") as 칼럼이름1, (SELECT SUM(json_extract(event_data,'$.amount'))/1e18 as minted_amo..
트랜잭션을 조회 한 후 이벤트를 그대로 데이터 베이스에 넣는 경우 object 형태의 값들이 데이터베이스에 들어가게 된다. 이러한 경우 json_extract를 select 문 안에 넣어버리게 된다면 조회가 가능하다. event_data = {from:xxxx, to:xxxxx, value:xxxxxx} SELECT json_extract(event_data, '$.value') as value FROM 테이블명; 이런 식으로 이벤트 데이터가 있다고 했을 때 그대로 넣은 후에 extract를 해준다면 손쉽게 백엔드에 트랜잭션 이벤트에 대한 정보값을 가져와서 계산해 줄 수 있다. 자세한 예제는 아래에서 확인할 수 있었다. https://docs.aws.amazon.com/ko_kr/athena/latest..
환경 : mac OS , intel 스택 : Node.js, MySql, Solidity 1. hombrew 설치 https://brew.sh/index_ko Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 2. mySqlBrench 설치 (타 블로그 참고) https://velog.io/@kms9887/mysql-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-workbench Mac에서 mysql, workbench 설치하기 MySQL, Workbench 설치하기 velog.io 여기서 일단 mysql 설치하는 부분부터 진행 https://haddoddo.tistory.com/entry/Homebrew-Mac%E..
이번주 회사의 Tech Talk 내용이 좋았어서 블로그 글로도 정리하고자 한다. sql injection은 sql 문을 이용해 서버에 공격문을 주입하는 기법. 예시 1 ) 로그인 같은 쿼리문에 일부러 패스워드에 password= 1234'; DROP table Users 위와 같이 sql 명령어를 타이핑하게 되면 테이블을 드랍하게 되며, 위험해 진다. 일반적으로 Always ture 공격 User Id = 105 Or 1=1 Query Stacking 공격 => 위의 예시처럼 drop table과 같은 행위 진행 Line comment 공격 등이 있다. => 뒤에 코멘트로 만드는 문구 삽입 방어 방법은 1. 입력 값 검증 정규 표현식 등으로 입력값을 애초에 넣고 sql 명령문이 입력값에 포함되어 있는지 ..
유저별로 서로 다른 결과 값을 보여주기 위하여, Sql query 결과에 고정값을 넣으면 어떨까? 라는 생각이 들었다. 해당 쿼리는 아래 글을 참고해서 만들었다. https://stackoverflow.com/questions/6472115/adding-a-static-value-to-the-results-of-an-sql-query 예를 들어서 아래와 같이 insert into 를 넣어서 서브 쿼리를 한다면 (입력값은 정말 아무값이나 랜점하게 넣었다.) user의 id를 넣으면 해당 유저로 부터의 모든 쿼리를 다 보여주는 것이다. 고정값을 ID로 두어서 해당 아이디가 검색한 값들은 전부 데이터베이스에서 저장해 두었다가. 저장된걸 한번에 볼 수 있도록 생각해봤다. 물론 인덱싱을 생각한다면 테이블에 유저별..
1. csv.gz 다운후 csv로 풀기 https://opencsvfile.com/csv-gz-to-csv.html CSV.GZ to CSV Open CSV File. Learn about CSV file, its purposes and format. Read how to open CSV file, convert and transform to related file formats. opencsvfile.com gunzip 파일이름 2. csv 파일 dbeaver에 import 해오기 3. import 해오기 전에 미리 테이블을 만들고 인덱스 생성 primary키는 주소값으로 두어서 클러스터링 인덱스 생성 후, 서치를 할 보조 인덱스 설정