keccak256() in Solidity v0.5.0

in #ethereum5 years ago (edited)

cover.001.png

諸事情により、実験的に steemit で軽く記事を書いていこうと思います。

ということで、まずは比較的キャッチーなネタである Solidity v0.5.0 Breaking Changes の中から気になったものをピックアップしていくシリーズでもやってみようかなと。続くかなこれ。不安です。

今回は、keccak256() の引数についてです。



サンプルコード


v0.4.25



Warning は出ますが、複数の引数を渡せました。

 keccak256(...) returns (bytes32)



実際のコードは以下のような感じになります。

 pragma solidity ^0.4.25;

 contract Old {
     function f() public pure returns(bytes32) {
         byte b = 0x00;
         uint8 i = 0;
         string memory s = "zero";

         return keccak256(b, i, s);
     }
 }



f() の実行結果は以下のようになります。

 0x8189e29de3da4d4f173407fc89da994321d99458b5ed5bb8f99c98a7161e2955


v0.5.0



以下のように、bytes 1 つしか渡せないようになりました。

 keccak256(bytes memory) returns (bytes32)



よって、上記 v0.4.25 のサンプルコードと同じ結果を得るためには、以下のように abi.encodePacked() してから渡す必要があります。既によく見かけるコードですね。

 pragma solidity >0.4.99 <0.6.0;

 contract New {
     function f() public pure returns(bytes32) {
         byte b = 0x00;
         uint8 i = 0;
         string memory s = "zero";

         return keccak256(abi.encodePacked(b, i, s));
     }
 }



f() の実行結果は以下のようになります(先ほどと同じです)。

 0x8189e29de3da4d4f173407fc89da994321d99458b5ed5bb8f99c98a7161e2955


補足



v0.5.0 では、上記に関連した以下のような変更も入っていますので、ご注意ください。

  • keccak256() だけでなく、以下の function も引数が bytes 1 つになりました
    • .call()
    • .delegatecall()
    • .staticcall()
    • sha256()
    • ripemd160()
  • keccak256() のエイリアスだった sha3() は使えなくなりました
Sort:  
Loading...

@m0t0k1ch1さん、STEEMITへようこそ! STEEMITで会えてうれしいですね。VOTEしました。 :}(これはWITNESSとして日本のSTEEMITコミュニティへいちょっとした貢献です。)

ありがとうございます!

ようこそ、steemitへ
日本のコミニティを応援している @steemit-jpです。@steemit-jpは日本の良い記事を推薦するJapan Daily Curationを実施しています。

また、新しいメンバーへのサポートを推進しています。レピテーション50になるまでタグに jp-newbie を使用していただくと支援のvoteをいたします。

その他イベントなども開催しておりますので、ぜひご参加ください。それでは楽しいsteemit生活をお過ごしください。

日本コミュニティのDiscordチャットで質問もOK!登録しよう!

ありがとうございます!

はじめまして。 @yasu24と申します。よろしくお願いします。 @M0t0k1ch1さん、エンジニアの方でしょうか?

私、Steemブロックチェーンを使った日本発のサードパーティが出るようになったら面白いかもと思っています。

Posted using Partiko iOS

やばいレベルの一人ですよ!
CryptoecomicsとPlasmaの神様です。

あらっ、そうなのですね!教えていただき、ありがとうございます。 @fusanがそうおっしゃるのは、説得力あります。

コメントありがとうございます。サードパーティが乗って盛り上がってこそ、Blockchain レイヤーからやっている Steem の価値がありますよね。自分で力になれることがあるかわかりませんが、まずはユーザーとしてもう少し steemit と Steem の仕組みを把握しようと思います。ホワイトペーパーはざっと読んでるのですが、実際に使ってみるとまた見えるものが違うなあと。

ご返信、ありがとうございます!クラウドファンディングのプラットフォーム @funditionを覗いてみていただき、感想をいただけたら、、、とコメントしたくなりました。少し関わっているので。

エンジニアの方は、 @utopian-ioも面白いかもしれません。また、広く使われている @busy.orgは、 https://ulogs.org/ のもとになっていたりします。

m0tok1ch1さん!ようこそ!
Steemitで何がしかを得られることを期待しております!

fusan だ!ありがとうございます!必ずや、何かしら得ます笑

Congratulations @m0t0k1ch1! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published your First Post
You got a First Vote
You made your First Comment
You got a First Reply

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @m0t0k1ch1! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 10 upvotes. Your next target is to reach 50 upvotes.

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

モトキチさんがsteemにも来た笑

あれ、ここにもいたのね笑

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 62559.43
ETH 3092.10
USDT 1.00
SBD 3.86