Live Scanner 운영자 메뉴얼
Last updated
Last updated
ABC
운영자 매뉴얼(Live Scanner)
1. Live Scanner 개요
1-1) 시스템 구성도
1-2) Live Scanner 흐름도
1-3)Live Scanner 설치
2. End-point 상태 모니터링
2-1) 스캐너 프로세스 Log 확인
3. Live Scanner 프로세스 관리
3-1) 프로세스 목록 확인
3-2) 프로세스 시작
3-3) 프로세스 중지
4. Live Scanner 구동 권장 H/W 사양
4-1) 하드웨어 요구사항
4-2) 기타
Live Scanner는 Node.JS로 제작되었으며 Ethereum, Klaytn, Polygon, BnB 메인넷 End-Point Node에 연계하여 실시간으로 생성되는 블록 및 Transaction을 분석하여 블록 관련 정보를 추출하는 프로그램입니다.
추출된 NFT와 토큰 정보는 RDS 서버에 실시간으로 저장되며, 현재 처리하고 있는 블록 번호 또한 RDS 서버에 실시간으로 저장됩니다.
1-1) 시스템 구성도
1-3) Live Scanner 설치
Live Scanner 는 Node.JS로 제작되었으며, 프로세스 관리에서는 pm2를 사용합니다. 따라서 Live Scanner를 설치하기 위해서는 Server에 Node.JS 및 pm2 등이 설치되어 있어야 합니다.
Ubuntu 20.04 이상
Node v18.17.1 또는 그 이상
Npm v9.6.7 또는 그 이상
Pm2 v5.3.0 또는 그 이상
Live Scanner는 작동 시에 NFT DB의 crawler_table을 읽어서 수집할 블록 번호에 따라서 동작하므로 crawler_table이 없다면 설치 전에 아래의 명령에 따라 crawler_table을 정의하거나, 수집할 블록 번호를 NFT DB에 업데이트합니다. crawler_table의 상세 설명은 ‘블록체인 DB 테이블명세서.docx’ 및 docs의 블록체인 스캐너 로직 설명을 참고하시기 바랍니다.
Crawler_table 생성
crawler_table
실시간 블록체인 데이터 수집을 위한 정보 수집
nft_collection_table
NFT 컬렉션 정보 수집
nft_owner_table
소유자별 NFT 잔고 정보 수집
nft_token_table
NFT 토큰 정보 수집
nft_transaction_table
NFT 전송, 거래 이력 정보 수집
nft_hide_table
숨겨진 NFT에 대한 정보 수집
token_table
토큰 정보 수집
token_owner_table
소유자별 token 잔고 정보 수집
token_transfer_table
토큰 전송 이력 정보 수집
nodes_table
노드 활성화 상태 수집
statistics_table
통계 정보 수집
users_table
사용자 유형 정보 수집
블록체인 DB 테이블 설명
crawler 프로세스별 테이터 입력
network
각 체인의 이름(ethereum, cypress, polygon, bnb)을 입력합니다.
crawled_block_number
기존에 최종적으로 수집한 블록 번호를 입력합니다. 0을 입력하는 경우 1번 블록부터 데이터를 수집합니다.
block_endnumber
수집할 최종 번호를 입력합니다. -1을 입력하는경우 실시간 최신블록으로 동작합니다.
network_state
각 프로세스의 작동 여부를 지정합니다. crawler가 동작을 시작하면 1로 update 됩니다.
프로세스 별 데이터 입력 예
제공받은 block-crawler-live 파일을 압축해제 및 폴더를 아래의 명령어를 통해 block-crawler-live-eth 폴더로 복사합니다.
crawler에 config/config.json을 수정합니다.
다음 명령을 통해 블록체인 데이터 수집 프로그램을 시작합니다.
Live Scanner에서는 End-Point Node와의 Connection 상태를 실시간으로 체크하고 이를 DB에 저장합니다. 이러한 End-Point 상태 값을 확인하기 위해서는 아래 Query 문을 실행합니다.
Query 실행 결과
2-1) 스캐너 프로세스 Log 확인
pm2 명령어를 통해 스캐너 프로세스의 로그를 확인할 수 있으며 아래와 같이 명령어를 콘솔창에 입력합니다.
실행 결과 예시
Live Scanner는 Node.JS 프로세스 관리 도구인 pm2를 통해 관리됩니다. Pm2 사용법에 관해서는 https://pm2.keymetrics.io/ 를 참고 바랍니다.
3-1) 프로세스 목록 확인
프로세스 목록 확인을 위해서는 Live Scanner가 설치된 서버의 콘솔에서 아래의 명령을 실행합니다.
실행 결과
3-2) 프로세스 시작
프로세스 목록 확인 과정에서 프로세스가 없는 경우에는 아래와 같이 프로세스를 시작할 수 있습니다.
프로세스 목록 확인 과정에서 프로세스가 없는 경우에는 아래와 같이 프로세스를 시작할 수 있습니다.
프로세스 목록 확인 과정에서 프로세스가 있고 status 가 online이 아닌 경우에는 아래와 같이 프로세스를 시작할 수 있습니다.
프로세스를 개별 id나 name으로도 시작할 수 있으며 아래와 같이 명령을 실행합니다.
프로세스 목록 확인 과정에서 프로세스가 있고 status 가 online이 아닌 경우에는 아래와 같이 프로세스를 재시작할 수 있습니다.
3-3) 프로세스 중지
모든 프로세스를 중지하고자 할 때는 아래의 명령으로 중지할 수 있습니다.
개별 프로세스를 중지하고자 할 때는 아래의 명령으로 중지할 수 있습니다.
runQuery : Error: Can't add new command when connection is in closed state
DB 커넥션이 너무 많을 때 발생.
Pm2 프로세스의 수를 줄여서 다시 실행합니다.
getToken : TypeError: (intermediate value) is not iterable
contract.methods.totalSupply() : Error: Returned error: execution reverted
totalSupply가 없는 블럭정보에서 totalSupply를 실행하는 메서드를 실행하려고 할 때 발생.
getBlock : Error: Returned error: the block does not exist
해당 블럭이 존재하지 않거나 정보가 잘못 되었을 때 발생.
스타트 블럭의 번호를 확인하고 이전 번호로 다시 실행합니다.
You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
11|crawler | TypeError: undefined is not iterable
isERC1155Contract : Error: Returned error: execution reverted
1155컨트랙트 함수 호출 중 1155컨트랙트가 없는 정보에서 메서드를 실행하려고 할 때 발생.
isERC1155Contract : Error: Returned values aren't valid, did it run Out of Gas? You might also see this error if you are not using the correct ABI for the contract you are retrieving data from, requesting data from a block number that does not exist, or querying a node which is not fully synced.
데이터를 검색하는 컨트랙트가 올바른 ABI를 사용하지 않는 경우에 이 오류가 표시.
혹은 컨트랙트 주소가 잘못되었을 때 발생.
getBlock : Error: Returned error: invalid argument 0: hex string without 0x prefix
컨트랙트어드레스가 16진수임을 제대로 나타내지 못해서 발생
위 오류코드 이외에 또다른 오류코드가 발생하여 해결이 어려울 때는 직접 문의하여 주시기 바랍니다.
최신 버전의 Mac OS X, Linux 를 실행하는 VPS.
12코어 CPU 및 64GB 메모리(RAM) 또는 그 이상
HDD : 8TB 또는 그 이상 / SSD : 8TB 또는 그 이상
4-2) 기타
※ 참고
Live Schanner에서는 2개 이상의 Endpoint Node를 config.json 파일에 등록하여 데이터 수집시에 하나의 Endpoint Node와의 통신이 원활하지 않을 경우 다른 Endpoint Node를 사용하도록 하고 있습니다.
따라서 Infura(https://www.infura.io/), Alchemy(https://www.alchemy.com/), Allthatnode(https://allthatnode.com) 등의 Endpoint Node 서비스를 활용하여 Ethereum, Klaytn, IPFS 등의 Endpoint Node를 추가할 수 있습니다.
문의 :