문자열 비교는 어떤 코드를 사용해야 하나요?

문자열 비교를 stackoverflow 에서 검색하여 아래 코드로 할 수 있다 하여 쓰려고 합니다.

    function compare(string memory org, string memory dst) internal pure returns (bool) {

        return keccak256(abi.encodePacked(org)) != keccak256(abi.encodePacked(dst));

    }

그런데 회사내 다른 개발자 분이 이더리움에서는 되는데 baobab에서는 결과가 다르게 나온다고 하더군요( 같은 문자열을 파라미터로 넣었음에도… 문자열은 영문입니다.)

klaytn 네트웍에서 사용되는 문자열 비교 추천 코드가 있을까요?

@Cocos_No

Klaytn에서 추천해드리는 코드는 별도로 존재하지 않습니다. :slight_smile:

회사내 다른 개발자 분이 하신 과정을 재현 가능한 형태로 공유해주시면 관련 내용 확인해보겠습니다.

감사합니다.

아 급하게 올리다 보니 질문이 이상하네요

function compare(string memory org, string memory dst) internal pure returns (bool) {

    return keccak256(abi.encodePacked(org)) == keccak256(abi.encodePacked(dst));

}

위 함수를 쓰고 있습니다. 이 코드의 결과값이 kovan과 baobab이 다르다고 합니다.

@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 가 결과로 나오는 것을 기대했구요, 실제로 테스트를 해보면 기대했던 결과가 잘 나오고 있습니다.

제가 이렇게 답변을 작성한 것처럼 어떤 테스트 절차와 코드를 사용했을 때 말씀하신 결과가 나오는지 등을
상세히 공유해주셔야 제대로 된 문제 해결이 가능합니다.

좋은 답변은 좋은 질문으로부터 나올 수 있는 점 참고 부탁드립니다. :slight_smile:

1개의 좋아요