How to simulate Restricted Cone NAT locally

Reproducing specific network topology is important in network protocol development. If a specific network topology can be reproduced on the developer’s local machine, development efficiency can be greatly improved through test automation and other means. This post describes how to reproduce Restricted Cone NAT network on your local machine.

more »

Lighthouseノードが自分の公開アドレスを自動的に認識する仕組み

例えば一般的なネット環境下にあるラップトップでLighthouseノードを起動した場合、NATの背後でノードが稼働することになる。この場合、ノードは自力で自分の公開IPアドレス/ポートを知ることは難しい。また、インターネットプロバイダの都合により稼働中に公開アドレスが変更になる可能もある。

Lighthouseには公開IPアドレス/ポートを自動的に認識する仕組みがあるので、どのようにして実現されているのか調べた。

more »

Infuraを使ってBeacon Node(lighthouse)を立てる時に遭遇したエラー

この記事は Ethereum Advent Calendar 2020 24日目の記事です。


Beacon Nodeを稼働させるためには、利用するEthereum(eth1)のエンドポイントを指定する必要があるが、ちょっと動作を検証してみたい程度のときに自前でeth1クライアントを立てておくのはやや骨が折れる。そういった場合には Infura が便利。

Ethereum API | IPFS API Gateway | ETH Nodes as a Service | Infura

Launch Padの手順では、ネットワークの分散のために自前でクライアントを立てることが推奨されているので、本格的な運用の場合は自前で立てる方が良いのだろう。

以下、eth1バックエンドとしてInfuraを使ってBeacon Node(lighthouse)を立てようとした時に遭遇したエラーメッセージと、それについて調べたことをメモしておく。

more »

Libraのステート管理 - Jellyfish Merkle Tree

この記事では、Libraネットワーク内で合意が取れたトランザクションを保存する部分の処理を追っていくことで、Libraでアカウントのステート(アカウントに紐づく残高などの情報)をどんな感じに管理しているのかざっくり把握していきたい。

more »

ブロックチェーン関連プロダクトのヘルスチェックの実装を眺める

ゼロから創る暗号通貨という、PythonでP2Pネットワークの部分から実装を進めていって最終的にBitcoin的なものを創るというめっちゃ面白い本があって、最近これを Rustで実装 している。

本の序盤、P2Pネットワークの基盤を作っていくところで、接続してるPeerのヘルスチェックを実装する。といってもこの本ではシンプルにTCPのレイヤーで繋がるかどうか確認するだけなんだけど、なんとなくこの部分を実際のプロダクトはどんな感じに実装しているのか(何かスゴイことやってるのか?)気になってコードを眺めてみたのでブログに書いておく。

more »

符号なし256bit整数を言語がサポートしていない場合の対応

Ethereumのスマートコントラクト記述に使われる言語 Solidity では uint256 をサポートしていてこれがよく使われているが、一方でチェーン側を実装している言語が必ずしもそれに相当する型をネイティブでサポートしているわけではない。

最近 勉強がてら Plasma Cash の実装に手をつけだして、子チェーンを Rust で書き始めたのだけど、まさに Rust は uint128 までなのでこの壁にぶつかってしまった。とはいえ実際に Rust で実装して動いているプロジェクトはあるので、どんな実装をして uint256 に対応しているのか、Ethereumに関連するクレートを調べてみた。

more »

Java8で開発しながら、Java9で非推奨になった構文が使われているかチェックする

背景

OpenAPI Generatorは現在 Java8 での動作 が基本になっているが、一方で下記のPR/issueのようにJDK9以降のサポートを進めていく流れがある。

自分もこの辺に絡んでいきたい気持ちになってきたので、Java8で開発しながら、Java9(またはそれ以降のバージョン)で非推奨になった構文が手元のソースコードで使われているかチェックする方法が知りたくなった。

more »

OpenAPI Generator - community drivenで成長するコードジェネレータ

2018-05-12、OpenAPI Generator が公開されました。

https://github.com/OpenAPITools/openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec

これは Swagger Codegen v2.4をフォークしたプロジェクトで、OpenAPIドキュメントから様々なプログラミング言語のAPIクライアントやスタブサーバーなどのソースコードを生成するツールです。まだベータ版のような状態で、“v3.0.0”として初回リリースすることを予定しています

私は “元” Swagger Codegen のコアメンバーであり、現在 OpenAPI Generator のコアメンバー/創立メンバーで少し中の事情に詳しいので、なぜフォークするに至ったのかといった経緯やOpenAPI Generatorについて書いていきたいと思います。
なお、個人のブログに書いていることですので主観が入っている部分があるかもしれませんが大目に見ていただけますと幸いです。

more »

Travis CIでPHP5.3から最新までのバージョンでCIをまわす

なんだか辛さが滲み出るようなタイトルだ。どうしても古いPHPのサポートを継続しておきたいライブラリがあって、PHP5.3から最新までのバージョンでCIをまわすときに少しハマりどころ(といったら大げさだが)があったのでメモしておく。

more »

on #php,

Swagger Codegen + Circuit Breaker in #PHP

( English version is coming soon! )

以前 Swagger Codegen + CircuitBreaker(Ganesha) でSwagger Codegenと拙作のGanesha (Circuit BreakerのPHP実装)を組み合わせる方法を書いた。
その後、Swagger CodegenとGaneshaの双方ともバージョンアップし親和性が高まり、よりシンプルな方法で組み込めるようになったので、改めてSwagger CodegenやCircuit Breakerの概要も含めてご紹介したい。

more »

TimeWindowの種類

TimeWindowとは

ググってみた感じだと(ソフトウェア開発以外も含めた)文脈によっていくつか微妙に異なる意味がありそうなのだが、当記事では “ある測定の対象となる時間枠” の意味で扱う。例えば、システムで発生したイベントを集めて加工を行うようなストリーム処理において、どこからどこまでのイベントを対象とするかを決定するのがTimeWindowである。

more »

CopyOnWriteArrayList でリストを安全に更新する

デザインパターン入門 マルチスレッド編 に、マルチスレッドプログラムの評価基準として 安全性 生存性 再利用性 が挙げられている。安全性とはオブジェクトのフィールドが意図した値を保っていることで、安全性が保たれているクラスをスレッドセーフなクラスという。
マルチスレッドプログラミングにおいてオブジェクトを安全に更新するには、操作が競合しないように synchronized などを使った排他制御の工夫が必要。

more »