読者です 読者をやめる 読者になる 読者になる

Develop with pleasure!

福岡でCloudとかBlockchainとか。

Ruby

P2WSHを使うトランザクションの作成と署名

P2WPKHの署名方法について書いた↓ので techmedia-think.hatenablog.com 今回はP2WSHの署名について。 単純なマルチシグでもつまならいのでOP_CSVのBIPに出てくるLNのトランザクションサンプルのP2WSHにしてみる↓ https://github.com/bitcoin/bips/blob/maste…

P2WPKHを使うトランザクションの作成と署名

だいぶ前に書き始めて放置してたのでちゃんと実装してみた。 以前↓のようにwitnessなトランザクションのパース方法について書いたので、 techmedia-think.hatenablog.com 続いてwitnessなトランザクションを作ってみる。 P2WPKHにBitcoinを送付 まず最初にP2…

bitcoin-rubyで決定性署名を生成する

bitcoin-rubyのP2PKHの署名のデフォルト実装 bitcoin-rubyを使ってP2PKHのUTXOを入力にしたトランザクションの署名は↓のように書ける。 require 'bitcoin' Bitcoin.network = :testnet prev_key = Bitcoin::Key.from_base58('秘密鍵') prev_tx = Bitcoin::Pr…

Federated Pegのアドレス導出スキーム

Blockstreamが公開しているSidechainのホワイトペーパーのAppendixにFederated Pegを行う際のP2SHアドレスの導出スキームが定義されている。このFederated Pegの仕組みは同じくBlockstreamが公開しているサイドチェーンの実装Elements Alphaでも利用されてい…

楕円曲線を使ったゼロ知識証明

↓のゼロ知識証明の解説記事に掲載されている楕円曲線を使ったゼロ知識証明をbitcoin-rubyを使って検証してみた。 www.atmarkit.co.jp 検証手順は↑のの記事の通りで、 証明者(アリス)と検証者がいて、楕円曲線上の点Pとアリスの秘密鍵aがあるとき、その公開…

Rubyで楕円曲線の鍵共有(ECDH)と加算

Bitcoinで使われる楕円曲線の鍵について、bitcoin-rubyを使って鍵交換(ECDH)と楕円曲線の加算をしてみる。 鍵共有(ECDH) アリスとボブが持つ鍵を使って共通鍵を生成してみる。 アリスとボブはそれぞれお互いの公開鍵を知っており、秘密鍵をそれぞれa、b…

ペアリングベース暗号のライブラリをRubyから使う

ペアリングベースの暗号の基礎的な数学的演算をCで実装したlibpbcというライブラリがある。 PBC Library - Pairing-Based Cryptography - About このライブラリをJavaに移植したJPBCというライブラリもある。 JPBC - Java Pairing-Based Cryptography Librar…

Rubyで書かれたテスティングフレームワークtethでコントラクトをテストする

Ethereum使ったアプリケーションをRubyで書けないかなーと思ってRubyのライブラリを調べてみた。 EthereumのRubyライブラリ 公式ドキュメントで紹介されているのは以下の3つ。 ruby-ethereum Rubyで書かれたEVM(Ethereum Virtual Machine)の実装 github.c…

witnessデータを含むブロックのwitness rootとcommitment hashの計算

Segwitの導入にあたってブロック作成時にwitness トランザクションの署名が確かにブロックに含まれていることを保証するために新しいCommitment構造が導入されている。 techmedia-think.hatenablog.com コインベーストランザクションに追加されたCommitment…

Asset Definition URLをP2SHのredeem scriptに設定する

Open Assets Protocolではアセットのメタデータを定義したAsset DefinitionをURLで指定する。 techmedia-think.hatenablog.com ↑に記載されているように、Asset Definition URLとブロックチェーン上のアセットを紐付ける方法は以下の2種類がある。 アセット…

Segwit導入におけるRPCの主要な変更点

techmedia-think.hatenablog.com 先月リリースされたBitcoin Core 0.13.0にSegwitのコードがマージされtestnetで利用可能になったので、関連するRPCの変更点を見てみる。 RPCの変更点 getblock と getblockheader の変更点 出力内容に新しく以下の項目が追加…

Segwitなトランザクションをパースしてみる

witnessなトランザクション用にBIP-144で新しいシリアライゼーションフォーマットが定義された↓ techmedia-think.hatenablog.com ので実際にそのフォーマットに従ってトランザクションをパースしてみた。 フォーマットの変更点 詳細はBIP-144に定義されてい…

bitcoin-rubyを使ったマルチシグアドレスの作成と署名

bitcoin-rubyを使ってマルチシグの作成とマルチシグでロックされたUTXOへの署名をする。 他の言語のライブラリもそうだけど、bitcoin-rubyもBitcoin::ScriptクラスでP2SHを使ったマルチシグアドレスの作成と署名をサポートしている。 マルチシグアドレスの作…

OP_CSVで指定期間まで資金を凍結

以前、絶対時間を使用するOP_CLTV(BIP-65)で指定期間まで資金をロックするスクリプトを作成したので↓ techmedia-think.hatenablog.com 今回は、相対時間を使用するOP_CSV(BIP-112)↓を使って同様のことをやってみる。 techmedia-think.hatenablog.com OP_…

Open Assets Protocolを使ったアセットのAtomic Swap

Open Assets Protocolのアセットを1トランザクションで交換するAtomic Swapをやってみた。 シナリオ アリスはアセットID”oQWgTxFmK2EAYuoDvs2bLPNo9MG5nXnmyM”のアセットを1,000個持っている。 ボブはアセットID”oM4p6N7CqTTcujSHkiRKXzzVcMuXek8aiz”のアセ…

CHECKLOCKTIMEVERIFYで指定期間まで資金を凍結

techmedia-think.hatenablog.com ↑のCHECKLOCKTIMEVERIFYを使って、指定した期間まで出力を凍結するトランザクションを作ってみた。 資金凍結をするスクリプト 実際に作成したのは↓のScript <expiry time> CHECKLOCKTIMEVERIFY DROP <pubkey> EQUALVERIFY CHECKSIG expiry timeに</pubkey></expiry>…

neo4j with ruby

BItcoinのブロックチェーンのデータをグラフDBに突っ込もうと思い、neo4jを使ってみる。neo4jをrubyで扱うのにはneo4jってgemが便利そう。github.comneographyってneo4jのREST APIをラップしたgemもあるけど、neo4jではノードの構造をモデルとして扱えるのが…

Open Assets Protocolのアセットをburn(焼却)する

Open Assets Protocolを利用することで、Blockchain上で任意のアセットの発行・送付が可能になるが、ユースケースとしてアセットの流通の他にアセットの消滅というユースケースも考えられる。Open Assets Protocolをアセットを消滅させるには以下のような方…

複数のアセットを1トランザクションで送付できるようになったopenassets-ruby v0.2.9をリリース

Open Assets Protocolのカラーリングは、order-based coloringという方式を採用しており、トランザクションの入力に色(Asset ID)の異なるアセットが含まれていても、出力で指定されたアドレスにそれぞれ指定した量ずつアセットを送付することができる。複…

dumpprivkeyで取得した秘密鍵から公開鍵を生成

bitcoin-rubyを使ってBitcoin Coreのウォレットで管理している秘密鍵からから公開鍵を作成する手順。 dumpprivkeyの戻り値 最初、Bitcoin Coreのdumpprivkeyコマンドで秘密鍵を入手できるので、その秘密鍵から公開鍵を再作成するだけと思い、bitcoin-rubyを…

openassets-ruby

Open Assets ProtocolのRuby版の実装をOSSで公開してます。github.come-ZUKA Tech Night vol.33 - Blockchain & SVM で、そのopenassets-rubyの紹介をしてきました。 Openassets ruby from shigeyuki azuchi

Open Assets Protocolのasset IDを生成する

lian/bitcoin-ruby · GitHubを使って、Open Asset Ptotocolで使われるasset IDを生成してみる。asset IDの生成手順は以前ブログに書いた↓の手順。 1.発行者は初めに秘密鍵を生成する (こんな→ 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A20…

ruby on puma

Rackアプリが動作するPumaっていうRubyのサーバ実装を発見。Engine Yardのプロジェクトみたいね。プーマという名前からして速さがウリか?A Modern, Concurrent Web Server for Ruby - Puma puma/puma · GitHub 概要 Mongrelをベースに作られたサーバみたい…

BeanstalkにRailsアプリをデプロイしてみた。

【AWS発表】 AWS Elastic Beanstalk - Rubyのサポート開始、さらにVPC統合も可能に - Amazon Web Services ブログと遂にBeanstalkがRubyにも対応したので、早速RailsアプリをBeanstalk使ってデプロイしてみた。 環境構築 コマンドラインでBeanstalkを使用す…

HRForecastでAWSの利用料金グラフ生成してみた。

WebAPIを叩くことで様々な値をグラフ化してくれるGrowthForecastを使ってAWSの利用料金とリソースの使用状況をグラフ化してみた。最初はGrowthForecastを使おうと思ったんだけどGrowthForecastだとリアルタイムでログを出力する分には問題ないんだけど、時刻…

knife ec2 を使ってインスタンスを起動した際の鍵の配布

opscode/knife-ec2 · GitHubを使って、EC2のインスタンスを起動すると、インスタンスがChef Serverに接続し、インスタンスに対し登録されているレシピの適用を始める。その際にどうやってChef Serverとインスタンス間で認証が行われているのか気になったので…

Passenger vs Unicorn

EnginYardのブログにポストされてた記事を意訳してみた。Passenger vs. Unicorn | Engine Yard Blog | Engine Yard Developer BlogUnicornとPassengerは根本的な動作仕様が異なってるけど、 ワーカーを生成するマスタープロセスの存在 マスタープロセスから…

mod_mruby入れてみた。

mruyをApacheのモジュールとして組み込むmod_mruby入れてみる。 インストール まず、mrubyのインストールから。 $ git clone https://github.com/mruby/mruby.git $ makemakeが終わるとbinフォルダ直下にバイナリが生成される。 $ mruby -v mruby - Embeddab…

JavaとRubyで暗号化/復号化

Rubyで暗号化したデータをJavaで復号化、またその逆を行ってみた。今回はAES128ビットの暗号化モードCBC、パディングはPKCS#5で実施。 まずRuby側のコード。 require 'openssl' require 'base64' class CryptUtil def self.encrypt(pass, value) enc = OpenS…

c2dm_on_railsでC2DM連携

Android2.2から追加された、サーバ上からAndroid端末にメッセージの通知を行えるC2DM(Cloud to Device Messaging )。実際にAndroid端末にメッセージを送るのはGoogleのC2DMサーバなので、端末に送信したいメッセージをC2DMサーバに送信する必要がある。も…

CapistranoとBundlerの連携

gemの依存性やバージョンを管理するのにとても便利なBundlerとCapistranoを連携してみる。連携といっても、capistranoのcapコマンドで対象サーバにbundler使って依存gemをインストールするくらいだけど。連携自体は簡単で、capistranoで生成したdeploy.rbの…

久しぶりにBundler入れてみた。

久しぶりにBundlerを入れてみた。現在のバージョンが1.0.2で随分バージョンアップしてた。公式サイトもBundler: The best way to manage Ruby applicationsに。早速 gem install bundler。今までと変わらずRailsのプロジェクトにgemの依存性を定義したGemfil…

Rhodes 2.0.0β セットアップ

RubyとHTMLのコードを書けばAndroid、iPhone、Black Berry、Windows Mobile、Symbianで動作するネイティブアプリケーションを構築できるオープンソースのフレームワーク「Rhodes」をインストールしてみた。2.0になってライセンスもMITライセンスとなっており…

AP4RのデプロイをCapistranoで行う。

Rubyの非同期メッセージングライブラリAP4R。このAP4Rの起動/停止もCapistranoでやってみた。最初は自分でCapistranoのタスクを定義しないといけない?と思ってたけど、0.3.4からCapistranoのレシピが追加されてた。lib/ap4r/recipes.rbにAP4Rの操作系のタス…

Capistranoを使ってRails以外のアプリケーションをデプロイ。

CapistranoはRailsのデプロイツールとしてメジャーだけど、Rails以外のアプリケーションのデプロイもできる。ただ、デフォルトの設定のままだと、デプロイ時に、ログファイルやPIDファイルの格納先へシンボリックリンクをはったり、publicフォルダ以下のimag…

Ruby MineがBundler対応してる。

ちょっと前に、(Javaのmavenでの依存性管理と同様で)Bundler入れて便利だなーBundler入れてみた。 - Develop with pleasure!って思ってたらIntellijのRubyMineでもBundlerをサポートしたみたい。What’s mining: Bundler support in RubyMine | JetBrains R…

Capistranoでローカルリポジトリからソースを取得する。

Capistranoを利用してデプロイを行う場合、デフォルトの設定では、デプロイ先のサーバからモジュールを取得するためにソースが管理されているリポジトリにアクセスする。ただ、ソースを管理しているリポジトリは社内にあって、デプロイ先のサーバからは直接…

Amazon Elastic MapReduce Ruby Client

Amazon Elastic MapReduceWebサービスを呼び出すRubyのクライアントライブラリがAWSで公開されてる。Amazon Elastic MapReduce Ruby Client : Developer Tools : Amazon Web Servicesまず、セットアップ。 ↑のサイトからelastic-mapreduce-ruby.zipをDLし、…

Bundler入れてみた。

Rubyのアプリケーションを開発する際に、gemでインストールされてるライブラリが複数バージョンインストールされた状態で特に意識することなく使っていたけど、運用環境にデプロイした際に、ライブラリのバージョン差異による不具合に遭遇したりする。そんな…

Passengerのアーキテクチャ

Passengerのアーキテクチャを日本語訳してるサイト発見。Passenger アーキテクチャ概要 (koshigoe 仮訳)個人的にSpawnServerについてよく把握してなかったこともあったな。 ApplicationSpawnServerRailsのアプリケーションコードをキャッシュすることで、ア…

Ruby Enterprise Edition 1.8.7リリース

Phusionから、Ruby1.8.7に対応したRuby Enterprise Edition 1.8.7がリリースされたみたい。Ruby高速環境、さらに高速化 | 開発・SE | マイナビニュース もうちょっと早く分かってたら、こっちに乗り換えてたのになー。

mswin32版Rubyをビルドしてみた。

RubyのスクリプトからICMPプロトコルを使用したPingを発行しようと require 'net/ping' include Net Ping::ICMP.new("hoge.co.jp").ping?といったコードを書いて、実行するとRubyのプロセス自体が落ちた…。使ってるRubyのバージョンはmswin32版の1.8.7-p72。…

Passenger入れてみた。

RailsのサーバをPassengerにしてみた。Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 | Redmine.JP↑のBlogに詳しく記載されてるのを参考にインストール。いざ、Apacheを再起動すると403エラーが発生する…。 Apac…

RubyでSNMP

しゃべってみた。RubyでSNMPをしゃべるには、snmpというライブラリを使う。SNMP Library for Ruby普通に gem install snmpして、インストール先で、(setup.rbがあるので) ruby setup.rbすると利用環境が整う。例えばsnmpwalkするには、 require 'snmp' SNMP:…

Ruby1.8.7p72とCapistrano2.5.8でデッドロック?

久々にCapistranoをインストールし、cap deploy:setupコマンドを実行したら、パスワードの認証でパスワード入力したまま、何も応答が返って来ない…。特にエラーが起きるわけでもなく、ずっと応答が返ってこない…。環境は WindowsXp Ruby 1.8.7 p72 Capistran…

capistrano-ec2group

デプロイツールで有名なCapistrano。AmazonWebServicesのEC2にデプロイする用途に、capistrano-ec2groupというRubyのPluginが存在する。logandk/capistrano-ec2group · GitHub主に、EC2上でauto-scallingする際に力を発揮する。auto-scalling機能を使用してE…

Rails2.3.3リリース

Rails2.3.3がリリースされたみたい。Riding Rails: Rails 2.3.3: Touching, faster JSON, bug fixesActiveRecordに関しては、 ARオブジェクトのupdated_at/onのみを現在日時に更新するtouchメソッドを追加。 (プライマリキーがidでない等の)レガシーなスキー…

AWS::S3

RubyにAmazonのS3のRESTAPIを利用するライブラリがあったのね。AWS::S3 - Ruby Library for Amazon Simple Storage Service (S3)こちらのBlogで詳しく解説されてる。 cucumberグループ結構、お手軽にS3を操作できるみたいで便利そう。他にもEC2のサービスに…

久しぶりにRoR

軽量アプリをさっくり作ろう!と、久しぶりにRoR使うことに。長い間使ってなかったので、リハビリも兼ねてRails界隈の動向をチェック。現状の安定版のRailsは2.3。 Rails2.3の推奨環境に従ってRubyも1.8.7をチョイス。 Railsも随分バージョンアップしたなー…

Railsのデバッグ環境

IDEAも7からRuby及びRuby on Railsのサポートをしている。IDEA7の頃に実際の案件で利用したことがあるが、その時はコードアシストもそんなに(動的言語だからしょうがないんだけど)便利ではなかった。IDEA8.1になって今まで同様IDEAのPluginとしても利用可…