javascript 라이브러리로 JSON-RPC 프로토콜을 통해 Ethereum 노드와 통신하는 기능을 포함하며,
Ethereum Foundation에서 구축.
이더리움 블록체인과 상호 작용하기 위한 것
스마트 계약, 외부 소유 계정 채굴 된 블록 및 트랜잭션과 상호 작용.
ex:) web3.eth.getBalnce, web3.eth.signTransaction 등..
Whisper 프로토콜과 상호 작용하기 위한 것.
메시지를 쉽게 브로드 캐스트하고 저수준 비동기 통신
ex:) web3.shh.post_post, web3.shh.subscribe
Swarm과 상호 작용하기 위한 것.
탈중앙화 애플리케이션을 위해 사진이나 동영상과 같은 파일을 저장하는데 사용.
ex:) web3.bzz.upload
이더리움 노드의 네트워크 속성과 상호 작용하기 위한 것.
web3.net을 통해 획득 해야 하는 정보와 관련된 프로토콜을 사용하고 .net 을 사용하여 검색 가능.(web3.eth.net, web3.shh.net .. )
ex:) web3.net.getID, web3.net.getPeerCount
이더리움 분산 애플리케이션 및 web3.js에서 사용 할 수 있는 유틸리티 기능을 제공
ex:) web3.utils.toWei, web3.utils.isAddress
개발자가 이더리움 네트워크와 통신하고 상호 작용 할 수 있게 해 주는 이더리움 Javascript 라이브러리.
web3.js에 비해 많은 옵션 및 편리하게 사용 할 수 있도록 만들어짐.
이더리움 블록 체인과의 연결을 캡슐화.
쿼리를 발행하고 서명된 트랙잭션을 보내는데 사용.(블록체인의 상태 변경)
ex:) ethers.providers.InfuraProvider, ethers.provider.getBalance
etc: web3.js는 완전히 다른 방식으로 구성되어 있으므로 두 라이브러리의 기능은 매우 유사하지만 모듈간에 항상 명확한 일치가있는 것은 아님.
스마트 계약을 배포하고 상호 작용 하는 것.
스마트 계약에서 발생하는 이벤트를 수신, 기능 호출, 정보 얻기, 배포하는 데 사용.
ex:) ethers.ContractFactory.fromSolidity
데이터 형식화 및 사용자 입력 처리를 위한 유틸리티 함수를 제공.
web3.utils와 유사.
ex:) ethers.utils.getContractAddress
기존 지갑(이더리움 주소)과 연결을 설정하고, 새 지갑을 생성하고, 거래에 서명 할 수 있도록 함.
ex:) ethers.wallet.createRandom, ethers.wallet.getBalance
web3.js가 먼저 생성되어서 자료들이 많지만 인기 성장 속도는 Ethers.js가 높음.
동일한 dApp에 대한 테스트 데이터가 충분하지 않음.
단, 데이터 양이 애플리케이션에 영향을 미치는 경우 데이터 양이 적은 ethers.js 가 유리.
https://blog.infura.io/ethereum-javascript-libraries-web3-js-vs-ethers-js-part-i/
https://ko.0xzx.com/20201208139978.html