2021년 8월경에 제가 블록체인에 대해 공부한 내용들을 정리했습니다.

강의 : Klaytn 클레이튼 스마트계약과 탈중앙앱 강의(한양대학교)


블록체인 UX의 문제

잠만, 근데 UX가 정확히 뭐지?

UX = 사용자가 어떤 시스템, 제품, 서비스를 직/간접적으로 이용하면서 느끼고 생각하게 되는 총체적 경험.

  • 괜찮은 UX = 유저들의 '기준점'을 만족시키는 UX.
  • 기준점 = 유저들이 현재 경험하고 있는, 기존의 다른 서비스들에서 제공되던 것들.
    (예를 들어, 송금할 때 수수료가 없다던가, 인증 절차가 복잡하지 않다던가 등등 다른 서비스에서 일반적으로 제공하는 것들은 블록체인 UX에서도 똑같이 제공되는 게 좋다는 의미이다.)

블록체인의 문제

  1. 성능 문제
    • 한 블록이 담을 수 있는 TX 갯수의 제한
    • 주기적인 블록 합의로 인해 발생하는 지연, 이로 인한 느린 반응속도
      (ex: 이상적으로 봐도 비트코인은 10분 이상, 이더리움은 15초 이상 대기해야 함)
  2. 비용 문제
    • 합의에 참여하기 위해 필요한 비용
      (ex: 비트코인의 경우 마이닝을 위한 비용이 많이 듬.)
      (ex: BFT로 합의하는 경우 좋은 네트워크, 많은 TX 처리를 위한 좋은 하드웨어가 필요함)
    • 블록을 유지하기 위해 필요한 비용 (storage cost 등)
  3. 불편함 : UX와 직접적으로 관련된 부분.
    • 사용자가 가스비를 내야하는 불편함
    • 사용자가 직접 키를 관리해야 하는 불편함

블록체인의 문제, Klaytn은 어떻게 해결했나?

  1. 성능 문제
    : 클레이튼의 경우, public 대신 hybrid 구조를 채택해서 해결함.
    • 한 블록이 담을 수 있는 TX 갯수의 제한 ⇒ 4000 TPS (capacity 확장)
    • 주기적인 블록 합의로 인해 발생하는 지연 ⇒ 블록생성 주기를 1초로. (latency 감소)
  2. 비용 문제
    • 합의에 참여하기 위해 필요한 비용 ⇒ 대기업 참여 (돈으로 해결!)
      그리고 담합을 막기 위해 모든 블록을 투명하게 공개하고, 합의를 위한 조건도 공개함.
    • 블록을 유지하기 위해 필요한 비용 ⇒ KAS (Klaytn API Service. KAS Docs 링크)
      참여하고자 하는 유저들 중 일부는 비용 문제로 네트워크의 모든 블록을 복사해서 가져오지 못할 수도 있다. 이를 위한 시스템.
      (사용 비용을 지불하면 지금까지 관리중인 블록에 대한 정보들을 돌려주는 API.)
  3. 불편함
    • 사용자가 가스비를 내야하는 불편함 ⇒ 가스비 대납 기능 구현
    • 사용자가 직접 키를 관리해야 하는 불편함 ⇒ 키 관리체계 구현

가스비 대납을 사용한 UX 향상

가스비를 더 자세히 알아보자!

가스비 = TX를 처리하는데 필요한 자원을 비용으로 전환한 것.

  • 플랫폼 사용료라고 생각하면 된다.
    (* 참고로 플랫폼 입장에선, 가스비는 TX Spamming을 방지하는 장치라고 한다.)
  • EVM 명령어마다 정해진 가스량이 존재한다.
  • 클레이튼 : Sender는 (TX의 처리를 위해 필요한 가스의 총량) X (Gas Price)만큼의 KALY를 내야 한다.

복잡한 연산을 수행할수록 높은 가스비가 소모된다.

  • 클레이튼의 가스비는 25 ston/gas (0.000000025 KLAY)로 고정되어 있다.
  • KLAY 전송에 필요한 가스비는 0.000525 KLAY (21,000 gas)
  • Count 컨트랙트를 배포하는데 약 183,000 gas가 필요하다.

가스비 대납이 왜 필요한가?

  1. 유저는 플랫폼 사용료를 지불해야 한다는 것을 이해하지 못한다.
    • 사용하는 서비스가 KCT(Klaytn Compatible Token)를 사용할 경우 더욱 문제가 된다.
    • 작은 금액이라도 민감하게 반응할 수 있다.
  2. 유저가 KLAY를 취득하기 어렵다.
    • 법정화폐(fiat)로 가상자산을 취득하는 것은 어렵다.
    • 이 때문에, 가스비는 어플리케이션 최초 사용 시나리오에서 큰 장애물로 작용하게 된다.
    • 사용자에게 지원금을 지급할 수 있으나, 이는 남용될 위험이 존재한다.
  3. 클레이튼의 가스비는 매우 낮기 때문에 대납해도 부담이 크지 않다.

⇒ 따라서, 유저가 가스비를 내지 않도록 구현하는 것이 UX 개선에 큰 도움이 된다!!!
TX를 보내는 Sender가 유저라면, 가스비를 부담하는 Payer는 서비스/어플리케이션 운영사가 된다.

Klaytn Fee Delegation

대납 TX는 두 개의 서명을 가진다.

  • TX는 Sender(유저)가 생성 → 서명 → Payer(서비스/어플리케이션 운영사)에게 전달
  • Payer는 Sender가 전달한 TX에 추가정보를 기입 → 서명
  • 각각의 서명이 제출된 주소들에 부합할 경우 TX는 유효성을 인정받음
  • 가스비 : Payer의 balance에서 차감 (nonce 변경 없음)

Fee Delegation in caver-js

// Sender-side
const { rawTransaction: senderRawTransaction } = await caver.klay.accounts.signTransaction({
	type: 'FEE_DELEGATED_VALUE_TRANSFER',
	from: sender.address,
	to: 'to주소',
	gas: '3000000',
	value: 1,
}, sender.privateKey);

// Payer-side
const { rawTransaction: finalTx } = await caver.klay.accounts.signTransaction({
	senderRawTransaction: senderRawTransaction,
	feePayer: payer.address
}, payer.privateKey);

Fee Delegation 분석

장점

  • UX 향상
  • 불필요한 토큰 거래 최소화
  • 토큰을 들고 있지 않은 일반 유저들도 서비스 이용이 가능해짐
  • TX 규모 확대

단점

  • 플랫폼 성능 저하 (여러 개의 서명을 검증해야 하므로)
  • 서비스 개발 복잡도 증가
  • 서비스 관리비용 증가
    ex) TOSS 기준 일 264 USD

키 관리체계를 사용한 UX의 향상

키 관리의 어려움

  • 잃어버릴 경우 복구가 불가능하다.
  • 분실, 해킹의 위험이 있다.
  • 키의 문자 조합은 가독성이 낮고, 외우기 힘들다.

⇒ 개인이 관리하기 어렵다.

해결책 : 키만 다른 사람에게 위임할 수 있을까?

기존 방식 : 유저가 키를 생성하고, 서명까지 해야 한다.

키 관리체계가 들어간 방식 : 유저는 키를 생성하기만 하고, 서명은 키를 위임받은 주체가 대신 처리한다.

Key Management System (KMS)

KMS = 키를 클라우드 서비스가 관리하는 아이디어.

  • KMS는 키를 안전한 곳에 보관 : 사용자는 KMS에 TX를 전송해서 서명을 요청한다.
  • 사용자 인증이 성공할 경우 KMS는 사용자에게 서명된 TX를 전달한다.
  • 더 철저하게, 키를 분실할 위험을 방지할 수 있다.
  • 키는 2중으로 암호화해서 보관한다. (분실, 재난 등에 대비한 것)
  • 복호화된 키는 KMS도 열람할 수 없는 장치를 구현해야 한다. (HSM 등)

KMS 구현 예시

KMS 분석

장점

  • UX 향상
  • 키 분실, 해킹 위험 최소화
  • 사용자 인증을 통해 KYC 수행
  • Seamless한 One Key ↔ Multi BApp 사용 지원

단점

  • 키 관리 주체가 중앙화 (SPoF)
  • 키 관리 비용이 발생함 (하드웨어, 운영인력 등)
  • 키 분실/훼손 시 책임 발생
profile
Flutter 메인의 풀스택 개발자 / 한양대 컴퓨터소프트웨어학과, HUHS의 화석

0개의 댓글