LoginSignup
7
4

More than 5 years have passed since last update.

【Ethereum】ウォレットのアイコンを生成する

Last updated at Posted at 2018-03-16

はじめに

GitHubを利用しているとわかりますが、アカウント作成時に特有のアイコンが自動的に割り当てられます。

このようなアイコンは「Identicon」と呼ばれるもので、特定の規則にしたがって生成されるものです。

Ethereum関連のサービスもIdenticonを使用しているケースが多いです。

例えばEtherscanで自身のアドレスのページをみると次のようになります。

Screenshot from 2018-03-16 00-04-39.png

これはblockiesと呼ばれるライブラリを使って生成がされています。

MyEtherWalletや、EtherScan、Parityも これをベースにアイコンを生成しているようです。(MetaMaskはJazziconも使用しているみたいですね。)

Blockies

Blockiesのページから「blockies.js」をダウンロードしたあと

次のアドレスからアイコンを生成してみます。

アドレス
0xdcc47176a2afee39dbf175e22e46a8de38fd0524

簡単なサンプルがGithub上であがっているので、Etherscanのアイコンに近づけてみます。


<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<style>
#icon {
    width: 512px;
    height: 512px;
    background-size: cover;
    background-repeat: no-repeat;
    border-radius: 0%;
    box-shadow: inset rgba(255, 255, 255, 0.6) 0 2px 2px, inset rgba(0, 0, 0, 0.3) 0 -2px 6px;
}
</style>
</head>
<body>
    <div id="icon"></div>
    <script src="./blockies.js"></script>
    <script>
        var address = '0xdcc47176a2afee39dbf175e22e46a8de38fd0524';
        var icon = document.getElementById('icon');
        icon.style.backgroundImage = 'url(' + blockies.create({ seed:address ,size: 8,scale: 16}).toDataURL()+')'
    </script>

</body>
</html> 

(size: 8,scale: 16 から変えてしまうと、ウォレットどおりの表示にならなかったりするので注意しましょう。アドレスの大小文字にも注意を。)

Screenshot from 2018-03-16 20-49-191.png

できました。

角をとりたかったら「border-radius」の数字を変えてみます。
Screenshot from 2018-03-16 21-11-39.png

「border-radius」を50%にしたらまるくなりました。

Jazzicon

ちなみにMetaMaskはjazziconというライブラリも使用してます。
どちらかというと、こっちのほうがメインでしょうけど。

jazzicon
https://github.com/danfinlay/jazzicon

Screenshot from 2018-03-16 20-40-061.png

実際にjazziconをつかってみると同じものができます。

Screenshot from 2018-03-16 20-40-062.png

ライブラリをダウンロードしてみて、MetaMaskライクに生成するとしたらこんな感じになります。

アドレス
0xDB86AF558021cE0613c9B42ABe227c1782F9cAFD
sample.js

var jazzicon = require('./jazzicon-master')
 var body = document.querySelector('body')
 var address='0xDB86AF558021cE0613c9B42ABe227c1782F9cAFD'
 var addr = address.slice(2, 10)
 var seed = parseInt(addr, 16)
 var el = jazzicon(100, seed)
 body.appendChild(el)

補足:
MetaMaskの場合、アドレスから先頭10文字を抽出し10進数のInt型にパースした値を元にiconを生成しているため次の行を追加しています。

address.slice(2, 10)
var seed = parseInt(addr, 16)

nodejsからbrowserifyを噛ませて、クライアント側で確認してみるとブラウザ上で簡単に確認できます。

browserify ./sample.js -o ./dest/build.js
<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <script src="dest/build.js"></script>
    </body>
</html>

参考

7
4
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
7
4