공대생 정리노트

이더리움 개발 스택 본문

블록체인

이더리움 개발 스택

woojinger 2022. 1. 9. 20:06

Reference

https://ethereum.org/en/developers/docs/
 

Home | ethereum.org

Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.

ethereum.org

https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application

 

The Architecture of a Web 3.0 application

The architecture of Web 3.0 applications are completely different from Web 2.0 applications. But all of that’s changing.Blockchain technology has unlocked an exciting new direction for Web 3.0 applications. In this article, we're going to focus on what t

www.preethikasireddy.com


Ethereum Stack

이더리움에서 web3는 블록체인에서 돌아가는 탈중앙화 앱을 가리킨다.

web3는 어플리케이션 상태를 저장하는 중앙화된 데이터베이스나 백엔드 로직이 존재하는 중앙화 웹서버도 없다.

https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application
블록체인이 하나의 거대한 state machine으로서 프로그램의 상태를 저장하고, 스마트 컨트랙트가 블록체인에서 돌아가는 프로그램이자 로직을 정의하는 역할을 한다.
아래 항목들은 web3 어플리케이션을 이루는 스택들에 대해 정리해 보았다.
 

Smart Contract

이더리움 블록체인에서 실행되는 프로그램을 말한다. 스마트 컨트랙트는 이더리움 account의 한 종류이다. 즉 밸런스를 가지고 있고, 네트워크를 통해 트랜잭션을 보낼 수 있다. 다만 유저가 아닌 프로그램에 의해 실행된다는 것이 다른 점이다.
이더리움의 경우 Solidity나 Vyper와 같이 스마트 컨트랙트를 작성할 수 있는 언어를 지원해준다. 어떤 언어를 사용해도 되지만 EVM이 사용할 수 있게 컴파일이 되어야 한다.
스마트 컨트랙트 테스트 프레임워크 및 툴 : Waffle, Solidity-Coveragy, hevm 등
스마트 컨트랙트 배포, 관리 툴 : Remix IDE, Tenderly, Hardhat, Truffle 등
스마트 컨트랙트 보안 관리 툴 : Slither, MythX, Mythril 등

개발망

DApp에 사용할 스마트 컨트랙트를 만들 때 배포 전 로컬 네트워크에 실행해보고 싶을 수가 있다.
이더리움 노드를 로컬로 띄울 수도 있지만, 개발에 최적화된 네트워크가 존재한다. ETH 잔액이 있는 계정을 쓸 수 있다거나 딜레이 없이 트랜잭션을 보내고 받는 등의 기능을 사용할 수 있다.
개발망 프레임워크는 Ganache, Hardhat Network 등이 있다.
 

Providers(이더리움 클라이언트, 노드)

클라이언트는 각 블록의 트랜잭션을 검증해 데이터를 정확하게 유지하는 역할을 한다. 클라이언트 소프트웨어를 실행하는 컴퓨터가 바로 노드가 된다.
프론트엔드 코드는 이더리움 블록체인에 있는 데이터와 코드를 사용하고, 트랜잭션을 실행하기 위해 블록체인의 노드들 중 하나와 상호작용을 해야 한다. 노드를 사용하는 방법은 크게 두 가지가 있다.
(1) 본인의 노드를 만들어 사용한다
(2) Infura, Alchemy, Quicknode 같은 노드를 사용할 수 있는 third-party 서비스를 이용한다.
third-party 서비스를 사용할 때의 장점은 본인이 노드를 셋업하는 복잡한 과정을 할 필요가 없다는 것이다. 특히 Dapp이 커질수록 전체 이더리움 블록체인을 저장하는데 들어가는 코스트가 높아지고, 이는 더 많은 노드를 필요로 해 인프라를 관리하는게 더욱 복잡해진다.
직접 노드를 실행시키면 다른 노드에 의존하지 않고 직접 트랜잭션을 검증할 수 있고, 본인의 주소나 밸런스 등을 다른 노드에게 유출하지 않아도 된다는 장점이 있다. 디앱을 배포할 때 이러한 점이 안정성에 도움이 된다.
클라이언트 소프트웨언어는 다양한 언어로 여러 오픈 소스가 있다. Geth, OpenEthereum, Nevermind, Besu 등이 있다.
 

Signer

Provider가 있으면 블록체인에 접속을 하고 블록체인에 저장된 상태를 읽을 수 있다. 그러나 트랜잭션을 블록체인에 실행시켜 상태를 바꾸려면 한 가지 과정이 더 필요한데, 프리이빗 키로 트랜잭션을 Sign하는 과정이다.
블로그 DApp을 상상해보자. 특정 작가가 쓴 블로그 포스트들을 검색하고 읽는 것은 블록체인에서 읽는 과정이기에 유저가 sign을 할 필요가 없다. 그러나 유저가 새로운 포스트를 체인에 올리고 싶으면, DApp은 유저에게 프리이빗 키로 트랜잭션을 사인할 것을 요청해야 한다.
트랜잭션을 사인하는 툴은 Metamask를 많이 사용한다. Metamask는 유저의 프라이빗 키를 브라우저에 저장해 프론트엔드가 유저에게 트랜잭션을 사인할 것을 요청할 때 대신해준다.
 

Storage(IPFS, SWARM)

블록체인에 데이터를 추가하는 것은 비싸고 시간도 든다. 이는 좋은 유저 경험을 주지 못하기 때문에 IPFS나 SWARM 같은 탈중앙화 오프 체인 스토리지 솔루션을 사용하기도 한다.
탈중앙화 스토리지 시스템은 peer to peer 네트워크로 이루어져 있다. 블록체인 베이스일수도 있고, 별개의 p2p 네트워크일수도 있다.
지속성 메커니즘 / 인센티브 구조에 따른 분류

블록체인 베이스

이더리움 자체가 탈중앙화 스토리지 시스템이지만 대용량의 데이터를 저장하기에는 적합하지 않다. 모든 노드가 블록체인의 데이터를 저장할 수 있어야 하기 때문이다.

컨트랙트 베이스

모든 노드가 데이터를 복사하고 영원히 보관할 수 없다는 것을 인정하고, 컨트랙트의 동의로 데이터를 유지한다. 컨트랙트 동의는 여러 노드들이 데이터의 일부를 특정 기간 동안 보관을 한다는 것이다. 데이터의 계약이 끝날때마다 갱신 혹은 중단해야 한다.
대부분의 경우 모든 데이터를 체인에 저장하는 대신 데이터가 체인에 위치된 곳의 해시가 저장된다.
컨트랙트 베이스의 플랫폼은 filecoin, Skynet, Storj, 0Chain 등이 있다.

기타

 

IPFS는 데이터, 어플리케이션, 웹사이트, 파일 등을 저장하고 접근하기 위한 분산 시스템이다. 인센티브 시스템은 없지만 위의 컨트렉트 베이스 인센티브 솔루션과 함께 사용할 수 있다.
IPFS에서 데이터를 유지하기 위한 또다른 방법은 고정 서비스(pinning service)를 사용하는 것이다. 자체 IPFS 노드를 가동시켜 네트워크에 데이터를 기여할 수 있다.
IPFS, Pinata (IPFS pinning service), web3.storage(IPFS/Filecoin pinning service), Infura (IPFS pinning service)

 

프론트엔드

Web2에서는 프론트엔드를 AWS에 호스트 한다거나 자체 웹서버를 운영해 배포하였었다. Web3에서 이 형태를 똑같이 가져가면 프론트엔드에서 중앙화된 부분이 생기는 것이다(AWS 및 자체 서버가 죽는다면? AWS가 app을 검열한다면?)
그래서 프론트엔드 코드도 IPFS/SWARM을 써서 탈중앙화 스토리지 솔루션으로 배포한다.
 

이더리움 클라이언트 API

이더리움 클라이언트 API를 사용하면 이더리움 노드와 연결하여 블록체인과 상호작용할 수 있다. 이를 위해 모든 이더리움 클라이언트는 JSON-RPC 명세를 지원한다.
 
라이브러리를 사용하면 좀 더 쉽게 다양한 기능을 사용할 수 있다.
  • 이더리움 노드와 연결
  • 지갑을 생성하고 키를 관리 및 트랜잭션 사인
  • 스마트 컨트랙트 함수와 상호작용
  • ETH와 WEI 변동 등의 유틸리티 함수 제공
대표적인 라이브러리로는 Web3.js, Ethers.js, The Graph, light.js 등이 있다.
 

The Graph

블록체인 위에 올려진 스마트 컨트랙트에서 데이터를 읽어야 할 때가 있다. 예를 들어 결제 스마트 컨트랙트라면 결제가 일어날 때 프론트엔드가 알 수 있게 해야한다.

 

스마트 컨트랙트에서 데이터를 읽는 방법은 이벤트와 그래프 방법이 있다.
먼저 이벤트는 스마트 컨트랙트가 실행이 될 때 이벤트를 내보내 프론트엔드가 이 이벤트를 받아 정해진 동작을 할 수 있게 하는 것이다.
하지만 스마트 컨트랙트가 이미 배포되면 수정을 하기가 어렵다. 즉, 이벤트를 수정하거나 추가하려면 재배포를 해야만 한다.

 

The Graph는 이러한 단점을 해결하기 위해 나온 오프체인 솔루션이다. 탈중앙화 인덱싱 프로토콜이고, 개발자가 서버리스 어플리케이션을 만들 수 있게 도와준다.
The Graph는 인덱스할 스마트 컨트랙트의 함수 및 이벤트를 정의하면 프론트엔드가 사용할 수 있게 엔티티로 바꿔 소비할 수 있게 해준다. 개발자들이 GraphQL을 사용해 서브 그래프로부터 쿼리를 해 DApp에 사용할 정보를 얻어올 수 있게 해준다.
Comments