SlideShare a Scribd company logo
Stacks Seoul
SMART CONTRACT 맛보기
FEAT. STACKS NFT
Stacks
Stacks Seoul
Stacks Seoul
Smart contracts


directly on Bitcoin


are the Holy Grail of crypto.


Satoshi predicted similar designs
A completely separate


network and separate


blockchain, yet it shares CPU


power with Bitcoin.


- Satoshi
bitcointalk.org
Stacks Seoul
Clarity
Clarity는 Stacks 블록체인을 위해


설계된 예측 가능성과 보안에 최적화된


결정 가능한 스마트 컨트랙트 언어
Stacks Seoul
Stacks smart contract : Clarity
- Hiro, Algorand 팀에 의해서 개발된 언어이며, 예측 가능한 코딩에 가치를 둔 언어


- 확장자는 .clar
Stacks Seoul
Compile 되지 않고 Stacks 블록체인에 Interprete 되어 Broadcasting 된다


= 누구나 투명하게 모든 컨트랙트를 볼 수 있습니다.


Clarity 언어는 Deciable 하다


= Clarity와 같은 결정 가능한 언어를 사용하면 모든 기능에 대해 실행되는 코드를 정확하게 결정
할 수 있습니다.
Stacks smart contract : Clarity
Stacks Seoul
- 유일한 Primitive 타입은 Boolean, Integer, Prinicpal


- 재귀는 허용하지 않고 익명 함수를 제공하지 않는다


- Loop 는 오직 map,
fi
lter, fold 함수를 통해서만 제공한다


- 가변적인 리스트는 함수를 통한 input을 통해서만 가능하며, 별도의 join 과 같은 함수는 제공하지 않는다
Clarity : Key Point
Stacks Seoul
(define-constant MY-CONSTANT-INTEGER u1)


(define-data-var data-variable-integer uint u1)
Clarity : Integer
Stacks Seoul
(define-constant MY-CONSTANT-BOOLEAN true)


(define-data-var data-variable-boolean bool true)
Clarity : Boolean
Stacks Seoul
- Principal : 토큰 잔액을 가질 수 있는 Entity로써, 개인 주소에 대한 고유한 식별자


= 이더리움에서는 CA(Contract Account), EOA (Externally Owned Account) 같은 개념


- Principal 의 pr
fi
x는 Mainnet 의 경우 SP 로 시작, Testnet/Devnet 은 ST로 시작


- Principal 의 literal 값은 ‘ (single quote) 로 시작


‘ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-contract


Clarity : Principal
Stacks Seoul
stx-get-balance : Principal의 잔고 조회


(stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE)


(stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-contract)


stx-transfer : Stacks token 전송


(stx-transfer? u500 tx-sender 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE)
Clarity : Principal
Stacks Seoul
- 스택스의 예약된 메소드인 tx-sender를 컨트랙트에서 호출하면 트랜잭션을 호출한 엔티티인
Principal 을 의미한다


- 컨트랙트 간의 호출이 발생했을때 contract-caller를 통해 마지막 호출자(Principal)을 알 수 있다


invoke -> A, contract-caller = Bob


invoke -> B, contract-caller = A


invoke -> C, contract-caller = B
Clarity : Principal
Stacks Seoul
- block-height : 블록높이를 확인


(> block-height 1000)


- de
fi
ne-read-only : Read 전용 함수


(define-read-only (read-only-function-test)


(ok 'called read only function'))


- de
fi
ne-map : 데이터 Map을 정의하는 함수


(define-map mints-per-user principal uint)


Clarity : Keyword & Function
Stacks Seoul
- de
fi
ne-fungible-token : Fungible Token 을 정의


(de
fi
ne-fungible-token <token-name> <total-supply>)


(define-fungible-token stacks u100)


(ft-mint? stacks u100 ‘SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR)


- de
fi
ne-non-fungible-token : Non-Fungible Token 을 정의


(de
fi
ne-non-fungible-token <asset-name> <asset-identi
fi
er-type>)
(define-non-fungible-token stacks-seoul-2022 uint)


Clarity : Keyword & Function
Stacks Seoul
- impl-trait : 정의된 Trait을 구현하고 있는 Contract 임을 정의


(impl-trait <trait-identi
fi
er>)


(impl-trait 'SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF.token-a.token-trait)


(define-public (get-balance (account principal))


(ok u0))


(define-public (transfer? (from principal) (to principal) (amount uint))


(ok u0))


Clarity : Trait
Stacks Seoul
- de
fi
ne-trait : trait을 정의


(de
fi
ne-trait trait-name ((func1-name (arg1-type arg2-type ...) (return-type))))


(define-trait token-trait


((transfer? (principal principal uint) (response uint uint))


(get-balance (principal) (response uint uint))))


Clarity : Trait
Stacks Seoul
(define-trait nft-trait


(


;; Last token ID


(get-last-token-id () (response uint uint))


;; URI for metadata associated with the token


(get-token-uri (uint) (response (optional (string-ascii 256)) uint))


;; Owner of a given token identifier


(get-owner (uint) (response (optional principal) uint))


;; Transfer from the sender to a new principal


(transfer (uint principal principal) (response bool uint))


)


)


Example : NFT (SIP 009)
Stacks Seoul
- use-trait : 다른 Contract 에 정의된 trait을 현재 Contract로 가져올 때 사용


(use-trait <trait-alias> <trait-identi
fi
er>)


(use-trait token-a-trait ‘SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF.token-a.token-trait)


(define-public (forward-get-balance (user principal) (contract <token-a-trait>))


(begin


(ok 1)))


Clarity : Trait
Stacks Seoul
(impl-trait .nft-trait.nft-trait)


(define-non-fungible-token stacks-seoul-2022 uint)


;; Constants


(define-constant DEPLOYER tx-sender)


(define-constant ERR-NO-MORE-NFTS u100)


(define-constant ERR-NOT-ENOUGH-PASSES u101)


;; Variables


(define-data-var mint-limit uint u200)


(define-data-var last-id uint u1)


Example : NFT
Stacks Seoul
;; Define Map collection


(define-map mints-per-user principal uint)


(define-map mint-passes principal uint)


;; Define public function


(define-public (claim)


(mint (list true)))


;; Define private function


(define-private (mint (orders (list 25 bool)))


(mint-many orders))


;; Define read-only function


(define-read-only (get-owner (token-id uint))


(ok (nft-get-owner? stacks-seoul-2022 token-id)))


Example : NFT
Stacks Seoul
- IDE : Visual Studio (+ Clarity Extension)


- CI/CD : GitHub


- Testing : Clarinet


- Testnet (Mocknet) Network : Devnet


- Code Deploy : Stacks Explorer
How to develop
Stacks Seoul
IDE
Stacks Seoul
GitHub
Stacks Seoul
Clarity 컨트랙트 테스트를 자동화하고, Stacks 네트워크에 Integration 할 수 있도록 도와주는 Tool


> clarinet check
Testing : Clarinet
Stacks Seoul
> clarinet test


> clarinet console
Testing : Clarinet
Stacks Seoul
- 사전에 Docker 필수 설치가 되어 있으면, Local에 dockerized 된 Stacks 블록체인 구동이 가능


- 구동시, Clarinet.toml 설정 파일을 기반으로 Local 블록체인에 모든 컨트랙트가 자동 배포된다


- Frontend 와 Backend 어플리케이션의 빠른 Intracting 으로 개발하기가 수월


> clarinet integrate


Testing : Clarinet
Stacks Seoul
Testing : Clarinet
Stacks Seoul
Testing : Clarinet
Stacks Seoul
Stacks Explorer Sandbox
Stacks Seoul
Stacks Explorer Sandbox
Stacks Seoul
후원 거래로, 트랜잭션에 필요한 수수료를 제 3자가 지불하는 기능


const sponsorOptions = {
fee: 1000000n, // 0.01 STX
sponsorPrivateKey: "write sponsor owner's private key",
transaction: "deserialize TX",
sponsorNonce: 100
};
const sponsoredTx = await sponsorTransaction(sponsorOptions);
broadcastTransaction(sponsoredTx, new StacksMainnet());
Feature : Sponsored Transaction
Stacks Seoul
Feature : Sponsored Transaction
Stacks Seoul
Keynote :


GitHub : https://github.com/DeSpread/stacks-seoul-2022-nft


@CryptoDevGang


@cryptogang_btc
Try it more !

More Related Content

Similar to Stacks Seoul 2022 - Leo.pdf

Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
Soobok Jin
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
NAVER D2
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
Sungik Kim
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
noerror
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움
Jay JH Park
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
ihpark92
 
Scope and Closure of JavaScript
Scope and Closure of JavaScript Scope and Closure of JavaScript
Scope and Closure of JavaScript
Dahye Kim
 
Cosmos&amp;tendermint (kr,en) by jeon chang suk
Cosmos&amp;tendermint (kr,en) by jeon chang sukCosmos&amp;tendermint (kr,en) by jeon chang suk
Cosmos&amp;tendermint (kr,en) by jeon chang suk
창석 전
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
Tae Young Lee
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircle
Yongyoon Shin
 
javascript02
javascript02javascript02
javascript02
ChangHyeon Bae
 
CUBRID(큐브리드) 트랜잭션 처리 원리
CUBRID(큐브리드) 트랜잭션 처리 원리CUBRID(큐브리드) 트랜잭션 처리 원리
CUBRID(큐브리드) 트랜잭션 처리 원리
경오 이
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
hungrok
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
명신 김
 
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
Ian Choi
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
Logpresso
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
ihpark92
 
모던 C++ 정리
모던 C++ 정리모던 C++ 정리
모던 C++ 정리
Hansol Kang
 

Similar to Stacks Seoul 2022 - Leo.pdf (20)

Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
강의자료4
강의자료4강의자료4
강의자료4
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
 
Scope and Closure of JavaScript
Scope and Closure of JavaScript Scope and Closure of JavaScript
Scope and Closure of JavaScript
 
Cosmos&amp;tendermint (kr,en) by jeon chang suk
Cosmos&amp;tendermint (kr,en) by jeon chang sukCosmos&amp;tendermint (kr,en) by jeon chang suk
Cosmos&amp;tendermint (kr,en) by jeon chang suk
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircle
 
javascript02
javascript02javascript02
javascript02
 
CUBRID(큐브리드) 트랜잭션 처리 원리
CUBRID(큐브리드) 트랜잭션 처리 원리CUBRID(큐브리드) 트랜잭션 처리 원리
CUBRID(큐브리드) 트랜잭션 처리 원리
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
 
모던 C++ 정리
모던 C++ 정리모던 C++ 정리
모던 C++ 정리
 

Stacks Seoul 2022 - Leo.pdf

  • 1. Stacks Seoul SMART CONTRACT 맛보기 FEAT. STACKS NFT Stacks Stacks Seoul
  • 2. Stacks Seoul Smart contracts 
 directly on Bitcoin 
 are the Holy Grail of crypto. Satoshi predicted similar designs A completely separate 
 network and separate 
 blockchain, yet it shares CPU 
 power with Bitcoin. 
 - Satoshi bitcointalk.org
  • 3. Stacks Seoul Clarity Clarity는 Stacks 블록체인을 위해 
 설계된 예측 가능성과 보안에 최적화된 
 결정 가능한 스마트 컨트랙트 언어
  • 4. Stacks Seoul Stacks smart contract : Clarity - Hiro, Algorand 팀에 의해서 개발된 언어이며, 예측 가능한 코딩에 가치를 둔 언어 - 확장자는 .clar
  • 5. Stacks Seoul Compile 되지 않고 Stacks 블록체인에 Interprete 되어 Broadcasting 된다 = 누구나 투명하게 모든 컨트랙트를 볼 수 있습니다. Clarity 언어는 Deciable 하다 = Clarity와 같은 결정 가능한 언어를 사용하면 모든 기능에 대해 실행되는 코드를 정확하게 결정 할 수 있습니다. Stacks smart contract : Clarity
  • 6. Stacks Seoul - 유일한 Primitive 타입은 Boolean, Integer, Prinicpal - 재귀는 허용하지 않고 익명 함수를 제공하지 않는다 - Loop 는 오직 map, fi lter, fold 함수를 통해서만 제공한다 - 가변적인 리스트는 함수를 통한 input을 통해서만 가능하며, 별도의 join 과 같은 함수는 제공하지 않는다 Clarity : Key Point
  • 7. Stacks Seoul (define-constant MY-CONSTANT-INTEGER u1) (define-data-var data-variable-integer uint u1) Clarity : Integer
  • 8. Stacks Seoul (define-constant MY-CONSTANT-BOOLEAN true) (define-data-var data-variable-boolean bool true) Clarity : Boolean
  • 9. Stacks Seoul - Principal : 토큰 잔액을 가질 수 있는 Entity로써, 개인 주소에 대한 고유한 식별자 = 이더리움에서는 CA(Contract Account), EOA (Externally Owned Account) 같은 개념 - Principal 의 pr fi x는 Mainnet 의 경우 SP 로 시작, Testnet/Devnet 은 ST로 시작 - Principal 의 literal 값은 ‘ (single quote) 로 시작 ‘ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-contract Clarity : Principal
  • 10. Stacks Seoul stx-get-balance : Principal의 잔고 조회 (stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE) (stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-contract) stx-transfer : Stacks token 전송 (stx-transfer? u500 tx-sender 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE) Clarity : Principal
  • 11. Stacks Seoul - 스택스의 예약된 메소드인 tx-sender를 컨트랙트에서 호출하면 트랜잭션을 호출한 엔티티인 Principal 을 의미한다 
 - 컨트랙트 간의 호출이 발생했을때 contract-caller를 통해 마지막 호출자(Principal)을 알 수 있다 invoke -> A, contract-caller = Bob invoke -> B, contract-caller = A invoke -> C, contract-caller = B Clarity : Principal
  • 12. Stacks Seoul - block-height : 블록높이를 확인 (> block-height 1000) - de fi ne-read-only : Read 전용 함수 (define-read-only (read-only-function-test) (ok 'called read only function')) 
 - de fi ne-map : 데이터 Map을 정의하는 함수 (define-map mints-per-user principal uint) Clarity : Keyword & Function
  • 13. Stacks Seoul - de fi ne-fungible-token : Fungible Token 을 정의 (de fi ne-fungible-token <token-name> <total-supply>) (define-fungible-token stacks u100) (ft-mint? stacks u100 ‘SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR) - de fi ne-non-fungible-token : Non-Fungible Token 을 정의 (de fi ne-non-fungible-token <asset-name> <asset-identi fi er-type>) (define-non-fungible-token stacks-seoul-2022 uint) Clarity : Keyword & Function
  • 14. Stacks Seoul - impl-trait : 정의된 Trait을 구현하고 있는 Contract 임을 정의 (impl-trait <trait-identi fi er>) (impl-trait 'SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF.token-a.token-trait) (define-public (get-balance (account principal)) (ok u0)) (define-public (transfer? (from principal) (to principal) (amount uint)) (ok u0)) Clarity : Trait
  • 15. Stacks Seoul - de fi ne-trait : trait을 정의 (de fi ne-trait trait-name ((func1-name (arg1-type arg2-type ...) (return-type)))) (define-trait token-trait ((transfer? (principal principal uint) (response uint uint)) (get-balance (principal) (response uint uint)))) Clarity : Trait
  • 16. Stacks Seoul (define-trait nft-trait ( ;; Last token ID (get-last-token-id () (response uint uint)) ;; URI for metadata associated with the token (get-token-uri (uint) (response (optional (string-ascii 256)) uint)) ;; Owner of a given token identifier (get-owner (uint) (response (optional principal) uint)) ;; Transfer from the sender to a new principal (transfer (uint principal principal) (response bool uint)) ) ) Example : NFT (SIP 009)
  • 17. Stacks Seoul - use-trait : 다른 Contract 에 정의된 trait을 현재 Contract로 가져올 때 사용 (use-trait <trait-alias> <trait-identi fi er>) (use-trait token-a-trait ‘SPAXYA5XS51713FDTQ8H94EJ4V579CXMTRNBZKSF.token-a.token-trait) (define-public (forward-get-balance (user principal) (contract <token-a-trait>)) (begin (ok 1))) Clarity : Trait
  • 18. Stacks Seoul (impl-trait .nft-trait.nft-trait) (define-non-fungible-token stacks-seoul-2022 uint) ;; Constants (define-constant DEPLOYER tx-sender) (define-constant ERR-NO-MORE-NFTS u100) (define-constant ERR-NOT-ENOUGH-PASSES u101) ;; Variables (define-data-var mint-limit uint u200) (define-data-var last-id uint u1) Example : NFT
  • 19. Stacks Seoul ;; Define Map collection (define-map mints-per-user principal uint) (define-map mint-passes principal uint) ;; Define public function (define-public (claim) (mint (list true))) ;; Define private function (define-private (mint (orders (list 25 bool))) (mint-many orders)) ;; Define read-only function (define-read-only (get-owner (token-id uint)) (ok (nft-get-owner? stacks-seoul-2022 token-id))) Example : NFT
  • 20. Stacks Seoul - IDE : Visual Studio (+ Clarity Extension) - CI/CD : GitHub - Testing : Clarinet - Testnet (Mocknet) Network : Devnet - Code Deploy : Stacks Explorer How to develop
  • 23. Stacks Seoul Clarity 컨트랙트 테스트를 자동화하고, Stacks 네트워크에 Integration 할 수 있도록 도와주는 Tool > clarinet check Testing : Clarinet
  • 24. Stacks Seoul > clarinet test > clarinet console Testing : Clarinet
  • 25. Stacks Seoul - 사전에 Docker 필수 설치가 되어 있으면, Local에 dockerized 된 Stacks 블록체인 구동이 가능 - 구동시, Clarinet.toml 설정 파일을 기반으로 Local 블록체인에 모든 컨트랙트가 자동 배포된다 - Frontend 와 Backend 어플리케이션의 빠른 Intracting 으로 개발하기가 수월 > clarinet integrate Testing : Clarinet
  • 30. Stacks Seoul 후원 거래로, 트랜잭션에 필요한 수수료를 제 3자가 지불하는 기능 const sponsorOptions = { fee: 1000000n, // 0.01 STX sponsorPrivateKey: "write sponsor owner's private key", transaction: "deserialize TX", sponsorNonce: 100 }; const sponsoredTx = await sponsorTransaction(sponsorOptions); broadcastTransaction(sponsoredTx, new StacksMainnet()); Feature : Sponsored Transaction
  • 31. Stacks Seoul Feature : Sponsored Transaction
  • 32. Stacks Seoul Keynote : GitHub : https://github.com/DeSpread/stacks-seoul-2022-nft @CryptoDevGang @cryptogang_btc Try it more !