일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스마트 컨트렉트 함수이름 중복
- 프록시배포구조
- Vue
- vue기초
- 러스트 기초 학습
- 체인의정석
- 러스트기초
- 스마트컨트렉트테스트
- ambiguous function description
- ethers type
- 스마트컨트렉트 함수이름 중복 호출
- 머신러닝기초
- multicall
- 스마트컨트렉트프록시
- 러스트 기초
- ethers websocket
- 컨트렉트 동일한 함수이름 호출
- nest.js설명
- ethers v6
- ethers typescript
- nestjs 튜토리얼
- ethers
- chainlink 설명
- 컨트렉트 배포 자동화
- 깃허브명령어
- Vue.js
- 스마트컨트렉트 예약어 함수이름 중복
- SBT표준
- git rebase
- rust 기초
- Today
- Total
체인의정석
CURG, MOVE 특강 정리 ) 본문
1. move vm 이 따로 있어서 move는 move vm에 특화된 언어이다.
move의 특징 중 하나는 코인 모듈 , 해당 모듈을 옮기면 실제 코인이 옮겨지게 된다.
Move의 경우 러스트 기반의 언어이다.
그러나 러스트에 있는 기능이 축소된 편
러스트의 move와 같은 오너쉽 개념은 중요한 역할을 한다.
- move는 러스트에서 값을 만들고 실제로 코인의 오너쉽이 사용될 때 넘어가게 되기 때문에 자주 사용하게 된다.
copy의 경우 명시적으로 해야한다.
-
2. 계정 모델
move의 account는 global storage가 존재한다.
address안의 resource Type 마다 하나씩 있어서 스토리지 역할을 하며
모듈(코드가 들어있는 컨트렉트)과 리소스 들도 포함한다.
모듈은 스토리지만 없는 컨트렉트
이더리움에는 eoa, ca가 있는데 move에는 해당 개념이 없다.
기본적으로 어떤 계좌이든 간에 모듈도 되고 스토리지도 된다.
aptos에서는 시크릿키를 가지고 account를 만들 수도 있고 모듈 안에서 프레임워크 함수를 호출해서 secret key없이 signer가 있는 account를 만들 수도 있다.
account를 가리킬 수 있는 것은 address(account 하나를 의미) + signer(address와 역할은 비슷하나 signer는 트랜잭션에 사인을 하는 주체라는 점이 다르다.)
signer는 마음대로 생성도 안되고 조작도 안되고 카피도 안된다.
특정 acocunt를 가리키는 signer를 가리키는 것은 인자로 받아오는 것 말고는 signer를 가져올 방법이 없다.
보통 signer는 레퍼런스로 써서 소유권을 안넘긴다.
struct는 러스트랑 비슷한데 내용이 비어 있더라도 다 다른 struct가 된다.
이는 무브의 리소스를 다룰때 중요한 특징이다.
strunct + 구조체 이름 + ability
struct Coin has copy, drop {
...
}
//일반적인 struct
struct Balance has store {
...
}
//copy drop 불가
struct Coin has key {
...
}
//계좌별로 하나씩 있는 전역 변수가 하나 생기는 것
코인이 움직이게 되면 Coin { value: 50 } 의 경우 해당 코인 그 자체를 의미한다.
drop 도 명시적으로 버리라는 것
struct MintCapa has store, copy, drop {}
이런식으로도 사용이 가능하다.
Golbal storage
5가지 함수
1. move to : 타입에다가 값을 넣는 함수 그전에는 값이 없어야 한다.
2. move from : 안에 있는 것을 꺼내올 수 있다.
3. borrow_global_mut : 안의 값을 빌려오는 것
4. borrow_global
5. exist : 값이 있는지 없는지
CoinStore has key {}=> 해당 타입이 키가 된다.
move to(account, CoinStore {})
balance of => value(borrow_global<CoinStore>(account).coin
merge 더할 때 extract 뺄때
unresiger는 move_from 사용
외부에서는 다 정의된 함수로만 글로벌 스토리지 사용
이더리움에서는 로직이랑 스토리지가 다 있지만
앱토스는 로직만 가지고 잇고 스토리지는 글로벌 스토리지로 따로 빼서 관리
계정마다 스토리지가 있으며 그걸 컨트롤 할 수 있는 권한은 앱토스 코드에서만 가능
솔리디티에서는 잔고에 기록, 앱토스는 계정에 데이터를 넣게 됨
*한 account안에 여러개의 모듈을 다 넣을 수 있다.
한 주소안에 여러 모듈이 있다.
기본 제공되는 코인타입이 있기 때문에 ERC20 이 굳이 필요 없다.
정말 코인 그 자체를 쓸 수 있게 되는 것.
* while, loop 문을 가지고 다 사용.
*array 대신 vector가 있는데 vector는 크기가 정해져 있지 않다.
기본 데이터들은 크기가 정해져있기 때문에 배열 사용 불가 대신 primitive type은 Vector가 있다.
'블록체인 > Rust' 카테고리의 다른 글
Rust Ownership - Reference and Borrowing (0) | 2023.01.19 |
---|---|
Rust Ownership , rust ownership을 이해하기 위한 기초(코드로 ownership 살펴보기) (0) | 2023.01.18 |
Rust Ownership , rust ownership을 이해하기 위한 기초 (heap, stack 알아보기) (0) | 2023.01.16 |
Rust 기본 프로그래밍 컨셉 (Control Flow - 조건문, 반복문) (0) | 2023.01.16 |
Rust 기본 프로그래밍 컨셉 (함수) (0) | 2023.01.16 |