$30 off During Our Annual Pro Sale. View Details »

[마소콘2018] 업그레이드 가능한 스마트 컨트랙트 프레임워크 - 김종호

[마소콘2018] 업그레이드 가능한 스마트 컨트랙트 프레임워크 - 김종호

2018년 12월 15일 마이크로소프트웨어 콘퍼런스, 마소콘 2018
업그레이드 가능한 스마트 컨트랙트 프레임워크 - 김종호

MICROSOFTWARE

December 17, 2018
Tweet

More Decks by MICROSOFTWARE

Other Decks in Programming

Transcript

  1. Upgradeable Smart Contract
    Framework & Developer Tools
    Jason Kim | [email protected]

    View Slide

  2. Speaker
    Jason Kim 김종호
    [email protected]
    HAECHI LABS CEO
    서울대 블록체인 학회 디사이퍼 부회장
    서울대 전기공학부 졸업
    (전) Awair Software Engineer
    (전) VCNC(Between) Software Engineer
    2

    View Slide

  3. Contents
    왜 업그레이드 가능한 스마트 컨트랙트가 필요한가
    1.
    업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    2.
    무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크
    3.
    vvisp을 이용해 업그레이드 가능한 스마트 컨트랙트 만들기
    4.
    3

    View Slide

  4. 왜 업그레이드 가능한
    스마트 컨트랙트가 필요한가?
    1.

    View Slide

  5. 기존 IT 서비스의 발전 사례
    1. 왜 업그레이드 가능한 스마트 컨트랙트가 필요한가?
    이미지 출처: https://www.webdesignmuseum.org
    모든 서비스들은 지속적인 업데이트를 통해 성장합니다.
    페이스북도 10년 넘게 수천번의 업데이트를 통해 발전했습니다.
    2004년 2016년

    View Slide

  6. 비지니스 로직 수정 및 추가 불가
    1. 왜 업그레이드 가능한 스마트 컨트랙트가 필요한가?
    - 이더리움의 대표적인 DApp
    - 2017년 11월 런칭 이후 선풍적인 인기를 끌며 일일 거래금액 30억 이상 달성
    - 이더리움 네트워크가 이러한 과부하를 버티지 못하고 사용성을 해치며 급격히 인기가 하락
    - 만약 게임이 업그레이드 가능했다면?
    크립토키티 서비스 추이 (출처: https://dappradar.com/)
    크립토키티
    CryptoKitties

    View Slide

  7. 배포 후에 취약점 수정 불가
    1. 왜 업그레이드 가능한 스마트 컨트랙트가 필요한가?
    Smart Mesh 해킹
    [해킹 방식]
    해커가 Integer Overflow 를 이용해
    토큰을 무단 복제후 판매
    Parity 재단 Multisig Wallet 동결
    [해킹 방식]
    스마트 컨트랙트를 self-destruct 하여
    출금 함수를 실행 불가하도록 공격
    THE DAO 해킹사건
    [해킹 방식]
    스마트 컨트랙트 External call의 Re-entrancy
    공격을 이용
    $ 300,000,000
    스마트 컨트랙트는 가치를 지닌 암호화폐를 매개하기에,
    사소한 버그라고 할지라도 이것이 심각한 해킹 피해를
    발생시킵니다
    15%
    (전체 ETH양 대비)
    전세계 거래소 ERC20 거래
    일시 중지
    이미지 출처: Coindesk

    View Slide

  8. 새로운 컨트랙트 재배포를 통한 업그레이드
    1. 왜 업그레이드 가능한 스마트 컨트랙트가 필요한가?
    KittyBreedingV1.sol
    address: “0x12345…”
    KittyBreedingV2.sol
    address: “0x45678…”
    재배포된 Contract
    기존 Contract
    02. 주소 변경
    03. 여러개의 스마트 컨트랙트
    재배포
    01. 데이터 마이그레이션

    View Slide

  9. 재배포를 통한 업그레이드의 문제점
    2. 업그레이드 지원을 위해 필요한 조건들
    0xee91...
    0xaa90…
    0xcc21...
    여러 개의 스마트 컨트랙트를
    모두 재배포 하기에 복잡함
    주소가 변경되어
    유저들에게 혼란을 야기함
    데이터 마이그레이션시에 가스 비용과
    시간이 많이 들고 실수할 가능성이 존재
    02.
    01. 03.
    서비스가 중단 될 수 있음

    View Slide

  10. 업그레이드 가능한
    스마트 컨트랙트 패턴들 비교 분석
    2.

    View Slide

  11. 데이터와 로직의 분리 패턴
    2-1.

    View Slide

  12. 데이터와 로직의 분리 패턴 (1)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    Business Logic Contract
    (0xabc..)


    Method Call
    EOA
    Eternal Storage
    Contract
    (0xsdf..)


    Method Call
    비지니스 로직과 데이터 저장 컨트랙트를 분리해서 작성합니다.
    모든 데이터는 Eternal Storage Contract에 저장됩니다.

    View Slide

  13. 데이터와 로직의 분리 패턴 (2)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    Business Logic V1
    Contract
    (0xabc..)


    Method Call
    EOA
    Eternal Storage
    Contract
    (0xsdf..)


    Method Call
    Eternal Storage Solidity Code

    View Slide

  14. 데이터와 로직의 분리 패턴 (3)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    Business Logic V1
    Contract
    (0xabc..)


    Method Call
    EOA
    Eternal Storage
    Contract
    (0xsdf..)


    Method Call
    Business Logic Solidity Code

    View Slide

  15. 데이터와 로직의 분리 패턴 (4)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    Business Logic V1
    Contract
    (0xabc..)


    Method Call
    EOA
    Eternal Storage Contract
    (0xsdf..)


    Business Logic V2
    Contract
    (0xdef..)


    Method Call
    Method Call
    Method Call
    NEW

    View Slide

  16. 데이터와 로직의 분리 패턴 (5)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    장점
    • 데이터 마이그레이션이 필요없다.
    고정된 주소의 컨트랙트에 데이터가
    저장된다.
    단점
    • 데이터 컨트랙트와 통신하기 위해서
    추가적인 코드 작성이 필요하다.
    • 컨트랙트의 주소가 변경된다.
    • 테스트 코드의 작성이 복잡하다.

    View Slide

  17. 프록시 패턴
    2-2.

    View Slide

  18. 프록시 패턴 (1)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    Proxy Contract
    (0xabc..)


    DelegateCall
    EOA
    Business Logic Contract
    (0xsdf..)


    Method Call
    “Business Logic Contract”에 데이터와 비지니스 로직 코드를 함께
    작성합니다.
    Proxy 컨트랙트가 DelegateCall로 비지니스 로직 컨트랙트를 호출합니다.

    View Slide

  19. 프록시 패턴 (2)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    “타겟 컨트랙트” 코드가 “호출 컨트랙트”의 컨텍스트에서 실행될 수 있는
    호출 방식
    컨트랙트가 런타임에 다른 주소의 코드를 동적으로 실행시킬 수 있음
    Call
    Call DelegateCall
    Call
    msg.sender = 컨트랙트의 주소
    msg.value = 컨트랙트가 전달하는 이더리움의 양
    msg.sender = 지갑의 주소
    msg.value = 지갑이 전달하는 이더리움의 양
    호출 컨트랙트 타겟 컨트랙트
    타겟 컨트랙트
    호출 컨트랙트
    Context Context
    Delegate Call
    Call DelegateCall

    View Slide

  20. 프록시 패턴 (3)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    Call
    A Contract B Contract
    호출 컨트랙트 타겟 컨트랙트
    타겟 컨트랙트가 아닌 호출 컨트랙트의 Storage 에 데이터가
    저장된다.
    Delegate Call 을 통한 Storage 변화
    DelegateCall
    A Storage 에
    데이터 저장
    A Contract 는 B Contract 의 변수 정보가 없지만 데이터를 저장할 수 있다!

    View Slide

  21. 프록시 패턴 (4)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    동일한 Entry Point
    상속
    Call 0xabc..
    Loans Contract V1
    (0x123..)
    Loans Contract V2
    (0x234..)
    EOA
    Business Logic
    Smart contracts Loans Contract V1 Spec
    Data Structure
    ❏ Loans Hash
    ❏ Loans Amount
    ❏ Loans Rates
    ❏ Loans Type Code
    Functions
    ❏ addBasicInformation
    Loans Contract V2 Spec
    Data Structure
    ❏ Loans Hash
    ❏ Loans Amount
    ❏ Loans Rates
    ❏ Loans Type Code
    ❏ Loans Documentation
    Functions
    ❏ addBasicInformation
    ❏ addLoanDocumentaion
    Proxy Contract
    (0xabc..)


    • Version Info
    NEW

    View Slide

  22. 프록시 패턴 (5)
    2. 업그레이드 가능한 스마트 컨트랙트 패턴들 비교 분석
    장점
    • 데이터 마이그레이션이 필요없다.
    고정된 주소의 컨트랙트에 데이터가
    저장된다.
    • 컨트랙트의 주소가 변경되지 않는다.
    • 업그레이드를 지원하려고 기존
    컨트랙트의 코드를 고치지 않아도
    된다.
    단점
    • 새로운 버전의 컨트랙트가 과거
    버전의 컨트랙트를 상속받음으로써
    오는 제약 조건들이 존재한다.

    View Slide

  23. 3.
    무중단 서비스를 위한
    업그레이드 가능한 스마트 컨트랙트
    프레임워크

    View Slide

  24. Registry
    3. 무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크


    • Version Info
    ContractB_v1
    ContractB_v2


    • Version Info
    ContractA_v1
    ContractA_v2
    컨트랙트 B
    업그레이드 호출
    컨트랙트 A
    업그레이드 호출
    ContractA
    Version 1
    ContractB
    Version 1
    여러 컨트랙트를 업그레이드 해야하는 상황 (문제점)
    각 컨트랙트마다 업그레이드 트랜잭션을 따로 호출해야함
    총 2개의 트랜잭션

    View Slide

  25. Registry
    3. 무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크


    • Version Info
    ContractB_v1
    ContractB_v2


    • Version Info
    ContractA_v1
    ContractA_v2
    컨트랙트 B
    업그레이드 호출
    ContractA
    Version 2
    ContractB
    Version 1
    여러 컨트랙트를 업그레이드 해야하는 상황 (문제점)
    컨트랙트 A 업그레이드 트랜잭션이 먼저 성공
    총 2개의 트랜잭션
    컨트랙트 A
    업그레이드
    완료

    View Slide

  26. Registry
    3. 무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크


    • Version Info
    ContractB_v1
    ContractB_v2
    ContractA
    Version 2
    ContractB
    Version 1
    여러 컨트랙트를 업그레이드 해야하는 상황 (문제점)
    업그레이드가 Atomic 하게 이루어지지 않으면 문제 발생 가능
    트랜잭션
    ContractA_v2 에서
    ContractB_v2 함수
    호출


    • Version Info
    ContractA_v1
    ContractA_v2

    View Slide

  27. Registry
    3. 무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크
    여러 스마트 컨트랙트를 Atomic 하게 업그레이드
    Registry Contract 도입을 통해 다수의 Proxy Contract 관리
    Registry Contract

    • Version Info
    • proxies[]
    • upgradeToAndCalls



    • Version Info
    ContractB_v1
    ContractB_v2


    • Version Info
    ContractA_v1
    ContractA_v2

    View Slide

  28. Registry
    3. 무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크
    여러 스마트 컨트랙트를 Atomic 하게 업그레이드
    Internal Transaction은 여러 트랜잭션으로 블록에 담기는 것이 아니라, 하나의 트랜잭션으로 처리됨


    • Version Info
    ContractB_v1
    ContractB_v2


    • Version Info
    ContractA_v1
    ContractA_v2
    Internal Transactions
    Registry.sol

    View Slide

  29. Upgradeable Smart Contract Framework Architecture
    3. 무중단 서비스를 위한 업그레이드 가능한 스마트 컨트랙트 프레임워크
    Call 0xabc..
    Proxy Contract
    (0xabc..)
    V1 Contract (0x123..)


    • Version Info
    V2 Contract (0x234..)
    EOA
    Registry Contract


    Update Version
    Business Logic
    Smart contracts
    Upgradeable Smart
    Contract Library
    Redirect
    (DelegateCall)
    • Manage Dapp
    Contracts

    View Slide

  30. vvisp을 이용해 업그레이드
    가능한 스마트 컨트랙트 만들기
    4.

    View Slide

  31. vvisp이란
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    https://github.com/HAECHI-LABS/vvisp

    View Slide

  32. 코드 템플릿 생성
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    $ mkdir vvisp-sample
    $ cd vvisp-sample
    $ vvisp init
    https://github.com/HAECHI-LABS/vvisp-sample

    View Slide

  33. 스마트 컨트랙트 작성
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    출처: https://gist.github.com/JhChoy/b414605a2ee05f8d71bc8473b24fcfea

    View Slide

  34. “service.vvisp.json” 배포 파일 작성
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    “service.vvisp.json” 작성
    - serviceName: 현재 서비스의 이름
    - variables: Haechi 주인의 address를
    상수로 사용
    - contracts/Haechi
    - path: HaechiV1.sol 사용
    - upgradeable: 업그레이드 가능
    - initialize: 초기화를 위해 initialize
    함수에 Gym의 주소를 전달
    - contracts/Gym
    - path: HaechiGym.sol 사용
    - upgradeable: 업그레이드 가능
    - initialize: 초기화를 위해 initialize
    함수에 Haechi의 주소를 전달

    View Slide

  35. “.env” 작성
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    “.env” 작성
    - NETWORK: 사용할 네트워크 명, local
    사용
    - PORT: local 포트 번호
    - INFURA_API_KEY: infura 사용 시
    필요한 api 키
    - MNEMONIC: 니모닉 시드 값
    - PRIV_INDEX: 니모닉으로부터
    생성되는 비밀키의 index
    - GAS_PRICE: gas rate 설정

    View Slide

  36. 스마트 컨트랙트 배포 - 서비스 첫 배포
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    $ vvisp deploy-service

    View Slide

  37. 스마트 컨트랙트 배포 결과 - “state.vvisp.json” 생성
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    배포 결과물 “state.vvisp.json” 생성
    - contracts/Haechi, contracts/Gym
    - upgradeable: 업그레이드 가능
    - address: Business 컨트랙트
    주소
    - fileName: 배포된 컨트랙트의
    실제 파일(컨트랙트) 명
    - proxy: Proxy 컨트랙트 주소
    - serviceName: 현재 서비스의 이름
    - registry: Registry 컨트랙트의 주소
    state.vvisp.json

    View Slide

  38. 스마트 컨트랙트 업그레이드 코드 작성
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    HaechiV2.sol 작성

    View Slide

  39. 새롭게 작성한 업그레이드 코드 배포
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    service.vvisp.json 변경

    View Slide

  40. 스마트 컨트랙트 배포 - 업그레이드
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    $ vvisp deploy-service

    View Slide

  41. 업그레이드 배포 결과
    4. vvisp를 이용한 업그레이드 가능한 스마트 컨트랙트 만들기
    업그레이드 후 state.vvisp.json
    업그레이드 전 state.vvisp.json

    View Slide

  42. Vvisp Architecture
    Summary
    vvisp-CLI(Command Line Interface)
    vvisp
    Upgradable
    Smart Contract
    Library
    Token
    Contract
    Business
    Logic A
    Business
    Logic C
    Business
    Logic B
    Smart Contract Layer
    Platform Based on EVM
    Blockchain
    deploy, upgrade, test, versioning
    Service Frontend
    Smart Contract function call
    Developers
    vvisp
    Smart Contract
    Interface
    Library

    View Slide

  43. Thank You!
    Jason Kim | [email protected]

    View Slide