Java | Web3j

장민우·2023년 1월 6일
0

Solidity

목록 보기
1/6

Web3j

web3j 는 자바와 안드로이드에서 Ethereum 과 SmartContract 를 보다 쉽게 활용과 연동을 도와주는 라이브러리 입니다.

web3j 통신은 아래와 같이 이루어 집니다. web3j에서 보여주는 대표적인 특징은 아래와 같습니다.
  • HTTP 및 IPC를 통한 Ethereum의 JSON-RPC 클라이언트 API의 완전한 구현
  • 이더리움 지갑 지원
  • 원시 Java 코드에서 스마트 계약을 생성, 배포, 거래 및 호출하기 위한 Java 스마트 계약 래퍼 자동 생성( Solidity 및 Truffle 정의 형식 지원)
  • 필터 작업을 위한 반응형 기능 API
  • ENS(Ethereum Name Service) 지원
  • OpenEthereum의 Personal 및 Geth의 Personal 클라이언트 API 지원
  • Alchemy 및 Infura 지원 으로 Ethereum 클라이언트를 직접 실행할 필요가 없습니다.
  • ERC20 및 ERC721 토큰 표준 지원
  • 위의 여러 시나리오를 보여주는 포괄적인 통합 테스트
  • 명령줄 도구
  • 안드로이드 호환
  • web3j-quorum 을 통한 JP Morgan의 Quorum 지원

dependency

자바에서 Web3j 라이브러리를 사용하기 위해서 gradle에 등록을 해야합니다. gradle 종속성을 추가합니다.

  • implementation 'org.web3j:core:4.8.7'

Test Code

public class TestCode {

  public String Admin web3j = null;
  private Web3j web3;

  public TestCode() {
  	web3j = Admin.build(new HttpService("infura.io 경로"));
    web3 = Web3j.build(new HttpService("infura.io 경로"));
  }
  public String smartContractDeploy() {

        String contractAddress = "";
        BigInteger gasPrice = new BigInteger("가스비");
        BigInteger gasGwei = Convert.toWei(String.valueOf(gasPrice), Convert.Unit.GWEI).toBigInteger();

        Credentials credentials = Credentials.create("배포를 진행할 계정의 비밀번호 키");
        ContractGasProvider contractGasProvider = new StaticGasProvider(gasGwei, BigInteger.valueOf("최대 가스비"));

        try {
            NftDeploy nftDeploy = NftDeploy.deploy(web3j, credentials, contractGasProvider).send();
           contractAddress = nftDeploy.getContractAddress();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return contractAddress;
    }

}

위와 같이 테스트 코드에서 직접 만든 SmartContract를 자바로 배포하기 위해서는 먼저 배포할 노드와 자바와 연동을 해야 합니다. 노드와 연동을 하기 위해서 직접 노드를 구축하는 방법도 있지만 좀 더 쉽게 infura 지원하는 기능을 사용을 했습니다. 사이트가 궁금하시면 👋 Infura 사이트 눌러주세요.

먼저 배포를 하기 위해서는 블록체인 특성상 코드를 올리거나 작업을 진행할 때 소정의 가스비(gas)가 지불이 돼야 합니다. 그래서 먼저 사용할 가스값을 지정해 주고 가스의 단위를 wei 변경 후 넣어 둡니다.

최종적으로 가스비를 지불해야 하는 계정의 비밀번호 키를 준비해 넣어야 합니다.

준비가 완료되었다면 이제 준비한 SmartContract 코드를 Web3j 라이브러리를 이용하여 따로 클래스를 생성하셔야 합니다. 그 방법은 아래와 같습니다. 👇

  • 1번째 해당 Solidity로 구성된 파일의 명령 프롬프트로 넘어 갑니다.
  • 해당 프롬프트에서 solc <계약>.sol --bin --abi --optimize -o <출력 디렉토리>/ 명령을 실행합니다.
  • 그 후 web3j solidity -b /path/to/<스마트 계약>.bin -a /path/to/<스마트 계약>.abi -o /path/to/src/main/java -p com.your.organisation. 경로 실행을 하면 Java에서 클래스가 생성 된 것을 볼 수 있습니다.

이처럼 모든 준비가 끝났다면 준비 했던 변수들을 이용해 스마트컨트랙트를 배포하실 수 있습니다

결과 화면

글을 마치며..

오늘은 간단하게 Java에서 Web3j를 이용해 테스트 넷과 연동하여 배포까지 하는 방법을 알아봤습니다.
Web3j 라이브러리는 형식이 다 비슷하여 위에 코드만 정확히 이해를 하시면 어떤 기능이든 쉽게 개발을 할 수 있습니다.
처음엔 자바로 연동을 해야 할까?라는 의문을 많이 가지고 구글에 많은 검색을 해 보았지만 자료가 충분하지 않아, 어려움이 존재했습니다.

그래서 이렇게 조금이나마 도움이 되고자 글을 작성하게 됐습니다. 추가적으로 더 궁금하신 내용이 있다면 댓글을 달아주시면 해당 내용에 관한
코드를 작성해 보겠습니다. 오늘도 긴 글 읽어주시느라 감사합니다 🙇🏻🙇🏻
profile
꿈틀대는꼬마개발자

0개의 댓글