[스마트 컨트랙트] 4. Web3, Web3js

adc0612·2022년 10월 21일
0

스마트 컨트랙트

목록 보기
4/4

Web1, Web2, Web3

Web1

Web1은 클라이언트(사용자)가 서버로부터 콘텐츠를 제공받는 것이었다.
클라이언트가 정보를 읽기(Read)만 할 수 있었기 때문에 Information Economy라고도 불렸다.

Web2

AJAX의 등장으로 클라이언트는 서버로부터 단순히 정보를 받기만 하는 것이 아니라, 서버와 상호작용 하면서 서버에 기록(Write)도 할 수 있게 되었다.
인터넷이 정적인 성격에서 동적인 성격으로 변하여 사용자는 정보를 소비할 뿐만 아니라 생성할 수 있게 되었다. 때문에 웹 어플리케이션에서 많은 사용자들을 참여시키는 플랫폼 형태의 어플리케이션이 등장했다.
구글, 페이스북, 아마존과 같은 플랫폼 기업들은 오늘날 우리가 잘 아는 인터넷의 형태를 대표한다.

문제점

기업이 만든 플랫폼을 사용하기 위해 사용자는 자신의 개인정보를 플랫폼에 제공해야 한다.
기업은 플랫폼을 통해 수많은 사람들의 개인정보를 취하고, 개인 정보를 이용해 광고를 하는 등 수익을 낸다.
특정 기업들이 개인정보 보호에 조금이라도 소홀히 다루는 경우, 악의적인 해커에 의해 사용자의 개인정보를 탈취당하는 문제가 있다.

Web3

Web3는 중앙집중적인 플랫폼 이코노미를 벗어나, 모든 참여자가 플랫폼이 될 수 있는 분산형 인터넷을 의미하며, 이를 구현하기 위해 블록체인 기술을 기반으로 한다.
모든 참여자가 플랫폼이 되기 때문에 모든 데이터가 공유되며, 동시에 암호화 기술을 사용해 개인 정보를 제공하지 않고도 사용자는 신원을 식별할 수 있다.

Web3 장점

  • 네트워크에 참여하는 누구나 서비스를 사용하기 위한 권한을 가지고 있다. 반대로 말하자면, 그 누구도 허가를 받을 필요가 없다.
  • 누구도 특정 사용자가 서비스에 접근하지 못하도록 막거나 거부할 수 없다.
  • 결제는 자체 토큰(이더 등)을 사용한다.
  • Web2 플랫폼인 트위터나 페이스북은 중앙 집중화 되어 있기 때문에 관리자가 계정이나 게시글을 검열할 수 있지만, Web3 기반 dApp은 탈중앙화 되어 있기 때문에 누군가가 게시글을 검열하는 것이 불가능하다.
  • Web2 어플리케이션은 중앙 서버가 다운되면 해당 서비스 사용자들이 서비스를 이용하지 못하게 되지만, Web3 서버는 수천 대의 노드로 구성된 분산형 네트워크이기 때문에 특정 노드가 죽어도 서비스는 계속 유지된다.

Web3.js

이더리움을 사용한 블록체인 애플리케이션을 개발한다는 것은 솔리디티 언어를 사용해 스마트 컨트랙트를 개발하거나, 블록체인과 상호작용하는 클라이언트를 개발하는 것을 의미한다.
Web3.js는 이더리움 블록체인과 상호 작용하는 클라이언트를 개발하는 데 사용한다.
Web3.js는 다른 계정으로 이더를 전송하거나, 스마트 컨트랙트에서 데이터를 읽고 쓰거나, 스마트 컨트랙트를 만드는 등 다양한 액션을 수행할 수 있게 해주는 라이브러리의 집합이다.

클라이언트가 이더리움 블록체인과 상호작용하는 방법

이더리움은 여러 노드로 구성된 P2P 네트워크이며 블록체인에 있는 모든 데이터와 코드의 사본을 저장하고 있다.
Web3.js는 네트워크에 있는 데이터를 읽거나 써야 할 때 JSON RPC를 사용해 하나의 이더리움 노드에게 요청을 보낸다.

이더리움에서는 웹에서 클라이언트가 HttpRequest라는 형식에 맞춰 데이터 요청하는 것처럼 클라이언트가 JSON RPC라는 정해진 형식에 맞춰서 이더리움 노드에 데이터를 요청하는 것이다.

Web3.js에는 다음과 같은 다양한 모듈이 있다.

  • web3-eth: 이더리움 블록체인과 스마트 컨트랙트 모듈
  • web3-shh: P2P 커뮤니케이션과 브로드캐스트를 위한 위스퍼 프로토콜 모듈
  • web3-bzz: 탈중앙화 파일 스토리지를 위한 스왐 프로토콜 모듈
  • web3-utils: dApp 개발자를 위한 유용한 헬퍼 함수들을 모아둔 모듈

window.ethereum - 공급자 객체

공급자(provider)는 EIP-1139를 통해, 메타마스크와 같은 지갑 소프트웨어는 웹 페이지에 자바스크립트 객체 형태로 자신의 API를 노출한다.
EIP-1139는 이더리움 공급자 API를 통일하여 지갑 간 상호 운용이 가능하도록 했다.
EIP-1139에서 지정한 이더리움 공급자 객체는 브라우저 내에서 window.ethereum으로 지정되어 있다.

0개의 댓글