暗号通貨のブロックチェーン取引をテストする

この記事はDee Ann Pizzicaによるゲスト投稿です。

ブロックチェーン技術は、ソフトウェア開発においてますます一般化しています。しかし、ブロックチェーンでのテストには、注意すべき制約がいくつかあります。すべての暗号通貨のテストシナリオが同じというわけではありません。提供しているサービスや機能はウォレットや取引所ごとに異なります。

この記事は、ブロックチェーンに初めて触れる、あるいは暗号通貨に興味があるという読者向けに、暗号通貨ウォレットでのブロックチェーン取引をテストするのに必要な基本的ドメイン知識の一端を説明する、ビギナーのためのガイドです。

ブロックチェーンでは何が違うか

なぜブロックチェーンデータのテストと中央集中化されたデータベースでのテストは異なるのかを理解するために、まずブロックチェーンとは何か、その仕組みを少し説明しましょう。

ブロックチェーンデータは分散化されています。ブロックチェーンは、中央リポジトリではなく、異なるエンティティによって制御される多数のソースによってデータが検証されることで成り立っています。つまり、情報を維持する責任を持つ単一のエンティティというものはありません。情報は複数の互いに関わりのないソースによって確認され、どの情報も直前の情報に基づいて積み上げられます。

ブロックチェーン技術利用の先駆者であり最も有名なBitcoinの例では、情報はデジタル通貨の取引です。ブロックチェーンは、あるアドレスから別のアドレスへどのように通貨が送られたかを詳しく記録する取引帳簿であり、複数の参加者によって複数のバージョンが並行して継続的に更新されます。複数のソースによって取引が確認および検証されると、変更やハッキングが不可能な不変の情報ソースが存在することになります。

ブロックチェーン上のデジタル通貨の取引をテストする場合、重大な制約がいくつかあります。

  • 特定の出力を作り出すためにデータを操作したり変更することはできません。
  • 実資産なしでテストするための手段は限られています。
  • 取引のタイミングを制御するのは困難です。

このような制約がデジタルウォレットを検証するテスターにとってどのような課題をもたらすか、またテスターが検証するべきデジタル通貨特有の詳細について、いくつか確認していきます。

データを操作できないとき

テストに必要な状況を作り出すためにステージングサーバーのデータを操作する能力は、テスターがよく使う強力なツールです。ときに多数の作成済みのアカウントが必要になる場合があります。あるいは特定のフィールドに不正な形式のデータや予期しない null が入力された場合のエラーをなんとかして発生させなければならないこともあります。どのような場合でも、データベースの開発バージョンにアクセスできるなら、おそらく必要な状況を作り出せるでしょう。ところが、パブリックなブロックチェーンでテストを行うときは、必要な取引データがどこから発生してどこに保存されるかは制御できません。

たとえば、3年間にわたって500ビットコイン(BTC)の取引履歴を持つウォレットをあなたの製品ウォレットに問題なくロードできるかを確認する必要がある場合、単にデータベースに多数の行を挿入して過去の日付にするといったことはできません。パブリックなブロックチェーンで取引を作成するには、リアルタイムで取引する必要があります。

必要になるかもしれないさまざまなシナリオに合う多数のウォレットをカタログ化しておくと役に立ちます。いつ特定の資金残高や作成日、資産構成を持つウォレットが必要になるかはわかりません。

テストに資金を供給する:実取引とテスト取引

選べるのであれば、実マネーではなく疑似マネーでテストするのは良い案です。どのブロックチェーンにも似た機能がありますが、ここではビットコインに特化して説明します。

検討すべき2 つの別個のビットコインブロックチェーンがあります。mainnetチェーンとtestnetチェーンです。mainnetチェーンは実際のビットコインチェーンです。mainnetチェーンの取引は本物のデジタル通貨を使います。testnetの取引は同じように機能しますが、取引されるのはテスト通貨であり、価値があるとはみなされません。

testnetのアドレスはmainnetのアドレスとは異なっています。これによって、testnetの資金をmainnetブロックチェーンに送金しようとする試みが防止されます。

testnetは取引のテストに非常に役に立つ場合があります。好きなだけ送金でき、実際のコストはありません。それでも、資金を獲得する必要はあります。testnetの資金を獲得する一番簡単な方法は、フォーセットを利用することです。フォーセットは、他のBitcoin開発者によって共有可能な資金が供給されるウェブサイトです。

ただし、testnetを使う場合の制限やデメリットもあります。すべての通貨にtestnetが設定されている訳ではなく、すべての企業がtestnet環境に向けられた機能を持っている訳でもありません。

タイミングがすべて

まったく制御できないもう1つのものがタイミングです。ブロックチェーン取引のテストをセットアップしたら、待つ必要があるかもしれません。ブロックの確認には時間がかかります。取引がより早く処理されるチャンスを増やすテクニックはありますが、プロセスが高速になると保証できるものはありません。

特に値動きが激しいときには、ネットワークが混雑することがあります。ネットワーク上で処理される取引が多いほど、ネットワークが遅くなる可能性が高まります。

取引がより早くネットワークにピックアップされるようにする方法の1つは、送金額を大きくすることです。一般的に、多額の送金にはより高い手数料が請求されます。1度に数ドルしか送金しない場合、取引は同時にネットワークにブロードキャストされる他の取引より収益性が低く、確認を求めて競う際に他の取引より魅力に劣ることになります。

ウォレットによっては、取引に割り当てる手数料を制御できる場合があります。より高い手数料を払うことで、マイナーがより早く取引をピックアップする気になるかもしれません。

もちろん、送金額を大きくしたり高い手数料を払うとテストの予算を消費し、複数の取引をテストする必要がある場合、あっという間に残高がなくなってしまう可能性があります。より時間がかかるリスクとテストのコストを秤にかける必要があります。

タイミングが問題となるもう1つの状況は、ウォレットをパブリックなブロックチェーンと直接同期する場合です。その場合、復元された古いウォレットが同期するまで何時間も待たされる可能性があります。同期するには、ウォレットが作成された時点、あるいは極端な場合には連携するチェーンが開始された時点以降のあらゆる確認済みブロックの走査が必要になる場合があります。完全な同期を伴うテストには、前もって計画が必要です。

暗号ウォレット取引で何を検証するべきか

ブロックチェーンでのテストの準備ができ、より深く考えられるようになったので、今度はすべてが正しく動作していることを確認する番です。しかし、取引をテストするために、実際、何を見ればよいのでしょうか?暗号通貨に慣れていない場合、少しばかり途方に暮れてしまうかもしれません。

テスターであるあなたにとって計り知れない価値を持つツールが優秀なブロックエクスプローラーです。ブロックエクスプローラーとは、ブロックチェーン上の取引を検索することを可能にするウェブサイトです。検索してみれば、すぐに信頼できる候補が多数見つかります。多くは幅広いブロックチェーン用に設定されています。Blockchair.com は私がよく使っているものです。

私たちが見ているのはBitcoinやEthereumのようなパブリックなブロックチェーンなので、どんな取引もブロックエクスプローラーで検索可能です。ブロックチェーンを検索する場合、送金元ウォレットまたは送金先ウォレットのアドレスを入力するか、取引のハッシュ、つまり取引のユニークな識別子の役割をする長い英数字の文字列で検索することもできます。

暗号通貨取引をテストする際は、いくつかのデータポイントをネットワークへのブロードキャストと突き合わせてクロスチェックを行います。その情報はブロックエクスプローラーで参照できます。検証するべき主な側面として、以下の5つがあります。

暗号通貨アドレス

暗号通貨の投資家は匿名で取引できます。暗号通貨アドレスはウォレットによって生成され、デバイスに保存された秘密鍵と結び付けられます。アドレスはパブリックにアクセスできますが、個人を識別する情報とは結び付けられていません。

多くの場合、アドレスは長い英数字の羅列であり、記憶するのは非常に困難です。ブロックチェーンの構成によっては、アドレスに関して固有のルールがあります。

あるネットワークでは、何回取引してもアドレスは変わりません。しかし、Bitcoinネットワークでは、アドレスは一回だけ利用されます。ユーザーのプライバシーを維持するため、多くのウォレットでは、取引が作成され資金がアドレスから移動されるたびに新しいアドレスが自動生成されます。

たとえば、Wallet AとWallet Bという2つのウォレットがあるとします。Wallet Aには .5 BTCを保持するアドレスがあります。Wallet AからWallet Bに . 2 BTCを送金します。取引が完了すると、Wallet Aの残り . 3 ビットコイン のために新しいアドレスが作成され、Wallet Bの受け取った . 2 ビットコインにもアドレスが作成されます。

取引の正確さ

取引が正しくブロックチェーンに登録され、受け取り先が期待どおりかを検証するには、さまざまな点をテストする必要があります。送金元ウォレット、受取先ウォレット、ブロックチェーンの3箇所で取引を検証します。

ウォレットツールをテストしている場合、毎回完璧でなければならないコア機能の1つが、ある場所から別の場所に矛盾なく資金が移動され、送金額がプロセスのどの段階でも期待どおりであることです。ブロックエクスプローラーで取引アドレスに含まれる暗号通貨額を正確にチェックできます。

アドレスで取引を検索するほかに、取引のハッシュで検索することもできます。

ブロック確認

ブロックチェーンの取引を完了するには、確認を済ませる必要があります。ウォレットによっては、ブロック確認の数に基づいて、取引がいつ保留中または完了と表示されるかについてルールがあります。

ブロックエクスプローラーで任意の取引の確認の数を参照することもできます。数が増えるほど、取引が発生しブロックチェーン上で有効であることに、より多くの独立したソースが同意したことを意味します。ネットワークからの確認の数がウォレットに表示された数と一致していることを確認します。確認の数を検証するとともに、取引が確認された実際のブロック番号を確認するとよいでしょう。

ブロックの確認は、暗号通貨を保有する者にとって特に重要です。なぜなら、確認が行われるまで資金を使うことはできないからです。

メモまたはタグ

メモやタグなどの情報も、特定のトークンにとって重要です。たとえば、Rippleのデジタル通貨XRPでは、取引で宛先タグが使われます。この識別子は、XRPブロックチェーン上の取引が正しい経路を通ったかを検証するのに役立ちます。

手数料またはガス

デジタル通貨ごとに固有のルールや手数料の体系があります。Bitcoinの手数料については上で少し説明したので、今度はEthereumネットワークの手数料について見てみましょう。Ethereumブロックチェーンでは、ERC20トークンと呼ばれる多数の通貨を取引できます。手数料がビットコインで支払われるBitcoinとは異なり、Ethereumブロックチェーンの手数料は送金するトークンではなくイーサリアムで支払われます。

取引に対して支払うイーサリアムの手数料はガスと呼ばれます。これは、暗号通貨やEthereumネットワークになじみがない人にとって分かりにくい点です。ERC20トークンで取引を行うテストをセットアップした場合、資金を送金する前にいくらかイーサリアムを保持していることを確認する必要があります。

学び続ける

どんな新しい分野もそうですが、ブロックチェーンが提示する学習と探索には終わりがないように見えます。一見、ブロックチェーン技術のいくつかの側面は理解が容易ですが、すぐに複雑になってきます。特定のチェーンのあらゆるルールについて、できるかぎり多くを学びましょう。最初は途方もないように思えますが、オンライン上のソースが豊富にあります。

いくらかの時間を費やしてブロックチェーンやデジタル通貨の仕組みを理解すると、以前は当たり前に使っていたテスト技術の一部を利用不可にするブロックチェーン特有の制約を克服できるでしょう。暗号通貨取引の基本を効果的にテストできるだけでなく、もっと進んでよりやりがいがある多くのユーザーシナリオや課題に新しいやり方で取り組むことができるようになるでしょう。

(この記事は、開発元Gurock社の Blog 「Testing Blockchain Transactions with Cryptocurrency」2020年8月3日の翻訳記事です。)

eBook 公開中

Paul Gerrard著 効果的なテスト管理12の秘密 (日本語)

テスト計画やテスト管理に役立つ12のトピックを解説します。

詳細はこちら