Aptos의 온체인 무작위성, Roll with Move 알아보기 (1/2) — 온체인 카지노는 가능할까?

verse2
verse2
Published in
10 min readMay 7, 2024

온체인 무작위성은 왜 필요할까?

블록체인의 특성으로 많이 거론되는 것 중 하나가 ‘위변조가 불가능하다’ (또는 지극히 어렵다)는 것이다. 이러한 특성을 본 기획자들은 자연스럽게 체인 위에 절대로 조작할 수 없는 카지노 게임을 올리는 모습 상상하곤 했다.

백엔드에서 어떤 조작이 일어날지 알 수 없는 ‘사설 토토’에 비해, 사람들이 훨씬 더 믿고 배팅할 수 있는 프로덕트는 상상만으로도 짜릿하기 마련이다.

다만, 이러한 ‘겜블’이 가져야 할 특성이 하나 있다. 바로 ‘공정한 무작위성’이다. 그리고 온체인에서 공정한 무작위성을 실현하려는 시도는 다양하게 존재해왔다.

SNARK를 이용해 이더리움에서 랜덤성을 달성하는 사례. (출처: Paradigm)

만약, 로또 판매처가 당첨될 번호를 알고 있고 카지노가 룰렛이 어디서 멈출지를 알고 있다면 도박 자체의 의미가 없어지기 마련이다. 로또 판매처도 당첨될 번호를 모르고, 카지노도 어디서 룰렛이 멈출지 모르는 무작위성이야말로 도박꾼들을 계속해서 테이블 앞에 앉히는 원천이다.

그러므로, 블록체인을 이용한 카지노를 만들고 싶은 사람들이라면 누구나 ‘온체인 무작위성(onchain randomness)’을 구현하는 데 관심을 가지기 마련이다.

더 공정한 카지노, 더 많은 수익을 위해서.

‘하이브리드’ 였던 무작위성

그동안 무작위성은 온체인에서 완벽하게 구현하기에는 무리가 있는 개념으로 취급되었다. 따라서 완전 온체인(fully on-chain)이 아닌 여러 가지 대안들이 시장에 출시되었다.

예를 들어 소위 말하는 ‘하이브리드’한 해결책이 있다. 오프체인에서 난수를 통해 임의의 숫자를 생성하고, 이를 온체인으로 전송하는 방식이다.

그러나 애초부터 오프체인 숫자가 공정하게 생성되었다는 점을 보장할 수 없다면, 제공되는 숫자는 이미 오프체인 제공자가 임의로 조작한 수치일 수도 있다. 데이터를 온체인에 올리는 과정에서 탈취가 일어날 수도 있고, 실제와 다른 데이터를 온체인에 올리는 공격이 발생할 수도 있다.

그렇다면, 오프체인에서 수치가 조작되지 않았다는 점을 어떻게 확인시킬 수 있을까?

체인링크 VRF의 동작 과정. (출처 : 체인링크 공식 블로그)

답은 위 그림에 나와 있다.

체인링크의 VRF(Verifiable Random Function)는 오프체인에서 만들어진 무작위성이 다른 플레이어에 의해 탈취되거나 조작되지 않았음을 보장하는, ‘검증 가능한 무작위성’ 을 제공했다. 쉽게 말하면, 로또 번호가 정말 랜덤이냐 아니냐를 온체인에서 검증할 수 있도록 만든 것이다. 위의 그림이 설명하는 내용은 아래와 같이 정리할 수 있다:

1. 스마트 컨트랙트는 혼자만 알고 있는 (=오라클이 예측할 수 없는) 시드를 오라클에 제공하고, 오라클은 시드에 더해 자신의 ‘비밀 키’를 사용해서 랜덤 숫자를 만든다.

2. 그 다음 오라클은 온체인으로 ‘VRF 컨트랙트’에 해당 숫자를 전송한다.

3. VRF 컨트랙트는 스마트 컨트랙트의 시드와 오라클의 비밀 키를 받아서, 해당 랜덤 숫자가 정말로 맞는 시드 / 비밀 키를 사용한 것인지 확인한다.

4. 그리고 무작위성이 검증되면 이를 스마트 컨트랙트로 넘긴다.

이렇듯 스마트 컨트랙트는 자연스럽게 오라클(=체인링크)을 이용해서 ‘검증 가능한 무작위성’ 을 만들 수 있다.

로또로 따지면 로또 공과 기계를 다루는 회사와 공을 잡는 사회자가 따로따로 있어서, 한쪽이 일방적으로 결과를 조작할 수 없는 환경을 조성하는 것과 비슷할 것이다.

체인링크의 VRF는 검증된 무작위성을 가진 인풋만 펑션에 넣거나, 무작위성 요청에 응답하지 않는 오라클 노드에게 페널티를 주는 등 다양한 추가 기능을 갖추고 있다.

현재 대부분의 어플리케이션은 이와 같이 온체인 — 오프체인을 잇는 ‘하이브리드’한 VRF를 이용하여 무작위성을 보장하고 있는 것이다.

그러나, 로또의 예로 돌아가보자.

(그럴 일은 거의 없겠지만) 사회자가 매의 눈으로 자신이 원하는 공만 잡아채는 무림 고수였다면 어떨까? 아니면 사회자가 오지 않아서 제시간에 로또 번호가 뽑히지 않는다면?

이와 같이, 실제로 오프체인 — 온체인 사이의 정보 전달을 거친다는 점에서, 여전히 체인링크의 VRF 방식에는 취약한 부분이 있다.

오라클 노드가 결과를 조작하거나, 온체인 — 오프체인 전달 시 정보가 조작되거나, 또한 ‘훼손된 노드’ 가 무작위성을 요청할 때에 이에 응답하지 않는 등 여러 가지 문제 상황이 발생할 수 있는 것이다.

(위의 사진 속의 미국 복권 구매 대행 업체는 복권 구매대행료를 받아놓고 실제로는 복권을 사지 않고, 다른 고객의 돈으로 구매자들에게 3, 4, 5등 당첨금을 지급하는 방식으로 431억을 벌었다고 한다.)

AIP-41 : PoS 블록체인을 위한 최초의 온체인 무작위성

지난 2023년 11월, 한국을 찾은 앱토스의 개발 헤드 David Wolinsky 는 다음과 같이 말했다.

“앱토스는 앞으로 온체인 무작위성(on-chain randomness) 기능도 추가할 계획이다. 온체인 무작위성은 블록체인 상에서 검증가능한 난수를 제공하는 기술이다. 만약 게임에서 랜덤으로 사용자를 선정해 NFT 보상을 준다고 했을 때, 선정 기준이 공정해야 신뢰도가 높아진다. 그 누구도 사전에 결과를 예측하지 못하도록 하려면 온체인 무작위성이 필요하다.”

그리고 다음과 같이 말하기도 했다.

“2024년 초에 실제로 온체인 무작위성을 갖춘 최초의 주요 블록체인이 될 것”이라며 “앱토스는 웹2 개발환경과 매우 유사한 온체인 무작위성을 제공할 수 있다”

그렇다. 윌린스키 헤드의 말처럼, 앱토스는 PoS 블록체인 중 최초로 온체인 무작위성을 직접 구현할 계획을 세우고 있었던 것이다. 앱토스는 생태계에서 게임, 소셜, 컨텐츠, 디파이 등을 강조하면서 커왔는데, 이는 모두 해당 글에서 다루는 주제인 ‘온체인 무작위성’과 관련이 깊은 것들이다.

실제로 앱토스 랩스의 최근 글에서는, 분산형 게임, 추첨, 무작위 NFT, 무작위 에어드롭 등과 같은 많은 기능들이 바로 앱토스 온체인 무작위성의 혜택을 볼 기능들로 꼽혔다.

Move Randomness API Interface

실제로 AIP-41이라는 프로포절에서 시작하여 이번에 추가된 무브 API 인터페이스까지, 앱토스 랩스와 재단은 ‘외부 무작위성 비콘’ 을 활용하는 것보다 훨씬 개발자에게 편리한 솔루션을 만들고자 노력해 왔다.

사실, 앱토스에서도 기존에 외부 비콘(체인링크 등)을 활용하지 않은 것은 아니다. 최초로 ‘무작위성’ Move 모듈을 제안한 AIP-41을 보면, 기존에는 앱토스 내에서 ‘외부에서 얻은 무작위성’을 검증하는 API를 제공하고자 했고, 실제로 drand라는 무작위성 비콘을 통해 raffle을 만든 사례가 공유되고 있다.

그러나, 해당 방식은 유저가 이해하기 어렵고 / 무작위성을 생성하는 과정이 너무 비싸면서 느리고 / 트랜잭션을 통해 컨트랙트로 전달해야 하는 삼중의 불편함이 있다.

따라서, AIP-41은 다음의 방식을 제안한다.

Suite functions (for integers, bytes, shuffles, etc)

  • randomness::u64_integer() uniformly samples a 64-bit unsigned integer
  • randomness::bytes(n) uniformly samples a vector of n bytes.
  • randomness::permutation(n) returns a random shuffle of the vector [0, 1, 2, …, n-1].
The full randomness module (출처: AIP-41)

여기서는 각 무작위성을 어떻게 생성 / 호출할 수 있는지와 또한, 앞으로 더 많은 randomness function이 추가될 수 있음을 알 수 있다.

다음은 해당 모듈을 실제로 사용한 raffle 예제 코드 중, 마지막에 winner를 구해 상금이 pay되도록 하는 부분을 크롭한 것이다.

Example: A decentralized raffle (출처: AIP-41)

시간이 충분히 지나고, 1명 이상이 raffle에 참여했을 경우, 랜덤하게 winner를 뽑아 코인을 deposit하는 플로우를 확인할 수 있다.

Aptos Roll, 앱토스가 대신 굴려주는 주사위

앱토스에서는 이러한 온체인 무작위성 API 및 기본 암호화 구현을 ‘Aptos Roll’이라는 이름으로 출시했다. 사용법은 심플하다. 위의 예제에서와 같이 온체인 랜덤성이 필요할 때 다음을 입력하면 된다.

  • aptos_framework::randomness::u64_integer() -> Move에서 임의의 숫자가 필요한 경우
  • aptos_framework::randomness::bytes() -> 바이트가 필요한 경우

또한 위에서 살펴본 것과 같이, API 인터페이스를 제공한다.

Aptos Roll 은 앞에서 살펴본 것처럼, 외부의 오라클(비콘)을 빌리지 않고 앱토스 밸리데이터들의 보안과 가용성을 활용할 수 있다는 점이 가장 좋은 점으로 손꼽힌다. 이를 이용하여 온체인 무작위성을 구현할 경우, 다음의 두 가지 측면에서 특히 유리해진다.

  1. 인스턴트 API를 쓰기 때문에 무작위성을 커밋하고 & 사용하는 두 개의 트랜잭션을 날릴 때보다 빠르고 저렴하다.
  2. PoS 밸리데이터를 이용해 보안을 보장하므로 ‘메인넷 그 자체’ 만큼 안전하다. 외부 엔티티를 굳이 추가로 신뢰할 필요가 없다.

여기까지 읽었다면, 가장 궁금해지는 점이 하나 생긴다.

대체 어떤 방법을 썼길래 앱토스는 다른 체인들은 할 수 없었던 온체인 무작위성을 달성한 것일까?

앱토스 카지노는 온다

어떻게 이러한 온체인 무작위성을 도출하는지에 대한 답은, wPVSS (가중치 공개 검증형 비밀 공유), wDKG (가중 분산 키 생성), wVRF (가중 검증가능 무작위 함수) 라는 세 가지 키워드에 있는데, 여기에 대한 설명은 다음 글에서 마저 이어갈 예정이다.

현재, 블록체인 생태계에서는 온체인 카지노를 표방하며 암호화폐 기반의 플레이와 블록체인을 통한 위변조 불가능한 결과를 제공한다고 주장하는 업체들이 있다.

그러나 이러한 업체들이 활용하는 오프체인 백엔드나, 오프체인 — 온체인을 잇는 ‘하이브리드’ VRF 솔루션들이 생각보다 공정하지 않은 무작위성을 제공하고, 조작 가능성, 한쪽에게만 유리한 결과를 제공할 가능성, 또한 제 3자가 중간에 정보를 조작하거나 탈취할 가능성을 안고 있다는 것을 알게 되었다.

진정한 온체인 카지노를 구현하기 위해서는 온체인 무작위성을 갖춘 체인을 사용할 뿐만 아니라, 그 속도를 더 빠르게 하고, 사용료를 낮추고, 다양한 디앱에 인터그레이션될 수 있도록 해서 더 폭넓은 서비스를 구현할 수 있어야 한다. 앱토스의 이번 Roll with Move는, 이러한 특성들을 갖추고 있어 ‘온체인 카지노를 가능하게 하는’ 최적의 API 세트라고 할 수 있겠다. 온체인 무작위성을 이용해, 앞으로 게임 / 도박 / 컨텐츠 등에서 여러 가지 재미있고 혁신적인 이용 사례들이 나오게 될 것이라고 믿는다.

작성자 : Minik
검수자 : Ryan

verse2는 DeFi 서비스 개발에 전문화된 팀이자, 높은 잠재력을 가진 Crypto 프로젝트의 인큐베이터입니다. 팀은 다양한 프로토콜을 개발 및 운영하여 DeFi 분야에 대한 심층적인 지식과 경험을 보유하고 있습니다.

verse2 [Homepage | Twitter | Medium]

--

--

verse2
verse2
Editor for

Build, incubate, invest — Making all possible in the crypto. / verse2.io