サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
y-nakajo.hatenablog.com
今回の記事はSolidity Assembly入門という連載記事の第2回目です。 この連載ではSolidityのコードをコンパイルした時に生成されるopcodeについて解説していきます。 この連載ではSolidityのコードをデバッグするのに必要な知識を得られることを目的としています。 前回の記事はこちら。 y-nakajo.hatenablog.com 第2回目の今回は、Solidity(というかEVM上)で利用可能なデータの記憶領域について説明します。 5つの記憶領域 Solidityのコードを実行する時にEVMでは以下の5つの領域を使ってデータのやりとりを行います。 stack memory storage calldata returndata 上記5つ以外にもcode領域というSmartContractの本体コードを格納する領域があります。code領域は読み取り専用のため、記憶領
今回は、いよいよ来週の2019/01/16にupdateされるConstantinopleで導入されるEIPのうちの一つである、EIP-1014について解説します。 eip-1014.mdにも書かれているとおり、これはstate channelに対して非常に重要な機能であり、個人的にConstantinopleで導入される機能の中でも一番注目しています。 では早速EIP-1014について解説していきます。 さわり CREATE2 opcodeはstate channelのためのopcodeであり、ユーザはまだchain上にdeployされていないContractにcommitしてoff-chainのやり取りを行えるようになります。 というのが.mdファイルに書かれている内容のざっくりとした説明であり、またその他のブログでも書かれている説明です。が、正直これだけだと何がどう変わったのか?なぜ
今回はEthereumでDappsを開発した経験のある人は1度は目にしたことがある、「ABI」について解説します。 ABIの仕様は以下のSolidityのドキュメントにまとめられています。 solidity.readthedocs.io ABI仕様の技術的な説明は上記ドキュメントに譲るとして、本記事では、ABIの目的やABIがどのように参照・利用されているか?に焦点を当てて解説します。 ABI(Application Binary Interface)とは 目的 ABIに準拠した言語(コンパイラ) 基本設計 関数セレクタ コンパイラーが準拠すべき処理 clientツールが準拠すべき処理 引数のエンコーディング コンパイラーが準拠すべき処理 clientツールが準拠すべき処理 型定義(エンコーディング) イベント コンパイラーが準拠すべき処理 clientツールが準拠すべき処理 JSONフォ
今回はEthereumに新しく機能を追加する提案であるERC-712を紹介します。 この提案はRPCにすでにあるeth_signをさらに拡張した新しい機能を追加する提案です。μRaidenでも疑似的に実装して利用しています。 github.com 簡単な要約 要旨 動機 仕様 Params JSON Schema: Example params: siner UIで同表示されるか 疑似コードの例: 根拠 下位互換性 テストケース 実装 まとめ 簡単な要約 Ethereumキーを使用して機械で検査可能で人間が判読可能な型付きデータ署名の標準。 要旨 Ethereum クライアントはeth_sign RPC 呼出でUTF-8文字列に署名する機能を提供しますが、署名済みのデータが文字列でない場合、DAppの実際の項目を表示するための十分なメタデータはこの呼出しでは提供されません。将来的にはオフチ
今回の記事はSolidity Assembly入門という連載記事の第1回目です。 この連載ではSolidityのコードをコンパイルした時に生成されるopcodeについて解説していきます。 この連載ではSolidityのコードをデバッグするのに必要な知識を得られることを目的としています。 第1回目の今回は、今後の連載で使うことになるRemixのデバッグ機能の使い方を説明したいと思います。 スマートコントラクト 今回の記事ではこのスマートコントラクトを使っています。 pragma solidity ^0.4.24; contract SimpleContract { uint public a; bytes32 public b; constructor() public { } function setNum() public { a = 1; b = bytes32(0x02); } }
Ethereumでスマートコントラクトを実行するとgasを消費します。そのため、スマートコントラクトを実行するために発行するTransactionにgas limitを指定する必要があります。 さて、このgas limitって一体いくつに設定したらいいのでしょうか?Transactionのgas limitの指定にはいろいろな条件があるため勝手な値を指定したところでうまく動かない場合もあります。 今回はgas limitを設定する時に考慮すべき条件と、適切なgas量を計算してくれるestimateGasの使い方についてまとめてみました。 gas limitに関係してくる様々な条件 2つのgas limit block gas limitによる制限 最低gas limitの制限 gasの消費量を予想できるestimateGas web3.jsでの使用方法 web3.eth.Contractも
自分がEthereumを学習したときの経験を元にゼロからEthereumを勉強するためのロードマップをまとめてみました。 先人たちは大体この流れで学習を進めていったと思います。 1. Ethereumのnodeを立ててみる go-etherem parity その他 2. Walletを使ってみる MetaMask それ以外の有名なwalletアプリ 3. Ethereumについて深く学習する 4. SmartContractを書いてみる Solidiyの公式ドキュメント Remix (browser-solidity) EthFiddle.com 5.Solidityについて深く学習する CryptoZombieで体系立てて学ぶ SmartContractのセキュリティーについて リリースノート 自分のブログ記事もおすすめ 6. Truffleを導入してSmartContractのプロジ
最近特にホットな話題となっているPlasmaの勉強会が開かれるということで早速参加してきました! plasma-research.connpass.com 今回はPlasma勉強会の第1回目のレポートをまとめたいと思います。 また、参加メンバーのリアルタイムツイートについてもtogetterにまとめてますのでライブ感はこちらで体感してくださいw togetter.com 申し込み後、抽選待ちとなり抽選結果が送られてくるまでドキドキしました。compassで公開されてから結構早めに申し込んだつもりではいたのですが、さすがの話題のPlasmaというだけありすぐに枠が埋まりそうになっておりギリギリに滑り込めた感じでした。 @UNOkovさん、このような素晴らしい勉強会を開催していただいてありがとうございます。 また、今回の勉強会では@UNOkovさんの提案でpostalk.ioによる情報共有もな
Hi-Etherで少し話題に出ていたuPortを実際に触ってみました。 uPort Developer Portal uPortの説明についての説明はこちらのブログが綺麗にまとまってますのでご参照ください。 zoom-blc.com 今回はuPort AppManagerを使ってUport Appを自作する手順についてまとめました。 作業手順としては下記の公式ドキュメントを見ながら進めました。 http://developer.uport.me/guides.html 1. uPort Mobile Appのインストール まずはお手持ちのスマホ(Android / iOS)にuPortアプリをインストールします。uPortではEOAではなくユーザにIDを割り当てる方針のため、何らかのdeviceを通じてIdentityを取得する方針のようです。uPort IDを生成するためにはSMSを受け
2018/04/13に開催されたHi-Ether Meetup - Block #2に参加してきましたのでそのレポート記事です。 会場はすごく綺麗なDMM.com様のイベントスペースでした。 東京タワーが綺麗で完全におのぼりさん状態で写真撮ったりしてましたw また、今回から@kazush-mさんがLive配信と動画の撮影もされていますので、動画でもイベントの様子や各スピーチをご覧いただけます。みんなが自発的に行動しており、どんどん内容もパワーアップされていってて本当にすごいコミュニティーだなーと感じました。 meetupのlive動画はこちらです。司会・進行は@wshinoさんです。 www.youtube.com @kazush-mさん、live配信から動画撮影・編集本当にありがとうございます! DMM.com様のご挨拶 www.youtube.com イベントスペースをご提供していただ
新しく提案されているERCでは他のERCを利用しているものが多くなってきました。今回はその中でも個人的によく目について気になっていたERC-165とERC-820について調べたことをまとめます。 ERC-165とERC-820は基本的にはどちらもStandard Interface Detection、標準インターフェース検出の提案です。ContractがEIPで定義されたどのインターフェースを実装しているかを定義する方法を提案しています。 ERC-165はNon-fungible Token Standardの提案であるERC-721で利用さており、またERC-820は多分一番新しい?拡張Tokenを提案しているERC-777で利用されています。 github.com github.com ERC-165の提案内容 サマリ 抽象 動機 仕様 標準インタフェース識別子 EIP165インター
truffleを使ってContractをデプロイしようとした時などによく目にするエラーメッセージ insufficient funds for gas * price + value や exceeds block gas limit などのエラーはnodeがtransaction poolに新しくtransactionを追加する際のチェックに通らなかった時に発生します。 今回は、sendTransaction時に発生するこれらのvalidation erroについて調べたことをまとめます。 なお、これらのエラーが出た場合はtransaction poolに入らないため、そもそもtransactionは発行されていません。なのでetherを消費することもありません。 なお、go-ethereumの実装を参考にしていますので、他のethereum実装では違う可能性があります。 invalid
意外に情報が少なくて、解決するのに時間かかったので自分用メモのつもりでブログに残しておきます。 Ropstenのガスリミットは4700000 Ropstenのガスリミットは4700000だそうです。truffle(に限らないのかな?)でgas limitを指定しなかった時のデフォルトが4712388らしいので、testnetやmainnetにつなげる場合は、ガスリミットを指定してあげましょう。 ついでにgasPriceも指定しておくとなお安全です。デフォルトではgasPriceは100GWeiなのでtruffle initした後に間違ってRopstenにmigrateしちゃうとかなりのehterを持って行かれてしまいます。。。 module.exports = { networks: { development: { host: "localhost", port: 8545, netwo
Ethereumの開発者コミュニティーでは常に新しい提案が発表されています。Token Contractの標準としては現状EIP20が主流ですが、この標準規格も問題がないわけではなく、常にそれらの問題を解決するための新しいToken標準が提案されています。 今回は比較的新しい提案であるERC-777について調べてみたことをまとめました。 github.com 簡単な要約 トークンコントラクト用の標準インタフェースを作成します。 この標準の公式リポジトリは、jacquesd/eip777にあります。 抽象 この規格は、トークン契約と対話する新しい方法を定義しています。この標準では、契約書や正規アドレスがトークンを受け取ったときに、古い契約と互換性を保つためにEIP-820を利用して通知します。 動機 この規格は、広く使われているERC-20トークン標準を改善しようとしています。この規格の主な
ethereumコミュニティーで、配列の途中のデータを削除して、全体を詰めたいのですがSolidityでどうやったらいいのですか?っていう質問があったので、いろいろと調べてみました。 結論としては、Solidityでは配列の要素を削除できません。 理由としてはgas代が予想できないほど膨れ上がる可能性があってなかなか難しいっていうのがわかりました。 ただ、gas代を無視すれば自分でそうした処理を書くことはできます。以降では実際に実装しながら理解したSolidityで配列の要素の削除が難しい理由を説明していきます。 なお、本記事で公開しているコードはいろいろな問題を含んでいますので実案件では利用しないでください。 1.普通に実装してみる 冒頭でも書きましたが、Solidity自体には配列の要素を削除するfunctionは用意されていません。ので自分で実装します。 一番単純なアルゴリズムとして
Solidityでは引数などの値の妥当性を検証するためにassertとrequire関数が用意されています。また、コードの実行をストップさせるためのrevert()関数もあります。今回はこれらの関数の挙動についてまとめてみました。 assert(condition) assert関数はconditionがfalseを返した場合、そこでcontractの実行を停止し、contractの状態を実行前に戻して残りのすべてのガスを消費します。 assertをコンパイルするとopcode=0xfeになり、evm上では0xfeは未定義のopcodeなので動作が停止されます。 require(condition) require関数はconsitiongafalseを返した場合、そこでcontractの実行を停止し、contractの状態を実行前に戻して残りのガスをcallerに返却します。 asser
Ethereum Advent Calendar 2017 の 7 日目の記事です。 ContractにEventを定義すると、Contractの状態が変更された時などに必要な人が通知を受け取れるようになります。 しかし、getter系のfunctionにはEventが設定できなかったりします。 今回はこのEventの挙動はなぜなのか?Eventはどのように動いているのか?について調べたことをまとめます。 Eventの実態について Event監視のためのweb3.eth.filterについて web3.eth.filterのwatchとgetの使い分け Eventの実態について Eventの実態はTransactionReceiptに記述されるLogデータです。 event Deposit(address _from, bytes32 _id, uint _value);このようなEven
ethereumの勉強をやってるととにかくnpmでいろいろ入れたり消したりするんだけど、npmでローカルインストールした時に自分の意図しないプロジェクトにまで影響出ることがあって、なんだかめんどくさくなったので今更ながらにdockerで開発環境を分ける事にした。 dockerを使うのは初めてなのでいろいろ調べてたら、どうやらdocker実行時はデフォルトでroot権限で動くらしい。 ソースコードはIDEからいじりたいので、ファイルはホストと共有するのでroot権限のまま作られると扱いが困る。 なのでdockerを起動したユーザーと同じ名前のユーザーをdockerコンテナ内でも作成してファイルの共有がスムーズになるような設定を四苦八苦して作ったので完成した設定ファイルを載せておきます。 container起動時の権限ユーザの指定とかdocker container上でユーザーを作成とかはバラ
このページを最初にブックマークしてみませんか?
『アルゴリズムとかオーダーとか』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く