C130が公開されました

2ヶ月ほどのリスケを乗り越え、なんとか問題だったハードルも乗り越え、ようやく公開できました。

https://c130.solidity.codes/

知らない人向けに説明すると、ERC20トークンのAirDropを自動でやってくれるというWebサービスです。

ばらまく元のアカウントの秘密鍵コントラクトアドレスとABIファイルを突っ込んで、ばらまき対象が羅列されたCSVを食わせると実行できます。

これソースコードです。わりとやっつけ感はあるので、もうちょっとUXを改善するつもりではありますが、とりあえず機能としては十分なレベルに達したので公開しました。

GitHub - C-130/Platform

重要な点として、開発者ツールを覗くなりGitHubに上げてるソースコードを見ればわかると思いますが、サーバと通信をしている箇所が全くありません。

ですから、秘密鍵が外部に漏れる心配などはありません。

技術的なところ

web3.jsというのがあり、これを使うとJavaScriptからEthereumに関することがほぼなんでもできます。

GitHub - ethereum/web3.js: Ethereum JavaScript API

これを利用して、入力されたCSVを元に、指定されたコントラクトに対してtransferメソッドを叩くトランザクションを作り、それをinfura.ioに投げるという感じです。

Infura - Scalable Blockchain Infrastructure

問題として、トランザクションを作るような処理はinfura.ioではサポートされていません。下のissuesが参考になります。

Invalid JSON RPC response: "" · Issue #59 · INFURA/infura · GitHub

ですから、自分でトランザクションにサインしたものを web3.eth.sendSignedTransaction で送る必要があります。MetaMaskをProviderとした場合は行けるかもしれませんが、本質的には同じですね。

自分で生のトランザクションを操作するのは若干面倒ではありますが、ethereumjs-txというのを使えばわりとサクッと行けます。

GitHub - ethereumjs/ethereumjs-tx: A simple module for creating, manipulating and signing ethereum transactions

サンプルコードをQiitaに上げておきました。

infura.io + web3.js + ethereumjs-tx でトランザクションにサインして送信するまで - Qiita

ただ、この仕様も秘密鍵の扱いをブラウザ上でのみ完結させる一助となっているので、まあ良しとしましょう (しばらく気付かなくて数十分ほどハマった)

野望

既に各所には書いてますがこのC130を発展、というかもっと包括的なプラットフォームを構築しようとして色々準備しています。

たぶん数日中に発表できると思うのでよろしくお願いします。