본문 바로가기

옥탑방주인/Hyperledger

Hyperledger Sawtooth - Introduction to the XO Transaction Family (Sawtooth v1.0.2)

Introduction to the XO Transaction Family



What is XO?


XO는 Sawtooth SDK에 포함되어 있는 transaction family 예제이다. XO는 인기있는 게임인 Tic-tac-toe 게임을 구현한 것이다.(다른 의미로는 Noughts and Crosses 또는 X's and O's라고도 부른다.)


X's 그리고 O's 스타일 게임은 전세계에서 많은 세월동안 플레이 되어왔다.  이런 게임의 시초가 어딘지는 불명확 하다; 그러나, 몇몇의 역사학자들은 Tic-tac-toe의 첫번째 버전이 고대 Egypt에서 시초가 되었다고 믿고있다. 다른 사람들은 현대 Tic-tac-toe가 Terni Lapilli 라고 알려진 게임이 진화된 것이라고 믿고있다., Terni Lapilli는 로마 제국에서 가장 인기있는 게임이다.


Tic-tac-toe는 컴퓨터 과학(computer science) 분야에서 역사적인 특징을 가지고 있다. 1952년에, tic-tac-toe는 OXO가 케임브릿지 대학에 다니고있는 Alexander S.Douglas로 부터 개발되었을 때, 최초의 비디오 게임 중에 하나였다.  더 많은 정보를 알고싶으면 여기를 클릭해라.


XO는 단순하고, 글로벌 플레이어 기반 및 컴퓨터 프로그램처럼 간단한 구현을 할 수 있기 때문에 Sawtooth의 transaction family로 선정되었다. 이 예제는 이 예제 transaction family는 Sawtooth의 기능(functionality) 과 다른 transaction family를 빌드하기 위한 참조용 코드를 보여준다.



How to Play XO


Game Rules


Tic-tac-toe는 3x3 grid상에 2명의 플레이어가 각 턴마다 마킹하여 진행한다. 옛날부터, 플레이어1은 공간에 'X'를 마킹하고, 플레이어2는 공간에 'O'를 마킹했다. 그리고 플레이어1은 항상 첫번째 턴을 시작한다.


플레이어는 가로, 세로, 대각선에서 3공간을 마킹하면 이긴다.(빙고게임 느낌?) 그리드의 9칸 모두에 표시가되어 있지만, 플레이어가 한줄 마킹을 못했다면, 게임은 무승부로 간주된다.


Playing XO Using the Command-line Interface


transaction의 제출(submission)과 제작(construction)을 다루는 XO를 실행하기위한 커맨드 라인 인터페이스(command-line interface)를 제공한다. 어떻게 CLI를 사용하는지에 대한 설명은 아래에 나와있다:


validator, XO transaction processor, 그리고 REST APi를 셋팅해라. Sawtooth components 실행과 구성에 관해 더 많은 정보를 알고 싶다면, 여기를 클릭해라.


유저는

xo create [name]

명령어를 사용해서 새로운 게임을 만든다.


  • name 인자(argument)는 새로운 게임이 생성되었을 때를 위한 식별자이다.
플레이어는 

xo take [name] [space] 

명령어를 사용해서 grid상에 마킹한다.


  • name 인자는 현재 게임에서의 식별자이다.
  • space 인자는 공간에 마킹된다, 정수형으로 이루어져 있으며 1부터 9까지의 범위를 가진다.

2

3

4

5

6

7

8

9


이런형식인듯??


메모 

 xo take 명령어를 사용해서 게임을 새로 생성했을 때 첫번째 플레이어의 이름은 player one으로 저장되어 있다. 두번째 플레이어는 take 명령어를 입력했을 때 유저네임이 player two로 저장되어 있다.


xo create와 xo take는 각각의 --username 과 --key-dir 인자를 가진다. 이것들은 유저의 프라이빗 키 파일: <key-dir>/<username>.priv가 위치해 있는 곳에 사용된다. key-dir는 기본으로 ~/sawtooth/key에 있고 username는 기본적으로 OS user의 이름으로 되어있다.


메모 

user는 xo reset 명령어를 사용해서 로컬 XO data를 지울 수 있다. XO data에는 저장된 URL과 username또한 포함되어 있다. 


Viewing the Game State


XO CLI는 현재 진행중인 게임 또는 완료된 게임을 보는 명령어를 지원한다. 이 명령어는 xo show [game] 그리고 xo list 이다.


  • xo show [game]은 구체적인 게임의 보드를 보여주고, 게다가 게임 상태, 플레이어에 관한 데이터도 보여준다.
  • xo list는 현재 게임과 완료된 게임의 모든 리스트를 보여준다.


노트 

XO 클라이언트는 부분적으로 인증(authentication)을 지원한다. 만약 REST API가 proxy 인증을 통해 접속되어있다면, XO 클라이언트는 --url 인자를 포함해야 할 것이다. 각각의 XO 명령어에서 --auth-user [user] 와 --auth-password [password] 옵션을 사용해서 인증정보를 입력해라.


--auth-user 인자를 메모해둬라, 이 인자는 --username 인자를 입력했던 username과는 다른 값이다.



URL


xo명령어는 모두 --url 인자를 가지며 기본값은 http://127.0.0.1:8008 이다. 이 주소는 REST API의 URL로 셋팅되어 있다. XO 클라이언트는 이 URL에서 블록체인을 업데이트 하거나 쿼리를 요청을 보낸다.


 xo에 관한 자세한 내용

 링크



Playing XO with the XO Client (Example)


이제 XO transaction processor의 기본적인것을 통해, 게임을 할 준비가 되었다. 이번 단계는 XO CLI을 사용하여 게임을 셋팅하는 법과 플레이하는법을 알려준다.



Start the Necessary Components


XO를 실행하려면 다음 구성 요소가 실행 중이며 연결되어 있는지 확인하십시오.


  1. 최소 1개의 validator
  2. XO family transaction processor
  3. REST API

Create Players


게임 실행을 하기 위해서 2명의 플레이어의 키를 생성해라.


$ sawtooth keygen chung

$ sawtooth keygen james


이 명령은 두 플레이어에 대해 다음과 같은 출력을 생성합니다.


writing file: /home/ubuntu/.sawtooth/keys/chung.priv

writing file: /home/ubuntu/.sawtooth/keys/chung.addr

writing file: /home/ubuntu/.sawtooth/keys/james.priv

writing file: /home/ubuntu/.sawtooth/keys/james.addr




Create a Game


아래와 같은 명령어를 입력하여 게임을 생성한다.


$ xo create game --username chung 



생성된 게임 리스트를 보려면 아래와 같은 명령어를 입력한다.


$ xo list 



게임이 생성되었다면, 위의 명령어의 출력은 아래와 같이 나올것이다.


GAME            PLAYER 1        PLAYER 2        BOARD     STATE

game                                                     ---------    P1-NEXT




Take a Space as Player One


첫번째 플레이어 "chung"에게 xo 게임을 시작해서 공간을 할당해주자.


$ xo take game 1 --username chung 


노트 

보드 공간은 1부터 9까지이다. 왼쪽 첫번째 칸이 1이고 오른쪽 맨아래 칸이 9이다.



Take a Space as Player Two


이제, 두번째 플레이어인 "james"에게 칸을 할당시켜주자.


$ xo take game 5 --username james



Show the Current State of the Game Board


게임 보드의 현재 상태를 보고 싶을 때마다 다음 명령을 입력하십시오


$ xo show game 


보드에 표시된 현재 상태를 볼 수 있을 것이다.


GAME:     : game

PLAYER 1  : 02403a

PLAYER 2  : 03729b

STATE     : P1-NEXT


  O |   |

 ---|---|---

    | X |

 ---|---|---

    |   |






Continue the Game


게임은 한명의 플레이어가 이기거나 게임이 무승부 될 때 까지 진행된다.




===========================================================


추가사항;


홈페이지에 나와있는 튜토리얼대로 명령어를 입력하면 제 VM에서는 게임이 생성이 안되는 현상이 발견되어서, 해결방법을 아래에 첨부합니다.



새 terminal을 키신 후 아래의 명령어를 입력하여, xo transaction families를 구성합니다.


$ sawset proposal create sawtooth.validator.transaction_families='[{"family": "xo", "version": "1.0"}, {"family":"sawtooth_settings", "version":"1.0"}]'




그 후 아래의 명령어를 터미널에 입력하여 XO transcation processor를 실행합니다(Python).


$ sudo -u sawtooth xo-tp-python -v





이 두 가지를 모두 하셨으면, player가 생성됩니다.



오늘은 그만알아보자... 다음시간에는 Python SDK에 관해서 작성할 예정이다.