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
  • 시작하기 전에
  • 제네시스 구성
  • Frontier 노드 컴파일하기
  • 노드에 연결하기
  • RPC를 사용하여 잔액 조회하기
  • 스마트 컨트랙트 배포하기
  • 스마트 컨트랙트 보기
  • 계정 스토리지 보기
  • 토큰 전송하기
  • 토큰 전송 확인하기
  • 다음 단계로 넘어가기
  1. 인프라블록체인
  2. 배우기
  3. Substrate
  4. 튜토리얼
  5. 유용한 도구들

EVM 계정에 접근하기

Substrate 블록체인 노드를 통해 이더리움 기반 계정과 스마트 컨트랙트에 접근하는 방법을 설명합니다.

Previous유용한 도구들Next이더리움 통합

Last updated 1 year ago

이 튜토리얼은 프로젝트의 크레이트를 사용하여 이더리움 기반 계정에 접근하고 솔리디티 기반 스마트 컨트랙트를 실행할 수 있는 이더리움 호환 블록체인을 구축하는 방법을 설명합니다. Frontier 프로젝트의 두 가지 주요 목표는 다음과 같습니다:

  • 로컬 Substrate 노드를 사용하여 수정하지 않은 상태로 이더리움 탈중앙화 앱을 실행합니다.

  • 이더리움 메인 네트워크에서 상태를 가져옵니다.

이 튜토리얼은 작동 환경을 제공하기 위해 미리 정의된 노드 템플릿을 사용합니다. 이 템플릿은 의 지침을 사용하여 생성되었습니다.

자체적으로 독립적인 템플릿을 생성하려면 템플릿 생성 스크립트를 사용할 수 있습니다. 저장소에서 직접 노드를 빌드하거나 템플릿 생성 스크립트를 사용하여 자체적으로 노드를 빌드하는 경우, Frontier는 자체 버전의 Substrate 크레이트를 사용하므로 Cargo 파일의 종속성을 프로젝트의 종속성과 일치하도록 업데이트해야 할 수도 있습니다.

시작하기 전에

이 튜토리얼을 시도하기 전에 다음 Substrate 튜토리얼을 완료해야 합니다:

튜토리얼을 통해 다음 작업을 수행하는 방법에 익숙해져야 합니다:

  • Substrate 블록체인 노드 실행하기.

  • 런타임에서 팔렛 추가, 제거 및 구성하기.

  • Polkadot-JS 또는 다른 프론트엔드를 사용하여 노드에 연결하여 트랜잭션 제출하기.

이 튜토리얼을 시작하기 전에 다음 사항에도 익숙해져야 합니다:

  • 이더리움 핵심 개념과 용어

  • 이더리움 가상 머신 (EVM) 기본 개념

  • 탈중앙화 앱과 스마트 컨트랙트

  • 팔렛 설계 원칙

제네시스 구성

Frontier 노드 컴파일하기

Frontier 노드 템플릿을 컴파일하려면 다음 단계를 따르세요:

  1. 컴퓨터에서 터미널 쉘을 엽니다.

  2. 다음 명령을 실행하여 노드 템플릿 저장소를 복제합니다:

    git clone https://github.com/substrate-developer-hub/frontier-node-template.git
  3. 다음 명령을 실행하여 노드 템플릿 디렉토리의 루트로 이동합니다:

    cd frontier-node-template
  4. 다음 명령을 실행하여 노드 템플릿을 컴파일합니다:

    cargo build --release

노드에 연결하기

노드를 컴파일한 후, 미리 구성된 EVM 계정을 탐색하기 위해 노드를 시작해야 합니다.

로컬 Substrate 노드를 시작하려면 다음 단계를 따르세요:

  1. 필요한 경우 로컬 컴퓨터에서 터미널 쉘을 엽니다.

  2. frontier-node-template을 컴파일한 루트 디렉토리로 이동합니다.

  3. 다음 명령을 실행하여 개발 모드에서 노드를 시작합니다:

    ./target/release/frontier-template-node --dev

    --dev 명령줄 옵션은 노드가 미리 정의된 development 체인 사양을 사용하여 실행되도록 지정합니다. 이 사양에는 alice와 테스트용 다른 계정이 포함되어 있습니다.

  4. 터미널에 표시된 출력을 확인하여 노드가 성공적으로 실행되었는지 확인합니다.

    터미널에는 다음과 유사한 출력이 표시됩니다:

    2022-07-08 10:06:42 Frontier Node
    2022-07-08 10:06:42 ✌️  version 0.0.0-1b6bff4-x86_64-macos
    2022-07-08 10:06:42 ❤️  by Substrate DevHub <https://github.com/substrate-developer-hub>, 2021-2022
    2022-07-08 10:06:42 📋 Chain specification: Development
    2022-07-08 10:06:42 🏷  Node name: flippant-boat-0444
    2022-07-08 10:06:42 👤 Role: AUTHORITY
    ...
  5. Settings를 클릭한 다음 Developer를 클릭합니다.

  6. 다음 계정 정보를 정의하여 EVM Account 유형을 생성하고 계정이 트랜잭션을 보내고 블록을 검사할 수 있도록 활성화합니다.

    트랜잭션을 보내려면 Address와 LookupSource 설정을 정의해야 합니다. 블록을 검사하려면 Transaction과 Signature 설정을 정의해야 합니다.

    {
       "Address": "MultiAddress",
       "LookupSource": "MultiAddress",
       "Account": {
          "nonce": "U256",
          "balance": "U256"
       },
       "Transaction": {
          "nonce": "U256",
          "action": "String",
          "gas_price": "u64",
          "gas_limit": "u64",
          "value": "U256",
          "input": "Vec<u8>",
          "signature": "Signature"
       },
       "Signature": {
          "v": "u64",
          "r": "H256",
          "s": "H256"
       }
    }
  7. Save를 클릭합니다.

RPC를 사용하여 잔액 조회하기

EVM 계정에 대한 설정을 구성한 후, Polkadot-JS 애플리케이션을 사용하여 alice의 EVM 계정에 대한 정보를 확인할 수 있습니다.

  1. Developer를 클릭한 다음 RPC calls를 선택합니다.

  2. Submission 탭에서 호출할 엔드포인트로 eth를 선택합니다.

  3. 호출할 함수 목록에서 **getBalance(address, number)**를 선택합니다.

  4. 주소에 alice 계정을 위한 EVM 계정 식별자를 지정합니다.

  5. Submit RPC call을 클릭합니다.

    호출은 다음과 유사한 출력을 반환해야 합니다:

    2: eth.getBalance: U256
    340,282,366,920,938,463,463,374,607,431,768,210,955

스마트 컨트랙트 배포하기

  1. ERC-20 계약을 생성합니다.

  2. Developer를 클릭한 다음 Extrinsics를 선택합니다.

  3. ALICE 개발 계정을 트랜잭션을 제출하는 데 사용할 계정으로 선택합니다.

  4. evm을 선택합니다.

  5. create 함수를 선택합니다.

  6. 함수에 대한 매개변수를 구성합니다.

    이에 대해
    이렇게 지정

    source

    0xd43593c715fdd31c61141abd04a99fd6822c8558

    init

    MyToken.json의 raw bytecode 16진수 값

    value

    0

    gasLimit

    4294967295

    maxFeePerGas

    100000000

    선택적인 매개변수는 비워둘 수 있습니다. nonce의 값은 0x0부터 시작하여 소스 계정의 알려진 nonce를 증가시킵니다. 선택한 함수에 따라 사용하지 않는 매개변수를 제거해야 할 수도 있습니다.

  7. Submit Transaction을 클릭합니다.

  8. 트랜잭션을 승인하기 위해 Sign and Submit을 클릭합니다.

스마트 컨트랙트 보기

  1. Network를 클릭한 다음 Explorer를 선택합니다.

  2. evm.Created 이벤트를 클릭하여 새로 생성된 계약의 주소가 0x8a50db1e0f9452cfd91be8dc004ceb11cb08832f인지 확인합니다.

    브라우저의 개발자 도구 콘솔에서도 트랜잭션에 대한 세부 정보를 확인할 수 있습니다.

    EVM 계약 주소는 계약 생성자의 계정 식별자와 nonce에 따라 결정되므로, 계약이 배포된 주소는 잘 알려진 alice 계정의 계정 식별자 0xd43593c715fdd31c61141abd04a99fd6822c8558와 nonce 0x0을 사용하여 계산됩니다.

  3. Developer를 클릭한 다음 Chain State를 선택합니다.

  4. 상태로 evm을 선택하고 accountCodes를 선택합니다.

  5. alice 계정을 위한 계정 식별자 0xd43593c715fdd31c61141abd04a99fd6822c8558를 지정하고 계정 코드가 비어 있는지 확인합니다 (0x).

  6. alice 개발 계정을 사용하여 배포한 계약 주소 0x8a50db1e0f9452cfd91be8dc004ceb11cb08832f를 지정하고 계약 계정 코드가 Solidity 계약의 바이트코드인지 확인합니다.

계정 스토리지 보기

스마트 컨트랙트와 관련된 계정 스토리지를 조회하려면 다음 단계를 따르세요:

  1. 상태로 evm을 선택하고 accountStorages를 선택합니다.

  2. 첫 번째 매개변수로 ERC-20 계약 주소 0x8a50db1e0f9452cfd91be8dc004ceb11cb08832f를 지정합니다.

  3. 두 번째 매개변수로 읽을 스토리지 슬롯을 지정합니다. 0x045c0350b9cf0df39c4b40400c965118df2dca5ce0fbcf0de4aafc099aea4a14입니다.

    반환된 값은 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff입니다.

    계약을 배포한 후 alice 계정의 잔액을 확인하면 계정에서 수수료가 인출되었으며 getBalance(address, number) 호출은 다음과 유사한 값을 반환합니다:

    340,282,366,920,938,463,463,374,603,530,233,757,803

토큰 전송하기

지금까지 alice 개발 계정만 사용했습니다. 다음 단계는 배포한 계약을 사용하여 토큰을 다른 계정으로 전송하는 것입니다.

  1. Developer를 클릭한 다음 Extrinsics를 선택합니다.

  2. ALICE 개발 계정을 트랜잭션을 제출하는 데 사용할 계정으로 선택합니다.

  3. evm을 선택합니다.

  4. ERC-20 계약에서 transfer(address, uint256) 함수를 호출하기 위해 call을 선택합니다.

  5. 함수에 대한 매개변수를 구성합니다.

    이에 대해
    이렇게 지정

    source

    0xd43593c715fdd31c61141abd04a99fd6822c8558

    target

    0x8a50db1e0f9452cfd91be8dc004ceb11cb08832f

    input

    0xa9059cbb0000000000000000000000008eaf04151687736326c9fea17e25fc528761369300000000000000000000000000000000000000000000000000000000000000dd

    value

    0

    gasLimit

    4294967295

    maxFeePerGas

    100000000

    source는 토큰을 보유한 계정을 나타냅니다. 이 경우 source는 계약 생성자인 alice의 EVM 계정입니다. target은 alice에서 bob으로 토큰을 전송하기 위한 계약 주소입니다.

    input 매개변수는 전송을 수행하는 EVM ABI로 인코딩된 함수 호출을 지정합니다. (0xa9059cbb) 및 함수에서 필요한 인수입니다. 이 함수의 인수는 bob EVM 계정 식별자 (0x8eaf04151687736326c9fea17e25fc5287613693)와 전송할 토큰 수 (221 또는 16진수로 0xdd)입니다.

  6. Submit Transaction을 클릭합니다.

  7. 트랜잭션을 승인하기 위해 Sign and Submit을 클릭합니다.

토큰 전송 확인하기

  1. Network를 클릭한 다음 Explorer를 선택합니다.

  2. evm.Executed 이벤트를 클릭하여 실행된 계약의 주소가 0x8a50db1e0f9452cfd91be8dc004ceb11cb08832f인지 확인합니다.

  3. Developer를 클릭한 다음 Chain State를 선택합니다.

  4. 상태로 evm을 선택하고 accountStorages를 선택합니다.

  5. alice 개발 계정을 사용하여 배포한 계약 주소 0x8a50db1e0f9452cfd91be8dc004ceb11cb08832f의 스토리지를 확인하고 스토리지 슬롯 0x045c0350b9cf0df39c4b40400c965118df2dca5ce0fbcf0de4aafc099aea4a14를 확인합니다.

    0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff22

    계약을 배포한 후 alice 계정의 잔액을 확인하면 계정에서 수수료가 인출되었으며 getBalance(address, number) 호출은 다음과 유사한 값을 반환합니다:

    340,282,366,920,938,463,463,374,603,530,233,366,411

다음 단계로 넘어가기

frontier-node-template의 개발용 은 alice 계정을 위한 EVM 계정이 미리 구성된 제네시스 블록을 정의합니다. 개발 모드에서 이 노드를 시작하면 alice의 EVM 계정에 기본 이더 양이 제공됩니다. 이 계정을 사용하여 EVM 계정 세부 정보를 보고 이더리움 스마트 컨트랙트를 호출할 수 있습니다. 노드를 시작한 후 을 사용하여 alice의 EVM 계정 세부 정보를 확인할 수 있습니다.

은 Substrate에서 바로 개발을 시작할 수 있는 작동하는 개발 환경을 제공합니다.

을 사용하여 로컬 노드에 연결합니다.

노드가 실행 중이고 이 노드에 연결되어 있는지 확인합니다.

미리 정의된 계정 주소는 0xd43593c715fdd31c61141abd04a99fd6822c8558입니다. 이 주소는 를 사용하여 alice 계정의 공개 키에서 계산된 주소입니다.

이더리움 주소의 잔액을 조회하는 방법을 확인했으므로, 이더리움 스마트 컨트랙트를 배포하고 호출하여 관련 기능을 테스트해볼 수 있습니다. 이 튜토리얼에서는 샘플 계약을 사용하여 을 정의하는 계약을 배포합니다. Polkadot JS SDK와 를 사용하여 ERC-20 토큰 계약을 생성할 수도 있습니다.

편의를 위해 의 컴파일된 bytecode를 사용하여 Substrate 블록체인에 계약을 배포합니다.

노드가 실행 중이고 이 노드에 연결되어 있는지 확인합니다.

트랜잭션을 제출한 후, 계약이 네트워크에 배포되고 을 사용하여 계약에 대한 정보를 확인할 수 있습니다.

노드가 실행 중이고 이 노드에 연결되어 있는지 확인합니다.

배포한 ERC-20 계약은 을 기반으로 합니다. 이 계약에는 최대 토큰 수를 생성하고 계약 생성자와 연결된 계정에 저장하는 생성자가 포함되어 있습니다.

슬롯은 슬롯 0과 alice 계정의 계정 식별자 0xd43593c715fdd31c61141abd04a99fd6822c8558을 기반으로 를 사용하여 계산된 것입니다.

노드가 실행 중이고 이 노드에 연결되어 있는지 확인합니다.

이 튜토리얼에서는 를 사용하여 입력 값을 계산했습니다.

트랜잭션을 제출한 후, 을 사용하여 토큰 전송을 확인할 수 있습니다.

노드가 실행 중이고 이 노드에 연결되어 있는지 확인합니다.

Frontier
Frontier 릴리스 가이드
node-template-release.sh
frontier
로컬 블록체인 구축
런타임에 팔렛 추가
사용자 정의 팔렛에서 매크로 사용
체인 사양
Polkadot-JS 애플리케이션
Frontier 노드 템플릿
Polkadot-JS 애플리케이션
Polkadot-JS 애플리케이션
Substrate EVM 유틸리티
Truffle
ERC-20 토큰
Typescript
MyToken.json
Polkadot-JS 애플리케이션
Polkadot-JS 애플리케이션
Polkadot-JS 애플리케이션
OpenZeppelin ERC-20 구현
Substrate EVM 유틸리티
Polkadot-JS 애플리케이션
Remix 웹 IDE
Polkadot-JS 애플리케이션
Polkadot-JS 애플리케이션
Moonbeam: 이더리움 호환성
이더리움 통합
EVM ABI 사양
ERC-20 토큰 표준
Developer settings
Successful contract created event
Successful execution event