HOMMESこの広告は、90日以上更新していないブログに表示しています。2018-02-20web3.jsでgethにアクセスするやっとできたぜゲスゲスゲス...ゲスをつなげるとなんかやばみがあることがわかったところでWeb3.jsの1.0.0の情報がとても少ないので書いておきます。web3すでにGethが入っているならこれだけで最新版のWeb3は入ります。Web3.jsの0.x.xと1.0.0はかなり違うみたいなのでふるいやつを使いたい場合は注意。gethサーバーでrpcを有効にする詳しくはこちらを参照。"eth,net,web3,personal"rpcapiはとりあえずpersonalも含めておいたがとりあえず動かすだけならいらないかも。javaScriptを書く1.0.0のドキュメントにもあるのだが、まずweb3のインスタンスを作ってプロバイダをセットし、そのごIPCプロバイダを設定してコネクションオープンにする。ここがよくわからなかった。providerを設定する場合は不要。web3.eth.isMining().then(console.log);ぐっとUIが作りやすくなったけどJSよく知らんのよね...ついでにスマートコントラクトを動かすところまで書くことにしました(というかようやくわかったSolidityでスマートコントラクトの実装をするとりあえずget/setの簡単なやつをサンプルにしてみる。HOMMESだがnpmでsolcをインストールしてnode上で使えるようにする方法もあるみたい。これでも読んどいてやmedium.comとりあえずabiとbinaryを取得します。//コピペした場合はこんな感じに。//ファイルに書き出して読み込ませてもよい。//Readする場合はcallを使う。戻り値が欲しい時はコールバック関数を指定。/*Writeする場合はsendを使う。});});こりゃひどい。JSのコーディングパターンとかないのか。15:08web3.jsでgethにアクセスするTweet広告を非表示にするもっと読むコメントを書く2018-02-09Ubuntu17でSolidityでスマートコントラクトをするざっくりすぎるタイトルである。Solidityで感覚を掴んでいくことにします。JavaScriptに寄せた記述方式になっているので、モダンで高級な言語が眩しい化石エンジニアでもとっつきやすそうです。.とりあえずメインのアカウントに大量のEthereumが付与され、テストで使えるようになります。devオプションをつけた場合、マイニングが行われるのはアカウント間の送金が発生するときだけとのことなので、トランザクションを実行した後に必ず送金処理が必要なことに注意しましょう。参考:https://github.com/ethereum/go-ethereum/issues/15646gethコンソールを開く別のターミナルを開いてコンソールとして使用します。ここにあるmodulesっていうのがすでにあるインスタンス。ためしに打ち込んでみます。function()}adminインスタンスの持ってる変数やら関数やらが見れます。やって使うのかはよくわからない...昔のが残っていることもあり、使えないのも結構ある。ドキュメントを読むかソースコードを読むしかない。eth.getBalance(eth.accounts[0])1.15792089237316195423570985008687907853269984665640564039457584007911129021018e+77大金持ちです。テスト用なので最初から大量の付与してくれているみたいです。eth.accounts[0]は自動で作成されるアカウントで、coinbaseとして設定されています。personal.newAccount()パスフレーズが要求されるけど、テスト用でプライベートなので特に設定しなくても良いです(設定しても良いアドレスっぽい文字列が表示されればOK。personal.unlockAccount(eth.accounts[1])trueパスフレーズを求められるけど、アカウント作成のときに使ったやつを入れればOK.gasPriceを設定するEthの仕様なのかSolidityの仕様なのかまだちゃんと読んでないので知らないが、SmartContractを実行するのにgasPriceという手数料が課される模様。開発者モードではデフォルトが0なので、本番環境でアレ?ってならないようにとりあえず0より大きな数を設定しておきます。miner.setGasPrice(1)truegethノードを実行しているターミナルの方でpriceがアップデートされてればたぶんOK。failed"って言われるが特に気にしなくてよい。Solidityですまずソースコードを書きますとりあえず公式ドキュメントのサンプルプログラムを動かしてみます。//includeみたいなもの。//payableとかreturnの型とかも設定できる。}}写経(コピペ)したらtest.solという名前で保存します。安心する見た目ですね。コンパイルするコンパイルはコマンドラインから。Remix使ってもいいけどとりあえず導入がめんどくさいし大した手間でもないので。コンパイルは新しいターミナルを開いてから。gasオプションを指定しているから)。ABI[{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]結構バスバスgasを消費するようです。Setのほうがコストが高いんだなぁ。gathノードでSolidityアプリケーションを動かすアナクロな方法でSolidityアプリケーションをGethに認識させます(デプロイします)。ここからの作業はgethコンソールで。ABIをコピペして貼り付けるのです。Binaryは0xをつけてダブルクオテーションでくくること。準備ができたのでインスタンスを作成します。"0x6b2690deca3d191dde77ec4e88f51192437023feb684219b0b51d4409aa7e209"}これでインスタンスは作成されたけど、まだブロックチェーンには登録されていません。addressがundefinedです。登録するためにEthを動かします。function()}addressにアドレスが設定されているのでOKです。get/setを使ってみます。test_inst.get.call()1ちなみにeth.getBalance(eth.accounts[1])とすると適度にEth(というかwei)が消費されていますデリゲートも使えるみたいなんで自由度高いですね。Irohaをビルドするやっぱgoとかわかんない(パッケージ関連が特に)のでC++でEnjoy!することにしました。Moreのリンクがことごとく切れてて瀕死なのだが...まぁいいや。基本的な手順はこちらから。..libpqがないというエラーがでるので追加する。definedのようなエラーが出る。Foundationは、業界間のブロックチェーン技術を発展させるため、2015年にHyperledgerを設立しました。標準となるブロックチェーンの策定だけでなく、コミュニティプロセスを通じて、オープンな開発と長期的な主要規格の採用を促進する知的財産権を持ったブロックチェーン技術の共同開発を促進するためです。Fabricは、Hyperledgerのブロックチェーンプロジェクトの1つです。他のブロックチェーン技術と同様、帳票を持ち、スマートな契約を使用し、参加者が取引を管理するシステムです。Fabricと他のブロックチェーンシステムの違いは、privateと許可の概念があることです。Workのようなプロトコルが必要)のではありません。Fabricネットワークのメンバーはメンバシップサービスプロバイダ(MSP)で登録をしなければなりません。Fabricには、プラグインを追加することもできます。プラグインをしようすれば、複数のフォーマットで帳票のデータを保存することができ、コンセンサスのメカニズムを入れ替えたり、別のMSPをサポートしたりすることができます。Fabricでは、チャネルを作成する機能も提供しています。取引帳票を分割して作成し、グループごとに運用することが可能なのです。この機能は競合にデータを公開したくない参加者や、すべての取引を公開したくない参加者――たとえばある顧客には特別価格を提示しているが、別の顧客にはしない場合など――には非常に重要なオプションとなるでしょう。2人の参加者が1つのチャネルを作成し、それ以外の参加者に公開しなかった場合、チャンネルの帳票は二人の参加者だけに公開されます。Fabricは二つのコンポーネント、ワールドステートとトランザクションログからなる帳票サブシステムを持っています。Fabricネットワークの帳票コピーを保持します。ワールドステートコンポーネントはある時刻における帳票の状態を記述したものです。いわゆる帳票のデータベースです。トランザクションログコンポーネントはワールドステートの現在の値をもたらしたすべての取引を記録します。ワールドステートの更新履歴というわけです。帳票はワールドステートデータベースとトランザクションログ履歴の組み合わせということなのです。帳票はワールドステートと交換可能なデータストアを保有しています。デフォルトではLevelDBキーバリューストアデータベースで作成されています。トランザクションログはプラグインである必要はありません。ブロックチェーンネットワークで使用された帳票データベースの更新前後の値を記録しておくだけで良いからです。Fabricスマートコントラクトはチェーンコードで書かれており、アプリケーションが帳票とやり取りする必要があるときにブロックチェーンの外部のアプリケーションから呼び出されます。ほとんどの場合、チェーンコードは、帳票のデータベースコンポーネントとワールドステート(クエリなど)と相互作用しますが、トランザクションログは使用しません。チェーンコードはいくつかのプログラミング言語で実装できます。現在のところはJavaとGo言語が使用できますが、今後のリリースで追加される予定です。プライバシーBtoB(Business-to-Business)ネットワーク参加者は共有される情報量に非常に敏感になることがあります。その他のネットワークではプライバシーは最優先事項ではありません。Fabricは、チャンネルを使用したプライバシーを主要な運用要件としたネットワークとそうでないネットワークの両方をサポートします。コンセンサスネットワーク内で発生するトランザクションは、それがたとえ異なる参加者間のものであったとしても全て順番に帳票に書き込まれなければなりません。そのためにはトランザクションの順序が立証されている必要があり、また帳票にあやまって(もしくは悪意を持って)挿入された悪いトランザクションを排除する方法が導入されていなければなりません。コンピュータサイエンスの分野では研究が行われており、幾つかの方法が提唱されていますが、それぞれにトレードオフとなる点が存在します。Tolerance)は、衝突が起こった場合に各コピーの整合性を保つように複製されたファイル同士が通信するメカニズムを持っています。Bitcoinでは、マイニングと呼ばれるプロセスを通じて順序付けが行われます。マイニングでは競合するコンピュータはそれぞれのプロセスが算出した結果に基づいて順序を定義する暗号化問題を解くことで順序を決定します。Fabricは、ネットワークを開始する人が参加者間の関係性をもっともよく表すコンセンサスメカニズムを選択できるよう設計されました。プライバシーの観点と同様、高度に関係性を構造化したネットワークから、ピアツーピアまでネットワークの種類は多様です。Tolerance)への拡張を発表する予定です。hyperledgerBlockchainのプラットフォームでまぁそこそこ知名度あるでしょう...という感じなのだが意外と日本語訳がない。Foundationで開発されている。スケーラビリティを提供するモジュラーアーキテクチャで構成される分散型帳票ソリューションのプラットフォームです。異なるコンポーネントをプラグインで拡張できるような実装をサポートしており、エコシステムやネットワーク全体にまたがる複雑さに対応できるように設計されています。Fabricは、独自の柔軟性と拡張性のあるアーキテクチャを提供しており、ブロックチェーンソリューションとは区別されます。エンタープライズブロックチェーンの未来を計画するにあたってもっとも大切なのは、十分に検証されたオープンソースアーキテクチャを使用することです。Fabricがあなたの出発点です。Fabricにはどんな機能とコンポーネントがあるのか、他のブロックチェーンとはどこが異なるのかを理解するためにIntroductionを一読することをおすすめします。Startedに進み、デモや技術的仕様、APIなどを調べましょう。Ledger)ブロックチェーンネットワークの肝は、ネットワーク上で発生するすべてのトランザクションを記録した分散帳票です。ブロックチェーン帳票はしばしば分散型と呼ばれますが、これはメンテナンスに協力するネットワーク参加者によって複製されるためです。分散と協力が、リアルな世界でのものやサービスを交換するビジネス手法と等価となる強力な特徴なのは明らかです。分散型で協調的であることに加え、ブロックチェーンでは情報の記録のみを行います。帳票に追加されたトランザクションは、一意性を保証する暗号化技術を使っているため変更ができません。この不変性は情報の出どころを特定しやすくします。情報がある事象以後変化していないことが明らかであれば、履歴をたどるだけで良いからです。この性質から、ブロックチェーンは証明システムと呼ばれることもあります。スマートコントラクト情報の一貫した更新と、全体的な帳票機能(トランザクション、クエリなど)を可能にするために、ブロックチェーンネットワークでは帳票へのアクセス制御を行うスマートコントラクトを使用しています。スマートコントラクトは単なる情報のカプセル化に使用されるキー・メカニズムというだけでなく、ネットワーク全体をシンプルに保つための機構でもあります。スマートコントラクトは参加者に特定の側面のトランザクションを自動で実行できるようにも記述されています。スマートコントラクトは到着時期によって変化する商品のシッピングコストを記述することができます。両当事者で同意した条件に従って、商品が受け取られると自動的に帳票に書かれているとおりの適切な資金が受け渡されるのです。コンセンサス帳票はトランザクションが適切な参加者に酔って承認されたときにのみ更新されなければなりません。ある帳票が更新されたら、他の帳票も同じ順序で同じトランザクションを更新しなければなりません。これを確実なものにするため、ネットワーク上で帳票のトランザクションを同期させるプロセスをコンセンサスと呼びます。我々はこの章以後に帳票、スマートコントラクト、コンセンサスの詳細を説明しますが、今の段階ではBlockchainとはスマートコントラクトによって更新され、コンセンサスと呼ばれるプロセスを通じて継続的に同期される、共有・複製されたトランザクションシステムだと思っていれば十分です。ブロックチェーンは有用なのか?現在の(一般的な)記録システム現在の業務ネットワークはビジネスの記録が保存されるようになって以来、ほとんど進化していません。ビジネスネットワークのメンバーはお互いに取引を行いますが、彼らは彼らのトランザクションに従って別々に記録をメンテナンスしています。彼らが取引したものは、たとえそれが16世紀のフランダースのタペストリーであっても、現代の有価証券であってもそれぞれの場合において売買したことと、所有権が明らかでなければなりませんし、商取引は立証されていなければなりません。現代の技術によってこれらのプロセスは、石や紙からハードドライブやクラウドプラットフォームへうつりました。基本的な構造は変わっていません。ネットワーク参加者のIDを管理する統一されたシステムは存在しません。仮に実現したとしても、有価証券の売買に数日を要します(その間に世界では数兆ドルの取引がおこなわれます)。契約はサインが必要ですし、手動で行われなければなりません。このようなシステムのそれぞれのデータベースには単一の情報が格納されているため、単一障害点が存在していることになります(障害が発生した場合に、すべてのシステムが止まります)。ビジビリティと信頼性が明らかに必要とされているにも関わらず、今でもまだ情報へのアプローチ方法は十分ではなく、記録システムをビジネスネットワーク全体にまたがって構築するのは不可能です。仮に一旦行われたら二度と変更されることのない、信頼のおける取引のリストを元に資産のでどころを確定できるとしたら?そうすると、ビジネスのネットワークはこのようになります(中央に認証する機関を置く必要がなくなります)これがブロックチェーンネットワークです。このネットワークの参加者は全員帳票を複製して所有します。帳票の情報はシェアされるだけでなく、更新のプロセスも共有します。現代のシステムのように参加者がプライベートなやり方でプライベートな帳票を更新するわけではありません。ブロックチェーンシステムでは方法も帳票の更新も共有します。共有された帳票をつかってビジネスネットワーク上で協調することができるようになると、ブロックチェーンネットワークは時間とコストとリスク――これはプライベートな情報そのものです――を削減し、信頼性とビジビリティを向上させることができます。あなたはもう、ブロックチェーンがいったいどんなもので、なぜ有用なのかがわかったことと思います。他にも色々と重要なことはありますが、それらは情報の共有とプロセスの基本的なアイデアにもとづいています。あとでもうちょっとこなれた訳にするかも。Hyperledgerとはなにかというはなしになるみたいです。ubuntu公式ドキュメントが色々と不親切なので書いておく。ちなみに公式はこちら。documentationVMにUbuntu16をインストールするインストール方法はISOイメージダウンロードしてマウントするだけなので省略します。余計なパッケージはインストールせず、素の状態でいれます。rebootrootパスワードを設定するHyperledgerのビルドはrootじゃないと失敗するっぽいので。rootパスワードを設定する。LanguageGoの公式を見に行くほうが早いが。公式からアーカイブファイル(tar.gz)をダウンロードする。/usr/local/go/binあればOK。PATH=$PATH:/usr/local/go/binと記述して保存。rootでも同じ事をするのを忘れないように。~/.bashrcGOはこれでおわり。CEをインストールするDockerはちゃんとドキュメント書いてくれてるのでその通りすればいい。updateレポジトリ追加したらupdateを忘れない。--version1.16.1って表示されればOK。documentationこの通りやれば問題ない。get-pip.pyをダウンロードする。get-pip.py書き込む場所的にsudoつけないとだめみたい。python3-devをインストールしてないとここでエラーが出るので注意。IDがなぜかEmptyになってしまっておりできない...なのでReadonlyのレポジトリから取得。cryptogenでやる。詳しくはstackoverflow.com最後に忘れずにパスを追加するfabric/build/binの下に色々できているのでPATHに追加する。16:40HyperledgerをUbuntu上でビルドするTweet広告を非表示にするもっと読むコメントを書く2017-08-22groongaの管理画面が更新されない問題C-APIからテーブルを作ったり消したりインサートしたりモゴモゴしたりしていると、ローカルのgroongaサーバは正しく動いているのに、ブラウザから管理画面を見たときにカラムがずれてたり値が全部0になってたりすることがある。groonga-httpdを再起動すれば直るので、これはキャッシュの問題だな...まあでも毎回groonga-httpdを再起動すればいいといえるような頻度ではない(ものすごく頻度が高い)のでC-APIから解決する。db);でOK!なはずなんだが、それでも時々ずれてることがある。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。