‘이더리움 댑 개발’ 세미나 5. 8장. What Is Web3?
이번 세미나는 8장. What Is Web3?를 다룹니다. 진행을 좀 더 원활히 하기 위해 6장, 7장은 9장 다음에 다룹니다.
분량이 적고 이해하기 어려운 내용도 거의 없기 때문에 빠르게 읽습니다.
아래 인용한 본문 내용과 정리 내용을 다시 한 번 읽어 봅니다.
- Web3 is a collection of JS libraries that lets you interact with an Ethereum node remotely or locally. Simply, it provides us with an API to use so we can easily work with the blockchain. Web3 works as a wrapper for JSON RPC to connect to a remote or local Ethereum node with either a HTTP or IPC connection.
- JSON RPC를 직접 호출하는 방식으로 이더리움 노드와 상호작용하는 것은 좀 복잡합니다. 좀 더 쉬운 방법이 필요합니다. wrapper가 필요합니다.
- 오늘날 대부분의 프론트엔드 애플리케이션은 자바스크립트로 작성됩니다. JSON RPC에 대한 자바스크립트 wrapper가 필요합니다.
- Web3 인스턴스는 직접 생성할 수도 있고 다른 애플리케이션에서 주입(injected) 받을 수도 있습니다. 메타마스크는 자신이 실행 중에 있을 때 웹 클라이언트가 실행될 때 브라우저 수준에서 자신이 생성한 인스턴스를 주입해 줍니다.
- If we want to use Web3, we have to set a provider so Web3 knows which node to connect to.
- 예) web3.setProvider(new web3.providers.HttpProvider(‘http://localhost:8545’))
- A Web3 provider will tell your project which node you’ll talk to. Simply, it’s how your project can talk to the blockchain. This can be compared to the URL you might use to make an API call to in a traditional web application. The provider will send our RPC instructions to the correct Ethereum node. There are various different ways to link to a running node. A provider links to a running node such as Parity or Geth. Once you’re connected through a provider, the node can interact with the blockchain.
- 웹 클라이언트가 이더리움과 상호작용한다는 것은 이더리움 네트워크의 어떤 노드와 상호작용한다는 것을 의미합니다. Web3 객체는 이더리움 네트워크의 어떤 노드와 연결한 후 웹 클라이언트와 이더리움 노드 사이에 상호작용이 이루어지도록 하는 것입니다. Web3 객체를 이더리움 노드에 연결하는 것이 Provider입니다.
- web3.currentProvider로 현재 설정된 provider를 구할 수 있습니다.
- 메타마스크는 자신의 설정에 따라 생성된 provider를 자신이 생성한 web3에 설정하고, 그 web3를 웹 클라이언트에 주입합니다. 웹 클라이언트는 별다른 설정이나 생성 과정 없이 web3를 사용해서 메타마스크와 연동하고 이더리움 블록체인과 상호작용합니다.
- 웹 클라이언트와 이더리움 노드사이의 상호작용 유형은 두 가지로 구분할 수 있습니다.
- 이더리움 블록체인에 정보를 쓰기 – send
- 이더리움 블록체인에서 정보를 읽기만 하기 – call
- 웹 클라이언트가 이더리움 노드에서 정보만 읽을 때는 노드에 연결되어 있기만 하면 되지만, 정보를 써야할 때는 서명을 해야 하기 때문에 지갑 기능이 필요합니다. 다시 말하면 웹 클라이언트가 이더리움 노드와 상호작용할 때 어떤 노드에 연결할지만 알고 있다면 읽기만 가능하다는 것입니다.
- 메타마스크는 이러한 점을 잘 캐치했습니다. 메타마스크는 web3를 웹 클라이언트에 주입하고 쓰기가 필요한 경우 지갑 기능을 이용해 트랜잭션 서명과 전송을 합니다. 지금은 너무나 당연한 것처럼 사용하지만, 이러한 방식이 없었을 때 web3를 주입하고, 쓰기가 필요할 때 지갑과 연동해서 트랜잭션을 처리한다는 것은 천재적 발상입니다.
- Web3에서는 promise를 꽤 자주 사용합니다. 그 이유에 대해서 간단하게 아래 본문을 통해 다시 한 번 짚고 넘어가도록 합니다.
- Promises are a concept where something may or may not return a value in the future. We can attach a callback to a promise, which will either return an error if it does not resolve. If we need to make multiple calls, promises are the best solution because they allow us to return the result or an error.