zkSNARK를 사용하여 체인 상의 포커 게임을 만드는 방법은?

MantaNetworkProtocol
2022-11-14 17:12:27
수집
공공 블록체인에서는 체인 상 데이터의 공개 투명성으로 인해 비완전 정보 게임을 구축하기가 어렵습니다. 그러나 제로 지식 증명 기술을 통해 플레이어는 개인 정보를 유지하면서 검증 가능한 유효한 행동을 공개적으로 제출할 수 있습니다.

저자: 만달로리안, Manta Network Protocol

지난 1년 이상 동안, 점점 더 많은 사람들이 ZK(제로 지식 증명)이라는 암호학 도구의 강력함을 인식하게 되었고, 우리는 개인 정보 소셜, 개인 정보 투표, 개인 정보 DAO 등과 같은 많은 제로 지식 증명 응용 프로그램의 출현을 보았습니다. 실제로 제로 지식 증명의 응용은 매우 광범위하며, 체인 상의 개인 정보 요구가 있는 응용은 모두 제로 지식 증명을 사용할 수 있습니다.

방금 종료된 ETHSanFrancisco 2022 기간 동안의 ETHGlobal 해커톤 행사에서, Manta Network 암호학 개발 팀의 동료들은 단 36시간 만에 zkSNARK 기반의 포커 게임을 만들었고, ApeCoin, ENS, SKALE, Optimism이 주최한 네 개의 경쟁 단위에서 상을 받았습니다.

image

많은 사람들이 잘 알고 있는 Dark Forest(어두운 숲)는 zkSNARK 기반의 실시간 전략(비완전 정보) 게임입니다. 비완전 정보 게임은 플레이어가 모든 상태를 파악하지 못하는 게임으로, 예를 들어 포커에서 플레이어의 손에 있는 카드는 비밀 정보이며, 카드를 뽑는 과정도 완전히 비공식적입니다. 비완전 정보의 흥미로운 점은 복잡한 게임 전략을 유도할 수 있다는 것입니다.

공공 블록체인에서는 체인 상 데이터의 공개 투명성 때문에 비완전 정보 게임을 구축하기가 어렵습니다. 그러나 제로 지식 증명 기술을 통해 플레이어는 개인 정보를 유지하면서도 검증 가능한 유효한 행동을 공개적으로 제출할 수 있습니다.

이번 해커톤 행사에서 Manta Network는 zkSNARK를 기반으로 한 체인 상 포커 셔플 및 배포 시스템을 구축했습니다. 이 시스템은 체인 상 포커 게임에서 존재하는 두 가지 문제를 주로 해결합니다: 어떻게 공정하게 셔플을 진행할 것인가와 어떻게 플레이어 간에 비밀스럽게 카드를 배포할 것인가(그렇지 않으면 게임이 MEV 문제로 인해 진행되지 않을 수 있습니다).

본질적으로 제로 지식 증명 기반의 체인 상 포커는 배포 주체를 분산화하여, 딜러가 배포를 통해 게임을 통제할 수 없게 합니다.

Web2 중앙화 클라이언트에서 포커를 할 때, 가능성이 극히 낮은 카드가 당신에게 배포되는 상황을 경험할 수 있습니다. 높은 확률로 얻을 수 있는 카드가 나오지 않는 경우도 있습니다.

목적은 배포를 통해 게임을 조작하여, 당신의 상대가 오프라인에서 이길 확률이 극히 낮은 상황에서 온라인에서 당신을 이기도록 만드는 것입니다.

이것이 우리가 분산화된 포커가 필요한 이유입니다.

ZKShuffle 시스템에는 세 가지 기능이 있습니다:

ZKShuffle.setup: 각 플레이어는 키 쌍을 생성하고, 각자의 공개 키를 모아 집합 공개 키를 생성합니다.

ZKShuffle.shuffleencrypt: 셔플을 진행할 때, 각 플레이어는 순차적으로 shuffleencrypt를 호출해야 합니다.

암호화와 복호화가 임의의 순서로 진행될 수 있도록 보장하기 위해, 여기서는 동형 암호화 방식(Homomorphic Encryption scheme)을 사용합니다. 예를 들어, 이번 게임에 세 명의 플레이어가 있다면, 한 번의 암호화 후 각 카드에는 세 개의 암호화 잠금이 있습니다: Card{Alice, Bob, Charlie}.

ZKShuffle.decrypt: 특정 플레이어에게 카드를 배포하고자 할 경우, 각 플레이어는 복호화 기능을 호출해야 합니다. 예를 들어, 게임의 논리가 Charlie에게 카드를 배포해야 한다면, 올바른 순서는: Alice가 암호화된 카드 Card{Alice, Bob, Charlie}를 받고, 자신의 키로 복호화한 후, 복호화된 카드 Card{Bob, Charlie}를 체인 상에 제출하고, 복호화의 유효성을 검증하기 위한 제로 지식 증명을 제출하는 것입니다.

image

Bob은 체인 상에서 Alice가 제출한 부분적으로 복호화된 카드 Card{Bob, Charlie}를 받은 후, 자신의 키로 복호화하고, 체인 상에 카드 Card{Charlie}와 복호화 유효성을 검증하는 제로 지식 증명을 제출합니다. 마지막으로 Charlie는 자신의 키만으로 복호화하여 자신의 카드를 확인할 수 있습니다.

Manta Network 암호학 개발 팀은 ZKShuffle을 사용하여 포커 데모를 구축했습니다. 이는 Solidity, React 및 Ether.js를 기반으로 한 분산형 응용 프로그램입니다. 이 데모에서는 새로운 게임이 시작될 때마다 모든 플레이어가 한 번의 설정을 진행하여 체인 상의 포커 카드가 공정하게 셔플되었음을 보장합니다. 그런 다음 각 플레이어는 한 번의 복호화를 통해 두 장의 카드를 받게 됩니다. 이렇게 플레이어는 EVM 블록체인에서 포커를 즐길 수 있습니다.

Manta는 현재 이 DApp을 Optimism Goerli, Ethereum Goerli 및 Skale 블록체인에 배포했습니다.

image

구현 원리

전체 프로젝트는 3부분으로 구성됩니다:

  • ZK 회로;

  • 복호화 및 셔플을 검증하기 위한 스마트 계약, ZKShuffle 계약 및 게임 논리 계약 DApp 프론트엔드, React 및 ether.js와 Circomlib JS 라이브러리를 사용하여 구축된 데모;

  • Circomlib 암호학 JS 라이브러리.

Circom의 구현에서는 ElGamal 암호화 방식을 사용하고, 기존 Circom 라이브러리인 poseidon 해시를 사용합니다.

암호화 회로는 87308개의 R1CS 제약 조건(constraints)을 가지며, DApp에서의 증명 생성 시간은 4.5초입니다. 복호화 회로는 1522개의 R1CS 제약 조건을 가지며, DApp에서의 증명 생성 시간은 0.1초입니다. SnarkJs를 사용하여 DApp에서 제로 지식 증명을 생성합니다.

스마트 계약은 두 부분으로 구성됩니다: ZKShuffle 프레임워크 계약과 포커 게임 논리 계약. ZKShuffle 계약은 ZKP 검증 논리와 두 개의 회로를 간단히 포장합니다. 논리 계약은 상태 기계를 배포하여 RPC 노드에서 게임의 현재 단계와 어떤 플레이어의 차례인지를 가져옵니다.

DApp은 React 프레임워크와 Ether.js를 사용하여 구현되며, 포커 테이블과 각 플레이어의 동작 애니메이션을 보여줍니다. 플레이어가 동작을 해야 할 때, 해당 플레이어는 UI의 버튼을 클릭하여 metamask를 사용해 거래 서명을 하면 됩니다.

데모 보기

Manta Network에 대하여

Manta Network는 개인 정보 보호를 통해 더 나은 Web3 세계를 구축하는 데 전념하고 있습니다. Manta의 제품 설계는 첫 번째 원리에서 출발하여, zkSNARK와 같은 선도적인 암호학 구조를 통해 블록체인 사용자에게 종단 간 개인 정보 보호를 제공합니다. 개인 정보를 보장하면서도 Manta는 상호 운용성, 편리함, 높은 성능 및 감사 가능성을 갖추고 있어 사용자가 임의의 평행 체인 자산 간의 개인 정보 전송 및 거래를 할 수 있도록 합니다. Manta의 비전은 전체 블록체인 세계에 더 편리한 개인 정보 보호 서비스를 제공하는 것입니다.

Manta의 창립 팀은 여러 암호화폐 전문가, 교수 및 학자로 구성되어 있으며, 그들의 경험은 하버드 대학교, 매사추세츠 공과대학교 및 Algorand를 포함합니다. Manta의 투자 기관에는 Polychain, ParaFi, Binance Labs, Multicoin, CoinFund, Alameda, DeFiance 및 Hypersphere 등이 포함됩니다. Manta는 또한 Polkadot 공식 Web3 재단의 지원을 받는 수혜자이며, Substrate Builder Program의 회원이자 버클리 대학교 블록체인 가속기 프로그램의 회원입니다.

체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
체인캐처 혁신가들과 함께하는 Web3 세상 구축