Third generation of internet services for websites
Web3는 분산화, 블록체인 기술 및 토큰 기반 경제와 같은 개념을 통합하는 World Wide Web의 새로운 반복에 대한 아이디어이다.
탈중앙화, 콘텐츠 소유권 확대, 의사결정 공동 참여, 개인화 등이 특징이다.
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를 통해 이더리움 블록체인과 소통.
스마트 컨트랙트의 함수와 매개변수를 설명하는 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에서 컨트랙트를 인스턴스화 할 수 있게 된다.
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 통신을 좀 더 쉽게 이용할 수 있다.
사용자들이 이더리움 계정과 개인키를 안전하게 관리할 수 있게 해주는 크롬/파이어폭스 브라우저 확장 프로그램
메타마스크는 web3 라는 전역 자바스크립트 객체를 통해,
브라우저에 Web3 Provider를 주입한다.
기본적으로 Infura 서버를 Web3 프로바이더로 사용할수 있고, 다른 Provider도 선택할 수 있다.
스마트 컨트랙트는 자체적으로 실행되는 코드 조각으로, 특정 조건이 충족될 때 자동으로 실행되는 계약이다.
이더리움 블록체인에서, 이러한 컨트랙트는 트랜잭션을 통해 배포되며, 블록체인 상에 영구적으로 기록된다.