ランサーズ(Lancers)エンジニアブログ > Blockchain > SlackでEtherを送りあえるサービスをLambdaで実装した話

SlackでEtherを送りあえるサービスをLambdaで実装した話

mizushima|2018年11月14日
Blockchain

インターンの水島です。

現在は開発部でCREチームとブロックチェーンチームに参加しており、来年度ランサーズに新卒として入社する予定です。

今回はブロックチェーン実証実験の一環として、Slack上でEtherを送り合うことができる社内インフラのLambda化を行なったので経緯を含めて発信したいと思います。

ブロックチェーンチームに入った経緯

2年程前から暗号通貨に興味を持ち、情報を追っかけたり、論文を読んだりしているうちにブロックチェーンそのものの面白さを感じるようになっていました。

その関係で個人でもブロックチェーンの論文をチェックしたり、CryptoZombiesなどで学習したりしていましたが、一体この技術で何ができるのかと結局わからぬままでした。

インターンとして参加していたランサーズでブロックチェーンのプロジェクトもあると聞いたので、これは!!と思い、開発部長に直談判し、ブロックチェーンチームに参加しました。

この時、実力のわからないインターンをさくっとプロジェクトに入れるなんてかなり自由度が高い会社だなと感じたのを覚えています。

実装内容

今回僕が担当した内容は一緒にプロジェクトを進めているblockbaseさんから頂いたコードをLambdaで動くようにする部分でした。
blockbaseさんから頂いたコードは以下のリポジトリで確認可能です。
https://github.com/block-base/ethertip

今回の実装における最終的な構成図は以下のようになりました。

機能としては、大まかにまとめると

  1. Slack上でスタンプを押すことで相手にtipを送る
  2. DynamoDBに保存されたtipやアドレスなどの情報を確認できる
  3. 溜まったtipを引き出したいときにEthereumネットワークにデプロイしているコントラクトから引き出す。

となります。

今回はERC725というEthereum上の規格を使い、Etherを引き出すときに認証を行なっています。

またそれに加えERC725で扱うIdentityに対してClaimの管理ができるようになるERC735も導入しています。

AWSとの格闘

僕は今までAWSを触ったことがなく、AWSに関してAmazonがやってるクラウドサービス群ぐらいの認識ぐらいしかありませんでした。ほぼほぼ一からのスタートでしたが、いい機会だと思って取り組みました。

概念導入としてLambdaの本をチュートリアル的に一冊こなしました。
ここでLambdaとはどういうものか、使うにはどのような知識が必要かを大体把握しました。他にもいいなと思った本があるのでリンクを貼っておきます。

Lambda学習のオススメ本
AWS Lambda実践ガイド

実践AWS Lambda 「サーバレス」を実現する新しいアプリケーションのプラットフォーム

この過程でLambdaの面白さにハマり、個人でもLambdaを使ったserverlessアプリケーションの開発も行うようになりました。

今回は大まかな実装が完了している点、Expressを導入している点からaws-serverless-expressというモジュールを利用しました。

このモジュールはCloudformationでの実装を前提としていましたが、Cloudformationを使用するとプログラムの柔軟性が損なわれてしまうため、API Gatewayなど諸々の設定はこちら側で行いました。時間はかかりましたが、結果としてAPI Gatewayについてしっかり学ぶことができたので良かったと感じています。

頂いたコードをLambdaに対応させる部分でうまくいかなかったり、IAMロールが正しく設定されておらず認証で詰まったり、LambdaでのCORS認証で詰まったり、つまづくことも多かったです。

しかし、幸いなことにランサーズには優秀で親切な先輩エンジニア諸氏がおられましたので何とか実装にまで持っていくことができたと思います。

まとめ

今回の実装を通してAWSとEthereumベースのブロックチェーンに関する知識がかなり深まったと感じます。すごく面白い分野なので、これからも開発を続けたいと思います。

実装の過程で上手くいかないことは多かったですが、それよりも優秀な方達にサポートされている環境で新しいことに挑戦できることがすごく楽しかったです!

最後に今回実装したEthertipのリポジトリを載せておきますので、一度見てみてください!https://github.com/LancersDevTeam/ethertip

興味を持った方はご意見、ご質問を頂けると嬉しいです。お待ちしてます!

ここまでご覧頂きありがとうございました。