Ethereumのサイン済みraw transactionをデコードする方法




raw transactioとは

raw transationとはEthereumの送金に必要なデータを秘密鍵で暗号化したトランザクションのことを言います。

Ethereumの場合は下記のように頭に0xをつけて16進数として扱います。

0xf87083154262850500cf6e0083015f9094c149be1bcdfa69a94384b46a1f91350e5f81c1ab880de6c75de74c236c8025a05b13ef45ce3faf69d1f40f9d15b0070cc9e2c92f

この暗号化されたトランザクションをブロックチェーンのネットワークに流すことで世界中のノードに伝播し、最終的にブロックに取り込まれるようになります。

サイン済みデータの確認

仮想通貨ウォレットを作ると、トランザクションへのサインの処理を自分で実装するわけですが、そのサインが正しいか確認するのにデコードして確認することがあります。

デコードはライブラリを使うと簡単に処理することができるので紹介したいと思います。

ethers.js

バージョンはv3.0.29です。v4では大幅に変わるのでドキュメントを参考にしてください。

Node.jsで使えるのでnpmでインストールします。

$ npm install --save ethers@v3.0.29

使い方はものすごく簡単です。署名に使う秘密鍵をつかってwalletインスタンスを作成し、parseTransaction()にraw transactionを渡すだけでデコードできます。

const ethers = require('ethers');
const Wallet = ethers.Wallet;
const utils = ethers.utils;

const privateKey = '0x0123456789012345678901234567890123456789012345678901234567890123';
const wallet = new ethers.Wallet(privateKey);

var transaction = {
    nonce: 1393250,
    gasLimit: 21000,
    gasPrice: utils.bigNumberify("20000000000"),
    to: "0xc149Be1bcDFa69a94384b46A1F91350E5f81c1AB",
    from: "0xchurKMxCS23DerTuFIs98G6hBxdhklpQ12VFerw3D"
    value: utils.parseEther("1.0"),
    data: "0x",
    chainId: 1
};

var signedTransaction = wallet.sign(transaction);
var transaction = Wallet.parseTransaction(signedTransaction);

console.log(transaction);
{
    nonce: 1393250,
    gasLimit: 21000,
    gasPrice: utils.bigNumberify("20000000000"),
    to: "0xc149Be1bcDFa69a94384b46A1F91350E5f81c1AB",
    from: "0xchurKMxCS23DerTuFIs98G6hBxdhklpQ12VFerw3D"
    value: utils.parseEther("1.0")
}

こういうコネタもどんどん追加していきます!

おすすめ書籍

Ethereumを使ったDApps開発を学びたいなら今だとこの1冊が1番良いです!開発環境の構築から使うべきツール、フレームワーク、実装方法・注意点まで網羅的に解説されている書籍なのでおすすめです。出版も2018年1月ということでかなり新しい本で、DMM Bitcoinを作っているネクストカレンシー所属の方が書いているので信頼できます。

ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です