블록체인 정보 맛보기 블록체인 [이더리움을 통해 맛보기] (1)
포스트
취소

블록체인 [이더리움을 통해 맛보기] (1)

1. 이더리움, 트랜잭션

우리의 목적은 빠르게 이더리움을 이해하고 실사용을 해보는 것입니다.

이더리움은 온라인상에서 인터넷으로 이어진 노드들로(여러 컴퓨터) 유지되고 있는 분산 데이터베이스의 일종이라 생각하면 되는데


이더리움 메인넷에서 접속되는 클라이언트 종류들의 통계는 다음과 같습니다. 접속 클라이언트 통계

  • 여기서 클라이언트란?
    • 네트워크 노드로 참여하는 끝단을 말함
    • RPC(Remote Procedure Call)요청을 송신하고 결과를 수신받는 엔드포인트임

클라이언트들은 여러 종류가 있는데 우리가 여기서 테스트를 해볼 클라이언트는 Besu입니다. Besu는 이더리움의 클라이언트 소프트웨어를 개조해 퍼블릭 및 프라이빗 네트워크 방식의 사용 모두를 위해 기업 친화적으로 설계된 클라이언트라고 합니다.

  • 프라이빗 네트워크
    • 공개되어 있는 클라이언트 소프트웨어로 프라이빗 네트워크 구축 가능
    • besu는 엔터프라이즈 환경에 맞게 개량된 하이퍼렛저의 이더리움 프로젝트

우리는 이제 이를 직접 사용해보기 위해 테스트넷을 사용해볼 것인데 퍼블릭 네트워크가 이제 진짜 현금성 가치를 가지는 거래가 이루어지는 네트워크라고 한다면 테스트넷은 테스트용으로 완전히 분리된 별도의 네트워크입니다. (그리고 이더 테스트넷은 이더 가격이 무료임!)

그 중에서 우린 Ropsten 테스트넷에서 요청, 트랜잭션을 처리해볼 예정입니다.




2. Ropsten 실습 환경 준비

MetaMask 지갑

  • 지갑이란? 블록체인 네트워크를 사용할 수 있도록 계정의 개인키(private key)를 관리하는 프로그램
    • 개인키로 사인(sign)하여 트랜잭션을 보냄
  • 계정 생성 절차(내부 원리)

    • 계정 생성 절차는 [Mastering Ethereum] 3장 키와 주소, 이 포스트를 참고하시면 도움이 될 것 같습니다. 간단 정리

      1. 개인키 생성

        256bit의 무작위 숫자 -> 64자리

      2. 타원곡선전자서명 알고리즘(ECDSA, secp256)
      3. Keccak-256 hashing

        마지막 20Byte를 떼서 계정주소로 사용

      4. 계정주소 완성

이 포스트의 목적을 위해 지갑과 네트워크를 쉽게 사용하려면 우선 메타마스크의 설치 및 설정과정들이 필요합니다.

  • 메타마스크 확장 프로그램 설치(Chrome)

메타마스크 설치 > 메타마스크 연결

  • Ropsten 테스트넷 네트워크 연결을 위한 준비

Ropsten 네트워크 연결 준비

  • 테스트넷 옵션 활성화

테스트넷 옵션 활성화

이 옵션 활성화 하면 이더리움 메인넷 클릭시 다른 테스트 네트워크가 보인다.

여기서 Ropsten 테스트 네트워크를 클릭하자

  • Faucet으로 ETH받기

구매 버튼

Faucet으로 ETH받기

초록 버튼을 누르면 ETH가 들어옴



3. 실제로 RPC 보내고 결과 수신 받아보기

이제 사전 준비가 모두 끝났습니다! 실제로 지갑으로 거래가 가능한 상태입니다.

여기서 메타마스크의 기능을 십분 활용하기 위해 이더리움 프로바이더를 사용할 것 입니다.

  • 프로바이더(Provider)란?
    • 클라이언트를 통해 이더리움 네트워크에 접근할 수 있도록 제공된 Javascript 객체(Object)
    • 이더리움 Provider로 RPC 요청하기(실습 부분
    • Provider
    • 크롬 메타마스크 확장프로그램이 깔려있는 상태에서 F12 Console창에서 ethereum이란 키워드를 쳐보시면 확인하실 수 있습니다.

메타마스크 Docs

이 Console창에서 사용 가능한 모든 메타마스크 명령어는 메타마스크 DOCS에서 제공되고 있습니다. Provider

우리가 여기서 봐야할 것은 이더리움 프로바이더의 메서드입니다. Provider

이제 여기서 명시되어 있는 방법대로 이더리움의 맨 마지막 블럭의 번호를 한 번 조회해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
ethereum
  .request({
    method: "eth_blockNumber",
    params: [],
  })
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    // If the request fails, the Promise will reject with an error.
  });
parseInt("0xb70b6d", 16);

Provider

결과가 잘 나오네요. 이더리움 프로바이더에서 RPC를 제대로 송신하고 수신을 받아냈습니다.

수신된 값은 16비트로 표현된 값이므로 parseInt를 통해 해석해줘야 합니다

여기서 Promise로 되어 있는 결과값은 비동기적인 메서드를 호출할 때 값을 받아온다는 일종의 약속을 말하는 것인데

이 게시글에서 다룰 내용은 아닌 것 같고 관련해서 더 궁금하신 분들은 찾아보시면 좋을듯 합니다.


물론 이런 단순한 것들 이외에도

wallet_getPermissions로 메타마스크의 권한을 얻고 eth_sendTransaction으로 트랜잭션을 보낼 수도 있습니다.

더 많은 것들을 해보고 싶으신 분들은

메타마스크 DOCS

메타마스크 API 놀이터

참고하시면 좋을듯 합니다.


감사합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

-

블록체인 [이더리움을 통해 맛보기] (2)