본문 바로가기

Web3

web3j (web3 java)에서 isAddress 쓰기


import org.web3j.crypto.Keys;
import org.web3j.crypto.WalletUtils;

...

public boolean isAddress(String address) {
    if (!WalletUtils.isValidAddress(address))
        return false;
    // lower case 는 컨트렉트에서 자동으로 checksum으로 변환된다 따라서 true로 판단한다
    if (address.equals(address.toLowerCase()))
        return true;
    if (address.equals(Keys.toChecksumAddress(address)))
        return true;
    return false;
}

 

WalletUtils.isValidAddress는 그냥 형식만 체크해준다. 대소문자가 잘못돼있어도 글자수만 맞으면 다 true를 반환해주기 때문에 추가 검증이 과정이 필요하다.

web3j엔 checksum인지 판별하는건 따로 없어서 변환을해서 비교해줘야된다.

WalletUtils.isValidAddress, Keys.toChecksumAddress만 체크 해줬을 때는 web3.py나 web3.js랑 결과가 상이했는데

컨트렉트를 때려보니 lowerCase들은 자동으로 Checksum으로 변환해서 사용되는것 같다. 그래서 lowerCase||Checksum 으로 판별을 했더니 web3.py, web3.js의 isAddress와 동일한 결과가 나왔다.

 

처음 알게된 사실이다 좀 더 살펴보겠다.

 

 

https://ethereum.stackexchange.com/questions/111552/can-i-verify-if-given-address-is-a-correct-eth-address-using-web3j-java

 

'Web3' 카테고리의 다른 글

[web3j] getTransactionCount  (0) 2023.01.18