Skip to content

Instantly share code, notes, and snippets.

@victorrica
Last active January 21, 2020 06:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save victorrica/83b244ee01430ee134bc8bb720829534 to your computer and use it in GitHub Desktop.
Save victorrica/83b244ee01430ee134bc8bb720829534 to your computer and use it in GitHub Desktop.

피르마체인 기술 백서

서론

이더리움의 합의 방식과 수수료 체계로는 FirmaChain 의 구조를 만들 수 없다. 계약 당사자들이 계약에 대해 서명을 하고, 그 파일 고유 식별 값을 업로드하며, 별개 저장소의 주소를 모니터링하고, 계약 자체의 상태를 관리하는 것까지 이더리움의 Smart Contract 로 설계를 진행했다. 하지만 이를 실제로 개발하고 구동하니 수수료가 터무니없이 비싼 문제가 있었다. 또한 근본적으로 우리는 계약에 대한 증명 내역과 파일 그 자체를 모든 사용자가 가지고 있을 필요가 없었고, 선출된 검증자(validator) 들만이 갖고 있어도 충분히 우리가 생각하는 구조를 만들 수 있을 것이라 생각했습니다. 따라서 이더리움 이 아닌 우리가 사용할 수 있는 다른 블록체인 네트워크에서 토큰을 발급하여 사용하는 방법, 독자적인 메인넷을 구축하는 방법 중 한 가지로 토큰을 스왑하려고 했다. 우리는 추후 추가될 수 있는 다양한 기능들을 구현하기 위해서는 메인넷을 구축하는 방법이 옳다고 판단해 Tendermint BFT 합의를 사용한 Framework인 Cosmos SDK 를 사용해 메인넷을 구축하기로 하였습니다.

합의 방식

피르마체인은 DPOS(Delegated Proof of Stake) 방식으로 이루어져 있습니다. Cosmos 블록체인 기반으로 개발 되었으며, 피르마체인에 특화된 E-Contract(전자계약) 상의 서명과 검증 하는 고유 알고리즘이 개발 되어있습니다. DPOS는 위임 지분 증명으로 피르마체인 정책에 따라 선정된 팀 또는 기업만 노드와 검증자로 참가 및 출마 할 수 있습니다. 검증자(validator)로 참가하게 되면 위임자에게 지분을 위임 받아 수익을 분배 할 수 있습니다. 또한 PBFT(Practical Byzantine Fault Tolerance) 비잔틴 장군 문제를 통해 합의 알고리즘을 사용하며 이를 통해 불성실하거나 악의적인 검증자를 걸러냅니다.

검증자의 역활

  • 노드 운영을 통한 장부 관리
  • 블록의 무결성 검증 및 블록 생성
  • 블록내 기록되는 E-Contract 계약서 파일 해쉬 검증

검증자 출마 기준

  • 한국 또는 외국에 법인이 설립되어 있어야 함.
  • 피르마 체인과 파트너쉽 체결이 되어있어야 함.
  • 블록체인 업계 또는 전자계약 관련 업종

검증자 시스템 셋업

  • 하드웨어 장비 ( 위 내용들은 네트워크가 성장되면서 변경 될 수 있음 또한 이에 따른 장비 셋팅은 피르마체인 재단에서 지원 가능)
  • 전력, 네트워킹, 방화벽, 하드웨어 보안 모듈과 서버 백업이 하나 있는 데이터 센터 환경
  • 최소 5Gbps 수준의 대역폭 네트워크
  • 최소 100Gb 수준의 저장 장치.

검증자가 지속적으로 해야할 역활

  • 주기적인 메인네트워크 개발에 따른 소프트웨어 업그레이드와 버그 패치
  • 피르마체인 검증자 커뮤니티 내에서 거버넌스에 참가하기. 모든 제안에 참가 해야합니다.

검증자 패널티

  • 다운 타임: Downtime은 검증인이 Pre-commit, 즉 블록에 서명을 놓칠 때마다 발생합니다. 가장 최신 10000개의 블록 중 500개 이상을 놓치게 되면 Downtime 슬래싱이 발생하게 됩니다. Downtime 슬래싱 비율은, 검증인과 위임인의 물량 전체의 0.01% 입니다.
  • 이중 서명 : 누군가 체인A에서 특정 검증인이 동일한 높이의 두개의 블록을 체인A와 체인B에서 서명한 경우 (체인A 와 체인B 가 동일한 ancestor에서 유례한 경우) 해당 검증인은 체인 A에서 슬래싱 됩니다. 검증인이 가장 치명적인 오류인 이중 서명을 발생시켜도 해당 검증인의 위임인의 지분도 같이 위험해집니다. 위에 설명된 Downtime 슬래싱과는 다르게 이중 서명 패널티 비율은 5% 이며, 해당 검증인의 노드는 네트워크에서 영원히 차단되게 됩니다.

계약 서명 프로세스

  1. 계약 시작 : 당사자들 서명, 파일 고유 값(hash), 파일 저장되있는 endpoint 등 계약 정보 만들어서 올림 → 시작
  2. 계약 파기 : 계약 정보 만들어서 올린것 조회 → 해당 계약 정보 고유값에 대해 파기한다는 모든 계약 당사자들의 파기 서명을 만들어서 올림 → 파기
  3. 계약 확인 및 검증 : 계약 hash와 owner 주소와 일치하는지 확인 후 계약서 파일 주소(path) 받아온다.

여기서 endpoint 는 위변조가 불가능한 ipfs 또는 스토리지 블록체인을 이용해야 하며 이를 검증 한다. FirmaChain에 위 값을 아래의 JSON형태로 트렌잭션 블록내에 저장 할수 있습니다. 또한 데이터는 머클 트리(Merkle tree)의 형태로 가공되어 관리됩니다. 데이터를 활용하는 서비스는 해당 데이터를 머클 트리로 만드는 과정을 진행하며, 피르마체인은 이를 활용하는 듀잇(duite.io)과 같은 서비스가 피르마체인을 통해 데이터 쉽게 활용할 수 있도록 소프트웨어 도구와 가이드를 제공할 예정입니다. 데이터를 머클트리 형태로 관리할 때의 장점은 데이터 내용을 일부만 공유하는 것이 가능하다는 것입니다. 블록체인에는 데이터 소유자가 머클 트리의 루트 해시(Root hash)를 기록합니다. 머클 트리의 특성 상 데이터의 일부만 공개하더라도 루트 해시를 포함하는 머클 증명(Merkle proof)을 제공하면 그것이 전체 원본에 포함된 값이 맞는지 검증할 수 있습니다. 이를 이용해 데이터 전달시 개인 정보를 제외함으로써 데이터를 비식별화 하는것도 가능하며, 요청자의 요구에 따라 작성자의 서명과 같은 특정 데이터만을 공개해 데이터 거래 전에 해당 데이터에 대한 신뢰성을 먼저 입증할 수 있습니다. 머클 트리로 변환된 데이터 원본은 일차적으로 사용자의 스마트폰 디바이스 또는 PC 저장소에 저장됩니다. 블록체인에는 데이터 원본을 바탕으로 추출한 루트 해시를 기록하기 때문에 데이터 저장 및 공유 과정에서 사용하는 암호화 방식에도 아무런 제약이 없습니다. 컴퓨팅 파워의 증가로 인해 원래의 암호화 방식이 안전성을 잃더라도 블록체인에 기록된 내용과 충돌하는 것 없이 서비스 단계에서 새로운 암호화 방식을 적용할 수 있습니다.

{
  "value": {
"msg": [
  {
    "type": "firmachain/addContract",
    "value": {
      "path": "https://ipfs.infura.io:5001/api/v0/cat?arg=QmTF7NerdGZhnDPJj3Yj51gqH18o8kLtgkgtVjMLk1V9tx",
      "hash": "790e54e8723d7ad9c05b232498c3341e6f4465ec6db9f0449c2ba52fcf9d0569",
      "owner": "firma1ytleandjvn27kcpsfly3d39amw6n2znfpm5eg7"
    }
  }
],
"fee": {
  "gas": "200000"
},
"signatures": [
  {
    "pub_key": {
      "type": "tendermint/PubKeySecp256k1",
      "value": "AphzfQjmeJtOSczRUmZeqUKMDU4i6BkX9zL7B8HhidV1"
    },
    "signature": "yuHO318uATRuv3bTN6n2EKESWjFi5M9+3JnorGbaV2ZbupMu6roR7dRtVZ46biAKZ4VhP6YMDbwNpTF5X6wLNA=="
  }
],
"memo": ""
  }
}

피르마체인의 역활

피르마체인내 모든 트랜잭션은 모두가 확인 가능합니다. 그러나 계약서와 같은 경우 파일 해쉬값과 타원 곡선 암호화 된 endpoint으로 저장 됩니다. 이를 통해 서명자 외에는 계약서를 확인 할 수 없습니다. 피르마체인 에서 제공되는 SDK 또는 duite와 같은 솔루션에서 사용 가능하며 모든 블록체인 내 계약서 상의 내용은 법적 효력을 보장합니다. 11개의 검증자가 선정되기 전까지 피르마체인 재단에서 운영하는 노드에서 검증자 역활을 수행하며, 검증자 선정이 완료 되면 피르마체인이 검증자 역활 수행으로 받은 Firma 메인넷 코인 보상은 소각 혹은 에어드랍 할 예정입니다.

토큰 스왑

현재는 이더리움의 ERC20 토큰으로 피르마체인이 발행 되어 있습니다. 이는 피르마체인 내 Firma 메인넷 코인으로 스왑 될 것 이며, 메인넷 공개와 같이 블록 탐색기, 지갑 그리고 토큰 스왑 페이지와 같이 런칭 될 것 입니다. 토큰 스왑에 대한 자세한 내용은 이 후 피르마체인 에서 운영하고 있는 커뮤니티와 상장 되어 있는 거래소에 자세히 공지될 예정 입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment