블록 체인 기본 개념과 Ropstem 네트워크 실습
1. 블록체인 분류
유형 | 특징 | 관련 기술 |
---|---|---|
퍼블릭 | 누구나 네트워크에 참여한다. | Bitcoin, Ethereum, Litecoin… |
프라이빗 | 하나의 조직 혹은 기관이 관장하는 네트워크로 승인된 주체만 자료를 읽고 지정 노드만 거래를 승인한다. | Quorum, MultiChain, Iroha, Monax… |
컨소시엄 | 이해 관계자 간에 컨소시엄을 구성하여, 네트워크를 구성하여 네트워크 참여자에 의해 접근을 허용한다. | Hyperledger Fabric, Tendermint, R3 Corda… |
2. 이더리움 네트워크
가장 대중화된 블록체인으로 많은 사람들이 사용하고 있다.
1) 퍼블릭 네트워크?
- 메인넷: 거래소에서 직접 사고파는 이더리움을 거래하고 그 위에서 스마트 컨트랙트등 디앱을 개발할 수 있는 네트워크
- 테스트넷: 메인 넷에 가는 것이 아직 준비 되지 않았을 때, 가볍게 테스트해볼 수 있는 네트워크
네트워크 ID에 맞게 거래를 하거나 트랜잭션을 보낼 수 있다.
Hex | Decimal | Network |
---|---|---|
0x1 | 1 | Ehereum Main Network (Mainnet) |
0x3 | 3 | Ropsten Test Network (실습을 진행할 테스트 네트워크) |
0x4 | 4 | Rinkeby Test Network |
0x5 | 5 | Goerli Test Network |
0x2a | 42 | Kovan Test Network |
:white_check_mark: 프라이빗 네트워크
- 누구나 공개된 Client SW로 프라이빗 네트워크를 구축할 수 있다.
- besu는 엔터프라이즈 환경에 맞게 개량된 Hyperledger의 ethereum 프로젝트이다.
2) 이더리움 클라이언트
클라이언트란 네트워크에 노드로 참여하여, RPC(Remote Procedure Call) 요청을 수신하고 결과를 반환하는 EndPoint이다.
port만 맞으면 거래가 가능하다.
3. Ropsten 실습 환경 준비
1) MetaMask 설치
MetaMask는 이더리움 블록체인 지갑이다. 설치 사이트
- 지갑(wallet)
- 블록체인 네트워크를 사용할 수 있도록 계정의 개인키 (Private Key)를 관리하는 프로그램이다.
- 나를 증명하는 디지털 성명
- 개인키로 Sign하여 트랜잭션을 보낸다.
- 개인 키 생성 절차
- 256bit의 무작위 숫자를 발급한다. (매우 큰 숫자로 중복이 발생할 수가 없다.)
- 64자리의 Hex 값으로 인코딩한다.
- 타원곡선전자서명 알고리즘 (ECDSA, secp256k1)을 사용하여 공개 키를 생성한다. (개인 키로부터 공개 키가 생성된다.)
- Keccak-256 hasing라는 hash 함수를 통해 다시 새로운 값으로 변환한다.
- 변환된 값의 마지막 20Byte에 0x를 앞에 붙여 계정 주소로 사용한다.
2) 계정 생성, 테스트 네트워크 연결
- 계정 생성
- 현재는 메인 네트워크만 볼 수 있는 상태이기 때문에 테스트 네트워크 보기 설정을 on
- 테스트 네트워크 연결
4) 테스트 이더 받기
Ropsten에서 사용할 이더를 받는다.
- Faucet (수도꼭지)
- 테스트넷 환경을 사용할 수 있도록 가치없는 통화를 무료로 제공하는 자금원이다.
- rETH, ROP라고도 불리기도 한다.
- 절차
- ropsten faucet를 검색하여 테스트 이더를 제공하는 사이트에 접속한다.
- 본인의 지갑 주소를 입력하여 테스트이더를 요청한다.
- 테스트 이더가 무한으로 제공되지는 않는다.
- 일정 시간이 지나면 위와 같이 테스트 이더를 받을 수 있다.
4. Ropsten 테스트넷 실습
1) MetaMask에서 트랜잭션 보내기
- 가스비는 중개료이다.
- 가스비에 따라 거래 처리 속도가 다르다.
2) MetaMask Provider 이용하기
프로바이더 (Provider)란 클라이언트를 통해 이더리움 네트워크에 접근할 수 있도록 제공된 Javscript 객체이다.
위의 공식 사이트에 방문하여 크롬 개발자도구를 사용한다.
ethereum
을 console창에 치면 접속되어 있는 ethereum의 정보, 객체를 확인할 수 있다.- 예시
chainId: 0x3
=> ropseten에 접속되어 있는 겻을 확인할 수 있다._metamask
=> metamask를 사용하는 것을 확인할 수 있다.
1
2
3
4
5
6
7
8
9
// 현재 이더리움 네트워크에 연결되었는지 확인
> ethereum.isConnected()
> true
// 이더리움 계정 활성화
> ethereum.enable()
// 현재 활성화된 계정 확인
> ethereum.selectedAddress
isConnected()
: https://docs.metamask.io/guide/ethereum-provider.html#ethereum-isconnected
1
2
3
4
5
6
7
8
9
10
11
12
// Ethereum Provider로 RPC API 보내기
> ethereum.request({
method: "eth_blockNumber",
params:[]
}).then(result=> console.log(result));
> Promise {<pending>}
> 0xc43a3f
> parseInt("0xc43a3f", 16)
> 12859967 // 현재 이더리움 네트워크가 쌓을 블럭의 수
- 현재 네트워크에 블럭이 몇개 쌓여있니?
- https://docs.metamask.io/guide/ethereum-provider.html#ethereum-request-args