【Zypher Research】zk-Shuffle SDK:온체인 카드 게임의 가스 비용 최적화
简介
본 연구 기사는 우리가 최적화된 암호학(PlonK)을 통해 효율적이고 완전한 체인 상 셔플을 구현하는 방법을 설명합니다. 여기에는:
"Mental Poker"와 zk-shuffle이 게임 내 공정성을 보장합니다.
Zypher의 셔플 SDK가 그 비밀 엔진의 핵심 구성 요소로 작용합니다.
SNARK를 사용하여 "Reveal" 프로세스를 최적화합니다.
"부분" 저장소를 사용하여 "Shuffle" 프로세스를 최적화합니다.
Zypher가 곧 출시할 ZERO GAS Alpha Net은 셔플을 프리컴파일 계약으로 지원합니다.
Zypher Secret Engine이란?
말 그대로 Zypher Secret Engine은 "체인 상 프라이버시"를 보호합니다.
예측 가능한 게임 메커니즘으로 인해 과거에는 블록체인의 고유한 투명성이 전체 체인 전략 게임을 비현실적으로 만들었습니다.
Secret Engine은 암호화 계산의 안전한 실행을 지원하여 전략 요소의 "프라이버시"를 보장합니다. 사회적 속임수, 전쟁 안개, 셔플, 무작위성, 비밀 배치 등의 메커니즘이 이제 체인 상 게임에 통합되어 증명 가능성을 갖게 되었습니다.
현재 이 엔진은 두 개의 핵심 구성 요소를 제공합니다:
zk-Shuffle SDK
zk-Matchmaking SDK
Mental Poker/카드 게임의 체인 상 셔플
1979년, Rivest, Shamir, Adleman은 다음과 같은 도전을 제기했습니다: 신뢰할 수 있는 제3자가 없고 모든 참가자가 부정직하다고 가정할 때, 어떻게 인터넷에서 포커 게임의 공정성을 보장할 수 있을까요? 이 문제는 "Mental Poker"로 알려져 있습니다.
Mental Poker 게임에서 공정성을 보장하는 것은 매우 중요하며, zk-shuffle은 핵심 단계입니다. 그러나 셔플 시간은 사용자 경험에 상당한 영향을 미칩니다. Re-mask 작업은 타원 곡선 암호학을 포함하여 52장의 카드를 셔플하는 회로가 매우 커집니다. 회로의 크기를 줄이기 위해 우리는 PlonK 회로 게이트를 재설계하고 zk-shuffle 알고리즘을 기본 레이어(제약 시스템)에 통합했습니다.
실제로 zk-shuffle 외에도 우리는 체인 상 검증의 높은 가스 비용 문제에 직면해 있습니다. 본 문서는 가스 비용을 줄이기 위한 우리의 최적화 통찰력을 주로 논의할 것입니다.
최적화된 "Reveal" 프로세스
zk-shuffle은 두 가지 작업을 포함합니다:
1) 카드 교환,
2) 카드 재마스킹.
가정된 마스크 카드:
무작위 번호:
마스크 카드 C에서의 재마스크 작업은 다음과 같습니다:
여기서 G는 군 요소, 즉 Baby Jubjub이고, H는 집합 공개 키입니다.
위의 재마스크 작업을 완료한 후, 우리는 새로운 마스크 카드를 얻습니다:
실제로 얻은 마스크 카드의 마스크 인자는 다음과 같습니다:
따라서 카드를 공개하기 위해 각 플레이어는 자신의 마스크 인자를 제공해야 합니다. 또한, 이 섹션에서 논의되는 공개 방법은 마스크 인자를 제공할 필요가 없는 또 다른 방법입니다.
플레이어의 공개 키와 개인 키 쌍이 다음과 같다고 가정합니다:
카드를 공개할 때, 플레이어는 단순히 다음을 계산하면 됩니다:
카드를 공개하는 것은 단순한 점 곱 연산이지만, 플레이어가 정직하다는 것을 보장할 수 없으며, 플레이어가 실제로 공개 작업을 수행했는지 확인할 수 없습니다. 따라서 우리는 플레이어가 카드를 공개할 때 자신의 공개 행동을 증명할 수 있는 증거를 제공해야 합니다.
Geometry Research에서 구현한 Mental Poker 프로토콜에서는 Chaum Pedersen 프로토콜을 기반으로 공개 증명을 구축했습니다. 그러나 이 증명의 체인 상 검증 비용은 극히 비쌉니다. 주로 전체 Chaum Pedersen 프로토콜이 Baby Jubjub 곡선을 기반으로 하며, EVM은 현재 이를 프리컴파일 계약으로 지원하지 않기 때문입니다. 따라서 우리는 계약 내에서 점 덧셈 및 점 곱 연산을 네이티브로 구현해야 하며, 이는 GitHub에서 자세히 설명되어 있어 공개 증명의 검증 가스 비용이 매우 높아집니다. 공개 증명의 검증은 소량의 점 곱 및 덧셈 연산만 포함되지만, 테스트 결과에 따르면 네이티브 검증의 가스 비용은 7,629,888에 달하며, 이는 명백히 수용할 수 없습니다.
Baby Jubjub이 BN254의 내장 곡선이라는 점을 고려할 때, 우리는 SNARK를 사용하여 공개 증명을 수행할 수 있습니다. Groth16 검증 가스 비용에 따르면, Groth16을 사용한 공개 증명의 체인 상 검증은 약 200,000만 필요하며, 이는 네이티브 검증 방법보다 거의 30배 적습니다. 네이티브 검증 방법과 비교할 때, 이는 매우 좋은 선택으로 보입니다. 공개 카드 회로는 다음과 같습니다:
최적화된 "Shuffle" 프로세스
텍사스 홀덤 게임을 예로 들어 보겠습니다. 게임에서 우리는 "Shuffle"의 결과를 체인 상에 저장해야 합니다. 이는 현재의 Shuffle 결과 역할을 할 뿐만 아니라 후속 "Shuffle"의 공개 입력으로도 작용합니다. set deck 작업에서 보여지는 바와 같이, 초기 설정된 카드 덱은 기본적으로 초기 카드 덱을 저장합니다. 그러나 잘 알려진 바와 같이, 체인 상 저장 비용은 매우 비쌉니다, 특히 대량의 데이터에 대해. 52장의 카드로 구성된 덱은 총 208개의 uint256 유형 데이터를 포함하므로 저장 비용은 중요한 고려 사항이 됩니다.
우리의 해결책은 셔플 후 체인 상에 일부 데이터만 저장하는 것입니다. 구체적으로, 우리는 2n+5장의 카드만 저장하면 됩니다. 여기서 n은 플레이어 수입니다. 우리의 게임은 최대 6명의 플레이어를 지원하므로 최대 17장의 카드만 사용합니다. 이는 결국 17장의 카드만 체인 상에 저장하면 된다는 것을 의미합니다.
우리가 결국 체인 상에 17장의 카드만 저장하면 되지만, 앞서 언급한 체인 상 저장의 또 다른 목적은 이 카드들이 후속 셔플의 공개 입력으로도 사용된다는 것입니다. 따라서 17장의 카드만 저장하면 셔플의 정확성을 검증할 수 없습니다.
이 문제를 해결하기 위해 우리의 zk-shuffle 회로는 전체 카드 덱의 해시 값을 추가 출력으로 제공하여 체인 상에 저장합니다. zk-shuffle을 검증할 때, 사용자는 미리 셔플된 카드를 공개 입력으로 업로드하며, 회로는 사용자가 업로드한 카드의 해시 값을 계산하고 이를 체인 상에 저장된 해시 값과 비교합니다.
마지막으로, 체인 상에 일부 데이터만 저장되기 때문에 사용자는 전체 52장의 카드를 얻어야 할 수도 있습니다. 이를 위해 우리는 계약 이벤트를 사용할 수 있습니다. 이벤트는 사용자가 이벤트를 수신하여 전체 게임 데이터를 얻을 수 있도록 하는 매우 저렴한 통신 방법입니다.
결론적으로, 이번 최적화는 저장 비용을 효과적으로 줄였을 뿐만 아니라 게임의 공정성과 완전성을 보장합니다. 모든 관련 코드는 uzkge 저장소( GPLv3에 따라 오픈 소스된 Secret Engine의 초기 버전)에서 확인할 수 있습니다.
Zypher Alpha Net: 혁신적인 체인 상 카드 게임
Risc Zero 파트너 발표에서 강조된 바와 같이, ZACE 개발 팀은 Zypher의 zk-Shuffle SDK를 지원하여 공정한 체인 상 셔플을 위한 게임을 개발하고 있으며, Risc Zero zkVM은 증명 가능한 게임 로직을 위한 전체 체인 상 텍사스 홀덤 게임을 위해 현재 opBNB 테스트넷에서 게임 테스트 단계에 있습니다. 이는 지연 및 가스 비용을 명확히 최적화했습니다.
게임에 Web 2.0 경험을 더욱 제공하기 위해, 우리는 곧 Zytron Kit(Zytron One Pager)의 지원을 받는 Alpha Net을 출시할 예정입니다. Zytron Kit은 우리의 게임 전용 Sovereign Rollup Stack으로, 0 Gas, 0.2s Blocktime, 강화된 암호화 프리컴파일, Zypher 게임 엔진 등의 프리컴파일 계약을 갖추고 있습니다. Alpha Net은 Crypto Rumble, z2048, zAce 등 0 Gas를 지원하는 선구적인 전체 체인 게임을 출시할 예정입니다. 많은 기대 부탁드립니다!
Zypher Network에 대하여
Zypher Network는 주권 Layer 3 Rollups에서 ZK-as-a-service SDK에 이르는 차세대 자율 세계 인프라를 구축하고 있습니다. 우리의 기술은 탈중앙화 게임에 필요한 조합성, 프로그래밍 가능성, 확장성 및 암호학적 원리를 제공합니다. 이는 게임 개발자가 풍부하고 상호작용적인 체인 상 세계를 창조할 수 있는 능력을 부여하며, 확장성, 공정성 및 게임 전략의 복잡성을 강조합니다.