Skip to content
This repository has been archived by the owner on Aug 13, 2024. It is now read-only.

How to run check:data testing for data consistency

Jamie edited this page Aug 3, 2022 · 5 revisions

This wiki describes how to run rosetta-klaytn check:data test using rosetta-cli to check data consistency. In order to run the check:data test, you need four main things: Klaytn network, Archive EN, Rosetta server, and Rosetta cli tester.
이 위키는 Klaytn 네트워크의 데이터 일관성을 확인하기 위해 rosetta-klaytn의 check:data를 수행하는 방법에 대해서 설명합니다. check:data 테스트를 수행하기 위해서는 크게 클레이튼 네트워크, 아카이브 EN, 로제타 서버 그리고 로제타 cli tester 이렇게 4가지가 필요합니다.

1. Deploy Klaytn network to test

You can use Cypress or Baobab networks for testing, or you can deploy a separate network for testing. If you want to configure the Klaytn network, you can use klaytn-deploy tool.
Cypress 혹은 Baobab 네트워크도 테스트에 사용될 수 있으며, 또한 직접 네트워크를 구성할 수도 있습니다. 직접 네트워크를 구성하고 싶은 경우 klaytn-deploy을 사용할 수 있습니다.

2. Prepare an EN (end-point node)

To serve the rosetta-klaytn requests, you need an EN with archive mode. Also EN should serve klay, debug, txpool, governance and admin APIs. You can read README.md for details.
rosetta-klaytn 요청을 서빙하기 위해서는 archive 모드로 띄운 EN 노드가 필요합니다. 또한 EN 노드는 klay, debug, txpool, governance 그리고 admin API를 제공해야 합니다. 더욱 자세한 내용은 README.md를 참고하시기 바랍니다.

Once you have your EN ready with this configuration, synchronize all data on the network you want to test. This EN node will serve API requests sent by rosetta-klaytn when running check:data tests.
EN을 위한 구성이 완료되었다면, 네트워크의 데이터를 모두 싱크해야 합니다. 이 EN 노드는 check:data 테스트를 수행할 때, rosetta-klaytn에서 보내는 요청을 처리할 것입니다.

3. Run a rosetta-klaytn server with online mode

You need to start a rosetta server that provides Klaytn's Rosetta API with online mode. (If you run a server with offline mode, server can not serve DATA API provides the ability to access blockchain data)
Klaytn의 로제타 API를 제공하는 로제타 서버는 online 모드로 실행해야 합니다. (만약 offline 모드로 실행하면 블록체인의 데이터를 조회하는 DATA API를 서빙할 수 없습니다.)

To run Rosetta Server, you can use your local computer or AWS instance. If you want to use AWS, the specification recommends using a c5.2xlarge instance type. The instance type can be adjusted according to the concurrency to be used during testing and the amount of test data.
로컬 컴퓨터 혹은 AWS 인스턴스를 사용하여 로제타 서버를 띄울 수 있습니다. 만약 AWS를 사용한다면, c5.2xlarge 인스턴스 타입 사용을 권장합니다. 인스턴스 타입은 테스트 데이터의 양과 테스트를 수행하는 병렬의 정도에 따라서 조절할 수 있습니다.

Also the Docker, Git and Go must be installed on the machine where you want to run Rosetta Server.
또한 로제타 서버를 띄우는 머신에는 Docker와 Git 그리고 Go가 설치되어 있어야 합니다.

// Install Docker
sudo yum update -y && sudo amazon-linux-extras install docker && sudo service docker start

// Install Git
sudo yum update -y && sudo yum install git -y

// Install latest go lang
wget https://storage.googleapis.com/golang/getgo/installer_linux
chmod +x ./installer_linux
./installer_linux 
source ~/.bash_profile

Go must be installed at version 1.18 or higher, and when using yum install go, version 1.16 is installed, so install the latest version as above.
go는 1.18 버전 이상으로 설치해야 하며, yum install go를 사용할 경우 1.16 버전이 설치되기 때문에 위와 같이 최신 버전으로 설치합니다.

Now that the machine that will run the Rosetta Server is ready, you can start the Rosetta Server. You can launch the server using a pre-built Docker image, or build it directly from the source code to launch the server. Using pre-built Docker is explained here, and how to build directly from source code, please refer to the README.md file.
이 모든 것이 준비가 되었다면 로제타 서버를 띄울 준비가 되었습니다. 로제타는 기존에 빌드된 도커 이미지를 사용하여 띄울 수도 있고 직접 소스코드에서 빌드하여 시작할 수도 있습니다. 기존에 빌드되어 제공되는 도커 이미지를 사용하는 방법이 이 페이지에서 설명될 예정이며, 소스코드에서 직접 빌드하는 방법은 README.md를 참고하시기 바랍니다.

3-1. Download pre-built image

You can download a pre-built Docker image with below command.
아래의 커맨드를 사용하여 기존에 빌드된 도커 이미지를 다운로드 합니다.

curl -sSfL https://raw.githubusercontent.com/klaytn/rosetta-klaytn/master/install.sh | sh -s

3-2. Launch Rosetta server

You start a Rosetta server with Docker container now. If your network is Cypress mainnet or Baobab testnet, replace "NETWORK=LOCAL" to "NETWORK=MAINNET" or "NETWORK=TESTNET". Here, it is assumed that the test is performed using a network that is deployed separately. 도커 컨테인로 이제 로제타 서버를 시작할 수 있습니다. 만약 Cypress 메인넷이나 Baobab 테스트넷을 테스트에 사용하는 경우 "NETWORK=LOCAL""NETWORK=MAINNET" 이나 "NETWORK=TESTNET" 로 대치하세요. 이 페이지에서는 별도로 구성한 네트워크를 사용하여 테스트를 한다고 가정하고 설명합니다.

The command below will start the Rosetta Server in online mode using an EN node on your local network.
아래의 커맨드는 local 네트워크의 EN 노드를 사용하여 online 모드로 로제타 서버를 시작합니다.

docker run -d --rm --ulimit "nofile=100000:100000" -e "MODE=ONLINE" -e "NETWORK=LOCAL" -e "PORT=8080" -e "KEN=http://{EN URL}:{RPC PORT}" -p 8080:8080 -p 30303:30303 rosetta-klaytn:latest

If you are using MacOS M1, you need to add --platform linux/amd64 flag.
만약 MacOS M1 머신에서 실행하는 경우에는 --platform linux/amd64 플래그를 추가해야 합니다.

Now you are ready to serve Rosetta API request at 8080 port.
자 이제 로제타 API 요청을 8080 포트에서 서빙할 준비가 되었습니다.

4. Run check:data testing with rosetta-cli

4-1. Create bootstrap balance file

When running the check:data test, the balance information at genesis block is required. To generate balance file, you need to clone rosetta-klaytn source code:
check:data 테스트를 수행하기 위해서는 0번 블록인 제네시스 블록에서의 잔액 정보가 필요합니다. 0번 블록에서의 잔액 정보를 포함하는 bootstrap balance 파일을 생성하기 위해서 rosetta-klaytn 소스코드를 클론합니다.

cd ~
git clone https://github.com/klaytn/rosetta-klaytn.git

For Baobab Testnet and Cypress Mainnet, bootstrap_balances.json files are already created from each genesis block, but for a network deployed separately, a bootstrap balance file must be created. If you are testing Baoaba Testnet or Cypress Mainnet, skip the steps below and proceed to 4-2.
Cypress 메인넷이나 Baobab 테스트넷의 경우, 각 네트워크의 제네시스 블록으로부터 생성된 bootstrap_balances.json 파일이 제공됩니다. 하지만 직접 네트워크를 띄운 경우에는 별도로 bootstrap_balances.json 파일을 생성해야 합니다. Cypress 메인넷이나 Baobab 테스트넷에서 테스트를 하는 경우에는 아래의 단계를 생략하고 4-2를 이어서 진행하시기 바랍니다.

To create a bootstrap balance file, you need to replace rosetta-klaytn/klaytn/genesis_files/localnet.json file with genesis block of your network. If you use klaytn-deploy tool, you can see genesis block in homi-output-cn/scripts/genesis.json.
bootstrap balance 파일을 생성하려면 rosetta-klaytn/klaytn/genesis_files/localnet.json 파일을 직접 구성한 네트워크의 제네시스 블록의 내용으로 대체해야 합니다. 만약 klaytn-deploy 툴을 사용한다면 homi-output-cn/scripts/genesis.json에서 제네시스 블록 정보를 찾을 수 있습니다.

When sending a file from to a remote AWS instance, you can do something like this:
로컬에서 원격의 AWS 인스턴스에 데이터를 전송할 때는 아래와 같이 할 수 있습니다.

// Need to type below command in local computer
// This will send genesis.json file to remote, and you can find the genesis file in `/home/ec2-user` path.
scp -i ~/.ssh/klaytn-cell.pem homi-output-cn/scripts/genesis.json [email protected]:/home/ec2-user

Replace the rosetta-klaytn/klaytn/genesis_files/localnet.json file with the received genesis file.
rosetta-klaytn/klaytn/genesis_files/localnet.json 파일을 전송받은 genesis 파일로 대체합니다.

rm -rf ~/rosetta-klaytn/klaytn/genesis_files/localnet.json && mv /home/ec2-user/genesis.json ~/rosetta-klaytn/klaytn/genesis_files/localnet.json

When you done to replace localnet.json file, you can run bleow:
localnet.json 파일의 내용을 대체한 이후 아래의 커맨드를 실행합니다.

cd rosetta-klaytn
make update-bootstrap-balances

Now you can see updated rosetta-klaytn/rosetta-cli-conf/localnet/bootstrap_balances.json file.
위 커맨드 실행이 완료되면 업데이트된 rosetta-klaytn/rosetta-cli-conf/localnet/bootstrap_balances.json 파일을 확인할 수 있습니다.

4-2. Install rosetta-cli

To download a latest binary, run:
최신 바이너리를 다운로드하기 위하여 아래 커맨드를 실행합니다.

cd ~
curl -sSfL https://raw.githubusercontent.com/coinbase/rosetta-cli/master/scripts/install.sh | sh -s

The rosetta-cli binary is installed in ./bin/rosetta-cli.
./bin/rosetta-cli 경로에 rosetta-cli 실행 파일이 설치됩니다.

4-3. Update rosetta-cli config file

Before running the test, rosetta-klaytn/rosetta-cli-conf/localnet/config.json need to be modified.
테스트 수행에 앞서, rosetta-klaytn/rosetta-cli-conf/localnet/config.json 파일을 수정합니다.

vi rosetta-klaytn/rosetta-cli-conf/localnet/config.json

If you want to define end block number, you can define index in end_conditions in data.
테스트를 종료 조건으로 블록 번호를 사용하고 싶다면 conf.json의 data, end_conditionsindex 필드로 정의할 수 있습니다.

{
  ...
  "online_url": "http://localhost:8080", // need to update with your rosetta API server
  ...
  "data": {
    ...
    "bootstrap_balances": "bootstrap_balances.json",
    "end_conditions": {
      "index": 100
    }
  }
}

construction will not be used for check:data testing, so you don't need to care about it. If you do not define data.end_conditions.index, check:data will not end the test and will continue testing along the latest block.
construction에 정의된 내용들은 check:data 테스트에서 사용되지 않기 때문에 신경쓰지 않아도 됩니다. 만약에 data.end_conditions.index가 정의되지 않으면, 테스트는 종료되지 않고 네트워크를 최신 블록을 계속 따라가면서 테스트가 수행됩니다.

If you want to test a specific block range, specify start_index as shown below and delete "bootstrap_balances": "bootstrap_balances.json",. If there is no start_index, the test is performed from block 0.
만약 특정 블록 구간을 테스트하고 싶은 경우에는 아래와 같이 start_index를 지정하고 "bootstrap_balances": "bootstrap_balances.json", 을 삭제해야 합니다. start_index가 없는 경우에는 0번 블록부터 테스트를 수행합니다.

  "data": {
    "start_index": 10,
    ...
    "historical_balance_disabled": false,
    "end_conditions": {
      "index": 100
    }

4-4. Run check:data testing

Now you are ready to run check:data testing. Don't forget you should remove check:data testing data directory whenever you run the test, otherwise test cannot run correctly. In rosetta-cli-conf/localnet/config.json, data_directory is defined (default is cli-data-localnet).
이제 check:data 테스트를 수행할 준비가 되었습니다. check:data를 수행할 때마다 기존에 생성된 데이터 디렉토리를 삭제되어야 한다는 것을 잊지 않기 바랍니다. rosetta-cli-conf/localnet/config.json 파일에 data_directory는 정의되어 있으며 디폴트는 cli-data-localnet 입니다.

cd ~/bin && rm -rf cli-data-localnet
./rosetta-cli check:data --configuration-file ../rosetta-klaytn/rosetta-cli-conf/localnet/config.json

During the testing, you can see the data logs in the cli-data-localnet/check-data like below. The directory name after cli-data-localnet/check-data changes every time a test is performed, so please check the appropriate directory path.
테스트 수행 중에 cli-data-localnet/check-data에 있는 로그를 아래와 같이 확인할 수 있습니다. cli-data-localnet/check-data 이후에 나오는 디렉토리 이름은 테스트를 수행할 때마다 변경되므로 디렉토리 경로를 확인하시기 바랍니다.

tail -f cli-data-localnet/check-data/e87bbd4b594585b92201c6b2fba5fbaa6a12a70241672d1202676a6001770472/blocks.txt
tail -f cli-data-localnet/check-data/e87bbd4b594585b92201c6b2fba5fbaa6a12a70241672d1202676a6001770472/balance_changes.txt
tail -f cli-data-localnet/check-data/e87bbd4b594585b92201c6b2fba5fbaa6a12a70241672d1202676a6001770472/transactions.txt

5. Check the testing report

When the test ends because the test end_condition is satisfied, a test report is output.
end_condition이 만족되어 테스트가 종료되면 테스트 리포트가 출력됩니다.

Success: Index End Condition [Index: 257200]

+--------------------+--------------------------------+--------+
|  CHECK:DATA TESTS  |          DESCRIPTION           | STATUS |
+--------------------+--------------------------------+--------+
| Request/Response   | Rosetta implementation         | PASSED |
|                    | serviced all requests          |        |
+--------------------+--------------------------------+--------+
| Response Assertion | All responses are correctly    | PASSED |
|                    | formatted                      |        |
+--------------------+--------------------------------+--------+
| Block Syncing      | Blocks are connected into a    | PASSED |
|                    | single canonical chain         |        |
+--------------------+--------------------------------+--------+
| Balance Tracking   | Account balances did not go    | PASSED |
|                    | negative                       |        |
+--------------------+--------------------------------+--------+
| Reconciliation     | No balance discrepancies were  | PASSED |
|                    | found between computed and     |        |
|                    | live balances                  |        |
+--------------------+--------------------------------+--------+

If there were no errors in performing the test, it can be considered that data consistency for block rewards, transaction fees, account balance changes, and fee burning is satisfied.
테스트를 수행하는데 에러가 없었다면 블록 리워드, 트랜잭션 수수료, 계정 잔액 변화 그리고 수수료 버닝에 대한 데이터 일관성를 만족한다고 생각할 수 있습니다.

This is how to check data consistency through rosetta-klaytn check:data test, hope it was helpful.
여기까지가 rosetta-klaytn의 check:data 테스트를 통해 네트워크 데이터 일관성을 확인하는 방법에 대한 설명이었는데, 많은 도움이 되었기 바랍니다.