Joy Tokens은 블록체인 상에서 게임을 가능하게 해줍니다.

개요

Joy Gaming의 기술은 소규모 개발자, 개발사, 대형 카지노 및 플레이어들에게 새로운 솔루션을 제공합니다. 이는 플레이어에게 권위를 부여하고 개발자를 도우며 카지노의 위험을 줄이는 게임 생태계를 창출합니다.

온라인 도박 업계의 문제는 신뢰와 투명성의 부족입니다. 플레이어는 카지노의 브랜드와 신뢰도로 인해 더 흥미로운 게임을 제공하는 작은 사이트보다는 지연스럽게 유명한 카지노를 이용하게 됩니다. Joy Gaming의 기술은 투명한 블록체인 기반 시스템으로 게임 업계의 신뢰도를 높이는 것을 돕게 됩니다. Joy Gaming의 기술은 사용자가 투명하고 코드가 관리되는 환경에서 게임을 할 수 있도록 합니다. 이는 플레이어와 개발자가 게임의 공정성에 신뢰를 가질 수 있도록 합니다. 혁신적인 난수 생성기(RNG)를 통해 플레이어는 게임의 공정성과 안정성에 대해 안심할 수 있게 됩니다. 개발자, 카지노 및 비즈니스는 유동성 공유 및 공정한 보상으로 인해 혜택을 받을 수 있습니다. Joy Gaming는 개발자와 카지노를 연결함으로써 모든 참여자가 혜택을 볼 수 있는 최적의 솔루션을 목표로 하고 있습니다.

소개

기존의 게임 마켓플레이스

기존의 게임 생태계는 광고를 위주로 형성된 평판을 중심으로 대부분 움직입니다. 카지노는 플레이어를 유입하고 유지하기 위해서 브랜드 인지도를 통해 신뢰와 평판을 쌓을 목적으로 큰 금액을 지출합니다. 또한 대형 카지노들은 게임 개발을 통제하기도 합니다. 플레이어들은 투명성이 부족한 상황에서 카지노들을 신뢰할 수 밖에 없고 이는 플레이어들이 도박 내용을 추적할 수 없고 따라서 각 베팅의 타당성에 대해 알 수 없습니다.

소형 개발자들 또한 개발한 게임 수익의 극히 일부만 가져가게 되고 새로운 개임을 출시할 경우 즉시 발생하는 소득이 없고 대형 게임 플랫폼에 접근하지 못하는 어려움을 겪습니다.

Joy Gaming 솔루션

Joy Gaming의 솔루션은 블록체인 기반으로 개발자들이 직접 블록체인에 작업을 하는 것이 아니라 스마트 계약을 통해 백엔드를 운영하는 게임을 창출할 수 있게 합니다. 블록체인에 모두 기록하므로 사기가 발생하는 건수가 극히 적습니다. 그러므로 플레이어들은 개발자들이 블록체인에 설명한 그대로 운영하는지 확인할 수 있습니다. 또한 게임 개발자들 및 소프트웨어 개발사들은 가지노 등의 유동성 제공사들과 연결 및 통합하여 게임에 직접 액세스하는 기능을 제공합니다. 카지노와 개발자 모두 추가적인 수익과 게임 혁신의 성장을 통해 이익을 얻게 됩니다. 어떠한 사이트도 평판이 낮은 것을 블록체인에 게임의 규칙 및 인프라가 기록된다는 점과 Joy Gaming 네트워크에 게임이 출시되기 전 승인 시스템을 거친다는 점으로 상쇄할 수 있습니다.

기술

스마트 계약

Joy Gaming 네트워크는 분산화 스마트 계약을 사용해 블록체인에 모든 것을 기록하는 것을 보증합니다. 저희는 블록체인을 통해 Joy Gaming에서 발생하는 모든 것을 감사할 수 있게 됩니다. 게임을 하는 사용자들은 실시간으로 결과물과 네트워크의 보상금을 볼 수 있습니다. 전통적인 카지노에서 보증금을 카지노 계좌에 유치하는 것과는 달리 사용자들은 JoyToken 지갑에 대한 통제권을 항상 가지고 있으며 출금 또한 간단하고 빠르게 진행됩니다.

저희 플랫폼은 이더리움 네트워크를 블록체인 기반 생태계로 사용합니다. 이더리움 네트워크는 커뮤니티 내에서 잘 인식되어 알려지고 사용되고 있으며 Turing 언어 사용이 가능합니다. 지연 문제가 있으나 이 문제를 획기적으로 줄일 수 있는 분산화 솔루션의 타협안에 대한 제안을 아래에서 보실 수 있습니다.

자율 에이전트(스마트 계약 등)의 사용은 갬블러와 플랫폼 사이의 어떠한 이해 분쟁도 분산화된 시스템을 통해 관리 및 감사되어 시스팀 내에서 신뢰를 쌓게 됩니다. 모든 거래가 스마트 계약을 통해 진행되며 이는 누구에게나 언제나 액세스를 보장하고 게임의 공정성을 인증하므로 제 3자의 개입이 필요하지 않습니다.

Joy Gaming 기술 스택

저희의 기술 스택은 블록체인층, 게임 애플리케이션(백엔드/프론트엔드) 및 난수 생성기(RNG, Random Number Generator)의 세 가자 주요 요소로 구성되어 있습니다. 게임의 백엔드/프론트엔드는 데이터베이스 상에서 운영되나, 플레이어와 플랫폼 상의 분쟁을 일으킬 수 있는 모든 부분은 스마트 계약을 사용하는 블록체인 상에서 분산화 및 감사를 진행합니다.

위의 그림은 승인된 게잉 애플리케이션과 Joy Gaming 난수 생성기 간의 소통을 보여줍니다.

블록체인층

블록체인층은 토큰 관리, 게임 결과 관리 및 난수 생성기에 대한 감사 등 세 가지 기능이 있습니다.

토큰 관리

전통적인 온라인 카지노에서는 고객이 카지노에 돈을 송금해야 게임을 할 수 있습니다. 이는 사기의 위험을 발생시킵니다. Joy Gaming은 블록체인 기술을 사용해 이 문제를 해결합니다. 모든 플레이어의 자금은 개인 플레이어의 JoyToken 지갑에 각자 저장됩니다. 플레이어가 베팅을 하면 금액은 스마트 계약으로 보내져 베팅의 결과가 분산화 방식으로 관리됩니다. 블록체인을 사용하는 것은 카지노(Joy Gaming 플랫폼 등)에서는 플레이어의 돈에 아무 통제권이 없다는 것을 말합니다.

이는 다음으로 요약될 수 있습니다.

게임 결과 관리

각 플레이어의 내기에 스마트 계약을 사용합니다. 스마트 계약은 게임 코드, 난수 생성기, 게임 인풋 등 시스템의 모든 부분에서 제공되는 정보를 관리합니다. 스마트 계약은 게임의 결과를 확인하고 계약의 규칙에 따라 자동으로 적절한 사람에게 펀드를 배분합니다.

플레이어 A가 룰렛에 베팅을 하는 경우를 예로 들어보겠습니다.

  1. 자금은 자동으로 룰렛 계약으로 보내집니다.
  2. 를렛에서 생성된 난수가 스마트 계약에 복사 및 기록됩니다. (주의사항: 난수 생성 및 게임 기록 등 게임에서 중요한 사항이 발생하면 모두 스마트 계약에 저장됩니다.)
  3. 게임 코드는 생성된 난수를 사용하여 결과를 스마트 계약으로 보냅니다.
  4. 우승자는 자동으로 인정됩니다. 플레이어가 지는 경우 금액은 개발자와 플랫폼 관리팀으로 나누어 분배됩니다. 분배율은 개발 시기에 협의되고 플레이어가 지는 경우 자동으로 적용됩니다.
  5. 마지막으로 플레이어는 프로세스를 새로 시작하여 계속 게임을 하거나 게임을 끝내는 것을 결정할 수 있습니다.

네트워크에 게임을 최초 등록하기 위한 데모 코드

아래의 코드는 Joy Gaming 네트워크에 게임을 등록하는 것을 보여줍니다. 등록은 모두 이더리움 네트워크를 통해 이루어지므로 참여자는 계약이 네트워크에서 공식적으로 승인되었는지 쉽게 확인할 수 있습니다. 이 데모를 통해 게임이 Joy Gaming 네트워크 상에 등록되는 GameRegistry() 기능을 통해 등록을 불러울 수 있음을 볼 수 있습니다. (주의사항: setPlatformShare(uint256 newShare) 를 통해 개발자에게 돌아가는 금액을 명시할 수 있습니다.)

    contract GameRegistry is Ownable {
        using SafeMath for uint256;
        address public tokenAddress;
        address[] public gameList;
        uint256 public decimals = 5;
        uint256 public platformShare = 5 * 10**(decimals.sub(2));
        address public controller;
        mapping(address => bool) public gameRegistered;
        event ControllerTransfer(address originalController, address currentController);
        event PlatformShareUpdate(uint256 originalShare, uint256 newShare);
        event GameRegistered(address game);
        event GameDelisted(address game);


        function GameRegistry(address _tokenAddress) {
            owner = msg.sender;
            controller = owner;
            tokenAddress = _tokenAddress;
        }

        function setController(address newController) public onlyOwner {
            require(newController != address(0) && newController != controller);
            ControllerTransfer(controller, newController);
            controller = newController;
        }

        function setPlatformShare(uint256 newShare) public onlyOwner {
            require(newShare < 10**decimals);
            PlatformShareUpdate(platformShare, newShare);
            platformShare = newShare;
        }

        function createGame(string _name, uint256 _payoutRate) public {
            address newGame = new Game(_name, msg.sender, this, tokenAddress, payoutRate);
            require(!gameRegistered[newGame]);
            gameList.push(newGame);
            gameRegistered[newGame] = true;
            GameRegistered(newGame);
        }

        function delistGame(address game) public onlyOwner {
            require(gameRegistered[game]);
            gameRegistered[game] = false;
            GameDelisted(game);
        }

        function registerGame(address game) public onlyOwner {
            Game g = Game(game);
            require(!gameRegistered[game]);
            gameRegistered[game] = true;
            gameList.push(game);
            GameRegistered(game);
        }

        function getGameRegistered(address game) public constant returns (bool registered) {
            return gameRegistered[game];
        }
    }
    

난수 생성기(RNG) 감사가능성

RNG의 검증 가능성은 게임 업계의 중요한 부분입니다. 난수 생성되는 전통적으로는 게임을 주최하는 회사에 의해 관리됩니다. 그러나 저희의 경우, 모든 게임이 이더하는 네트워크 스마트 계약에 연결된 난수생성기에 의존하는 맞춤 개발된 알고리즘 상에 운영되므로 이는 분산화되고 명백히 공정합니다. 이는 마무리 단계 및 지불 과정에 더 자세히 설명되어 있습니다.

개임 애플리케이션(백엔드 및 프론트엔드 관리)

게임 애플리케이션 코드는 저희의 서버 혹은 IPFS/Sia/Storj 네트워크를 통해 호스팅합니다. 게임 결과는 스마트 계약으로 송신됩니다. 그 후 게임 서버는 게임 상태를 IPC를 통해 JSON RPC를 사용하여 블록체인에 제공합니다. 사용자 경험은 모든 게임의 결과가 즉시 접근 가능하므로 블록체인의 사용량 및 유효성에 영향을 받지 않습니다. 이 기능은 사용자 경험이 전통적인 게임 방식과 근접한 가운데 모든 과정이 투명하고 분산화되도록 합니다. 모든 게임 코드와 생성된 난수에 대한 감사가능성은 블록체인 상에서 접근할 수 있습니다.

불록체인 정보를 기반으로한 무작위성

중요한 점은 블록체인을 기반으로 저희의 게임을 활용할 수 있는 분산화된 난수생성 기술을 찾는 것입니다. 현재의 솔루션은 블록 생성 정보(타임스탬프, 임시값, 현재 블록의 해시 등)를 난수를 생성하기 위해 사용합니다. 마이너들이 숫자를 생성했더라도 공개 경쟁 환경에서(약 14초 동안) 다음과 같이 블록을 여러 번 캘 수 있는 마이닝 능력을 보유하고 있지 않는 한 마이너가 이더리움 공개 네트워크 상에서 개임의 결과를 성공적으로 바꿀 수 없습니다.

  1. 마이너는 공개 이더리움 불록체인 환경의 마이닝 과정에서 경쟁합니다.
  2. 마이너는 입시값을 찾고 보상금을 받을 수 있게 됩니다.
  3. 마이너는 임시값 및 생성된 블록 정보가 게임 승리 요건에 맞는지 확인합니다.
  4. 대등한 경우 결과를 덧붙입니다.
  5. 그렇지 않은 경우 마이너는 마이닝 과정을 다시 시작하여 잘 맞는 다른 임시값을 찾고 이 전의 마이닝에 대한 보상은 잊게 됩니다.

이 방법이 굉장히 안정적일 수 있지만 저희는 어떤 조종의 가능성도 용납하지 않는 모델을 찾고 있었으므로 이를 채택하지 않았습니다.

RANDAO(완전히 분산화된 난수를 생성하는 분산화 및 자동화된 조직)는 굉장히 흥미로운 가능성이 있으나 현재 구현할 만큼 성숙하지 않습니다. Joy Gaming은 완전히 분산화된 난수 개발을 지원하고 RANDAO는 성숙하고 안정적인 경우 저희의 개발 계획과 잘 맞아떨어지므로 연구하는데 시간을 투자할 것입니다.

분산화된 난수 생성의 애자일 접근법

난수 생성기는 다음의 어려움을 해결해야 합니다.

제안된 솔루션

숫자의 무작위성은 가짜 무작위 숫자 배열을 생성하는 혼합식 생성기 알고리즘에서 나오며, 플랫폼 상에서의 플레이어의 움직임, 외환 및 가상화폐 환전 데이터 등 외부 세계에서 가져온 데이터 입력값을 추가함으로써 바꿀 수 있습니다. 이 데이터세트는 예상 밖의 행동을 포함하고 항상 접근 가능하기 때문에 사용합니다. 이 솔루션은 모든 난수를 짧은 시간 내에 사용자 경험에 영향을 주지 않고 제공할 수 있어 라이센스 조건에 부합합니다. 우리의 난수 생성기 모델을 강화하기 위해 거래에서 각 숫자를 마이닝하는 것을 통해 블록체인을 이용한 이중 인증을 개시합니다. 그러면 Joy Gaming에서 숫자를 어떠한 방법으로도 통제하는 것이 불가능해집니다.

Joytoken 기술

게임 운영

생태계 혜택 및 구조

블록체인 상에 운영함으로써 사용자는 자금이 어디로 가는지 그리고 결과가 공정하게 생성되었는지 파악할 수 있습니다. 사용자 경험은 저희의 최고 우선순위로 저희는 다양한 종류의 게임, 강력한 보안 및 안정성을 제공합니다. 사용자 경험이 저희의 최우선 과제이며 다양한 게임, 강력한 보안 및 안정성을 제공할 것입니다.

사용자 혜택 외에도 개발자들은 대형 유동성 출자금 및 Joy Gaming 네트워크에서 운영하면서 발생하는 추가적인 평판을 통해 혜택을 받을 수 있습니다. 블록체인 상에 존재하고 투명하므로 개발자들은 사용자들이 하는 게임을 쉽게 증명할 수 있습니다. 개발자들은 카지노에 연결해 진행되고 있는 게임에 대해 수수료를 부과하고 강력한 감사 추적을 활용할 수 있습니다. 개발자들은 게임 업계에 있어 핵심적입니다. Joy Gaming에서는 개발자들을 이해하고 있으며 공정한 보상, 마케팅 과정에 대한 완전한 지원 및 더 많은 플레이어 등을 통해 개발자들에게 가장 좋은 경험을 제공하려 노력합니다.

Joy Gaming은 게임이 성공할 수 있도록 Joy Gaming 생태계 내 개발자들에게 지원을 제공합니다.

다음에 대해 개발자들에게 지원합니다.
개발자들은 개임 개발에만 집중하고 Joytoken이 다른 모든 것을 해결합니다.

블록체인 상에서 균형 찾기

사용자 경험은 온라인 갬블링을 착수하는에 있어 매우 중요합니다. Joy Gamingはゲームエクスペリエンスにおけるのスピードと、オンラインギャンブル業界でのブロックチェーン使用に伴う分散化との間において、正しいバランスを見つけるために努めてきました。

現在の状況でイーサリアムが直面している潜在的な課題

イーサリアムブロックチェーンは、14秒ごとにプルーフ・オブ・ワークのマイニングプロセスが発生するため、迅速にデータ処理をするための最適なシステムではありません。 Joy Gaming은 온라인 갬블링 업계에서 블록체인을 사용할 때 딸려오는 게임 경험의 속도와 분산화 사이의 적정한 균형을 찾으려 노력했습니다. 그러므로 난수 생성기부터 본 게임에 이르기까지 매 요소에서 완전히 분산화된 시스템은 시간 지연이 크며 플레이어들은 게임 결과를 받아보는데 짧은 시간도 기다리고 싶어하지 않으므로 가장 좋은 솔루션이 되지 못합니다. 더 나아가 스마트 계약이 대량의 데이터를 관리하고 비선형적 로직을 처리하는 것은 비용이 비쌉니다.

GAS 가격

이더리움은 사기꾼이 대량의 계약을 생성하여 공개 네트워크의 효율성에 영향을 미치는 '디도스 공격' 등을 피하기 위해 GAS 가격을 도입했습니다. 이렇게 하면 GAS 가격은 자주 바뀌어 스마트 계약 수요를 정확하게 사용하는 것을 겨냥할 수 있습니다.

요약

joy Gaming 플랫폼은 최적의 플레이어 경험을 제공하기 위해 속도와 분산화 간의 현실적인 균형을 찾았습니다. 플랫폼에 상주하는 게임은 모두 다음의 분산화 요건을 충족시키게 됩니다.

모든 게임이 서로 다른 개발자에 의해 제공되지만 Joy Gaming 팀이 개발자가 속도 및 분산화 요건을 준수하는지 확인하는 게임 수락 과정(6.5 보기)이 있게 됩니다. 위의 요건을 준수하지 않는 게임은 플랫폼에 등록될 수 없습니다. 저희는 Joy Gaming이 인증한 플레이어만 플랫폼을 사용할 수 있도록 하여 공정한 게임과 법률 준수의 수준을 높이는 KYC 과정을 추가할 수도 있습니다.

블록체인 통합 아키텍처 및 시나리오

앞에서 설명한대로 모든 게임의 기술적인 기능들이 블록체인 사용으로 인한 지연을 최소화하고 블록체인의 분산화를 활용하는 두 요건을 만족해야 합니다.

다음의 전체 게임 아키텍처는 보안, 분산화 및 속도에 있어서 Joy Gaming 플랫폼 요건을 충족합니다. 다음의 네 가지 주요 요소가 있습니다.

프로세스는 다음의 몇 단계로 나누어집니다.

로딩 단계

저희는 블록체인으로 인한 지연을 최소화하고 사용자 경험이에 영향을 미치기 위해 로딩 단계에서 각 베팅에 대한 인증 거래 시간을 줄이는 것을 목표료 합니다.

이 요건을 만족시키이 위해 사용자는 게임이 로딩되고 연동되는 동안 선택된 게임 스마트 계약으로 송금하기를 요청받게 됩니다.

이 과정은 게임을 로딩하고 블록체인 스마트 계약을 설정하는데 15초 정도가 필요합니다. 프로세스는 사용자가 KYC 프로세스를 통해 확인하고 인증하는 경우에만 허용됩니다. 인증되지 않은 플레이어는 스마트 계약으로 송금할 수 없으며 에러 메시지를 통해 KYC 프로세스에 대해 안내를 받습니다. (더 자세한 사항은 Section 15에서 찾을 수 있음)

게임 착수 프로세스

스마트 계약으로 이동한 코인의 양은 WS(지갑 서버)에 고객의 지갑에서의 초기값 그대로 생성됩니다. GS(게임 서버)는 캐시와 유사한 시스템이며 플랫폼 활동자(개발자, 플랫폼, 클라이언트) 의 금액의 가치가 게임의 결과에 따라 오르거나 내립니다.

각 클라이언트의 내기는 GS(게임 서버) 에 전송되며 결과를 결정합니다.

  1. 지값 서버는 일시 지갑을 설정합니다. 클라이언트 지갑의 금액은 로딩 기간 내에 투자한 것입니다. 클라이언트의 지갑에 할당된 초기 금액이 로딩 단계 시에 클라이언트에게 투자된 돈인지 스마트 계약을 이중으로 확인합니다.
  2. 사용자가 내기를 걸고룰렛 게임의 붉은 색에 JoyToken 5개를 베팅)
  3. 베팅은 GS에 송신되며 RNG를 통해 처리되고 이는 블록체인 내에서 감사가 진행됩니다. 게임의 결과에 따라 클라이언트, 플랫폼 및 개발자의 WS의 지갑이 업데이트됩니다.
  4. 이 프로세스는 사용자에게 충분한 금액이 있고 계속 게임을 하려고 하는 한 반복됩니다.

네트워크 상의 진행 중인 게임을 위한 스마트 계약 데모

    function Game(string _name, address _owner, address _registryAddress, address _ tokenAddress, uint256 _payoutRate) {
            name = _name;
            owner = _owner;
            registryAddress = _registryAddress;
            registry = GameRegistry(registryAddress);
            tokenAddress = _tokenAddress;
            token = ERC20(tokenAddress);
            payoutRate = _payoutRate;
            isActive = true;
            decimals = registry.decimals();
        }
        function activate() public onlyOwner {
            isActive = true;
            GameActivated();
        }

        function deactivate() public onlyOwner {
            isActive = false;
            GameDeactivated();
        }

        function ownerDeposit(uint256 amount) public onlyOwner {
            require(amount > 0);
            require(token.transferFrom(owner, this, amount));
            ownerAvailableDeposit.add(amount);
        }

        function ownerWithdraw(uint256 amount) public onlyOwner {
            require(amount > 0 && amount <= ownerAvailableDeposit);
            ownerAvailableDeposit.sub(amount);
            require(token.transfer(owner, amount));
        }

        function playerJoin(uint256 initialDeposit) public whenActive {
            require(!playerInGame[msg.sender]);
            uint256 potentialPayout = getPayout(initialDeposit);
            require(potentialPayout.sub(initialDeposit) <= ownerAvailableDeposit);
            ownerAvailableDeposit = ownerAvailableDeposit.sub(potentialPayou sub(initialDeposit ));
            playerInGame[msg.sender] = true;

            if (initialDeposit > 0){
                playerCurrentGameDeposits[msg.sender] = initialDeposit;
                require(token.transferFrom(msg.sender, this, initialDeposit));
            }
            PlayerJoined(msg.sender);
        }

        function announceResult(address player, uint result) public onlyController {
            require(playerInGame[player]);
            require(result <= uint(GameResult.draw));
            playerInGame[player] = false;
            GameResult gameResult = GameResult(result);
            if (gameResult == GameResult.win) {
                require(resolvePlayerWin(player));
            } else if (gameResult == GameResult.loss) {
                require(resolvePlayerLoss(player));
            } else {
                require(resolveDraw(player));
            }
            GameResultAnnounced(player, result);
        }

        function resolvePlayerWin(address player) private returns (bool success) {
            uint256 payout = getPayout(playerCurrentGameDeposits[player]);
            playerCurrentGameDeposits[player] = 0;
            if (payout > 0)
                playerDeposits[player] = playerDeposits[player].add(payout);
            return true;
        }

        function resolvePlayerLoss(address player) private returns (bool success) {
            uint256 playerDeposit = playerCurrentGameDeposits[player];
            playerCurrentGameDeposits[player] = 0;
            uint256 payout = getPayout(playerDeposit);
            uint256 platformShare = playerDeposit.mul(registry.platformShare()).div(10**registry.decimals());
            require(platformShare < playerDeposit);
            if (platformShare > 0)
                platformDeposit = platformDeposit.add(platformShare);
            uint256 profit = playerDeposit.sub(platformShare);
            ownerAvailableDeposit = ownerAvailableDeposit.add(payout.sub(playerDeposit)).add(profit);
            return true;
        }

        function resolveDraw(address player) private returns (bool success) {
            uint256 playerDeposit = playerCurrentGameDeposits[player];
            playerCurrentGameDeposits[player] = 0;
            uint256 payout = getPayout(playerDeposit);
            if (playerDeposit > 0)
                playerDeposits[player] = playerDeposits[player].add(playerDeposit);
            ownerAvailableDeposit = ownerAvailableDeposit.add(payout.sub(playerDeposit));
            return true;
        }

        function playerWithdraw(uint256 amount) public {
            require(amount > 0 && amount <= playerDeposits[msg.sender]);
            playerDeposits[msg.sender] = playerDeposits[msg.sender].sub(amount);
            require(token.transfer(msg.sender, amount));
        }

        function platformWithdraw(uint256 amount) public {
            require(msg.sender == registry.owner());
            require(amount > 0 && amount <= platformDeposit);
            platformDeposit = platformDeposit.sub(amount);
            require(token.transfer(msg.sender, amount));
        }

        function getPayout(uint256 deposit) private constant returns (uint256 payout) {
            return deposit.mul(payoutRate).div(10**decimals);
        }
    }
    

Wrapping Phase and Pay-out Process

The user is able to stop the game session and start the wrapping phase at any time using a straightforward process facilitated by the friendly game front- end. The wrapping process consists of:

  1. 사요자의 정지 요청이 GS나 WS로 들어갑니다.
  2. GS는 세션의 기록을 생성하고 파일 해싱이 진행됩니다.
  3. WS에 마지막 업데이트된 부분과 해시가 스마트 계약으로 전송됩니다.
  4. 전송된 정보에 따라 스마트 계약의 상태가 블록체인 상에서 변경되고 지불을 처리합니다.

게임 수락 과정

저희의 접근법이 많은 개발자와 게임 제의의 유입을 늘릴 것으로 믿고 있습니다.

게임 접근 프로세스를 효과적으로 플랫폼에 연관되도록 만들기 위해 새로운 게임 제의는 다음과 같이 처리됩니다.

  1. 코드 감사: 저희의 전문가가 저희의 보안 및 법적 요구사항에 적합한지 확인합니다.
  2. 다양한 측정 단위를 기반으로 테스팅을 진행: 시간, 보안, 비용, 블록체인 통합, 사용자 경험 등. 1단계 및 2단계의 결과가 성공적인 경우, 제안된 게임은 다음과 같은 통합 과정을 거칩니다.
  3. 스마트 계약 개발
  4. 개발된 스마트 계약에 대한 테스트 및 보안 감사
  5. 플랫폼에 게임 런칭

게임이 Joy Gaming 네트워크에 등록되면 시스템 내부에서 모든 것이 통합됩니다. 개발자가 추가적인 유동성을 요청하면 쉽게 게임을 제공하는데 참여하고자 하는카지노 집단에 접속할 수 있습니다. 다른 기술적인 문제가 있는 경우 저희 팀이 빠른 해결책을 찾도록 개발자를 지원합니다.

스마트 계약 지불 예시

    uint256 playerDeposit = playerDeposits[player];
        playerDeposits[player] = 0;
        uint256 payout = getPayout(playerDeposit);
        uint256 platformShare = playerDeposit.mul(registry.platformShare()).div(10**registry.decimals());
        require(platformShare < playerDeposit);
        if (platformShare > 0)
            require(token.transfer(registry.owner(), platformShare));
        uint256 profit = playerDeposit.sub(platformShare);
        ownerAvailableDeposit = ownerAvailableDeposit.add(payout.sub(playerDeposit )).add(profit );
        return true;
    

개발자는 계약 내에서 게임을 운영함으로서 생기는 이익의 일부를 선택 및 수령할 수 있습니다. 이는 platformShare 변수에 잘 나와있습니다. 카지노에서 각 게임을 운영하고 나면 개발자는 수익의 작은 부분을 받게 됩니다. 이는 모두 스마트 계약 내에 인코딩되어 게임을 진행하고 지불할 때까지 기다리는 시간이 없도록 합니다.

블록체인 통합 프로세스 예시: Icy Cash Splash

Joytoken의 기능과 구현성을 보여주기 위해 예시 코드가 이 백서에 포함되어 있으나 저희의 공식 저장소에 아래의 Github 링크를 통해 접속할 수 있습니다. https://github.com/JoyPlatform/joy-contracts. 저희의 접근법에 대해 개발자의 시각에서 전체적인 가시성과 이해를 제공하기 위해 코드에 주석을 달게 됩니다. 질문이 있으신 경우 저희 팀에 언제든지 연락주시기 바랍니다.

이더리움 이상의 블록체인 기술

이더리움은 속도 및 확장성의 문제로 인해 아직 게임 기술을 위한 준비가 되어있지 않습니다. 이 부분에서는 저희의 계획에 가치를 부여할 수 있고 저희 개발 계획에 통합될 수 있는 두 가지의 기술을 보여드리겠습니다.

IOTA: DAGs(Directed acyclic graphs)을 활용한 분산화

IOTA는 새로운 혁신적인 분산화 접근법입니다. 이는 블록체인 생태계라기 보다는 Tangle의 개념을 소개합니다. Tangle은 블록 없는 블록체인으로 합의 과정을 시스템의 고유한 부분으로 만듭니다. Tangle은 블록 없는 블록체인으로 합의 과정을 시스템의 고유한 부분으로 만듭니다.


이 혁명은 갬블링 업게의 판도를 바꾸는 기능을 소개합니다.

갬블링 사업의 부정적인 점은 거래 인증에 걸리는 시간입니다. 그러나 사용자가 본인의 거래를 인증하려면 다른 두 거래 인증에 참여해야 하므로 거래 시간은 실제 참여자에 영향을 받습니다. 사용자의 수가 많을수록 현재는 2~3분 정도 소요되는 거래 시간을 줄이게 됩니다. IOTA 네트워크는 아직 베타 버전에 있으며 무료 거래 기능은 더 많은 숫자의 사용자를 유입하고 따라서 거래 인증 시간을 해결할 것입니다. 생태계는 무한한 가능성을 가지고 있으며, 개발 계획을 따라 테스트용 게임이 곧 통합되기를 기대하고 있습니다. [1]

저장소 및 호스팅 분산화

블록체인 기술이 데이터를 저장하도록 만들어진 것이 아니므로 분산화된 저장소는 오픈 마켓입니다. Sia[2], IPFS[2], 및 Storj[3]가 이 시장의 주요 경쟁자입니다. 이 아이디어는 사용자들이 데이터를 저장하거나 분산화 환경에서 관리되는 남는 저장 공간을 임대하도록 하는 것입니다.

예를 들어 많은 사람들에게는 사용하지 않는 저장 공간이 있습니다. 위에 언급된 경쟁자들은 하드 드라이브를 임대하고 보상을 받고자 하는 사용자를 위한 높은 수준의 네트워크 네트워크의 보안을 통해 데이터를 저장하는 것을 제안합니다. 사용자가 1GB의 문서를 저장하려는 경우, 문서는 작은 조각으로 나눠지며 각 조각은 암호화됩니다. 그러면 이 암호화된 조각들은 복제되어 사용자의 하드 드라이브에 분산되어 저장됩니다.

모든 참여자에 속하는 모든 암호화된 조각을 찾는 것은 사실상 불가능하므로 이 모델의 힘은 파일에 액세스하는 유일한 방법은 문서 소유자의 개인키를 소장하는 것입니다. 이는 강력한 보안을 합리적인 가격에 제공하고 일반적인 중앙 시스템에 비해 약간 비쌀 뿐입니다. 이 기술은 모든 것이 임대인과 사용자 사이에 가상화폐 지불을 통해 관리되므로 어떠한 사용자의 컴퓨터에 있는 굉장히 민감한 데이터도 저장할 수 있다는 점입니다.

11.3에 보여지듯이 저희는 클라이언트의 게임 세션의 해시를 블록체인 환경에 저장하여 사용자 여정에 대한 완전한 추정이 가능하게 됩니다. 분산화된 저장소를 사용하는 것은 시스템이 더이상 실패할 구심점이 없게 하므로 기록에 대한 보안 및 강력한 안정성을 제공합니다.

Joy Gaming은 추가적인 개발 시에 잠재적인 통합에 대해 이 솔루션을 사용하는 것을 살펴보고 있습니다.

제휴 계약

새로운 카지노 운영은 플레이어의 유동성에 문제가 종종 발생합니다. 또한 대형 제휴사들은 커뮤니케이션 및 플레이어의 사용자 유지 문제로 작은 스타트업의 게임을 활용하고 싶어하지 않습니다. 따라서 대형 제휴사들은 소형 개발사들이 거래 기록을 가지고 있지 않는 한 그들과 상대하기를 망설입니다. 이러한 소형 개발사들은 실시간이 아닌 기간별로 지불을 받으므로 현금 문제가 종종 발생합니다. Joy Gaiming은 '게임당 지불 모델'로 이 문제를 쉽게 해결합니다. 매번 고객이 게임을 할 때마다 게임의 각 참여자에게 지불이 됩니다. 이는 피드백 회로를 작게 만들어 개발자들이 새롭고 혁신적인 운영을 하도록 돕고 애자일 생태계를 가능하게 합니다.

ICO, KYC 관리 및 요건

법적 준수를 만족하기 위해 각 투자 건을 투자자와 연계시켜야 합니다. 모든 참여자들은 얼마를 투자했건 기본적인 인증 과정을 거치게 되며 이는 여권 사본을 포함합니다. 이 고정은 신뢰성있는 KYC 관리 회사인 JUMIO에서 관리합니다.

게임 액세스, KYC 관리 및 요건

규제 기관에 따르기 위해 KYC를 구현합니다. 이러한 경우 게임에 액세스하기 위해 모든 클라이언트는 KYC 과정을 성공적으로 마쳐야합니다. KYC 확인을 성공적으로 하고 나면 고객 지갑의 공개키가 시스템에 추가됩니다. 클라이언트의 공개키가 추가되고 나면 클라이언트는 저희 생태계를 사용할 수 있습니다. 그러면 플레이어는 자신의 상태를 보고 공개 블록체인에 있는 게임 기록을 확인할 수 있습니다.

사례 연구

소프트웨어 개발사

Avent는 소프트웨어 개발사로 온라인 갬블링 게임을 만듭니다. 그들은 업계를 바꿀만한 멋진 아이디어를 가지고 있습니다. 그러나 카지노는 Avent의 시장이 파악되지 않았으므로 Avent를 고용하려 하지 않습니다. Avent는 고유의 사설 게임을 운영할 수 있으나 여기에는 다양한 문제가 있습니다. 첫째, Avent는 사설 게임을 제공할만한 자금이 없습니다. 둘째, 사용자들은 잘 알지 못하는 회사를 신뢰하기를 주저합니다. 더불어 사용자들은 제3자에게 신용카드 정보를 주어 그들의 자금에 접근하도록 하는 것을 불편해합니다. 이는 Avent가 그들의 혁신적인 갬블링 게임을 통해 수익을 창출하기가 어렵도록 만듭니다.

Joy Gaming은 이 문제를 두 가지 방법으로 해결합니다. 첫쨰, Avent가 Joy Gaming 네트워크에서 게임을 운영하면 많은 유동성 제공사(카지노 등)에 노출되고 이는 유동성 문제를 해결해줍니다. 둘째, 스마트 계약의 투명성과 번복 불가능성 및 난수생성기 알고리즘은 잠재적인 사용자에게 Avent 게임이 공정하다는 것을 확인시켜줍니다. 마지막으로 모든 거래가 사용자의 지갑에서 직접 진행되므로 모든 자금에 항상 접근 가능하고, 따라서 Avent를 사용해볼 의향이 더 생길 수 있습니다. Aventは、以前より多くの顧客にアピールでき、次の革新的ゲームを開発することに時間を費やすことができます。

ユーザー

ユーザーは、様々なカジノやゲームルーム間を常にブラウズし続けなければならないことに辟易しています。これによって、多数のサード・パーティーを信頼しなければならない状況が作りだされています。 Joy Gaming은 모든 거래가 가시적이고, 규칙이 블록체인 상에서 번복 불가능하도록 만들며 개발자를 인증합니다. 따라서 사용자들은 Joy Gaming 네트워크 상에서 게임이 인증되고 안전하다는 확신과 함께 게임을 할 수 있습니다. 게임을 시작할때까지 사용자의 지갑에서 어떠한 자금도 빠져나가지 않으므로 사용자들은 자금이 안전하다고 확신할 수 있습니다.

카지노

카지노는 항상 새로운 고객을 유입하고 게임의 품질을 높일 방법을 찾고 있습니다. 카지노는 게임을 독립적으로 운영할 전문성, 자금 및 유동성을 갖고 있습니다. 그러나 새로운 게임은 대중들에게 잘 받아들여지지 않는 경우가 종종 있으므로 카지노는 아무 게임이나 단순하게 추가할 수가 없습니다. Joy Gaming 네트워크가 솔루션을 제공합니다. 개발자가 새롭고 흥미로우며 실험적인 개임을 만들면 카지노와 직접 계약을 맺을 수 있습니다. 이러한 경우 카지노는 스마트 계약 상에서 유동성 제공자가 되며 사용자가 게임을 할 때마다 개발자에게 수수료를 지불합니다. 이는 모두에게 유리한 상황을 만들어줍니다.

토큰 판매

토큰

JoyTokens은 이더리움 네트워크 상에서 ERC20 토큰으로 구매할 수 있습니다. ERC20의 문제점은 토큰을 스마트 계약으로 보내면 '확인 및 전송 문서' 기능을 사용해야 한다는 것입니다. 그러나 토큰을 외부의 주소로 보내면 '전송' 기능을 사용해야 합니다. 안타깝게도 이러한 기능을 사용할 때 실수를 하는 경우 금액을 그대로 상실하게 됩니다.


ERC20 토큰 인터페이스를 위한 코드 샘플
    contract ERC20 is ERC20Basic {
      function allowance(address owner, address spender) public constant returns (uint256);
      function transferFrom(address from, address to, uint256 value) public returns (bool);
      function approve(address spender, uint256 value) public returns (bool);
      event Approval(address indexed owner, address indexed spender, uint256 value);
    }
    

저희는 이러한 문제점을 잘 알고 있으며 저희 고객에게 이러한 일이 일어나지 않도록 할 것입니다. 저희는 새로운 ERC223의 개발이 마무리 되면 ERC223 표준으로 업그레이드할 계획입니다. ERC223은 위의 사례에서 설명한 경우에 금액을 클라이언트에게 자동으로 되돌려주는 새로운 기능이 있습니다.

유틸리티

JoyToken은 다양한 사용 사례가 있습니다. 가장 기본적으로 JoyToken은 Joy Gaming 네트워크 상에서 플레이어가 게임을 할 때 사용할 수 있습니다. 네트워크는 마찰 없는 보상 시스템을 제공하고, 지불을 보장하며, 다른 방법으로는 힘든 제휴 관계를 만들고, 잠재적인 사기 가능성을 없애며 지불 수수료를 줄입니다.

카지노와 게임 개발자들은 게임을 운영하고 플레이어들에게 지불 받을 시에 지불을 보장하는데 토큰을 사용할 있습니다. 카지노는 모든 개발자자에게 실시간 제휴 지불을 보장할 수 있게 됨으로써 현재에는 대형 브랜드에서만 가능한 수준의 높은 제휴 거래를 새로운 카지노 운영사와 성사할 수 있습니다.

대형 카지노사가 게임을 지원하도록 의존하는 작은 개발사들은 토큰을 사용하여 평판과 자금을 제공하는 카지노로부터 수수료를 받을 수 있습니다.

번복이 불가능한 스마트 계약과 토큰을 통해 네트워크에서 사기를 근절하고 보안을 강화합니다.

전체적으로 토큰은 사용자들이 Joy Gaming 네트워크 상에 서비스에 대해 얼마를 지불할 의향이 있느냐에 따라 가치가 결정됩니다.

토큰 판매 구조

사용 가능 가상화폐:ETH, BTC, 송금

최대 목표량:JoyToken 판매의 최대 목표량은 미화 46,340,000불입니다.

최소 목표량:JoyToken 판매의 최소 목표량은 미화 1,000,000불입니다.

Timescale: Starting approximately on 20th of March 2018 and lasting for up to 31 days or before all the tokens are distributed.

초과신청:JoyToken이 미화 46,340,000불 이상을 모금하는 경우 토큰 판매는 즉시 중단됩니다. 초과 신청의 가능성이 있습니다. 이러한 경우 초과되는 금액은 토큰 세일이 종료된 후 15일 이내에 반환됩니다. 이러한 경우 이자를 지불하지 않음을 명심하시기 바랍니다.

실패:토큰이 최소 목표량에 도달하지 않는 경우 이는 토큰 판매가 실패했음으로 간주됩니다. 토큰 판매는 즉시 중단되며 모든 자금은 토큰 세일 종료 후 15일 이내에 반환됩니다. 이러한 경우 이자를 지불하지 않음을 명심하시기 바랍니다.

기타 위험:토큰 세일에는 토큰 판매 문서와 함께 제공되는 Private Placement Memorandum(PPM)에서 설명한 여러가지 다른 위험이 존재합니다. 이러한 위험에는 유사한 토큰이 증권으로 간주되거나 등록 및 예외를 필요로 하는 SEC의 현재 위치, 잠재적인 토큰 가치 상실, 토큰을 되팔기가 불가능한 점, Joy Gaming 네트워크 개발 실패 및 다양한 기술적인 위험이 포함됩니다. 독자들은 위험에 관한 더욱 자세한 설명을 위해 PPM을 읽고 투자를 진행하기 전에 적절한 상담을 받아야 합니다.

토큰 분배

사전 판매 20% 140,000,000
ICO* 기간 내 판매 30% 210,000,000
보상금 기금(VIP 등) 10% 70,000,000
플랫폼 상에서 판매 23% 161,000,000
창업팀(24개월 간 귀속) 12% 84,000,000
홍보대사, 자금 모집 수수료 3% 21,000,000
ICO 장려금 2% 14,000,000
전체 100% 700,000,000

*판매되지 않은 토큰들은 소멸됩니다

CEO

Andrew MacDonald

주요 우수 기업의 소매 및 온라인 게임 분야에서 20년 경력. 비즈니스 성장을 촉직하기 위한 제공 게임 품질 보장 뿐만 아니라 개별 플레이어에도 초점을 둔 마케팅 보유 기법을 성공적으로 적용. 강력한 데이터에 초점을 둔 예리한 문제 해결 전문가.

CMO

Mike Leys

마케팅 분야 30년 경력을 포함, 34년 이상의 전문 경력. 전 세계의 온/오프라인 마케팅과 전자상거래에 대한 지식과 입증된 경력을 가진 매니저 및 마케팅 전문가. 그의 분야 경력은 온라인 게임, 엔터테인먼트, 모바일, 소매, 재정 서비스를 포함. 2005년 이후 온라인 게임 섹터에서의 경력 - 훌륭한 플레이어들을 이끄는 데에 초점을 맞추고 몇몇 온라인 게임 사이트를 성공적으로 출시

CTO

Steve Giordano Imbroll

소프트웨어 개발 분야 10 년 경력, 비즈니스 인텔리전스, 금융 및 재정 분야 7 년 경력. a.o., Sony, Uber 및 PKR Technologies에서 고기술의 제품 개발자로 활동. 다양한 부서에서 오는 여러 요청을 처리하는 전문가. 회사 성과의 복잡성을 보는 비전을 가진 사람. 최근 게임 및 보안에 열정.

로드맵

2018년 6월
OP: 500,000 종잣돈 모금
2017년 10월
OP: 산업과 블록체인으로부터 내부 어드바이저 활동
2017년 11월
OP: Joy Gaming 재단 설립
OUT: 블록체인 엑스포에서 발표
2017년 12월
TECH: 스마트 계약을 사용한 데모 슬롯 머신
OP: 도박 개발자 라이선스 신청
TECH: 개발자들을 위한 Joy Gaming Platform 출시
TECH: 코드 평가
MARCH 2017
OP: 토큰 판매
2018년 4월
OP: 토큰 판매 평가
2018년 6월
TECH: Playcosmo에서 게임 라이브 중계
2018년 8월
TECH: 고정 승률 테이블 게임으로 확장
OP: 더 많은 플랫폼과 직접적인 운영자와 통합

참조

[1] https://iota.org/IOTA_Whitepaper.pdf

[2] https://www.sia.tech/whitepaper.pdf

[3] https://ipfs.io/ipfs/QmR7GSQM93Cx5eAg6a6yRzNde1FQv7uL6X1o4k7zrJa3LX/ipfs.draft3.pdf

[4] https://storj.io/storj.pdf

[5] https://bitcoin.org/bitcoin.pdf

[6] https://github.com/ethereum/wiki/wiki/White-Paper

목차