⛓️
Blockchain
  • Start!
  • Go_lang
    • Tutorial
    • 1. Banking
    • 2. Dictionary
    • 3. URL Checker
    • Useful Methods - Slice
    • Useful data structure
  • RUST
    • Start
    • Basic
    • Basic Programming Concepts
      • Variables and Mutability
  • Bitcoin
    • Start
    • Introduction
    • Transactions
  • GO-BITCOIN
    • Start
    • 1. Blocks & Blockchain
    • 2. Proof of work
    • 3. BadgerDB
    • 4. Transactions
    • 5. Wallet
    • 6. Adding Digital Signatures
  • COSMOS
    • 코스모스 SDK
    • 코스모스 SDK 실습 - nameservice
    • 코스모스 허브는 어떻게 사용하는가?
    • 코스모스 허브, 금융의 역사를 다시 쓰다
    • Tendermint
      • ABCI
      • Messages
  • Cosmos Tutorial
    • Tutorials
    • 1. Blog
    • Nameservice
    • [Starport] Escrow Account: Scavenge
    • [Starport] Inter-Blockchain Communication: Basics
    • Create an IBC Interchain Exchange module
      • Introduction
      • App Design
      • Initialize the Blockchain
      • Create the Order Book
  • Ethereum
    • Start
    • Gas
    • Oracle Problem
  • consensus
    • DPoS
    • PBFT
    • Network model
  • cryptosystem
    • 대칭키 암호
    • IPFS
  • Social token
    • Rally
    • DeSo
      • Bitclout
      • Deso: The Decentralized Social Network
      • Setting Up Your Dev Environment
      • Deso Code Walkthrough
      • Web3 Will Not Be Built on Smart Contracts
  • 재윤TV
    • Start
    • 유니스왑에 대해서 아라보자
      • Concept
      • V2 백서 분석
      • V2 코드 분석
Powered by GitBook
On this page
  • Install Starport
  • Create the Blockchain
  • Create the Module
  • Create the Transaction Types
  • Create the IBC Packets
  • Cancel messages
  • Trace the Denom
  • Create the Configuration

Was this helpful?

  1. Cosmos Tutorial
  2. Create an IBC Interchain Exchange module

Initialize the Blockchain

Install Starport

curl <https://get.starport.network/starport@v0.16.2>! | bash

Create the Blockchain

starport scaffold chain github.com/username/interchange --no-module
cd interchange

Create the Module

starport scaffold module ibcdex --ibc --ordering unordered

나는 여기서 the module name can't be prefixed with ibc because of potential store key collision 라는 에러가 발생했다.

모듈 이름을 ibc로 시작하면 안 된다고 해서 myibcdex로 모듈 이름을 바꿨다.

starport 버젼은 0.18.4이다.

Create the Transaction Types

starport scaffold map sellOrderBook amountDenom priceDenom --no-message --module ibcdex
starport scaffold map buyOrderBook amountDenom priceDenom --no-message --module ibcdex

sellOrderBook, buyOrderBook 2개의 transaction type을 생성한다.

  • amountDenom 은 어떤 토큰이 팔리고 얼만큼 팔리는지 나타낸다.

  • priceDenom 토큰의 판매 가격

Create the IBC Packets

  • createPair : order book pair

  • sellOrder : 판매 주문

  • buyOrder : 구매 주문

—ack flag는 target 체인에서 패킷을 받은 후 반환하는 필드 이름과 acknowledgment의 타입을 정의한다. —ack의 값은 콤마로 구분되고 : 뒤에 타입을 지정할 수 있다.

Cancel messages

starport scaffold message cancel-sell-order port channel amountDenom priceDenom orderID:int --desc "Cancel a sell order" --module ibcdex
starport scaffold message cancel-buy-order port channel amountDenom priceDenom orderID:int --desc "Cancel a buy order" --module ibcdex

취소 주문은 packet을 보낼 필요가 없고 local에서 처리하면 된다.

—desc flag는 CLI command의 설명을 정의한다.

Trace the Denom

Token denom은 ibc-transfer 모듈과 같은 동작을 해야 한다.

  • 체인에서 받은 외부 토큰에는 voucher라고 하는 고유한 denom이 있다.

  • 토큰이 블록체인으로 전송된 다음 다시 전송 및 수신되면 체인은 바우처를 해결하고 이를 다시 원래 토큰 액면가로 변환할 수 있다.

Voucher 토큰은 해시로 표시되므로 바우처와 관련된 원래 액면가를 저장해야 하며 색인화된 유형으로 이를 수행할 수 있다. voucher에 저장할 것 : source port ID, source channel ID, 원래 가격

starport scaffold map denomTrace port channel origin --no-message --module ibcdex

Create the Configuration

두 블록체인 네트워크를 테스트 하기 위해 mars.yml, venus.yml 을 추가한다. interchange 폴더에 config 파일을 추가해라.

Mars : mcx, marscoin

Venux : vcx, venuxcoin

# mars.yml
accounts:
  - name: alice
    coins: ["1000token", "100000000stake", "1000mcx"]
  - name: bob
    coins: ["500token", "1000mcx", "100000000stake"]
validator:
  name: alice
  staked: "100000000stake"
faucet:
  name: bob
  coins: ["5token", "100000stake"]
genesis:
  chain_id: "mars"
init:
  home: "$HOME/.mars"
# venus.yml
accounts:
  - name: alice
    coins: ["1000token", "1000000000stake", "1000vcx"]
  - name: bob
    coins: ["500token", "1000vcx", "100000000stake"]
validator:
  name: alice
  staked: "100000000stake"
faucet:
  host: ":4501"
  name: bob
  coins: ["5token", "100000stake"]
host:
  rpc: ":26659"
  p2p: ":26658"
  prof: ":6061"
  grpc: ":9091"
  api: ":1318"
  frontend: ":8081"
  dev-ui: ":12346"
genesis:
  chain_id: "venus"
init:
  home: "$HOME/.venus"
PreviousApp DesignNextCreate the Order Book

Last updated 3 years ago

Was this helpful?