infrablockchain-docs
ko
ko
  • 인프라블록체인
    • 배우기
      • 아키텍처
        • 아키텍처
        • 네트워크 참여자
        • 파라체인
          • 시스템 파라체인
      • 프로토콜
        • 시스템 토큰
        • 트랜잭션 수수료
        • Proof of Transaction
      • Substrate
        • 배우기
          • 기초 지식
            • 암호학
            • 블록체인 기본 개념
            • 합의
            • 네트워크와 노드
            • 트랜잭션과 블록 기본 사항
            • 트랜잭션 수명주기
            • 오프체인 작업
            • 라이트 클라이언트
            • Substrate를 위한 Rust
            • 라이브러리 소개
            • 아키텍처와 Rust 라이브러리
            • 파일 구조
            • 계정, 주소 및 키
            • 트랜잭션 형식
            • 난수 생성
          • 프레임
            • FRAME 팔레트
            • FRAME 매크로
            • 커스텀 팔레트
            • 팔레트 커플링
            • Origin
            • 이벤트와 에러
            • 런타임 스토리지 구조
            • 상태 전이와 스토리지
            • SCALE 인코딩
            • 트랜잭션, Weight 및 수수료
            • 런타임 API
            • 런타임 업그레이드
            • 런타임 개발
          • 계정 데이터 구조
          • 주소 형식
          • 용어집
          • cli
            • 아카이브
            • 메모리 프로파일러
            • 노드 템플릿
            • 사이드카
            • srtool
            • 서브키
            • subxt
            • try-runtime
            • tx-wrapper
          • 런타임 개발
            • 기본
              • Genesis 상태 구성하기
              • 런타임 상수 구성
              • 체인 스펙을 커스텀하기
              • 팔레트 가져오기
              • 도우미 함수 사용하기
            • 합의 모델
              • 작업 증명을 사용하는 체인 구성
              • 하이브리드 노드 생성하기
            • 오프체인 워커
              • 오프체인 HTTP 요청하기
              • 오프체인 인덱싱
              • 오프체인 로컬 스토리지
            • 팔레트 설계
              • 크라우드펀딩 구성하기
              • 스토리지 구조체 (struct) 생성하기
              • 잠금 가능한 통화 구현
              • 무작위성 적용하기
              • 느슨한 팔레트 결합 사용하기
              • 타이트한 팔레트 결합 사용하기
            • 파라체인 개발
              • HRMP 채널 추가하기
              • 로컬 파라체인 노드 추가하기
              • 릴레이 체인에 연결하기
              • 솔로 체인을 변환하기
              • 론칭 준비
              • 콜레이터 선택
              • 파라체인 업그레이드
            • 스토리지 마이그레이션
              • 기본 저장소 마이그레이션
              • 스토리지 마이그레이션 트리거
            • 테스트
              • 기본 테스트 설정하기
              • 전송 함수 테스트하기
            • 도구
              • 체인을 위한 txwrapper 생성
              • REST 엔드포인트를 사용하여 체인 데이터 가져오기
              • try-runtime 사용하기
              • Wasm 바이너리 검증하기
            • 가중치
              • 벤치마크 추가
              • 수수료 계산하기
              • 조건부 가중치 사용
              • 사용자 정의 가중치 사용하기
        • 빌드하기
          • 제작할 것을 결정하세요
          • 빌드 프로세스
          • 결정론적 런타임 빌드
          • 체인 스펙
          • Genesis 구성
          • 애플리케이션 개발
          • RPC
          • 문제 해결
        • 튜토리얼
          • 설치하기
            • 개발자 도구
            • 리눅스 개발 환경
            • macOS 개발 환경
            • Rust 툴체인
            • Rust 문제 해결 방법
            • Windows 개발 환경
          • 빠른 시작
            • 코드 탐색하기
            • 런타임 수정하기
            • 노드 시작하기
            • Substrate 한눈에 보기
          • 블록체인 구축
            • 신뢰할 수 있는 노드 추가
            • 특정 노드 승인
            • 로컬 블록체인 구축하기
            • 네트워크 시뮬레이션
            • 실행 중인 네트워크 업그레이드
          • 애플리케이션 로직 구축
            • 런타임에 팔레트 추가하기
            • 오프체인 워커 추가
            • 사용자 정의 팔레트 게시
            • 함수 호출의 출처 지정하기
            • 사용자 정의 팔레트에서 매크로 사용하기
          • 유용한 도구들
            • EVM 계정에 접근하기
            • 이더리움 통합
            • 사이드카 엔드포인트 탐색하기
            • 경량 클라이언트 노드 통합
          • 스마트 컨트랙트
            • 스마트 컨트랙트
            • 토큰 계약 작성하기
            • 스마트 컨트랙트 개발하기
            • 첫 번째 계약 준비하기
            • 스마트 컨트랙트 문제 해결
            • 값 저장을 위한 맵 사용
      • XCM
        • XCM
        • XCM 형식
    • 서비스 체인
      • 인프라DID
      • 인프라EVM
      • URAuth(Universal Resource Auth)
    • 데브 옵스
      • 체인 빌드
      • 배포
      • 모니터링
    • 튜토리얼
      • 기초
        • 시스템 토큰 관리 프로세스
        • 시스템 토큰을 트랜잭션 수수료로 사용해보기
        • 트랜잭션에 투표 포함 시키기
        • 밸리데이터 보상 받기
      • 구축하기
        • 인프라릴레이체인 구축하기
        • 파라체인 구축하기
        • 메시지 전달 채널 열기
        • XCM을 이용하여 토큰 전송하기
        • Asynchronous Backing 적용하기
      • 테스트
        • 벤치마크
        • 런타임 확인
        • 디버그
        • 테스트 네트워크에서 파라체인 시뮬레이션하기
        • 단위 테스트
      • 서비스체인
        • 인프라DID
          • 구축하기
          • 공개키 추가하기
          • 서비스 엔드포인트 등록하기
          • DID 생성하기
        • 인프라EVM
          • 구축하기
          • EVM에 자금 입금 및 인출하기
          • ERC20 토큰 컨트랙트 배포하기
          • ERC721 토큰 컨트랙트 배포하기
          • ERC1155 토큰 컨트랙트 배포하기
  • 뉴날 데이터 마켓
Powered by GitBook
On this page
  • 모티베이션
  • 작동 방식
  • 사용법
  • 명령줄 예제
  • 다음 단계로 넘어가기
  1. 인프라블록체인
  2. 튜토리얼
  3. 테스트

런타임 확인

지정된 런타임 상태를 프로덕션 스냅샷의 체인 상태와 테스트하기 위한 try-runtime 명령줄 도구에 대해 설명합니다.

Previous벤치마크Next디버그

Last updated 1 year ago

try-runtime 명령줄 도구를 사용하면 데이터 구조를 사용하여 런타임 스토리지의 스냅샷을 쿼리하여 상태를 저장할 수 있습니다. 인메모리 스토리지를 사용하여 지정된 런타임 상태에 대한 테스트를 작성하여 프로덕션으로 이동하기 전에 실제 체인 상태에 대해 테스트할 수 있습니다.

가장 간단한 형태로 try-runtime을 사용하여 다음과 같이 런타임 상태를 테스트할 수 있습니다:

  1. 원격 노드에 연결합니다.

  2. 특정 런타임 API를 호출합니다.

  3. 특정 블록에서 노드로부터 상태를 검색합니다.

  4. 검색한 데이터에 대해 테스트를 작성합니다.

모티베이션

try-runtime의 초기 모티베이션은 실제 체인의 상태에 대해 런타임 변경 사항을 테스트해야 하는 필요성에서 비롯되었습니다. 이전에는 단위 및 통합 테스트를 위해 TestExternalities 와 가 있었지만, 실제 체인의 상태에 대해 테스트할 수 있는 기능이 부족했습니다. try-runtime 도구는 다음과 같은 노드의 RPC 엔드포인트를 사용하여 상태를 검색함으로써 TestExternalities와 BasicExternalities를 확장합니다:

  • rpc_get_storage

  • rpc_get_keys_paged

(자세한 내용은 를 참조하세요.)

Key-Value 데이터베이스를 사용하여 상태를 검색한 후, try-runtime은 해당 데이터를 TestExternalities에 삽입합니다.

작동 방식

try-runtime 도구는 라는 자체적인 externalities 구현을 가지고 있으며, 이는 TestExternalities를 래핑하고 데이터가 된 를 사용합니다.

아래 다이어그램은 externalities가 컴파일된 런타임 외부에 위치하여 해당 런타임의 스토리지를 캡처하는 방식을 보여줍니다.

remote_externalities를 사용하면 일부 체인 상태를 캡처하고 이를 기반으로 테스트를 실행할 수 있습니다. 기본적으로 RemoteExternalities는 실제 체인의 데이터로 TestExternalities를 채웁니다.

특히:

사용법

try-runtime의 가장 일반적인 사용 사례는 스토리지 마이그레이션과 런타임 업그레이드를 준비하는 데 도움을 줍니다.

스토리지를 쿼리하는 RPC 호출은 계산 비용이 많이 들기 때문에 try-runtime 명령을 사용하기 전에 실행 중인 노드에 다음과 같은 몇 가지 명령줄 옵션을 설정해야 합니다. try-runtime 테스트를 위해 노드를 준비하려면 다음 옵션을 설정하세요:

  • 대용량 RPC 쿼리가 작동할 수 있도록 --rpc-max-payload 1000을 설정합니다.

  • WebSocket 연결이 가능하도록 --rpc-cors all을 설정합니다.

런타임 업그레이드 후크

기본적으로 런타임 업그레이드 후크는 런타임 내부 또는 팔렛 내부에 정의할 수 있는데, 런타임 업그레이드가 발생했을 때 어떤 작업이 수행되어야 하는지를 지정합니다. 즉, 기본 on_runtime_upgrade 메서드는 업그레이드 이후의 런타임 상태만을 설명합니다. 그러나 try-runtime에서 제공하는 메서드를 사용하여 테스트 목적으로 런타임 업그레이드 전후의 런타임 상태를 검사하고 비교할 수 있습니다.

런타임에 try-runtime 기능을 활성화하면 다음과 같이 런타임에 대한 pre-upgrade 및 post-upgrade 후크를 정의할 수 있습니다:

#[cfg(feature = "try-runtime")]
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
		Ok(Vec::new())
}

#[cfg(feature = "try-runtime")]
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
		Ok(())
}

이러한 함수를 사용하면 pre_upgrade 후크를 사용하여 런타임 상태를 검색하고 Vec 결과로 반환할 수 있습니다. 그런 다음 Vec를 post_upgrade 후크의 입력 매개변수로 전달할 수 있습니다.

명령줄 예제

명령줄에서 try-runtime을 사용하려면 노드를 --features=try-runtime 플래그와 함께 실행하세요.

예를 들어:

cargo run --release --features=try-runtime try-runtime

try-runtime과 다음과 같은 하위 명령을 사용할 수 있습니다:

  • on-runtime-upgrade: 주어진 런타임 상태에 대해 tryRuntime_on_runtime_upgrade를 실행합니다.

  • offchain-worker: 주어진 런타임 상태에 대해 offchainWorkerApi_offchain_worker를 실행합니다.

  • execute-block: 주어진 블록과 부모 블록의 런타임 상태를 사용하여 core_execute_block을 실행합니다.

  • follow-chain: 주어진 체인의 최종 블록을 따라가고 모든 익스트린식에 적용합니다. 이를 통해 새로운 런타임의 동작을 오랜 기간 동안 실제 트랜잭션을 입력으로 받아 검사할 수 있습니다.

특정 try-runtime 하위 명령의 사용 정보를 보려면 하위 명령과 --help 플래그를 지정하세요. 예를 들어, try-runtime on-runtime-upgrade의 사용 정보를 보려면 다음 명령을 실행할 수 있습니다:

cargo run --release --features=try-runtime try-runtime on-runtime-upgrade --help

예를 들어, 로컬에서 실행 중인 체인에 on-runtime-upgrade 하위 명령을 사용하여 다음과 같이 try-runtime을 실행할 수 있습니다:

cargo run --release --features=try-runtime try-runtime on-runtime-upgrade live ws://localhost:9944

다음과 같이 try-runtime을 사용하여 ElectionProviderMultiPhase 오프체인 워커의 코드를 localhost:9944에서 다시 실행할 수 있습니다:

cargo run -- --release \
   --features=try-runtime \
   try-runtime \
   --execution Wasm \
   --wasm-execution Compiled \
   offchain-worker \
   --header-at 0x491d09f313c707b5096650d76600f063b09835fd820e2916d3f8b0f5b45bec30 \
   live \
   -b 0x491d09f313c707b5096650d76600f063b09835fd820e2916d3f8b0f5b45bec30 \
   -m ElectionProviderMultiPhase \
   --uri wss://localhost:9944

다음과 같이 로컬 런타임의 마이그레이션을 SomeChain의 상태에 대해 실행할 수 있습니다:

RUST_LOG=runtime=trace,try-runtime::cli=trace,executor=trace \
   cargo run try-runtime \
   --execution Native \
   --chain somechain-dev \
   on-runtime-upgrade \
   live \
   --uri wss://rpc.polkadot.io

다음과 같이 특정 블록 번호의 상태에 대해 try-runtime을 실행할 수 있습니다:

RUST_LOG=runtime=trace,try-runtime::cli=trace,executor=trace \
   cargo run try-runtime \
   --execution Native \
   --chain dev \
   --no-spec-name-check \
   on-runtime-upgrade \
   live \
   --uri wss://rpc.polkadot.io \
   --at <block-hash>

이 명령은 --no-spec-name-check 명령줄 옵션이 필요합니다.

다음 단계로 넘어가기

상태를 쿼리하기 위해 try-runtime은 에서 제공하는 RPC 메서드를 사용합니다.

: 이 방법은 지정한 블록을 나타내는 키에 대한 스토리지 값을 반환합니다.

: 이 방법은 지정한 접두사와 페이지네이션 지원과 일치하는 키를 반환합니다.

try-runtime을 와 결합하여 프로덕션 이전에 체인을 테스트할 수 있습니다. try-runtime을 사용하여 체인의 마이그레이션 및 사전 및 사후 상태를 테스트한 다음, 마이그레이션 이후에도 블록 생성이 계속되는지 확인하려면 fork-off-substrate를 사용하세요.

StateApiClient
storage
storage_key_paged
fork-off-substrate
스토리지 키
OnRuntimeUpgrade
try-runtime-upgrade
in-memory-externalities
BasicExternalities
remote externalities lib
remote_externalities
타입 인코딩
Key-Value 저장소
스토리지 externalities
externalities로 테스트하기