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. Substrate
  4. 배우기
  5. 기초 지식

난수 생성

Substrate 런타임에서 난수 생성을 도입하는 방법을 설명합니다.

Previous트랜잭션 형식Next프레임

Last updated 1 year ago

블록체인은 동일한 입력이 항상 동일한 출력을 생성하는 결정론적(deterministic) 결과를 필요로하기 때문에, 무작위한 결과를 생성하기 위한 적절한 소스를 찾는 것은 어려운 일입니다. 그러나 난수 생성이 특정 작업을 수행하는 데 필수적인 많은 응용 프로그램이 있습니다. 예를 들어, 블록을 생성자를 선택하기 위해 난수 생성을 포함시켜 예측 가능하지 않고 특정 공격에 취약하지 않도록 합니다. 통계 또는 과학적 분석, 암호 작업 또는 게임과 관련된 응용 프로그램에서도 난수 생성을 사용할 수 있습니다.

결정론적 난수 생성

전통적인 컴퓨터 응용 프로그램에서 사람들이 무작위 숫자라고 부르는 것은 사실 의사 난수를 사용하여 생성됩니다. 의사 난수는 사용자 또는 외부 소스에서 제공되는 충분히 무작위한 시드와 시드를 조작하여 일련의 숫자를 생성하는 알고리즘에 의존합니다. 결과는 알고리즘을 사용하여 예측하기 어렵지만, 동일한 시드 입력은 항상 동일한 출력 시리즈를 생성하기 때문에 결정론적입니다.

그러나 블록체인에서 실행되는 응용 프로그램은 모든 네트워크의 권한자가 온체인 값, 즉 주입된 모든 난수 생성 데이터에 대해 동의해야 하기 때문에 제약이 더 큽니다. 이 제약 때문에 블록체인 응용 프로그램에서 직접적으로 실제 난수 생성을 사용할 수 없습니다.

블록체인 응용 프로그램에서 난수 생성을 제공하기 위한 가장 일반적인 접근 방식은 라는 암호 기본 요소입니다. 검증 가능한 무작위 함수 (VRF)는 입력을 받아 무작위 숫자와 이 무작위 숫자가 제출자에 의해 생성되었다는 증명(proof)를 생성하는 수학적 연산입니다. 이 증명은 임의의 도전자가 검증할 수 있으며, 이를 통해 무작위 숫자 생성이 유효한지 확인할 수 있습니다.

Polkadot 생태계와 Substrate 기반 체인에서는 검증 가능한 무작위 함수가 BABE 팔레트에서 제공하는 합의 메커니즘의 일부입니다. 검증 가능한 무작위 함수와 합의 사이의 관계에 대한 자세한 내용은 를 참조하십시오.

난수 생성 및 사용

Substrate는 난수 생성을 생성하는 로직과 난수 생성을 사용하는 로직 사이의 인터페이스를 정의하는 특성을 제공합니다. 이 특성을 사용하면 난수 생성을 생성하는 로직과 난수 생성을 사용하는 로직을 서로 독립적으로 작성할 수 있습니다.

난수 생성

애플리케이션의 보안 보장 및 성능 트레이드오프에 따라 다양한 방법으로 Randomness 특성을 구현할 수 있습니다. Substrate에는 성능, 복잡성 및 보안 사이의 다른 트레이드오프를 제공하는 팔레트에서 Randomness 특성을 구현하는 두 가지 예제가 포함되어 있습니다.

  • 팔레트는 이전 81개 블록의 블록 해시를 기반으로 의사 난수 값을 생성하는 random 함수를 제공합니다.

    이러한 유형의 난수 생성은 성능이 우수하지만 보안이 없습니다. 이 팔레트는 보안 요구 사항이 낮은 응용 프로그램이나 난수 생성을 사용하는 응용 프로그램을 테스트할 때만 사용해야 합니다. 이 팔레트는 제품 환경에서 사용해서는 안 됩니다.

  • 는 검증 가능한 무작위 함수를 사용하여 난수 생성을 제공합니다.

이 팔레트는 제품 수준의 난수 생성을 제공하며, 인프라블록체인(InfraBlockchain) 에서 사용됩니다. 블록을 생성하기 위해 슬롯 기반의 예측불가능한(blind) () 합의를 사용해야 합니다.

난수 사용

Randomness 특성은 다음과 같은 난수 생성 사용을 위한 메서드를 제공합니다:

  • random_seed 메서드는 매개변수를 받지 않고 원시 무작위 값을 반환합니다. 이 메서드를 한 블록에서 여러 번 호출하면 매번 동일한 값을 반환합니다. 따라서 대부분의 경우에는 이 메서드를 직접 사용하지 않아야 합니다.

  • random 메서드는 바이트 배열을 컨텍스트 식별자로 사용하고, 기본 난수 생성 소스가 허용하는 한 다른 컨텍스트와 독립적인 결과를 반환합니다.

무작위 값을 필요로하는 팔레트는 난수 생성 소스를 제공할 필요는 없지만, Randomness 특성을 구현하는 난수 생성 소스를 지정해야 합니다.

보안 보장

Randomness 특성은 런타임에서 난수 생성 소스를 정의하기 위한 편리한 추상화를 제공하지만, 특성 자체는 어떠한 보안 보장도 제공하지 않습니다. 난수 생성 소스가 모든 팔레트의 난수 생성 요구 사항을 충족하는지 확인하는 것은 런타임 개발자로서 당신의 책임입니다.

다음 단계로 넘어가기

Randomness
검증 가능한 무작위 함수(VRF)
합의
Randomness
보안이 없는 난수 생성
BABE 팔레트
BABE