번개멍
Web3j란 무엇인가 본문
Web3J 란 무엇인가
- JAVA를 이용하여 Ethereum 노드에 연결하여 Ethereum 및 SmartContract를 활용할수 있는 라이브러리
특징
- HTTP 및 IPC를 통한 이더리움의 JSON-RPC API 구현
- 이더리움 지갑 지원
- JAVA code를 이용하여 SmartContract create, deploy, transact 를 할수 있다.
- 필터 작업을 위한 반응형 프로그래밍을 지원한다.(WebSocket)
- ENS(이더리움 이름 서비스) 지원
- Infura 지원
- ERC20과 ERC721 기준 토큰 지원
- CLI 지원
설치
Web3j CLI 설치 = https://docs.web3j.io/4.8.7/command_line_tools/
Web3j 의존성 설치
가나슈 설치
npm install -g ganache-cli
Web3j 이용하여 기본 web3 Client Version Check
Web3j web3j = Web3j.build(new HttpService("http://localhost:8545")); //https://polygon-rpc.com
Web3ClientVersion web3ClientVersion = web3j.web3ClientVersion().send();
System.out.println(web3ClientVersion.getWeb3ClientVersion());
Gas Price 확인
public BigInteger getGasPrice() {
Web3j web3j = Web3j.build(new HttpService("https://polygon-rpc.com"));
try {
BigInteger gasPrice = web3j.ethGasPrice().send().getGasPrice();
System.out.println(gasPrice);
return gasPrice;
} catch (Exception e) {
return BigInteger.valueOf(0);
}
}
ERC20 소유량 확인(Wrapper)
소유량 확인을 위해 ERC20 표준 컨트랙트와 이를 Web3j에서 사용하기 위한 변환이 필요합니다.
변환 작업은 solcjs를 이용하여 진행합니다.
- solcjs, web3j CLI install
brew install jq
curl -L get.web3j.io | sh
source $HOME/.web3j/source.sh
생성하고자 하는 컨트랙트를 선택하여 solcjs 를 이용하여 컴파일을 진행한다.
solcjs contracts/ERC20Token.sol --abi --bin
생성된 ABI, BIN 파일을 이용하여 wrappers 를 생성한다.
web3j generate solidity -b contracts_ERC20Token_sol_ERC20Token.bin -a contracts_ERC20Token_sol_ERC20Token.abi -o . -p com
위에서 생성한 wrappers를 이용하여 폴리곤 네트워크에 balanceOf 를 통해 현재 EOA의 특정 토큰의 소유량을 확인할 수 있다.
public ERC20Token erc20Token() {
Web3j web3j = Web3j.build(new HttpService("https://polygon-rpc.com"));
Credentials credential = Credentials.create(privateKey);
ContractGasProvider gasProvider = new DefaultGasProvider();
FastRawTransactionManager manager = new FastRawTransactionManager(
web3j,
credential,
new PollingTransactionReceiptProcessor(web3j, 3000, 3)
);
return ERC20Token.load("0x40f97ec376ac1c503e755433bf57f21e3a49f440", web3j, manager, gasProvider);
}
public void getBalance() throws ExecutionException, InterruptedException {
BigInteger getBalance = erc20Token().balanceOf(eoaAddress).sendAsync().get();
System.out.println(getBalance);
}
현재 소유량을 보여주면 단위가 wai 이기에 wai to ether 9개가 있다.!
Comments