Web3j
Web3j
Web3j 이란 무엇인가
- 이더리움과 통신하거나 스마트컨트랙트를 배포 및 호출하는 등 전반적인 클라이언트 기능을 구현할 수 있도록 제공하는 고도로 모듈화된 반응형 JAVA 및 ANDROID 라이브러리이다.
- 비슷한 종류로 노드기반의 Web3js가 존재한다.
- ERC20, ERC721 토큰을 지원한다.
- 이더리움의 JSON-RPC 클라이언트 API의 완벽한 구현
- 이더리움 지갑 서포트
- JAVA 코드에서 스마트 계약 생성, 배포, 거래 및 호출하기 위한 JAVA 스마트 계약 wrapper 자동 생성 ( Solidity 및 Truffle 정의 형식 지원 )
- ENS ( Ethereum Name Service ) 제공
- ethereum filter의 Reactive-functional API 제공
- Parity 와 Geth의 Personal client API 제공
- Infura 지원
- Command lien Tools 제공
- 안드로이드 제공
Wrapper 기능
- web3j는 스마트컨트랙트의 Wrapper 기능을 제공한다.
- Wrapper는 Solidity로 구현되어 있는 스마트 컨트랙트를 자바 기반으로 변환 시켜 Web3j에서 손쉽게 스마트 컨트랙트를 호출 할 수 있게 한다.
- 물론 Wrapper 없이 호출할 수 있지만 많은 소스가 추가되어야 하고 가독성도 좋지 못하다.
Web3j Java에 설정하고 Test 해보기
dependency 설정
-
Gradle
- java
implementation ('org.web3j:core:4.8.7')
- android
implementation ('org.web3j:core:4.8.7-android')
-
maven
- java 8
<dependency> <groupId>org.web3j</groupId> <artifactId>core</artifactId> <version>4.8.7</version> </dependency>
- android
<dependency> <groupId>org.web3j</groupId> <artifactId>core</artifactId> <version>4.8.7-android</version> </dependency>
Test 코드 작성
package com.example.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.methods.response.Web3ClientVersion;
import org.web3j.protocol.http.HttpService;
@RunWith(SpringRunner.class)
@SpringBootTest
public class EthServiceTest {
@Test
public void getEthClientVersionSync() throws Exception
{
HttpService httpService = new HttpService();
// default port인 8545를 바꿔야 한다면 new HttpService("url입력") 하면 된다.
Web3j web3j = Web3j.build(new HttpService());
Web3ClientVersion web3ClientVersion = web3j.web3ClientVersion().send();
System.out.println(web3ClientVersion.getWeb3ClientVersion());
}
@Test
public void getEthClientVersionASync() throws Exception
{
Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/
Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().sendAsync().get();
System.out.println(web3ClientVersion.getWeb3ClientVersion());
}
@Test
public void getEthClientVersionRx() throws Exception
{
Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/
web3.web3ClientVersion().flowable().subscribe(x -> {
System.out.println(x.getWeb3ClientVersion());
});
Thread.sleep(5000);
}
}
- ganache-cli를 켜고 테스트를 한다.
# 8545 port로 실행
ganache-cli -d -m -p 8545 -a 5
- 정상동작 확인