문자열 비교를 stackoverflow 에서 검색하여 아래 코드로 할 수 있다 하여 쓰려고 합니다.
function compare(string memory org, string memory dst) internal pure returns (bool) {
return keccak256(abi.encodePacked(org)) != keccak256(abi.encodePacked(dst));
}
그런데 회사내 다른 개발자 분이 이더리움에서는 되는데 baobab에서는 결과가 다르게 나온다고 하더군요( 같은 문자열을 파라미터로 넣었음에도… 문자열은 영문입니다.)
klaytn 네트웍에서 사용되는 문자열 비교 추천 코드가 있을까요?
Denver
2
@Cocos_No
Klaytn에서 추천해드리는 코드는 별도로 존재하지 않습니다.
회사내 다른 개발자 분이 하신 과정을 재현 가능한 형태로 공유해주시면 관련 내용 확인해보겠습니다.
감사합니다.
아 급하게 올리다 보니 질문이 이상하네요
function compare(string memory org, string memory dst) internal pure returns (bool) {
return keccak256(abi.encodePacked(org)) == keccak256(abi.encodePacked(dst));
}
위 함수를 쓰고 있습니다. 이 코드의 결과값이 kovan과 baobab이 다르다고 합니다.
Denver
4
@Cocos_No
The posting guideline of Klaytn 이 양식에 맞춰서 질문을 공유해주시면 감사하겠습니다.
질문을 해주실 때는 어떤 입력값과 어떤 코드로 테스트를 하셨는지 등을 매우 상세하게 말씀해주셔야 합니다.
또한 맨 처음에 공유해주신 코드와 나중에 공유해주신 코드가 다릅니다.
처음에 공유해주신 코드는 !=
를 비교연산자로 사용하고 있고, 이후에 공유해주신 코드는 ==
비교 연산자를 쓰고 계십니다.
처음에 첨부해주신 코드와 0.8.7 버전의 solc를 활용하여 아래의 컨트랙트 코드를
Baobab에 컴파일해서 배포를 해서 테스트를 해봤구요.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Compare {
function externalCompare(string memory org, string memory dst) public pure returns (bool) {
return compare(org, dst);
}
function compare(string memory org, string memory dst) internal pure returns (bool) {
return keccak256(abi.encodePacked(org)) != keccak256(abi.encodePacked(dst));
}
}
compare.js · GitHub 와 같이 코드 작성해서 테스트를 해보았습니다.
서로 다른 입력값을 넣었을 때 true
가 결과로 나오는 것을 기대했구요, 실제로 테스트를 해보면 기대했던 결과가 잘 나오고 있습니다.
제가 이렇게 답변을 작성한 것처럼 어떤 테스트 절차와 코드를 사용했을 때 말씀하신 결과가 나오는지 등을
상세히 공유해주셔야 제대로 된 문제 해결이 가능합니다.
좋은 답변은 좋은 질문으로부터 나올 수 있는 점 참고 부탁드립니다.
1 Like