[BlockChain] 개념 정리

Jay ·2023년 10월 27일
0

Web3?

Third generation of internet services for websites

Web3는 분산화, 블록체인 기술 및 토큰 기반 경제와 같은 개념을 통합하는 World Wide Web의 새로운 반복에 대한 아이디어이다.

탈중앙화, 콘텐츠 소유권 확대, 의사결정 공동 참여, 개인화 등이 특징이다.

1. Web3.js

Web3.js is a TypeScript implementation of the Ethereum JSON RPC API and related tooling maintained by ChainSafe Systems.

이더리움 기반 Dapp을 만들려고 할 때,
Dapp은 두 종류로 나뉜다.
1. Solidity로 스마트 컨트랙트를 개발
2. 블록체인과 상호작용하는 클라이언트 개발

이 중 두번째에 해당하는 '블록체인과 상호작용하는 클라이언트를 개발'을 위해 Web3.js를 사용한다.

JSON RPC를 통해 이더리움 블록체인과 소통.

ABI(Application Binary Interface)

스마트 컨트랙트의 함수와 매개변수를 설명하는 JSON 객체.

이 JSON 객체(ABI)를 통해 바이트 코드 형태로 존재하는 컨트랙트 함수를 호출하는 구체적인 방법을 알 수 있다.

// ERC20 Interface의 BalanceOf 함수 ABI
{
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },

Web3.js는 주어진 ABI에 기초해서 모든 호출을 EVM이 이해할 수 있는 저수준 명령들로 변환한다.(RPC 통신을 위한)

따라서 ABI는 블록체인 특정 주소에 바이트 코드로 저장되어 있는 컨트랙트와 low level에서 통신할 수 있게 하는 일종의 통신규약이라 할 수 있다.

컨트랙트의 주소와 ABI를 얻게 되면, Web3에서 컨트랙트를 인스턴스화 할 수 있게 된다.

Why Web3.js?

Web3.js는 JSON RPC API와 함께 Ethereum의 표준 API라 할 수 있다.
이더리움 노드와 효율적으로 소통할 수 있도록, Javascript(typescript) 인터페이스로 상호작용할 수 있도록 하는 것이 Web3.js 이다.

CryptoZombies.methods.createRandomZombie("Vitalik Nakamoto 🤔")
  .send({ from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", gas: "3000000" })

Web3.js를 사용하면 위와 같이 JSON RPC 통신을 좀 더 쉽게 이용할 수 있다.

2. MetaMask

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

메타마스크는 web3 라는 전역 자바스크립트 객체를 통해,
브라우저에 Web3 Provider를 주입한다.

기본적으로 Infura 서버를 Web3 프로바이더로 사용할수 있고, 다른 Provider도 선택할 수 있다.

3. 스마트 컨트랙트

스마트 컨트랙트는 자체적으로 실행되는 코드 조각으로, 특정 조건이 충족될 때 자동으로 실행되는 계약이다.

이더리움 블록체인에서, 이러한 컨트랙트는 트랜잭션을 통해 배포되며, 블록체인 상에 영구적으로 기록된다.

profile
Jay입니다.

0개의 댓글