イーサリアム 2.0 にはコンセンサスレイヤーとしてビーコンチェーンがあります。このチェーンのブロック構造を調べてみました
「Ethereum」タグの記事が52件件あります
全てのタグを見るイーサリアム 2.0:ロードマップ概観
イーサリアムは 2015 年から稼働してから既に 7 年間以上稼働しています。 全体的な完成度は、vitalik は 2022年9月15日実施された The Merge の後、ようやく 55% になっていると発言しています。 改めて、イーサリアム 2.0 のロードマップを確認してみたいです。
イーサリアム 2.0:全体アーキテクチャ
The Merge が実施され、イーサリアムは順調に 2.0 に進んでいます。 コンセンサスアルゴリズムが PoS に切り替え、シャーディングも実装されるため、1.0 よりアーキテクチャが複雑になってきたので、整理してみました。
2022 年 12 月では、シャーディングまだ実装できていません
イーサリアム Goerli テストネットのテスト ETH 入手する方法 2022 版
イーサリアム 2.0 の The Merge 実施できて PoS に切り替えたので、テストネット Ropsten / Rinkeby / Kiln がシャットダウンして、今後は、テストネットは Goerli と Sepolia が稼働するためこちらを使いましょうと発表されました。
https://blog.ethereum.org/2022/06/21/testnet-deprecation
本記事では、Goerli テストネットの ETH 入手方法を紹介します。
alchemy サービスの紹介
初心者向け Solidity セキュリティ入門:Re-Entrancy 攻撃と対応方法
スマートコントラクトで実装する web3.0 アプリケーションは、公開・透明を実現する為ほとんどオープンソースしているので、資産を持っている上に全ての処理を公開していて、非常時攻撃されやすい状況になっています。 よって、web3.0 アプリケーションにとっては、スマートコントラクトのセキュリティは一番重要なことと言っても過言ではありません。
本記事では、初心者向けに、Re-Entrancy 攻撃と対応方法を紹介します。
Solidity 0.8.0 で導入された unchecked の調査
OpenZepplin の ERC721 スマートコントラクトのソースに、知らなかったキーワード unchecked
があったので調べてみました。
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId, 1);
// Check that tokenId was not minted by `_beforeTokenTransfer` hook
require(!_exists(tokenId), "ERC721: token already minted");
unchecked {
// Will not overflow unless all 2**256 token ids are minted to the same owner.
// Given that tokens are minted one by one, it is impossible in practice that
// this ever happens. Might change if we allow batch minting.
// The ERC fails to describe this case.
_balances[to] += 1;
}
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId, 1);
}
eth.rb を使ってスマートコントラクトの関数を呼び出す
web 3.0 業界は js が多い印象ですが、ruby からも使いたいですね。ここ数年間は、ruby の gem も増えているように見えます。 イーサリアム公式サイトのページに載せている eth.rb を使ってみました。
公開鍵技術による認証方式の紹介
公開鍵技術は、web 2.0 でもいろいろ使われていながらも、web 3.0 の基本構成の技術の1つではあります。
ERC 4337 account abstraction の整理
Ethereum のアカウントが下記2種類があるのは既に知られていると思います。
- EOA:外部所有アカウント、つまり人間がプライベートキーで制御して使うアカウント
- CA:コントラクトアカウント、スマートコントラクトをデプロイしてできたアカウント。プライベートキーなし
また、現状はプロトコル上、トランザクションは EOA による電子署名したものである前提になっている為、すべてのトランザクションが EOA からトリガーさせて実行していて、CA からはトリガーできません。
せっかく CA でいろいろ自動化できているので、この差をなくして EOA なしでもっとコントラクトウォレットを利用したいことが結構初期段階から考えられています。 また、 EOA の場合プライベートキーでフルコントロールできるため、セキュリティ向上は重要な課題であり、常に問題視されています。 これらを解決するために、EOA ではなく、CA を活用しよりセキュアなウォレットを実現したいのが、Account Abstraction (AA)になります。
他の EIP もありますが、新しいトランザクションタイプの追加や新しい opcode の追加のようなプロトコルレイヤーの修正が必要なので、あんまり進められていませんでした。ERC4337 は、それらの修正の必要ない新しい考案であるため注目されています。
ERC4337 の設計は、メタトランザクションを参考して実現しています。参考記事が詳細があるので、ここはシーケンス図を載せておきます。