일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스마트컨트렉트 예약어 함수이름 중복
- 스마트컨트렉트테스트
- 프록시배포구조
- 스마트컨트렉트 함수이름 중복 호출
- vue기초
- 티스토리챌린지
- 오블완
- 스마트 컨트렉트 함수이름 중복
- ethers
- ethers type
- rust 기초
- ethers typescript
- 머신러닝기초
- 컨트렉트 배포 자동화
- 러스트기초
- 스마트컨트렉트프록시
- chainlink 설명
- Vue
- ambiguous function description
- 러스트 기초 학습
- 러스트 기초
- ethers v6
- ethers websocket
- multicall
- 체인의정석
- SBT표준
- git rebase
- 컨트렉트 동일한 함수이름 호출
- Vue.js
- nest.js설명
- Today
- Total
목록블록체인/Rust (9)
체인의정석
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 이런 결과가 나오게 된다. 여러 변수의 정의는 그냥 일반적인 함수와 ..
기본 데이터 타입 러스트의 모든 값들은 데이터 타입을 가지고 있다. 컴파일 하는 시점에서 타입들에 대한 정의가 이루어지지 않는다면 모두 에러가 나게 되는 것이다. let guess: u32 = "42".parse().expect("Not a number!"); 요런 식으로 : 뒤에 타입을 쓰면 타입이 지정된다. 타입스크립트와 똑같이 생겨서 익히기 쉬웠다. 타입지정을 안하면 다음과 같은 에러가 나오게 된다. $ cargo build Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations) error[E0282]: type annotations needed --> src/main.rs:2:9 | 2 | let guess = "42..
변수와 가변성 그리고 mut 먼저 변수를 한번 테스트 해보겠다. ➜ rust cargo new variables Created binary (application) `variables` package 이런식으로 명령어를 내리게 되면 variables라는 경로가 나오게 된다. fn main() { let x = 5; println!("The value of x is: {x}"); x = 6; println!("The value of x is: {x}"); } 이런식으로 let으로 선언한 후 다시 접근하여 변수를 변경하려 할 경우 error[E0384]: cannot assign twice to immutable variable `x` --> src/main.rs:4:5 | 2 | let x = 5; | -..