일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 type
- 머신러닝기초
- 스마트컨트렉트 함수이름 중복 호출
- 오블완
- erc4337 contract
- 스마트컨트렉트 예약어 함수이름 중복
- 스마트 컨트렉트 함수이름 중복
- 컨트렉트 배포 자동화
- ambiguous function description
- 컨트렉트 동일한 함수이름 호출
- ethers typescript
- erc4337
- 러스트 기초
- SBT표준
- chainlink 설명
- 러스트 기초 학습
- vue기초
- 계정추상화
- ethers websocket
- ethers
- 체인의정석
- multicall
- 티스토리챌린지
- git rebase
- rust 기초
- Vue
- 러스트기초
- 스마트컨트렉트테스트
- ethers v6
- Vue.js
- Today
- Total
목록분류 전체보기 (496)
체인의정석
상황 : 트랜잭션 데이터 중 이벤트 로그 같은 것들은 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..
DVT 설명 : Distributed Validator Technology Validator 의 signning key를 여러 노드들에게 분산시키는 기술 스테이킹 된 이더리움 전체 공급량의 13.28% 만약 이더리움 스테이킹에 참여를 하고 싶다면 참여는 가능하지만 전제 조건이 여러개가 있다. 1. 32 이더 - 개인이 참가하기에 부담 2. 24시간동안 매일매일 운영 - 개인이 하기에는 진입장벽 대안으로 여러 staking service가 있다. kraken, stake fish, lido 와 같이 이더리움 시장이 커지면서 여러 사업체가 등장 이더리움 스테이킹 시장이 커가면서 써드 파티의 영향력이 커지면서 리스크가 존재 DVT가 구현이 되면 POS로 전환하게 되면서 합의의 과정에서 어려움 & 리스크 벨리데..
1. move vm 이 따로 있어서 move는 move vm에 특화된 언어이다. move의 특징 중 하나는 코인 모듈 , 해당 모듈을 옮기면 실제 코인이 옮겨지게 된다. Move의 경우 러스트 기반의 언어이다. 그러나 러스트에 있는 기능이 축소된 편 러스트의 move와 같은 오너쉽 개념은 중요한 역할을 한다. - move는 러스트에서 값을 만들고 실제로 코인의 오너쉽이 사용될 때 넘어가게 되기 때문에 자주 사용하게 된다. copy의 경우 명시적으로 해야한다. - 2. 계정 모델 move의 account는 global storage가 존재한다. address안의 resource Type 마다 하나씩 있어서 스토리지 역할을 하며 모듈(코드가 들어있는 컨트렉트)과 리소스 들도 포함한다. 모듈은 스토리지만 없는..
References와 Borrowing fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); println!("The length of '{}' is {}.", s1, len); } fn calculate_length(s: &String) -> usize { s.len() } calculate_length를 계산하는 방법은 다음과 같다. &를 다음과 같이 사용하게 되면 레퍼런스만 파라미터로 넘겨서 소유권 이전 없이도 사용이 가능하게 된다. 첫째, 튜플의 모든 가변성 있는 변수들과 함수들은 사라진다. 둘째, &s1을 calculate_length로 넘기고 정의를 할 때 &String을 String 대신에 가져간다. 위의 그..
변수와 데이터간의 상호작용 다수의 변수들은 러스트에서 같은 데이터로 다른 방향으로 상호작용한다. let x = 5; let y = x; 예시로 위와 같은 값이 지정된다고 가정해 보갰다. 이렇게 되면 x, y 둘다 5를 가지게 되며 스택에 5값이 2개가 쌓이게 된다. fn main() { let s1 = String::from("hello"); let s2 = s1; } 문자열의 경우에 s1이랑 s2가 같이 올라갈 것 같지만 실제로는 그렇지 않다. 실제로는 위에 처럼 string은 포인터, 길이, 용량 3가지 값으로 구성되어 있으며 해당 그룹의 데이터는 스택에 들어가 있다. 실제 콘텐츠는 오른쪽 힙 형태의 메모리에 들어가 있게 된다. 길이는 얼마나 많은 메모리, 바이트, 내용물들이 실제로 사용되고 있는지를..
들어가기에 앞서 지난 시간에 우리는 러스트의 주요 컨셉인 statement와 Expression에 대해서 살펴보았다. 이번 시간에는 rust의 주요 개념인 ownership에 대해서 알아보도록 하겠다. rust의 ownership을 사용하면 가비지 콜렉터 없이도 메모리의 안정성을 보장 받을 수 있다고 한다. Ownership은 뭘까? 오너쉽은 러스트 프로그램이 메모리를 관리하는 규칙이라고 할 수 있다. 모든 프로그램들은 해당 프로그램이 컴퓨터의 메모리를 관리하는 법을 알아야 한다. 몇몇 언어들은 가비지 콜렉션이 지원되어서 더이상 안사용되는 메모리들을 정리해준다. 또는 유저들이 직접 할당을 하고 free 시켜주고 있다. 러스트는 제3의 길을 선택하였다! 그것은 바로 메모리를 오너쉽 시스템을 통해 관리하고 ..
Control Flow 조건이 참일때 코드를 반복적으로 돌리는 행위는 가장 기본적인 프로그래밍 기법으로서 러스트에서는 if와 loop가 가장 대표적이다. IF 표현 if 표현은 조건이 맞으면 코드가 돌아가고 안맞으면 안돌아가는 기초적인 프로그래밍이다. branches라는 경로를 만들고 한번 진행해보도록 하겠다. ➜ functions (master) ✗ cargo new branches Created binary (application) `branches` package 기본적인 if 문은 다음과 같이 만들면 된다. fn main() { let number = 3; if number < 5 { println!("condition was true"); } else { println!("condition wa..
기본 함수 기본 함수는 다음과 같이 정의한다. fn main() { another_function(5); } fn another_function(x: i32) { println!("The value of x is: {x}"); } 이런 식으로 정의를 하게 되면 ➜ functions (master) ✗ cargo run Compiling functions v0.1.0 (/Users/chohk/Desktop/git/rust/functions) Finished dev [unoptimized + debuginfo] target(s) in 0.84s Running `target/debug/functions` The value of x is: 5 이런 결과가 나오게 된다. 여러 변수의 정의는 그냥 일반적인 함수와 ..