3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SolidityでのStringの比較で効率がいい書き方の備忘録

Posted at

Solidityでは文字列の比較は一手間必要

SolidityではStringを比較するときに

function test() public view returns (bool){
    return "" == "";
}

このような書き方をすると、コンパイルエラーが出ます。

Screen Shot 2022-02-03 at 23.20.32.png

TypeError: Operator == not compatible with types literal_string "" and literal_string ""

解決方法

こちらのstackoverflowでは、記事作成時点で下記のようなる回答として下記のような実装がありました。

// 記事作成時点で50いいね
function test() public pure returns (bool) {
    return keccak256(abi.encodePacked("string")) == keccak256(abi.encodePacked("string"));
}

// 記事作成時点で7いいね
function test() public pure returns (bool) {
    return keccak256(bytes("string")) == keccak256(bytes("string"));
}

追加調査

この回答を見てて、abi.encodePackedとbytesのどっちがコードの効率がいいのか気になったので調べてみました。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract CompateAbiEncodePackedAndBytes {

    function execute1() public {
        require(test1());
    }

    function execute2() public {
        require(test2());
    }

    function test1() public pure returns (bool) {
        return keccak256(abi.encodePacked("string")) == keccak256(abi.encodePacked("string"));
    }

    function test2() public pure returns (bool) {
        return keccak256(bytes("string")) == keccak256(bytes("string"));
    }

}

こちらの共有用リンクからすぐテストができます。

abi.encodePackedを使ったコード

to	CompateAbiEncodePackedAndBytes.execute1() 0xd9145CCE52D386f254917e481eB44e9943F39138
transaction cost	21923 gas 

bytesを使ったコード

to	CompateAbiEncodePackedAndBytes.execute2() 0xd9145CCE52D386f254917e481eB44e9943F39138
transaction cost	21499 gas 

ほんの少しですがBytesを使った方がGas効率が良さそうです。NFTを実装する際に、小さなガスコストの節約を積み重ねることで、よりユーザーにとって便利なものが提供できるようになるので、ぜひ試してみてください!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?