CryptoZombies 6

띠로리·2021년 3월 20일
0

Web3.js

이더리움 재단에서 만든 자바스크립트 라이브러리

이더리움 네트워크는 노드로 구성되어 있고, 각 노드는 블록체인의 복사본을 가지고 있다.
만약 스마트 컨트랙트의 함수를 실행하고자 한다면 노드중 하에 다음과 같은 내용을 전달해야한다.

  1. 스마트 컨트랙트 주소
  2. 실행하고자 하는 함수
  3. 그 함수에 전달하고자 하는 변수들

Web3 프로바이더(Provider)

어떤 노드와 통신을 해야하는지 설정하는 것.
(like 웹 앱에서 api 호출을 위하여 원격 웹 서버의 url을 설정)

Infura

빠른 읽기를 위한 캐시 계층을 포함하는 다수의 이더리움 노드를 운영하는 서비스

  • 이를 통해서 유지하는데 신경쓸 필요없이 이더리움 블록체인과 메세지를 주고받을 수 있음.

Metamask(메타마스크)

사용자들이 이더리움 계정과 개인 키를 안전하게 관리할 수 있게해주는 크롬과 파이어폭스의 확장 프로그램.

ABI

ABI는 프로그램 모듈 사이의 인터페이스로 컨트랙트에서 함수를 호출하고 데이터를 다시 가져오는 방법.

Web3.js는 컨트랙트의 함수를 호출하기 위해서 2가지 메소드를 가지고 있다.

call

call은 view와 pure 함수를 위하여 사용한다.

  • 로컬 노드에서만 실행하고, 블록체인에 트랜잭션하지는 않는다.

Send

send는 트랜잭션을 만들고 블록체인 상의 데이터를 변경한다.
view, pure가 아닌 모든 함수에 대해서는 send를 사용한다.

  • 트랜잭션을 send하는 것은 사용자에게 가스를 지불하도록 한다.

데이터 받기

Solidity에서 public으로 변수를 선언하면 자동으로 같은 이름의 퍼블릭 “getter” 함수를 만들어 냄
따라서 ID 15인 좀비를 찾으려면, zombies(15)와 같이 변수를 함수인 것처럼 호출하면 됨

메타마스크에서 사용자 계정 가져오기

메타마스크는 확장 프로그램 안에서 사용자들이 다수 계정을 관리할 수 있도록 함
주입되어 있는 web3 변수에 현재 활성화된 계정이 무엇인지 확인할 수 있음

트랜잭션 보내기

send 함수를 이용해 스마트 컨트랙트의 데이터를 변경하는 방법
call 함수와는 다른 부분이 있음

  1. 트랜잭션을 전송(send)하려면, 함수를 호출한 사람의 from 주소가 필요함(Solidity 코드에서는 msg.sender)
  • 함수를 호출한 사람은 DApp의 사용자가 될 것이므로
  • 메타마스크가 나타나 서명을 하도록 하게 됨
  1. 트랜잭션 전송(send)은 가스를 소모함
  2. 사용자가 트랜잭션 전송을 하고 난 후 실제 블록체인에 적용시까지는 상당한 지연이 발생함
    트랜잭션이 블록에 포함될 때까지 기다려야 함
    이더리움의 평균 블록 시간이 15초임
    만약 이더리움에 보류중 거래가 많거나
    사용자가 가스 가격을 지나치게 낮게 보낸 경우
    트랜잭션에 블록이 포함되길 기다려야 하고 이는 몇 분씩 걸릴 수 있음
profile
제 소개를

0개의 댓글