ICP

김주언·2022년 7월 6일
0

Web 3.0

목록 보기
3/4
post-thumbnail

DeFi DApp

분산형 금융 앱
Motoko를 사용한 인터넷 컴퓨터를 프로그래밍


1. The Compound Money Market Protocol

머니마켓 프로토콜은 기본적으로 사람들이 토큰을 빌려주고 빌릴 수 있게 하는 프로토콜이다.

예를 들어, 사람들은 에테르를 공급하고 약간의 이자를 벌 수 있게된다. 아니면 토큰을 빌릴 수도 있는데, 이를 체인링크 토큰이라고 한다. 그리고 토큰 가격이 대출금을 상환할 때쯤 내려갈 것이라고 예측하는 것이다.

컴파운드는 대출자들이 지불한 이자를 모으고 그 이자를 그 토큰의 대출자들에게 지불하는 동시에 서비스에 대한 약간의 수수료도 받는다.

이번 프로젝트에서는 토큰 잔액에 대한 이자를 얻기 위해 코드를 작성할 것이다.




2. Motoko

프로그래머와 소프트웨어 개발자에게 인터넷 컴퓨터 블록체인은 dapp을 설계, 구축 및 배포하는 방법을 단순화하는 프레임워크 내에서 고유한 기능과 기회를 제공한다. 이 프레임워크의 핵심 부분은 새로운 범용 프로그래밍 언어인 Motoko이다.

  • actor개체와 클래스 를 사용하여 직접 프로그램을 정의하는 기능 .

  • async및 구문을 사용 await하여 비동기 메시징을 동기 처리인 것처럼 프로그래밍

  • 메시지 직렬화 및 역직렬화에 대한 자동 지원

  • 외부 데이터베이스나 스토리지 볼륨 없이 데이터 구조를 사용하여 직교 지속성을 활용

  • 큰 정수 연산 및 오버플로 방지 지원

  • 가능한 모든 입력에서 유형 오류 없이 실행할 수 있도록 각 프로그램을 정적으로 검사하는 사운드 유형 시스템

  • 함수 추상화, 사용자 정의 유형 정의 및 사용자 정의 행위자를 지원

우리가 인터넷 컴퓨터에 배포하는 프로그램의 경우 유효한 프로그램은 Actors 및 async data 에서 논의하는 특정 구문(keyword)으로 도입 된 Actor 표현식 으로 구성되고, Motoko의 역할은 이러한 액터를 작성하기 쉽고 프로그래밍 방식으로 사용하기 쉽게 한 번 배포하는 것

2.1 선언 및 표현식

  • import : Motoko 기반 라이브러리에서 라이브러리를 가져온다
  • var : 변경가능
  • let : 변경 불가능
  • := : 할당 작업 :=은 일반적이며 모든 유형에 대해 작동한다
  • debug_show : 큰 클래스를 type 의 값으로 변환하는 것을 허용

위 코드를 작성 한 후 dfx start > dfx deploy 순서로 실행해주면 아래와 같은 결과를 얻을 수 있따.

2.2 함수

모토코에서는 함수를 생성하기 위해서 func키워드를 사용한다.

dfx deploy 실행해주면 콘솔에 101이 출력된다.
이 경우는 블록 단위로 함수가 실행된 것이다.

그렇다면 이 함수를 외부에서도 사용하려면?
이를 위한 명령어는 아래와 같다.

dfx canister call [캐니스터 이름] [함수명] '([함수의 매개변수])'

대신 이 때는 외부에서의 접근을 허용하기 위해서 func 키워드 앞에 public 키워드를 추가해줘야 한다.
코드를 수정하고 재배포 후 위의 명령어를 실행하면 101이 출력된다.

2.3 Candid

Candid는 사용자가 캐니스터와 쉽게 상호작용하기 위한 서비스를 제공한다.
예를 들어 위처럼 함수를 실행하기 위해서 코드를 일일히 작성하지 않고 클릭 시 변수값이 +1이 되게 하려면 candid를 사용하면 되는 것이다. 즉, 터미널을 사용하는 대신 실제로 UI를 사용하여 상호 작용할 수 있게 되는 것이다.

candid 작성 방법은 아래와 같다

service counter : {
  add : (nat) -> ();
  subtract : (nat) -> ();
  get : () -> (int) query;
  subscribe : (func (int) -> ()) -> ();
}

2.3.1 브라우저에서 테스트

Candid 인터페이스 설명 언어는 캐니스터의 서명을 지정하기 위한 공통 언어를 제공한다. 스마트 계약에서 제공하는 서비스의 유형 서명을 기반으로 Candid는 웹 인터페이스(Candid UI)를 제공하여 프론트엔드 코드를 작성하지 않고도 웹 브라우저에서 테스트 및 디버깅을 위한 캐니스터 기능을 호출할 수 있다.

Candid 웹 인터페이스를 사용하여 dbank 캐니스터를 테스트 해본다.

요기서 테스트할거다


  1. 캐니스터의 ID 찾기
    dfx canister id [캐니스터 이름]
  1. 인풋 필드에 id값 넣고 GO

이제 그냥 call 버튼만 누르면 함수를 사용할 수 있게된다.
아래는 call 클릭 후 콘솔창의 출력이다.

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글