From f20515285c6e0288f01a628791dd2793ba6a7565 Mon Sep 17 00:00:00 2001
From: GitHub Action `W5>GIQ*^{+mGl-NSiNa@I<}Y!f@Eupa(Z)BWz{{91n|V1AhtmU6IO&b8;i
z%9-CCo?l=738~!0f7J%RJ2+2yXIsuMD{LEAZ-XAr}
?h!Sj%o>He9kWS|
z2);jFAW?5OJc_c$Sp~U-RDA|66(%aSD(Zdc3
z_4E+<)#>LC=K=k@=hX>Y1<7#d&^<5cmoyp{De^@*)Fq$kz6yfWiHZH&(BzZY+_~1}
zcLV-yU{O+G
UH6YZ}}~sFvaXo8tMF;
z{nc}A*q~s{Md1ix;pX_h;wE|=($E+YTSq&v5g8fHl4b9L=+UmnsSieQe0o^=%A=Bb
zO7gD`JD(|DSt|%(CQDQD)rUtVcM!6Ya|_eZ`rJxCq*<0})6wvGq!7nU?W~+&Wh|UL
zpWHI>tf^D}ajpnUos5J{Xisz~WpsYxjl?Q4GQljK*oaUvp1BqF?bO6!#pLjyZN=v)
zq~-Gs<|pJbjgvY+CP8yW^;4D!vs~Pp%VclHniveRTK!fz
01%=-ndl0bBs+Wh4~K#hlmGw#
literal 0
HcmV?d00001
diff --git a/public/content/translations/ja/developers/docs/consensus-mechanisms/pos/attestations/attestation_schematic.svg.xlsx b/public/content/translations/ja/developers/docs/consensus-mechanisms/pos/attestations/attestation_schematic.svg.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..60a99a0854aefeba656036f750ed1b95de5e217c
GIT binary patch
literal 5032
zcmaJ_1yqy!`yWgMqz1_7x-
e5AAZdco0SA9Qkx=AJC06=tSgS`yte{*
zJX-k*A}B6+Q`#@x!`lc;{>}w@Tv=03#zYmBVt#MN!L)4jweZ+OAtKT(!$7u(LG1^h
zoQLWN$Yo|kSV>Y1^6n}-#MIxYc5&L0jBCP_D8zCJ%bf)0UJu12SedWTnI^Kxs9rL$SA>YC
zwKpJw63V|--rgR`w&U3Ay|ZzW)tKAIYPg&@
8{p3@W zsmr+C?*E>Ne1o8;PUK5rUj~LR9YF8MP=wJSuTt0~rc(^IFJctmm-3;rmt~bcO^J$lAuKPm*p;?>c|; JO@W97kQRoSOM_%px zP`+O$BRgJ)M^$u#6nZ$oN@97#*t&slr*uzyyt{Ir@FdY}a_?H4#}=A0ioX>b@?VMO z>E-KW^Rq#|HPCd;5CR?Xr3hwJMpPH46GeGsujV~)$}@|D$I=Et{KdnM58~lo-p`Ae z3}uplK2vWR_AVswvUBHl$9|QUx?$5U&>vOZdaH-6cn#B3yPtX=Fmc=D5?_f^3WtAT zFQ6(#J2Xiy@l`|&1z=vrN}g=!%QMg1>eQ7?2^OKRgmlV+zVw#p!8P%Igiu>@Ui54r zY|7KU-74vez)QB FVnEvv;G^vAr7 L=!quDaR?N{4m2+cJznKG*hPNOsI!Ak5d{7uhdO%R9~y9d5Vr1 z71mX@Fm}DGn-+JJUb~)ssb6KOkNCrQA{y3lF;_H-gp5-CT4+0Z$hVDC;3zs`4EP`$ zH%j@PVS1BJTQZk~!s3#U$#odcQ!Nv+k3OM31JXHn3JqA5)9u;al!-S&_~!K_MG^<( zbnNiIDm=Wz!MVu5___aq-`y@I{&=+#pY=v=4KzCT#po*|4JK2~h@+~G
diff --git a/public/content/translations/ja/developers/docs/mev/index.md b/public/content/translations/ja/developers/docs/mev/index.md index b2bd06e203e..cde64ddc8ef 100644 --- a/public/content/translations/ja/developers/docs/mev/index.md +++ b/public/content/translations/ja/developers/docs/mev/index.md @@ -6,7 +6,7 @@ lang: ja 最大抽出可能価値(MEV)とは、特定のブロックにおけるトランザクションの追加、削除、または順序変更により、ブロックの生成時において標準的なブロック報酬やガス代を超過して抽出できる最大の価値を指します。 -## 採掘可能価値(MEV) {#miner-extractable-value} +## 最大抽出可能価値(MEV) {#maximal-extractable-value} 最大抽出可能価値(MEV)は、 [プルーフ・オブ・ワーク](/developers/docs/consensus-mechanisms/pow/)に基づき導入された概念であり、当初は「採掘可能価値(MEV)」と呼ばれていました。 プルーフ・オブ・ワークでは、トランザクションの追加、削除、および順序決定をマイナーが管理していたためです。 しかし、[マージ](/roadmap/merge)によるプルーフ・オブ・ステークへの移行後、バリデータがこれらの役割を担うようになり、マイニングはイーサリアムのプロトコルから削除されました。 しかし、価値採掘のための手段は依然として存在するため、現在は「最大抽出可能価値」という用語を用います。 @@ -102,7 +102,7 @@ MEVは必ずしも絶対悪ではなく、イーサリアムにとってはよ ネットワークレイヤーにおいては、汎用フロントランナーやガス価格のオークションが頻繁に用いられるため(複数のフロントランナーが、次のブロックに追加されるトランザクションのガス代を吊り上げる競争を行う場合)、ネットワークの混雑が悪化するだけでなく、通常のトランザクションを実行したい他のすべてのユーザーにとってもガス代が上昇してしまいます。 -MEVは、ブロック _内部__における影響に加えて、複数のブロック_間_においても悪影響をもたらす場合があります。 特定のブロック内において獲得できるMEVが標準的なブロック報酬を大きく上回る場合、バリデータにとっては、ブロックを再編成し、バリデータ自身がMEVを獲得しようというインセンティブが発生しうるため、ブロックチェーンの再編成を促し、コンセンサスの安定性が損なわれる可能性があります。 +MEVは、ブロック _内部__における影響に加えて、複数のブロック_間_においても悪影響をもたらす場合があります。 特定のブロック内において獲得できるMEVが標準的なブロック報酬を大きく上回る場合、バリデータにとっては、ブロックを再編成し、バリデータ自身がMEVを獲得しようというインセンティブが発生しうるため、ブロックチェーンの再編成を促し、コンセンサスの安定性が損なわれる可能性があります。 このブロックチェーンが再編成される可能性は、 [すでにビットコインのブロックチェーンにおいて発生しています](https://dl.acm.org/doi/10.1145/2976749.2978408)。 ビットコインのブロック報酬が半減し、ブロック報酬においてトランザクション手数料が占める割合がますます大きくなると、マイナーにとっては、次のブロックで得られる報酬よりも、より高額な手数料が期待できる過去のブロックを再採掘する方が経済的に合理的である状況が発生します。 MEVの抽出が一般化した場合、イーサリアムにおいても類似の状況が発生し、イーサリアム・ブロックチェーンの健全性が損なわれる可能性があります。 @@ -178,7 +178,7 @@ PBS(提案者と作成者の分離)は、MEVの抽出に伴う悪影響を 4. ビルダーAPIを実行しているビルダーは、ブラインドのブロック提案を確認した上で、完全な実行ペイロードで対応すると想定されています。 これにより、バリデータは「署名済み」のビーコンブロックを作成し、ネットワークに拡散することができます。 -5. ビルダーAPIを使用するバリデータの場合でも、ブロックビルダーが迅速に対応しない場合にブロック提案に伴う報酬が受け取れない場合を避けるために、ローカルでブロックを構築する必要があります。 しかしバリデータは、この時点で公開されたトランザクションあるいは他のセットを用いて別のブロックを作成することはできません。これは_曖昧化_(同じスロット内の2つのブロックに署名すること)を発生させるため、スラッシングの対象である違反行為です。 +5. ビルダーAPIを使用するバリデータの場合でも、ブロックビルダーが迅速に対応しない場合にブロック提案に伴う報酬が受け取れない場合を避けるために、ローカルでブロックを構築する必要があります。 しかしバリデータは、この時点で公開されたトランザクションあるいは他のセットを用いて別のブロックを作成することはできません。これは_曖昧化_(同じスロット内の2つのブロックに署名すること)を発生させるため、スラッシングの対象である違反行為です。 ビルダーAPIの実装例としては、イーサリアムに対するMEVの悪影響を軽減するように[フラッシュボットのオークション機能](https://docs.flashbots.net/Flashbots-auction/overview/)を改善した[MEV Boost](https://github.com/flashbots/mev-boost)があります。 フラッシュボットのオークションでは、プルーフ・オブ・ワークを行うマイナーに対し、利益を伴うブロックを作成する作業を**サーチャー**と呼ばれる専門のユーザーに外注することが認められています。 diff --git a/public/content/translations/ja/developers/docs/networking-layer/cons_client_net_layer.svg.xlsx b/public/content/translations/ja/developers/docs/networking-layer/cons_client_net_layer.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..19dc4217b396c1d0d68ec2e276761085851c47c2 GIT binary patch literal 4879 zcmaJ_2Q-`g_eW|IBlcFYi>O_DRH;q9MvYoc?7h|AYQ?B3ZBesmiCv>;%&O60R%|Lo z(NbRYpXmGh)1LS3P0n-joRjZ;&i&kbKlgqfeJ#KR8XO`bA{=jUfho>817UvORCRar zad7joz7go*;B6@!;ObIuG^pDRp*+Gn;oPB>aFgMP&fR;tNTiWTVftCe?!8Fh$8i)w z(;QsE5%JEdwV_v53|(Kkn~y*efbP!;it_gsDm{yo3^hwgMeeTY(qwizKku~T-qWyE zc#$i-M^!#&ua^b$O4&DrJB{FGaTY?K0Q;3!9LxuZoba_Wr53lVZgfJw24>y_iat=V zC3k+16c^f2Tz%mcEIIOZJ2)d@!Lj$2JHm2Mamlq+K~(Gt13zeLlT3nV>{~fb(K~_G zogr}1wl#G@b+QWUyD87>nxdRACrSijS@Mao)RqK_W0~GVTfqOX&?xW=2tP&ELlmJz zntsRXtK+5k+9$+c@3l4sSSz0BXJc-00!pr0y91KA9}BFj5xydU$9n?5RvP@a~U| zp*yk9udEMlLWkRN^tA|yT;uEXC2(0MtEu*$!g(U zXbQ7Q;B6#X)p#6X^dNV1KaJL*d^xe+a@2ht80i)(2KO^*`Q_<|c+J?K-CwgOr%VNV z2Hbz`{!G8l;8)8(nF0PiiJwis3?=V?6-bw{#}PF;Qi;}6i_XwIZ#|w*2pak*T*1Ym zId-s{DL!)%q(E;L{iFTx$ADec5tHBMU0&}NzQP!4JU_70(hdBL$OqqfKxx%4>L}T0 z@1 v?vF8x>5dBW#{<1%eAmxm9#}h z9dqlLM#IG28eDe<&SRcSqMArI`ZxA++Sg#v%?ln`TKuRGb6@e2kTy9pq!E92qW#)F zIZsqolVP)2_0&q(ZXC6sj~4ueYm4*+;%&wu_$8$SU|K1=foy(zS1kLrAm9mWQy5$H zSFw21;{J`b|BRkz=B3j~DKkksAs50B*&MSuS9H0wX1EYNnW=Hx1>JotC8Ek#6pZtJ zcU*8R#hFmTe)lHsQ)$ZPSIk=loQ@5TR4?NT;=UvUCb(UI_3T~#vfbHh$?T)XX_l?* zriaIq6H*||9wuFw4q9h?RMPtNxr+#Zrkq&Of!Db8?c>ZuGJBC^|19GxI%4vrIJykw zIEqQ%k&4{x?opHRmRlFxI*CS*(NOXs?#5#Kl5+9eUS9Vsd6Pb_aM7(<3KI)KR5bGC z#_Q$C5U3~)-{rAz-5Tz8LgzwR&Dzp@!9%UBwK=1Y44mk+qpC+@Bkd{-h?H@uH#ASY zR}zHw5nwW$u*U{)kN&w$BcdB%e+?_wg`smcvb@vQX|Y-oNoa|cqWH8n#2v0U1`@>A zr{UgpPj`#}HWU{m$OCnS3m;ZU)NDqABHg!)C*@x_n&*>B_|IwCw=|)*=?3;-m5Qdh z&C!bzWnRt>gC32QJKpe*?cE;edk5X$?uo)Yc?q=R9|?EP&&0xuyBz^G#djDNvn1|6 z+kfK_t3(&gg4f5%7hB2#O;@pueN9oBu0kCPrJ(NTbc`)!g{G;9(~U}Y`LT@}TVo&( zeWA})S0UrRco9Jx!Wmi11ZqEUCPe{WkZ-m4uQUk_smT|McCD2)zxRxgXt6pyUfQBO zp-y;*2xJGFY_mTL9u6)I;PgerS+RUFX#Us!@LEDg{nWvUramh{Pc-$Z-NruhjKcnX z<5?|rqEJuG0!#5f>DAvooRttK#6Pt`Y+1p2_@e^*-OJe_{6ub?8VeRLtd}#%^hfdW zyTh}?#(yD&5d3kH|J}ja26Zx%oLV&TFJ%6ILiv5`*}8ht!A>m&dpQ3D^KTXXee>B8 zb5eRwjS2fVu$%u!A^zRZS-$=ETr{xr*MAW`El)b?_*i%V021sc9m{}7(8=om09$F) A00000 literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/evm/index.md b/public/content/translations/ja/developers/docs/evm/index.md index 4fff354c7fd..5754609a18c 100644 --- a/public/content/translations/ja/developers/docs/evm/index.md +++ b/public/content/translations/ja/developers/docs/evm/index.md @@ -74,6 +74,7 @@ EVMのすべての実装は、イーサリアムイエローペーパーに記 - [イーサリアム仮想マシンのオペコード](https://www.ethervm.io/) - [イーサリアム仮想マシンオペコードのインタラクティブリファレンス](https://www.evm.codes/) - [Solidityドキュメントの簡単な紹介](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) +- [マスタリング・イーサリアム - イーサリアム仮想マシン](https://github.com/ethereumbook/ethereumbook/blob/develop/13evm.asciidoc) ## 関連トピック {#related-topics} diff --git a/public/content/translations/ja/developers/docs/evm/opcodes/index.md b/public/content/translations/ja/developers/docs/evm/opcodes/index.md index 97c5e79a37f..c46a30eb045 100644 --- a/public/content/translations/ja/developers/docs/evm/opcodes/index.md +++ b/public/content/translations/ja/developers/docs/evm/opcodes/index.md @@ -71,7 +71,9 @@ lang: ja | 46 | CHAINID | 2 | `。` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | | 47 | SELFBALANCE | 5 | `。` | `address(this).balance` | | balance of executing contract, in wei | | 48 | BASEFEE | 2 | `。` | `block.basefee` | | base fee of current block | -| 49-4F | _invalid_ | | | | | | +| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | +| 4A | BLOBBASEFEE | 2 | `。` | `block.blobbasefee` | | 現在のブロックのブロブベースフィー([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | +| 4B-4F | _invalid_ | | | | | | | 50 | POP | 2 | `_anon` | `。` | | remove item from top of stack and discard it | | 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | | 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `。` | mem[ost:ost+32] := val | write a word to memory | @@ -84,7 +86,9 @@ lang: ja | 59 | MSIZE | 2 | `。` | `len(mem)` | | size of memory in current execution context, in bytes | | 5A | GAS | 2 | `。` | `gasRemaining` | | | | 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | -| 5C-5E | _invalid_ | | | | | | +| 5C | TLOAD | 100 | `key` | `tstorage[key]` | | 一時ストレージからワードを読み込む([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | +| 5D | TSTORE | 100 | `key, val` | `。` | tstorage[key] := val | 一時ストレージへワードを書き込む ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | +| 5E | MCOPY | 3+3\*words+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `。` | mem[dstOst] := mem[ost:ost+len] | メモリをあるエリアから別のエリアへコピーする([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | | 5F | PUSH0 | 2 | `。` | `uint8` | | スタックへ定数値0をプッシュ | | 60 | PUSH1 | 3 | `。` | `uint8` | | push 1-byte value onto stack | | 61 | PUSH2 | 3 | `。` | `uint16` | | push 2-byte value onto stack | @@ -167,4 +171,4 @@ lang: ja | FB-FC | _invalid_ | | | | | | | FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `。` | | revert(mem[ost:ost+len-1]) | | FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | | -| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `。` | | | destroy contract and sends all funds to `addr` | +| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `。` | | すべてのETHを`addr`へ送信する。コントラクトが作成されたのと同じトランザクションで実行された場合、コントラクトは破壊されます。 | diff --git a/public/content/translations/ja/developers/docs/frameworks/index.md b/public/content/translations/ja/developers/docs/frameworks/index.md index 59e0e568e60..0bc59f08f30 100644 --- a/public/content/translations/ja/developers/docs/frameworks/index.md +++ b/public/content/translations/ja/developers/docs/frameworks/index.md @@ -52,7 +52,7 @@ lang: ja **Scaffold-Eth -** **_Scaffold-Eth - Ethers.js + Hardhat + React components and hooks for web3: スマートコントラクトを利用した分散型アプリケーションの構築を始めるために必要なすべてを網羅。_** -- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) +- [GitHub](https://github.com/austintgriffith/scaffold-eth) **Tenderly -** **_ブロックチェーンデベロッパーがスマートコントラクトを構築、テスト、デバッグ、監視、操作し、dApp UXを改善できるWeb3開発プラットフォーム。_** @@ -68,7 +68,7 @@ lang: ja - [alchemy.com](https://www.alchemy.com/) - [GitHub](https://github.com/alchemyplatform) -- [Discord](https://discord.com/invite/A39JVCM) +- [Discord](https://discord.com/invite/alchemyplatform) **NodeReal -** **_イーサリアム開発プラットフォーム。_** @@ -106,6 +106,12 @@ lang: ja - [コミュニティフォーラム](https://forum.openzeppelin.com/c/support/17) - **OpenZeppelin SDK開発の終了** +**Catapulta -** **_マルチチェーン・スマートコントラクト・デプロイメントツール、ブロックエクスプローラでの自動検証、デプロイしたスマートコントラクトの追跡、デプロイメントレポートの共有、FoundryやHardhatのプラグ・アンド・プレイ。_** + +- [ウェブサイト](https://catapulta.sh/) +- [ドキュメント](https://catapulta.sh/docs) +- [GitHub](https://github.com/catapulta-sh) + ## 参考文献 {#further-reading} _役に立ったコミュニティリソースがあれば、 ぜひこのページに追加してください。_ diff --git a/public/content/translations/ja/developers/docs/gas/index.md b/public/content/translations/ja/developers/docs/gas/index.md index 63be02dad3f..af58d7ca8a1 100644 --- a/public/content/translations/ja/developers/docs/gas/index.md +++ b/public/content/translations/ja/developers/docs/gas/index.md @@ -117,22 +117,6 @@ Jordanが送金すると、Jordanの口座から1.000252 ETHが差し引かれ レイヤー2のスケーリングは、ガス代、ユーザーエクスペリエンス、スケーラビリティを大幅に向上させるための主要なイニシアチブです。 [レイヤー2スケーリングの詳細](/developers/docs/scaling/#layer-2-scaling) -## ロンドンアップグレード/EIP-1559の更新内容 {#what-was-the-london-upgrade-eip-1559} - -ロンドンアップグレード前は、イーサリアムのブロックサイズは固定されていました。 ネットワーク需要が高い時期には、ブロックはフル稼働していたため、 需要の減少を待つ必要があることからトランザクションの追加が遅れ、ユーザーエクスペリエンスが悪化しました。 しかし、ロンドンアップグレードにより、イーサリアムに可変サイズのブロックが導入されたことで、この問題は解消されました。 - -イーサリアムネットワークのトランザクションフィーの算出方法は、2021年8月の[ロンドンアップグレード](/history/#london)に伴って変更されました。 ロンドンアップグレード以前は、次のように`base fee`と`priority fee`を分けずにフィーが計算されていました。 - -例えば、AliceがBobに1 ETHを支払う必要があるとしましょう。 トランザクションでは、ガスリミットは21,000ユニット、ガス価格は200 gweiです。 - -フィーの総額は`Gas units (limit) * Gas price per unit`です。 つまり、`21,000 * 200 = 4,200,000 gwei`または0.0042 ETHとなります。 - -ロンドンアップグレードで[EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)が導入されたことで、トランザクションフィーの仕組みは従来よりも複雑になりましたが、ガス代の予測がしやすくなり、結果的にトランザクションフィー市場がより効率的になるというメリットが生まれました。 ユーザーはガスの市場価格(`baseFeePerGas`)以上の金額を支払うことなく、トランザクションの実行に支払う`maxFeePerGas`を設定してトランザクションを送信でき、チップを差し引いた余剰分は返金されます。 - -EIP-1559とそのメリットについて説明するビデオ: - - - ## ガス代のモニタリング {#moitoring-gas-fees} ETHをより安く送れるようにガス代を節約したい場合は、次のような様々なツールを利用できます。 @@ -152,4 +136,4 @@ ETHをより安く送れるようにガス代を節約したい場合は、次 - [プルーフ・オブ・ステークとプルーフ・オブ・ワークの比較](https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/) - [デベロッパーのためのガス最適化戦略](https://www.alchemy.com/overviews/solidity-gas-optimization) - [EIP-1559のドキュメント](https://eips.ethereum.org/EIPS/eip-1559) -- [Tim BeikoによるEIP-1559リソース](https://hackmd.io/@timbeiko/1559-resources) +- [Tim BeikoによるEIP-1559のリソース](https://hackmd.io/@timbeiko/1559-resources) diff --git a/public/content/translations/ja/developers/docs/intro-to-ether/index.md b/public/content/translations/ja/developers/docs/intro-to-ether/index.md index 921bd39ef3e..b227607af2f 100644 --- a/public/content/translations/ja/developers/docs/intro-to-ether/index.md +++ b/public/content/translations/ja/developers/docs/intro-to-ether/index.md @@ -28,7 +28,7 @@ lang: ja [広く一般的](https://www.reuters.com/article/us-crypto-currencies-lending-insight-idUSKBN25M0GP#:~:text=price%20of%20ethereum)にイーサリアムとイーサが -[混同](https://www.cnn.com/2021/03/14/tech/nft-art-buying/index.html#:~:text=price%20of%20ethereum)されますが、「イーサリアムの価格」について話されている時は、イーサの価格を意味します。 +[混同](https://www.cnn.com/2021/03/14/tech/nft-art-buying/index.html#:~:text=price%20of%20ethereum)されますが、「イーサリアムの価格」について話されている時は、イーサの価格を意味します。 65<-bT z0t$$`y=UlQbGP8RD31#{+v5gRPNh=Er(GKxhRLM&G7fe_ODgXL+ERSA;ShY>=XDE4 z`>B%&cYLo^9*5MxT!^=p?-mlrx1L`_x GckeKqE zfE8!sdoC5cd xKYsBLw-{6!Az6N>yvY^sN}+6Le*DGw$6`rtER;t% zagax%j>^#_h(HgN{C+!SSV%f_DeoRfCfVBFNKy2lnoe{c!Plklx13W`RN0k4gx85+ z6}~mY3}F6YJBEr#t<}7W%c=Dl%bCgsI{|q7t5=36`gZ+H*+?}t3kAvnEn1q~NHb)S z^#(A0WPE=3$n%>|((Q;n@*&b(XdU?!;|D2Nb zK&7H(l;9fgMeYc#vT*SIIm7)sb^fr95phd{ Cy z#HWr#B{mOJjAJWjPQHtr90O(9AK_&938%f6jXxGik$--OVj;~Rv2^Q#kP&_XeFhrO zI+` 48q)3WI!1}A;nvcN8^KnkwN!WRcAH=SOa98-WwN!mb>vGN zCGacd#BVhH{(AFt{pyYqQEu?7rbj#r>z#mHz~b(S&Ukc#1j)W~KFgsrXEdGdA^!gD zxyo|FY6E%wBix>_NU=n`ILT~*CN%$~hRU%VvGfVkw~u{>?E~+v`##e2; Uusqj z>Wi!4v1-q7Q1{=AXoLY+BL@4Lq`xnItP$v!tmhMSsj-@^dX2c)XpM!E(AF^u9|I#H z;7^sw^%F{ecQ0pen1h3lx5&?yJiR#u^q=O`BI$xq63k(m6B3;9AtqjYLp|E9nC+HE z355$AczbmEL2}_-*YfM(kZx-U3NZw8jI@kk!4f{CcHmP#kowI>&o%%Z$UGT=0NWH0 z>9keoirWoHdFF-KGu9Y%<-k#-RPQwixcncw=myb~mB_^^2i%}%(Qrw$73?a-{dTY4 zT!^!-<-!M{hbJ|bD7{3Wt|j^8*Tt9-+^uF)9#OJPu*b<%TQ?j^r)HV(Eb$u%i$PTx zS_grNP~eZ{gr$E>cly8_TpfO1PXiw^nRc7upgfK|0W7q2j<@l@FsOZC%x-SH-morK zvt8UdfhXyB(#{a<8lqKro6Er(Z&55xOzdUa;L{F9e2VBKai}xQ+LV%#Zpmg~LE`9} z_m4o_h_sxToRzzk^B}4(PP?C|pV_Ni#> #%ao1d9ZV*GuHaQ}h0+D) zg`g0o@F=CLq88KMbSJY mgw53Q$W7NKR zt0Fbp1v<&vidukn2SBA>Y*a>#KaMW>92(x>ibA i|Wx#tI=*O}SG*@|1 zis5yNodozZ6)kERo$j{F>j{2Na0{@LsmORIk_9a~*L;*eu#`5ZB4mfAwKXv6#iMD~ zk0aLgLO)?axCaIZpg+y<6JEOcVp+;BOU29#y1SPq`89}+)F}L!rnN|yX{BHnE0w6f zHE&nLn_^p;LR%ZfQanau148_{TIcUp#YFKqM%3B96-RpS<%5e$;gjUkjKuDr@~g&J zse1g-iI4`HNYyc^N6jAwmjlZ44H$Qk!S9&Jw+IGW#J-fh$wLd~;?O%Yl%uuD5h~ln zbgJQwm2A8bm7rrqDXq?!8JqMQkmK@1MJ?|6@RIve=-Z5Z&h?XTW)7PcvOn|=vaHkJ zSEC|ciZ0HtaHs8G8<&b4)C|2*NTK waML<|e_20EdTVr`Jj@|y7pO14}3kFzC zmQ!ba2V=g4+zSX+g**}JDQ;dID+%glWWUhkg-B?X$#@@PC$+X^Zr>{St#V&)y1({- z5Zh=DMG-c97^0~H{)ueJe>R%8PoRs#>HHhIq2rzhp*$AM7RjrPt*gi-iuWp5FTUqe zY?UmUL>tBtEE#ihm?G-qUti8-ET0Jon0?*4e<_upou{Zj>8rBLO$Vg#aC}{t?*LoH zXLNh>K~6f(jGu+9;8T}u&fu~^97MKWRHjne%h*I9&Z4}XGTGRd=iWtiIiK>SSRh{s z>C{C6>1{JcKT8fPLb|hx6Xrt&X1zU;c9~y 6>pQ# zJh(=SkS7#9#-?M}5T07}kbM*`ad{M6=E (4mwN0Ivdg#KN~8rUuIheS+OtM=e! 8 DRppRO-Jy2Fab z+a#^Nii%CqNjjbWIs=7O*DyKY`Q!9w`k8~DBOkj1{4W!yL%#~H?1a%jS25{`pB%5v zFub0Sr^9DIT|!7XHgUOzn^R}%a4%nS?h2&}y;Z^w GMH}5a UnNoI@^@;GY8#@AT+Vo_%$}PWEV7& z!YlGCayKiSgq_E8ZXxOIA1KX+-pw%8?7x_cKcS$23JYbuDg1~>y-hwlk;n?)lL4P? zMMFH={psBPv&Q$TbNu9ifbzK}5}+x*p05l^vk`00l$e}J7RvD>Jr3VH8v PK3w>!fJ(Zp5ZNoZZ Rj#887K;;S*q=NP_v~Vk*Fz H5_|W5xiiR0 literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/networking-layer/exe_client_net_layer.svg.xlsx b/public/content/translations/ja/developers/docs/networking-layer/exe_client_net_layer.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7abc67e5ff72f312f62d8fea191b7864f0786ed2 GIT binary patch literal 4893 zcmaJ_1z3~q_oh1rqedeG>5!6=MgeJ1L>YqMh|x7dq)R~@@{^!xqc^YZg-*L%Isb?rIt&i&ly+~>S{TDW*LSVTlbSZ?4<6RdLvMBm?5adLFG zc62v4@^-d%GZTV4z}^`4>9mOej&M#mwrC|BrP)JL_nH@ot|d^KtZUyJ5%!)Qn?-7v zf(zLLhavTqU9w`RH+kC`$PNNv${fEaZLLS&*dvt;i=G+bcRW2`%=oTJCY}U9-GW zmnyVJRWN6zn`q-2vu}W~8^liJ$b!D4=uuj>Hti*{!`DiXTG%WxYJu)}C)}nGO}k=A zZlCrj+`lQO6tCSTI_Pa9I6iXTw(G7F(yUKm(V_l|sF(}`FL2^3nFROHZUI*IFkk&v zKRA2SoI0~KTA5{d!bMX PE#Rl9n)Py@b?+Csg$r4z*-k}@OK0{rW3ilmb$9-n^c ze-QRcX07ilbf6JSPm7SqA>y^31U42H2oDRr{x8%?(WsldTEpCgg)rCX0VRqc5di)m z5FUPi&%oK@apo&gZWuZ1i%Jy^#XQ@h)-PWSqDh~|A8h;Q7C-g2q};J!=YP@dde??_ zwS^ITY_DD(i&WoK@L~ne-3}~|H@w1^dy*ZM6{?%5ErSEDsCzBS<+DOTmt1W= 特定のブロックの高さで +フォークすることです。そして、デプロイされたコントラクトと作成したコントラクトのやり取りをシミュレートします。 フォークされたブロックチェーンは、メインネットと同様の仕組みで動作し、アカウントに状態と残高が関連付けられています。 しかし、サンドボックス化されたローカル開発環境としてのみ機能します。例えば、トランザクションに実際のETHは必要なく、変更しても実際のイーサリアムプロトコルに影響することはありません。 @@ -168,7 +168,7 @@ Solidityスマートコントラクト用の単体テストフレームワーク 静的アナライザーは、スマートコントラクトのソースコードを受け取って解析し、コントラクトがプロパティを満たしているかどうかを判断します。 動的解析とは異なり、静的解析では、コントラクトを実行して正確性の解析を行うことはありません。 静的解析は、スマートコントラクトが実行中にたどる可能性のあるすべてのパスを推論します。つまり、ソースコードの構造を調べて、コントラクトの操作がランタイムで何を意味するかを決定します。 -コントラクトで静的解析を実行する一般的な手法として、[リンティング](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting-important)と[静的テスト](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis)があります。 どちらの手法も、コンパイラによって出力された[抽象構文木](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree)や[制御フローグラフ](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/)など、コントラクト実行における低レベル表現の解析が必要です。 +コントラクトで静的解析を実行する一般的な手法として、[リンティング](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting- important)と[静的テスト](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis)があります。 どちらの手法も、コンパイラによって出力された[抽象構文木](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree)や[制御フローグラフ](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/)など、コントラクト実行における低レベル表現の解析が必要です。 静的解析は、安全でない構造の使用や構文エラー、コントラクトコード内のコーディング規約違反などの安全性の問題を検出するには有効です。 しかし、より深い脆弱性の検出が不得意であることが知られており、過剰な誤検出が生じる可能性があります。 @@ -253,7 +253,7 @@ Solidityスマートコントラクト用の単体テストフレームワーク 上記のように、厳密なテストをしても、コントラクトにバグがないとは言い切れません。 形式検証によるアプローチは、正確性をより強力に保証できますが、現時点では使用が難しく、かなりのコストがかかります。 -第三者によるコードレビューを受ければ、コントラクトの脆弱性を発見できる可能性が高くなります。 第三者にコントラクトを分析してもらうには、[スマートコントラクトの監査](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/)および[バグ報奨金](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)のいずれかの方法があります。 +第三者によるコードレビューを受ければ、コントラクトの脆弱性を発見できる可能性が高くなります。 第三者にコントラクトを分析してもらうには、[スマートコントラクトの監査](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/)および[バグ報奨金](https://medium. com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)のいずれかの方法があります。 監査は、スマートコントラクトのセキュリティ上の欠陥や不健全な開発プラクティスを探し出す経験豊かな監査人が行います。 監査では、コードベース全体の手動レビューだけでなく、テストや形式検証も行われるのが一般的です。 @@ -297,6 +297,8 @@ Solidityスマートコントラクト用の単体テストフレームワーク - **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _スマートコントラクトのプログラミング言語であるSolidityのスタイルとセキュリティのベストプラクティスを適用するためのリンター_。 +- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _Rustベースの静的解析ツールで、特にWeb3スマートコントラクトのセキュリティと開発のために設計されています。_ + #### 動的解析ツール {#dynamic-analysis-tools} diff --git a/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md b/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md index bd2dc588ff2..e14b5882411 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md @@ -74,7 +74,7 @@ lang: ja [Solidityのドキュメント](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries)の引用: -> **delegatecall**という特別な可変メッセージ呼び出しがあります。**delegatecall**は、ターゲットアドレスのコードが、呼び出し側コントラクトのコンテキスト(例: アドレス)で実行されることを除けば、メッセージ呼び出しと同一です。また、`msg.sender`と`msg.value`の値は変わりません。__これは、コントラクトが実行時に、別のアドレスからコードを動的にロードできることを意味します。 つまり、ストレージ、現在のアドレス、残高は呼び出し元のコントラクトを参照しており、 コードのみが呼び出し先のアドレスから取得されます_。 +> **delegatecall**という特別な可変メッセージ呼び出しがあります。**delegatecall**は、ターゲットアドレスのコードが、呼び出し側コントラクトのコンテキスト(例: アドレス)で実行されることを除けば、メッセージ呼び出しと同一です。また、`msg.sender`と`msg.value`の値は変わりません。__これは、コントラクトが実行時に、別のアドレスからコードを動的にロードできることを意味します。 つまり、ストレージ、現在のアドレス、残高は呼び出し元のコントラクトを参照しており、 コードのみが呼び出し先のアドレスから取得されます_。 > > プロキシコントラクトには、`fallback`関数が組み込まれているため、ユーザーが関数を呼び出すたびに`delegatecall`をが呼び出されていることがわかります。 Solidityプログラミングでは、コントラクトの関数呼び出しが指定した関数と一致しない場合、[フォールバック関数](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function)が実行されます。 > diff --git a/public/content/translations/ja/developers/docs/smart-contracts/verifying/source-code-verification.svg.xlsx b/public/content/translations/ja/developers/docs/smart-contracts/verifying/source-code-verification.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..def220a4326afda5a17fd09420a351078d6adaa8 GIT binary patch literal 4846 zcmaJ_2RzjO|F`!z&X$!U&N#9oJK>D8N@n&x85xnij;ym+LdF$}E0PtmXJivu$yJgN z8ULg2?@v9x-(Gi*&*SrXJnsGaJYLV&dOi;Z#V4S{At52bxeY2X#yMj^?7gXqJKWn2 z?rmx4f6LCxT-eXe^|?W>PMZi|AMcRs8@&WvhBG32`_&?edMdT?CvBTii2v;P99qK! z^oTR`twlpkr>q#}dFf^zx}6A^H7_8_-&v^mBup~s1|qS2b5(~fwZ-LWiw)1Vy0v_L zw(vF$YTi~i&CxSqM<3}tgqy}y=$X zC96AC$J-?k90(2UPc<>=JxDHokK>n3diTrPH@37|M?LrjkLT|@*=Wrp!CFotBqrP^ zV1=28PJztkBE&;ElZKz6zI4iDuRsUFgAVt )v$1fswlZ{gwRMELVHg%2 z*RR>8NE5pMAj;xK?JHoNUL4qrW}5hd@l=>Qi~ynW_WH}ockKBd8@ 64-u!Z7S@LlF?5y9%6Z+z4enCE6WihV<26X4WS~Cp z!WUmiUIo>I$8DyXH{@mJE|IN#cul^@o{NwvAbzLedE;Htn%b5kQL1ly^>gm|wHDk| z+=cBE?Xi$b36g!K4Ccej93ga;hxq&V=ZXsmOZDaTj<7o)28l)Cgi9vzRik*vuPGnP z5nn!G+@0<=XzU#^@1CaV!e-HJ6R1(~=?*XFhBU@ot9yM7tg^vn3GC~xzWjY*x}2{^ z@(m9^tQ;~^@)mia${YhFp`~pwJ{m?s+`loF^B0s}POkQDHrCeeZo |f;Zn!rbTDXwJyCK@M|-dpcF$gg 9fSpe!8rl$0I#sjCvZ!4k27{7(lr|C_A>Uu=gpmbw*1FqRJ6Qj^{tUeT=A`2k zJK#9z1b4onWvqd>PQN0}n9bC9t#VDQd^4xzBaWo)Nh5==gP&H`eNJn0oCUFPF|p>@ zzM>`&K4r)waj3nGxd{M3w`kEjFLAW%cIu5C7@HiLy!^QM6Oihg-S#SVnU(S-oCH}Q ze|=bFLI(*46^|Gly|+^GA>EQ(n}N3XW91k&S_k#Gd$+_AJ|(nFJa6h$c# EtMCEl&?NDn4M6`HBK5(u!@+e zXq~c8+{q$PTmn>$H8I}AZT0=kbtP|}Y2L?=F(6n`P4v#B8{NrFQ8__ABSno 2tz9%Ux%R~5W(TCYHjf SyPnZE&bm-IwCvu@@n^>;3_i z4zsh4_U^cmu7^w3@JGs>?+T7m(kHHhPU5#4a8~9Ezw`w7@m&kS4Xs<|&E=AZP{}z` zwkNafMj#U!KJW>OUcw!*fKKN(p*Rb&V+=GYw;~Z`%39RY+HDP&)*?Oa5O=_KCc Mb3SJX>pq?0$C54AeQODJ%=Zb`~BQTf&_ z==NT$ 47W>acn~X|$`4d5u0rm5O*VBqyWLiMD5DOe&~P!`~>2QsX<(*Oj=_ zW tK_2wRN<8 (d2d!|QZK zM%GKmkNDk_TG=qQs^{M=-q)S%sW>3SB${=0pal=Q(3DX8t=N$NN;EfjZ XR}zlT&>W&r2 zJOiuk#YSRm)%E@LXD;QUDYsLl))~G+bQV~KV&w8~*wQX{(3bSE!oI0C_k=}#y@^$K zq7A7jwTats?OihnAh !Nb^*Z z;z=sifEn2xGd~#^I4N{r( C32xx2g8p!aZx!y!QNuPFy945%0UR_hbut02KrM(Yb zY9IZzAEZ2!97`uB`=6qX&_atgAWU~qR&^%$o+^LDwU0)L= j PMV?jBm4aeCc4 zw$B4sKffa$os5m=>y*hBk02qV)Vdkm5kKVJ#wm0h88(6YG!rL6{ey98qh4Dgmz47I zXOTO%_^``#?vQ z?#KZeog<}EVuO{4I6XenEfy5cSJG0o*{~SxM?Ym>yEm)kD*6n#|0?^8zs}&7)?>u~ ze<$%%?Mo0!cIbgf4SgID<6{-^2AYxS+B{a1xrBhBkC)21IJ74Y_cA2sWB|(akjT@H zqtihf H8_8(UH|l)=NhH6 z7AYe^%PCugM*Wn;vW<^{nw=M?Fr}bywX|@#+%p 3Eu@csNI4Fp3JEa^ydklZGzmaYc^!uVl-%R0j0kpc~)cz*ve;o{00gy z)oglS+mEf6-$GWX_c}RE*p~w|yll)GV8<2qCX@jm#nX!w9P$IIBE;qrar}(^=z?CC z$QU%ToyIO6BJt9go{5QGMm?5BbKN5XFHM^p8walXkzisP&vGSBm8|#PSn1;m3EnHj zT!&U}(%R;S8H)$&CN&Je__TxVXYaMP87@9qf(R@F;k6nHovWuQ^F-~N^u{<(?Kj~9 z5$Tcgxh}Go*y0Lb^?Kc+&H9kwd?X}4B8vQ;w~-u`xx;yC@SQzeT^C=Ew%Nt=Tlk!k zS#-lH!$T66bjZva(@O3Bh+}mM&_k1S5BNMU;z3!b???S(mBFT$qtOK=ZLozkHcRJz z+iLBL^3+D-KVWqMja@_v3ZHDAw;fs2J9 =_#c_$&8Y*RoW2cKZaj@5e=}NRnDTVAEhm2*mb30DD}kRYd%_wj2u!e7PT2qEbl; z{t*;VgkQ$R{I=|UytHVSTH{FhG{e4Z@d-ADFhmsN EmMvgN;Ljb@sa9{78)H zEB|eOc=_ N=Fl^ &QA;&x}RA$x|pCn z{Bhv=-OKr&8#7&;84!&Z+RM2V`s1weyTkLn#lIn?C-`II{=0+ovV>_t&MbiV7c&3f zko>;&d^N@B)|rK&59gm?{#QGH-+aEXU<&S;k)Zzudh>sj-{1Y5=i9%}MGoC={TtD< XqNJyVkA?>eiv;~iMKizwfLZ+?8m8uS literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/networking-layer/index.md b/public/content/translations/ja/developers/docs/networking-layer/index.md index 04c4127b861..75046040868 100644 --- a/public/content/translations/ja/developers/docs/networking-layer/index.md +++ b/public/content/translations/ja/developers/docs/networking-layer/index.md @@ -125,7 +125,7 @@ SSZは、シンプル・シリアライゼーションの略です。 SSZは、 制御フローの概要を以下に示します。括弧内は関連するネットワークスタックです。 -### コンセンサスクライアントがブロック生成者でない場合: +### コンセンサスクライアントがブロック生成者でない場合: {#when-consensus-client-is-not-block-producer} - コンセンサスクライアントがブロック・ゴシップ・プロトコル(コンセンサスp2p)を介してブロックを受信する - コンセンサスクライアントはブロックを事前に検証し、確正しいメタデータを持つ有効な送信者からのものであることを確実にする @@ -134,7 +134,7 @@ SSZは、シンプル・シリアライゼーションの略です。 SSZは、 - 実行レイヤーは検証データをコンセンサスレイヤーに返し、ブロックは検証済みとみなされる(ローカルRPC接続) - コンセンサスレイヤーはブロックを自分のブロックチェーンの先頭に追加して証明し、そのアテステーション(証明)をネットワーク上にブロードキャストする(コンセンサスp2p) -### コンセンサスクライアントがブロック生成者の場合: +### コンセンサスクライアントがブロック生成者の場合: {#when-consensus-client-is-block-producer} - コンセンサスクライアントが次のブロック生成者であることを通知される(consensus p2p) - コンセンサスレイヤーが実行クライアントの`create block`メソッドを呼び出す(ローカルRPC) @@ -152,4 +152,4 @@ SSZは、シンプル・シリアライゼーションの略です。 SSZは、 ## 参考文献 {#further-reading} -[DevP2P](https://github.com/ethereum/devp2p) [LibP2p](https://github.com/libp2p/specs) [コンセンサスレイヤーネットワークの仕様](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) カデムリアからdiscv5[discv5](https://vac.dev/kademlia-to-discv5) [カデムリアペーパー](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) [Ethereumピアツーピア入門](https://p2p.paris/en/talks/intro-ethereum-networking/) [eth1eth2の関係](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) [マージとeth2クライアントの詳細に関するビデオ](https://www.youtube.com/watch?v=zNIrIninMgg) +[DevP2P](https://github.com/ethereum/devp2p) [LibP2p](https://github.com/libp2p/specs) [コンセンサスレイヤーネットワークの仕様](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) カデムリアからdiscv5[discv5](https://vac.dev/kademlia-to-discv5) [カデムリアペーパー](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) [Ethereumピアツーピア入門](https://p2p.paris/en/talks/intro-ethereum-networking/) [eth1eth2の関係](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) [マージとeth2クライアントの詳細に関するビデオ](https://www.youtube.com/watch?v=zNIrIninMgg) diff --git a/public/content/translations/ja/developers/docs/networks/index.md b/public/content/translations/ja/developers/docs/networks/index.md index e4913d9b863..c2f0c8e0485 100644 --- a/public/content/translations/ja/developers/docs/networks/index.md +++ b/public/content/translations/ja/developers/docs/networks/index.md @@ -60,7 +60,7 @@ lang: ja - [Alchemy Sepolia faucet](https://sepoliafaucet.com/) - [Infura Sepolia faucet](https://www.infura.io/faucet) - [Chainstack Sepolia faucet](https://faucet.chainstack.com/sepolia-faucet) -- [テストネットフォーセット | Sepolia](https://testnet-faucet.com/sepolia/) +- [Blockscout](https://eth-sepolia.blockscout.com/) #### Goerli(ゴエリ) _(長期サポート)_ {#goerli} @@ -88,6 +88,7 @@ Goerliは、バリデーションやステーキングのテストを行うた - [All That Node Goerli Faucet](https://www.allthatnode.com/faucet/ethereum.dsrv) - [Coinbase Wallet Faucet | Goerli](https://coinbase.com/faucets/ethereum-goerli-faucet) - [Chainstack Goerli faucet](https://faucet.chainstack.com/goerli-faucet) +- [Blockscout](https://eth-goerli.blockscout.com/) Goerliテストネットでバリデータを起動するには、ethstakerの["cheap goerli validator" launchpad](https://goerli.launchpad.ethstaker.cc/en/)を使用してください。 diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/archive-nodes/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/archive-nodes/index.md index c850d1e148b..c9d2a6df32d 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/archive-nodes/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/archive-nodes/index.md @@ -56,7 +56,7 @@ sidebarDepth: 2 ## 推奨実行環境 -アーカイブノードは、[ノードの実行における一般的な推奨事項](/developers/docs/nodes-and-clients/run-a-node/)とは異なり、ハードウェアとメンテナンスの要件がより厳しくなっています。 そのため、エリゴンの[主要な機能](https://github.com/ledgerwatch/erigon#key-features)を考慮すると、[エリゴン](/developers/docs/nodes-and-clients/#erigon)のクライアント実装を使うのが最も実用的であると言えます。 +アーカイブノードは、[ノードの実行における一般的な推奨事項](/developers/docs/nodes-and-clients/run-a-node/)とは異なり、ハードウェアとメンテナンスの要件がより厳しくなっています。 そのため、エリゴンの[主要な機能](https://github.com/ledgerwatch/erigon#key-features)を考慮すると、[エリゴン](/developers/docs/nodes- and-clients/#erigon)のクライアント実装を使うのが最も実用的であると言えます。 ### ハードウェア diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md index e81e3b0de6b..ff108ba1c48 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/client-diversity/index.md @@ -75,9 +75,9 @@ sidebarDepth: 2 [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) -[ロードスター](https://github.com/ChainSafe/lodestar) +[Lodestar](https://github.com/ChainSafe/lodestar) -[プリズム](https://docs.prylabs.network/docs/getting-started) +[Prysm](https://docs.prylabs.network/docs/getting-started) ノードオペレーターを大多数を占めるクライアントからの移行を奨励し、移行プロセスを加速できるよう、技術系のユーザーはマイノリティクライアント向けのチュートリアルやドキュメントの作成にご協力ください。 マイノリティコンセンサスクライアントへの移行に関するガイドは、 [clientdiversity.org](https://clientdiversity.org/)から入手できます。 @@ -90,7 +90,7 @@ sidebarDepth: 2 - [Rated.network](https://www.rated.network/) - [clientdiversity.org](https://clientdiversity.org/) **実行レイヤー:** -- [supermajority.info](https://supermajority.info//) +- [execution-diversity.info](https://execution-diversity.info/) - [Ethernodes](https://ethernodes.org/) ## 参考文献 {#further-reading} diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/et1eth2client.svg.xlsx b/public/content/translations/ja/developers/docs/nodes-and-clients/et1eth2client.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6b78582a86ba7be3f9f4769cc10ce03f8357ea09 GIT binary patch literal 4866 zcmaJ_2T)V{(}jfId#{fG0s@J2r3p%r7AaDsNDU wjag)K98c1 znr5I nHm+Z~@NSq0^Qf211%MIILU;R>VQb8Um z+EBVYijNLzDX1WL ^TWjLYnl*VM`s!&a#8x3k<6wPif578LtEJAMo>7Y0W3tF_83Jh zl?-iJev?qhE3QP9{XSavrTqZ!JK&Y>UVijoKzv7}Pmf%hL@+rAVl^bF(eb%lI@SH} z>+kMGy}Y>EzX2O;#)E1RleorIL#6QX@K_1(u=oFkIyn|~D^Gj4m$(@2nlN~oDhy0R zI7IIo?Xa)!VSPXMB}4#D$@R2Wl~=jQ>3RG5x_$!r!<56_pu)0;em2x!t$9SA_ITcM zWL#-u!ynymRKO#@ZYC;Nb?#Ot-klmDaoOGsHx;E bIdi+ed*d)nI>czZgz!Mtz` zy9aH;F>Ly8hIF5~Y7G)7g3O4g64DBMwoy~b@I-Y3kTV|}Nf;}53-6N{MPq^$fqD!- zH2wWS(PoO+BX?KPji>zc;D_%)X#i+LTAPlTdxbbv;$mY@jL91weKC=xB}1VR#xVrl zD4rT@-R!34vvsxW?^Wva$U lYWyA8QQf*00~%?wAh|x*)b;?I%l$ z5&bIOrbOM^0*i~+ro{LNe0|Zjsq&q6b75`ObB&s_m+sp7mLB;lHZ*xOfd(h31-mjv zYUN4TcZw4?mi;8)KK1<2A(MCac6`9KEYsZ=&*qZi#c}M&TJI;?#sZS`N61)yLT2Y_ z?Sn&0{GT5X9Bes57H;ie3gRvLH7cWNCo>j$RR+r;T`<)QzZ?65q&}+rsi5I&(oO;R zT(12}hnw%*ylcN*v7ry-Tdkra^k=Nzw&0`MbVsJ0lMNfa72d68p4{p7cQvb2`Cwzw zU+V#uMOC!-?su47yP F9H$JCc$N73y|DNbd0n6qTdo`bp&^kvTXJ~)VE7@=JpDTrX zrEAWKz$-1M%ikjZs iLROTt_ntxRZWm=>)2=A@4IyuSP4hbCu4W-Q$=o294Sa^78`dts+?0g!r$ zUZgQ9Hno$Cm-d_l6SLptj3cH+`3`*@zxyhQ+>EYj4{S{(QfE`!CZ4o(DJA7e@-)cH zIz;rwMbO6;AjA;WG&JCBp@irN8ljmb&`vsHL^U-kWJmRB8uiQBCJPL$eDkC}6&Kh- zRqH#?gn1s3@*+*$XbYP$usvXzU$JP8ea=6SEhJp|D#U!!iwQIRyppJxjjG=Lg~I6G zCEsuqr*nP%xS2&zU1tEW5p5wJSQma^)~G~>hQr1=8&Pwx4quo|!+Kfx=+lV8wV;q% zR}{+4#Tyvwd9-Nn8?VweP;#7^J)zEuN!e`ze3>g+pnQ)`$Q`HY^Dh@+(-<%DYj& z$>7|JL8dmn7Z!zF0DiQFeJ*Z6^OfW$>R+SYiAB6n(V~;n>1evJ8hh6nVGeRO5g%>q z W_2!7LsRFL~YTGHrEZh0SxufXi{BI^fL~myPvNxdSyz8`25X=MVY&4DyF8e z-Th?gul`Kr1|csrt;E|+%0${ZX(2vVg6*{f1vYYdHr7f-09K>x#Dp_dF5fH*NMi5| z=+f_$9_xKn2q-8*j8jgslDe D zDa@QeJFuQ}sTm)bI(jvi{;9j4W0g7c3N7hEL_toeJ7e#cQJJuQ%^<@(YRzvX8($uL zZxz0dnG&OCDO8ajr!a7XZ%D^Cp-UCx_{8N;LUON$p%ZN^ml(~H*yYqX%$$^jCDYp* ze1j7!{;o3E9LaX%+3mf#c9PYY+sA3Vm^6K-KXNbdp>KdH_?c)|LH+zlp?^0kH$j&t zGPY4J e4Kd7|-0*f`{+|%LGU~V=zyEbR^~|5#sGrQ^IDXkP7sje%p9( zK1qmMAip>M>t(r{_MKvbG1cvN`nXEh(9QLS84vKL?wVf`c@9tK4Jhu%L#FG6rz$76 zM#WL#%`4bmrWo0J>6Krdv63Uh0sczNq$cjiY?Cs)COxPG?no<$oedJ6_PX6^o4O_T zitBDW>(Y@Wsoy*A?hO`Z_LTZUzs|&2%%SWw&w9`0nrk8%%*NGX0We;g*+eE`{|3M- zH1|RzI*#d3tf)*Z^8EmPu%pO? Fg4R tYgp#7DSG+eex=-=rdL_3#L0Rwje6 EH4W{2Pt zgrA?9ycW2vr;jd@6+#`wkCX_OEO{9ZXCpLTi{6HzN4RusYeSOqA9D{Qq%I7Dif;?W zy VW<4Sk3xVbEXS9dTo}$b`L-y>`Xb7K9#M$R$4LQlqAQN~R#6KT z- 7c_$M+@pLQM_cXyW`y&Iv0?cFp{dPA44Oo!WE5sA?lGfcyNC%9V2=xt`z z?H)-^HK!zB$%E%r9A~>Lj(>MUvE@k4gnLR0!ZQ&BWghzD2D;5H(@gA$h@SF=3Dcfl zM!-0;UIX{?p!)Iv>8Hu$6ydIm`I0eY6x3SA;hiZXejR*bC$Uizz=yej7`69CS t-*Dd{`Mi6@hMa0yPTU@9q?=(P^ZK$9$wSIeN5Zcvk1p}@ zEwQj}3_kP^?O_v5y!PC8y-7ejB_+OYywyaT%|a*Y1ljdv+q3`EZX-9BmsXw6zGwi3 zJGLOTQmI%fI57Uu%v>8JK`n98L-W8UZZf*4vtl{gdToRil952RS{w>WXEzVJ3!^|z zCJ@IC3&ajG=pJ9LAl3g8^8hMLzQc(IY>-!6MMWj*#Q*62I(>QN>ew6z{IUD9{mjA7 zmXDhO{+Ed#O}`v**%>>5Ud5&(W_+|NMgLlCw$3@b$wFe9k+BPv{Jc67NBcR_GZ$%8 zm@Q+!cOHKqazvi6`EQ2``Lu}?$I%h^)5Di<5^hF6{9BMFv%2mzH5cRk4C|XHSIf%L zHxlD_AmmirrlEXsgZd8h9z*pcv ?kGos{*Ag+bfrJ)i1|BEqcvq@Ra%C|klzM0=B+)($BJW01{8Etb{O zD-rt%bmG3ckUIA^`SYZ^tRs+1SB`+0W!#2}g`GX|+{VE`9Bb2A+YDB*c+>;_#M*yG z&olGV>7 u?fSHB@jO)dtsNY(aa*di$C$m^F`~yK$;QcKiSaY{jkXMza+1}J zY|9inyo|ope9|EbQIT?hM&`9m1&)*VK9$z;!z+Eja)Zf+0d&2Zh=Ojzis6Esy6V~i z!K`tpSyX* (ZRnkx|!!a+;o7gee oyCt@gc< zPNl2Mi1!{TR680_dz5hv` =J7t*AnL}Mx7@bX)^t~T*cqYt%{iIW? z%1Vm0zZ$B^$x;^kY1gXKMT3|$H !J zydqh3yT`%MULgU_S;c8IuFZETdQGiopB=C Lx0q^vk!r8qSH*o%H|MG?bs`aabv)d$YJwCO&*hijOmVZBZcBjHE zo2O=trTV|Ep1*rIyGq~+;M7vF@`Cm7ubbHKUd|5VxV7WdP}p|?STARa>R*?T-yNPE zI(~(89-DxFndpCaaJEt5W|LFXCjE)b|4%BvA3dwDxK4Izrr6~C6U_hA^!LMOr3NR# ur}mlR$Kn4F 5z~HX$cYJ5(3haBB3bp z&FKApxUT!T{(WYhb>6k+-RtcAynFBGIU1@!G%^4d78byRC07q{%}5c?hH@@Y4{NB0 zsg94UwYxDN%-QLs_OM!y0MQxh1=AOD5h$23EbF9m1xpD|sJ8>LoZ|QSFuho(Y{2q@ zF?iCXwV_`^X!~XHVNP8y25IIJw;*SKo^(}+Xn=lnV(;Om8X3IHvAWBW^+d_yPD>Ww z332I?m3o?;Tf$eZ6o+w?G^RY;0)j!Ab!&qmEC+N|xY)`;g-)04kq_LEK=8>O3w*~X zv5^5Cg_UTp?czh;w6ml}FWdK unDO*7St#)PL#{_YgyCaVx zs&8!#@7a#E12j}Iv7DpoHAGMV01z4gvHo9K$3 D$XXJi9;AUn={;7)^ zW%{J`HUL-CfS0|N!>kwJ`I3`gd@utlE7jCVVi6j2N5OklvV`6ibkoi5T@ka?aE5|Q zQ>p_T wE`|#-oh#x2XR4xMsUspBbLKf@;8Scs_gE$3Six&7$fefTPED!6LN~ z)yI?DS(Xwgsn_;1)B=}W##%%m9EfoLcc^5Df54ph-R;cXtgW;?-0Y#Y?#L4spQ5gc zDnr%RF;rW8Yc)egzMPvFoeq_7>d{+e%6a`cP=1+^j!odE)(0MDuGsgX_7RVsh`nsT zE2Ql)E?`czKDPhpnJs;v$_@-{NrO3gtURBcAP)hi!k>95vq3AXc-2QTvFGyOAQBc~ zs10a%j9Fe=e+MkQydjt@_9S2ld=DCmmv;(~u+Qqv@Bx#>D%d7(G`$wq3J4b9ylF{| zz6>S*yu2R_cXf`PVSFmxiV}#%)E{jS3&a(ilg0TK3 s4h0iWogE(*-V# zb(&5Z7~#3It{H!75aw!@Xx`mhJW>DJSE$Iz<6N#*;sjr0i^8OvnDS%aDJ|i8RVfJ8 zo8oWuZHYXu{vH`?#e==9SEej+yw4ILL ? zH*;?!HvE4-2qHns88?P@3*cdXCfy;>U9dNxB9$XE8CMe^SYn0JBqt6L eyQ)nql9-A!k~rpW=chbPV_7XZ|9!G=Ph-wy&3cGF%=;cs-p=P z2Xp7Hq6^dxeHtVn8U66E4M;(15MNivVxEfyX?vk2Y&j(MFx%e>RHNCQk+O(OJf(!e z?ETb9&6g6dNHRhOrb9`q AU-Cc}woIYs4%T)gg?LF_)iyGra^%w#*WBi$;mGE(t z{boHjK|DB%>&0waPl_#tym53@%rPl42NfmTkUB(!Tz{;0
z%t7ZFiOxeVfXi)N(`}qBnzc`K84Pr{8n%RL4hp;eLKU^YXs7aX_E*ibVYW6!T@i{D z66#DEF6#iH6NbeK+dA5r>Jbr9teOuki<}+1U;3Z~CuM|ZtjCpqBqjdraQKO&%1ZVo zDqMn;yEP&j-iyOT%ppWU=_8ZzonlS0M+@Q;C!4@P?yQh(sV@Zo2=AJG*3l=Gm?zBG zA}MYYHW(8|8dI3Umr_qeB#_M+9~nl(xwOvm<#Eb{96TcEi`?@x!s?H0#uvnr?Q>cL z^a93ms+WwjMtK<0YebFH9n=qi-F_RacZ!#3mVN!HgF>b63L4G1Q(P>R)nJrR6EwS2 z-JU*{fQ2s7IW#xV7#IgM_WA)^w~hJz8$-Vuv`Ud|JK4_AwJt8(_P}h#T6W7rr=N!v z?F0lhI4>?j9X){2Zr|6eVX?A(qorq=*|UnEi`2t5)Xn7=yMsagTuNcU@RoJXBG%g` z#F9|L*BNxjQFZXPcU-)JH-S^;wjWA5wwX)w6SPzazeJ~0$*PioAw6w3x1zlqQjAy} z^!TT{dTF->mzvLVhE|i7WO*&O$t^Us`%%f7H6pRq+_np7>s)+bT-%@KIWc(*Th_$9 z(q#4ZZ4Xb9M2~zaaJ7S~luh}&^~$-s>4*irP1(B}Mhh*#c^2kU#i$@%O-%HqTE}lD zg;-GlZIZ{HFV57bZu=D$r_A8bfv{aZ f?_&(T68c;+n!U}P1)y}KD&4+^UnhHjO(7R#Urx^+Tuyo}C8pXHK5w3^BXC|C zBc;mvF{mhWcH0KT;rMc9bpCtO^5ggY!?atJnexQgt6_yXFI>n6H>bryhLrnma`IU@dXMb2$9iKON>LCs4rKSJ=EVQRLeX zVnFM2tBY<0r%w4>if!&2ShaE=mw#2C8>~IWL>8KLey}+QqR~_k{HfXC|0* i)w z$gtwdT=&mi6{9R~Pft3VEwNdl=|LW0?LKYla+_@ySLUuAIaHU|ws*B?qKTy$;)B&& zQP5&_m_NtHVghwoy<%+)t4&ijojB`DC^|V6FhZXV_MK5-Jr{22_T=n@MN-kmRee52 z4b#1p=hx9~8W01sc@9bk-}PF&-(>&gG`c!BtGFAJyEJBe#}ehGuo<%wiK8z&AH#4+ zCxhLB)QU^@VL$q<(#dUyMsXBRP(bX)dtoN&VVD@c%y5{RlCb*+sTXPUUoT<{-wnb~ zN#Tao#+z-rEuGwCs_9mG91pfQMd!UA-oJ$dcc5><*`T^R;YoGB0dGV`%ol%CpyU&i z-pwrbEHsg%yb?dI^w;VhRhR1CWG=!Q=^l_9(}wm>y~mZL#_;
I|iN3&X~k;>IZU`?;i4uD)CO!cjPQgsKlhds8QTdYJjn zqa$X4>A9#;3h#8Y+BJI8SjA-5Hw29IxlpRqjPU+~g~G-q^B$Gx&?#iuGq@^X?}u=& zXo(9YjZ16Tp&!XUkzit8rvmMbrTYdCQ1d3Jl)-k}*zTpK#x~A$>fNI@hD4m#^=%%w z4ZlBZWuSLgZS+3j^}Aq*E`--em52oT$DSG(-D43V6gnRuO16lZi!AP~+=w*anE(l9 z#N%w01hYJ*F$(aq#jBf($Bcf<7ClC$b|zDat+g4Itigr*g>D;l54ZB}VnhNY_9qX3 z4CPfQA~0b4BM+edg~6}kk7NV?MdIi9uSk(`KxnJG2sol z%pQZfw6_rXX#W3@&}+=;iZkV;87Jm5QiWf}9Q2jN= l0Y(7Dxu0V5%%>x;jYsq;GmC?Y zP928r0z1Wm_S2I%2Kn$B53
- **[Scroll](https://scroll.io/blog/zkEVM)** - _Scrollは、ネイティブのzkEVMを搭載したイーサリアムのレイヤー2ソリューションを開発中のテクノロジー企業です。_ - **[Taiko](https://taiko.xyz)** - _Taiko は分散型のイーサリアム等価のゼロ知識ロールアップです ([タイプ1のZK-EVM](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))_。 -- **[ZKSync](https://docs.zksync.io/zkevm/)** - _ZkSync Eraは、Matter Labsが独自開発したzkEVMを搭載するEVM互換のゼロ知識ロールアップです_。 +- **[ZKSync](https://docs.zksync.io/)** - _ZkSync Eraは、Matter Labsが独自開発したzkEVMを搭載するEVM互換のゼロ知識ロールアップです_。 -- **[Starknet](https://starkware.co/starknet/)** - _StarkNetは、StarkWareによって開発されたEVM互換のレイヤー2スケーリングソリューションです。_ +- **[Starknet](https://starkware.co/starknet/)** - _StarkNetは、StarkWareによって開発されたEVM互換のレイヤー2スケーリングソリューションです。_ ## ZKロールアップの参考文献 {#further-reading-on-zk-rollups} - [ゼロ知識ロールアップとは何か?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) -- [ゼロ知識ロールアップとは?](https://alchemy.com/blog/zero-knowledge-rollups) +- [ゼロ知識ロールアップとは何か?](https://alchemy.com/blog/zero-knowledge-rollups) - [STARKとSNARKの相違点](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) - [zkEVMとは何か?](https://www.alchemy.com/overviews/zkevm) - [zkEVMのイントロダクション](https://hackmd.io/@yezhang/S1_KMMbGt) diff --git a/public/content/translations/ja/developers/docs/smart-contracts/anatomy/index.md b/public/content/translations/ja/developers/docs/smart-contracts/anatomy/index.md index 7b4baef7332..8d795e712bf 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/anatomy/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/anatomy/index.md @@ -626,10 +626,10 @@ contract CryptoPizza is IERC721, ERC165 { uint256 size; // Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. - // どのように動くかの詳細は、 - // https://ethereum.stackexchange.com/a/14016/36603 を確認する。 - // TODO すべてのアドレスが縮小されるので、 - // セレニティリリースの前に、ここをもう一度確認する。 + // See https://ethereum.stackexchange.com/a/14016/36603 + // for more details about how this works. + // TODO Check this again before the Serenity release, because all addresses will be + // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(account) diff --git a/public/content/translations/ja/developers/docs/smart-contracts/compiling/index.md b/public/content/translations/ja/developers/docs/smart-contracts/compiling/index.md index 3e0051bb519..7e8269d7cf5 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/compiling/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/compiling/index.md @@ -33,6 +33,10 @@ contract Greeter { PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900 ``` +これらは**オペコード**と呼ばれます。 EVMオペコードは、イーサリアム仮想マシン(EVM)が実行できる低レベルの命令です。 各オペコードは、特定の演算を表します。例えば、算術演算、論理演算、データ操作、制御フローなどです。 + +[オペコードの詳細](/developers/docs/evm/opcodes/) + ## Webアプリ {#web-applications} コンパイラは、アプリケーションがコントラクトを理解し、コントラクトの関数を呼び出すために必要な**アプリケーションバイナリインターフェイス(ABI)**も生成します。 diff --git a/public/content/translations/ja/developers/docs/smart-contracts/composability/index.md b/public/content/translations/ja/developers/docs/smart-contracts/composability/index.md index 4f7d3fa1fdf..79f59a1b16d 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/composability/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/composability/index.md @@ -65,7 +65,6 @@ ETHでトランザクションフィーを支払う必要があるDappを作成 ## 関連トピック {#related-tutorials} -- [コントラクトの構成可能性: イーサリアムスマートコントラクト開発のビルディングブロック](https://www.decentlabs.io/blog/contract-composability-the-building-blocks-of-ethereum-smart-contract-development) - [create-eth-appを使用したDappフロントエンド開発の始動](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _- create-eth-appを使用して、一般的なスマートコントラクトを組み込んだ、すぐに利用可能なアプリを作成する方法の概要_ ## 参考文献 {#further-reading} diff --git a/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md b/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md index 88e894bf98c..3dd8f86f527 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md @@ -44,7 +44,7 @@ lang: ja 形式的仕様記述により、プログラム実行の正しさを数学的に論証することが可能となります。 形式モデルと同様、形式仕様記述は高水準のプロパティもしくはスマートコントラクトの実装の低水準の挙動をとらえることができます。 -形式仕様記述はプログラム論理を用いて導出され、それによってプログラムのプロパティが形式的に論証できるようになります。 プログラム論理が備えている形式規則により、プログラムのしかるべき挙動が(数学的に)表現されます。 [到達可能性論理](https://en.wikipedia.org/wiki/Reachability_problem)、[時相論理](https://en.wikipedia.org/wiki/Temporal_logic)、[ホーア論理](https://en.wikipedia.org/wiki/Hoare_logic)を含む様々なプログラム論理が形式仕様記述に用いられます。 +形式仕様記述はプログラム論理を用いて導出され、それによってプログラムのプロパティが形式的に論証できるようになります。 プログラム論理が備えている形式規則により、プログラムのしかるべき挙動が(数学的に)表現されます。 [到達可能性論理 ](https://en.wikipedia.org/wiki/Reachability_problem)、[時相論理](https://en.wikipedia.org/wiki/Temporal_logic)、[ホーア論理](https://en.wikipedia.org/wiki/Hoare_logic)を含む様々なプログラム論理が形式仕様記述に用いられます。 スマートコントラクトの形式仕様記述は**高水準**な仕様記述と**低水準**な仕様記述に大別されます。 いずれの場合でも、分析対象のシステムのプロパティを適切かつ一義的に記述できなければなりません。 diff --git a/public/content/translations/ja/developers/docs/smart-contracts/index.md b/public/content/translations/ja/developers/docs/smart-contracts/index.md index 9c557157bef..abe8e0e0318 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/index.md @@ -23,7 +23,7 @@ lang: ja 自動販売機でスナックを取得する場合、以下のロジックになります。 ``` -お金 + スナック選択 = 出てくるスナック +money + snack selection = snack dispensed ``` このロジックは自動販売機にプログラムされています。 @@ -40,7 +40,8 @@ contract VendingMachine { mapping (address => uint) public cupcakeBalances; // When 'VendingMachine' contract is deployed: - // 1. // 2. コントラクトの所有者としてデプロイアドレスを設定 set the deployed smart contract's cupcake balance to 100 + // 1. set the deploying address as the owner of the contract + // 2. set the deployed smart contract's cupcake balance to 100 constructor() { owner = msg.sender; cupcakeBalances[address(this)] = 100; diff --git a/public/content/translations/ja/developers/docs/smart-contracts/security/index.md b/public/content/translations/ja/developers/docs/smart-contracts/security/index.md index d63aeb554d2..d352d94ae93 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/security/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/security/index.md @@ -78,7 +78,7 @@ contract VendingMachine { 残念ながら、単体テストを単独で行った場合は、スマートコントラクトのセキュリティを向上させるのに最小限の効果しかありません。 単体テストは、関数がモックデータに対して正しく実行されていることを証明するかもしれませんが、作成されたテストに対してのみ有効であるにすぎません。 これは、見落としたエッジケースや脆弱性の検出を難しくするので、スマートコントラクトの安全性を損なう可能性があります。 -より良い方法としては、単体テストと[静的・動的解析](/developers/docs/smart-contracts/testing/#static-dynamic-analysis)を用いて実施するプロパティベースのテストを組み合わせることです。 静的解析は、[制御フローグラフ](https://en.wikipedia.org/wiki/Control-flow_graph)や[抽象構文木](https://deepsource.io/glossary/ast/)といった低レベルな表現を頼りに到達可能なプログラムの状態や実行経路を解析します。 一方、ファジング (fuzzing) などの動的解析手法は、ランダムな入力値でコントラクトコードを実行し、セキュリティプロパティに違反する操作を検出します。 +より良い方法としては、単体テストと[静的・動的解析](/developers/docs/smart-contracts/testing/#static-dynamic-analysis)を用いて実施するプロパティベースのテストを組み合わせることです。 静的解析は、[制御フローグラフ](https://en.wikipedia.org/wiki/Control-flow_graph)や[抽象構文木](https://deepsource.io/glossary/ast/)といった低レベルな表現を頼りに到達可能なプログラムの状態や実行経路を解析します。 一方、[スマートコントラクトファジング](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry)などの動的解析手法は、ランダムな入力値でコントラクトコードを実行し、セキュリティプロパティに違反する操作を検出します。 [形式検証](/developers/docs/smart-contracts/formal-verification)は、スマートコントラクトのセキュリティプロパティを検証するためのもう一つの手法です。 通常のテストとは異なり、形式検証はスマートコントラクトにエラーがないことを決定的に証明することができます。 これは、望ましいセキュリティプロパティをとらえた形式仕様記述を作成し、コントラクトの形式的モデルがこの仕様に準拠していることを証明することで実現されます。 @@ -112,7 +112,7 @@ contract VendingMachine { - スマートコントラクトのテスト、コンパイル、デプロイに[開発環境](/developers/docs/frameworks/)を使用する -- MythrilやSlitherなど、基本的なコード解析ツールを使用してコードを実行する。 これは、各プルリクエストがマージされる前に実行し、出力の違いを比較しておくのが理想的である +- [Cyfrin Aaderyn](https://github.com/Cyfrin/aderyn)、Mythril、Slitherなど、基本的なコード解析ツールを使用してコードを実行する。 これは、各プルリクエストがマージされる前に実行し、出力の違いを比較しておくのが理想的である - コードがエラーなくコンパイルされ、Solidityコンパイラが警告を発していないことを確認する @@ -126,7 +126,7 @@ contract VendingMachine { イーサリアムスマートコントラクトは、デフォルトではイミュータブル (不変) ですが、アップグレードパターンを用いることで可変性をある程度獲得することが可能です。 コントラクトのアップグレードは、重大な欠陥によって古いコントラクトが使用できなくなり、新しいロジックをデプロイすることが最も現実的な選択肢となる場合に必要になります。 -コントラクトのアップグレードのメカニズムは様々ですが、「プロキシパターン」はスマートコントラクトのアップグレードでより一般的なアプローチの一つです。 プロキシパターンは、アプリケーションを「状態」と「ロジック」の_2つの_コントラクトに分割します。 最初のコントラクト (「プロキシコントラクト」と呼ばれる) は、状態変数 (例: ユーザーの残高など) を格納します。一方、2つ目のコントラクトは (「ロジックコントラクト」と呼ばれる) は、コントラクトの関数を実行するためのコードを保持します。 +コントラクトのアップグレードのメカニズムは様々ですが、「プロキシパターン」はスマートコントラクトのアップグレードでより一般的なアプローチの一つです。 [プロキシパターン](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern)は、アプリケーションを「状態」と「ロジック」の_2つの_コントラクトに分割します。 最初のコントラクト (「プロキシコントラクト」と呼ばれる) は、状態変数 (例: ユーザーの残高など) を格納します。一方、2つ目のコントラクトは (「ロジックコントラクト」と呼ばれる) は、コントラクトの関数を実行するためのコードを保持します。 アカウントは、プロキシコントラクトとやり取りを行います。プロキシコントラクトは、すべての関数の呼び出しを低レベル呼び出しである[`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries)を使ってロジックコントラクトへディスパッチします。 通常のメッセージ呼び出しとは異なり、`delegatecall()`は、 ロジックコントラクトのアドレスで実行されるコードが、呼び出し元コントラクトのコンテキスト内で実行されるようにします。 つまり、ロジックコントラクトは、ロジックのストレージではなく、常にプロキシのストレージに書き込みを行い、元の`msg.sender`や`msg.value`の値は保持されるということです。 @@ -235,7 +235,7 @@ EVMは同時実行を許可していません。つまり、メッセージ呼 誰でもイーサ (Ether) を入出金できるシンプルなスマートコントラクト (「Victim」) を考えてみましょう。 ```solidity -// このコントラクトには、脆弱性があります。 プロダクションでは使用しないでください。 +// This contract is vulnerable. Do not use in production contract Victim { mapping (address => uint256) public balances; @@ -338,7 +338,7 @@ contract MutexPattern { locked = false; } // This function is protected by a mutex, so reentrant calls from within `msg.sender.call` cannot call `withdraw` again. - // `return`ステートメントは、`true`と評価しますが、まだmodifierのステートメントでは`locked = false`と評価します。 + // The `return` statement evaluates to `true` but still evaluates the `locked = false` statement in the modifier function withdraw(uint _amount) public payable noReentrancy returns(bool) { require(balances[msg.sender] >= _amount, "No balance to withdraw."); @@ -414,7 +414,7 @@ contract Attack { function attack() public payable { timeLock.deposit{value: msg.value}(); /* - 「t = 現在のロック時間」ならば、xを以下のようにして求める必要があります。 + if t = current lock time then we need to find x such that x + t = 2**256 = 0 so x = -t 2**256 = type(uint).max + 1 @@ -446,7 +446,7 @@ DEXの価格は正確であることが多く、これは市場の均衡を取 ##### オラクルの改ざんを防ぐ方法 -オラクルの改ざんを回避するための最小要件としては、単一障害点を避けるために複数のソースから情報を照会する分散型オラクルネットワークを使用することです。 ほとんどの場合、分散型オラクルにはオラクルノードに正しい情報を報告するよう促す暗号経済的なインセンティブが組み込まれており、集中型オラクルよりも安全性が高くなっています。 +[オラクルの改ざん](https://www.cyfrin.io/blog/price-oracle-manipultion-attacks-with-examples)を回避するための最小要件としては、単一障害点を避けるために複数のソースから情報を照会する分散型オラクルネットワークを使用することです。 ほとんどの場合、分散型オラクルにはオラクルノードに正しい情報を報告するよう促す暗号経済的なインセンティブが組み込まれており、集中型オラクルよりも安全性が高くなっています。 オンチェーンオラクルに資産価格を照会する場合は、時間加重平均価格(TWAP)メカニズムを実装しているものを使用することを検討してください。 [TWAPオラクル](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles)は、ある資産の価格を2つの異なる時点(修正可能)で照会し、得られた平均値に基づいて現在価格を計算します。 長い期間を選択することで、直前に行われた大量の注文が資産価格に影響を与えることができないため、価格の不正操作からプロトコルを保護します。 @@ -500,10 +500,16 @@ DEXの価格は正確であることが多く、これは市場の均衡を取 - **[Nethermind](https://nethermind.io/smart-contracts-audits)** - _ SolidityとCairoの監査サービスにより、イーサリアムとStarknet全体でスマートコントラクトの整合性とユーザーの安全を確保。_ -- **[HashEx](https://hashex.org/)** - _HashExは、ブロックチェーンとスマート コントラクトの監査に焦点を当てており、暗号通貨のセキュリティを確保するためのスマートコントラクト開発、侵入テスト、ブロックチェーンコンサルティングなどのサービスを提供_ +- **[HashEx](https://hashex.org/)** - _HashExは、ブロックチェーンとスマート コントラクトの監査に焦点を当てており、暗号通貨のセキュリティを確保するためのスマートコントラクト開発、侵入テスト、ブロックチェーンコンサルティングなどのサービスを提供。_ - **[Code4rena](https://code4rena.com/)** - _スマートコントラクトセキュリティの専門家へ脆弱性の発見にインセンティブを与え、web3をより安全にすることを支援する競争的な監査プラットフォーム。_ +- **[CodeHawks](https://codehawks.com/)** - _優位性のある監査プラットフォームで、セキュリティリサーチャーのスマートコントラクト監査コンペを主催している。_ + +- **[Cyfrin](https://www.cyfrin.io/)** - _ブロックチェーンセキュリティおよびweb3の教育企業で、EVMやVYperベースのプロトコルに注力している。_ + +- **[ImmuneBytes](https://www.immunebytes.com//smart-contract-audit/)** - _Web3セキュリティファームで、経験豊富な監査人と最高クラスのツールを通じてブロックチェーンシステムのセキュリティ監査を提供している。_ + ### バグ報奨プログラムプラットフォーム {#bug-bounty-platforms} - **[Immunefi](https://immunefi.com/)** - _スマートコントラクトとDeFiプロジェクトのバグ報奨プログラムのプラットフォーム。セキュリティ研究者がコードをレビューし、脆弱性を開示し、報酬を得て、暗号資産の安全性を強化。_ @@ -551,3 +557,5 @@ DEXの価格は正確であることが多く、これは市場の均衡を取 - [スマートコントラクトのセキュリティガイドライン](/developers/tutorials/smart-contract-security-guidelines/) - [トークンコントラクトと任意のトークンを安全に統合する方法](/developers/tutorials/token-integration-checklist/) + +- [Cyfrin Updraft - スマートコントラクトセキュリティおよび監査のフルコース](https://updraft.cyfrin.io/courses/security) diff --git a/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md b/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md index bff416ec597..0d861f36794 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md @@ -149,8 +149,8 @@ Solidityスマートコントラクト用の単体テストフレームワーク 単体テストでは、コントラクトの関数を個別にデバッグしましたが、統合テストでは、スマートコントラクトのコンポーネント全体を評価します。 統合テストでは、スマートコントラクト間の呼び出しで発生する問題や、同じスマートコントラクト内の異なる関数間のやり取りで発生する問題を検出できます。 例えば、[継承](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance)や依存性注入などの機能が正しく動作するかどうかを確認するのに役立ちます。 -統合テストは、コントラクトがモジュラー型アーキテクチャを採用していたり、実行中に他のオンチェーンコントラクトと接続する場合に有用です。 統合テストを実行する方法の1つは、([Forge](https://book.getfoundry.sh/forge/fork-testing)や[Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks)などのツールを使用して)ブロックチェーンの特定のブロックの高さで -フォークすることです。そして、デプロイされたコントラクトと作成したコントラクトのやり取りをシミュレートします。 +統合テストは、コントラクトがモジュラー型アーキテクチャを採用していたり、実行中に他のオンチェーンコントラクトと接続する場合に有用です。 統合テストを実行する方法の1つは、([Forge](https://book.getfoundry.sh/forge/fork-testing)や[Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks)などのツールを使用して)ブロックチェーンの4 zw?Zi#>fmjWb++lb6@mJDs?@SpDKKXPeRR7Pb8kmgI`;p 1VTO$f88Q|(`$8|-HB&YwhfBE+DyMyaG7b)DY%nQ*8uF3e{H(u9YNEv)(=7@Lw zH&Oh%hwHKfsnf0u74dxm;o)CZ+wWek6L+LUxiSc1lpwrZE4zOcEWbOvPEh`tQcVN^ z|HA%%cW`}_A$iP|y~6&Lng3%ozi++XfswQB%HATt`8$~Z_S@e#UvEapCVgePh}S@D q{vR#-cR$z9+dpxML~yo$X7s9&X{e$j(gOhCAg(OL3D_Y*uKoih5e3Bn literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index b996036c885..ac81693a7df 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -76,6 +76,15 @@ sidebarDepth: 2 - トレース/デバッグ名前空間が利用可能 - 自動アップデート - 技術サポート +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) + - [ドキュメント](https://aws.amazon.com/managed-blockchain/resources/) + - 機能 + - フルマネージド・イーサリアム・ノード + - 6つのリージョンで利用可能 + - HTTP上のJSON-RPCおよび安全なWebSocket + - 3つのチェーンのサポート + - 年中無休のSLA、AWSサポート + - Go-ethereumおよびLighthouse - [**Ankr**](https://www.ankr.com/) - [ドキュメント](https://docs.ankr.com/) - 機能 @@ -86,7 +95,7 @@ sidebarDepth: 2 - 従量課金制 - 分析ツール - ダッシュボード - - RPC、HTTPSおよびWSSエンドポイント + - RPC、HTTPS、WSSエンドポイント - ダイレクトサポート - [**Blast**](https://blastapi.io/) - [ドキュメント](https://docs.blastapi.io/) @@ -268,7 +277,7 @@ sidebarDepth: 2 - ハンズオンデベロッパーサポート - [Pocket Portal](https://bit.ly/ETHorg_POKTportal)ダッシュボードと分析 - [**QuickNode**](https://www.quicknode.com) - - [ドキュメンテーション](https://www.quicknode.com/docs/) + - [ドキュメント](https://www.quicknode.com/docs/) - 機能 - 24時間年中無休の技術サポートとデベロッパーのDiscordコミュニティ - 地理的なバランスを考慮した、マルチクラウド/メタルの低遅延ネットワーク @@ -281,19 +290,19 @@ sidebarDepth: 2 - [SOC2認証](https://www.quicknode.com/security) - デベロッパーからエンタープライズまで幅広く対応 - [**Rivet**](https://rivet.cloud/) - - [ドキュメンテーション](https://rivet.readthedocs.io/en/latest/) + - [ドキュメント](https://rivet.readthedocs.io/en/latest/) - 機能 - 無料ティアオプション - 従量課金制 - [**SenseiNode**](https://senseinode.com) - - [ドキュメンテーション](https://docs.senseinode.com/) + - [ドキュメント](https://docs.senseinode.com/) - 機能 - 専用ノードと共有ノード - ダッシュボード - ラテンアメリカの様々な地域に拠点を置く複数のホスティングプロバイダーを利用して、AWS外部でホスティング - PrysmとLighthouseクライアント - [**SettleMint**](https://console.settlemint.com/) - - [ドキュメンテーション](https://docs.settlemint.com/) + - [ドキュメント](https://docs.settlemint.com/) - 機能 - 無料トライアル - 従量課金制 @@ -306,7 +315,7 @@ sidebarDepth: 2 - 時間課金制 - ダイレクトサポート - [**Tenderly**](https://tenderly.co/web3-gateway) - - [ドキュメンテーション](https://docs.tenderly.co/web3-gateway/web3-gateway) + - [ドキュメント](https://docs.tenderly.co/web3-gateway/web3-gateway) - 機能 - 1か月あたり2,500万Tenderlyユニットを含む無料ティア - 履歴データへの無料アクセス diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/nodes.svg.xlsx b/public/content/translations/ja/developers/docs/nodes-and-clients/nodes.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..51245e3b6e8819ef10e2cc51a3a900e508d49a57 GIT binary patch literal 4938 zcmaJ_1yodR*M*^T=#rF>kd6WA5D95eK)PnA0RdqMk!}!%lu$ytgh3E#kWTScq(h`b zQjz*+^! R*p=*cX(;OE4>@=LbHeYg%->PetaJLURq;C=6;d&GhnGFC*6 z8PVbXE%_CgZy>Qj1I=uSkqh?S7A^?We%VFmMj1ij8#G+x6I+C$9HR%tXnFr|H|`Fy z!)0KztT^ZUEXAon`(^?RuNr>yCdgTY~@>F!|{$j%d7g z%krDp0v3K*;>>s9nlEgJSOzhax_jBzhkc_vLcMw )!$oH=}8* gH~?PVW4CsB7%7JaLc!3DyWX zEZpu;*VQs6=Y=4L6A@!}ts;wDp?zul=B92eL2BaBo_|4Es<#zz-;$XpyT{D}Lb=*T zhdy@LD2+y-W6XQ4n$w~a?ZHbfe(~NksDkXPRx+#L02yVkMX4f2Fs+aq h>f#P1HVbhEY5^Ki3=g56OJdzdh& z)*(j{V9s6!MyLX>R;vPo7CIAUTGMZ5B-?@PKx^LAHCoxAgsV{pb2%^)zYO^mYY#nn z7Ook)=A$K?FrvzSRad;1RB9Y-#H?fi1NwZ6;w**Na3&jU(uB%2=57{~>(c0L>XaY= zY88qGf&0k`CF)Q= 9@gC(^;6IuVYfqpT72O_H-1ZvZ^*obqTGg!?hM12`=VawH+yZUWb#sUN zkCDITuVI=o2gw}9YIy+57YiWND^$*NW^bF1EqJz$g=<_kMIGG}zihX*J<~d^9Hm52 z#;+(DijBl@?5{Y|{KV15&C&}6A^*QW1W{OKjhI5)1qgAzkZ%wh%-9>#kSkJ{jc5uG z^ VvjjJe}O5us0(H%_p=r;GgH}9FI=tgJI>bPF7=+hHk#bMT*XshhC z6<7zsU gY9;Yg^neqX|)jD$&lsH!Q!B|KbaWMWyN!FiGdbzkc zx 2X9F|zHvoy>^M zoooL*FznZ1E(#PzTnQDI;K^CU5~%K5?Ik7~n!ewJK}BvHi$Jhh=HO~Hm1v4s_kr$b z`q|J{>9nW8X9-B(t6;NwJ$2Ibp(ZSl3X_NFQ`4(BMOpE*7os1e_8RlD)V#+0!29&9 z%5+vMidfT>Xng-u=m`3Dy&;DnVG^6`*+f$Z989HT8d({2K#szoyl7nmfvk}GuXIAq zePmmDKy00De_nqSK6rN$I>k(K8gz!S(9|~8#MPivongRaY_L|lCS0|X-}Vt8W`EX9 z WyYYzA%94;)}8sA^qLW>0qi53AnLd*?GNT?Pq`xZn`4&2YZ(F5btLerLF z%I3*Qzc}ozl2zI$2mz8L$$1*XB9l7tSx7mBsi?i>)4o%Emg>;e@QzW4W1@6cPOvr- zPMS|@n|RjJCHpv6gt o=^V%trDk18gG1?(zj zCj(#1H<_N1N;OaF5;F>zDyp9|PnhIl%Y7!P8*8Dvi_z}8%q~;7aAm>Ak1ils?xvv0 zq&wBwOlcK%5gl>8OQrPKfg~(=mcgOEe%#p9zpm34qjBAo->)wCt8t?&*}4;WoS|`c z0o(xtgBmu=g2%E$3O4)$YMp0ip^hFHk#65V+rpw1x`v8Ro@7qkqCHF8YXYn+lx+3} z_;IU*V1za-aTTyjn~_REfp5|n4k8dqP4BpQ1%)u)TY{&HTGm;M^Wt>XfV+|KN(FT? z35|{>p|wa)2e=8FgCYM|TPOXx;9UJlR^MX$oC2@)I;EA4UN?ZEUOOC5({24ZJ;KEs z#=X8e#f5YIUc+aQXR?Bk5qR$~UToioia;-*Qq`Ql-LQ gGZ$pU|+^~EwGII zR2HP(7CL2_pf7M*93`vHJ|9r cx$-*C5963$z>bv$Y}}`#KsBrpiWz2(M{_mGEuDjQl|kqH-pyW ztjv}uO&(v7P^LGwm*o~oX>Wi%imN!T*4rM *-rG1$Z_Mdqxcm9>%!B^W1HV+5 zucE+n-md)mPoo7s-Ly=YU2cfTMv27te%7FsZDX58o`bTlT9duiM>wcPv&{>%(>B}>9AnUVYJt_# zT>Gnz)@jikI=AepZ38#mkA_^_UC#u#Bh6k_0X!0HGDPG}gdrhYQH#eFuaA 3e5;2c$BDgIeSpV}LUj0ezRMbCO^Nrp z>$@`iRBwU_qc;|nrh#?QZQI|eeR8T>jb5t?a=BxZ5ek`_&XuSwUrQ4;kiwRsleZNZ zyg`*mMt55Pt`fW5 KAI&*N#4>-Pf@F_xZQi%FB% z0>0JtXgao9@pu@8#g(3&ckJgQvV)iQofk*KlCfkkcos}lu*3U$OQfTei;Yk7QIJVr z;Yh0N1Y)G>rr?sJ-W)|9nrYz~eQNPcsaiR~4MI1ceVlB{$7zrf<_d-BcWzbRRHrAu zzGs-^!Ag=a&FVQ+URh?)Zy&5bbMXucZ7yz;(55*R@%XrN-xFum+Bf<2hIvtg_TDVP z$Fo?pVOSx3b >$8_TZ9e*>& -L3@kFS6)K5l!Cm35ll3UH+ zLXu&sIWb--*D1H+B-2G^{2V$ ?U^2=?NUO%vE<>PqVpYhUyADq^Epw!l yW4;^ouS}AO^iQ{%+VszbjtKn@rQ;o1wMAyoWTmOf>MkYpg^*XOZUf(mO z$o!-#*&@+Le$hw9Cb!vyfx@RfBnehgli`J(70cn48>6&>X|ecgMS*N7S4{jp!Gws( zSe(eW9FfBmnkVuVc)BYQ3EJEQyA11qErN=hvte->(LdCIMqh6EE#w|>{8b&${oI3} zk^rR<{ )3 z)Mk 28y*Qv~7B8NIdERe`D>x z()5y^x=>PCNv4nUm?^@}qjtJVqb3~gg7eWit0}^m8r10IMh7r)d|8(J<0ZavudC!DTnqI_ljbJq#}j%LWIJ7 zhm7PDrF8Kq&=CT0^uX}ByrCog!G->){TEjKX>|f`X1ZNQ)Q^BWM$1*YJT3m#3 zH2(03)*~Y+D8bcIC8oqGkehSDRbjYGZV#-~q5VsStBv}>ym|9Nx>x;`S9PtD5_cSM z1FmAE2q&6jdbtUCg^8WborqjF>z9P2A6xO6j474tXZm+rM~*yD^9yh;Z{GP1;xfp$ zPIy-4e3IoQCUID|!~7V=J9u8=iD4Q}CKmSsWbHMrdeRebp%j}BF0x3#n~|{Uc^}lV z7+vt(^1;pGyydGst=@76g$Q0UBerywd7 }XZ5 z!w2GFwByD$l8SI!8*suj;W!_wZ}bMZ2TF?<+~P$$kbNqft%?!D@Zzc2@-h`#A~84C z#{RwSh@_P>>PlP4jlt&aP9_wq@ 88uXSuB3 zQBLI|_L1)tkXbJE*<&?+GvKlwTqJhV@4i@Oy&GXBSG&T!bawPh|dI-2A@u^2kLU zZWj@U+?;=l`QL#3eevb#gPO`0L56$` oRg1Y-Z+xqQd literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/diagram.svg.xlsx b/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/diagram.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f6f93e5f7ffb8a3ce4a41f2b64aa3ed4571a4753 GIT binary patch literal 4886 zcmaJ_1yoe~*BwB*n?Wh*K?J0`5f~Us6p)ba6k&)*3k)rtN=S#mAl==ifHaa)A|NOT z_|4$^fAC!Id1lsK_pUX+GwbYAdtY@h+6^)Q78Vx3l_^UHaLq^&_m5>A9bC;FT#X)h zIGH~+xC^znd#g17>EI?hL%m=)Am?`wrVmOzZe77rj3?CDQ8k_5@|d4mge&PW718^@ zH*Bo#5#`-}n}3)A@4_HWS>oVf@5z>W6CmKD3ybbL`~)G3Z?i3LGi5$jG?8dXy?abt zxMZf5VC53^O*7VJ6eWQn+wwI*pY*!9UO$!%Iyhc%Wxw=6o8?!J_{Ri1X%Z&*wrSxZ zJ}tRrH#)5%0|uL!;$X|xJx?6r1_P3-_KgxeydqTWq%)uK_*uq}3IRFqL5&APOgZ~T zBw1yVGBodJoRyV$7_4lF;P5qp*V=-6{EPH!lujxj_lG`#Oby)Zgb6PfG5KTETQ)i) z^BA}!3DVz%K+4UB8HUj0dit2RN4&y2p1b!7C-C~>-iqDw^J%my7EUCH__;guS8%z= z*1%`Wk!FB87!%7rv`U>H1polv03e?K3w2xs>P9Z+c2BwPBCnAn(gXqAMChZW&=8Ab zO()}sta2U}JAB&AYFP%UeCy)&-CfN{+@!dZL!Z2oBo7n9ug3HonY}JgtjIUps8Obl z8^r;*8hV_pm26MC0MFjCa|!h&JIF}Zwvw0x`bj9buZk7WS_1F6SiQ?*lpIJ_aIB59 ziN`p(JMwL=<)->y$t7c`-Z{8WcDKIJrPVvALvKHOHP%f>ZUkcjJ96Xbuv{=nE`)a9 z$!aZ*^%c`;x(xNTV-|fSA`mu2xc?n08R8dEJFcfz#xCY&TCOhE4wg@m6$Y<((>tWW z2Id3}501dK@4e?$*Hjz=53BVJf@`#K@SWeiRj;gpv){d|0RRnhRBQLMv9p(tPjNwp z6^B&sOb&1<4x#nGUZY%NNd(l%Z=QCc%NN4fyMTp-%yq)23K$p`r**It4`rOblUxtx zYGn##oLrBT=edQ$+!CV!Dxzs5qHmt~N 7vPlAu4Tts^xkeFW_d*KXo^xFekeovS)=K3wln zZD?D4Sgy*30l@%bX#@>81z4y6PF~m1*p2(B%!6A=9=9zRe696B*%bLAWRLzqL)7oJ zsUNG19vxMR+a;>G?o|zB2t>dC5ml;RsG7MLyCVVR`um0liEPHGfkQht9_AO)9RlqI zYdtDbSu(>>2sgnJv%}37(ftHDb3S9r0@hwAwDtp%CwoH LR}%jf(V?gOP+Vl`9^R*SRrss) zd9fme*uzS04~L7l ^L?97VyUjkWD041`Ep$PBG~cV)+&^K|J5SbwLZjAkr%u+h zH>85ausP0L!Tqy;jTIV=|3Gi8(D#-33Q(WGTQ&~63d4ocLHO+&BV;dPnpg*-BVfct z`%{53{({oo(Z%+umASd=Q?6f~dHHY&=-)jG#%bp!!dOD|D7RPK 3Ej(FudX`7CX%jC6>IC{~U8m-)|* zp8oVe@sCM )OGan&(Km<*Sp@Zk1(Am3#@>ysA|m2WXO9dCB4S@! zXF5oX9hZ#{_B)WxOdu@(*ko`)EY>`$NkGeOAPfFUKck {E)1h2jc~0&0Rf$2a0rN21WcMH-vBx@kQFpPDW&w8m`%F7KMa zZ+eZAB-?hD(=?5X%a$EbOTmWSlEA6Vpu8O)ziRu%MF(3~G?>fjnmIIFrhB;XEG2#B zKJX&$unG0ka?x&|pEpP`2<>^pI(r_oxFNBa17T+}%~2>kzUdu^ljk1Vgt6s(LCZE{ zVNR5$GT{L%_KggfL|C<>>E0I1%_df#$wr53s;%qRHqTPsSw{bA%#sYJ={C8EhE@+M zS)F tA7dUxuhVt?fIPXiwE52g<+Cl=8t}PDKpy^KsMXA)5CM8wabZ vg8A{qf89f$@Qae3M<^wvz7$$CAK#}eWS{LRBG*wr(4k<_C4M?Pi@TV zr+Ks%z3^<{`H^=L)JvB8HD`Bj-O6~LXAh9>Mz;$b)+ih|;cY7TX;06rk>jZ3o7!w& z m( 7`wf=7C(^-z>lgmeLR-em&Dqh zcr%6MRr<1sOn5XoUw=S2J-B2uqgF;m)?d(SGR*voPGMDZHB8E2*(boYx(!`-Bg8{a zFPu|_54>Ph`BsGBBYfphzVBY93vOA5EZmyXHPB>>x>H=K^wo;e$%0WXL|jSOs6K2x zUT)kzO!RU7u^Ba-^SjX22{xxLBdKZtwPJCB7kg4Cm+QBmd7?*qeCkQwxFnK7=0*gg z1?BIT&vBGHA=N~vRLVX=611yTK{-c-zDW(szO@a`aNv_|)&{FN?OC53%Xz2*$0@%d zhpLj7rU+Y_$s-!+VFwXGM)?uR7pIiSN?6eSs6T=jx1oQefP`0T$HdXm_HuE@f)R_G zC|GS&RBj>ARE{H5@xy}z#CL|a^#iHN$NOe!d~?llF>={<*=1+xjuO*99TurG_?7}) z1X%4-VsDf >$ ?oKhe`yVd5p^J?|xYVG=eQ zlHXOf5n{YE4&+IW#MvtFXG*-O@8f2P2cM0^gpIMlM#vy%(q-71pF&@#gK!UMwoyOh zmdP&$N2!Kiu71`2?9%&)9I*Ux^;7@K!LNOfBmn=*#O1~>jg_`RXdrn+Izp$XD&sVj zVd<)DX0v&iMB^XsRWLKC&YT`+2rP*Z$xs@?es-Px9JPX D5a{Vo{*M2BH8%yqP=0oR44EBGag)meO-UXun|p*6{pcUEMoCRJ_h_$ zoxFz%_EGinb)bR!DeFLWBeSq3?U>_gRA(y23szA+RZAzzL2D_sMzxyP)=+q}c8g)v!e-EMBncN3!c*heCUyt=5ID{wDtC&OQbPAY zBCo4AobHh?8nS8=fo)n_2t4Xg|1`h;=AGBb(iKh0hzC37aFZ$g#4+grQDHH$qZXwU z7HyUltyj23Vm~~Ss>WVjjCLmBV84^C3s`p<*=L>2hSCC$qI5vFp} H})cHfLaZInK*s6QYAmy@ qbN9Wyc!0Zd^6e$wsdaE7F4A-Q)%K}I*Wfa|AsUL?!dj~6GpZrPZwsPtgP%D@yt z6wAZ=n4|#FShG?M4N`dGv7yo)pBfT0+*rC;v*cdc-OU$H^x^XGaW2u1fb|WXoxB*c zJ*3KyUVF*8P719DOLkBHOj*Y2+^5vW*|6P*-U&^IiRU?sx(MIaHcr^91j)T&|M=a& zv&hn7Uu}_xTz2#R#oI5^$E7cEGC_VTJ4=LZf%QPIcRUwl%iK+k6Yit-d&TokysTRZ z6g#XEYQ#SbBX54tI+q=7c|BQL$o$b_cZ<%%X-Kzrh((;_!Ss(VH}t=viG6(9$0R}q zlI%1gZNmkTUs3r>aM&@_AWaHF_{~6N-O0fMl_MQ_bRkGVol1=?NeB}!lcB;Sf$m6* z8BmEPb~xtfUaT-v8pGzjO6OjSV6%bVNrqWqrLKY-!SqnfF6E869SzQpPcHIa4#I?u z4@#qU4eKSXjtG%uv%1l{w2x@CAarEeprDcguHG|T*TP7K`A_?ow+_EMxUMjflKINq z5Px}1K>vR5x`;vw&?_@Wl=r{M(ce8>*AB>{zp@&{NI`h`SLyY;m+R~ssWYw&6@eGR z%e6-OSJm;m!|N>LpO9i;{40h3-NE(cgd`(Z=7{|Zng6FIzaPCmQ<2;2$~+Ls`8$~Z zP0-&DUmq{Xv3q6bc$bI&V+jB5=X$;UGcQ~S;`L8NuSSzP7##r*0Dyz|q#`Q7f(ZHa Ee{PxIAOHXW literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md index 63af55eb995..7fed8b3f087 100644 --- a/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/ja/developers/docs/nodes-and-clients/run-a-node/index.md @@ -99,7 +99,7 @@ sidebarDepth: 2 - 注: エリゴンにはスナップ同期機能はありませんが、フルプルーニングは可能です(約500GB) -コンセンサスクライアントの必要な容量は、クライアントの実装や有効にした機能(バリデータスラッシャーなど)によって変わりますが、概ねビーコンデータ用にさらに200GB必要です。 また、多数のバリデータを実行すると、帯域幅への負荷も大きくなります。 [こちら](https://medium.com/@migalabs/analysis-of-ethereum-2-consensus-clients-dfede8e0145e)に、本分析のコンセンサスクライアントの要件詳細が記載されています。 +コンセンサスクライアントの必要な容量は、クライアントの実装や有効にした機能(バリデータスラッシャーなど)によって変わりますが、概ねビーコンデータ用にさらに200GB必要です。 また、多数のバリデータを実行すると、帯域幅への負荷も大きくなります。 [この分析を通して、コンセンサスクライアントの要件の詳細](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc)がわかります。 #### プラグ・アンド・プレイ・ソリューション {#plug-and-play} @@ -126,7 +126,7 @@ Raspberry PiのようなARMアーキテクチャのシングルボードコン 数回クリックするだけで、クライアントのインストールや制御ができる便利なプロジェクトを紹介します。 -- [DappNode](https://docs.dappnode.io/user/quick-start/first-steps/) - DappNodeはベンダーから提供されるマシンに限らず、 ノードランチャーやコントロールセンターのソフトウェアは多くの機能があり、任意のハードウェアで使用可能。 +- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNodeは、ベンダーのマシンだけに付属しているわけではありません。 ノードランチャーやコントロールセンターのソフトウェアは多くの機能があり、任意のハードウェアで使用可能。 - [eth-docker](https://eth-docker.net/) - Dockerを使った自動設定は、簡単で安全なステーキングに焦点を当てており、ターミナルとDockerの基本的な知識が必要。少し上級のユーザー向け。 - [Stereum](https://stereum.net/ethereum-node-setup/) - SSH接続でリモートサーバにクライアントをインストールするためのランチャー。GUIセットアップガイド、コントロールセンター、その他多くの機能搭載。 - [NiceNode](https://www.nicenode.xyz/) - コンピュータ上でノードを実行するためのランチャー。分かりやすいユーザーエクスペリエンスが特徴。 クライアントを選択し、数回クリックするだけで開始可能。 現在、開発中。 @@ -431,7 +431,7 @@ _これはコンセンサスレイヤーのバリデータノードには適用 クライアントソフトウェアは、最新のセキュリティパッチ、機能、 [EIP](/eips/)の最新バージョンを常にインストールしておく必要があります。 特に、[ハードフォーク](/history/)が行われる前に、正しいクライアントバージョンを実行していることを確認してください。 -> 重要なネットワーク更新の前には、イーサリアム・ファウンデーション(EF)の[ブログ](https://blog.ethereum.org)で投稿されます。 [これらのお知らせを購読する](https://groups.google.com/a/ethereum.org/g/announcements)ことで、ノードの更新が必要なときにメールで通知を受け取ることができます。 +> 重要なネットワーク更新の前には、イーサリアム・ファウンデーション(EF)の[ブログ](https://blog.ethereum.org)で投稿されます。 [これらのお知らせを購読する](https://blog.ethereum.org/category/protocol#subscribe)ことで、ノードの更新が必要なときにメールで通知を受け取ることができます。 クライアントの更新は非常に簡単です。 各クライアントのドキュメントに具体的な手順が記載されていますが、一般的には、最新版をダウンロードし、新しい実行ファイルを使ってクライアントを再起動するだけです。 アップデートが適用され、クライアントは前回終了したところから再開します。 diff --git a/public/content/translations/ja/developers/docs/programming-languages/dart/index.md b/public/content/translations/ja/developers/docs/programming-languages/dart/index.md index 101d6d4aeae..45d386afa69 100644 --- a/public/content/translations/ja/developers/docs/programming-languages/dart/index.md +++ b/public/content/translations/ja/developers/docs/programming-languages/dart/index.md @@ -17,6 +17,8 @@ incomplete: true - ビデオでの学習をご希望の場合は、[初めてのブロックチェーンFlutterアプリの構築](https://www.youtube.com/watch?v=3Eeh3pJ6PeA)をご覧いただけます。このビデオは約1時間です。 - 時間がない場合は、[イーサリアムでのFlutterとDartを使用したブロックチェーンの分散型アプリの構築](https://www.youtube.com/watch?v=jaMFEOCq_1s)をご覧ください。このビデオはわずか20分です。 - [FlutterアプリケーションへのMetaMaskの統合](https://youtu.be/8qzVDje3IWk) - この短いビデオでは、FlutterアプリケーションにMetaMaskを統合する手順を段階的に説明しています。 +- [Flutter Dappシンプルウォレット](https://youtu.be/JMfIBpuAhKA)と[はじめてのFlutter DApp - Solidity、Truffle、Ganache](https://youtu.be/bHw2gQZxJ_s) - これらのビデオは、TruffleとGanacheを使ってFlutterで簡単なDappsを作成する方法を案内します。 +- [SolidityとFlutterによるモバイル・ブロックチェーン・デベロッパー・ブートキャンプ・コース](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - フルスタック・モバイル・ブロックチェーン・デベロッパー・コースのプレイリスト ## イーサリアムクライアントの操作 {#working-with-ethereum-clients} diff --git a/public/content/translations/ja/developers/docs/programming-languages/golang/index.md b/public/content/translations/ja/developers/docs/programming-languages/golang/index.md index a5d5157f745..300acc7eb96 100644 --- a/public/content/translations/ja/developers/docs/programming-languages/golang/index.md +++ b/public/content/translations/ja/developers/docs/programming-languages/golang/index.md @@ -65,6 +65,7 @@ incomplete: true - [Multi Geth](https://github.com/multi-geth/multi-geth) - _多くの種類のイーサリアムネットワークをサポート_ - [Gethライトクライアント](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _ライトイーサリアムサブプロトコルのGeth実装_ - [イーサリアムGolang SDK](https://github.com/everFinance/goether) - _Golangでのシンプルなイーサリアムウォレットの実装とユーティリティ_ +- [Covalent Golang SDK](https://github.com/covalenthq/covalent-api-sdk-go) - _Go SDKを通して200以上のブロックチェーンでブロックチェーンデータへ効率的にアクセス_ もっとリソースをお探しですか? [ethereum.org/developers](/developers/)をご確認ください。 diff --git a/public/content/translations/ja/developers/docs/programming-languages/python/index.md b/public/content/translations/ja/developers/docs/programming-languages/python/index.md index f3bbeb2d48f..09798ea4116 100644 --- a/public/content/translations/ja/developers/docs/programming-languages/python/index.md +++ b/public/content/translations/ja/developers/docs/programming-languages/python/index.md @@ -51,13 +51,10 @@ incomplete: true - [Web3.py](https://github.com/ethereum/web3.py) - _イーサリアムとやり取りするためのPythonライブラリ_ - [Vyper](https://github.com/ethereum/vyper/) - _EVMのためのPythonライクなスマートコントラクト言語_ - [Ape](https://github.com/ApeWorX/ape) - _パイソニスタ、データサイエンティスト、セキュリティプロフェッショナル向けのスマートコントラクト開発ツール_ -- [Brownie](https://github.com/eth-brownie/brownie) - _イーサリアムスマートコントラクトのデプロイ、テスト、やり取りを行うためのPythonフレームワーク_ - [py-evm](https://github.com/ethereum/py-evm) - _イーサリアム仮想マシンの実装_ - [eth-tester](https://github.com/ethereum/eth-tester) - _イーサリアムベースのアプリケーションをテストするためのツール_ - [eth-utils](https://github.com/ethereum/eth-utils/) - _イーサリアム関連のコードベースを操作するためのユーティリティ関数_ - [py-solc-x](https://pypi.org/project/py-solc-x/) - _solc SolidityコンパイラのPythonラッパー (Solidity 0.5xをサポート)_ -- [py-wasm](https://github.com/ethereum/py-wasm) - _WebAssemblyインタプリタのPython実装_ -- [pydevp2p](https://github.com/ethereum/pydevp2p) - _イーサリアムのP2Pスタックの実装_ - [pymaker](https://github.com/makerdao/pymaker) - _MakerコントラクトのためのPython API_ - [siwe](https://github.com/spruceid/siwe-py) - _Pythonのためのイーサリアムによるサインイン (siwe)_ - [イーサリアムの統合のためのWeb3 DeFi](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _ERC-20、Uniswap、その他の一般的なプロジェクトのための、すぐに統合を行えるPythonパッケージ_ @@ -66,6 +63,9 @@ incomplete: true - [Trinity](https://github.com/ethereum/trinity) - _イーサリアムPythonクライアント_ - [Mamba](https://github.com/arjunaskykok/mamba) - _Vyper言語で記述された、スマートコントラクトの記述、コンパイル、デプロイのためのフレームワーク_ +- [Brownie](https://github.com/eth-brownie/brownie) - _イーサリアムスマートコントラクトのデプロイ、テスト、やり取りを行うためのPythonフレームワーク_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _イーサリアムのP2Pスタックの実装_ +- [py-wasm](https://github.com/ethereum/py-wasm) - _WebAssemblyインタプリタのPython実装_ もっとリソースをお探しですか? [ethereum.org/developers](/developers/)をご確認ください。 @@ -82,8 +82,8 @@ incomplete: true ## Pythonコミュニティディスカッション {#python-community-contributors} - [イーサリアムPythonコミュニティのDiscord](https://discord.gg/9zk7snTfWe) Web3.pyやその他のPythonフレームワークについてのディスカッションを行う場所 -- [Vyper Discord](https://discord.gg/SdvKC79cJk) Vyperスマートコントラクトのプログラミングについてのディスカッションを行う場所 +- [Vyper Discord](https://discord.gg/SdvKC79cJk) Vyperスマートコントラクトのプログラミングのディスカッション ## その他のリスト {#other-aggregated-lists} -Vyper wikiには、[Vyperのための充実したリソースのリスト](https://github.com/ethereum/vyper/wiki/Vyper-tools-and-resources)があります。 +Vyper wikiには、 [Vyperに関する豊富なリソースがあります。](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) \ No newline at end of file diff --git a/public/content/translations/ja/developers/docs/programming-languages/rust/index.md b/public/content/translations/ja/developers/docs/programming-languages/rust/index.md index 75f945ae477..c8c22dc1184 100644 --- a/public/content/translations/ja/developers/docs/programming-languages/rust/index.md +++ b/public/content/translations/ja/developers/docs/programming-languages/rust/index.md @@ -42,7 +42,7 @@ incomplete: true - [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _イーサリアムライクのネットワークとやり取りするためのexternのコレクション_ - [Lighthouse](https://github.com/sigp/lighthouse) - _高速イーサリアムコンセンサスレイヤークライアント_ - [Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _WebAssemblyの決定論的サブセットを使用して、イーサリアムスマートコントラクト実行レイヤーを再設計する提案_ -- [oasis_std](https://docs.rs/oasis-std/0.2.7/oasis_std/) - _OASIS APIリファレンス_ +- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _OASIS APIレファレンス_ - [Solaris](https://github.com/paritytech/sol-rs) - _ネイティブParityクライアントEVMを使用したSolidityスマートコントラクトのユニットテストハーネス_ - [SputnikVM](https://github.com/rust-blockchain/evm) - _Rustのイーサリアム仮想マシンの実装_ - [Wavelet](https://wavelet.perlin.net/docs/smart-contracts) - _Rustで書かれたWaveletスマートコントラクト_ diff --git a/public/content/translations/ja/developers/docs/scaling/optimistic-rollups/index.md b/public/content/translations/ja/developers/docs/scaling/optimistic-rollups/index.md index 9a32fa829b4..05e2d89dc41 100644 --- a/public/content/translations/ja/developers/docs/scaling/optimistic-rollups/index.md +++ b/public/content/translations/ja/developers/docs/scaling/optimistic-rollups/index.md @@ -42,7 +42,7 @@ lang: ja オプティミスティック・ロールアップでは、以下の事項につきイーサリアムメインネットのプロトコルに依存します: -### データ可用性 {#data-availability} +### データの可用性 {#data-availability} すでに述べたように、オプティミスティック・ロールアップではトランザクションのデータを`calldata`としてイーサリアムに送信します。 ロールアップチェーンは送信されたトランザクションに基づき実行されるため、イーサリアムのベースレイヤーに含まれるコールデータの情報を用いて、どのユーザーでもロールアップのステートを実行し、状態遷移の正しさを検証することができます。 @@ -216,7 +216,7 @@ ii. オプティミスティック・ロールアップを使用するデベロ | ガス価格 | 〜8 | 0~0.5 | | ガス | 3 | 0~0.5 | | To | 21 | 4 | -| 値 | 9 | 約3 | +| 値 | 9 | 〜3 | | 署名 | 〜68(2+33+33) | 〜0.5 | | From | 0(署名から復元) | 4 | | **合計** | **約112バイト** | **約12バイト** | @@ -233,7 +233,7 @@ ii. オプティミスティック・ロールアップを使用するデベロ ### オプティミスティック・ロールアップの長所と短所 {#optimistic-rollups-pros-and-cons} -| 長所 | 短所 | +| メリット | デメリット | | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | セキュリティやトラストレス性を犠牲にすることなく、スケーラビリティが大幅に向上する。 | 虚偽の異議申立により、トランザクションに遅延が発生する可能性がある。 | | トランザクションデータはL1チェーン上で保存されるため、透明性、セキュリティ、検閲耐性、および分散化が向上する。 | ロールアップにおける中央集権的なオペレーター(シーケンサー)により、トランザクションの順序が影響を受ける可能性がある。 | @@ -245,7 +245,7 @@ ii. オプティミスティック・ロールアップを使用するデベロ ### オプティミスティック・ロールアップに関する説明動画 {#optimistic-video} -映像で学びたい方は、 Finematicsによるオプティミスティック・ロールアップの説明をご覧ください: +映像で学びたい場合 Finematicsによるオプティミスティック・ロールアップの説明をご覧ください: diff --git a/public/content/translations/ja/developers/docs/scaling/plasma/index.md b/public/content/translations/ja/developers/docs/scaling/plasma/index.md index 9de08249b3c..06e67ee7ad9 100644 --- a/public/content/translations/ja/developers/docs/scaling/plasma/index.md +++ b/public/content/translations/ja/developers/docs/scaling/plasma/index.md @@ -34,7 +34,7 @@ sidebarDepth: 3 プラズマチェーンでは、処理速度とコストを最適化するためにオフチェーンでの計算が必須になります。 例えば、大部分のプラズマチェーンでは、トランザクションの順位付けと実行を管理する役割を、1名の「オペレーター」に担わせています。 トランザクションを検証する役割を1つのエンティティのみに負わせることで、プラズマチェーンは処理時間をメインネットよりも短縮できるのです。 -### ステートコミットメント {#state-commitments} +### 状態コミットメント {#state-commitments} プラズマでは、トランザクションをオフチェーンで実行するものの、その決済はメインのイーサリアム実行レイヤーで行います。後者が存在しなければ、プラズマチェーンはイーサリアムによるセキュリティ保証を活用できないためです。 しかし、プラズマチェーンの状態を把握せずにオフチェーンのトランザクションをファイナライズする場合は、このセキュリティモデルが破綻し、無効なトランザクションが横行してしまうでしょう。 このため、プラズマチェーンにおけるブロック生成の責任を負うエンティティであるオペレーターは、定期的に、イーサリアムに「状態コミットメント」を書き込む必要があります。 @@ -106,7 +106,7 @@ sidebarDepth: 3 ## プラズマチェーンの長所と短所 {#pros-and-cons-of-plasma} -| 長所 | 短所 | +| メリット | デメリット | | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | | 高スループットおよびトランザクションあたりの低コスト。 | 汎用的な計算をサポートしない(スマートコントラクトを実行できない)。 述語論理により、基本的なトークンの転送、スワップ、およびその他数種類のトランザクションタイプのみに対応しています。 | | 任意のユーザー間の取引に適している(プラズマチェーン上で設定されたユーザーペア間においては、間接費用が発生しない)。 | 資金の安全性を保護するには、ネットワークを定期的に監視する(ライブネス要件)か、この役割を特定のユーザーに委任する必要がある。 | diff --git a/public/content/translations/ja/developers/docs/scaling/sidechains/index.md b/public/content/translations/ja/developers/docs/scaling/sidechains/index.md index 56197419cf5..8a2c888f018 100644 --- a/public/content/translations/ja/developers/docs/scaling/sidechains/index.md +++ b/public/content/translations/ja/developers/docs/scaling/sidechains/index.md @@ -49,7 +49,7 @@ sidebarDepth: 3 ## サイドチェーンの長所と短所 {#pros-and-cons-of-sidechains} -| 長所 | 短所 | +| メリット | デメリット | | ------------------------------------------------------------------------- | ----------------------------------------------------------------------- | | サイドチェーンの基盤技術は十分に確立されており、広範なリサーチおよび設計上の改善を経ています。 | サイドチェーンでは、スケーラビリティを実現するためのトレードオフとして、分散化およびトラストレス性がある程度犠牲になります。 | | サイドチェーンは、全般的な計算をサポートし、EVM互換性を提供します(イーサリアムネイティブのDappが実行可能)。 | サイドチェーンでは、別個のコンセンサスメカニズムが用いられるため、イーサリアムによるセキュリティ保証を活用できません。 | @@ -60,9 +60,9 @@ sidebarDepth: 3 複数のプロジェクトにおいて、Dappと統合できるサイドチェーン実装が提供されています。 -- [Polygon PoS](https://polygon.technology/solutions/polygon-pos) +- [Polygon PoS ](https://polygon.technology/solutions/polygon-pos) - [Skale](https://skale.network/) -- [Gnosis Chain(旧 xDai](https://www.gnosischain.com/) +- [Gnosis Chain(旧 xDai)](https://www.gnosischain.com/) - [Loom Network](https://loomx.io/) - [Metis Andromeda](https://www.metis.io/) @@ -70,4 +70,4 @@ sidebarDepth: 3 - [サイドチェーンを用いてイーサリアムのDappにおけるスケーラビリティを実現する](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _2018年2月8日、ジョルジオス・コンスタントプロス作成。_ -_役に立つコミュニティリソースをご存知の場合は、 ページを編集して追加してください。_ +_役に立ったコミュニティリソースがあれば、 ぜひこのページに追加してください。_ diff --git a/public/content/translations/ja/developers/docs/scaling/state-channels/index.md b/public/content/translations/ja/developers/docs/scaling/state-channels/index.md index b87b05e52cc..45c7ca6e7cc 100644 --- a/public/content/translations/ja/developers/docs/scaling/state-channels/index.md +++ b/public/content/translations/ja/developers/docs/scaling/state-channels/index.md @@ -9,7 +9,7 @@ sidebarDepth: 3 ## 前提知識 {#prerequisites} -[イーサリアムスケーリング](/developers/docs/scaling/)と[レイヤー2](/layer-2/)のページを読んで理解しておくことをお勧めします。 +[イーサリアムにおけるスケーリング](/developers/docs/scaling/)と[レイヤー2](/layer-2/) のページを読み、理解しておくことをおすすめします。 ## チャネルとは何か? {#what-are-channels} @@ -153,7 +153,7 @@ sidebarDepth: 3 ## ステートチャネルの応用例 {#applications-of-state-channels} -### 支払い {#payments} +### お支払い {#payments} ブロックチェーンにおける初期のチャネルは、メインネットにおいて高額の手数料を発生させることなく、2名のユーザーがオフチェーンで、迅速かつ安価な送金を行うことができるシンプルなプロトコルでした。 ペイメントチャネルは現在でも、イーサ(ETH)やその他のトークンの交換や預入を行う目的において有益だと言えます。 @@ -205,7 +205,7 @@ sidebarDepth: 3 一部のチャネルでは、他のユーザーの代理としてオンチェーン上の紛争イベントを監視し、必要に応じてアクション(関連当事者にアラートを発信するなど)を実行する「監視塔」のエンティティを設定しています。 ただしこのアプローチでは、ステートチャネルの利用コストが上昇する可能性があります。 -### データ入手不可能性 (Data unavailability) {#data-unavailability} +### データの可用性がない {#data-unavailability} すでに述べたように、紛争が無効であるとして異議を申し立てるためには、ステートチャネルの最終有効状態を送信する必要があります。 これも、各ユーザーがチャネルの最新状態にアクセス可能であるという想定に基づいたルールだと言えます。 @@ -258,4 +258,4 @@ OSPの側も、複数のピアが参加するチャネルを開設できるた - [ステートチャネルの基礎](https://education.district0x.io/general-topics/understanding-ethereum/basics-state-channels/) - _District0x_ - [ブロックチェーンにおけるステートチャネル:現在の状況](https://ieeexplore.ieee.org/document/9627997) -_役に立つコミュニティリソースをご存知の場合は、 このページを編集して追加してください。_ +_役に立ったコミュニティリソースがあれば、 ぜひこのページに追加してください。_ diff --git a/public/content/translations/ja/developers/docs/scaling/validium/index.md b/public/content/translations/ja/developers/docs/scaling/validium/index.md index 2082a43a18f..8df142984f1 100644 --- a/public/content/translations/ja/developers/docs/scaling/validium/index.md +++ b/public/content/translations/ja/developers/docs/scaling/validium/index.md @@ -51,7 +51,7 @@ sidebarDepth: 3 オペレーターは、複数のトランザクションをバッチ化した上で、検証のために証明サーキットに送信します。 証明サーキットは、このトランザクションバッチ(およびその他の関連データ)をインプットとして受け取り、操作が正しく実行されたことを検証する有効性証明をアウトプットとして出力します。 -### ステート・コミットメント {#state-commitments} +### 状態コミットメント {#state-commitments} バリディアムの状態は、ルートがイーサリアムのメインコントラクトに保存されたマークルツリーとしてハッシュ化されます。 マークルルート(ステートルートとも呼ぶ)は、バリディアムチェーンにおける各アカウントおよび残高の現在状態に対する暗号コミットメントの役割を担います。 @@ -71,7 +71,7 @@ sidebarDepth: 3 ゼロ知識ロールアップとは異なり、バリディアム上のブロック生成者は、トランザクションを含むバッチのトランザクションデータを公開する必要がありません(ブロックヘッダーのみ公開すればよいです)。 これによりバリディアムは、メインのイーサリアムチェーンに状態データを`calldata`として公開する「ハイブリッド型」のスケーリング・プロトコル(つまり、[レイヤー2](/layer-2/))ではなく、純粋にオフチェーンのスケーリング・プロトコルであると言えます。 -### データ可用性 {#data-availability} +### データの可用性 {#data-availability} 前述のように、バリディアムでは、オペレーターがすべてのトランザクションデータをイーサリアムメインネット外で保存するというオフチェーンのデータ可用性モデルを採用しています。 バリディアムでは、オンチェーンにおけるデータ消費量が少ないため、スケーラビリティが向上し(イーサリアムのデータ処理能力によりスループットが制限されない)、ユーザー手数料が軽減されます(`calldata`を公開する費用が抑えられる)。 @@ -133,7 +133,7 @@ Volitionsは、ゼロ知識ロールアップとバリディアムチェーン ## バリディアムの長所と短所 {#pros-and-cons-of-validium} -| 長所 | 短所 | +| メリット | デメリット | | ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | 有効性証明により、オフチェーンにおけるトランザクションの完全性が確保でき、オペレーターが無効な状態アップデートをファイナライズできなくなる。 | 有効性証明を生成するには特別なハードウェアが必要なため、分散化が低下するリスクがある。 | | ユーザーがより効率的に資金を利用できる(イーサリアムへの資金引き出しにおいて、遅延が発生しない)。 | 汎用的な計算/スマートコントラクトに対するサポートが限定的であり、開発には特殊な言語が必要である。 | @@ -153,7 +153,8 @@ Volitionsは、ゼロ知識ロールアップとバリディアムチェーン **Matter Labs zkPorter**- _zkPorterは、ゼロ知識ロールアップとシャーディングを結合したハイブリッド型のアプローチによりデータ化要請を追跡する、レイヤー2のスケーリング・プロトコルです。 任意の数のシャードをサポートしており、シャードごとに異なるデータ可用性ポリシーを定めることができます。_ -- [ドキュメント](https://docs.zksync.io/zkevm/#what-is-zkporter) +- [ブログ](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [ドキュメント](https://docs.zksync.io/zk-stack/concepts/hyperchains-hyperscaling.html#logical-state-partitions-in-zk-porters) - [ウェブサイト](https://zksync.io/) ## 参考文献 {#further-reading} diff --git a/public/content/translations/ja/developers/docs/scaling/zk-rollups/index.md b/public/content/translations/ja/developers/docs/scaling/zk-rollups/index.md index 834be6be684..c4f0f6b0bfc 100644 --- a/public/content/translations/ja/developers/docs/scaling/zk-rollups/index.md +++ b/public/content/translations/ja/developers/docs/scaling/zk-rollups/index.md @@ -8,7 +8,7 @@ lang: ja ## 前提知識 {#prerequisites} -[イーサリアムのスケーリング](/developers/docs/scaling/)と[レイヤー2](/layer-2)のページを読んで理解しておくことをお勧めします。 +[イーサリアムのスケーリング](/developers/docs/scaling/)と[レイヤー2](/layer-2) のページを読んで理解しておくことをおすすめします。 ## ゼロ知識ロールアップとは何か? {#what-are-zk-rollups} @@ -34,7 +34,7 @@ ZKロールアップは、イーサリアムとは別個に実行されるもの ZKロールアップでは、以下の事項につきメインのイーサリアムプロトコルに依存します: -### データ可用性 {#data-availability} +### データの可用性 {#data-availability} ZKロールアップでは、オフチェーンで処理されたすべてのトランザクションの状態データをイーサリアムに書き込みます。 個人または企業のユーザーは、このデータを用いてロールアップの状態を再現し、チェーン自体を検証することができます。 イーサリアムでは、ネットワークのすべての参加者に対し、このデータを`calldata`として提供します。 @@ -66,7 +66,7 @@ ZKロールアップのユーザーは、トランザクションに署名した 多くの場合、`calldata`におけるキーワードがトランザクションで呼び出されるスマートコントラクトのメソッドを決定し、当該メソッドへの入力を任意のバイト列として保持します。 ZKロールアップでは、`calldata`を用いて圧縮されたトランザクションデータをオンチェーンに書き込みます。ロールアップのオペレーターの役割は、ロールアップのコントラクトにおいて要求される関数を呼び出し、関数の引数として圧縮データを渡すことにより新規バッチを追加することだけです。 このため、ロールアップにおける手数料の大半はトランザクションデータのオンチェーンの保存において発生するため、ユーザー手数料が軽減されます。 -### ステートコミットメント {#state-commitments} +### 状態コミットメント {#state-commitments} L2のアカウントおよび残高が含まれるZKロールアップの状態は、[マークルツリー](/whitepaper/#merkle-trees)として表示されます。 マークルツリーのルート(マークルルート)の暗号ハッシュがオンチェーンのコントラクトに保存されるため、ロールアップのプロトコルによりZKロールアップの状態変化を追跡することができます。 @@ -146,7 +146,7 @@ ZKロールアップのノードは、トランザクションが一定数に達 この有効性証明が証明サーキットに合格した場合(つまり、有効性証明が有効である場合)、ロールアップを古い状態(事前のステートルートにより暗号学的にフィンガープリントされる)から新しい状態(事後のステートルートにより暗号学的にフィンガープリントされる)に移行させる、有効なトランザクションのシーケンスが存在することになります。 事前のステートルートがロールアップのコントラクトに保存されたルートと一致し、有効性証明が有効であれば、ロールアップのコントラクトは有効性証明から事後のステートルートを取り出し、ロールアップの変更後の状態を反映するようにステートツリーを更新します。 -### 参加と退出 {#entries-and-exits} +### プラズマチェーンへの参加と退出 {#entries-and-exits} ユーザーがZKロールアップに参加するには、L1チェーン上でデプロイされたロールアップのコントラクトにトークンを入金する必要があります。 ロールアップのコントラクトにトランザクションを送信できるのはオペレーターのみであるため、このトランザクションはキュー上で保留されます。 @@ -180,7 +180,7 @@ ZKロールアップにおけるトランザクション手数料は、イーサ 1. **ステートへの書き込み**: イーサリアムのステートに書き込む(つまり、イーサリアムブロックチェーンにトランザクションを送信する)場合、固定コストが発生します。 ZKロールアップでは、トランザクションをバッチ化し、固定コストを複数のユーザーに分散させることで、ユーザーあたりのコストを引き下げています。 -2. **データの公開**: ZKロールアップでは、各トランザクションの状態データを`calldata`としてイーサリアムに送信します。 現在、`calldata`のコストは [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) によって管理されています。 `calldata` の非ゼロバイトに対しては16ガス、ゼロバイトに対しては4ガスのコストが、それぞれ規定されています。 各トランザクションに対して支払われるコストは、オンチェーンで公開される`calldata`の規模に応じて決定されます。 +2. **データの公開**: ZKロールアップでは、各トランザクションの状態データを`calldata`としてイーサリアムに送信します。 現在、`calldata`の費用は[EIP-1559](https://eips.ethereum.org/EIPS/eip-1559)によって管理されています。`calldata`がゼロバイト以上であれば16ガス、ゼロバイトの場合は4ガスの費用が発生します。 各トランザクションに対して支払われるコストは、オンチェーンで公開される`calldata`の規模に応じて決定されます。 3. **L2オペレーターに対する手数料**: これは、イーサリアムにおけるマイナー手数料の場合と同様に、トランザクションの処理で発生した計算コストの代価としてロールアップのオペレーターに支払う手数料です。 @@ -196,7 +196,7 @@ ZKロールアップでは、オフチェーンでの計算を通じてイーサ ZKロールアップでは、各トランザクションを検証するためにすべての関連データを書き込む必要がないため、オプティミスティック・ロールアップよりもデータの圧縮度が高いと言えます。 ロールアップにおけるアカウントおよび残高の最新状態を再構築する上で、必要最小限のデータのみを送信すればよいのです。 -### 再帰的プルーフ {#recursive-proofs} +### 再帰的証明 {#recursive-proofs} ゼロ知識証明の優位性のひとつとして、他の種類の証明を検証するためにも使用できる点が挙げられます。 例えば、あるZK-SNARKを用いて他の複数のZK-SNARKを検証することができます。 このような「プルーフに対するプルーフ」を再帰的プルーフと呼び、ZKロールアップのスループットを劇的に向上させます。 @@ -206,7 +206,7 @@ ZKロールアップでは、各トランザクションを検証するために ### ZKロールアップの長所と短所 {#zk-rollups-pros-and-cons} -| 長所 | 短所 | +| メリット | デメリット | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | | 有効性証明により、オフチェーンのトランザクションの正しさが保証でき、オペレーターが無効な状態遷移を実行するのを防ぐことができる。 | 有効性証明を計算、検証する際にかなりのコストが発生し、ロールアップにおけるユーザー手数料がかさむ可能性がある。 | | 有効性証明がL1上で検証されれば状態更新が承認されるため、トランザクションのファイナリティをより迅速に実現できる。 | ゼロ知識は複雑な関連技術を要するため、EVM互換のZKロールアップ構築は容易ではない。 | @@ -232,22 +232,22 @@ FinematicsによるZKロールアップの説明動画をご覧ください: 現在、zkEVMの開発に取り組んでいるプロジェクトとしては、以下が挙げられます: -- **[Applied ZKP](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _Applied ZKPは、イーサリアム・ファウンデーションによる資金提供に基づき、EVM互換のZKロールアップならびにイーサリアムブロックに対する有効性証明を生成するメカニズムを開発するプロジェクトです。 +- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVMは、イーサリアム・ファウンデーションによる資金提供に基づき、EVM互換のZKロールアップならびにイーサリアムブロックに対する有効性証明を生成するメカニズムを開発するプロジェクトです。_ -- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _イーサリアムメインネット上の分散型ゼロ知識ロールアップであり、ゼロ知識証明による検証が可能なスマートコントラクトなど、イーサリアムのトランザクションを透明性が高い方法で実行するゼロ知識イーサリアム仮想マシン(zkEVM)の開発に取り組んでいます。 +- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _イーサリアムメインネット上の分散型ゼロ知識ロールアップであり、ゼロ知識証明による検証が可能なスマートコントラクトなど、イーサリアムのトランザクションを透明性が高い方法で実行するゼロ知識イーサリアム仮想マシン(zkEVM)の開発に取り組んでいます。 f_Hceg;Vqv-0-a* zRJ379TTmIV%=UK5LsLVP%h4HtMlVY~G?H4EnB!b#yrl*9y%rP>su$s>PP;!xERh6j z{_r}!gbSiTl{*rx^VDvDs~=yrvzrGq7!cPM>DwifCKgP74!IT*)ZqA7CY|cu(dYiV zQBN }Y{G#-iAmgIp1~w=ad4OkaInw+g*rJFbxTh>S1*Y0@il%>i7HG4KsW^S zi?-j^zh!l=;HfCDD<%7b8Wk?ZQm4nQpFiuzlV_ytZU&W Hay=8F3)Or#+i`9`=Z8plXTp^gUc92U4iAx6^IeiFV|QS_=;=68!mZGo zspkG7#W|H|S9ow|rkNFXH?#Z=USJXV&ChFJIdWdYVSeXt=fCOTptnSTpzb1M#=M6h zg?BL>f(5T0BZK9P8&5)g=w85CjSYkk8}5IHN{9W0pDV=6(aO`#*1+4-3GU!^Tw&;{ zCtdw|d{80qK;IzR=;B*3n7(>HbU?Se4_a$PM(Hu~99CV6<`)*$!vXgR)EM>f@$)|& z9*5`*sP}6Nj`c#+`|*1oE;BCkrsLFI`MB3kcm;*vZ)ZlKc 71oGt&9w z_O_jiD`|;2WBAM@clTa}RO6rEl{Q0; !4(M$z zh<{d#fETmhR4<`+We07%na+tXoNrz38w_l-l%N(vvqnnG2ox+4id6S}?53g}nDuDH zX8@YSqtPI%0ut@UM>^s*JyIUIfws(5daaqrIdYm&bs}!x`>r~77%58RqLlm$8PBP^ z###%smf~(@bejlqJ$p$oCUpO>%6v{YmP*H*a`O9P )5vQcC>S|`*l4Dy#M+%e1;Qn5O#>a(AYBG$X~Bl zonypdVzgGXCRVjk+%kbD>2%n{6yO#JEwtyhv&35zixv}mmDKyVnVFC}B2L`F#nI9j z0AN_M>RFK3-|{;0#|=%&jLclQSN あるいは [`withdraw`](#withdraw)メソッドにより、預金者がボールトからシェアを引き出す際に、**必ず**発行しなければなりません。 ```solidity event Withdraw( @@ -195,7 +195,7 @@ event Withdraw( address indexed receiver, address indexed owner, uint256 assets, - uint256 share + uint256 shares ) ``` @@ -204,4 +204,4 @@ event Withdraw( ## 参考文献 {#further-reading} - [EIP-4626: トークン化ボールト規格](https://eips.ethereum.org/EIPS/eip-4626) -- [ERC-4626: GitHubリポジトリ](https://github.com/Rari-Capital/solmate/blob/main/src/mixins/ERC4626.sol) +- [ERC-4626: GitHubリポジトリ](https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC4626.sol) diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-721/index.md index f6e83ac5b1f..1d75f0ec8a9 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-721/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-721/index.md @@ -56,11 +56,11 @@ ERC-721(Ethereum Request for Comments 721)は、ウィリアム・エント ### 実例: {#web3py-example} -イーサリアムネットワークにおけるERC-721トークンコントラクトを詳しく検討することで、ネットワークをシンプルにする上でこれらの規格がいかに重要であるかが理解できるでしょう。 ERC-721トークンを対象とするインターフェイスを開発するには、コントラクトのアブリケーション・バイナリ・インターフェイス(ABI)があれば十分です。 これからつまずかないように簡略化されたABIを使用した例をお見せします。 +イーサリアムネットワークにおけるERC-721トークンコントラクトを詳しく検討することで、ネットワークをシンプルにする上でこれらの規格がいかに重要であるかが理解できるでしょう。 ERC-721トークンを対象とするインターフェイスを開発するには、コントラクトのアブリケーション・バイナリ・インターフェイス(ABI)があれば十分です。 理解しやすいように、以下では簡略化したABIを用いています。 #### Web3.pyの実例: {#web3py-example} -最初に、 Pythonライブラリの[Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation)がインストールされていることを確認してください: +まず、 Pythonのライブラリから[Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation)をインストール済みであることを確認してください: ``` pip install web3 @@ -174,7 +174,7 @@ CryptoKittiesのコントラクトには、標準的なイベント以外にも 特に、`Pregnant`と `Birth`のイベントについて見てみましょう。 ```python -# 妊娠・出産イベントABIを利用して、新しいキティーの情報を得る。 +# Using the Pregnant and Birth Events ABI to get info about new Kitties. ck_extra_events_abi = [ { 'anonymous': False, diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md index 0a9bcf1217f..e5b1c0f5e2c 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-777/index.md @@ -12,7 +12,7 @@ lang: ja ERC-777は、既存の[ERC-20](/developers/docs/standards/tokens/erc-20/)規格を改善した代替性トークンの規格です。 -## 事前に必要な環境 {#prerequisites} +## 前提知識 {#prerequisites} 本ページの内容をよく理解するために、まず[ERC-20](/developers/docs/standards/tokens/erc-20/)に目を通すことをおすすめします。 diff --git a/public/content/translations/ja/developers/docs/standards/tokens/index.md b/public/content/translations/ja/developers/docs/standards/tokens/index.md index 882225b01a7..3f7ee725103 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/index.md @@ -30,7 +30,7 @@ incomplete: true _役に立ったコミュニティリソースがあれば、 ぜひこのページに追加してください。_ -## 関連トピック {#related-tutorials} +## 関連チュートリアル {#related-tutorials} - [トークンの統合作業に関するチェックリスト](/developers/tutorials/token-integration-checklist/) _– トークンのやりとりを統合する際に検討すべき事項が列挙されています。_ - [ERC20トークンを利用するスマートコントラクトを理解する](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _- イーサリアムのテストネットワーク上ではじめてスマートコントラクトをデプロイする初心者向けの入門ガイドです。_ diff --git a/public/content/translations/ja/developers/docs/storage/index.md b/public/content/translations/ja/developers/docs/storage/index.md index f13e702d8b3..97c34dc9db8 100644 --- a/public/content/translations/ja/developers/docs/storage/index.md +++ b/public/content/translations/ja/developers/docs/storage/index.md @@ -61,6 +61,7 @@ IPFSは、ファイル、ウェブサイト、アプリケーション、デー - [IPFS Scan](https://ipfs-scan.io) _(IPFSピンニングエクスプローラー)_ - [4EVERLAND](https://www.4everland.org/)_(IPFSピンニングサービス)_ - [Filebase](https://filebase.com)_(IPFSピンニングサービス)_ +- [Spheron Network](https://spheron.network/) _(IPFS/Filecoinピンニングサービス)_ SWARMは、ストレージインセンティブシステムとストレージレンタル価格オラクルを備えた分散型データストレージおよび分配テクノロジーです。 @@ -198,12 +199,18 @@ KYCなしの分散型ツール - [ドキュメント](https://docs.kaleido.io/kaleido-services/ipfs/) - [GitHub](https://github.com/kaleido-io) +**Spheron Network - _Spheronは、プラットフォーム・アズ・ア・サービス(Paas)で、アプリケーションを最高のパフォーマンスを持つ分散型インフラでリリースすることを期待するdApp向けに設計されています。 革新的な、計算環境、分散型ストレージ、CDN、ウェブホスティングを提供しています。_** + +- [spheron.network](https://spheron.network/) +- [ドキュメント](https://docs.spheron.network/) +- [GitHub](https://github.com/spheronFdn) + ## 参考文献 {#further-reading} - [分散型ストレージとは](https://coinmarketcap.com/alexandria/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ - [分散型ストレージに関する5つの一般的な通念を覆す](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ -_役に立つコミュニティリソースをご存知の場合は、 ページを編集して追加してください。_ +_役に立ったコミュニティリソースがあれば、 ぜひこのページに追加してください。_ ## 関連トピック {#related-topics} diff --git a/public/content/translations/ja/developers/docs/transactions/gas-tx.svg.xlsx b/public/content/translations/ja/developers/docs/transactions/gas-tx.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f34d5d4c4cd523d4357df952adbbb06073b8a914 GIT binary patch literal 4909 zcmaJ_2Q*x3*Vbz=j1rv~z4zWb(Md#<=-p_EQ6hQ`VU&oF1Ti{c5TXUqyF^6qgwbob z%0H6({oJg3vuD;>=Ur>weP%!Jv&(aIHPJChQE+f@P~1UT#wgbeh`hhA2zK+fb@R3` z^mVuOGUI``x>OnTXt(kKPSMU8cgcj^#2LcU4?iy8s3j8_uWMP4@cK@T&cM}8K!ps! zU(D;PJ0t}WRe5`v@HQ;qi&;*7_Ks}1vJjELd(qF@_P%SACO133Yqn-SRI`$)OXoQx zE||5^NpbLuKhlRf4WgznX4}6d?2=!$HR;B2!qiL_UDzoxY_{L`O}D4N0{WJY99Bt<3i+n;AdULz`$qFa8o8!veJXYla~0?j=ag9?k>WC-cD$M8 zI(}=w2Ojy-1=fW-fh-~6idRI DM4o>|#lWi*oo!U48781RP zKWgPLTh@%>MinLKYf^thAfG5hX=SwA8ZWLPe4LSHAZKI9cuV^^jOcvbeqPT~(!8>e z4Tj!Y&!7{Jt_~JWs^f`ycn JAJ4y2U9R_lPkS7|J zkXGYzfmSveQD4gotu+J1)-r|GRtlwf%tm^|g!9!dKP-w#VsH#-({Df8*B!kaP+W?f zq?~3Zb^n-GG0aBO;e&}4sj&)E8J5bg8|z*6L*?l)Z?*@#WuaUr>Uk;lwQL|4Ban^5 z=)#1;Xi=h-H%J*&LY&IkFNBr@4-}-JEs--;$%Y~as8|Ik&-;*)tSO8=GoQ=z$$^=@ z7YpfQoxSJQ7_(GqNS7jt^B%d=cdw31h4pF#85UA&{2=+Vntb#Mtamsg3}h-%mYk$8 zfV+N?jBCU^l8@zv$Q^_fTnWP@SX->nn !Ua zHvM#v-B8fOc6~YV-R<7Ut-uVw02PskLLJ3*i^C;%I+-~LIy}*c2AP!6KpUymbrahL zfvxf#-RbV?UEM_3aY;i8_Hje=H>10YIm~OMh&&yb436L0_l+4>L_hP z2^zq%@+cHCsoBV41G%;z`e~AG594Cf^~L#T^0m4M{Otzj<{b)~jGdxut68#;3RJaq zibD*my{yx=(e~|ev%7ss#Lkx U7itC|14>(OxAT6|jSw<_%*O $p@waI}2#H1@ X04ZSIc5!!BJ3-FLZ2glvdha{$`j0relTM)9{JAnIeCL}mA6Jz zyk{}HP1{|dLvfKJYQ^jN`*TI=FLl}m(or(2YEN+4h$Jo(K-D%?Qyz4b@U7kN;n@Jr z<{XW%wF^+b M2W^2F!EJtZ%=W+4g6Z|P4O=rlFIV_-!_bX6=(-RSD3 z$D3r-t>^eKc=f{o>DY8q3b^A^k$4Ol1vT_~czepQe;c>(0U~M&KcfIIMs36>y9w5o z#v`S?@ D)+{mkyk`h-t`N~*}#auh;0Nt^=;n_R3*}%c>1+Den7794z zKoqA|DU?YB2gdE1m}!B;sKpMt0Lj*|)6u2vl^>$5J`FRAX2z4Pm4$-RS &fE|7ge&eZX>OBb48_MW8H}mf#N1^@AzldUVFm3xKR=wJ)jJ>F;G)na;UcRE@tD zo4hSbPPK6(lsk4%-+uAdP#p=) rd#`4#FvBcuV;hZ KF|?DhFSVcJ`QVBv~VyM>P~X{v`cv*2Hj-TZ1L>f z$B6BCT8N*HXsvsToFM5Y^RTF_>K=YpIftQqNqbiu$Ms (?^U_BE2ocRYtQ^t(;UuXfvV_O;Ax2-#GE$NP zMy<*(w|N=u=8fIO4N+#ZheZ~4&ICF|+QM>*XK+WM6s+W;WJta#JR;JaM6$?+t18cg zlzv=!5NcJKc%IgvEIwc~*&=Urq5)|`pi!XuSOqkp(JifrGe}~pl6XCe>18KPxTnH* zR_;kw#{3A{yHA^P`;2$Pm)bRK7F`9ktkxL0i#{yL41C#abY21az4TP*+&$uNr-@mF z=rfz`ECiVXWO#h??@cF<(4e3KyTTZKifr11x#ChH`|RK!38+l4!neUt>T1k)TAbUY z=Nv8sliYvXK4Y4&Q408Jw=rg>lu`G@r%hX1oKI*%H&Bq~r$xA_H0(fSsQKZWJOs~s z$=e&$qIFAhfnALLpt9=qlqu%#m(_lFM4;J9M>3*CbSkR2orM||DKYx7-6_yY8Z+KG zief<*Fc`>&DI-`6%kH$51$n4jCokb4+__OI!}Q1*wTscV0-(nDC93Z0N61;V8mdVX zP^02E2+5083-0%}Uu1L{UVmx~bg`bc^Q|2{IuR`n9`zz0u?@z4GURaa=x|Q|KRBy# zk9p?r_Amb?z@Wc7IIA3wrSPfwU|)Gg82@?jtdu$ymZxTgE$e@inSXjXt00bx{nQZH zQG)gGuLA5(FK0RUvD!Gbw^-ee^>U_x{#ASY>F_Mq_#M&-Yy$p;$p7i!>{2?WB&ViC z`U{!=Cn$d&Jv&Q}x7MlMz$WLPVE#8b|2%wltQ?QqQ=6qYIs6~P_fJ1(>+ScvP-E%W a?}(m`Bp8&C==hCf*iSaL0^|Y5PyYv{YrvrZ literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/developers/docs/standards/index.md b/public/content/translations/ja/developers/docs/standards/index.md index 5099a1727fe..bee59407ddb 100644 --- a/public/content/translations/ja/developers/docs/standards/index.md +++ b/public/content/translations/ja/developers/docs/standards/index.md @@ -18,7 +18,7 @@ incomplete: true - [イーサリアムにおけるガバナンス入門](/governance/) - [イーサリアムにおけるガバナンスの概説](https://web.archive.org/web/20201107234050/https://blog.bmannconsulting.com/ethereum-governance/) _2019年3月31日、ボリス・マン作成。_ - [イーサリアムにおけるプロトコル開発のガバナンスならびにネットワークアップグレードの調整](https://hudsonjameson.com/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) _2020年3月23日、ハドソン・ジェイムソン作成。_ -- [イーサリアム・コアデベロッパー・ミーティングの全プレイリスト](https://www.youtube.com/playlist?list=PLaM7G4Llrb7zfMXCZVEXEABT8OSnd4-7w) _(YouTubeのプレイリスト)_ +- [イーサリアムコア開発ミーティングのすべてのプレイリスト](https://www.youtube.com/@EthereumProtocol) _(YouTubeプレイリスト)_ ## 標準規格の種類 {#types-of-standards} @@ -39,7 +39,7 @@ EIPは、以下の3種類に分類されます: ### トークン規格 {#token-standards} -- [ERC-20](/developers/docs/standards/tokens/erc-20/) - 投票トークン、ステーキングトークン、通貨トークンなど、代替性トークン (FT) のための標準インタフェースです。 +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - 投票用やステーキング用のトークンあるいは仮想通貨など、代替性を持つ(相互に代替可能な)トークンを対象とする標準的なインターフェイスです。 - [ERC-1363](https://eips.ethereum.org/EIPS/eip-1363) - transferまたはtransferFromを受信した後の受信者側におけるコードの実行や、承認後におけるspenderコードをサポートする、ERC-20トークンのトークンインターフェイスを定義します。 - [ERC-721](/developers/docs/standards/tokens/erc-721/) - アートや楽曲に対する所有証明など、非代替性トークン (NFT) を対象とする標準的なインタフェースです。 - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309) - ひとつのNFTあるいは連続するトークン識別子を用いた複数のNFTを作成/転送する際に発行される標準イベント。 @@ -53,6 +53,6 @@ EIPは、以下の3種類に分類されます: ## 参考文献 {#further-reading} -- [イーサリアム改善提案 (EIP)](/eips/) +- [イーサリアム改善提案(EIP)](/eips/) -_役に立つコミュニティリソースをご存知の場合は、 ページを編集して追加してください。_ +_役に立ったコミュニティリソースがあれば、 ぜひこのページに追加してください。_ diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-1155/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-1155/index.md index 424aec64f44..a5dae0dbcc1 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-1155/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-1155/index.md @@ -143,4 +143,4 @@ _注記_:フックを含むすべてのバッチ関数は、バッチ処理で - [ERC-1155:マルチトークン規格](https://eips.ethereum.org/EIPS/eip-1155) - [ERC-1155:Openzeppelinのドキュメンテーション](https://docs.openzeppelin.com/contracts/3.x/erc1155) - [ERC-1155:Githubリポジトリ](https://github.com/enjin/erc-1155) -- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) +- [AlchemyのNFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-20/index.md index 2832484f7e3..25239af1d6d 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-20/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-20/index.md @@ -12,13 +12,12 @@ lang: ja - オンラインプラットフォームにおける評価ポイント。 - ゲーム内のキャラクターにおけるスキル。 -- 宝くじの券。 - 企業の株式などの金融資産。 - 米ドルをはじめとする法定通貨。 - 金(ゴールド)1オンス。 - 等々。 -イーサリアムにおいてこれほどの威力を持つ機能に対しては、必然的に堅牢な規格が必要です。 これこそ、ERC-20規格が果たすべき役割なのです! この規格を用いることで、イーサリアム外の製品やサービスと相互運用できるトークンアプリを構築することが可能になります。 +イーサリアムにおいてこれほどの威力を持つ機能に対しては、必然的に堅牢な規格が必要です。 これこそ、ERC-20規格が果たすべき役割なのです! この規格を用いることで、イーサリアム外の製品やサービスと相互運用できるトークンアプリを構築することが可能になります。 ERC-20規格は、[Ether](/glossary/#ether)へ追加機能を提供するのにも使われています。 **ERC-20とは何か?** @@ -89,7 +88,7 @@ weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped ethe acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2 -# これはERC-20トークンのコントラクトのアプリケーション・バイナリ・インターフェース(ABI)を簡略化したものです。 +# This is a simplified Contract Application Binary Interface (ABI) of an ERC-20 Token Contract. # It will expose only the methods: balanceOf(address), decimals(), symbol() and totalSupply() simplified_abi = [ { diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md index e0c02c3dc55..b4167e42d27 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md @@ -72,7 +72,7 @@ function previewDeposit(uint256 assets) public view returns (uint256) この関数は、入金が現在のブロックに対してどのような影響をもたらすかをシミュレーションします。 -#### 入金 {#deposit} +#### deposit {#deposit} ```solidity function deposit(uint256 assets, address receiver) public returns (uint256 shares) @@ -86,7 +86,7 @@ function deposit(uint256 assets, address receiver) public returns (uint256 share function maxMint(address receiver) public view returns (uint256) ``` -この関数は、`receiverによる1回の`の呼び出しにより、ミント可能なシェア数の上限を返します。 +この関数は、`receiverによる1回のmint`の呼び出しにより、ミント可能なシェア数の上限を返します。 #### previewMint {#previewmint} @@ -96,7 +96,7 @@ function previewMint(uint256 shares) public view returns (uint256) この関数は、現在のブロックにおける当該ミントの影響をシミュレーションします。 -#### mint(ミント) {#mint} +#### mint {#mint} ```solidity function mint(uint256 shares, address receiver) public returns (uint256 assets) @@ -120,7 +120,7 @@ function previewWithdraw(uint256 assets) public view returns (uint256) この関数は、当該引き出しが現在のブロックに与える影響をシミュレーションします。 -#### 引き出し {#withdraw} +#### withdraw {#withdraw} ```solidity function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares) @@ -187,7 +187,7 @@ event Deposit( #### 出金イベント -`redeem` あるいは [`withdraw`](#withdraw)メソッドにより、預金者がボールトからシェアを引き出す際に、**必ず**発行しなければなりません。 +`redeem` HeM;wgep@M)lHL4oxSMdGQ1PcJt59!I>B zSnJueA816;)x^eejjGfYMnyrP#6Ur={|j||B VlIQ-{H$9sXW;^)3rMEjNuoNqckA2^V$HdCRF z9@a~v;Om)ivsSP@XhV5e#m+0%mFA`(Tl0~`Dl|wb;3}pU$3Az|-L~j7hd9O$A(& z RnwR(aNUgd6Wy6~1E9!@NpI^fw%4nJm` zCs3$Cd>)*uVuRh*I?Mrihe4xNAsM=PU5_=CzuhW|C|6Nneehvfg&oMDWc!v&Ol@_! zEbA891nDCWFOl#%^+!^*y}IT(G;h|K7IDmya3(;^BC2{aZ)mt5H(CTpA95 c7`p{Z$`BsELDx!{Hg`E|8Q`kF_+p^F90Q%tK;hzfiLd=V)ne7k3G; zB-l~{9U(ccH&f@-mOlUNH#9Zw+$&O02XCU(o3Xq22{n)_IEEbw^ZXy7zWEDk8&6B0 zOO$#4zTv-wJ9E&?t%dIf_BL>x&}iDx =uy6X6yZp28*;GWsC2L&Y?q&F!yBO5u`$`n+2k z{^ofV#E+l0nrPgSmY5Z|@%?ip!6E|;Dp7#jum0#xf6Up?N34kW6&Z+QaNf6>|<&QXHvLg z=Trw%o%)U4BNm-gq#dZVI;~u_ihiAu LdF7(* zM{xrt6(J8Xq@YoAiLv5r$wNJO-etngSos0tEBCAOa hfZj%gv zvygN2`G)4v2KG9=ikC+8CPr)3Yl7uFxy|3uL>$i>Z~D6iXlC0n*;=422u2DDeoW{o zYNEs>3X2u8cXqHa1^~zxExYH1PY=8 (cC4rpv z5z)zQc#Onsg5(sw@@XgJOH!@+TE0&e;_1m;RT8c52`0}aH;=z=YL|VMEyPeKC1w}a z6%z)G$%XPjD**t$4EDIlFaZ1PGH5pyI;@x+5wxrLCWYwTT!Yy;u~g%PJ|P{SnWE+e z!? ddFpw;0IHx+Ic0v+2`}>V>7sJ1d@90PaGCVzfg~h! zhSsUJcFe>q@O_& ? z9~PeKj7a itC=Okw8ZU?5HWn!mLZD6qOWVe_AEgPGW96;+Wfyz5o}>~ ze-PZx@6SMRrlU|e-z-4fCV(sK;F2o_ITq8g1{VX*WJNWb!zV2h4f)OrVq`U$=Yn7_ z#u0XuY|d3<{gWp(^Qm7udT7=tUMLacE{5f17J|vTzK@EA^r#0KW)rFZz}ftsc=3@# z?|hO6coU`|GIqnj&1F+0wgFKn6T`$SbrzJR9D<0qGG8V$eMT*=LSy16%ORB7QU`ew zU;0;t!Panw1H)d|{q?i-`mAo+yGzfeANGVF1U!fMEAqYNZqKb<7>4 F$&rl1T z!3Q|wOy$j}h^Q<~$BFXHTFZUzl4~BvA4~Rx!Cxf&{3M>=+o!64%1AmH9Wvcpf5i2S zot`D9D|TOA{Jw1)&p=dV%foKE!gWMr?QvQn%H$(cNzNjdR7U^&9u#=0PH3`R!pDdh zLX-t*Yxx_)+wZ(`D$`aoMQQl 1kA;gbNJPv)gb5> z!x1s$$2@t(JmH`FflnMb$Ayk}mA-j08O-I}HC1)kDGyP(x5Cs(;_S!D6J^V`O`Tq4 zeT=bgXksz0^oGYnmZ8Cwj{)H)`%KMw2M5@ve-!CdLWmx)8zAF+PbPm-VrFj8WgK(r zjqwK-4;_6(o*4VgN$hX|Yr(SD-JuMq+6QhAd&DrEmUVT|vz%A-Lr`IXAyB>td(4Lw zPxaH=M^iJa+Go@RUzlg0pd036D-F)1Tn&&Wxo8Nq1l>IXy7lUrzc}}*!{fD?#nK-X zo28SdqFCSj?Cg`g_(hurlicb-WM?E>Rj{|x90c94$u>0xd(li7qpi-9@)OoeGU&Kx zvkfCFE-vPu$Ut<}d91)-=bybBs)_8~fC!yINu}vfYbDMowQq(g$nQAa$8SKZIaQmN zLX(Y22};>6*`=o$V41NCw;8HTq1jMR5muKMP>f=C{V@aW#-?d R9E&Mq>v zF$$eJ`jr9Im44i>6A4Ki?GiacQFu3qH1CGCB@O$wGVz>6M~tIC&q9k*`D~QlsN0&t zEUK`)!e@Gq1GP-s^u{+xC}dD7`*FS@txCEhy}JtTRtV>UzL;Rbpq#D)=Dxy9Nk*pS zo0OXa&;5csskq}ciXa;eEVq-AV&9K_G`>w`rWJ7pZ~wmI+4FU;o}SK2^S#d@xBoeP zbZ&CFY`*Z5fY@Ub)7v0HBEhpxK%!O5L}XrD=}M&K`Y E z )>;Ad2RJHhNe&7Ao$Bp7}`mzDdNTanNIVg XH-kqY?QBLPB2WW@O^Nlt)G{nMJq$s3S&fMOZyDPzQ{g{9?3f^ecWL`PF z8g>{*!VA&ne-Cb!;= q`1Z-60W hGg?ldwT-}(tmM#gwJ%O}kLUf!7a{wMX8@%Od%OSuhK1pM zhu3Yp#sEs78H``llQvP{buu`+*Ef% !yW>qi{ss`xZ&@FHT%R0@x8R z$(wLDm!`%kJANeXE&SLvk(N91w}9b~O6#$b<;m{kD$h!gO}Ccn$wKxb4GX_kxzmDg zpJg7|c~wp;=L8DKC}Q@QZch{E trhHhxeq5MoUcw{;S!K&t3e_$ z_Bz`csEahkp1BZIR3-FDkx+svLR?o8zcG}DEA4gmGf3h`uOxnAh(6${^92d3IXzTg zPW*V`^Sp6{^$abz?p{8|`hn^wG38Jwn|aZLbmhG)?hCX_)+FwNEw_<*R`j#hp`wwZ zT)lp{E|D*1%zxUyyo}J*{HKHK!t+u|U)dw%Bd_V|-#1>DQJ1>($}ExW{x_BSyNB!Q z;ga)L){CqtNDu!izJB*|eg3{w8dpYv#0%-=S|0tY?)cr|^*Q68kWyp)>k$9DgX_KN zavZs`Fx+3r{Qq$B`_}6v^|E V1iFD4UjBF|{E1Qf%X2?8Q$%Q1E z_}}UK`%{nax7Xd{^Z0xok9)s9_j %scX(# z&K3UJy1A}bQ4&*IvYU(SCZfw+6c!ikEl_(JAroR2f4_To9Yl}laDCQc&$q8*r_z*l zai6Aa(cx;UlXub=Be=^5ekyl?<6|n6`WnQ%pTvbwA0fNEQ+2(=@pAyef=WDF#g5W7 zJ0Uitt?0>_mrjWhgRQ(N@k`FVHl9eU0o4`vW)*Qs1!h6InJo(G^J9Buc!jTpnm@hb zE!+Xq=08c)V1GSxTTfS<+sTC*iCmR=Y$CfYjpkZq^134Ae h3F}J8HRnB-U=ow^)`xSv!FNzN{9F))%?cXP#Dj7 X!F(G zm}d$b16z*6t$2p|#3b%<&kd#V@$gvA;9;Nt3w3fV>R@k(n~&&4+%<7nohm|%ns9^; z8hdNs$jkO#{xk9OZj>B(b(-92CC(L{o0~?7 ^ZLAPoEYAB zu;NecH!I_jUo#isuMx26#=BE1C@P1_@X%0gXs5M{3{%neUr{RMaAcA2b{a3{Q60$8 z_H0OTK@ferIQ(U LC=MQ;R z7vg#@ &4MYGN?th0$kNpMIP1MK9)*Iqr?Cb69;pl^_u;^iR zSf?0$&rVATiJ4$Q8QD2_aYDF!I7i;=H$+*FWu8i4h=`Qq *46m+XJsVC(D02p_!V8@7++oT5i5*e9Kt6ZX~ B}S)2#%LYAROw%smDqA60c=zhcqit2z03DsTQ{7tLCHa ze =pe` (Ro?MBn{;uHv8ufv&^F1RD3mR0;y*d84YgQ`-D0TLUb&|k|5H@LBV94-hy1!8 z2mb2jtj8P|^+CiT!BR`dREuEKwVG@bPIHrux(&(douZC602$}QR^}l0VEuwyJP 6P}w+gB64kBpAScwMLM}9GHR;9(bIZm@Tqn8}JppLRlo0XAM zc~Qk5Lc;3Y(P$4>UxIk=@2e1Kf=16!+0V?JnaeDPDZ4Fz^`-JnR9LW(P830O)0$v0 zpRzTLk_Yf*2K!zd645d)BqA <%PNnX?tvBxmjT{G?l&^H>!l7hT3kIy1K1E4~f_j7{87c81q zW&Kh$%*-5j_mgEl2QrcyhdtE=i*}k;3U{*8i2H;2JL`su?BomVY*kADEGE~82^VWz zzgicO#Nip!rrjz3d38cLsHg-!O*zX#>iIsmYK)zx#}5M&tFw*J9Fu+2I61HiEz7;e zvfCZ>nw4^!sQ-oJ$I_u3jBpknlPhx><_aZJV~3PcGt9Y?gFn2I?m$&mzax6i_Q7?r zgEE+^KHuB0;>;P$EfxXS+UcRW?+r_7lf46HH<&WDXh>J0igL?68Bps}vJnHiA=e9l zx?f4Q)*l?T3tc;$yGX}etRXW^VeH|yC6myCDOZ8 #mDbq=4NZFTqsDl9EXRp!7iIC`AgejQpZ(_Q{e?RN(R;z^&>&5*$09vNjmu-j zfxRr8XL`Jm@y+rn6T$Yf>)YlI&BA+?U#`xgYQ7QU8VynyZYzKtG*wi88#a``8qLQy zzzuS|xv c?e#)nV$bcFMa_e~*as#o(R_rA8f_ez_ZL6D!P?XA9xxqeg9 zVIiS41&?w^?SzYq5;-@ZI|M|u1HEF1Eno2L7N#`sR`)s84e#C`^ny6sK{H@L%ejxt zd}pESU7#@AkuQ3E7R5n+!wqjT21Q W@g^(yx4<+n{kp zGhEhb5(fEbTK2rPE?&)QDI~(Tu7l9*U2K4sd4k9lDg6a-O|1geTjcWYC6q*-H~Et; zO{6oEZ=~G@>q}+bsz=MZ-xk0{AZ1;7@C(=)LTk(&rf5;J@4$)_`6{>Zja0;pht42^ zRi~mfNHG1SsPC7fV#U2}DZ}(&a#~e62$*W5^x5mB12VmrpgL**vtEdt3dhRxsKULn z(DbII(1xblNERCmf0NUk$!tiW<2+Pb_`9^Vuz_xnk%B rLw+{XQtwE<7oj-98c>+#}->th!;b WBx@D86+HQw QN|^iX)={>fem)P8kd6;< 2r`U|QqV{>r+udAQ+ zR}OyddmI7yUnY(>eidBZ1uI)FVbc*eJynxpq!*uKAmA`tOiVrYMxvUJ+hFGVey+@- z0<{K{b^KBH&!Z71 t6sl817}*TA &~{IHaj8*g;Bw{~iy_zn)?$*p zUkA9&%yY=EC}rU2#Wd)wcJ-zZ@6HA9Jdg-H0vsSy5z(b)?Pw~3N_PJ6jgmhO*=o{e z{e0nl)P5qZC=?`K@7bYrfpnK;Ok7dxJ3(e8=XI6h?!E-ho1p}_s!e0*Fy6r8(Fpk4 z{Q8G?o+3*pG$|LM@43uHuYCktO}r^yH|}db;3q9 jf7-j{b%|}Ft_8!m#$9vE Kkf zSc;P8GmDOBsT6;F!CAI!>-x%ZrtAzxg^oA?Wnw&O91?Y&D-IO(LJcSze#R_C$L7v@ zQ=*BVOgHiJ;90ASPg(k(-IP#Olu_v!T=6>!rv6z2)!Uw2wU*kYQC@ibXl(u{bL>pf zd;SS_>wUYs7p^qxR*rwAlLtR2_v)85VHjZ>;=OAez7_3$xWl$8mS#(9O}6cZ&T0%R z2LudJhDa)GRNNK=F9XB6lme EGk%=4B$lOduUp9x)jCbh0#e3NUjcR!DHfhKJ_I^aKY=2`-ZS z8QnL@GfN1+t1)8IXa07yl_ 9$5GQdb|^P ze_Dd#SmN*YFJj+N|91zcg&j_*o|qr@m8W#;p9fD1A)M|zF 注: イーサリアムは - 注: イーサリアムは [ハッシュ関数](https://wikipedia.org/wiki/Hash_function)を定期的に使用して、固定サイズの値(ハッシュ)を生成します。 イーサリアムではハッシュ値が重要な役割を果たしますが、今のところは固有のIDと考えておくとよいでしょう。 +[ハッシュ関数](https://wikipedia.org/wiki/Hash_function)を定期的に使用して、固定サイズの値(ハッシュ)を生成します。 イーサリアムではハッシュ値が重要な役割を果たしますが、今のところは固有のIDと考えておくとよいでしょう。 ![ブロックチェーンと各ブロック内のデータを表す図](./blockchain-diagram.png) @@ -284,9 +284,9 @@ Out[13]: 1000003000000000000000000 2つ目のアカウントの残高は、 1,000,000 ETHから1,000,003 ETHに増えているので、正しいようです。 1つ目のアカウントはどうなったのでしょうか? 3 ETHより少し多い金額が失われたようです。 残念ながら、人生にはタダというものはなく、イーサリアムのパブリックネットワークを利用するには、そのサポート役であるピアに対価を支払う必要があります。 トランザクションを送信したアカウントから、少額のトランザクションフィーが差し引かれました。このフィーは、消費されたガスの量(ETH送金では21000単位のガス)にベースフィーを掛けたものです。ベースフィーは、ネットワークのアクティビティに加えて、ブロック内にトランザクションを含めるバリデータに送信されるチップによって異なります。 -[ガスの詳細](/developers/docs/gas/#post-london) +[ガスの詳細](/developers/docs/gas/#post-london)注: パブリックネットワークにおいてトランザクションフィーは、ネットワークの需要やどれだけ迅速にトランザクションを処理する必要があるのかによって変動します。 フィー(手数料)の計算方法の内訳に興味がある場合は、 - ## ちょっと一息 {#and-breathe} diff --git a/public/content/translations/ja/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/ja/developers/tutorials/all-you-can-cache/index.md new file mode 100644 index 00000000000..c02c1e1e0a1 --- /dev/null +++ b/public/content/translations/ja/developers/tutorials/all-you-can-cache/index.md @@ -0,0 +1,960 @@ +--- +title: "キャッシュでできること" +description: ロールアップのトランザクションをより安くするキャッシュコントラクトの作成と使い方を学びます。 +author: Ori Pomerantz +tags: + - "レイヤー2" + - "キャッシュ" + - "ストレージ" +skill: 中級 +published: 2022-09-15 +lang: ja +--- + +ロールアップを使うと、トランザクションのバイトあたりのコストは、ストレージスロットのコストよりもはるかに高くなってしまいます。 そのため、オンチェーンに可能な限り多くの情報をキャッシュするほうが合理的です。 + +この記事では、複数回使用される可能性のあるパラメータの値をキャッシュして、(初回以降では) はるかに少ないバイト数で使えるようにするキャッシュコントラクトの作成および使用方法を学びます。 また、このキャッシュコントラクトを使用するチェーン上のコードを書く方法についても説明します。 + +記事を読まずにソースコードだけを確認したいならば、[こちら](https://github.com/qbzzt/20220915-all-you-can-cache)にあります。 開発スタックは、[Foundry](https://book.getfoundry.sh/getting-started/installation)を使っています。 + +## 設計の概要 {#overall-design} + +わかりやすくするために、すべてのトランザクションのパラメータは、`uint256`(32バイト長)であることとします。 トランザクションを受け取ると、次のように各パラメータをパースします。 + +1. 先頭のバイトが`0xFF`の場合、次の32バイトをパラメータの値として取得し、キャッシュに書き込む + +2. 先頭のバイトが`0xFE`の場合、次の32バイトをパラメータの値として取得するが、それをキャッシュに_書き込まない_。 + +3. その他の値の場合、上位4ビットを追加のバイト数として、下位4ビットをキャッシュキーの最上位ビットとして取得する。 以下に、いくつかの例を示します。 + + | calldataのバイト | キャッシュキー | + |:--------------- | --------:| + | 0x0F | 0x0F | + | 0x10,0x10 | 0x10 | + | 0x12,0xAC | 0x02AC | + | 0x2D,0xEA, 0xD6 | 0x0DEAD6 | + +## キャッシュ操作 {#cache-manipulation} + +[`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol)にキャッシュが実装されています。 一行ずつ見ていきましょう。 + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + + +contract Cache { + + bytes1 public constant INTO_CACHE = 0xFF; + bytes1 public constant DONT_CACHE = 0xFE; +``` + +上記の定数は、すべての情報を提供し、それをキャッシュに書き込むかどうかを判断するのに使います。 キャッシュに書き込むには、2回の[`SSTORE`](https://www.evm.codes/#55)操作が必要になり、未使用のストレージスロットに対し、それぞれ22100ガスのコストが発生するので選択できるようにしています。 + +```solidity + + mapping(uint => uint) public val2key; +``` + +値とそのキーの間で[マッピング](https://www.geeksforgeeks.org/solidity-mappings/)をしています。 この情報は、トランザクションを送信する前に、値をエンコードするのに必要になります。 + +```solidity + // Location n has the value for key n+1, because we need to preserve + // zero as "not in the cache". + uint[] public key2val; +``` + +キーから値へのマッピングに配列が使えます。なぜなら、キーを割り当て、それを簡単に順次実行するためです。 + +```solidity + function cacheRead(uint _key) public view returns (uint) { + require(_key <= key2val.length, "Reading uninitialize cache entry"); + return key2val[_key-1]; + } // cacheRead +``` + +キャッシュから値を読み込みます。 + +```solidity + // Write a value to the cache if it's not there already + // Only public to enable the test to work + function cacheWrite(uint _value) public returns (uint) { + // If the value is already in the cache, return the current key + if (val2key[_value] != 0) { + return val2key[_value]; + } +``` + +同じ値をキャッシュに複数回入れるのは、無駄です。 値がすでに存在するならば、既存のキーを返します。 + +```solidity + // Since 0xFE is a special case, the largest key the cache can + // hold is 0x0D followed by 15 0xFF's. If the cache length is already that + // large, fail. + // 1 2 3 4 5 6 7 8 9 A B C D E F + require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, + "cache overflow"); +``` + +これほどまでの大きなキャッシュを取得することは考えられません (約1.8\*1037のエントリーを保存するには約 1027TBが必要になります) 。 私はというと、[「常に640kBあれば十分だ」](https://quoteinvestigator.com/2011/09/08/640k-enough/)ということを覚えているくらいの年齢です。 このテストは安くできます。 + +```solidity + // Write the value using the next key + val2key[_value] = key2val.length+1; +``` + +(値からキーへ) 逆引できる検索を加えています。 + +```solidity + key2val.push(_value); +``` + +前方検索 (キーから値へ) を追加します。 連続して値を指定するため、最後の配列にある値の後に追加するだけです。 + +```solidity + return key2val.length; + } // cacheWrite +``` + +新しい値が格納されるセルである`key2val`の新しい長さを返します。 + +```solidity + function _calldataVal(uint startByte, uint length) + private pure returns (uint) +``` + +この関数は、任意の長さcalldata (ワードサイズは最大32バイト) から値を読み取ります。 + +```solidity + { + uint _retVal; + + require(length < 0x21, + "_calldataVal length limit is 32 bytes"); + require(length + startByte <= msg.data.length, + "_calldataVal trying to read beyond calldatasize"); +``` + +この関数は内部関数です。そのため、コードの残りの部分が正しく記述されていれば、これらのテストは必要ありません。 しかし、そんなにコストは掛からないため、テストをしてもよいかもしれません。 + +```solidity + assembly { + _retVal := calldataload(startByte) + } +``` + +これは、[Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html)のコードです。 calldataから32バイトの値を読み取ります。 `startByte+32`より前にcalldataが停止した場合でも、EVM内で初期化されていない領域はゼロと見なされるため、機能します。 + +```solidity + _retVal = _retVal >> (256-length*8); +``` + +私たちは、必ずしも32バイトの値が欲しいわけではありません。 これで、余分なバイトを削除できます。 + +```solidity + return _retVal; + } // _calldataVal + + + // Read a single parameter from the calldata, starting at _fromByte + function _readParam(uint _fromByte) internal + returns (uint _nextByte, uint _parameterValue) + { +``` + +calldataからパラメータを1つ読み取ります。 パラメータの長さは、1バイトから33バイトまでの範囲です。そのため、読み取った値だけでなく、次のバイトの位置も返す必要があることに注意してください。 + +```solidity + // The first byte tells us how to interpret the rest + uint8 _firstByte; + + _firstByte = uint8(_calldataVal(_fromByte, 1)); +``` + +Solidityでは、バグを減らすために潜在的に危険な[暗黙の型変換](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions)を禁止しています。 例えば、256ビットから8ビットへのダウングレードを明示的に行う必要があります。 + +```solidity + + // Read the value, but do not write it to the cache + if (_firstByte == uint8(DONT_CACHE)) + return(_fromByte+33, _calldataVal(_fromByte+1, 32)); + + // Read the value, and write it to the cache + if (_firstByte == uint8(INTO_CACHE)) { + uint _param = _calldataVal(_fromByte+1, 32); + cacheWrite(_param); + return(_fromByte+33, _param); + } + + // If we got here it means that we need to read from the cache + + // Number of extra bytes to read + uint8 _extraBytes = _firstByte / 16; +``` + +下位にある[ニブル](https://en.wikipedia.org/wiki/Nibble)を取得し、他のバイトと組み合わせてキャッシュから値を読み取ります。 + +```solidity + uint _key = (uint256(_firstByte & 0x0F) << (8*_extraBytes)) + + _calldataVal(_fromByte+1, _extraBytes); + + return (_fromByte+_extraBytes+1, cacheRead(_key)); + + } // _readParam + + + // Read n parameters (functions know how many parameters they expect) + function _readParams(uint _paramNum) internal returns (uint[] memory) { +``` + +パラメータの数は、calldata自体から取得できますが、私たちが呼び出す関数は、予期しているパラメータの数を知っています。 これは、関数を使って簡単に取得できます。 + +```solidity + // The parameters we read + uint[] memory params = new uint[](_paramNum); + + // Parameters start at byte 4, before that it's the function signature + uint _atByte = 4; + + for(uint i=0; i<_paramNum; i++) { + (_atByte, params[i]) = _readParam(_atByte); + } +``` + +必要な数のパラメータを読み込みます。 calldataの読み込みが終わると、`_readParams`は、呼び出しを戻します。 + +```solidity + + return(params); + } // readParams + + // For testing _readParams, test reading four parameters + function fourParam() public + returns (uint256,uint256,uint256,uint256) + { + uint[] memory params; + params = _readParams(4); + return (params[0], params[1], params[2], params[3]); + } // fourParam +``` + +Foundryの素晴らしい機能の一つは、Solidityでテストを作成できることです([後述するキャッシュのテストを参照](#testing-the-cache))。 そのため、単体テストが簡単に作成できます。 これは、4つのパラメータを読み取り、それらが正しいことをテストで検証できるように返す関数です。 + +```solidity + // Get a value, return bytes that will encode it (using the cache if possible) + function encodeVal(uint _val) public view returns(bytes memory) { +``` + +`encodeVal`は、オフチェーンコードがキャッシュを使用するcalldataを作るのを支援する関数です。 単一の値を受け取り、その値をエンコードしたバイト値で返します。 この関数は、`view`なのでトランザクションは必要なく、外部からの呼び出しにガス代はかかりません。 + +```solidity + uint _key = val2key[_val]; + + // The value isn't in the cache yet, add it + if (_key == 0) + return bytes.concat(INTO_CACHE, bytes32(_val)); +``` + +[EVM](/developers/docs/evm/)では、初期化されていないすべてのストレージはゼロであるとみなされます。 そのため、存在しない値のキーを検索すると、ゼロを受け取ります。 このケースにおいて、それをエンコードするバイトは `INTO_CACHE`であり、その後に実際の値が続きます (つまり次回は、キャッシュが使われます) 。 + +```solidity + // If the key is <0x10, return it as a single byte + if (_key < 0x10) + return bytes.concat(bytes1(uint8(_key))); +``` + +単一のバイトが一番簡単です。 [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat)のみを使って、`bytes注: パブリックネットワークにおいてトランザクションフィーは、ネットワークの需要やどれだけ迅速にトランザクションを処理する必要があるのかによって変動します。 フィー(手数料)の計算方法の内訳に興味がある場合は、[ブロックに含まれるトランザクションの仕組み](https://medium.com/ethereum-grid/ethereum-101-how-are-transactions-included-in-a-block-9ae5f491853f)に関する以前の投稿をご覧ください。 +[ブロックに含まれるトランザクションの仕組み](https://medium.com/ethereum-grid/ethereum-101-how-are-transactions-included-in-a-block-9ae5f491853f)に関する以前の投稿をご覧ください。`型を任意の長さのバイト配列に変換します。 名前はよそにして、引数を1つだけ指定したときに、正常に動作します。 + +```solidity + // Two byte value, encoded as 0x1vvv + if (_key < 0x1000) + return bytes.concat(bytes2(uint16(_key) | 0x1000)); +``` + +163以下のキーを持っている場合は、それを2バイトで表現できます。 まず、256ビットの値である`_key`を16ビットの値に変換し、論理和を使用して余分なバイト数を先頭のバイトに加えます。 そして、この値を`bytes`に変換可能な`bytes2`値に入れます。 + +```solidity + // There is probably a clever way to do the following lines as a loop, + // but it's a view function so I'm optimizing for programmer time and + // simplicity. + + if (_key < 16*256**2) + return bytes.concat(bytes3(uint24(_key) | (0x2 * 16 * 256**2))); + if (_key < 16*256**3) + return bytes.concat(bytes4(uint32(_key) | (0x3 * 16 * 256**3))); + . + 。 + 。 + if (_key < 16*256**14) + return bytes.concat(bytes15(uint120(_key) | (0xE * 16 * 256**14))); + if (_key < 16*256**15) + return bytes.concat(bytes16(uint128(_key) | (0xF * 16 * 256**15))); +``` + +他の値(3バイト、4バイト等)も、フィールドのサイズが異なるだけで、同じ方法で処理されます。 + +```solidity + // If we get here, something is wrong. + revert("Error in encodeVal, should not happen"); +``` + +ここまでで、16\*25615以上のキーを取得できることになります。 しかし、`cacheWrite`では、キーを制限しています。そのため、14\*25616より上には行けません (これは、最初のバイトが0xFEになり、 `DONT_CACHE`になってしまうためです) 。 しかし、将来プログラマーがバグを入れてしまう場合に備え、テストを追加するのに、それほど費用はかかりません。 + +```solidity + } // encodeVal + +} // Cache +``` + +### キャッシュのテスト {#testing-the-cache} + +Foundryの素晴らしい機能の一つは、[Solidityでテストを作成できること](https://book.getfoundry.sh/forge/tests)です。そのため、単体テストを簡単に作成できます。 `Cache`クラスのテストは、[こちら](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol)にあります。 テストにおけるテストコードは、繰り返しが多い傾向があります。そのため、この記事では、重要な部分のみを説明します。 + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; + + +// Need to run `forge test -vv` for the console. +import "forge-std/console.sol"; +``` + +これは、テストパッケージおよび`console.log`を使うのに必要となるボイラープレートです。 + +```solidity +import "src/Cache.sol"; +``` + +テストするコントラクトのインポートです。 + +```solidity +contract CacheTest is Test { + Cache cache; + + function setUp() public { + cache = new Cache(); + } +``` + +`setUp`関数は、各テストの前に呼び出されます。 このケースにおいては、新しいキャッシュを作成してテスト同士が影響しないようにします。 + +```solidity + function testCaching() public { +``` + +`test`の名前で始まる関数がテストです。 この関数では、値を書き込み、読み取ることでキャッシュ機能の基本的な確認を行います。 + +```solidity + for(uint i=1; i<5000; i++) { + cache.cacheWrite(i*i); + } + + for(uint i=1; i<5000; i++) { + assertEq(cache.cacheRead(i), i*i); +``` + +これは、[`assert...`関数](https://book.getfoundry.sh/reference/forge-std/std-assertions)を使って、実際にテストをする方法です。 このケースでは、書き込んだ値が読み込んだ値であることを確認します。 キャッシュキーが線形に割り当てられるため、`cache.cacheWrite`の結果は、破棄できます。 + +```solidity + } + } // testCaching + + + // Cache the same value multiple times, ensure that the key stays + // the same + function testRepeatCaching() public { + for(uint i=1; i<100; i++) { + uint _key1 = cache.cacheWrite(i); + uint _key2 = cache.cacheWrite(i); + assertEq(_key1, _key2); + } +``` + +まず、各値をキャッシュに2回書き込みます。そして、キーが同じであることを確認します (2回目の書き込みは、実際に起こらないことを意図しています)。 + +```solidity + for(uint i=1; i<100; i+=3) { + uint _key = cache.cacheWrite(i); + assertEq(_key, i); + } + } // testRepeatCaching +``` + +理論的には、連続したキャッシュの書き込みに関連しないバグが存在する可能性があります。 そのため、ここでは連続的ではない書き込みを何回か実行し、値がまだ書き換えられていないことを確認します。 + +```solidity + // Read a uint from a memory buffer (to make sure we get back the parameters + // we sent out) + function toUint256(bytes memory _bytes, uint256 _start) internal pure + returns (uint256) +``` + +`bytes memory`バッファから256ビットのワードを読み取ります。 このユーティリティ関数でキャッシュを使う関数の呼び出しを実行したときに、正しい結果が得られることを検証できます。 + +```solidity + { + require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); + uint256 tempUint; + + assembly { + tempUint := mload(add(add(_bytes, 0x20), _start)) + } +``` + +Yulでは、`uint256`を超えるデータ構造をサポートしていません。そのため、メモリバッファである`_bytes`など、より高度なデータ構造を参照するときは、そのデータ構造のアドレスが取得されます。 Solidityでは、`bytes memory`値を長さを含む32バイトワードとして保存します。長さの後に実際のバイトが続くため、バイト数`_start`を取得して、`_bytes+32+_start`を計算する必要があります。 + +```solidity + + return tempUint; + } // toUint256 + + // Function signature for fourParams(), courtesy of + // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d + bytes4 constant FOUR_PARAMS = 0x3edc1e6d; + + // Just some constant values to see we're getting the correct values back + uint256 constant VAL_A = 0xDEAD60A7; + uint256 constant VAL_B = 0xBEEF; + uint256 constant VAL_C = 0x600D; + uint256 constant VAL_D = 0x600D60A7; +``` + +テストに必要な定数です。 + +```solidity + function testReadParam() public { +``` + +`readParams`を使う関数`fourParams()`を呼び出し、パラメータを正しく読み取れることをテストします。 + +```solidity + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; +``` + +キャッシュを使う関数の呼び出しに、通常のABIメカニズムは使えません。そのため、低レベルの [`.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html# members-of-addresses)メカニズムを使う必要があります。 [`.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses)のメカニズムでは、入力として`bytes memory`を取り、それを (ブール値と共に) 出力として返します。 + +```solidity + // First call, the cache is empty + _callInput = bytes.concat( + FOUR_PARAMS, +``` + +1つのコントラクトで、キャッシュされた関数 (トランザクションからの直接呼び出し用) とキャッシュ無しの関数 (他のコントラクトからの呼び出し用) の両方をサポートしていると有用です。 それには、正しい関数を呼び出すために、すべてを[`fallback`関数](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function)に置くのではなく、引き続きSolidityのメカニズムに頼る必要があります。 この実装によって構成可能性をより容易に達成できます。 ほとんどの状況において、1バイトで関数を十分に識別できます。そのため、3バイト (16\*3=48ガス) を無駄にしていることになります。 しかし、この記事を書いている時点では、48ガスのコストは0.07セントなので、より単純でバグが発生しにくいコードとしては妥当なコストです。 + +```solidity + // First value, add it to the cache + cache.INTO_CACHE(), + bytes32(VAL_A), +``` + +最初の値は、全ての値をキャッシュに書き込む必要をあることを示すフラグです。次に、32バイトの値が続きます。 他の値は似ていますが、`VAL_B`は、キャッシュに書き込まれず、`VAL_C`は、3番目のパラメータと4番目のパラメータの両方である点が異なります。 + +```solidity + 。 + 。 + 。 + ); + (_success, _callOutput) = _cacheAddr.call(_callInput); +``` + +`Cache`コントラクトを実際に呼び出すところです。 + +```solidity + assertEq(_success, true); +``` + +この呼び出しが成功することを要求しています。 + +```solidity + assertEq(cache.cacheRead(1), VAL_A); + assertEq(cache.cacheRead(2), VAL_C); +``` + +空のキャッシュから始め、 `VAL_A`を加えてから `VAL_C`を追加します。 最初のキーに1があり、2番目のキーには、2があることを要求しています。 + +``` + assertEq(toUint256(_callOutput,0), VAL_A); + assertEq(toUint256(_callOutput,32), VAL_B); + assertEq(toUint256(_callOutput,64), VAL_C); + assertEq(toUint256(_callOutput,96), VAL_C); +``` + +出力は、4つのパラメータです。 ここで、それが正しいことを検証しています。 + +```solidity + // Second call, we can use the cache + _callInput = bytes.concat( + FOUR_PARAMS, + + // First value in the Cache + bytes1(0x01), +``` + +16未満のキャッシュキーは、ちょうど1バイトになります。 + +```solidity + // Second value, don't add it to the cache + cache.DONT_CACHE(), + bytes32(VAL_B), + + // Third and fourth values, same value + bytes1(0x02), + bytes1(0x02) + ); + . + 。 + 。 + } // testReadParam +``` + +呼出し後のテストは、最初の呼び出しの後のテストと同一です。 + +```solidity + function testEncodeVal() public { +``` + +この関数は、`testReadParam`に似ています。しかし、パラメータを明示的に記述する代わりに、`encodeVal()`を使うところが違います。 + +```solidity + 。 + 。 + 。 + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(VAL_A), + cache.encodeVal(VAL_B), + cache.encodeVal(VAL_C), + cache.encodeVal(VAL_D) + ); + . + 。 + 。 + assertEq(_callInput.length, 4+1*4); + } // testEncodeVal +``` + +`testEncodeVal()`の唯一の追加テストとして、`_callInput`の長さが正しいかを検証することがあります。 最初の呼び出しでは、4+33\*4となります。 次の呼び出しでは、すべての値がすでにキャッシュ内にあり、4+1\*4となります。 + +```solidity + // Test encodeVal when the key is more than a single byte + // Maximum three bytes because filling the cache to four bytes takes + // too long. + function testEncodeValBig() public { + // Put a number of values in the cache. + // To keep things simple, use key n for value n. + for(uint i=1; i<0x1FFF; i++) { + cache.cacheWrite(i); + } +``` + +上記の`testEncodeVal`関数は、4つの値のみをキャッシュに書き込むので、[マルチバイト値を処理する関数の部分](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171)についてチェックされません。 しかし、その部分は、複雑でエラーが発生しやすくなっています。 + +この関数の最初の部分は、1から0x1FFFまでのすべての値を順番にキャッシュに書き込むループなので、これらの値をエンコードして、どこに行くのかを知ることができます。 + +```solidity + 。 + 。 + 。 + + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(0x000F), // One byte 0x0F + cache.encodeVal(0x0010), // Two bytes 0x1010 + cache.encodeVal(0x0100), // Two bytes 0x1100 + cache.encodeVal(0x1000) // Three bytes 0x201000 + ); +``` + +1バイト、2バイト、3バイトの値をテストします。 十分なスタックエントリを書き込むには時間がかかりすぎるため (0x10000000では少なくとも約2億5千万回) 、それ以上のテストは行いません。 + +```solidity + 。 + 。 + 。 + 。 + } // testEncodeValBig + + + // Test what with an excessively small buffer we get a revert + function testShortCalldata() public { +``` + +パラメータが足りていない場合の異常時に何が起こるかをテストします。 + +```solidity + 。 + 。 + 。 + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, false); + } // testShortCalldata +``` + +処理が取り消されるので、得られる結果は、`false`になります。 + +``` + // Call with cache keys that aren't there + function testNoCacheKey() public { + . + 。 + 。 + _callInput = bytes.concat( + FOUR_PARAMS, + + // First value, add it to the cache + cache.INTO_CACHE(), + bytes32(VAL_A), + + // Second value + bytes1(0x0F), + bytes2(0x1234), + bytes11(0xA10102030405060708090A) + ); +``` + +この関数は、キャッシュが空なので読み込む値がないことは別として、正当な4つのパラメータを取得します。 + +```solidity + 。 + 。 + 。 + // Test what with an excessively long buffer everything works file + function testLongCalldata() public { + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; + + // First call, the cache is empty + _callInput = bytes.concat( + FOUR_PARAMS, + + // First value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_A), + + // Second value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_B), + + // Third value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_C), + + // Fourth value, add it to the cache + cache.INTO_CACHE(), bytes32(VAL_D), + + // And another value for "good luck" + bytes4(0x31112233) + ); +``` + +この関数は、5つの値を送信します。 5番目の値は、有効なキャッシュエントリではないため、無視されます。このキャッシュエントリが含まれない場合は、処理が取り消されることになります。 + +```solidity + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, true); + . + 。 + 。 + } // testLongCalldata + +} // CacheTest + +``` + +## サンプルアプリケーション {#a-sample-app} + +Solidityでテストを作成するのは素晴らしいものの、結局のところ、有用なDappにするには、チェーンの外部からリクエストを処理できる必要があります。 この記事では、「Write Once, Read Many」の略である`WORM`使ってDappにおけるキャッシュの使い方を詳しく説明します。 キーが書き込まれていない場合は、値を書き込むことができます。 キーがすでに書き込まれている場合は、処理が取り消されます。 + +### コントラクト {#the-contract} + +[ここに](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol)コントラクトのコードがあります。 コードでは、ほとんどすでに解説した`Cache`と`CacheTest`を繰り返しているため、興味深い部分のみを取り上げます。 + +```solidity +import "./Cache.sol"; + +contract WORM is Cache { +``` + +`Cache`を使う最も簡単な方法は、自分のコントラクトに継承することです。 + +```solidity + function writeEntryCached() external { + uint[] memory params = _readParams(2); + writeEntry(params[0], params[1]); + } // writeEntryCached +``` + +この関数は、上述の`CacheTest`の`fourParam`に似ています。 ABI仕様に従っていないため、関数内でパラメータを宣言しないほうが間違いなく良いでしょう。 + +```solidity + // Make it easier to call us + // Function signature for writeEntryCached(), courtesy of + // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 + bytes4 constant public WRITE_ENTRY_CACHED = 0xe4e4f2d3; +``` + +ABIの仕様に従っていないため、`writeEntryCached`を呼び出す外部コードは、`worm.writeEntryCached`を使う代わりに手動でcalldataを作成しなければなりません。 この定数値があると、その記述が楽になります。 + +`WRITE_ENTRY_CACHED`を状態変数として定義しても、それを外部から読み取るには、Getter関数 `worm.WRITE_ENTRY_CACHED()`を使うわなければならないことに気をつけてください。 + +```solidity + function readEntry(uint key) public view + returns (uint _value, address _writtenBy, uint _writtenAtBlock) +``` + +読み取りの関数は、`view`で宣言されているので、トランザクションは必要なく、ガスもかかりません。 結果、パラメータにキャッシュを使うメリットは、ありません。 ビュー関数では、より単純な標準メカニズムを使う方が最善です。 + +### テストコード {#the-testing-code} + +[ここに](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol)コントラクトのテストコードがあります。 再度となりますが、興味深い部分のみを取り上げます。 + +```solidity + function testWReadWrite() public { + worm.writeEntry(0xDEAD, 0x60A7); + + vm.expectRevert(bytes("entry already written")); + worm.writeEntry(0xDEAD, 0xBEEF); +``` + +[この箇所は (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert)、Foundryテストで次の呼び出しが失敗し、失敗した理由をレポートすることを記述する方法です。 これは、低レベルのインターフェイス (` .call()`など) を使用して呼び出しデータを作成し、コントラクトを呼び出すというよりも、` . ()`構文を使う時に作動させます。 + +```solidity + function testReadWriteCached() public { + uint cacheGoat = worm.cacheWrite(0x60A7); +``` + +上記は、`cacheWrite`がキャッシュキーを返すというファクトを使います。 これは運用環境での使用を想定していません。`cacheWrite`は、状態を変更するためです。従ってトランザクション中しか読みだせません。 トランザクションには、戻り値がありません。結果があれば、その結果はイベントとして出力されることになります。 そのため、 `cacheWrite`の戻り値は、オンチェーンコードからのみアクセスできます。また、オンチェーンコードでは、パラメータキャッシュは不要です。 + +```solidity + (_success,) = address(worm).call(_callInput); +``` + +上記は、` .call()`に2つの戻り値があるものの、最初の値のみを使うことをSolidityに伝える方法です。 + +```solidity + (_success,) = address(worm).call(_callInput); + assertEq(_success, false); +``` + +低レベルの`.call()`関数を使っているので`vm.expectRevert()`は使用できません。呼び出しで取得したブール値で成功を確認する必要があります。 + +```solidity + event EntryWritten(uint indexed key, uint indexed value); + + . + 。 + 。 + + _callInput = bytes.concat( + worm.WRITE_ENTRY_CACHED(), worm.encodeVal(a), worm.encodeVal(b)); + vm.expectEmit(true, true, false, false); + emit EntryWritten(a, b); + (_success,) = address(worm).call(_callInput); +``` + +上記は、Foundryでコードが[イベントを正しく発行していること](https://book.getfoundry.sh/cheatcodes/expect-emit)を確認する方法です。 + +### クライアント {#the-client} + +Solidityのテストで得られないものの1つとして、自身のアプリケーションにカットアンドペーストできるJavaScriptコードでしょう。 そのコードを書くために、WORMをOptimismの新しいテストネットであるOptimism Goerliにデプロイしました。 アドレスは、 0xd34335b1d818cee54e3323d3246bd31d94e6a78a
です。 + ++ クライアントのJavaScriptコードは、こちらにあります。 次の方法で使うことができます。 +
+ ++
+ +- +
+ ++ 次のGitリポジトリをクローンしてください。 + +
+ +git clone https://github.com/qbzzt/20220915-all-you-can-cache.git +
- +
+ ++ 必要な次のパッケージをインストールしてください。 + +
+ +cd javascript + yarn +
- +
+ ++ 次の設定ファイルをコピーしてください。 + +
+ +cp .env.example .env +
- +
++
+.env
を編集して設定を行ってください。 ++
+ ++ + ++ パラメータ + + ++ 値 + ++ + ++ MNEMONIC + + ++ トランザクションの支払いで十分なETHを持っているアカウントのニーモニック。 こちらでOptimismのGoerliネットワークの無料ETHを手に入れられます。 + ++ ++ OPTIMISM_GOERLI_URL + + ++ Optimism GoerliのURLを設定します。 公開エンドポイントは、 +https://goerli.optimism.io
です。通信制限がありますが、必要なことをするには十分です。 ++
+ +- +
++
index.js
の実行 + ++ + +node index.js +
+ このサンプルアプリケーションは、まず、WORMにエントリを書き込み、calldataとEtherescan上のトランザクションへのリンクを表示します。 そして、そのエントリを読み込み、使用するキーとエントリ内の値 (値、ブロック番号、作成者) を表示します。 +
++ クライアントの大体の部分は、通常のDappのJavaScriptと変わりません。 そのため、ここでも興味深い部分のみを取り上げます。 +
+ ++ +。 +。 +。 +const main = async () => { + const func = await worm.WRITE_ENTRY_CACHED() + + // Need a new key every time + const key = await worm.encodeVal(Number(new Date())) +
+ 与えられたスロットには、1回しか書き込むことができないため、タイムスタンプを使用してスロットが再利用されないようにします。 +
+ ++ +const val = await worm.encodeVal("0x600D") + +// Write an entry +const calldata = func + key.slice(2) + val.slice(2) +
+ Ethersでは、calldataが16進数の文字列、
+ +0x
の後に16進数の偶数が続くことを想定しています。key
とval
は、両方とも0x
で始まるため、これらのヘッダーを削除する必要があります。 ++ +const tx = await worm.populateTransaction.writeEntryCached() +tx.data = calldata + +sentTx = await wallet.sendTransaction(tx) +
+ Solidityのテストコードと同様に、キャッシュされた関数を通常は呼び出すことができません。 代わりに、低レベルのメカニズムを使用する必要があります。 +
+ ++ +。 + 。 + 。 + // Read the entry just written + const realKey = '0x' + key.slice(4) // remove the FF flag + const entryRead = await worm.readEntry(realKey) + . + 。 + 。 +
+ エントリの読み取りには、通常のメカニズムを使用できます。
+ + + +view
関数では、パラメータのキャッシュを使う必要はありません。 ++ まとめ +
+ ++ この記事のコードの目的は、PoC (プルーフ・オブ・コンセプト) で、アイデアを理解しやすくすることです。 本番環境でのシステムでは、次のいくつかの追加機能を実装する必要性が考えられます。 +
+ ++
+ +- +
+uint256
以外の値に対応すること。 例えば、文字列です。 +- + グローバルキャッシュの代わりに、ユーザーとキャッシュ間のマッピングを持つことも考えられます。 異なるユーザーで異なる値を使う場合です。 +
+- + アドレスに使用される値は、他の目的に使用される値とは異なります。 アドレス専用の別のキャッシュに分けた方が合理的かもしれません。 +
+- +
++ 現在のコードでは、キャッシュキーは「先着最小キー」アルゴリズムになっています。 最初の16個の値は、1バイトとして送信できます。 次の4080個の値は、2バイトとして送信できます。 次の約100万個の値は、3バイトなどとなります。 本番のシステムでは、キャッシュエントリ上で使用量カウンタを保持し、16個の最も一般的な値が1バイト、次の4080個にくる一般的な値が2バイトになるようにする等、再編成する必要があります。 +
++ ただし、それはリスクのある操作です。 次の一連のイベントを想像してみてください。 +
++
+ +- +
+ ++ Noam Naiveは、彼がトークンを送信するアドレスをエンコードするために
+encodeVal
を呼び出します。 これは、アプリケーションで最初に使用されるアドレスの1つであるため、0x06の値にエンコードされます。 また、トランザクションではないため、view
関数になります。そのため、Noamと彼が使うノードの間であり、他の人はそれについて知りません。 +- +
+ ++ Owen Ownerは、キャッシュの並べ替え操作を実行します。 そのアドレスを使用する人はほとんどいないため、現在は 0x201122としてエンコードされています。 別の値である1018には、0x06が割り当てられます。 +
+- +
++ Noam Naiveは、保有しているトークンを0x06に送信します。 そのトークンは、アドレス
+0x0000000000000000000000000de0b6b3a7640000
に送られますが、そのアドレスの秘密鍵を誰も知らないため、そこにスタックしてしまいます。 Noamにとってこれは悲惨です。 ++ この問題とキャッシュの再順序付け中にメモリプール内にあるトランザクションに関連する問題を解決する方法は、いくつかありますが、注意をしなければなりません。 +
++ 私は、Optimismの従業員なので、最もよく知っているロールアップであるOptimismを使用してキャッシュを説明しました。 内部処理に最小限のコストが発生する他のロールアップでも機能するはずです。他のロールアップを比較すると、L1へのトランザクションデータの書き込みが主なコストとなります。 +
diff --git a/public/content/translations/ja/developers/tutorials/calling-a-smart-contract-from-javascript/index.md b/public/content/translations/ja/developers/tutorials/calling-a-smart-contract-from-javascript/index.md index 6d323b86386..037235d134c 100644 --- a/public/content/translations/ja/developers/tutorials/calling-a-smart-contract-from-javascript/index.md +++ b/public/content/translations/ja/developers/tutorials/calling-a-smart-contract-from-javascript/index.md @@ -105,10 +105,10 @@ ABIを提供した、インスタンス化されたスマートコントラク ```js daiToken.methods.balanceOf(senderAddress).call(function (err, res) { if (err) { - console.log("エラーが発生しました。", err) + console.log("An error occurred", err) return } - console.log("残高は: ", res) + console.log("The balance is: ", res) }) ``` @@ -123,10 +123,10 @@ daiToken.methods .transfer(receiverAddress, "100000000000000000000") .send({ from: senderAddress }, function (err, res) { if (err) { - console.log("エラーが発生しました。", err) + console.log("An error occurred", err) return } - console.log("トランザクションのハッシュ: " + res) + console.log("Hash of the transaction: " + res) }) ``` diff --git a/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md b/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md index bcdeeb52736..33dca9de55b 100644 --- a/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md +++ b/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md @@ -9,22 +9,22 @@ tags: - "Truffle" - "Ganache" - "スマートコントラクト" -skill: intermediate +skill: 中級 lang: ja published: 2020-12-31 source: github.com sourceUrl: https://github.com/strykerin/DeFi-Token-Farm --- -このチュートリアルでは、Solidity を使用して DeFi アプリケーションを構築します。このアプリケーションでは、ERC20 トークンをスマートコントラクトに入金した上で、Farm Token を発行して転送することができます。 ユーザーはその後、スマートコントラクトで Farm Token をバーンすることで ERC-20 トークンを引き出すことができ、ERC-20 トークンは再度ユーザーに転送されます。 +このチュートリアルでは、Solidityを使用してDeFiアプリケーションを構築します。このアプリケーションでは、ERC20トークンをスマートコントラクトに入金した上で、Farm Tokenを発行して転送することができます。 ユーザーはその後、スマートコントラクトでFarm TokenをバーンすることでERC-20 トークンを引き出すことができ、ERC-20トークンは再度ユーザーに転送されます。 -## Truffle と Ganache をインストールする {#install-truffle-and-ganache} +## TruffleとGanacheをインストールする {#install-truffle-and-ganache} -はじめてスマートコントラクトを作成する場合は、環境設定が必要です。 [Truffle](https://www.trufflesuite.com/)と[Ganache](https://www.trufflesuite.com/ganache)という 2 つのツールを使用します。 +はじめてスマートコントラクトを作成する場合は、環境設定が必要です。 [Truffle](https://www.trufflesuite.com/)と[Ganache](https://www.trufflesuite.com/ganache)という2つのツールを使用します。 -Truffle はイーサリアムのスマートコントラクトを開発するための開発環境とテストフレームワークです。 Truffle を使用すると、簡単にスマートコントラクトを構築し、ブロックチェーンでデプロイできます。 Ganache は、スマートコントラクトをテストするために、ローカルのイーサリアムブロックチェーンを作成することができます。 Ganache は、実際のネットワークの機能をシミュレートし、最初の 10 アカウントに対しテスト用の 100ether が供給します。 これにより、無料で自由にスマートコントラクトをデプロイし、テストできるようになります。 Ganache は、デスクトップアプリケーションとコマンドラインツールの両方が提供されています。 この記事では、UI デスクトップアプリケーションを使用します。 +Truffleはイーサリアムのスマートコントラクトを開発するための開発環境とテストフレームワークです。 Truffleを使用すると、簡単にスマートコントラクトを構築し、ブロックチェーンでデプロイできます。 Ganacheは、スマートコントラクトをテストするために、ローカルのイーサリアムブロックチェーンを作成することができます。 Ganacheは、実際のネットワークの機能をシミュレートし、最初の10アカウントに対しテスト用の100etherが供給します。 これにより、無料で自由にスマートコントラクトをデプロイし、テストできるようになります。 Ganacheは、デスクトップアプリケーションとコマンドラインツールの両方が提供されています。 この記事では、UIデスクトップアプリケーションを使用します。 -![Ganache UIデスクトップアプリケーション](https://cdn-images-1.medium.com/max/2360/1*V1iQ5onbLbT5Ib2QaiOSyg.png)_Ganache の UI デスクトップアプリケーション _ +![Ganache UIデスクトップアプリケーション](https://cdn-images-1.medium.com/max/2360/1*V1iQ5onbLbT5Ib2QaiOSyg.png)_GanacheのUI デスクトップアプリケーション _ プロジェクトを作成するには、次のコマンドを実行します @@ -36,23 +36,23 @@ truffle init これにより、スマートコントラクトを開発し、デプロイするための空のプロジェクトが作成されます。 作成したプロジェクトの構造は以下のようになります: -- `contracts`:Solidity で作成したスマートコントラクトのフォルダ +- `contracts`:Solidityで作成したスマートコントラクトのフォルダ - `migrations`:デプロイ用スクリプトのフォルダ - `test`:スマートコントラクトをテストするためのフォルダ -- `truffle-config.js`:Truffle の設定ファイル +- `truffle-config.js`:Truffleの設定ファイル -## ERC-20 トークンを作成する {#create-the-erc20-token} +## ERC-20トークンを作成する {#create-the-erc20-token} -最初に、スマートコントラクトにステークするために使用する ERC-20 トークンを作成する必要があります。 代替可能なトークンを作成するには、まず OpenZeppelin ライブラリをインストールする必要があります。 このライブラリには、ERC-20 や ERC-721 のような標準の実装が含まれています。 インストールするには、以下のコマンドを実行します: +最初に、スマートコントラクトにステークするために使用するERC-20トークンを作成する必要があります。 代替可能なトークンを作成するには、まずOpenZeppelinライブラリをインストールする必要があります。 このライブラリには、ERC-20やERC-721のような標準の実装が含まれています。 インストールするには、以下のコマンドを実行します: ```bash npm install @openzeppelin/contracts ``` -OpenZeppelin ライブラリを使用して、`contracts/MyToken.sol`に以下の Solidity コードを書き込むことで ERC-20 トークンを作成できます。 +OpenZeppelinライブラリを使用して、`contracts/MyToken.sol`に以下のSolidityコードを書き込むことでERC-20トークンを作成できます。 ```solidity pragma solidity ^0.8.0; @@ -68,15 +68,15 @@ contract MyToken is ERC20 { 上記のコードでは: -- 3 行目:このトークン標準の実装を含む OpenZeppelin から、ERC20.sol コントラクトをインポートします。 +- 3行目:このトークン標準の実装を含むOpenZeppelinから、ERC20.solコントラクトをインポートします。 -- 5 行目:ERC20.sol コントラクトを継承します。 +- 5行目:ERC20.solコントラクトを継承します。 -- 6 行目:ERC20.sol コンストラクタを呼び出し、名前とシンボルパラメータを `"MyToken"` と `"MTKN"` として引き渡します。 +- 6行目:ERC20.solコンストラクタを呼び出し、名前とシンボルパラメータを `"MyToken"` と `"MTKN"` として引き渡します。 -- 7 行目:スマートコントラクトをデプロイしているアカウントに、100 万トークンを発行して転送します(ERC-20 トークンでは、デフォルトである小数点以下 18 桁を使用します。 つまり、1 トークンをミントしたい場合は、1000000000000000000 と、1 の後に 18 個の 0 を付けて表します) 。 +- 7行目:スマートコントラクトをデプロイしているアカウントに、100万トークンを発行して転送します(ERC-20トークンでは、デフォルトである小数点以下18桁を使用します。 つまり、1トークンをミントしたい場合は、1000000000000000000と、1の後に18個の0を付けて表します) 。 -以下の ERC20.sol コンストラクタの実装では、 `_decimals`フィールドが 18 に設定されているのが確認できます: +以下のERC20.solコンストラクタの実装では、 `_decimals`フィールドが18に設定されているのが確認できます: ```solidity string private _name; @@ -90,15 +90,15 @@ constructor (string memory name_, string memory symbol_) public { } ``` -## ERC-20 トークンをコンパイルする {#compile-the-erc20-token} +## ERC-20トークンをコンパイルする {#compile-the-erc20-token} -スマートコントラクトをコンパイルするには、まず Solidity コンパイラのバージョンを確認してください。 バージョンを確認するには、以下のコマンドを実行します: +スマートコントラクトをコンパイルするには、まずSolidityコンパイラのバージョンを確認してください。 バージョンを確認するには、以下のコマンドを実行します: ```bash truffle version ``` -デフォルトのバージョンは `Solidity v0.5.16` です。 このトークンは Solidity のバージョン `0.6.2` を使って作成されているため、このコマンドを実行してコントラクトをコンパイルしようとするとエラーが発生します。 使用したい Solidity コンパイラのバージョンを指定するには、`truffle-config.js`を開き、以下のように設定します。 +デフォルトのバージョンは `Solidity v0.5.16` です。 このトークンはSolidityのバージョン `0.6.2` を使って作成されているため、このコマンドを実行してコントラクトをコンパイルしようとするとエラーが発生します。 使用したいSolidityコンパイラのバージョンを指定するには、`truffle-config.js`を開き、以下のように設定します。 ```javascript // Configure your compilers @@ -123,11 +123,11 @@ compilers: { truffle compile ``` -## ERC-20 トークンをデプロイする {#deploy-erc20-token} +## ERC-20トークンをデプロイする {#deploy-erc20-token} コンパイルが完了すると、トークンをデプロイできるようになります。 -`migrations`フォルダに、 `2_deploy_Tokens.js`という名前のファイルを作成します。 このファイルでは、ERC-20 トークンと Farm Token スマートコントラクトの両方をデプロイします。 以下のコードは、MyToken.sol コントラクトをデプロイするために使用します: +`migrations`フォルダに、 `2_deploy_Tokens.js`という名前のファイルを作成します。 このファイルでは、ERC-20トークンとFarm Tokenスマートコントラクトの両方をデプロイします。 以下のコードは、MyToken.solコントラクトをデプロイするために使用します: ```javascript const MyToken = artifacts.require("MyToken") @@ -139,19 +139,19 @@ module.exports = async function (deployer, network, accounts) { } ``` -Ganache を開いて「QuickStart」のオプションを選択すると、ローカルのイーサリアムブロックチェーンが開始されます。 コントラクトをデプロイするには、以下を実行します: +Ganacheを開いて「QuickStart」のオプションを選択すると、ローカルのイーサリアムブロックチェーンが開始されます。 コントラクトをデプロイするには、以下を実行します: ```bash truffle migrate ``` -コントラクトのデプロイに使用するアドレスは、Ganache で表示されるアドレスリストの一番上のアドレスです。 これを確認するには、Ganache のデスクトップアプリケーションを開きます。スマートコントラクトをデプロイするためにコストが発生したため、リストの一番上のアカウントでは ether の残高が減少していることを確認してください。 +コントラクトのデプロイに使用するアドレスは、Ganacheで表示されるアドレスリストの一番上のアドレスです。 これを確認するには、Ganacheのデスクトップアプリケーションを開きます。スマートコントラクトをデプロイするためにコストが発生したため、リストの一番上のアカウントではetherの残高が減少していることを確認してください。 -![Ganacheデスクトップアプリケーション](https://cdn-images-1.medium.com/max/2346/1*1iJ9VRlyLuza58HL3DLfpg.png)_Ganache デスクトップアプリケーション_ +![Ganacheデスクトップアプリケーション](https://cdn-images-1.medium.com/max/2346/1*1iJ9VRlyLuza58HL3DLfpg.png)_Ganacheデスクトップアプリケーション_ -デプロイ先アドレスに「MyToken」トークンが 100 万個送信されたことを確認するには、Truffle Console を使ってデプロイ済みのスマートコントラクトと接続します。 +デプロイ先アドレスに「MyToken」トークンが100万個送信されたことを確認するには、Truffle Consoleを使ってデプロイ済みのスマートコントラクトと接続します。 -> [Truffle Console は、あらゆるイーサリアムクライアントに接続できる基本的な対話型コンソールです。](https://www.trufflesuite.com/docs/truffle/getting-started/using-truffle-develop-and-the-console) +> [Truffle Consoleは、あらゆるイーサリアムクライアントに接続できる基本的な対話型コンソールです。](https://www.trufflesuite.com/docs/truffle/getting-started/using-truffle-develop-and-the-console) スマートコントラクトとのやりとりを実行するには、以下のコマンドを実行します: @@ -163,29 +163,29 @@ truffle console - スマートコントラクトの取得: `myToken = await MyToken.deployed()` -- Ganache からアカウント情報を取得する:`accounts = await web3.eth.getAccounts()` +- Ganacheからアカウント情報を取得する:`accounts = await web3.eth.getAccounts()` - 一番上のアカウントの残高を取得する: `balance = await myToken.balanceOf(accounts[0])` -- 残高のフォーマットを、小数点以下 18 桁に設定する:`web3.utils.fromWei(balance.toString())` +- 残高のフォーマットを、小数点以下18桁に設定する:`web3.utils.fromWei(balance.toString())` -上記のコマンドを実行すると、最初のアドレスに実際に 100 万個の MyTokens が含まれていることが確認できます。 +上記のコマンドを実行すると、最初のアドレスに実際に100万個のMyTokensが含まれていることが確認できます。 ![一番上のアドレスに、100万MyTokenが含まれています](https://cdn-images-1.medium.com/max/2000/1*AQlj9A7dw-qtY4QAD3Bpxw.png) -_最初のアドレスに、100 万 MyTokens が含まれています。_ +_最初のアドレスに、100万MyTokensが含まれています。_ -## Farm Token のスマートコントラクトを作成する {#create-farmtoken-smart-contract} +## Farm Tokenのスマートコントラクトを作成する {#create-farmtoken-smart-contract} -Farm Token のスマートコントラクトは、以下の 3 つの機能を持ちます: +Farm Tokenのスマートコントラクトは、以下の3つの機能を持ちます: -- `balance()`:Farm Token スマートコントラクトにおける MyToken の残高を取得します。 +- `balance()`:Farm TokenスマートコントラクトにおけるMyTokenの残高を取得します。 -- `deposit(uint256 _amount)`:ユーザーを代理して MyToken を Farm Token スマートコントラクトに転送し、Farm Token を作成した上でユーザーに返送します。 +- `deposit(uint256 _amount)`:ユーザーを代理してMyTokenをFarm Tokenスマートコントラクトに転送し、Farm Tokenを作成した上でユーザーに返送します。 -- `withdraw(uint256 _amount)`:ユーザーの Farm Token をバーンし、MyToken をユーザーのアドレスに転送します。 +- `withdraw(uint256 _amount)`:ユーザーのFarm Tokenをバーンし、MyToken をユーザーのアドレスに転送します。 -以下の Farm Token コンストラクタを確認してください: +以下のFarm Tokenコンストラクタを確認してください: ```solidity pragma solidity ^0.6.2; @@ -210,13 +210,13 @@ contract FarmToken is ERC20 { } ``` -- 3 ~ 6 行目: OpenZeppelin から、以下のコントラクト(IERC20.sol、Address.sol、SafeERC20.sol、ERC20.sol)をインポートします。 +- 3~6行目: OpenZeppelinから、以下のコントラクト(IERC20.sol、Address.sol、SafeERC20.sol、ERC20.sol)をインポートします。 -- 8 行目:この Farm Token は、ERC-20 コントラクトを継承します。 +- 8行目:このFarm Tokenは、ERC-20コントラクトを継承します。 -- 14 ~ 19 行目:Farm Token コンストラクタは、MyToken コントラクトのアドレスをパラメータとして受け取り、このコントラクトに`token`の public 変数を割り当てます。 +- 14~19行目:Farm Tokenコンストラクタは、MyTokenコントラクトのアドレスをパラメータとして受け取り、このコントラクトに`token`のpublic変数を割り当てます。 -それでは、`balance()`関数を実装しましょう。 この関数は、パラメータを受け取らず、スマートコントラクトの MyToken 残高を返します。 以下のように実装します: +それでは、`balance()`関数を実装しましょう。 この関数は、パラメータを受け取らず、スマートコントラクトのMyToken残高を返します。 以下のように実装します: ```solidity function balance() public view returns (uint256) { @@ -224,7 +224,7 @@ function balance() public view returns (uint256) { } ``` -`deposit(uint256 _amount)`関数は、ユーザーが入金したい金額をパラメータとして受け取り、Farm Token を作成した上でユーザーに転送します。 +`deposit(uint256 _amount)`関数は、ユーザーが入金したい金額をパラメータとして受け取り、Farm Tokenを作成した上でユーザーに転送します。 ```solidity function deposit(uint256 _amount) public { @@ -239,7 +239,7 @@ function deposit(uint256 _amount) public { } ``` -`withdraw(uint256 _amount)` 関数は、ユーザーがバーンしたい Farm Token の金額をパラメータして受け取り、同額の My Token をユーザーに転送します。 +`withdraw(uint256 _amount)` 関数は、ユーザーがバーンしたいFarm Tokenの金額をパラメータして受け取り、同額のMy Tokenをユーザーに転送します。 ```solidity function withdraw(uint256 _amount) public { @@ -268,11 +268,11 @@ module.exports = async function (deployer, network, accounts) { } ``` -Farm Token をデプロイする時は、デプロイ済みの MyToken コントラクトのアドレスがパラメータとして提供される点に注意してください。 +Farm Tokenをデプロイする時は、デプロイ済みのMyTokenコントラクトのアドレスがパラメータとして提供される点に注意してください。 次に、`truffle compile`と `truffle migrate`を実行して、コントラクトをデプロイします。 -次に、スマートコントラクトのテストを実行します。 スマートコントラクトとのやり取りには、`truffle console`を使用するのではなく、テストプロセスを自動化するスクリプトを作成します。 `scripts`というフォルダを作成し、`getMyTokenBalance.js`ファイルを追加してください。 このファイルで、Farm Token スマートコントラクトにおける MyToken 残高を確認できます。 +次に、スマートコントラクトのテストを実行します。 スマートコントラクトとのやり取りには、`truffle console`を使用するのではなく、テストプロセスを自動化するスクリプトを作成します。 `scripts`というフォルダを作成し、`getMyTokenBalance.js`ファイルを追加してください。 このファイルで、Farm TokenスマートコントラクトにおけるMyToken残高を確認できます。 ```javascript const MyToken = artifacts.require("MyToken") @@ -287,15 +287,15 @@ module.exports = async function (callback) { } ``` -このスクリプトを実行するには、以下の cli コマンドを実行します: +このスクリプトを実行するには、以下のcliコマンドを実行します: ```bash truffle exec .\scripts\getMyTokenBalance.js ``` -ここでは、予想通り「0」が表示されます。 Farm Token がデプロイされていないというエラーが表示された場合、Truffle ネットワークに最新バージョンのコントラクトコードが提供されていないことを意味します。 Ganache を閉じて再度 quickstart を実行してから、確実に`truffle migrate`を実行してください。 +ここでは、予想通り「0」が表示されます。 Farm Tokenがデプロイされていないというエラーが表示された場合、Truffleネットワークに最新バージョンのコントラクトコードが提供されていないことを意味します。 Ganacheを閉じて再度quickstartを実行してから、確実に`truffle migrate`を実行してください。 -次に、MyToken をこのスマートコントラクト上でステーキングしましょう。 `deposit(uint256 _amount)` は ERC-20 の`safeTransferFrom`関数を呼び出す関数ですから、ユーザーはまず、スマートコントラクトがユーザーの代理として MyToken を送信するのを承認する必要があります。 このため以下のスクリプトでは、まずこのステップを承認し、その上で関数を呼び出します。 +次に、MyTokenをこのスマートコントラクト上でステーキングしましょう。 `deposit(uint256 _amount)` はERC-20の`safeTransferFrom`関数を呼び出す関数ですから、ユーザーはまず、スマートコントラクトがユーザーの代理としてMyTokenを送信するのを承認する必要があります。 このため以下のスクリプトでは、まずこのステップを承認し、その上で関数を呼び出します。 ```javascript const MyToken = artifacts.require("MyToken") @@ -391,7 +391,7 @@ module.exports = async function (callback) { _transferMyTokenToFarmToken.js の出力_ -一番上のアカウントに Farm Token が入金されたことが確認できるので、スマートコントラクトに MyToken を入金することができました。 +一番上のアカウントにFarm Tokenが入金されたことが確認できるので、スマートコントラクトに MyTokenを入金することができました。 出金は、以下の方法で行います: @@ -462,7 +462,7 @@ module.exports = async function (callback) { } ``` -`truffle exec .\scripts\drawMyTokenFromTokenFarm.js`で、このスクリプトを実行できます。 以下の出力では、再度 My Token を取得できており、Farm Token がバーンされたことを確認できます。 +`truffle exec .\scripts\drawMyTokenFromTokenFarm.js`で、このスクリプトを実行できます。 以下の出力では、再度My Tokenを取得できており、Farm Tokenがバーンされたことを確認できます。 ![withdrawMyTokenFromTokenFarm.jsの出力](https://cdn-images-1.medium.com/max/2000/1*jHYlTFg0NgGbhASpsRvc0w.png) @@ -476,6 +476,6 @@ _withdrawMyTokenFromTokenFarm.js の出力_ [Ganache | Truffle Suite](https://www.trufflesuite.com/ganache) -[分散型金融(DeFi)とは 初心者向けガイド(2021 年更新版)(99bitcoins.com)](https://99bitcoins.com/what-is-defi/) +[分散型金融(DeFi)とは 初心者向けガイド(2021年更新版)(99bitcoins.com)](https://99bitcoins.com/what-is-defi/) -[DeFi - DeFi Llama の分散型金融リーダーボード](https://defillama.com/) +[DeFi - DeFi Llamaの分散型金融リーダーボード](https://defillama.com/) diff --git a/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md b/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md index 955806d011c..e059c68d8c6 100644 --- a/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md +++ b/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md @@ -21,7 +21,7 @@ address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" ## コントラクトの記述 {#writing-our-contract} -まずはじめに、[Remix](https://remix.ethereum.org/)にアクセスし、新規ファイルを作成してください。 Remix 画面の左上にあるアイコンから新規ファイルを追加し、適当なファイル名を付けてください。 +まずはじめに、[Remix](https://remix.ethereum.org/)にアクセスし、新規ファイルを作成してください。 Remix画面の左上にあるアイコンから新規ファイルを追加し、適当なファイル名を付けてください。 ![Remixインターフェースに新規ファイルを追加する](./remix.png) @@ -51,12 +51,12 @@ contract Counter { プログラミングの経験があれば、このプログラムの内容はすぐに推測できるでしょう。 以下は、各行ごとの説明です。 -- 4 行目: `Counter`という名前のコントラクトを定義します。 -- 7 行目:このコントラクトでは、`count`という名称を持つ、符号なしの 0 から始まる整数を保存します。 -- 10 行目:最初の関数は、コントラクトの状態(ステート)を変更し、変数`の値`を`1増やします`。 -- 15 行目:次の関数は、このスマートコントラクトに含まれない`count`変数の値を読み取るためのゲッターです。 ただし、このプログラムでは`count`変数を public で定義しているため、実際にはこの関数は必要ありません。例として挙げている点に注意してください。 +- 4行目: `Counter`という名前のコントラクトを定義します。 +- 7行目:このコントラクトでは、`count`という名称を持つ、符号なしの0から始まる整数を保存します。 +- 10行目:最初の関数は、コントラクトの状態(ステート)を変更し、変数`の値`を`1増やします`。 +- 15行目:次の関数は、このスマートコントラクトに含まれない`count`変数の値を読み取るためのゲッターです。 ただし、このプログラムでは`count`変数をpublicで定義しているため、実際にはこの関数は必要ありません。例として挙げている点に注意してください。 -皆さんがはじめて作成するシンプルなスマートコントラクトは、これですべてです。 ご覧のように、Java や C++のようなオブジェクト指向のプログラミング言語のクラスに似ていますね。 それではさっそく、このコントラクトを使ってみましょう。 +皆さんがはじめて作成するシンプルなスマートコントラクトは、これですべてです。 ご覧のように、JavaやC++のようなオブジェクト指向のプログラミング言語のクラスに似ていますね。 それではさっそく、このコントラクトを使ってみましょう。 ## コントラクトをデプロイする {#deploying-our-contract} @@ -82,17 +82,17 @@ contract Counter { ![Remix solidityコンパイラ上の「deploy」ボタン](./remix-deploy-button.png) -「Deploy」ボタンをクリックすると、画面下部に作成したコントラクトが表示されます。 画面左側にある矢印をクリックすると、コントラクトの内容が表示されます。 これが、このコントラクトにおける`counter`変数、`increment()`関数、およびゲッター`getCounter()`です。 +「Deploy」ボタンをクリックすると、画面下部に作成したコントラクトが表示されます。 画面左側にある矢印をクリックすると、コントラクトの内容が表示されます。 これが、このコントラクトにおける`counter`変数、`increment()`関数、およびゲッターです。 `count`もしくは`getCount`ボタンをクリックすると、このコントラクトの`count`変数の内容を取得して表示します。 この時点では`increment` 関数を呼び出していないので、「0」が表示されます。 ![Remix solidityコンパイラ上の「function」ボタン](./remix-function-button.png) -次に、 `increment`ボタンをクリックして、increment 関数を呼び出しましょう。 ご覧のように、実行したトランザクションのログは、ウィンドウの下部に表示されます。 `increment`ボタンではなくデータ取得のボタンをクリックした場合、ログが変化することが分かると思います。 これは、ブロックチェーン上のデータを読み込む際には、トランザクション(書き込み)や手数料が必要ないためです。 つまり、トランザクションが必要となるのは、ブロックチェーンの状態を変更する場合のみです。 +次に、 `increment`ボタンをクリックして、increment関数を呼び出しましょう。 ご覧のように、実行したトランザクションのログは、ウィンドウの下部に表示されます。 `increment`ボタンではなくデータ取得のボタンをクリックした場合、ログが変化することが分かると思います。 これは、ブロックチェーン上のデータを読み込む際には、トランザクション(書き込み)や手数料が必要ないためです。 つまり、トランザクションが必要となるのは、ブロックチェーンの状態を変更する場合のみです。 ![トランザクションログ](./transaction-log.png) -`increment()`機能を呼び出すトランザクションを作成する「increment」ボタンをクリックしてから「count」または「getCount」ボタンを再度クリックすると、count 変数が「0」以上である更新後の状態のスマートコントラクトが読み込まれます。 +`increment()`機能を呼び出すトランザクションを作成する「increment」ボタンをクリックしてから「count」または「getCount」ボタンを再度クリックすると、count変数が「0」以上である更新後の状態のスマートコントラクトが読み込まれます。 ![更新後のスマートコントラクトの状態](./updated-state.png) diff --git a/public/content/translations/ja/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md b/public/content/translations/ja/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md index a9a4a97b6fb..d0182de4825 100644 --- a/public/content/translations/ja/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md +++ b/public/content/translations/ja/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md @@ -18,7 +18,7 @@ sourceUrl: https://soliditydeveloper.com/max-contract-size [2016年11月22日](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/)、Spurious Dragonのハードフォークで[EIP-170](https://eips.ethereum.org/EIPS/eip-170)が導入され、24.576 KBのスマートコントラクトのサイズ制限が追加されました。 Solidityデベロッパーにとって、これはコントラクトに機能をどんどん追加していくうちに、ある時点でサイズ制限に達し、デプロイした際に以下のエラーが表示されてしまうということを意味します。 -`Warning: Contract code size exceeds 24576 bytes ( Spurious Dragonで追加された制限). This contract may not be deployable on Mainnet. オプティマイザを有効にすることを検討してください (効率的に実行されます!)、文字列の取り消しをオフにするか、ライブラリを使用します。` +`Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low "runs" value!), turning off revert strings, or using libraries.` この制限は、サービス拒否(DOS)攻撃を防ぐために導入されました。 コントラクトの呼び出しは、ガスの観点では比較的安価です。 しかし、イーサリアムノードのコントラクト呼び出しの影響は、(ディスクからのコードの読み込み、コードの前処理、マークルプルーフへのデータの追加の対象となる)呼び出されたコントラクトコードのサイズによっては、過度に増加することになります。 攻撃者がリソースをほとんど必要とせずに、他のノードでの大量の処理を生じさせるそうした状況では、DOS攻撃を受ける可能性が常に存在します。 diff --git a/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md b/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md index 7508fadf1c0..67b04a27616 100644 --- a/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md +++ b/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md @@ -8,7 +8,7 @@ tags: - "スマートコントラクト" - "検証" - "署名(signing)" -skill: advanced +skill: 中級 published: 2023-01-12 --- diff --git a/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md index d06bfdcbae6..f302f1e0429 100644 --- a/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -7,7 +7,7 @@ tags: - "Vyper" - "ERC-721" - "Python" -skill: beginner +skill: 初級 published: 2021-04-01 --- diff --git a/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md index 398d7294895..8ed9f4c77d2 100644 --- a/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md @@ -6,7 +6,7 @@ lang: ja tags: - "Solidity" - "erc-20" -skill: beginner +skill: 初級 published: 2021-03-09 --- @@ -46,7 +46,7 @@ Solidity言語は現在も急速に進化しており、新しいバージョン ```solidity /** - * EIP で定義された ERC20 規格の @dev インターフェース。 + * @dev Interface of the ERC20 standard as defined in the EIP. */ ``` diff --git a/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md index 119b5ca92b0..6b751fcd015 100644 --- a/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md +++ b/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -75,7 +75,7 @@ _**注意:** [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.a **すでにクライアントをインストール済みの場合は、** 現在のノードプロバイダーのURLを、APIキーを含むAlchemyのURL( `"https://eth-mainnet.alchemyapi.io/v2/your-api-key"`など)に変更します。 -**_注意:_** 以下のスクリプトは、 コマンドラインで実行するのではなく、**ノードコンテキスト**または**ファイルに保存した形で**実行する必要があります。 Nodeまたはnpmがインストールされていない場合は、[Mac用設定ガイド](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) をご覧ください。 +**_注意:_** 以下のスクリプトは、 コマンドラインで実行するのではなく、**ノードコンテキスト**または**ファイルに保存した形で**実行する必要があります。 Nodeまたはnpmがインストールされていない場合は、Mac用設定ガイド [](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) をご覧ください。 Alchemyと統合可能な[Web3ライブラリ](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries)は無数に存在しますが、このチュートリアルでは、Alchemyとシームレスに動作するように構築・設定されたweb3.jsの完全互換版である[Alchemy Web3](https://docs.alchemy.com/reference/api-overview)をお勧めします。 Alchemy Web3は、自動リトライや WebScoket に対する充実したサポートなどの利点を持っています。 diff --git a/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md index c24270cffca..66b00ecc96b 100644 --- a/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md +++ b/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -7,7 +7,7 @@ tags: - "Solidity" - "スマートコントラクト" - "セキュリティ" -skill: intermediate +skill: 中級 published: 2020-09-07 source: セキュアなコントラクトの開発 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis diff --git a/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md index 3be7dc73466..1d5bc962ef9 100644 --- a/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md +++ b/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -462,7 +462,7 @@ Provider、Signer、Contractの詳細については、[ethers.jsドキュメン `initMessage = "Hello world!"`を使用してコントラクトをデプロイしたことを思い出せますでしょうか? ここでは、スマートコントラクトに保存されているメッセージを読み取り、コンソールに出力します。 -JavaScriptでは、ネットワークとのやり取りで非同期関数を使います。 非同期関数の詳細については、[この記事の中ほど](https://blog.bitsrc.io/Understanding-asynchronous-javascript-the-event-loop-74cd408419ff)をご覧ください。 +JavaScriptでは、ネットワークとのやり取りで非同期関数を使います。 非同期関数の詳細については、[この記事の中ほど](https://blog.bitsrc.io/ Understanding-asynchronous-javascript-the-event-loop-74cd408419ff)をご覧ください。 以下のコードを使用して、スマートコントラクトの`message`関数を呼び出し、initメッセージを読み取ります。 diff --git a/public/content/translations/ja/developers/tutorials/hello-world-smart-contract/index.md b/public/content/translations/ja/developers/tutorials/hello-world-smart-contract/index.md index f9e9836d280..9ea7d2fbeec 100644 --- a/public/content/translations/ja/developers/tutorials/hello-world-smart-contract/index.md +++ b/public/content/translations/ja/developers/tutorials/hello-world-smart-contract/index.md @@ -4,7 +4,7 @@ description: イーサリアムでの簡単なスマートコントラクトの author: "elanh" tags: - "Solidity" - - "hardhat" + - "Hardhat" - "alchemy" - "スマートコントラクト" - "デプロイ" diff --git a/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md b/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md index 253dd2ee141..18cac862b60 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md @@ -7,16 +7,16 @@ tags: - "erc-721" - "Solidity" - "トークン" -skill: intermediate +skill: 中級 lang: ja published: 2020-03-19 source: Hackernoon sourceUrl: https://hackernoon.com/how-to-implement-an-erc721-market-1e1a32j9 --- -この記事では、イーサリアムのブロックチェーン用に、Craigslist のコードを作成する方法を紹介します。 +この記事では、イーサリアムのブロックチェーン用に、Craigslistのコードを作成する方法を紹介します。 -Gumtree、Ebay、Craigslist といったインターネット掲示板が登場する以前は、コルク板や紙媒体がその役割を担っていました。 このような掲示板は、学校の廊下、新聞、道端、店頭などに置かれていました。 +Gumtree、Ebay、Craigslistといったインターネット掲示板が登場する以前は、コルク板や紙媒体がその役割を担っていました。 このような掲示板は、学校の廊下、新聞、道端、店頭などに置かれていました。 しかし、インターネットの登場でこれが一変しました。 ひとつの掲示板を見る人の数が、桁違いに増えました。 それに伴い、掲示板の対象となる市場の効率性が非常に高まり、グローバルな規模に発展したのです。 Ebay は今や巨大な規模のビジネスに発展しましたが、元はと言えば実物の掲示板に起源をたどることができるのです。 @@ -24,11 +24,11 @@ Gumtree、Ebay、Craigslist といったインターネット掲示板が登場 ## マネタイゼーション(収益化) {#monetization} -パブリックブロックチェーンにおける掲示板のビジネスモデルは、Ebay などの企業のビジネスモデルとは異なります。 +パブリックブロックチェーンにおける掲示板のビジネスモデルは、Ebayなどの企業のビジネスモデルとは異なります。 まず第一に、 [脱中心化](/developers/docs/web2-vs-web3/)されている点を指摘すべきでしょう。 既存の掲示板プラットフォームは、自社サーバーを運用する必要があります。 しかし、分散型プラットフォームの運営はユーザーが実行するため、プラットフォーム所有者はコア・プラットフォームを稼働させるコストを負担する必要がありません。 -次に、プラットフォームにアクセスする機能を提供するウェブサイトまたはインターフェイスといったフロントエンドがあります。 フロントエンドには、いくつかのオプションがあります。 プラットフォーム所有者は、ユーザーのアクセス権限を制限し、インターフェイスを有料で使わせることができます。 一方で、プラットフォーム所有者がアクセス権限を開放し(人々に力を!)、ユーザーが自由にインターフェイスを開発できるようにすることもできます。 あるいは、これら 2 つの極端なアプローチの中間を選択することもできます。 +次に、プラットフォームにアクセスする機能を提供するウェブサイトまたはインターフェイスといったフロントエンドがあります。 フロントエンドには、いくつかのオプションがあります。 プラットフォーム所有者は、ユーザーのアクセス権限を制限し、インターフェイスを有料で使わせることができます。 一方で、プラットフォーム所有者がアクセス権限を開放し(人々に力を!)、ユーザーが自由にインターフェイスを開発できるようにすることもできます。 あるいは、これら2つの極端なアプローチの中間を選択することもできます。 _私よりもビジネス感覚に優れている方は、これをどのように収益化すべきかについてよくご存じでしょう。 分散型のクラシファイドについて私が言えるのは、既存の掲示板プラットフォームとは異なっており、おそらく収益化が可能だということです。_ @@ -57,19 +57,19 @@ struct Trade { 広告を投稿するユーザーは、 販売するアイテム、 アイテムの価格、 このアイテムに関する取引ステータス(受付中、販売済み、取消)を設定するだけです。 -すべての取引は、マッピングで保持されます。 と言うのも、Solidity ではほぼすべての要素をマッピングで規定するからです。 マッピングを使用するのが便利だからとも言えます。 +すべての取引は、マッピングで保持されます。 と言うのも、Solidityではほぼすべての要素をマッピングで規定するからです。 マッピングを使用するのが便利だからとも言えます。 ```solidity mapping(uint256 => Trade) public trades; ``` -マッピングを使用するとは、広告を投稿する前に広告ごとに ID を設定し、広告に対する操作を行うには広告 ID を知る必要があることを意味します。 スマートコントラクトあるいはフロントエンド上でマッピングの操作を行うには、いくつかの方法があります。 ヒントが必要であれば、気軽に問い合わせてください。 +マッピングを使用するとは、広告を投稿する前に広告ごとにIDを設定し、広告に対する操作を行うには広告IDを知る必要があることを意味します。 スマートコントラクトあるいはフロントエンド上でマッピングの操作を行うには、いくつかの方法があります。 ヒントが必要であれば、気軽に問い合わせてください。 次に、どのようなアイテムを扱う必要があり、取引の支払いにはどの通貨を使うかについて考える必要があります。 -取扱アイテムについては、[ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com)インターフェイスを実装すればよいです。このインターフェイスは、[デジタル資産と最も相性がよいのは事実ですが](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com)、現実に存在するアイテムをブロックチェーン上で表現するための手段に過ぎません。 この掲示板用の ERC-721 コントラクトはコンストラクタで指定するため、掲示板に含まれるアセットは前もってトークン化しておく必要があります。 +取扱アイテムについては、[ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com)インターフェイスを実装すればよいです。このインターフェイスは、[デジタル資産と最も相性がよいのは事実ですが](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com)、現実に存在するアイテムをブロックチェーン上で表現するための手段に過ぎません。 この掲示板用の ERC-721コントラクトはコンストラクタで指定するため、掲示板に含まれるアセットは前もってトークン化しておく必要があります。 -支払い機能についても、ほぼ同じです。 大部分のブロックチェーン・プロジェクトでは、独自の [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com)暗号通貨を定義しています。 DAI のように、著名な暗号通貨を採用する場合もあります。 このクラシファイド掲示板では、コンストラクタにおいて通貨を指定する必要があるだけです。 簡単ですね。 +支払い機能についても、ほぼ同じです。 大部分のブロックチェーン・プロジェクトでは、独自の [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com)暗号通貨を定義しています。 DAIのように、著名な暗号通貨を採用する場合もあります。 このクラシファイド掲示板では、コンストラクタにおいて通貨を指定する必要があるだけです。 簡単ですね。 ```solidity constructor ( diff --git a/public/content/translations/ja/developers/tutorials/how-to-mint-an-nft/index.md b/public/content/translations/ja/developers/tutorials/how-to-mint-an-nft/index.md index 21596e37a78..d1c9a062095 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-mint-an-nft/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-mint-an-nft/index.md @@ -175,7 +175,7 @@ PUBLIC_KEY = "your-public-account-address" async function mintNFT(tokenURI) { const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //get latest nonce - // トランザクション + //the transaction const tx = { 'from': PUBLIC_KEY, 'to': contractAddress, @@ -208,7 +208,7 @@ const nftContract = new web3.eth.Contract(contract.abi, contractAddress) async function mintNFT(tokenURI) { const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //get latest nonce - // トランザクション + //the transaction const tx = { from: PUBLIC_KEY, to: contractAddress, diff --git a/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md index 6c7785f0bd0..f0d80c70c92 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -8,7 +8,7 @@ tags: - "スマートコントラクト" - "テスト" - "モック" -skill: intermediate +skill: 中級 published: 2020-05-02 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/mocking-contracts diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md index c77aa024dd1..3712930532a 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md @@ -9,7 +9,7 @@ tags: - "セキュリティ" - "テスト" - "ファジング" -skill: advanced +skill: 上級 published: 2020-04-10 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna @@ -17,18 +17,18 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/progr ## インストール {#installation} -Echidna は、Docker またはコンパイル済みのバイナリを使用してインストールします。 +Echidnaは、Dockerまたはコンパイル済みのバイナリを使用してインストールします。 -### Docker から Echidna をインストールする {#echidna-through-docker} +### DockerからEchidnaをインストールする {#echidna-through-docker} ```bash docker pull trailofbits/eth-security-toolbox docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox ``` -_最後のコマンドは、現在のディレクトリにアクセスできる docker で eth-security-toolbox を実行します。 ホストからファイルを変更し、docker からファイル上のツールを実行できます。_ +_最後のコマンドは、現在のディレクトリにアクセスできるdockerでeth-security-toolboxを実行します。 ホストからファイルを変更し、dockerからファイル上のツールを実行できます。_ -docker で、以下を実行します: +dockerで、以下を実行します: ```bash solc-select 0.5.11 @@ -41,31 +41,31 @@ cd /home/training ## プロパティベースのファジングとは {#introduction-to-property-based-fuzzing} -Echidna は、プロパティベースのファザーです。これについては、以前のブログ投稿([1](https://blog.trailofbits.com/2018/03/09/echidna-a-smart-fuzzer-for-ethereum/)、[2](https://blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/)、[3](https://blog.trailofbits.com/2020/03/30/an-echidna-for-all-seasons/))を参照してください。 +Echidnaは、プロパティベースのファザーです。これについては、以前のブログ投稿([1](https://blog.trailofbits.com/2018/03/09/echidna-a-smart-fuzzer-for-ethereum/)、[2](https://blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/)、[3](https://blog.trailofbits.com/2020/03/30/an-echidna-for-all-seasons/))を参照してください。 ### ファジング {#fuzzing} -[ファジング ](https://wikipedia.org/wiki/Fuzzing)は、セキュリティコミュニティでよく知られているテクニックです。 ファジングでは、ある程度ランダムな入力を生成してプログラムのバグを発見します。 通常のソフトウェアを対象とするファザー([AFL](http://lcamtuf.coredump.cx/afl/)や[LibFuzzer](https://llvm.org/docs/LibFuzzer.html)など)は、効率的にバグを特定できるツールであると評価されています。 +[ファジング ](https://wikipedia.org/wiki/Fuzzing)は、セキュリティコミュニティでよく知られているテクニックです。 ファジングでは、プログラム内のバグを見つけるために、大小のランダムな入力を生成することを行います。 通常のソフトウェアを対象とするファザー([AFL](http://lcamtuf.coredump.cx/afl/)や[LibFuzzer](https://llvm.org/docs/LibFuzzer.html)など)は、効率的にバグを特定できるツールであると評価されています。 入力をまったくランダムに生成するだけでなく、適切な入力を生成するための多くのテクニックや戦略を活用できます: - 各実行から取得したフィードバックに基づき、入力を生成する。 例えば、新しく生成された入力値が新しいパスの発見を導いている場合、それに近い新しい入力値を生成することは理にかなっています。 - 構造上の制約を考慮した入力を生成する。 例えば、入力にチェックサム付のヘッダーが含まれている場合、ファザーにチェックサムを検証する入力を生成させることも有益です。 -- 既知の入力に基づいて新たな入力を生成する。大規模な有効な入力のデータセットにアクセスできる場合、まったくランダムに生成するのではなく、それらに基づいて新たな入力を生成することができます。 この場合、参照するデータを*シード*と呼びます。 +- 既知の入力に基づいて新たな入力を生成する。大規模な有効な入力のデータセットにアクセスできる場合、まったくランダムに生成するのではなく、それらに基づいて新たな入力を生成することができます。 この場合、参照するデータを_シード_と呼びます。 ### プロパティベースのファジング {#property-based-fuzzing} -Echidna は、プロパティに基づくファジングを実行するファザーであり、[QuickCheck](https://wikipedia.org/wiki/QuickCheck)の影響を強く受けたプログラムです。 クラッシュを監視する従来のファザーとは異なり、Echidna では、ユーザー定義の不変条件を壊そうとします。 +Echidnaは、プロパティに基づくファジングを実行するファザーであり、[QuickCheck](https://wikipedia.org/wiki/QuickCheck)の影響を強く受けたプログラムです。 クラッシュを監視する従来のファザーとは異なり、Echidnaでは、ユーザー定義の不変条件を壊そうとします。 -スマートコントラクトにおける不変条件とは、コントラクトにおいて不適切または無効な状態が発生しうる Solidity の関数を意味します。具体的には、以下が挙げられます: +スマートコントラクトにおける不変条件とは、コントラクトにおいて不適切または無効な状態が発生しうるSolidityの関数を意味します。具体的には、以下が挙げられます: - 不適切なアクセス制御:攻撃者がコントラクトの所有者になる場合。 - 不適切な状態マシン:コントラクトの一次停止中に、トークンを送信できる。 - 不適切な計算: ユーザーは残高をアンダーフローし無制限に無料トークンを取得できる。 -### Echidna を使って、プロパティをテストする {#testing-a-property-with-echidna} +### Echidnaを使って、プロパティをテストする {#testing-a-property-with-echidna} -それでは、Echidna を使ってスマートコントラクトをテストする方法を見てみましょう。 対象は、[ `token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol)のスマートコントラクトです。 +それでは、Echidnaを使ってスマートコントラクトをテストする方法を見てみましょう。 対象は、[ `token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol)のスマートコントラクトです。 ```solidity contract Token{ @@ -85,24 +85,24 @@ contract Token{ このトークンは、以下のプロパティを持つと想定します: -- ユーザーは、最大 1000 トークンを所持できる -- このトークン(ERC-20 トークンではない)は、送信不可である +- ユーザーは、最大1000トークンを所持できる +- このトークン(ERC-20トークンではない)は、送信不可である ### プロパティを記述する {#write-a-property} -Echidna のプロパティは、Solidity の関数です。 プロパティは、以下の条件を満たす必要があります: +Echidnaのプロパティは、Solidityの関数です。 プロパティは、以下の条件を満たす必要があります: - 引数を持たない - 実行に成功した場合、 `true` を返す - `echidna`で始まる名前を持つ -Echidna は、以下を実行します: +Echidnaは、以下を実行します: - このプロパティをテストするためのランダムなトランザクションを自動で生成する。 - プロパティが `false`またはエラーを返すすべてのトランザクションを報告する。 - プロパティの呼び出しに伴う副作用を無視する(つまり、プロパティが状態変数を変更した場合、テスト後にこの変更を破棄する) -以下のプロパティは、呼び出し元のユーザーが所持するトークンが 1000 以下であることを確認します。 +以下のプロパティは、呼び出し元のユーザーが所持するトークンが1000以下であることを確認します。 ```solidity function echidna_balance_under_1000() public view returns(bool){ @@ -124,32 +124,32 @@ contract TestToken is Token{ ### コントラクトを開始する {#initiate-a-contract} -Echidna では、引数なしの[コンストラクタ](/developers/docs/smart-contracts/anatomy/#constructor-functions)が必要です。 コントラクトにおいて特定の初期化が必要な場合、コンストラクタ上で実行する必要があります。 +Echidnaでは、引数なしの[コンストラクタ](/developers/docs/smart-contracts/anatomy/#constructor-functions)が必要です。 コントラクトにおいて特定の初期化が必要な場合、コンストラクタ上で実行する必要があります。 -Echidna には、いくつかの特定のアドレスが含まれます: +Echidnaには、いくつかの特定のアドレスが含まれます: - `0x00a329c0648769A73afAc7F9381E08FB43dBEA72`:コンストラクタを呼び出すアドレスです。 - `0x10000`、`0x20000`、`0x00a329C0648769a73afAC7F9381e08fb43DBEA70`:他の関数をランダムに呼び出すアドレスです。 このチュートリアルでは特定の初期化を実行する必要がないため、コンストラクタは空になります。 -### Echidna を実行する {#run-echidna} +### Echidnaを実行する {#run-echidna} -以下のコードで、Echidna を起動します: +以下のコードで、Echidnaを起動します: ```bash -$ echidna-test contract.sol +echidna-test contract.sol ``` -contract.sol に複数のコントラクトが含まれる場合、実行したいコントラクトを指定できます: +contract.solに複数のコントラクトが含まれる場合、実行したいコントラクトを指定できます: ```bash -$ echidna-test contract.sol --contract MyContract +echidna-test contract.sol --contract MyContract ``` ### プロパティテストのまとめ {#summary-testing-a-property} -以下は、このチュートリアルにおける Echidna の実行をまとめたものです。 +以下は、このチュートリアルにおけるEchidnaの実行をまとめたものです。 ```solidity contract TestToken is Token{ @@ -161,7 +161,7 @@ contract TestToken is Token{ ``` ```bash -$ echidna-test testtoken.sol --contract TestToken +echidna-test testtoken.sol --contract TestToken ... echidna_balance_under_1000: failed!💥 @@ -172,7 +172,7 @@ echidna_balance_under_1000: failed!💥 ... ``` -Echidna は、 `backdoor`が呼び出された場合、このプロパティが侵害されることを確認しました。 +Echidnaは、 `backdoor`が呼び出された場合、このプロパティが侵害されることを確認しました。 ## ファジング中に呼び出す関数を絞り込む {#filtering-functions-to-call-during-a-fuzzing-campaign} @@ -227,10 +227,10 @@ contract C { } ``` -この簡単な例は、状態変数を変更する特定のトランザクションのシーケンスを Echidna に見つけさせるものです。 これは、ファザーにとって容易ではありません([Manticore](https://github.com/trailofbits/manticore)のようなシンボリック実行ツールを使用することをお勧めします)。 Echidna で、以下のように検証を実行します: +この簡単な例は、状態変数を変更する特定のトランザクションのシーケンスをEchidnaに見つけさせるものです。 これは、ファザーにとって容易ではありません([Manticore](https://github.com/trailofbits/manticore)のようなシンボリック実行ツールを使用することをお勧めします)。 Echidnaで、以下のように検証を実行します: ```bash -$ echidna-test multi.sol +echidna-test multi.sol ... echidna_state4: passed! 🎉 Seed: -3684648582249875403 @@ -238,7 +238,7 @@ Seed: -3684648582249875403 ### 対象の関数を絞り込む {#filtering-functions} -2 つのリセット関数(`reset1`と`reset2`)がすべての状態変数を`false`に設定するため、Echidna はこのコントラクトをテストするための正しいシーケンスを見つけられません。 しかし Echidna では、リセット関数をブラックリストに含めるか、 `f`、`g`、 `h`、および `i`の関数のみをホワイトリストに含める特別の機能が利用できます。 +2つのリセット関数(`reset1`と`reset2`)がすべての状態変数を`false`に設定するため、Echidnaはこのコントラクトをテストするための正しいシーケンスを見つけられません。 しかしEchidnaでは、リセット関数をブラックリストに含めるか、 `f`、`g`、 `h`、および `i`の関数のみをホワイトリストに含める特別の機能が利用できます。 関数をブラックリストに登録するには、設定ファイルを以下のように指定します: @@ -257,12 +257,12 @@ filterFunctions: ["f", "g", "h", "i"] - `filterBlacklist`の初期値は`true`です。 - 絞り込みは、名前のみ(パラメータなし)で実行されます。 `f()`と`f(uint256)`の両方が含まれる場合、`"f"`で絞り込むと両方の関数がヒットします。 -### Echidna を実行する {#run-echidna-1} +### Echidnaを実行する {#run-echidna-1} -設定ファイル `blacklist.yaml` に従って Echidna を実行するには、以下のようにします: +設定ファイル `blacklist.yaml` に従ってEchidnaを実行するには、以下のようにします: ```bash -$ echidna-test multi.sol --config blacklist.yaml +echidna-test multi.sol --config blacklist.yaml ... echidna_state4: failed!💥 Call sequence: @@ -272,11 +272,11 @@ echidna_state4: failed!💥 i() ``` -Echidna は、プロパティを false にするトランザクションのシーケンスを瞬時に特定します。 +Echidnaは、プロパティをfalseにするトランザクションのシーケンスを瞬時に特定します。 ### 対象の関数を絞り込む作業のまとめ {#summary-filtering-functions} -Echidna では、ファジングで呼び出す機能を絞り込むために、ブラックリストあるいはホワイトリストの関数を使用します: +Echidnaでは、ファジングで呼び出す機能を絞り込むために、ブラックリストあるいはホワイトリストの関数を使用します: ```yaml filterBlacklist: true @@ -284,15 +284,15 @@ filterFunctions: ["f1", "f2", "f3"] ``` ```bash -$ echidna-test contract.sol --config config.yaml +echidna-test contract.sol --config config.yaml ... ``` -Echidna は、`filterBlacklist`のブール値に基づき、`f1`、`f2`、および `f3`の関数をブラックリストに含めるか、これらの関数のみを呼び出してファジングを実行します。 +Echidnaは、`filterBlacklist`のブール値に基づき、`f1`、`f2`、および `f3`の関数をブラックリストに含めるか、これらの関数のみを呼び出してファジングを実行します。 -## Echidna で Solidity のアサーションをテストする方法 {#how-to-test-soliditys-assert-with-echidna} +## EchidnaでSolidityのアサーションをテストする方法 {#how-to-test-soliditys-assert-with-echidna} -次の短いチュートリアルでは、Echidna を使って、コントラクトに含まれるアサーションをテストします。 以下のようなコントラクトを想定します: +次の短いチュートリアルでは、Echidnaを使って、コントラクトに含まれるアサーションをテストします。 以下のようなコントラクトを想定します: ```solidity contract Incrementor { @@ -309,7 +309,7 @@ contract Incrementor { ### アサーションを記述する {#write-an-assertion} -引き算を実行した後に、`tmp`の値が`counter`の値以下であることを確認したいとします。 Echidna のプロパティで記述することもできますが、`tmp`値をどこかに格納する必要があります。 これには、以下のようなアサーションを用いることができます: +引き算を実行した後に、`tmp`の値が`counter`の値以下であることを確認したいとします。 Echidnaのプロパティで記述することもできますが、`tmp`値をどこかに格納する必要があります。 これには、以下のようなアサーションを用いることができます: ```solidity contract Incrementor { @@ -324,18 +324,18 @@ contract Incrementor { } ``` -### Echidna を実行する {#run-echidna-2} +### Echidnaを実行する {#run-echidna-2} -アサーションの失敗をテストできるようにするには、[Echidna の設定ファイル](https://github.com/crytic/echidna/wiki/Config)として `config.yaml` を作成します: +アサーションの失敗をテストできるようにするには、[Echidnaの設定ファイル](https://github.com/crytic/echidna/wiki/Config)として `config.yaml` を作成します: ```yaml checkAsserts: true ``` -このコントラクトを Echidna で実行すると、次のような期待通りの結果が得られます: +このコントラクトをEchidnaで実行すると、次のような期待通りの結果が得られます: ```bash -$ echidna-test assert.sol --config config.yaml +echidna-test assert.sol --config config.yaml Analyzing contract: assert.sol:Incrementor assertion in inc: failed!💥 Call sequence, shrinking (2596/5000): @@ -346,7 +346,7 @@ assertion in inc: failed!💥 Seed: 1806480648350826486 ``` -このように、Echidna では、アサーション違反の一部を`inc`関数で報告します。 1 つの関数に対し複数のアサーションを含めることは可能ですが、どのアサーションが失敗したのか区別できなくなります。 +このように、Echidnaでは、アサーション違反の一部を`inc`関数で報告します。 1つの関数に対し複数のアサーションを含めることは可能ですが、どのアサーションが失敗したのか区別できなくなります。 ### アサーションをいつ、どのように使用すべきか {#when-and-how-use-assertions} @@ -362,7 +362,7 @@ function f(..) public { ``` -反対に、Echidna のプロパティを明示的に使用する場合、トランザクションがランダムに実行されるため、チェックをどの時点で強制的に実行させるかを決定しにくくなります。 この場合、以下のような回避策を用いることもできます: +反対に、Echidnaのプロパティを明示的に使用する場合、トランザクションがランダムに実行されるため、チェックをどの時点で強制的に実行させるかを決定しにくくなります。 この場合、以下のような回避策を用いることもできます: ```solidity function echidna_assert_after_f() public returns (bool) { @@ -377,16 +377,16 @@ function echidna_assert_after_f() public returns (bool) { - どの引数を使って`f`を呼び出すべきかが不明確である。 - `f`が元に戻された場合、このプロパティは違反になる。 -全般的なアサーションの使用については、この[John Regehr の提案](https://blog.regehr.org/archives/1091)に従うことを推奨します: +全般的なアサーションの使用については、この[John Regehrの提案](https://blog.regehr.org/archives/1091)に従うことを推奨します: - アサーションチェック中には、副作用を強制しない。 例:`assert(ChangeStateAndReturn() == 1)` - 明らかなステートメントは、アサートしない。 例:`var`を`uint`と宣言している場合、`assert(var >= 0)`は必要ない。 -最後に、`assert`の代わりに`require`を用いるのは**避けてください**。Echidna では require を検出できません。(ただしこの場合でも、コントラクトは元に戻されます)。 +最後に、`assert`の代わりに`require`を用いるのは**避けてください**。Echidnaではrequireを検出できません。(ただしこの場合でも、コントラクトは元に戻されます)。 ### アサーションチェックのまとめ {#summary-assertion-checking} -以下は、この例における Echidna の実行をまとめたものです: +以下は、この例におけるEchidnaの実行をまとめたものです: ```solidity contract Incrementor { @@ -402,7 +402,7 @@ contract Incrementor { ``` ```bash -$ echidna-test assert.sol --config config.yaml +echidna-test assert.sol --config config.yaml Analyzing contract: assert.sol:Incrementor assertion in inc: failed!💥 Call sequence, shrinking (2596/5000): @@ -413,11 +413,11 @@ assertion in inc: failed!💥 Seed: 1806480648350826486 ``` -Echidna は、`inc`のアサーションにつき、この関数が大きな引数で複数回呼び出された場合に違反となりうることを発見しました。 +Echidnaは、`inc`のアサーションにつき、この関数が大きな引数で複数回呼び出された場合に違反となりうることを発見しました。 -## Echidna コーパスを収集、修正する {#collecting-and-modifying-an-echidna-corpus} +## Echidnaコーパスを収集、修正する {#collecting-and-modifying-an-echidna-corpus} -次に、Echidna を使ってトランザクションのコーパスを収集し、これを利用する方法について見ていきましょう。 対象は、[`magic.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/magic.sol)のスマートコントラクトです。 +次に、Echidnaを使ってトランザクションのコーパスを収集し、これを利用する方法について見ていきましょう。 対象は、[`magic.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/magic.sol)のスマートコントラクトです。 ```solidity contract C { @@ -437,10 +437,10 @@ contract C { } ``` -以下の短いコードは、状態変数を変更する特定の値を Echidna に発見させます。 これは、ファザーにとって容易ではありません([Manticore](https://github.com/trailofbits/manticore)のようなシンボリック実行ツールを使用することをお勧めします)。 Echidna で、以下のように検証を実行します: +以下の短いコードは、状態変数を変更する特定の値をEchidnaに発見させます。 これは、ファザーにとって容易ではありません([Manticore](https://github.com/trailofbits/manticore)のようなシンボリック実行ツールを使用することをお勧めします)。 Echidnaで、以下のように検証を実行します: ```bash -$ echidna-test magic.sol +echidna-test magic.sol ... echidna_magic_values: passed! 🎉 @@ -448,17 +448,17 @@ echidna_magic_values: passed! 🎉 Seed: 2221503356319272685 ``` -ただし Echidna では、ファジングの実行中もコーパスを収集することができます。 +ただしEchidnaでは、ファジングの実行中もコーパスを収集することができます。 ### コーパスを収集する {#collecting-a-corpus} コーパスを収集するには、まずコーパスのディレクトリを作成します: ```bash -$ mkdir corpus-magic +mkdir corpus-magic ``` -さらに、[Echidna の設定ファイル](https://github.com/crytic/echidna/wiki/Config)である `config.yaml` を作成します: +さらに、[Echidnaの設定ファイル](https://github.com/crytic/echidna/wiki/Config)である `config.yaml` を作成します: ```yaml coverage: true @@ -468,10 +468,10 @@ corpusDir: "corpus-magic" これで、ツールを実行しながら収集したコーパスをチェックできるようになりました: ```bash -$ echidna-test magic.sol --config config.yaml +echidna-test magic.sol --config config.yaml ``` -この段階では Echidna はまだ適切な magic 値を特定できませんが、収集したコーパスを確認することはできます。 例えば、以下のようなファイルが収集されました: +この段階ではEchidnaはまだ適切なmagic値を特定できませんが、収集したコーパスを確認することはできます。 例えば、以下のようなファイルが収集されました: ```json [ @@ -520,16 +520,16 @@ $ echidna-test magic.sol --config config.yaml ### コーパスをシードする {#seeding-a-corpus} -Echidna を`magic`関数に対応するように設定する必要があります。 この入力が適切なパラメータを使用できるように、コピーし、変更します。 +Echidnaを`magic`関数に対応するように設定する必要があります。 この入力が適切なパラメータを使用できるように、コピーし、変更します。 ```bash -$ cp corpus/2712688662897926208.txt corpus/new.txt +cp corpus/2712688662897926208.txt corpus/new.txt ``` -`magic(42,129,333,0)`を呼び出せるように`new.txt`を変更します。 その上で、Echidna を再実行します: +`magic(42,129,333,0)`を呼び出せるように`new.txt`を変更します。 その上で、Echidnaを再実行します: ```bash -$ echidna-test magic.sol --config config.yaml +echidna-test magic.sol --config config.yaml ... echidna_magic_values: failed!💥 Call sequence: @@ -546,7 +546,7 @@ Seed: -7293830866560616537 ## ガス消費量が多いトンラザクションを見つける {#finding-transactions-with-high-gas-consumption} -ガス消費量が多いトランザクションを特定するために、Echidna を使用する方法について見ていきましょう。 対象は、次のスマートコントラクトです: +ガス消費量が多いトランザクションを特定するために、Echidnaを使用する方法について見ていきましょう。 対象は、次のスマートコントラクトです: ```solidity contract C { @@ -573,10 +573,10 @@ contract C { ここでは、`expensive`でガス消費量が高くなる可能性があります。 -この時点では、Echidna 上で常にテストすべきプロパティを設定する必要があり、`echidna_test`は常に`true`を返します。 Echidna を実行して、これを確認します: +この時点では、Echidna上で常にテストすべきプロパティを設定する必要があり、`echidna_test`は常に`true`を返します。 Echidnaを実行して、これを確認します: ``` -$ echidna-test gas.sol +echidna-test gas.sol ... echidna_test: passed! 🎉 @@ -585,7 +585,7 @@ Seed: 2320549945714142710 ### ガス消費量を測定する {#measuring-gas-consumption} -Ethidna でガスの消費量を確認できるようにするには、 `config.yaml`を以下のように設定します: +Ethidnaでガスの消費量を確認できるようにするには、 `config.yaml`を以下のように設定します: ```yaml estimateGas: true @@ -598,12 +598,12 @@ seqLen: 2 estimateGas: true ``` -### Echidna を実行する {#run-echidna-3} +### Echidnaを実行する {#run-echidna-3} -設定が完了したら、次のように Echidna を実行します: +設定が完了したら、次のようにEchidnaを実行します: ```bash -$ echidna-test gas.sol --config config.yaml +echidna-test gas.sol --config config.yaml ... echidna_test: passed! 🎉 @@ -648,10 +648,10 @@ contract C { } ``` -Echidna がすべての関数を呼び出せる場合、ガス代が高いトランザクションを見つけることは困難になるでしょう。 +Echidnaがすべての関数を呼び出せる場合、ガス代が高いトランザクションを見つけることは困難になるでしょう。 ``` -$ echidna-test pushpop.sol --config config.yaml +echidna-test pushpop.sol --config config.yaml ... pop used a maximum of 10746 gas ... @@ -670,7 +670,7 @@ filterFunctions: ["pop", "clear"] ``` ``` -$ echidna-test pushpop.sol --config config.yaml +echidna-test pushpop.sol --config config.yaml ... push used a maximum of 40839 gas ... @@ -679,15 +679,15 @@ check used a maximum of 1484472 gas ### ガス消費量が高いトランザクションを見つける作業のまとめ {#summary-finding-transactions-with-high-gas-consumption} -Echidna では、`estimateGas`の設定オプションを使用してガス消費量の多いトランザクションを特定することができます: +Echidnaでは、`estimateGas`の設定オプションを使用してガス消費量の多いトランザクションを特定することができます: ```yaml estimateGas: true ``` ```bash -$ echidna-test contract.sol --config config.yaml +echidna-test contract.sol --config config.yaml ... ``` -Echidna は、ファジングを実行した後、各関数ごとにガス消費量が最大となるシーケンスを報告します。 +Echidnaは、ファジングを実行した後、各関数ごとにガス消費量が最大となるシーケンスを報告します。 diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md index 103c7ab896e..41a17d872c5 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md @@ -9,45 +9,45 @@ tags: - "セキュリティ" - "テスト" - "フォーマルな検証" -skill: advanced +skill: 上級 published: 2020-01-13 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore --- -このチュートリアルでは、Manticore を使用してスマートコントラクトのバグを自動で特定する方法を学びます。 +このチュートリアルでは、Manticoreを使用してスマートコントラクトのバグを自動で特定する方法を学びます。 ## インストール {#installation} -Manticore を使用するには、Python 3.6 が必要です。 pip でインストールすることも、Docker を使用してインストールすることもできます。 +Manticoreを使用するには、Python 3.6 が必要です。 pipでインストールすることも、Dockerを使用してインストールすることもできます。 -### Docker で Manticore をインストールする場合 {#manticore-through-docker} +### DockerでManticoreをインストールする場合 {#manticore-through-docker} ```bash docker pull trailofbits/eth-security-toolbox docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox ``` -_最後のコマンドは、現在のディレクトリにアクセスできる docker で eth-security-toolbox を実行します。 ホストからファイルを変更し、docker からファイル上のツールを実行することができます。_ +_最後のコマンドは、現在のディレクトリにアクセスできるdockerでeth-security-toolboxを実行します。 ホストからファイルを変更し、dockerからファイル上のツールを実行することができます。_ -Docker で、以下を実行します: +Dockerで、以下を実行します: ```bash solc-select 0.5.11 cd /home/trufflecon/ ``` -### pip で Manticore をインストールする場合 {#manticore-through-pip} +### pipでManticoreをインストールする場合 {#manticore-through-pip} ```bash pip3 install --user manticore ``` -solc 0.5.11 を推奨します。 +solc 0.5.11を推奨します。 ### スクリプトを実行する {#running-a-script} -Python 3 では、以下の Python スクリプトを実行します: +Python 3では、以下のPythonスクリプトを実行します: ```bash python3 script.py @@ -57,7 +57,7 @@ python3 script.py ### 動的シンボリック実行とは何か {#dynamic-symbolic-execution-in-a-nutshell} -動的シンボリック実行(DSE)は、高度な意味認識に基づき状態空間を探索するプログラム解析手法です。 この手法は、`path predicates`と呼ばれる数式で表される「プログラム・パス」を発見するものです。 概念的には、この手法は 2 つのステップによりパス述語を操作します: +動的シンボリック実行(DSE)は、高度な意味認識に基づき状態空間を探索するプログラム解析手法です。 この手法は、`path predicates`と呼ばれる数式で表される「プログラム・パス」を発見するものです。 概念的には、この手法は2つのステップによりパス述語を操作します: 1. プログラムの入力に対する制約を参照して、プログラム・パスを構築します。 2. プログラム・パスは、関連パスを実行させるプログラムの入力を生成します。 @@ -66,7 +66,7 @@ python3 script.py ### パス述語の具体例 {#path-predicate-example} -DSE の仕組みを理解するために、以下の例を考えてみましょう。 +DSEの仕組みを理解するために、以下の例を考えてみましょう。 ```solidity function f(uint a){ @@ -78,16 +78,16 @@ function f(uint a){ } ``` -`f()`には 2 つのパスが含まれているため、DSE により、2 つの異なるパス述語が構築されます。 +`f()`には2つのパスが含まれているため、DSEにより、2つの異なるパス述語が構築されます。 -- 第 1 のパス: `a == 65` -- 第 2 のパス: `Not (a == 65)` +- 第1のパス: `a == 65` +- 第2のパス: `Not (a == 65)` -それぞれのパス述語は、いわゆる[SMT ソルバー](https://wikipedia.org/wiki/Satisfiability_modulo_theories)に投入できる数式であり、SMT ソルバーはこの等式を解決しようとします。 `第1のパス`では、ソルバーは、このパスが`a = 65`で探索可能だと返します。 `第2のパス`では、ソルバーは、`a`に対し、65 以外の任意の値を与えることができます(例: `a = 0`)。 +それぞれのパス述語は、いわゆる[SMTソルバー](https://wikipedia.org/wiki/Satisfiability_modulo_theories)に投入できる数式であり、SMTソルバーはこの等式を解決しようとします。 `第1のパス`では、ソルバーは、このパスが`a = 65`で探索可能だと返します。 `第2のパス`では、ソルバーは、`a`に対し、65以外の任意の値を与えることができます(例: `a = 0`)。 ### プロパティを検証する {#verifying-properties} -Manticore では、各パスの実行全体を完全に制御できます。 このため、ほぼすべての事項に対して任意の制限を加えることができます。 この制御を通じて、コントラクトのプロパティを作成することができます。 +Manticoreでは、各パスの実行全体を完全に制御できます。 このため、ほぼすべての事項に対して任意の制限を加えることができます。 この制御を通じて、コントラクトのプロパティを作成することができます。 次の例を考えてみましょう: @@ -98,11 +98,11 @@ function unsafe_add(uint a, uint b) returns(uint c){ } ``` -この関数を探索するには、1 つのパスしか存在しません。 +この関数を探索するには、1つのパスしか存在しません。 -- パス 1: `c = a + b` +- パス1: `c = a + b` -Manticore を使用することで、オーバーフローの有無を確認し、パス述語に制限を加えられます。 +Manticoreを使用することで、オーバーフローの有無を確認し、パス述語に制限を加えられます。 - `c = a + b AND (c < a OR c < b)` @@ -125,11 +125,11 @@ function safe_add(uint a, uint b) returns(uint c){ この数式は解くことができません。言い換えれば、`safe_add`において、`c`の値が常に増加することを**証明**しています。 -このように、DSE はコード上の任意の制限について検証できるパワフルなツールです。 +このように、DSEはコード上の任意の制限について検証できるパワフルなツールです。 -## Manticore で実行する {#running-under-manticore} +## Manticoreで実行する {#running-under-manticore} -以下に、Manticore API を用いて、スマートコントラクトを探索する方法を紹介します。 対象となるスマートコントラクトは、[`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol)です。 +以下に、Manticore APIを用いて、スマートコントラクトを探索する方法を紹介します。 対象となるスマートコントラクトは、[`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol)です。 ```solidity pragma solidity >=0.4.24 <0.6.0; @@ -145,7 +145,7 @@ contract Simple { ### スタンドアロンの探索を実行する {#run-a-standalone-exploration} -以下のコマンドから、スマートコントラクト上で直接 Manticore を実行できます(`project`は、Solidity ファイルでもプロジェクトディレクトリでも構いません)。 +以下のコマンドから、スマートコントラクト上で直接Manticoreを実行できます(`project`は、Solidityファイルでもプロジェクトディレクトリでも構いません)。 ```bash $ manticore project @@ -166,35 +166,35 @@ $ manticore project ... ``` -Manticore は、追加情報が提供されない限り、新規のシンボリック・トランザクションを使って、コントラクト上で新規パスが発見されるまでコントラクトを探索します。 Manticore では、トランザクションが失敗した場合(例:状態が元に戻された後)は、新規のトランザクションを実行しません。 +Manticoreは、追加情報が提供されない限り、新規のシンボリック・トランザクションを使って、コントラクト上で新規パスが発見されるまでコントラクトを探索します。 Manticoreでは、トランザクションが失敗した場合(例:状態が元に戻された後)は、新規のトランザクションを実行しません。 -Manticore では、 `mcore_*`ディレクトリに情報を出力します。 このディレクトリには、以下が含まれます: +Manticoreでは、 `mcore_*`ディレクトリに情報を出力します。 このディレクトリには、以下が含まれます: - `global.summary`:カバレッジとコンパイラに関する警告 - `test_XXXXX.summary`:テストケースごとのカバレッジ、最後の命令、およびアカウント残高 - `test_XXXXX.tx`:テストケースごとの詳細なトランザクションリスト -この例では、以下に該当する 7 つのテストケースが特定されました(ファイル名の順番は異なるかもしれません): +この例では、以下に該当する7つのテストケースが特定されました(ファイル名の順番は異なるかもしれません): -| | トランザクション 0 | トランザクション 1 | トランザクション 2 | 結果 | -| :------------------: | :----------------: | :----------------: | ------------------ | :----: | -| **test_00000000.tx** | コントラクトの作成 | f(!=65) | f(!=65) | STOP | -| **test_00000001.tx** | コントラクトの作成 | フォールバック関数 | | REVERT | -| **test_00000002.tx** | コントラクトの作成 | | | RETURN | -| **test_00000003.tx** | コントラクトの作成 | f(65) | | REVERT | -| **test_00000004.tx** | コントラクトの作成 | f(!=65) | | STOP | -| **test_00000005.tx** | コントラクトの作成 | f(!=65) | f(65) | REVERT | -| **test_00000006.tx** | コントラクトの作成 | f(!=65) | フォールバック関数 | REVERT | +| | トランザクション 0 | トランザクション 1 | トランザクション 2 | 結果 | +|:--------------------:|:----------:|:----------:| ---------- |:------:| +| **test_00000000.tx** | コントラクトの作成 | f(!=65) | f(!=65) | STOP | +| **test_00000001.tx** | コントラクトの作成 | フォールバック関数 | | REVERT | +| **test_00000002.tx** | コントラクトの作成 | | | RETURN | +| **test_00000003.tx** | コントラクトの作成 | f(65) | | REVERT | +| **test_00000004.tx** | コントラクトの作成 | f(!=65) | | STOP | +| **test_00000005.tx** | コントラクトの作成 | f(!=65) | f(65) | REVERT | +| **test_00000006.tx** | コントラクトの作成 | f(!=65) | フォールバック関数 | REVERT | _探索サマリーにおける「f(!=65)」は、f が 65 以外の値で呼び出されたことを意味します。_ -ご覧のように、Manticore では、すべての成功した/元に戻されたトランザクションにつき、固有のテストケースを生成します。 +ご覧のように、Manticoreでは、すべての成功した/元に戻されたトランザクションにつき、固有のテストケースを生成します。 高速な探索を行いたい場合は、`--quick-mode`フラグを使用してください(バグ検出、ガス代計算等が省略されます)。 -### Manticore API を使ってスマートコントラクトを操作する {#manipulate-a-smart-contract-through-the-api} +### Manticore APIを使ってスマートコントラクトを操作する {#manipulate-a-smart-contract-through-the-api} -このセクションでは、Manticore Python API を使ってスマートコントラクトを操作する方法について詳しく説明します。 Python の拡張子である`*.py`を持つ新規ファイルを作成し、API コマンド(基本知識については以下で説明します)をファイルに追加して必要なコードを書いてから、`$ python3 *.py`コマンドで実行します。 また、Python のコンソールから直接コマンドを実行することもできます。コンソールを起動する際のコマンドは、`$ python3`です。 +このセクションでは、Manticore Python APIを使ってスマートコントラクトを操作する方法について詳しく説明します。 Pythonの拡張子である`*.py`を持つ新規ファイルを作成し、APIコマンド(基本知識については以下で説明します)をファイルに追加して必要なコードを書いてから、`$ python3 *.py`コマンドで実行します。 また、Pythonのコンソールから直接コマンドを実行することもできます。コンソールを起動する際のコマンドは、`$ python3`です。 ### アカウントを作成する {#creating-accounts} @@ -212,7 +212,7 @@ m = ManticoreEVM() user_account = m.create_account(balance=1000) ``` -Solidity で作成したコントラクトについては、[m.solidity_create_contract](https://manticore.readthedocs.io/en/latest/evm.html?highlight=solidity_create#manticore.ethereum.ManticoreEVM.create_contract)でデプロイします。 +Solidityで作成したコントラクトについては、[m.solidity_create_contract](https://manticore.readthedocs.io/en/latest/evm.html?highlight=solidity_create#manticore.ethereum.ManticoreEVM.create_contract)でデプロイします。 ```solidity source_code = ''' @@ -235,10 +235,10 @@ contract_account = m.solidity_create_contract(source_code, owner=user_account) ### トランザクションを実行する {#executing-transactions} -Manticore は、2 種類のトランザクションに対応しています: +Manticoreは、2種類のトランザクションに対応しています: - 生トランザクション:すべての関数を探索します。 -- 名前付きトランザクション:1 つの関数だけを探索します。 +- 名前付きトランザクション:1つの関数だけを探索します。 #### 生トランザクション {#raw-transaction} @@ -267,18 +267,18 @@ m.transaction(caller=user_account, value=symbolic_value) ``` -データがシンボリック値の場合、Manticore は、トランザクションの実行時にコントラクトに含まれるすべての関数を探索します。 関数がどのように選択されるかを理解するには、[Hands on the Ethernaut CTF](https://blog.trailofbits.com/2017/11/06/hands-on-the-ethernaut-ctf/)の記事におけるフォールバック関数についての説明を参照してください。 +データがシンボリック値の場合、Manticoreは、トランザクションの実行時にコントラクトに含まれるすべての関数を探索します。 関数がどのように選択されるかを理解するには、[Hands on the Ethernaut CTF](https://blog.trailofbits.com/2017/11/06/hands-on-the-ethernaut-ctf/)の記事におけるフォールバック関数についての説明を参照してください。 #### 名前付きトランザクション {#named-transaction} -関数は、名前から実行できます。 `f(uint var)`につき、シンボリック値を用いて、user_account から、0 ether で実行する場合、以下を使用します: +関数は、名前から実行できます。 `f(uint var)`につき、シンボリック値を用いて、user_accountから、0 etherで実行する場合、以下を使用します: ```python symbolic_var = m.make_symbolic_value() contract_account.f(symbolic_var, caller=user_account, value=0) ``` -トランザクションの`value`を指定しない場合、デフォルトでは 0 になります。 +トランザクションの`value`を指定しない場合、デフォルトでは0になります。 #### まとめ {#summary-1} @@ -296,9 +296,9 @@ print("Results are in {}".format(m.workspace)) ### 探索を終了する {#terminate-the-exploration} -探索を停止するには、[m.finalize()](https://manticore.readthedocs.io/en/latest/evm.html?highlight=finalize#manticore.ethereum.ManticoreEVM.finalize)を使用します。 このメソッドが呼び出された時点で、さらにトランザクションは送信されなくなり、Manticore は探索済みの各パスにつきテストケースを生成します。 +探索を停止するには、[m.finalize()](https://manticore.readthedocs.io/en/latest/evm.html?highlight=finalize#manticore.ethereum.ManticoreEVM.finalize)を使用します。 このメソッドが呼び出された時点で、さらにトランザクションは送信されなくなり、Manticoreは探索済みの各パスにつきテストケースを生成します。 -### Manticore を使った実行のまとめ {#summary-running-under-manticore} +### Manticoreを使った実行のまとめ {#summary-running-under-manticore} 上記のステップをまとめると、以下のようになります: @@ -339,10 +339,10 @@ contract Simple { ### 状態情報を使用する {#using-state-information} -実行された各パスには、それぞれのブロックチェーンの状態が含まれています。 状態は、ready または killed のどちらかです。killed は、THROW または REVERT に達したことを意味します。 +実行された各パスには、それぞれのブロックチェーンの状態が含まれています。 状態は、readyまたはkilledのどちらかです。killedは、THROWまたはREVERTに達したことを意味します。 -- [m.ready_states](https://manticore.readthedocs.io/en/latest/states.html#accessing):ready に該当する状態のリスト(REVERT/INVALID を実行しなかった状態) -- [m.killed_states](https://manticore.readthedocs.io/en/latest/states.html#accessings):killed に該当する状態のリスト +- [m.ready_states](https://manticore.readthedocs.io/en/latest/states.html#accessing):readyに該当する状態のリスト(REVERT/INVALIDを実行しなかった状態) +- [m.killed_states](https://manticore.readthedocs.io/en/latest/states.html#accessings):killedに該当する状態のリスト - [m.all_states](https://manticore.readthedocs.io/en/latest/states.html#accessings):すべての状態 ```python @@ -356,7 +356,7 @@ for state in m.all_states: - `state.platform.transactions`:トランザクションのリスト - `state.platform.transactions[-1].return_data`:最後のトランザクションで返されたデータ -最後のトランザクションによって返されるデータは配列ですが、以下のように ABI.deserialize で値に変換できます: +最後のトランザクションによって返されるデータは配列ですが、以下のようにABI.deserializeで値に変換できます: ```python data = state.platform.transactions[0].return_data @@ -373,7 +373,7 @@ m.generate_testcase(state, 'BugFound') ### まとめ {#summary-2} -- 状態は、m.all_states でイテレートできる +- 状態は、m.all_statesでイテレートできる - `state.platform.get_balance(account.address)`は、アカウント残高を返す - `state.platform.transactions`は、トランザクションのリストを返す - `transaction.return_data`は、返されたデータを示す @@ -405,7 +405,7 @@ for state in m.terminated_states: 紹介したすべてのコードは、[`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py)でアクセスできます。 -_terminated_state が返したすべての状態は結果の値が REVERT または INVALID であるため、上記よりも簡略なスクリプトを作成することもできました。上記のスクリプト例は、Manticore API の操作方法を説明することを目的としたものです。_ +_terminated_stateが返したすべての状態は結果の値がREVERTまたはINVALIDであるため、上記よりも簡略なスクリプトを作成することもできました。上記のスクリプト例は、Manticore APIの操作方法を説明することを目的としたものです。_ ## 制約を追加する {#adding-constraints} @@ -439,7 +439,7 @@ contract Simple { from manticore.core.smtlib import Operators ``` -`Operators.CONCAT`は、配列に値を連結するために使用します。 例えば、トランザクションの return_data は、他の値に対して検証可能な値に変更する必要があります: +`Operators.CONCAT`は、配列に値を連結するために使用します。 例えば、トランザクションのreturn_dataは、他の値に対して検証可能な値に変更する必要があります: ```python last_return = Operators.CONCAT(256, *last_return) @@ -468,7 +468,7 @@ m.transaction(caller=user_account, ### 制約を確認する {#checking-constraint} -制約が実行可能かどうかを確認するには、`solver.check(state.constraints)`を使用します。 例えば以下では、symbolic_value が「65」以外の値でなければならないという制約を追加した上で、状態が実行可能かどうかをチェックします。 +制約が実行可能かどうかを確認するには、`solver.check(state.constraints)`を使用します。 例えば以下では、symbolic_valueが「65」以外の値でなければならないという制約を追加した上で、状態が実行可能かどうかをチェックします。 ```python state.constrain(symbolic_var != 65) diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md index b16bf09c05b..e3192cecfea 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md @@ -9,41 +9,41 @@ tags: - "セキュリティ" - "テスト" - "静的解析" -skill: advanced +skill: 上級 published: 2020-06-09 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither --- -## Slither の使い方 {#how-to-use-slither} +## Slitherの使い方 {#how-to-use-slither} -このチュートリアルでは、Slither を使って、スマートコントラクトのバグを自動で検出する方法を学びます。 +このチュートリアルでは、Slitherを使って、スマートコントラクトのバグを自動で検出する方法を学びます。 - [インストール](#installation) - [コマンドラインの使い方](#command-line) - [静的解析入門](#static-analysis):静的解析の簡単な紹介 -- [API](#api-basics):Python API の説明 +- [API](#api-basics):Python APIの説明 ## インストール {#installation} -Slither には、Python 3.6 以上が必要です。 pip でインストールすることも、Docker を使用してインストールすることもできます。 +Slitherには、Python 3.6以上が必要です。 pipでインストールすることも、Dockerを使用してインストールすることもできます。 -pip による Slither のインストール +pipによるSlitherのインストール ```bash pip3 install --user slither-analyzer ``` -Docker による Slither のインストール: +DockerによるSlitherのインストール: ```bash docker pull trailofbits/eth-security-toolbox docker run -it -v "$PWD":/home/trufflecon trailofbits/eth-security-toolbox ``` -_最後のコマンドは、現在のディレクトリにアクセスできる Docker で eth-security-toolbox を実行します。 ホストからファイルを変更し、Docker からファイル上のツールを実行することができます。_ +_最後のコマンドは、現在のディレクトリにアクセスできるDockerでeth-security-toolboxを実行します。 ホストからファイルを変更し、Dockerからファイル上のツールを実行することができます。_ -Docker 内で実行する: +Docker内で実行する: ```bash solc-select 0.5.11 @@ -52,7 +52,7 @@ cd /home/trufflecon/ ### スクリプトを実行する {#running-a-script} -Python3 で Python スクリプトを実行するには、以下を実行します: +Python3でPythonスクリプトを実行するには、以下を実行します: ```bash python3 script.py @@ -60,23 +60,23 @@ python3 script.py ### コマンドライン {#command-line} -**コマンドラインとユーザー定義スクリプトの比較**:Slither には、多くの一般的なバグを見つけるための事前定義された検出器のセットが付属しています。 コマンドラインで Slither を呼び出すとすべての検出器が実行されますので、静的解析の詳しい知識は必要ありません: +**コマンドラインとユーザー定義スクリプトの比較**:Slitherには、多くの一般的なバグを見つけるための事前定義された検出器のセットが付属しています。 コマンドラインでSlitherを呼び出すとすべての検出器が実行されますので、静的解析の詳しい知識は必要ありません: ```bash slither project_paths ``` -Slither では、検出器に加えて、[プリンター](https://github.com/crytic/slither#printers)と[ツール](https://github.com/crytic/slither#tools)によるコードレビュー機能も利用できます。 +Slitherでは、検出器に加えて、[プリンター](https://github.com/crytic/slither#printers)と[ツール](https://github.com/crytic/slither#tools)によるコードレビュー機能も利用できます。 -プライベート検出器および GitHub での統合にアクセスするには、[crytic.io](https://github.com/crytic)を使用します。 +プライベート検出器およびGitHubでの統合にアクセスするには、[crytic.io](https://github.com/crytic)を使用します。 ## 静的解析 {#static-analysis} -Slither 静的解析フレームワークの機能と設計は、ブログ投稿 ([1](https://blog.trailofbits.com/2018/10/19/slither-a-solidity-static-analysis-framework/)、[2](https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/)) と[学術論文](https://github.com/trailofbits/publications/blob/master/papers/wetseb19.pdf)で説明されています。 +Slither静的解析フレームワークの機能と設計は、ブログ投稿 ([1](https://blog.trailofbits.com/2018/10/19/slither-a-solidity-static-analysis-framework/)、[2](https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/)) と[学術論文](https://github.com/trailofbits/publications/blob/master/papers/wetseb19.pdf)で説明されています。 静的解析には、さまざまな種類があります。 静的解析の技法は、[clang](https://clang-analyzer.llvm.org/)や[gcc](https://lwn.net/Articles/806099/)といったコンパイラで採用されているだけでなく、[Infer](https://fbinfer.com/)、[CodeClimate](https://codeclimate.com/)、および[FindBugs](http://findbugs.sourceforge.net/)、ならびに[Frama-C](https://frama-c.com/)や[Polyspace](https://www.mathworks.com/products/polyspace.html)といったフォーマルなメソッドに基づくツールの基盤でもあります。 -ここでは、静的解析の手法や研究者について網羅的に取り上げる余裕はありません。 その代わりに、皆さんがバグを特定し、コードを理解する上で効果的に静的解析の手法を利用できるように、Slither の仕組みを理解する上で必要な事項のみに焦点を当てます。 +ここでは、静的解析の手法や研究者について網羅的に取り上げる余裕はありません。 その代わりに、皆さんがバグを特定し、コードを理解する上で効果的に静的解析の手法を利用できるように、Slitherの仕組みを理解する上で必要な事項のみに焦点を当てます。 - [コード表現](#code-representation) - [コード解析](#analysis) @@ -84,13 +84,13 @@ Slither 静的解析フレームワークの機能と設計は、ブログ投稿 ### コード表現 {#code-representation} -単一の実行パスについて推論する動的解析とは対照的に、静的解析では一度にすべてのパスを対象として推論します。 これには、別のコード表現が必要です。 最も一般的なコード表現は、抽象構文木(AST)および制御フローグラフ(CFG)の 2 つです。 +単一の実行パスについて推論する動的解析とは対照的に、静的解析では一度にすべてのパスを対象として推論します。 これには、別のコード表現が必要です。 最も一般的なコード表現は、抽象構文木(AST)および制御フローグラフ(CFG)の2つです。 ### 抽象構文木(AST) {#abstract-syntax-trees-ast} -AST は、コンパイラがコードを解析するたびに用いられます。 おそらく、静的解析を実行できる最も基本的な構造だと言えるでしょう。 +ASTは、コンパイラがコードを解析するたびに用いられます。 おそらく、静的解析を実行できる最も基本的な構造だと言えるでしょう。 -一言で言えば、AST は構造化されたツリーであり、通常、各リーフに変数または定数が含まれ、内部ノードはオペランドまたは制御フロー操作です。 次のコードを検討してみましょう: +一言で言えば、ASTは構造化されたツリーであり、通常、各リーフに変数または定数が含まれ、内部ノードはオペランドまたは制御フロー操作です。 次のコードを検討してみましょう: ```solidity function safeAdd(uint a, uint b) pure internal returns(uint){ @@ -101,13 +101,13 @@ function safeAdd(uint a, uint b) pure internal returns(uint){ } ``` -対応する AST は、次のとおりです: +対応するASTは、次のとおりです: ![AST](./ast.png) -Slither では、solc がエクスポートした AST を使用します。 +Slitherでは、solcがエクスポートしたASTを使用します。 -AST は簡単に構築できますが、入れ子構造を持ちます。 このため、解析が簡単でない場合があります。 例えば、`a + b <= a`の式で使用される操作を識別するには、まず`<=`を解析し、次に`+`を解析する必要があります。 一般的なアプローチは、ツリーを再帰的に移動するいわゆる Visitor パターンを使用することです。 Slither には、[`ExpressionVisitor`](https://github.com/crytic/slither/blob/master/slither/visitors/expression/expression.py)という汎用的な Visitor が含まれています。 +ASTは簡単に構築できますが、入れ子構造を持ちます。 このため、解析が簡単でない場合があります。 例えば、`a + b <= a`の式で使用される操作を識別するには、まず`<=`を解析し、次に`+`を解析する必要があります。 一般的なアプローチは、ツリーを再帰的に移動するいわゆるVisitorパターンを使用することです。 Slitherには、[`ExpressionVisitor`](https://github.com/crytic/slither/blob/master/slither/visitors/expression/expression.py)という汎用的なVisitorが含まれています。 次のコードは、`ExpressionVisitor`を使用して式に加算が含まれているかどうかを検出します: @@ -130,27 +130,27 @@ print(f'The expression {expression} has a addition: {visitor.result()}') ### 制御フローグラフ(CFG) {#control-flow-graph-cfg} -2 番目によく用いられるコード表現は、制御フローグラフ(CFG)です。 名前が示すように、すべての実行パスを可視化するグラフベースの表現です。 各ノードには、1 つまたは複数の命令が含まれます。 グラフのエッジ部分は、制御フロー操作(if/then/else、ループなど)を表します。 先ほどの例を CFG で表すと、次のようになります: +2番目によく用いられるコード表現は、制御フローグラフ(CFG)です。 名前が示すように、すべての実行パスを可視化するグラフベースの表現です。 各ノードには、1つまたは複数の命令が含まれます。 グラフのエッジ部分は、制御フロー操作(if/then/else、ループなど)を表します。 先ほどの例をCFGで表すと、次のようになります: ![CFG](./cfg.png) -CFG は、大部分の解析の土台となる表現です。 +CFGは、大部分の解析の土台となる表現です。 他にも、様々なコード表現が存在します。 それぞれの表現には、実行したい解析に応じて長所と短所があります。 ### 解析 {#analysis} -Slither で実行できる最もシンプルな解析タイプは、構文解析です。 +Slitherで実行できる最もシンプルな解析タイプは、構文解析です。 ### 構文解析 {#syntax-analysis} -Slither は、コードおよび表現に含まれるさまざまな構成要素を移動しながら、パターンマッチングに類似したアプローチで矛盾や欠陥を発見します。 +Slitherは、コードおよび表現に含まれるさまざまな構成要素を移動しながら、パターンマッチングに類似したアプローチで矛盾や欠陥を発見します。 例えば、以下の検出器は構文関連の問題を探します: - [状態変数のシャドーイング](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing):すべての状態変数でイテレートし、継承されたコントラクトから変数がシャドーされているかを確認します([state.py#L51-L62](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/shadowing/state.py#L51-L62))。 -- [不適切な ERC-20 インターフェース](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface):不適切な ERC-20 関数の署名を探します([incorrect_erc20_interface.py#L34-L55](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/erc/incorrect_erc20_interface.py#L34-L55))。 +- [不適切なERC-20インターフェース](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface):不適切なERC-20関数の署名を探します([incorrect_erc20_interface.py#L34-L55](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/erc/incorrect_erc20_interface.py#L34-L55))。 ### 意味解析 {#semantic-analysis} @@ -169,13 +169,13 @@ Slither は、コードおよび表現に含まれるさまざまな構成要素 variable_a = variable_b + 1; ``` -Slither では、中間表現(以下を参照)を利用して、[データの依存関係](https://github.com/crytic/slither/wiki/data-dependency)を解析する機能が搭載されています。 +Slitherでは、中間表現(以下を参照)を利用して、[データの依存関係](https://github.com/crytic/slither/wiki/data-dependency)を解析する機能が搭載されています。 -データ依存関係を解析する具体例としては、[危険をもたらす厳密な等値の検出器](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities)を参照してください。 ここで、Slither は、ある危険な値に対する厳密な等値比較を発見しようと試みます([incorrect_strict_equality.py#L86-L87](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L86-L87))。その上で、攻撃者がコントラクトをトラップできる状態を防止するために、`==`ではなく、`>=`または`<=`を使用するようにユーザーに警告します。 検出器はまず、`balanceOf(address)`の呼び出しにおける戻り値を危険な値だと見なし([incorrect_strict_equality.py#L63-L64](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L63-L64))、データ依存関係エンジンを使用してその使用状況を追跡します。 +データ依存関係を解析する具体例としては、[危険をもたらす厳密な等値の検出器](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities)を参照してください。 ここで、Slitherは、ある危険な値に対する厳密な等値比較を発見しようと試みます([incorrect_strict_equality.py#L86-L87](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L86-L87))。その上で、攻撃者がコントラクトをトラップできる状態を防止するために、`==`ではなく、`>=`または`<=`を使用するようにユーザーに警告します。 検出器はまず、`balanceOf(address)`の呼び出しにおける戻り値を危険な値だと見なし([incorrect_strict_equality.py#L63-L64](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L63-L64))、データ依存関係エンジンを使用してその使用状況を追跡します。 #### 不動点の計算 {#fixed-point-computation} -解析がエッジを辿って CFG 全体を移動する場合、すでに訪問済みのノードを発見する可能性が高いでしょう。 例えば、以下のようなループがある場合です: +解析がエッジを辿ってCFG全体を移動する場合、すでに訪問済みのノードを発見する可能性が高いでしょう。 例えば、以下のようなループがある場合です: ```solidity for(uint i; i < range; ++){ @@ -183,21 +183,21 @@ for(uint i; i < range; ++){ } ``` -この場合、解析をいつ停止するかを指定する必要があります。 それには、(1)ノードごとにイテレートする上限回数を設定するか、(2)いわゆる*不動点*を計算する、という 2 つの戦略があります。 不動点とは、当該ノードをさらに解析しても有益な情報が得られない点を意味します。 +この場合、解析をいつ停止するかを指定する必要があります。 それには、(1)ノードごとにイテレートする上限回数を設定するか、(2)いわゆる_不動点_を計算する、という2つの戦略があります。 不動点とは、当該ノードをさらに解析しても有益な情報が得られない点を意味します。 -不動点を使用する実例としては、リエントランシー検出器が挙げられます。Slither では、当該のノードを探索し、外部からの呼び出しを見つけて、ストレージへの書き込み/読み取りを行います。 この処理を通じて不動点に到達すると([reentrancy.py#L125-L131](https://github.com/crytic/slither/blob/master/slither/detectors/reentrancy/reentrancy.py#L125-L131))、探索を停止し、様々なリエントランシーのパターン([reentrancy_beign.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_benign.py))、([reentrancy_read_before_write.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_read_before_write.py))、([reentrancy_eth.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_eth.py))に基づき、結果を解析してリエントランシーが存在するか否かを判定します。 +不動点を使用する実例としては、リエントランシー検出器が挙げられます。Slitherでは、当該のノードを探索し、外部からの呼び出しを見つけて、ストレージへの書き込み/読み取りを行います。 この処理を通じて不動点に到達すると([reentrancy.py#L125-L131](https://github.com/crytic/slither/blob/master/slither/detectors/reentrancy/reentrancy.py#L125-L131))、探索を停止し、様々なリエントランシーのパターン([reentrancy_beign.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_benign.py))、([reentrancy_read_before_write.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_read_before_write.py))、([reentrancy_eth.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_eth.py))に基づき、結果を解析してリエントランシーが存在するか否かを判定します。 効率的な不動点計算を用いた解析を作成するには、解析において情報がどのように拡散するかをよく理解しておく必要があります。 ### 中間表現 {#intermediate-representation} -中間表現(IR)は、オリジナルのコードよりも静的解析を実行しやすくした言語です。 Slither では、Solidity を Slither 独自の IR である[SlithIR](https://github.com/crytic/slither/wiki/SlithIR)に変換します。 +中間表現(IR)は、オリジナルのコードよりも静的解析を実行しやすくした言語です。 Slitherでは、SolidityをSlither独自のIRである[SlithIR](https://github.com/crytic/slither/wiki/SlithIR)に変換します。 -基本的なチェックを作成したいだけの場合は、SlithIR を理解する必要はありません。 ただし、より高度な意味解析を作成したい場合は、SlithIR の知識が有益になるでしょう。 [SlithIR](https://github.com/crytic/slither/wiki/Printer-documentation#slithir)および[SSA](https://github.com/crytic/slither/wiki/Printer-documentation#slithir-ssa)のプリンターは、コードがどのように変換されるかを理解する上で役立ちます。 +基本的なチェックを作成したいだけの場合は、SlithIRを理解する必要はありません。 ただし、より高度な意味解析を作成したい場合は、SlithIRの知識が有益になるでしょう。 [SlithIR](https://github.com/crytic/slither/wiki/Printer-documentation#slithir)および[SSA](https://github.com/crytic/slither/wiki/Printer-documentation#slithir-ssa)のプリンターは、コードがどのように変換されるかを理解する上で役立ちます。 -## API の基本 {#api-basics} +## APIの基本 {#api-basics} -Slither には、コントラクトの基本的な属性や関数について探索できる API が含まれています。 +Slitherには、コントラクトの基本的な属性や関数について探索できるAPIが含まれています。 コードベースを読み込むには、以下を実行します: @@ -230,7 +230,7 @@ slither = Slither('/path/to/project') - `name (str)`:関数の名前 - `contract (contract)`:この関数を宣言したコントラクト -- `nodes (list(Node))`:この関数/修飾子の CFG を攻勢するノードのリスト +- `nodes (list(Node))`:この関数/修飾子のCFGを攻勢するノードのリスト - `entry_point (Node)`: CFG (制御フローグラフ) のエントリポイント - `variables_read (list(Variable))`: 読み込まれた変数のリスト - `variables_written (list(Variable))`: 書き込まれた変数のリスト diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md index e6ec742349e..669c5b39b70 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md @@ -7,7 +7,7 @@ tags: - "Solidity" - "スマートコントラクト" - "オラクル" -skill: beginner +skill: 初級 published: 2021-06-29 source: Tellor Docs sourceUrl: https://docs.tellor.io/tellor/ @@ -22,24 +22,24 @@ sourceUrl: https://docs.tellor.io/tellor/ 前提条件: - ターミナルを操作できる -- npm がインストール済みである -- npm を使って、依存関係を管理できる +- npmがインストール済みである +- npmを使って、依存関係を管理できる -Tellor は、実装可能かつ開発継続中のオープンソースのオラクルです。 この初心者向けガイドは、Tellor がいかに簡単に導入、稼働できるかを説明するもので、完全に分散化され、検閲耐性を持つオラクルをプロジェクトに追加する方法を学びます。 +Tellorは、実装可能かつ開発継続中のオープンソースのオラクルです。 この初心者向けガイドは、Tellor がいかに簡単に導入、稼働できるかを説明するもので、完全に分散化され、検閲耐性を持つオラクルをプロジェクトに追加する方法を学びます。 ## 概要 {#overview} -Tellor は、オフチェーンのデータポイントの値(例:BTC/USD)を請求できるオラクルシステムです。報告者は、イーサリアムの全スマートコントラクトがアクセスできるオンチェーンのデータバンクに対してこの値を追加するために競います。 このデータバンクへの入力は、ステーキング済みの報告者で構成されるネットワークにより保護されています。 Tellor は、暗号資産経済におけるインセンティブの仕組みを活用し、Tellor のトークン、トリビュート(TRB)、および紛争メカニズムに基づき、正直なデータを提出した報告者に報酬を与え、悪意のユーザーを処罰します。 +Tellorは、オフチェーンのデータポイントの値(例:BTC/USD)を請求できるオラクルシステムです。報告者は、イーサリアムの全スマートコントラクトがアクセスできるオンチェーンのデータバンクに対してこの値を追加するために競います。 このデータバンクへの入力は、ステーキング済みの報告者で構成されるネットワークにより保護されています。 Tellorは、暗号資産経済におけるインセンティブの仕組みを活用し、Tellorのトークン、トリビュート(TRB)、および紛争メカニズムに基づき、正直なデータを提出した報告者に報酬を与え、悪意のユーザーを処罰します。 このチュートリアルでは、以下について説明します: - 導入および稼働に必要な初回ツールキットの設定方法 - 簡単な実例に基づくステップごとの説明 -- 現在 Tellor をテストできるネットワークのアドレスリスト +- 現在Tellorをテストできるネットワークのアドレスリスト -## Tellor を使うには {#usingtellor} +## Tellorを使うには {#usingtellor} -まず、Tellor をオラクルとして使用するために必要な基本ツールをインストールします。 Tellor のユーザーコントラクトをインストールするには、[このパッケージ](https://github.com/tellor-io/usingtellor)を使ってください。 +まず、Tellorをオラクルとして使用するために必要な基本ツールをインストールします。 Tellorのユーザーコントラクトをインストールするには、[このパッケージ](https://github.com/tellor-io/usingtellor)を使ってください。 `npm install usingtellor` @@ -47,9 +47,9 @@ Tellor は、オフチェーンのデータポイントの値(例:BTC/USD) うまく行きましたね! ツールが準備できたので、ビットコイン価格の情報を取得するという単純なエクササイズを実行してみましょう: -### BTC/USD の例 {#btcusd-example} +### BTC/USDの例 {#btcusd-example} -この「UsingTellor」コントラクトを継承し、Tellor のアドレスをコントラクタの引数として渡します: +この「UsingTellor」コントラクトを継承し、Tellorのアドレスをコントラクタの引数として渡します: 具体的なコードは、以下のようになります: @@ -59,13 +59,13 @@ import "usingtellor/contracts/UsingTellor.sol"; contract PriceContract is UsingTellor { uint256 public btcPrice; - //このコントラクトは、UsingTellor のすべての関数にアクセスできるようになりました + //This Contract now has access to all functions in UsingTellor constructor(address payable _tellorAddress) UsingTellor(_tellorAddress) public {} function setBtcPrice() public { bytes memory _b = abi.encode("SpotPrice",abi.encode("btc","usd")); - bytes32 _queryID = keccak256(_b); + bytes32 _queryId = keccak256(_b); uint256 _timestamp; bytes _value; @@ -79,6 +79,6 @@ function setBtcPrice() public { コントラクトアドレスの完全なリストについては、[こちら](https://docs.tellor.io/tellor/the-basics/contracts-reference)を参照してください。 -利便性のために、UsingTellor のリポジトリには簡単な統合を目的としたバージョンである[Tellor Playground](https://github.com/tellor-io/TellorPlayground)コントラクトが含まれています。 有益な関数のリストについては、 [こちら](https://github.com/tellor-io/sampleUsingTellor#tellor-playground)を参照してください。 +利便性のために、UsingTellorのリポジトリには簡単な統合を目的としたバージョンである[Tellor Playground](https://github.com/tellor-io/TellorPlayground)コントラクトが含まれています。 有益な関数のリストについては、 [こちら](https://github.com/tellor-io/sampleUsingTellor#tellor-playground)を参照してください。 -Tellor オラクルをより堅牢に実装したい場合は、[こちらで](https://github.com/tellor-io/usingtellor/blob/master/README.md)利用可能な関数の全リストを確認してください。 +Tellorオラクルをより堅牢に実装したい場合は、[こちらで](https://github.com/tellor-io/usingtellor/blob/master/README.md)利用可能な関数の全リストを確認してください。 diff --git a/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md b/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md index dd960cde570..98735d50114 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md @@ -345,6 +345,6 @@ Yassss! イーサリアム(テストネット)チェーンにNFTスマート ![Alchemy のエクスプローラーダッシュボードで「内部」で行われた通話を表示する](./alchemy-explorer-goerli.png) -ここでは、 .deploy() 関数を呼び出した際に、Hardhat/Ethers が内部で作った JSON-RPC の呼び出しをいくつか見ることができます。 ここで呼び出している2つの重要なJSON-RPCは、実際にSepoliaチェーン上でコントラクトを書き込むリクエストの[eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction)と、(トランザクションを送信する際の典型的なパターンである) ハッシュを与えられたトランザクションに関する情報を読み取るリクエスト[eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash)です。 トランザクションの送信の詳細については、このチュートリアルの [Web3 を使用したトランザクションの送信](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) をご覧ください。 +ここでは、 .deploy() 関数を呼び出した際に、Hardhat/Ethers が内部で作った JSON-RPC の呼び出しをいくつか見ることができます。 ここで呼び出している2つの重要なJSON-RPCは、実際にSepoliaチェーン上でコントラクトを書き込むリクエストの[eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction)と、(トランザクションを送信する際の典型的なパターンである) ハッシュを与えられたトランザクションに関する情報を読み取るリクエスト[eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash)です。 トランザクションの送信の詳細については、このチュートリアルの [ Web3 を使用したトランザクションの送信 ](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) をご覧ください。 以上がこのチュートリアルのパート1です。 [パート2](/developers/tutorials/how-to-mint-an-nft/) では、NFT を発行することで実際にスマートコントラクトとやりとりをします。そして、[パート3](/developers/tutorials/how-to-view-nft-in-metamask/) では、Etherreum ウォレット内の NFT を確認する方法を示します! diff --git a/public/content/translations/ja/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/public/content/translations/ja/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md index 73f7f925b6a..d2d4dc2fd2a 100644 --- a/public/content/translations/ja/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md +++ b/public/content/translations/ja/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -5,7 +5,6 @@ author: "Paul Apivat" tags: - "SQL" - "クエリ" - - "Dune Analytics" - "トランザクション" skill: beginner lang: ja @@ -16,23 +15,23 @@ sourceUrl: https://paulapivat.com/post/query_ethereum/ イーサリアムに関するチュートリアルの多くはデベロッパ向けのものですが、データアナリストや、クライアント/ノードを実行することなくオンチェーンのデータを確認したい人々を対象とする学習リソースは多くありません。 -このチュートリアルは、[Dune Analytics](https://dune.xyz/home)が提供するインターフェースを用いて、オンチェーンのデータに対して SQL(Structured Query Language)のクエリを実行することで、トランザクション、ブロック、ガスといったイーサリアムの基本的なコンセプトについての理解を深めるものです。 +このチュートリアルは、[Dune Analytics](https://dune.xyz/home)が提供するインターフェースを用いて、オンチェーンのデータに対してSQL(Structured Query Language)のクエリを実行することで、トランザクション、ブロック、ガスといったイーサリアムの基本的なコンセプトについての理解を深めるものです。 オンチェーンのデータは、イーサリアムやイーサリアム・ネットワークに関する理解を深めるのに役立つだけでなく、コンピュータ処理能力の経済学といった現在のイーサリアムが直面している課題(例:ガス代の上昇)や、より重要性が高いスケーリング・ソリューションに関する議論について、基本的な事項を理解する土台となるものです。 ### トランザクション {#transactions} -イーサリアムの新規ユーザーはまず、ETH 残高を持つエンティティであるユーザー管理アカウントを初期化する必要があります。 イーサリアムのアカウントには、ユーザー管理アカウントとスマートコントラクトの 2 種類があります([ethereum.org](/developers/docs/accounts/)を参照)してください)。 +イーサリアムの新規ユーザーはまず、ETH残高を持つエンティティであるユーザー管理アカウントを初期化する必要があります。 イーサリアムのアカウントには、ユーザー管理アカウントとスマートコントラクトの2種類があります([ethereum.org](/developers/docs/accounts/)を参照)してください)。 すべてのアカウントは、[Etherscan](https://etherscan.io/)のようなブロックエクスプローラーで表示できます。 ブロックエクスプローラーは、イーサリアム上のデータポータルです。 このポータルから、ブロックのデータ、トランザクション、マイナー、アカウント、および他のオンチェーンのアクティビティをリアルタイムで確認できます([こちら](/developers/docs/data-and-analytics/block-explorers/)をご覧ください)。 -しかし、外部のブロックエスプローラーが提供する情報と直接照合したい場合は、オンチェーンのデータに対するクエリを実行したいと思うかもしれません。 [Dune Analytics](https://duneanalytics.com/)は、SQL に関する一定の知識を前提として、あらゆるユーザーにこのクエリ機能を提供します。 +しかし、外部のブロックエスプローラーが提供する情報と直接照合したい場合は、オンチェーンのデータに対するクエリを実行したいと思うかもしれません。 [Dune Analytics](https://duneanalytics.com/)は、SQLに関する一定の知識を前提として、あらゆるユーザーにこのクエリ機能を提供します。 参考までに、イーサリアム・ファウンデーション (EF) のスマートコントラクトアカウントは[Etherscan](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae)で表示することができます。 -EF のアカウントを含むすべてのアカウントは、トランザクションの送受信に使用できる公開アドレスを持つ点に留意してください。 +EFのアカウントを含むすべてのアカウントは、トランザクションの送受信に使用できる公開アドレスを持つ点に留意してください。 -Etherscan のアカウント残高は、通常のトランザクションと内部トランザクションで構成されています。 内部トランザクションは誤解を招きやすい名前ですが、チェーンの状態を変更する *実際の*トランザクションではありません。 内部トランザクションとは、コントラクト([ソース](https://ethereum.stackexchange.com/questions/3417/how-to-get-contract-internal-transactions))を実行することで開始される「値の移転」を意味します。 内部トランザクションは署名を持たないためブロックチェーンには **含まれず**、Dune Analytics でクエリを実行することができません。 +Etherscanのアカウント残高は、通常のトランザクションと内部トランザクションで構成されています。 内部トランザクションは誤解を招きやすい名前ですが、チェーンの状態を変更する _実際の_トランザクションではありません。 内部トランザクションとは、コントラクト([ソース](https://ethereum.stackexchange.com/questions/3417/how-to-get-contract-internal-transactions))を実行することで開始される「値の移転」を意味します。 内部トランザクションは署名を持たないためブロックチェーンには **含まれず**、Dune Analyticsでクエリを実行することができません。 従って、このチュートリアルでは通常のトランザクションのみを取り上げます。 通常のトランザクションに対しては、以下のようにクエリを実行します: @@ -62,13 +61,13 @@ SELECT FROM temp_table ``` -これにより、Etherscan のトランザクションページで提供されるのと同一の情報が返されます。 これら 2 つのソースを比較してみましょう: +これにより、Etherscanのトランザクションページで提供されるのと同一の情報が返されます。 これら2つのソースを比較してみましょう: #### Etherscan {#etherscan} ![](./etherscan_view.png) -[Etherscan 上の EF のコントラクトのページ](https://etherscan.io/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) +[Etherscan上のEFのコントラクトのページ](https://etherscan.io/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) #### Dune Analytics {#dune-analytics} @@ -81,12 +80,12 @@ FROM temp_table 送信されたトランザクションには、([ソース](/developers/docs/transactions/))を含むいくつかの情報が含まれています。 - **Recipient**:受信者のアドレス(「to」のクエリに該当したアドレス)。 -- **Signature**:トランザクションに署名するのは送信者の秘密鍵ですが、SQL でクエリできるのは送信者の公開アドレス(「from」)です。 -- **Value**:送信された ETH の量 (`ether`列を参照してください)。 +- **Signature**:トランザクションに署名するのは送信者の秘密鍵ですが、SQLでクエリできるのは送信者の公開アドレス(「from」)です。 +- **Value**:送信されたETHの量 (`ether`列を参照してください)。 - **Data**:ハッシュ化した任意のデータ(`data`列を参照してください)。 - **gasLimit**:トランザクションで消費できるガスユニットの上限。 ガスユニットは、計算ステップを示します。 - **maxPriorityFeePerGas**:マイナーへのチップとして提供できるガス量の上限。 -- **maxFeePerGas**:トランザクションに対して支払い可能であるガス代の上限(baseFeePerGas と maxPriorityFeePerGas を含む) 。 +- **maxFeePerGas**:トランザクションに対して支払い可能であるガス代の上限(baseFeePerGasとmaxPriorityFeePerGasを含む) 。 イーサリアムファウンデーションのパブリックアドレスへのトランザクションにつき、これらの具体的な情報をクエリしたい場合は以下を実行します: @@ -107,15 +106,15 @@ ORDER BY block_time DESC ### ブロック {#blocks} -各トランザクションは、イーサリアム仮想マシン([EVM](/developers/docs/evm/))の状態を変更します([ソース](/developers/docs/transactions/))。 トランザクションは、ネットワークにブロードキャストされ、検証を経てブロックに追加されます。 トランザクションごとに、ブロック番号が割り振られます。 データを見るには、特定のブロック番号でクエリすることができます。ブロック番号: 12396854 は、執筆時点である 2021 年 11 月 5 日のイーサリアム・ファウンデーション内のトランザクションで最も最新のブロックです。 +各トランザクションは、イーサリアム仮想マシン([EVM](/developers/docs/evm/))の状態を変更します([ソース](/developers/docs/transactions/))。 トランザクションは、ネットワークにブロードキャストされ、検証を経てブロックに追加されます。 トランザクションごとに、ブロック番号が割り振られます。 データを見るには、特定のブロック番号でクエリすることができます。ブロック番号: 12396854は、執筆時点である2021年11月5日のイーサリアム・ファウンデーション内のトランザクションで最も最新のブロックです。 -さらに、次の 2 つのブロックに対してクエリを実行すると、各ブロックが 1 つ前のブロックのハッシュ(親ハッシュ)を含んでいることが確認でき、ブロックチェーンがどのように形成されるかを理解できます。 +さらに、次の2つのブロックに対してクエリを実行すると、各ブロックが1つ前のブロックのハッシュ(親ハッシュ)を含んでいることが確認でき、ブロックチェーンがどのように形成されるかを理解できます。 各ブロックには、親ブロックに対する参照情報が含まれています。 これは、`hash`列と`parent_hash`列の間に表示されます([ソース](/developers/docs/blocks/))。 ![parent_hash](./parent_hash.png) -Dune Analytics では、[クエリ](https://duneanalytics.com/queries/44856/88292)は以下のように表示されます: +Dune Analyticsでは、[クエリ](https://duneanalytics.com/queries/44856/88292)は以下のように表示されます: ```sql SELECT @@ -131,14 +130,14 @@ LIMIT 10 ブロックを調べるには、時間、ブロック番号、難易度、ハッシュ、親ハッシュ、およびノンスに対してクエリを実行します。 -このクエリでは、*トランザクションのリスト*だけは調べることができません。このためトランザクションのリストについては、*state root*を使って後述する別のクエリを実行します。 フルノードまたはアーカイブノードは、すべてのトランザクションと状態遷移を保存しますので、クライアントはいつでもチェーンの状態をクエリすることができます。 これには大容量のストレージが必要になりますので、チェーンデータと状態データを分離することができます: +このクエリでは、_トランザクションのリスト_だけは調べることができません。このためトランザクションのリストについては、_state root_を使って後述する別のクエリを実行します。 フルノードまたはアーカイブノードは、すべてのトランザクションと状態遷移を保存しますので、クライアントはいつでもチェーンの状態をクエリすることができます。 これには大容量のストレージが必要になりますので、チェーンデータと状態データを分離することができます: - チェーンデータ(ブロックおよびトランザクションのリスト) - 状態データ(各トランザクションによる状態遷移の結果) -状態ルートは後者(状態データ)であり、*暗黙的な*データである(オンチェーンで保存されない)のに対し、チェーンデータは明示的なデータであり、チェーン自体に保存されます([ソース](https://ethereum.stackexchange.com/questions/359/where-is-the-state-data-stored))。 +状態ルートは後者(状態データ)であり、_暗黙的な_データである(オンチェーンで保存されない)のに対し、チェーンデータは明示的なデータであり、チェーン自体に保存されます([ソース](https://ethereum.stackexchange.com/questions/359/where-is-the-state-data-stored))。 -このチュートリアルでは、Dune Analytics を使って SQL で*クエリ可能*であるオンチェーンのデータを取り上げます。 +このチュートリアルでは、Dune Analyticsを使ってSQLで_クエリ可能_であるオンチェーンのデータを取り上げます。 すでに述べたように、各ブロックにはトランザクションのリストが含まれているので、特定のブロックに絞り込んでクエリを実行できます。 さっそく、最新ブロック「12396854」を試してみましょう。 @@ -148,11 +147,11 @@ WHERE block_number = 12396854 ORDER BY block_time DESC` ``` -Dune では、このような SQL 出力が得られます: +Duneでは、このようなSQL出力が得られます: ![](./list_of_txn.png) -ブロックチェーンにこの 1 つのブロックが追加されると、イーサリアム仮想マシン ([EVM](/developers/docs/evm/))の状態が変化します。 ブロックチェーンでは、一度に数十、時には数百ものトランザクションが検証されます。 このブロックの場合、222 件のトランザクションが含まれていました。 +ブロックチェーンにこの1つのブロックが追加されると、イーサリアム仮想マシン ([EVM](/developers/docs/evm/))の状態が変化します。 ブロックチェーンでは、一度に数十、時には数百ものトランザクションが検証されます。 このブロックの場合、222件のトランザクションが含まれていました。 実際にトランザクションが成功した件数を調べるには、成功したトランザクションのみを絞り込むフィルターを追加します: @@ -167,19 +166,19 @@ SELECT FROM temp_table ``` -ブロック 12396854 では、計 222 件のトランザクションのうち、204 件が正常に検証されました: +ブロック12396854では、計222件のトランザクションのうち、204件が正常に検証されました: ![](./successful_txn.png) -トランザクションリクエストは、毎秒あたり数十回発生しますが、ブロックがコミットされるのはおよそ 15 秒に 1 回です([ソース](/developers/docs/blocks/))。 +トランザクションリクエストは、毎秒あたり数十回発生しますが、ブロックがコミットされるのはおよそ15秒に1回です([ソース](/developers/docs/blocks/))。 -約 15 秒ごとに 1 つのブロックが生成されることを確認するには、1 日に含まれる合計の秒数(86,400 秒)を 15 で割ることで、1 日に生成される平均ブロック数(およそ 5,760)が分かります。 +約15秒ごとに1つのブロックが生成されることを確認するには、1日に含まれる合計の秒数(86,400秒)を15で割ることで、1日に生成される平均ブロック数(およそ5,760)が分かります。 -2016 年から現在までに、イーサリアムで生成された 1 日あたりのブロック数については、この表を参照してください: +2016年から現在までに、イーサリアムで生成された1日あたりのブロック数については、この表を参照してください: ![](./daily_blocks.png) -この期間に毎日生成されたブロックの平均数は、約 5,874 です。 +この期間に毎日生成されたブロックの平均数は、約5,874 です。 ![](./avg_daily_blocks.png) @@ -210,13 +209,13 @@ SELECT FROM temp_table ``` -2016 年から現在までに 1 日に生成されたブロック数の平均は、5,874 をわずかに上回っています。 反対に、86,400 秒を平均ブロック数である 5,874 で割ると 14.7 となるため、およそ 15 秒に 1 回の頻度でブロックが生成されたことが分かります。 +2016年から現在までに1日に生成されたブロック数の平均は、5,874をわずかに上回っています。 反対に、86,400秒を平均ブロック数である5,874で割ると14.7となるため、およそ15秒に1回の頻度でブロックが生成されたことが分かります。 ### ガス {#gas} -ブロックのサイズは、制限されています。 ブロックの最大サイズは、ネットワーク需要に応じて 12,500,000 ユニットから 25,000,000 ユニットの間で動的に変化します。 ブロックのサイズを制限する理由は、フルノードに対してディスク容量や処理速度の要件([ソース](/developers/docs/blocks/))が過剰な負担となるのを防ぐために、無駄に大きなサイズのブロックが発生することを防ぐためです。 +ブロックのサイズは、制限されています。 ブロックの最大サイズは、ネットワーク需要に応じて12,500,000ユニットから25,000,000ユニットの間で動的に変化します。 ブロックのサイズを制限する理由は、フルノードに対してディスク容量や処理速度の要件([ソース](/developers/docs/blocks/))が過剰な負担となるのを防ぐために、無駄に大きなサイズのブロックが発生することを防ぐためです。 -ブロックに対するガス上限という概念を理解するには、トランザクションをバッチ処理するために利用できるブロックのスペースをどれだけ**供給**できるか、と考えるとよいでしょう。 ブロックのガス上限に対してもクエリを実行できるので、2016 年から現在までのグラフは以下のようになります: +ブロックに対するガス上限という概念を理解するには、トランザクションをバッチ処理するために利用できるブロックのスペースをどれだけ**供給**できるか、と考えるとよいでしょう。 ブロックのガス上限に対してもクエリを実行できるので、2016年から現在までのグラフは以下のようになります: ![](./avg_gas_limit.png) @@ -229,7 +228,7 @@ GROUP BY dt OFFSET 1 ``` -さらに、イーサリアム・ブロックチェーン上で実行された処理(トランザクションの送信、スマートコントラクトの呼び出し、NFT のミント)のために実際に支払われた 1 日あたりのガスを調べることもできます。 これは、利用可能なイーサリアムのブロックスペースに対する**需要**を示します: +さらに、イーサリアム・ブロックチェーン上で実行された処理(トランザクションの送信、スマートコントラクトの呼び出し、NFTのミント)のために実際に支払われた1日あたりのガスを調べることもできます。 これは、利用可能なイーサリアムのブロックスペースに対する**需要**を示します: ![](./daily_gas_used.png) @@ -242,17 +241,17 @@ GROUP BY dt OFFSET 1 ``` -これら 2 つのグラフを比較することで、 **需要と供給**の関係を確認することができます: +これら2つのグラフを比較することで、 **需要と供給**の関係を確認することができます: ![gas_demand_supply](./gas_demand_supply.png) ここから、ブロックスペースが十分に供給されている場合、ガス価格はブロックスペースへの需要に応じて上下することが分かります。 -最後に、イーサリアムチェーンにおける 1 日のガス価格の平均値を調べたい場合、クエリ時間が非常に長くなるため、イーサリアム・ファウンデーションがトランザクション 1 件あたりに支払ったガス代の平均値を調べるようにクエリを絞り込みます。 +最後に、イーサリアムチェーンにおける1日のガス価格の平均値を調べたい場合、クエリ時間が非常に長くなるため、イーサリアム・ファウンデーションがトランザクション1件あたりに支払ったガス代の平均値を調べるようにクエリを絞り込みます。 ![](./ef_daily_gas.png) -2016 年から現在までに、イーサリアム・ファウンデーションのアドレスに対して実行されたすべてのトランザクションにおいて支払われたガス価格を確認することができます。 クエリは、以下のように実行します: +2016年から現在までに、イーサリアム・ファウンデーションのアドレスに対して実行されたすべてのトランザクションにおいて支払われたガス価格を確認することができます。 クエリは、以下のように実行します: ```sql SELECT @@ -270,4 +269,4 @@ ORDER BY block_time DESC このチュートリアルで使用したすべてのコードをまとめたダッシュボードは、[こちら](https://duneanalytics.com/paulapivat/Learn-Ethereum)からアクセスしてください。 -データを通じて Web3 の知識をさらに深めたい方は、[私を Twitter でフォローしてください](https://twitter.com/paulapivat)。 +データを通じてWeb3の知識をさらに深めたい方は、[私をTwitterでフォローしてください](https://twitter.com/paulapivat)。 diff --git a/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md b/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md index adb43255f91..8c11cdec88d 100644 --- a/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md +++ b/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md @@ -7,7 +7,7 @@ tags: - "Remix" - "Solidity" - "イベント" -skill: intermediate +skill: 中級 lang: ja published: 2020-04-03 source: EthereumDev diff --git a/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md b/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md index 826eff16a38..e2b63496cb1 100644 --- a/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md +++ b/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md @@ -4,20 +4,19 @@ description: author: "Mario Havel" tags: - "クライアント" - - "Geth" - "ノード" -skill: intermediate +skill: 中級 lang: ja published: 2021-01-13 --- -このチュートリアルでは、Geth ノードのモニタリングを設定する方法について説明します。これにより、モニタリングのパフォーマンスについて理解を深め、どのような問題が発生しうるかを理解することができます。 +このチュートリアルでは、Gethノードのモニタリングを設定する方法について説明します。これにより、モニタリングのパフォーマンスについて理解を深め、どのような問題が発生しうるかを理解することができます。 ## 事前に必要な環境 {#prerequisites} -- Geth のインスタンスを実行していること。 -- 大部分の作業ステップ/具体例は Linux を用いていますので、基本的なターミナルの知識が必要でしょう。 -- Geth における一連のモニタリング指標については、以下の動画を参考にしてください:[イーサリアムのインフラをモニタリングする(Péter Szilágyi)](https://www.youtube.com/watch?v=cOBab8IJMYI)。 +- Gethのインスタンスを実行していること。 +- 大部分の作業ステップ/具体例はLinuxを用いていますので、基本的なターミナルの知識が必要でしょう。 +- Gethにおける一連のモニタリング指標については、以下の動画を参考にしてください:[イーサリアムのインフラをモニタリングする(Péter Szilágyi)](https://www.youtube.com/watch?v=cOBab8IJMYI)。 ## モニタリング用のスタック {#monitoring-stack} @@ -30,13 +29,13 @@ published: 2021-01-13 - [Datadog](https://www.datadoghq.com/) - [Chronograf](https://www.influxdata.com/time-series-platform/chronograf/) -さらに、[Geth Prometheus Exporter](https://github.com/hunterlong/gethexporter)がありますが、これは InfluxDB および Grafana 上ですでに設定済みのオプションです。 Docker ならびに RPi 4 向けの[Ethbian OS](https://ethbian.org/index.html)を使用すれば、簡単に設定することができます。 +さらに、[Geth Prometheus Exporter](https://github.com/hunterlong/gethexporter)がありますが、これはInfluxDBおよびGrafana上ですでに設定済みのオプションです。 DockerならびにRPi 4向けの[Ethbian OS](https://ethbian.org/index.html)を使用すれば、簡単に設定することができます。 -このチュートリアルでは、InfluxDB にデータをプッシュするように Geth クライアントを設定し、さらに、Grafana がこのデータをグラフ化するように設定します。 この設定を手動で行うことで、設定プロセスについての理解を深めることができ、設定を変更したり、異なる環境でデプロイする方法を学ぶことができます。 +このチュートリアルでは、InfluxDBにデータをプッシュするように Gethクライアントを設定し、さらに、Grafanaがこのデータをグラフ化するように設定します。 この設定を手動で行うことで、設定プロセスについての理解を深めることができ、設定を変更したり、異なる環境でデプロイする方法を学ぶことができます。 -## InfluxDB を設定する {#setting-up-influxdb} +## InfluxDBを設定する {#setting-up-influxdb} -まず、InfluxDB をダウンロードしてインストールします。 [Influxdata のリリースページ](https://portal.influxdata.com/downloads/)では、さまざまなダウンロードのオプションが提供されています。 あなたの環境に合わせて選択してください。 また、[リポジトリ](https://repos.influxdata.com/)からインストールすることもできます。 例えば、Debian ベースのディストリビューションの場合、以下のように実行します: +まず、InfluxDBをダウンロードしてインストールします。 [Influxdataのリリースページ](https://portal.influxdata.com/downloads/)では、さまざまなダウンロードのオプションが提供されています。 あなたの環境に合わせて選択してください。 また、[リポジトリ](https://repos.influxdata.com/)からインストールすることもできます。 例えば、Debianベースのディストリビューションの場合、以下のように実行します: ``` curl -tlsv1.3 --proto =https -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add @@ -55,13 +54,13 @@ InfluxDB を正常にインストールしたら、バックグラウンドで curl -XPOST "http://localhost:8086/query" --data-urlencode "q=CREATE USER username WITH PASSWORD 'password' WITH ALL PRIVILEGES" ``` -管理者ユーザーを作成すると、Influx クライアントから、[InfluxDB シェル](https://docs.influxdata.com/influxdb/v1.8/tools/shell/)にアクセスできるようになります。 +管理者ユーザーを作成すると、Influxクライアントから、[InfluxDBシェル](https://docs.influxdata.com/influxdb/v1.8/tools/shell/)にアクセスできるようになります。 ``` influx -username 'username' -password 'password' ``` -このシェルから InfluxDB と直接やりとりを行うことで、データベースとユーザーを作成し、Geth のモニタリング指標を取得することができます。 +このシェルから InfluxDBと直接やりとりを行うことで、データベースとユーザーを作成し、Gethのモニタリング指標を取得することができます。 ``` create database geth @@ -75,17 +74,17 @@ show databases show users ``` -InfluxDB シェルを終了します。 +InfluxDBシェルを終了します。 ``` exit ``` -InfluxDB はバックグラウンドで実行しており、Geth から送信される数値を保存するように設定されています。 +InfluxDBはバックグラウンドで実行しており、Gethから送信される数値を保存するように設定されています。 -## Geth 側の設定 {#preparing-geth} +## Geth側の設定 {#preparing-geth} -データベースを設定したら、Geth 上でのデータ収集を有効化する必要があります。 geth-help の`geth --help`の`METRICS AND STATS OPTIONS`を確認してください。 複数のオプションが提供されていますが、ここでは、Geth が InfluxDB にデータをプッシュするように設定する必要があります。 基本的な設定では、InfluxDB がリーチ可能なエンドポイントと、当該データベースに対する認証について設定します。 +データベースを設定したら、Geth上でのデータ収集を有効化する必要があります。 geth-helpの`geth --help`の`METRICS AND STATS OPTIONS`を確認してください。 複数のオプションが提供されていますが、ここでは、Gethが InfluxDBにデータをプッシュするように設定する必要があります。 基本的な設定では、InfluxDBがリーチ可能なエンドポイントと、当該データベースに対する認証について設定します。 ``` geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:8086" --metrics.influxdb.username "geth" --metrics.influxdb.password "chosenpassword" @@ -93,16 +92,16 @@ geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:80 このフラグは、クライアントを起動するコマンドに追加するか、設定ファイル上で保存することが可能です。 -データベースに含まれる数値をリストアップするなどの方法で、Geth が実際にデータをプッシュしているかどうかを確認できます。 InfluxDB のシェルで、以下を入力してください: +データベースに含まれる数値をリストアップするなどの方法で、Gethが実際にデータをプッシュしているかどうかを確認できます。 InfluxDBのシェルで、以下を入力してください: ``` use geth show measurements ``` -## Grafana を設定する {#setting-up-grafana} +## Grafanaを設定する {#setting-up-grafana} -次に、データをグラフィック表示するために Grafana をインストールします。 Grafana のドキュメンテーションを参照して、お使いの環境におけるインストール作業を実行してください。 特別な理由がない限り、OSS バージョンをインストールしてください。 レポジトリを利用して Debian のディストリビューションをインストールするステップは、以下の通りです: +次に、データをグラフィック表示するためにGrafanaをインストールします。 Grafanaのドキュメンテーションを参照して、お使いの環境におけるインストール作業を実行してください。 特別な理由がない限り、OSSバージョンをインストールしてください。 レポジトリを利用してDebianのディストリビューションをインストールするステップは、以下の通りです: ``` curl -tlsv1.3 --proto =https -sL https://packages.grafana.com/gpg.key | sudo apt-key add - @@ -113,11 +112,11 @@ sudo systemctl enable grafana-server sudo systemctl start grafana-server ``` -Grafana が実行されている場合、`localhost:3000`でアクセスできるはずです。 お好みのブラウザからこのパスにアクセスして、デフォルトの認証情報(ユーザー:`admin`、パスワード:`admin`)でログインします。 プロンプトが表示されたら、デフォルトのパスワードを変更して保存してください。 +Grafanaが実行されている場合、`localhost:3000`でアクセスできるはずです。 お好みのブラウザからこのパスにアクセスして、デフォルトの認証情報(ユーザー:`admin`、パスワード:`admin`)でログインします。 プロンプトが表示されたら、デフォルトのパスワードを変更して保存してください。 ![](./grafana1.png) -Grafana のホームページに転送されます。 まず、ソースデータを設定します。 左のバーにある Configuration アイコンをクリックし、「Data sources」を選択します。 +Grafanaのホームページに転送されます。 まず、ソースデータを設定します。 左のバーにあるConfigurationアイコンをクリックし、「Data sources」を選択します。 ![](./grafana2.png) @@ -129,20 +128,20 @@ Grafana のホームページに転送されます。 まず、ソースデー ![](./grafana4.png) -同一のマシンでツールを実行している場合、データソースの設定は非常に簡単です。 データベースにアクセスするには、InfluxDB のアドレスと詳細を設定する必要があります。 以下の画像を参照してください。 +同一のマシンでツールを実行している場合、データソースの設定は非常に簡単です。 データベースにアクセスするには、InfluxDBのアドレスと詳細を設定する必要があります。 以下の画像を参照してください。 ![](./grafana5.png) -設定が完了し、InfluxDB がアクセス可能になったら、「Save and test」をクリックして、確認のポップアップ画面が表示されるまで待ってください。 +設定が完了し、InfluxDBがアクセス可能になったら、「Save and test」をクリックして、確認のポップアップ画面が表示されるまで待ってください。 ![](./grafana6.png) -Grafana の設定が完了し、InfluxDB のデータを読み込めるようになりました。 次に、データを分析して表示するダッシュボードを作成します。 ダッシュボードの属性は JSON ファイルでエンコードされますので、誰でも簡単に作成し、インポートすることが可能です。 左のバーで、「Create and Import」をクリックしてください。 +Grafanaの設定が完了し、InfluxDBのデータを読み込めるようになりました。 次に、データを分析して表示するダッシュボードを作成します。 ダッシュボードの属性はJSONファイルでエンコードされますので、誰でも簡単に作成し、インポートすることが可能です。 左のバーで、「Create and Import」をクリックしてください。 ![](./grafana7.png) -Geth のモニタリング用ダッシュボードの場合、[このダッシュボード](https://grafana.com/grafana/dashboards/13877/)の ID をコピーして、Grafana の「Import page」にペーストしてください。 ダッシュボードを保存すると、以下のような状態になっているはずです: +Gethのモニタリング用ダッシュボードの場合、[このダッシュボード](https://grafana.com/grafana/dashboards/13877/)のIDをコピーして、Grafanaの「Import page」にペーストしてください。 ダッシュボードを保存すると、以下のような状態になっているはずです: ![](./grafana8.png) -ダッシュボードの表示は変更可能です。 各パネルは、編集、移動、削除、追加が可能です。 各自の好みに合わせて、ダッシュボードの設定を変更してください。 あなた次第です! ダッシュボードの詳細な仕組みについては、 [Grafana のドキュメンテーション](https://grafana.com/docs/grafana/latest/dashboards/)を参照してください。 また、[アラート機能](https://grafana.com/docs/grafana/latest/alerting/)も参照するとよいでしょう。 これは、各指標において一定の値に達した場合、アラート通知を受け取るように設定するものです。 アラート通知は、様々な通信チャネルに対応しています。 +ダッシュボードの表示は変更可能です。 各パネルは、編集、移動、削除、追加が可能です。 各自の好みに合わせて、ダッシュボードの設定を変更してください。 あなた次第です! ダッシュボードの詳細な仕組みについては、 [Grafanaのドキュメンテーション](https://grafana.com/docs/grafana/latest/dashboards/)を参照してください。 また、[アラート機能](https://grafana.com/docs/grafana/latest/alerting/)も参照するとよいでしょう。 これは、各指標において一定の値に達した場合、アラート通知を受け取るように設定するものです。 アラート通知は、様々な通信チャネルに対応しています。 diff --git a/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md index 5475ffe6f14..96cc92d9c85 100644 --- a/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md @@ -4,82 +4,81 @@ description: Optimismの標準ブリッジは、どのように機能するか author: Ori Pomerantz tags: - "Solidity" - - "Optimism" - "ブリッジ" - "レイヤー2" -skill: intermediate +skill: 中級 published: 2022-03-30 lang: ja --- -[Optimism](https://www.optimism.io/)は、[Optimisitc ロールアップ](/developers/docs/scaling/optimistic-rollups/)を行うメカニズムのひとつです。 Optimistic ロールアップでは、ネットワークに含まれるすべてノードではなく一部のノードのみを対象としてトランザクションが処理されるため、イーサリアム・メインネット(「レイヤー 1」または「L1」とも呼ばれます)よりも手数料が低くなります。 一部のノードのみを対象として処理されるものの、すべてのデータは L1 に書き込まれるため、あらゆる事項につき、メインネットにおける完全性および可用性についての保証に基づいて証明、再構築することが可能です。 +[Optimism](https://www.optimism.io/)は、[Optimisitc ロールアップ](/developers/docs/scaling/optimistic-rollups/)を行うメカニズムのひとつです。 Optimistic ロールアップでは、ネットワークに含まれるすべてノードではなく一部のノードのみを対象としてトランザクションが処理されるため、イーサリアム・メインネット(「レイヤー1」または「L1」とも呼ばれます)よりも手数料が低くなります。 一部のノードのみを対象として処理されるものの、すべてのデータはL1に書き込まれるため、あらゆる事項につき、メインネットにおける完全性および可用性についての保証に基づいて証明、再構築することが可能です。 -Optimism(またはその他の L2)上で L1 のアセットを使用するには、当該アセットを[ブリッジ](/bridges/#prerequisites)する必要があります。 アセットをブリッジする方法のひとつとして、アセット(最も一般的なのは、ETH や[ERC-20 トークン](/developers/docs/standards/tokens/erc-20/)です)を L1 上でロックし、L2 上で同等のアセットを受け取る方法があります。 最終的に、これらのアセットを所持するユーザーは、再度 L1 にブリッジする必要があるでしょう。 L1 にアセットをブリッジすると、L2 上のアセットはバーンされ、L1 上のアセットがユーザーに戻されます。 +Optimism(またはその他のL2)上でL1のアセットを使用するには、当該アセットを[ブリッジ](/bridges/#prerequisites)する必要があります。 アセットをブリッジする方法のひとつとして、アセット(最も一般的なのは、ETHや[ERC-20 トークン](/developers/docs/standards/tokens/erc-20/)です)をL1上でロックし、L2上で同等のアセットを受け取る方法があります。 最終的に、これらのアセットを所持するユーザーは、再度L1にブリッジする必要があるでしょう。 L1にアセットをブリッジすると、L2上のアセットはバーンされ、L1上のアセットがユーザーに戻されます。 -以上が、[Optimism における標準ブリッジ](https://community.optimism.io/docs/developers/bridge/standard-bridge)の仕組みです。 この記事では、このブリッジ機能について Solidity 上で適切に作成したソースコードを確認しながら、その仕組みを学びます。 +以上が、[Optimismにおける標準ブリッジ](https://community.optimism.io/docs/developers/bridge/standard-bridge)の仕組みです。 この記事では、このブリッジ機能についてSolidity上で適切に作成したソースコードを確認しながら、その仕組みを学びます。 ## 制御フロー {#control-flows} -ブリッジは、2 つのメインフローで構成されます: +ブリッジは、2つのメインフローで構成されます: -- L1 から L2 への入金 -- L2 から L1 への出金 +- L1からL2への入金 +- L2からL1への出金 ### 入金フロー {#deposit-flow} #### L1 {#deposit-flow-layer-1} -1. ERC-20 を入金する場合、入金者はブリッジに対し、入金額を使用するためのアローワンスを与えます。 -2. 入金者は、L1 ブリッジ(`depositERC20`、`depositERC20To`、 `depositETH`あるいは `depositETHTo`)を呼び出します。 -3. L1 ブリッジが、ブリッジされたアセットを保持します。 - - ETH の場合:アセットは、呼び出しを通じて入金者に送信されます。 - - ERC-20 トークンの場合:アセットは、入金者が提供するアローワンスを使用して、ブリッジ自体に送信されます。 -4. L1 のブリッジが、クロスドメインのメッセージメカニズムを通じて、L2 のブリッジ上で`finalizeDeposit`を呼び出します。 +1. ERC-20を入金する場合、入金者はブリッジに対し、入金額を使用するためのアローワンスを与えます。 +2. 入金者は、L1ブリッジ(`depositERC20`、`depositERC20To`、 `depositETH`あるいは `depositETHTo`)を呼び出します。 +3. L1ブリッジが、ブリッジされたアセットを保持します。 + - ETHの場合:アセットは、呼び出しを通じて入金者に送信されます。 + - ERC-20トークンの場合:アセットは、入金者が提供するアローワンスを使用して、ブリッジ自体に送信されます。 +4. L1のブリッジが、クロスドメインのメッセージメカニズムを通じて、L2のブリッジ上で`finalizeDeposit`を呼び出します。 #### L2 {#deposit-flow-layer-2} -5. L2 のブリッジは、`finalizeDeposit`の呼び出しにつき、以下が適切であることを確認します: +5. L2のブリッジは、`finalizeDeposit`の呼び出しにつき、以下が適切であることを確認します: - クロスドメインのメッセージ・コントラクトからの呼び出しであること。 - - ブリッジが L1 上で作成されたものであること。 -6. L2 のブリッジはさらに、L2 上の ERC-20 トークンコントラクトにつき、以下が適切であることを確認します: - - L2 のコントラクトにおいて、L1 における対応するコントラクトが、L1 上で送信されたトークンと同一であると報告していること。 - - L2 のコントラクトが、([ERC-165 を使用した](https://eips.ethereum.org/EIPS/eip-165))適切なインターフェイスをサポートすると報告していること。 -7. L2 のコントラクトが適切であると確認できた場合は、適切なアドレスに対して希望する量のトークンをミントするために、そのコントラクトを呼び出してください。 そうでない場合は、出金プロセスを開始して、ユーザーが L1 上のトークンを請求できるようにします。 + - ブリッジがL1上で作成されたものであること。 +6. L2のブリッジはさらに、L2上のERC-20トークンコントラクトにつき、以下が適切であることを確認します: + - L2のコントラクトにおいて、L1における対応するコントラクトが、L1上で送信されたトークンと同一であると報告していること。 + - L2のコントラクトが、([ERC-165を使用した](https://eips.ethereum.org/EIPS/eip-165))適切なインターフェイスをサポートすると報告していること。 +7. L2のコントラクトが適切であると確認できた場合は、適切なアドレスに対して希望する量のトークンをミントするために、そのコントラクトを呼び出してください。 そうでない場合は、出金プロセスを開始して、ユーザーがL1上のトークンを請求できるようにします。 ### 出金フロー {#withdrawal-flow} -#### L2 {#withdrawal-flow-layer-2} +#### レイヤー2 {#withdrawal-flow-layer-2} -1. 出金者は、L2 のブリッジ(`withdraw`または`withdrawTo`)を呼び出します 。 -2. L2 のブリッジは、`msg.sender`が所有する適切な数のトークンをバーンします。 -3. L2 のブリッジは、クロスドメインのメッセージ・メカニズムを利用して、L1 のブリッジ上で、 `finalizeETHWithdrawal`または`finalizeERC20Withdrawal`を呼び出します。 +1. 出金者は、L2のブリッジ(`withdraw`または`withdrawTo`)を呼び出します 。 +2. L2のブリッジは、`msg.sender`が所有する適切な数のトークンをバーンします。 +3. L2のブリッジは、クロスドメインのメッセージ・メカニズムを利用して、L1のブリッジ上で、 `finalizeETHWithdrawal`または`finalizeERC20Withdrawal`を呼び出します。 #### L1 {#withdrawal-flow-layer-1} -4. L1 のブリッジは、`finalizeETHWithdraw`または`finalizeERC20Withdral`の呼び出しにつき、以下が適切であるかを確認します: +4. L1のブリッジは、`finalizeETHWithdraw`または`finalizeERC20Withdral`の呼び出しにつき、以下が適切であるかを確認します: - クロスドメインのメッセージ・メカニズムを経由していること。 - - L2 のブリッジで作成されていること。 -5. L1 のブリッジは、適切な資産(ETH または ERC-20)を適切なアドレスに送信します。 + - L2のブリッジで作成されていること。 +5. L1のブリッジは、適切な資産(ETHまたはERC-20)を適切なアドレスに送信します。 -## レイヤー 1 のコード {#layer-1-code} +## レイヤー1のコード {#layer-1-code} 以下は、イーサリアム・メインネット(L1)で実行されるコードです。 ### IL1ERC20Bridge {#IL1ERC20Bridge} -このインターフェイスは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol)で定義されています。 このインターフェイスには、ERC-20 トークンをブリッジするために必要な機能と定義が含まれます。 +このインターフェイスは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol)で定義されています。 このインターフェイスには、ERC-20トークンをブリッジするために必要な機能と定義が含まれます。 ```solidity // SPDX-License-Identifier: MIT ``` -Optimism のコードの大部分は、[MIT ライセンス](https://help.optimism.io/hc/en-us/articles/4411908707995-What-software-license-does-Optimism-use-)に基づいています。 +Optimismのコードの大部分は、[MITライセンス](https://help.optimism.io/hc/en-us/articles/4411908707995-What-software-license-does-Optimism-use-)に基づいています。 ```solidity pragma solidity >0.5.0 <0.9.0; ``` -本記事の執筆時点で、Solidity の最新バージョンは 0.8.12 です。 バージョン 0.9.0 においてこのコードが利用できるかは、同バージョンがリリースされるまで不明です。 +本記事の執筆時点で、Solidityの最新バージョンは0.8.12です。 バージョン0.9.0においてこのコードが利用できるかは、同バージョンがリリースされるまで不明です。 ```solidity /** @@ -93,14 +92,14 @@ interface IL1ERC20Bridge { event ERC20DepositInitiated( ``` -Optimism のブリッジ関連用語において、*入金*とは、L1 から L2 に送金することを意味し、*出金*とは、L2 から L1 へ送金することを意味します。 +Optimismのブリッジ関連用語において、_入金_とは、L1からL2に送金することを意味し、_出金_とは、L2からL1へ送金することを意味します。 ```solidity address indexed _l1Token, address indexed _l2Token, ``` -ほとんどの場合、L1 上の ERC-20 のアドレスは、L2 上で対応する ERC-20 のアドレスとは異なります。 トークンアドレスのリストは、[こちら](https://static.optimism.io/optimism.tokenlist.json)を参照してください。 `chainId`が 1 のアドレスであれば、L1 (メインネット) 上のトークンであり、`chainId`が 10 のアドレスでれば、L2(Optimism)上のトークンです。 残りの 2 つの`chainId`の値は、Kovan テストネットワーク(42)と Optimistic Kovan テストネットワーク(69)のためのものです。 +ほとんどの場合、L1上のERC-20のアドレスは、L2上で対応するERC-20のアドレスとは異なります。 トークンアドレスのリストは、[こちら](https://static.optimism.io/optimism.tokenlist.json)を参照してください。 `chainId`が1のアドレスであれば、L1 (メインネット) 上のトークンであり、`chainId`が10のアドレスでれば、L2(Optimism)上のトークンです。 残りの2つの`chainId`の値は、Kovanテストネットワーク(42)とOptimistic Kovanテストネットワーク(69)のためのものです。 ```solidity address indexed _from, @@ -123,7 +122,7 @@ Optimism のブリッジ関連用語において、*入金*とは、L1 から L2 ); ``` -入金と出金の両方向につき、同じブリッジのコントラクトが処理します。 つまり、L1 のブリッジでは入金を初期化し、出金を確定します。 +入金と出金の両方向につき、同じブリッジのコントラクトが処理します。 つまり、L1のブリッジでは入金を初期化し、出金を確定します。 ```solidity @@ -138,7 +137,7 @@ Optimism のブリッジ関連用語において、*入金*とは、L1 から L2 function l2TokenBridge() external returns (address); ``` -実際には、L2 のブリッジは事前にデプロイされており、常に「`0x42000000000000000000000000000000000000000010`」のアドレスとなるため、この機能は必要ではありません。 この機能は、L2 上のブリッジとの対称性を確保するためのものです。というのも、L1 ブリッジのアドレスを確認することは無意味とは*言えない*ためです。 +実際には、L2のブリッジは事前にデプロイされており、常に「`0x42000000000000000000000000000000000000000010`」のアドレスとなるため、この機能は必要ではありません。 この機能は、L2上のブリッジとの対称性を確保するためのものです。というのも、L1ブリッジのアドレスを確認することは無意味とは_言えない_ためです。 ```solidity /** @@ -160,7 +159,7 @@ Optimism のブリッジ関連用語において、*入金*とは、L1 から L2 ) external; ``` -`_l2Gas`のパラメータは、このトランザクションが使用できる L2 上のガス量です。 この値は、[一定の(高い)上限まで無料であるため](https://community.optimism.io/docs/developers/bridge/messaging/#for-l1-%E2%87%92-l2-transactions-2)、ミント時に ERC-20 がコントラクトが特に異常な動作を行わない限り、問題は発生しません。 以下の関数は、異なるブロックチェーンにおける同一アドレスにアセットをブリッジしたいという一般的なシナリオで用いることができます。 +`_l2Gas`のパラメータは、このトランザクションが使用できるL2上のガス量です。 この値は、[一定の(高い)上限まで無料であるため](https://community.optimism.io/docs/developers/bridge/messaging/#for-l1-%E2%87%92-l2-transactions-2)、ミント時にERC-20がコントラクトが特に異常な動作を行わない限り、問題は発生しません。 以下の関数は、異なるブロックチェーンにおける同一アドレスにアセットをブリッジしたいという一般的なシナリオで用いることができます。 ```solidity /** @@ -184,7 +183,7 @@ Optimism のブリッジ関連用語において、*入金*とは、L1 から L2 ) external; ``` -次のコードは`depositERC20`とほぼ同一の関数ですが、ERC-20 トークンを異なるアドレスに送信することができます。 +次のコードは`depositERC20`とほぼ同一の関数ですが、ERC-20トークンを異なるアドレスに送信することができます。 ```solidity /************************* @@ -216,16 +215,16 @@ Optimism のブリッジ関連用語において、*入金*とは、L1 から L2 } ``` -Optimism における出金(および、他の L2 から L1 へのメッセージ送信)は、2 つのステップで実行されます: +Optimismにおける出金(および、他のL2からL1へのメッセージ送信)は、2つのステップで実行されます: -1. L2 でトランザクションを開始する。 -2. L1 で、トランザクションを確定/クレームする。 L1 でのトランザクションは、L2 でのトランザクションに対する[異議申し立て期間](https://community.optimism.io/docs/how-optimism-works/#fault-proofs) が終了した後で実行可能になります。 +1. L2でトランザクションを開始する。 +2. L1で、トランザクションを確定/クレームする。 L1でのトランザクションは、L2でのトランザクションに対する[異議申し立て期間](https://community.optimism.io/docs/how-optimism-works/#fault-proofs) が終了した後で実行可能になります。 ### IL1StandardBridge {#il1standardbridge} -このインターフェイスは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol)で定義されています。 このブリッジには、ETH を対象とするイベントおよび関数の定義が含まれています。 これらの定義は、ERC-20 トークンを対象とする`IL1ERC20Bridge`の定義とほぼ同一です。 +このインターフェイスは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol)で定義されています。 このブリッジには、ETHを対象とするイベントおよび関数の定義が含まれています。 これらの定義は、ERC-20トークンを対象とする`IL1ERC20Bridge`の定義とほぼ同一です。 -一部の ERC-20 トークンは、標準ブリッジでは処理できず、カスタム処理が必要となるため、このブリッジのインターフェイスは 2 つのファイルで構成されています。 これにより、カスタム処理が必要なトークンを取り扱うブリッジについては`IL1ERC20Bridge`を実装すればよく、ETH のブリッジ機能を実装する必要はありません。 +一部のERC-20トークンは、標準ブリッジでは処理できず、カスタム処理が必要となるため、このブリッジのインターフェイスは2つのファイルで構成されています。 これにより、カスタム処理が必要なトークンを取り扱うブリッジについては`IL1ERC20Bridge`を実装すればよく、ETHのブリッジ機能を実装する必要はありません。 ```solidity // SPDX-License-Identifier: MIT @@ -248,13 +247,13 @@ interface IL1StandardBridge is IL1ERC20Bridge { ); ``` -このイベントは、ERC-20 トークン用のイベント(`ERC20DepositInitiated`)とほぼ同一ですが、L1 および L2 上のトークンアドレスが含まれていない点が異なります。 他のイベントおよび関数についても、この点が異なります。 +このイベントは、ERC-20トークン用のイベント(`ERC20DepositInitiated`)とほぼ同一ですが、L1およびL2上のトークンアドレスが含まれていない点が異なります。 他のイベントおよび関数についても、この点が異なります。 ```solidity event ETHWithdrawalFinalized( . - . - . + 。 + 。 ); /******************** @@ -263,17 +262,17 @@ interface IL1StandardBridge is IL1ERC20Bridge { /** * @dev Deposit an amount of the ETH to the caller's balance on L2. - . - . - . + 。 + 。 + 。 */ function depositETH(uint32 _l2Gas, bytes calldata _data) external payable; /** * @dev Deposit an amount of ETH to a recipient's balance on L2. - . - . - . + 。 + 。 + 。 */ function depositETHTo( address _to, @@ -289,9 +288,9 @@ interface IL1StandardBridge is IL1ERC20Bridge { * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the * L1 ETH token. Since only the xDomainMessenger can call this function, it will never be called * before the withdrawal is finalized. - . - . - . + 。 + 。 + 。 */ function finalizeETHWithdrawal( address _from, @@ -359,7 +358,7 @@ contract CrossDomainEnabled { modifier onlyFromCrossDomainAccount(address _sourceDomainAccount) { ``` -クロスドメインのメッセージング機能は、ブロックチェーン(イーサリアム・メインネットまたは Optimism)上で実行されているあらゆるコントラクトからアクセス可能です。 ただし、相手方のブリッジから送信された特定のメッセージ*のみ*を信頼するためには、双方のブリッジが必要になります。 +クロスドメインのメッセージング機能は、ブロックチェーン(イーサリアム・メインネットまたはOptimism)上で実行されているあらゆるコントラクトからアクセス可能です。 ただし、相手方のブリッジから送信された特定のメッセージ_のみ_を信頼するためには、双方のブリッジが必要になります。 ```solidity require( @@ -425,7 +424,7 @@ contract CrossDomainEnabled { // slither-disable-next-line reentrancy-events, reentrancy-benign ``` -[Slither](https://github.com/crytic/slither)は、Optimism において、すべてのコントラクトの脆弱性やその他の潜在的な問題箇所を特定するために実行される静的解析ツールです。 ここでは、以下の行により 2 つの脆弱性がトリガーされます。 +[Slither](https://github.com/crytic/slither)は、Optimismにおいて、すべてのコントラクトの脆弱性やその他の潜在的な問題箇所を特定するために実行される静的解析ツールです。 ここでは、以下の行により2つの脆弱性がトリガーされます。 1. [リエントランシーのイベント](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) 2. [無害のリエントランシー](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) @@ -436,9 +435,9 @@ contract CrossDomainEnabled { } ``` -このケースでは、Slither が当該情報を把握する方法を持たない場合でも、`getCrossDomainMessenger()`が信頼できるアドレスを返すと分かっているため、リエントランシーについて心配する必要はありません。 +このケースでは、Slitherが当該情報を把握する方法を持たない場合でも、`getCrossDomainMessenger()`が信頼できるアドレスを返すと分かっているため、リエントランシーについて心配する必要はありません。 -### L1 上のブリッジコントラクト {#the-l1-bridge-contract} +### L1上のブリッジコントラクト {#the-l1-bridge-contract} このコントラクトのソースコードは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1StandardBridge.sol)で入手してください。 @@ -447,7 +446,7 @@ contract CrossDomainEnabled { pragma solidity ^0.8.9; ``` -このインターフェイスは、他のコントラクトにも含まれる場合があるため、Solidity のさまざまなバージョンをサポートする必要があります。 しかしここでは、ブリッジ自体がコントラクトであるため、使用できる Solidity のバージョンを限定することが可能です。 +このインターフェイスは、他のコントラクトにも含まれる場合があるため、Solidityのさまざまなバージョンをサポートする必要があります。 しかしここでは、ブリッジ自体がコントラクトであるため、使用できるSolidityのバージョンを限定することが可能です。 ```solidity /* Interface Imports */ @@ -461,13 +460,13 @@ import { IL1ERC20Bridge } from "./IL1ERC20Bridge.sol"; import { IL2ERC20Bridge } from "../../L2/messaging/IL2ERC20Bridge.sol"; ``` -[このインターフェイス](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol)では、L2 上で標準ブリッジを制御するためのメッセージを作成します。 +[このインターフェイス](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol)では、L2上で標準ブリッジを制御するためのメッセージを作成します。 ```solidity import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; ``` -[このインターフェイス](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol)は、ERC-20 のコントラクトを制御するために使用します。 詳細については、[こちら](/developers/tutorials/erc20-annotated-code/#the-interface)をご覧ください。 +[このインターフェイス](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol)は、ERC-20のコントラクトを制御するために使用します。 詳細については、[こちら](/developers/tutorials/erc20-annotated-code/#the-interface)をご覧ください。 ```solidity /* Library Imports */ @@ -480,13 +479,13 @@ import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.so import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; ``` -[`Lib_PredeployAddresses`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol)には、常に同じアドレスを持つ L2 上のコントラクトのアドレスが含まれています。 これには、L2 上の標準ブリッジが含まれます。 +[`Lib_PredeployAddresses`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol)には、常に同じアドレスを持つL2上のコントラクトのアドレスが含まれています。 これには、L2上の標準ブリッジが含まれます。 ```solidity import { Address } from "@openzeppelin/contracts/utils/Address.sol"; ``` -[OpenZeppelin のアドレス・ユーティリティ](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol)です。 これは、コントラクト上のアドレスと外部所有アカウント(EOA)に含まれるアドレスを区別するために使われます。 +[OpenZeppelinのアドレス・ユーティリティ](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol)です。 これは、コントラクト上のアドレスと外部所有アカウント(EOA)に含まれるアドレスを区別するために使われます。 これは、直接の呼び出しとコントラクトのコンストラクタで作成した呼び出しを区別できないため完全なソリューションとは言えませんが、少なくとも、よくあるユーザーエラーを特定、防止することは可能です。 @@ -494,12 +493,12 @@ import { Address } from "@openzeppelin/contracts/utils/Address.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; ``` -[ERC-20 標準](https://eips.ethereum.org/EIPS/eip-20)では、コントラクトが実行失敗を報告する手段として以下の 2 つがあります: +[ERC-20標準](https://eips.ethereum.org/EIPS/eip-20)では、コントラクトが実行失敗を報告する手段として以下の2つがあります: 1. 元に戻す 2. `false`を返す -両方のケースに対応するとコードがより複雑になるため、代わりに[OpenZeppelin の`SafeERC20`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol)を使用します。これにより、[失敗した場合は常に元に戻されます](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol#L96)。 +両方のケースに対応するとコードがより複雑になるため、代わりに[OpenZeppelinの`SafeERC20`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol)を使用します。これにより、[失敗した場合は常に元に戻されます](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol#L96)。 ```solidity /** @@ -532,7 +531,7 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { mapping(address => mapping(address => uint256)) public deposits; ``` -[2 次元スパース配列](https://en.wikipedia.org/wiki/Sparse_matrix)を定義するには、このようなダブル[マッピング](https://www.tutorialspoint.com/solidity/solidity_mappings.htm)を用います。 このデータ構造の値は、`deposit[L1 token addr][L2 token addr]`として識別されます。 初期値はゼロになります。 ゼロ以外の値が設定されたセルのみが、ストレージに書き込まれます。 +[2次元スパース配列](https://en.wikipedia.org/wiki/Sparse_matrix)を定義するには、このようなダブル[マッピング](https://www.tutorialspoint.com/solidity/solidity_mappings.htm)を用います。 このデータ構造の値は、`deposit[L1 token addr][L2 token addr]`として識別されます。 初期値はゼロになります。 ゼロ以外の値が設定されたセルのみが、ストレージに書き込まれます。 ```solidity @@ -544,9 +543,9 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { constructor() CrossDomainEnabled(address(0)) {} ``` -ストレージ内のすべての変数をコピーせずに、このコントラクトを更新するには、 [`プロキシ`](https://docs.openzeppelin.com/contracts/3.x/api/proxy)を使用します。プロキシは、[`delegatecall`](https://solidity-by-example.org/delegatecall/)を用いて、プロキシのコントラクトにおいてアドレスが保存された別個のコントラクトに対して呼び出しを転送するものです(コントラクトを更新する際に、プロキシに対してこのアドレスを変更するように指示することになります)。 「`delegatecall`」を使用すると、ストレージは、*呼び出し元の*コントラクトのストレージのままになるため、すべてのコントラクト状態変数の値は影響を受けません。 +ストレージ内のすべての変数をコピーせずに、このコントラクトを更新するには、 [`プロキシ`](https://docs.openzeppelin.com/contracts/3.x/api/proxy)を使用します。プロキシは、[`delegatecall`](https://solidity-by-example.org/delegatecall/)を用いて、プロキシのコントラクトにおいてアドレスが保存された別個のコントラクトに対して呼び出しを転送するものです(コントラクトを更新する際に、プロキシに対してこのアドレスを変更するように指示することになります)。 「`delegatecall`」を使用すると、ストレージは、_呼び出し元の_コントラクトのストレージのままになるため、すべてのコントラクト状態変数の値は影響を受けません。 -このパターンを用いる効果のひとつとして、`delegatecall`の*呼び出し先*であるコントラクトのストレージが使用されないため、送信されたコンストラクタの値が意味を持たない点が挙げられます。 これこそ、`CrossDomainEnabled`のコンストラクタに対して無意味な値を入力できる理由です。 同時に、以下の初期化がコンストラクタとは別個に存在するである理由でもあります。 +このパターンを用いる効果のひとつとして、`delegatecall`の_呼び出し先_であるコントラクトのストレージが使用されないため、送信されたコンストラクタの値が意味を持たない点が挙げられます。 これこそ、`CrossDomainEnabled`のコンストラクタに対して無意味な値を入力できる理由です。 同時に、以下の初期化がコンストラクタとは別個に存在するである理由でもあります。 ```solidity /****************** @@ -560,18 +559,18 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { // slither-disable-next-line external-function ``` -この[Slither のテスト](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external)は、コントラクトのコードにより呼び出される関数以外の関数であり、`public`ではなく、`external`と宣言される関数を特定するものです。 `external`関数のガス代は、コールデータに含まれるパラメータで指定できるため、安価に抑えることができます。 `public`と宣言された関数は、コントラクト内でアクセス可能である必要があります。 コントラクトはそれ自体のコールデータを変更できないため、パラメータはメモリに保存する必要があります。 このような関数を外部から呼び出す場合、コールデータをメモリにコピーする必要があるため、ガス代が発生します。 今回は関数を 1 回のみ呼び出すため、コスト上の非効率性は度外視できます。 +この[Slitherのテスト](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external)は、コントラクトのコードにより呼び出される関数以外の関数であり、`public`ではなく、`external`と宣言される関数を特定するものです。 `external`関数のガス代は、コールデータに含まれるパラメータで指定できるため、安価に抑えることができます。 `public`と宣言された関数は、コントラクト内でアクセス可能である必要があります。 コントラクトはそれ自体のコールデータを変更できないため、パラメータはメモリに保存する必要があります。 このような関数を外部から呼び出す場合、コールデータをメモリにコピーする必要があるため、ガス代が発生します。 今回は関数を1回のみ呼び出すため、コスト上の非効率性は度外視できます。 ```solidity function initialize(address _l1messenger, address _l2TokenBridge) public { require(messenger == address(0), "Contract has already been initialized."); ``` -`initialize`関数は、1 回だけ呼び出す必要があります。 L1 のクロスドメイン・メッセンジャーまたは L2 のトークンブリッジのいずれかのアドレスが変更されると、新しいプロキシとそれを呼び出す新しいブリッジが作成されます。 これは、システム全体がアップグレードされた場合を除いて発生する可能性は低く、非常にまれです。 +`initialize`関数は、1回だけ呼び出す必要があります。 L1のクロスドメイン・メッセンジャーまたは L2のトークンブリッジのいずれかのアドレスが変更されると、新しいプロキシとそれを呼び出す新しいブリッジが作成されます。 これは、システム全体がアップグレードされた場合を除いて発生する可能性は低く、非常にまれです。 -この関数には、呼び出し可能な*アカウント*を制限するメカニズムが含まれない点に注意してください。 つまり理論的には、ネットワークに対する攻撃者は、プロキシとブリッジの最初のバージョンがデプロイされるまで待機し、正当なユーザーが`initialize`関数にアクセスできる前に[フロントラン](https://solidity-by-example.org/hacks/front-running/)を実行することが可能です。 これを防ぐには、以下の 2 つの方法があります: +この関数には、呼び出し可能な_アカウント_を制限するメカニズムが含まれない点に注意してください。 つまり理論的には、ネットワークに対する攻撃者は、プロキシとブリッジの最初のバージョンがデプロイされるまで待機し、正当なユーザーが`initialize`関数にアクセスできる前に[フロントラン](https://solidity-by-example.org/hacks/front-running/)を実行することが可能です。 これを防ぐには、以下の2つの方法があります: -1. コントラクトが EOA により直接デプロイされるのではなく、[別のコントラクトが作成したトランザクションにおいて](https://medium.com/upstate-interactive/creating-a-contract-with-a-smart-contract-bdb67c5c8595)デプロイされる場合、全体のプロセスがアトミックになり、他のトランザクションが実行される前に終了する場合があります。 +1. コントラクトがEOAにより直接デプロイされるのではなく、[別のコントラクトが作成したトランザクションにおいて](https://medium.com/upstate-interactive/creating-a-contract-with-a-smart-contract-bdb67c5c8595)デプロイされる場合、全体のプロセスがアトミックになり、他のトランザクションが実行される前に終了する場合があります。 2. 正当な`initialize`呼び出しが失敗した場合、常に、新たに作成されたプロキシおよびブリッジを無視し、さらに新しいものを作成することが可能です。 ```solidity @@ -580,7 +579,7 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { } ``` -これらは、ブリッジが知る必要がある 2 つのパラメータです。 +これらは、ブリッジが知る必要がある2つのパラメータです。 ```solidity @@ -598,7 +597,7 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { } ``` -これは、OpenZeppelin の`Address`ユーティリティが必要となる理由です。 +これは、OpenZeppelinの`Address`ユーティリティが必要となる理由です。 ```solidity /** @@ -634,7 +633,7 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { } ``` -これら 2 つの関数は、実際の ETH 入金を処理する関数である`_initiateETHDeposit`に関連したラッパーです。 +これら2つの関数は、実際のETH入金を処理する関数である`_initiateETHDeposit`に関連したラッパーです。 ```solidity /** @@ -657,7 +656,7 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { bytes memory message = abi.encodeWithSelector( ``` -クロスドメインのメッセージは、メッセージをコールデータとして宛先のコントラクトを呼び出す仕組みとして機能します。 Solidity のコントラクトは常に、コールデータを[ABI 仕様](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html)に従って解釈します。 Solidity の[`abi.encodeWithSelector`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#abi-encoding-and-decoding-functions)は、このコールデータを作成するものです。 +クロスドメインのメッセージは、メッセージをコールデータとして宛先のコントラクトを呼び出す仕組みとして機能します。 Solidityのコントラクトは常に、コールデータを[ABI仕様](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html)に従って解釈します。 Solidityの[`abi.encodeWithSelector`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#abi-encoding-and-decoding-functions)は、このコールデータを作成するものです。 ```solidity IL2ERC20Bridge.finalizeDeposit.selector, @@ -672,14 +671,14 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { ここでのメッセージは、[ `finalizeDeposit`関数](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol#L141-L148)を以下のパラメータで呼び出すことです。 -| パラメータ | 値 | 説明 | -| ---------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| \_l1Token | address(0) | L1 上の ETH (ERC-20 トークンではない) を表す特別な値 | -| \_l2Token | Lib_PredeployAddresses.OVM_ETH | Optimism 上で ETH を管理する L2 のコントラクト`0xDeadDeAddeAddEAddeadDEaDDeaDDeAD0000` (このコントラクトは、Optimism 内部でのみ使用されます) | -| \_from | \_from | L1 上の ETH 送信元アドレス | -| \_to | \_to | L2 上の ETH 受領用アドレス | -| amount | msg.value | 送信された wei 額(すでにブリッジに送信済みの額) | -| \_data | \_data | 入金に添付する追加の日付 | +| パラメータ | 値 | 説明 | +| ----------- | -------------------------------- | --------------------------------------------------------------------------------------------------- | +| \_l1Token | address(0) | L1上のETH (ERC-20トークンではない) を表す特別な値 | +| \_l2Token | Lib_PredeployAddresses.OVM_ETH | Optimism上でETHを管理するL2のコントラクト`0xDeadDeAddeAddEAddeadDEaDDeaDDeAD0000` (このコントラクトは、Optimism内部でのみ使用されます) | +| \_from | \_from | L1上のETH送信元アドレス | +| \_to | \_to | L2上のETH受領用アドレス | +| amount | msg.value | 送信されたwei額(すでにブリッジに送信済みの額) | +| \_data | \_data | 入金に添付する追加の日付 | ```solidity // Send calldata into L2 @@ -703,8 +702,8 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { */ function depositERC20( . - . - . + 。 + 。 ) external virtual onlyEOA { _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, msg.sender, _amount, _l2Gas, _data); } @@ -714,14 +713,14 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { */ function depositERC20To( . - . - . + 。 + 。 ) external virtual { _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, _to, _amount, _l2Gas, _data); } ``` -これら 2 つの関数は、実際の ERC-20 トークンの入金を処理する関数である`_initiateERC20Deposit`に関連したラッパーです。 +これら2つの関数は、実際のERC-20トークンの入金を処理する関数である`_initiateERC20Deposit`に関連したラッパーです。 ```solidity /** @@ -749,7 +748,7 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { ) internal { ``` -この関数は、上記の`_initiateETHDeposit`に似ていますが、いくつかの重要な点が異なります。 最大の違いは、この関数では、トークンのアドレスおよび送信額をパラメータとして受け取るという点です。 ETH の場合、ブリッジへの呼び出しにはすでに、ブリッジアカウントへの資産の移転(`msg.value`)が含まれています。 +この関数は、上記の`_initiateETHDeposit`に似ていますが、いくつかの重要な点が異なります。 最大の違いは、この関数では、トークンのアドレスおよび送信額をパラメータとして受け取るという点です。 ETHの場合、ブリッジへの呼び出しにはすでに、ブリッジアカウントへの資産の移転(`msg.value`)が含まれています。 ```solidity // When a deposit is initiated on L1, the L1 Bridge transfers the funds to itself for future @@ -759,13 +758,13 @@ contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount); ``` -ERC-20 トークンについては、ETH の場合とは異なる送信プロセスが実行されます: +ERC-20トークンについては、ETHの場合とは異なる送信プロセスが実行されます: 1. ユーザー(`_from`)は、ブリッジに対し、送信したいトークン量に見合ったアローワンスを与えます。 2. 次に、トークンコントラクトのアドレスや金額等で、ブリッジを呼び出します。 3. ブリッジは、入金プロセスの一環として、トークンをブリッジ自体に送信します。 -最初のステップは、第 2、3 のステップとは別のトランザクションで実行しても構いません。 ただし、`_initiateERC20Deposit`を呼び出す 2 つの関数 (`depositERC20`と`depositERC20To`)は、`_from`をパラメータとして`msg.sender`を含むこの関数を呼び出すだけなので、フロントランニングの問題は発生しません。 +最初のステップは、第2、3のステップとは別のトランザクションで実行しても構いません。 ただし、`_initiateERC20Deposit`を呼び出す 2 つの関数 (`depositERC20`と`depositERC20To`)は、`_from`をパラメータとして`msg.sender`を含むこの関数を呼び出すだけなので、フロントランニングの問題は発生しません。 ```solidity // Construct calldata for _l2Token.finalizeDeposit(_to, _amount) @@ -787,7 +786,7 @@ ERC-20 トークンについては、ETH の場合とは異なる送信プロセ deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] + _amount; ``` -`deposits`のデータ構造に、トークンの入金額を追加します。 L2 上には、L1 上にある同一の ERC-20 トークンに対応した複数のアドレスが存在する場合があるため、入金の推移を追跡するには、L1 上の ERC-20 トークンに関するブリッジ上の残高を参照するだけでは不十分です。 +`deposits`のデータ構造に、トークンの入金額を追加します。 L2上には、L1上にある同一のERC-20トークンに対応した複数のアドレスが存在する場合があるため、入金の推移を追跡するには、L1上のERC-20トークンに関するブリッジ上の残高を参照するだけでは不十分です。 ```solidity @@ -809,20 +808,20 @@ ERC-20 トークンについては、ETH の場合とは異なる送信プロセ bytes calldata _data ``` -L2 のブリッジは、L2 のクロスドメイン・メッセンジャーに対して、L1 のクロスドメイン・メッセンジャーがこの関数を呼び出すことを指示するメッセージを送信します(もちろん、L1 上で、[このメッセージを確定するトランザクション](https://community.optimism.io/docs/developers/bridge/messaging/#fees-for-l2-%E2%87%92-l1-transactions)が送信された後においてです)。 +L2のブリッジは、L2のクロスドメイン・メッセンジャーに対して、L1のクロスドメイン・メッセンジャーがこの関数を呼び出すことを指示するメッセージを送信します(もちろん、L1上で、[このメッセージを確定するトランザクション](https://community.optimism.io/docs/developers/bridge/messaging/#fees-for-l2-%E2%87%92-l1-transactions)が送信された後においてです)。 ```solidity ) external onlyFromCrossDomainAccount(l2TokenBridge) { ``` -このメッセージにつき、L2 のトークン・ブリッジで作成され、クロスドメイン・メッセンジャーを経由して送信された*正当な*メッセージであることを確認してください。 この関数は、ブリッジから ETH を出金するために使用するため、承認された呼び出し元だけが呼び出したことを確認する必要があります。 +このメッセージにつき、L2のトークン・ブリッジで作成され、クロスドメイン・メッセンジャーを経由して送信された_正当な_メッセージであることを確認してください。 この関数は、ブリッジからETHを出金するために使用するため、承認された呼び出し元だけが呼び出したことを確認する必要があります。 ```solidity // slither-disable-next-line reentrancy-events (bool success, ) = _to.call{ value: _amount }(new bytes(0)); ``` -ETH を送信するには、`msg.value`で wei 金額を指定して、受領者を呼び出します。 +ETHを送信するには、`msg.value`でwei金額を指定して、受領者を呼び出します。 ```solidity require(success, "TransferHelper::safeTransferETH: ETH transfer failed"); @@ -849,7 +848,7 @@ ETH を送信するには、`msg.value`で wei 金額を指定して、受領者 ) external onlyFromCrossDomainAccount(l2TokenBridge) { ``` -この関数は、上記の `finalizeETHWithdrawal`関数に類似していますが、ERC-20 トークンに関する事項が異なります。 +この関数は、上記の `finalizeETHWithdrawal`関数に類似していますが、ERC-20トークンに関する事項が異なります。 ```solidity deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] - _amount; @@ -882,15 +881,15 @@ ETH を送信するには、`msg.value`で wei 金額を指定して、受領者 } ``` -このブリッジは、従来の実装から変更されています。 以前の実装から現在の実装に移行した際に、すべての資産を移転させる必要がありました。 ERC-20 トークンについては、移転のみが可能でした。 一方、ETH をコントラクトに移転するには、そのコントラクトの承認が必要であり、これは`donateETH`で実行できます。 +このブリッジは、従来の実装から変更されています。 以前の実装から現在の実装に移行した際に、すべての資産を移転させる必要がありました。 ERC-20トークンについては、移転のみが可能でした。 一方、ETHをコントラクトに移転するには、そのコントラクトの承認が必要であり、これは`donateETH`で実行できます。 -## L2 上の ERC-20 トークン {#erc-20-tokens-on-l2} +## L2上のERC-20トークン {#erc-20-tokens-on-l2} -ERC-20 トークンを標準ブリッジに適合させるためには、標準ブリッジ*のみが*トークンをミントできるようにする必要があります。 これが必要になるのは、各ブリッジにおいて、Optimism 上で流通するトークンの数が L1 のブリッジコントラクト内でロックされたトークンの数と一致することを保証する必要があるためです。 L2 上のトークンが多すぎる場合、L2 上のアセット L1 にブリッジして戻すことができないユーザーが発生します。 この場合、信頼できるブリッジが存在せず、事実上、[部分準備銀行制度](https://www.investopedia.com/terms/f/fractionalreservebanking.asp)を生み出すことになってしまいます。 一方、L1 上でのトークンが多くなりすぎると、L2 トークンをバーンしない限りトークンをリリースできなくなるため、ブリッジコントラクト内の一部のトークンは永遠にロックされた状態になってしまいます。 +ERC-20トークンを標準ブリッジに適合させるためには、標準ブリッジ_のみが_トークンをミントできるようにする必要があります。 これが必要になるのは、各ブリッジにおいて、Optimism上で流通するトークンの数がL1のブリッジコントラクト内でロックされたトークンの数と一致することを保証する必要があるためです。 L2上のトークンが多すぎる場合、L2上のアセットL1にブリッジして戻すことができないユーザーが発生します。 この場合、信頼できるブリッジが存在せず、事実上、[部分準備銀行制度](https://www.investopedia.com/terms/f/fractionalreservebanking.asp)を生み出すことになってしまいます。 一方、L1上でのトークンが多くなりすぎると、L2トークンをバーンしない限りトークンをリリースできなくなるため、ブリッジコントラクト内の一部のトークンは永遠にロックされた状態になってしまいます。 ### IL2StandardERC20 {#il2standarderc20} -標準ブリッジを使用する L2 上のすべての ERC-20 トークンは、標準ブリッジが必要とする関数およびイベントが搭載された[このインターフェイス](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/IL2StandardERC20.sol)を提供する必要があります。 +標準ブリッジを使用するL2上のすべてのERC-20トークンは、標準ブリッジが必要とする関数およびイベントが搭載された[このインターフェイス](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/IL2StandardERC20.sol)を提供する必要があります。 ```solidity // SPDX-License-Identifier: MIT @@ -899,20 +898,20 @@ pragma solidity ^0.8.9; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; ``` -[ERC-20 に対する標準インターフェイス](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol)には、`mint`および`burn`関数が含まれません。 これらのメソッドは、[ERC-20 標準](https://eips.ethereum.org/EIPS/eip-20)において必須でないため、トークンを作成、破壊するメカニズムは指定されていないのです。 +[ERC-20に対する標準インターフェイス](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol)には、`mint`および`burn`関数が含まれません。 これらのメソッドは、[ERC-20標準](https://eips.ethereum.org/EIPS/eip-20)において必須でないため、トークンを作成、破壊するメカニズムは指定されていないのです。 ```solidity import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; ``` -[ERC-165 インターフェイス](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol)は、コントラクトが提供する機能を特定するために用います。 [この標準については、こちらで読むことができます](https://eips.ethereum.org/EIPS/eip-165)。 +[ERC-165インターフェイス](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol)は、コントラクトが提供する機能を特定するために用います。 [この標準については、こちらで読むことができます](https://eips.ethereum.org/EIPS/eip-165)。 ```solidity interface IL2StandardERC20 is IERC20, IERC165 { function l1Token() external returns (address); ``` -この関数は、このコントラクトに対してブリッジされた L1 上のトークンアドレスを提供するものです。 同じ機能の逆方向の関数が存在しない点に注意してください。 L1 上のトークンについては、L2 のサポートが計画されていたか、あるいはいつ実装されたかを問わず、常にブリッジ可能である必要があります。 +この関数は、このコントラクトに対してブリッジされた L1上のトークンアドレスを提供するものです。 同じ機能の逆方向の関数が存在しない点に注意してください。 L1上のトークンについては、L2のサポートが計画されていたか、あるいはいつ実装されたかを問わず、常にブリッジ可能である必要があります。 ```solidity @@ -925,7 +924,7 @@ interface IL2StandardERC20 is IERC20, IERC165 { } ``` -トークンをミント (作成) およびバーン (破棄) するための関数とイベントです。 トークン数が適切である(L1 上でロックされたトークン数と一致する)ことを保証するため、これらの関数を実行できるのはこのブリッジのみである必要があります。 +トークンをミント (作成) およびバーン (破棄) するための関数とイベントです。 トークン数が適切である(L1上でロックされたトークン数と一致する)ことを保証するため、これらの関数を実行できるのはこのブリッジのみである必要があります。 ### L2StandardERC20 {#L2StandardERC20} @@ -938,7 +937,7 @@ pragma solidity ^0.8.9; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; ``` -[OpenZeppelin で作成した ERC-20 コントラクト](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)です。 Optimism では、既存の機能がよく監査され、資産を保持する上で十分信頼できる場合は、新たな機能を追加すべきではないと考えています。 +[OpenZeppelinで作成したERC-20コントラクト](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)です。 Optimismでは、既存の機能がよく監査され、資産を保持する上で十分信頼できる場合は、新たな機能を追加すべきではないと考えています。 ```solidity import "./IL2StandardERC20.sol"; @@ -948,7 +947,7 @@ contract L2StandardERC20 is IL2StandardERC20, ERC20 { address public l2Bridge; ``` -これらは、通常 ERC-20 では必要になりませんが、ここでは追加で必要となる 2 つの設定パラメータです。 +これらは、通常ERC-20では必要になりませんが、ここでは追加で必要となる2つの設定パラメータです。 ```solidity @@ -989,11 +988,11 @@ contract L2StandardERC20 is IL2StandardERC20, ERC20 { } ``` -[ERC-165](https://eips.ethereum.org/EIPS/eip-165)は、このように動作します。 各インターフェイスは、サポートする一連の関数を含んでおり、これらの機能の[exclusive](https://en.wikipedia.org/wiki/Exclusive_or)または[ABI 関数セレクタ](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html#function-selector)として特定されます。 +[ERC-165](https://eips.ethereum.org/EIPS/eip-165)は、このように動作します。 各インターフェイスは、サポートする一連の関数を含んでおり、これらの機能の[exclusive](https://en.wikipedia.org/wiki/Exclusive_or)または[ABI関数セレクタ](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html#function-selector)として特定されます。 -L2 のブリッジは、ERC-165 を健全性チェックとして用いて、資産を送信するのに用いる ERC-20 コントラクトが `IL2StandardERC20`であるか確認します。 +L2のブリッジは、ERC-165を健全性チェックとして用いて、資産を送信するのに用いるERC-20コントラクトが `IL2StandardERC20`であるか確認します。 -\*\*注意:不正なコントラクトが`supportsInterface`に対して虚偽の値を返すことを防ぐメカニズムは含まれていないため、これはセキュリティ保護のメカニズム*ではなく*、健全性チェックのメカニズムです。 +**注意:不正なコントラクトが`supportsInterface`に対して虚偽の値を返すことを防ぐメカニズムは含まれていないため、これはセキュリティ保護のメカニズム_ではなく_、健全性チェックのメカニズムです。 ```solidity // slither-disable-next-line external-function @@ -1012,13 +1011,13 @@ L2 のブリッジは、ERC-165 を健全性チェックとして用いて、資 } ``` -資産をミント/バーンできるのは、L2 のブリッジのみです。 +資産をミント/バーンできるのは、L2のブリッジのみです。 -`_mint`および`_burn`は、実際には、[OpenZeppelin で作成した ERC-20 コントラクト](/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn)で定義されています。 トークンをミント/バーンできる条件は、ERC-20 を使用する方法と同じように多種多様であるため、このコントラクトは単純に外部に露出していないのです。 +`_mint`および`_burn`は、実際には、[OpenZeppelinで作成したERC-20コントラクト](/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn)で定義されています。 トークンをミント/バーンできる条件は、ERC-20を使用する方法と同じように多種多様であるため、このコントラクトは単純に外部に露出していないのです。 -## L2 ブリッジのコード {#l2-bridge-code} +## L2ブリッジのコード {#l2-bridge-code} -これは、Optimism でブリッジを実行するコードです。 このコントラクトのソースコードは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol)から入手できます。 +これは、Optimismでブリッジを実行するコードです。 このコントラクトのソースコードは、[こちら](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol)から入手できます。 ```solidity // SPDX-License-Identifier: MIT @@ -1030,10 +1029,10 @@ import { IL1ERC20Bridge } from "../../L1/messaging/IL1ERC20Bridge.sol"; import { IL2ERC20Bridge } from "./IL2ERC20Bridge.sol"; ``` -[IL2ERC20Bridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol)のインターフェースは、上述した[L1 用のインターフェイス](#IL1ERC20Bridge)とほぼ同様ですが、 以下の 2 点が大きく異なります。 +[IL2ERC20Bridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol)のインターフェースは、上述した[L1用のインターフェイス](#IL1ERC20Bridge)とほぼ同様ですが、 以下の2点が大きく異なります。 -1. L1 では、あなたが入金を開始し、出金を確定します。 L2 の場合、あなたは出金を開始し、入金を確定します。 -2. L1 では、ETH と ERC-20 トークンを区別する必要があります。 L2 では、Optimism 上の ETH 残高は内部で、アドレス「[0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://optimistic.etherscan.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000)」の ERC-20 トークンとして処理されるため、両方で同じ関数を使います。 +1. L1では、あなたが入金を開始し、出金を確定します。 L2の場合、あなたは出金を開始し、入金を確定します。 +2. L1では、ETHとERC-20トークンを区別する必要があります。 L2では、Optimism上のETH残高は内部で、アドレス「[0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://optimistic.etherscan.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000)」のERC-20トークンとして処理されるため、両方で同じ関数を使います。 ```solidity /* Library Imports */ @@ -1061,7 +1060,7 @@ contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { address public l1TokenBridge; ``` -これは、L1 ブリッジのアドレスを追跡する関数です。 L1 用のブリッジの場合とは異なり、この変数は*必須*です。 L1 ブリッジのアドレスは、事前に知ることはできません。 +これは、L1ブリッジのアドレスを追跡する関数です。 L1用のブリッジの場合とは異なり、この変数は_必須_です。 L1ブリッジのアドレスは、事前に知ることはできません。 ```solidity @@ -1109,7 +1108,7 @@ contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { } ``` -これら 2 つの関数は、出金を開始するものです。 L1 上のトークンアドレスを指定する必要がない点に注意してください。 L1 上で対応するトークンのアドレスは、L2 トークンが伝達するからです。 +これら2つの関数は、出金を開始するものです。 L1上のトークンアドレスを指定する必要がない点に注意してください。 L1上で対応するトークンのアドレスは、L2トークンが伝達するからです。 ```solidity @@ -1139,7 +1138,7 @@ contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { IL2StandardERC20(_l2Token).burn(msg.sender, _amount); ``` -`_from`パラメータに依存*するのではなく*、`msg.sender`を使用する点に注意してください。これにより、偽造がより困難になります(私の知る限り、不可能です)。 +`_from`パラメータに依存_するのではなく_、`msg.sender`を使用する点に注意してください。これにより、偽造がより困難になります(私の知る限り、不可能です)。 ```solidity @@ -1151,7 +1150,7 @@ contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { if (_l2Token == Lib_PredeployAddresses.OVM_ETH) { ``` -L1 では、ETH と ERC-20 トークンを区別する必要があります。 +L1では、ETHとERC-20トークンを区別する必要があります。 ```solidity message = abi.encodeWithSelector( @@ -1203,7 +1202,7 @@ L1 では、ETH と ERC-20 トークンを区別する必要があります。 ) external virtual onlyFromCrossDomainAccount(l1TokenBridge) { ``` -メッセージの発信元が適切であることを確認します。 この関数は、`_mint`を呼び出すものであり、L1 上でブリッジが所有するトークンに含まれないトークンを提供するために使用できるため、重要です。 +メッセージの発信元が適切であることを確認します。 この関数は、`_mint`を呼び出すものであり、L1上でブリッジが所有するトークンに含まれないトークンを提供するために使用できるため、重要です。 ```solidity // Check the target token is compliant and @@ -1217,7 +1216,7 @@ L1 では、ETH と ERC-20 トークンを区別する必要があります。 以下の健全性チェックを実行してください: 1. 正しいインターフェースがサポートされていること。 -2. L2 上の ERC-20 コントラクトにおける L1 アドレスが、L1 上のトークンソースと一致すること。 +2. L2上のERC-20コントラクトにおけるL1アドレスが、L1上のトークンソースと一致すること。 ```solidity ) { @@ -1246,7 +1245,7 @@ L1 では、ETH と ERC-20 トークンを区別する必要があります。 // user error and mitigate some forms of malicious contract behavior. ``` -L2 のトークンアドレスが間違っており、検知可能なエラーが発生した場合、入金をキャンセルし、トークンを L1 に返却する必要があります。 これを L2 から実行する唯一の方法は、不正申し立て期間が経過してからメッセージを送信することですが、それでも、トークンを永遠に失うよりは、ユーザーにとってははるかにベターな選択でしょう。 +L2のトークンアドレスが間違っており、検知可能なエラーが発生した場合、入金をキャンセルし、トークンをL1に返却する必要があります。 これをL2から実行する唯一の方法は、不正申し立て期間が経過してからメッセージを送信することですが、それでも、トークンを永遠に失うよりは、ユーザーにとってははるかにベターな選択でしょう。 ```solidity bytes memory message = abi.encodeWithSelector( @@ -1271,8 +1270,8 @@ L2 のトークンアドレスが間違っており、検知可能なエラー ## まとめ {#conclusion} -標準ブリッジは、アセットを移転する上で最も柔軟なメカニズムです。 しかし、汎用性が高いため、必ずしも使いやすいメカニズムではない場合もあります。 特に出金については、大部分のユーザーは、異議申し立て期間が存在せず、出金を最終確認するために Merkle プルーフを必要としない[サードパーティーのブリッジ](https://www.optimism.io/apps/bridges)を使いたいと考えるでしょう。 +標準ブリッジは、アセットを移転する上で最も柔軟なメカニズムです。 しかし、汎用性が高いため、必ずしも使いやすいメカニズムではない場合もあります。 特に出金については、大部分のユーザーは、異議申し立て期間が存在せず、出金を最終確認するためにMerkleプルーフを必要としない[サードパーティーのブリッジ](https://www.optimism.io/apps/bridges)を使いたいと考えるでしょう。 -サードパーティのブリッジは通常、少額の手数料(標準ブリッジの出金にかかるガス代よりも安価な場合が多いです)で、L1 上でアセットを保持する機能を提供します。 ブリッジ(または、ブリッジを稼働するスタッフ)が L1 上での資産不足を予想する場合、L2 から必要な資産が移転されます。 これらは非常に大規模な出金になるため、出金コストは高額を対象として償却され、手数料が全体に占める割合が非常に低くなります。 +サードパーティのブリッジは通常、少額の手数料(標準ブリッジの出金にかかるガス代よりも安価な場合が多いです)で、L1上でアセットを保持する機能を提供します。 ブリッジ(または、ブリッジを稼働するスタッフ)がL1上での資産不足を予想する場合、L2から必要な資産が移転されます。 これらは非常に大規模な出金になるため、出金コストは高額を対象として償却され、手数料が全体に占める割合が非常に低くなります。 -この記事が、レイヤー 2 の仕組みと、明確で安全な Solidity コードの書き方について、より理解を深めることに役立つことを願っています。 +この記事が、レイヤー2の仕組みと、明確で安全なSolidityコードの書き方について、より理解を深めることに役立つことを願っています。 diff --git a/public/content/translations/ja/developers/tutorials/reverse-engineering-a-contract/index.md b/public/content/translations/ja/developers/tutorials/reverse-engineering-a-contract/index.md index 8c9b3f17afe..66a13e99b02 100644 --- a/public/content/translations/ja/developers/tutorials/reverse-engineering-a-contract/index.md +++ b/public/content/translations/ja/developers/tutorials/reverse-engineering-a-contract/index.md @@ -662,7 +662,7 @@ def unknown2e7ba6ef(uint256 _param1, uint256 _param2, uint256 _param3, array _pa 下の2行は、Storage[2] も呼び出すコントラクトであることを示しています。 [コンストラクタのトランザクションを見ると](https://etherscan.io/tx/0xa1ea0549fb349eb7d3aff90e1d6ce7469fdfdcd59a2fd9b8d1f5e420c0d05b58#statechange)、このコントラクトは[0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)であり、[ソースコードがEtherscanにアップロードされている](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code)ラップドイーサ(WETH)コントラクトであることが分かります。 -このコントラクトは、`_param2`にETHを送金しようとしていると思われます。 送金できれば問題ありません。 送金できない場合は、[ラップドイーサ(WETH)](https://weth.tkn.eth.limo/)を送金しようとします。 `_param2`が外部所有アカウント(EOA)である場合、必ずETHを受け取ることができますが、コントラクトはETHの受け取りを拒否することができます。 しかし、ラップドイーサ(WETH)はERC-20であるため、コントラクトは受け取りを拒否できません。 +このコントラクトは、`_param2`にETHを送金しようとしていると思われます。 送金できれば問題ありません。 送金できない場合は、[ラップドイーサ(WETH)](https://weth.io/)を送金しようとします。 `_param2`が外部所有アカウント(EOA)である場合、必ずETHを受け取ることができますが、コントラクトはETHの受け取りを拒否することができます。 しかし、ラップドイーサ(WETH)はERC-20であるため、コントラクトは受け取りを拒否できません。 ```python ... diff --git a/public/content/translations/ja/developers/tutorials/run-node-raspberry-pi/index.md b/public/content/translations/ja/developers/tutorials/run-node-raspberry-pi/index.md index d892d0f9b91..e45b9dfffcb 100644 --- a/public/content/translations/ja/developers/tutorials/run-node-raspberry-pi/index.md +++ b/public/content/translations/ja/developers/tutorials/run-node-raspberry-pi/index.md @@ -63,10 +63,9 @@ Raspberry Pi 4のイーサリアムイメージは、「プラグ・アンド・ [Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/Ec_VmUvr80VFjf3RYSU-NzkBmj2JOteDECj8Bibde929Gw?download=1)からRaspberry Piイメージをダウンロードし、次のようにSHA256ハッシュを確認してください。 ```sh -# ダウンロードしたイメージがあるディレクトリで以下を実行します。 +# From directory containing the downloaded image shasum -a 256 ethonarm_22.04.00.img.zip -# ハッシュは以下である必要があります。 -fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f +# Hash should output: fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f ``` Rock 5BとOdroid M1ボードのイメージは、Ethereum-on-Armの[ダウンロードページ](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/quick-guide/download-and-install.html)から入手可能です。 @@ -76,7 +75,7 @@ Rock 5BとOdroid M1ボードのイメージは、Ethereum-on-Armの[ダウンロ Raspberry Piで使用するマイクロSDカードは、まずデスクトップパソコンかノートパソコンに挿入して書き込む必要があります。 以下のターミナルコマンドで、ダウンロードしたイメージをSDカードに書き込みます。 ```shell -# マイクロSDカード名の確認 +# check the MicroSD card name sudo fdisk -l >> sdxxx @@ -147,13 +146,13 @@ cd && deposit new-mnemonic --num_validators 1 Raspberry Piに戻ると、バリデータが開始可能になります。 これには、バリデータキーのインポート、報酬を受け取るためのアドレスの設定、事前設定されたバリデータプロセスの開始が必要になります。 以下は、ライトハウス向けの例です。その他のコンセンサス クライアント向けの手順については、[Ethereum on Armのドキュメント](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/)を参照してください。 ```shell -# バリデータキーのインポート +# import the validator keys lighthouse account validator import --directory=/home/ethereum/validator_keys -# 報酬受取アドレスの設定 +# set the reward address sudo sed -i 's/ ' /etc/ethereum/lighthouse-validator.conf -# バリデータの開始 +# start the validator sudo systemctl start lighthouse-validator ``` diff --git a/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md index 7b312f73b87..4b2392296aa 100644 --- a/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md +++ b/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md @@ -6,7 +6,7 @@ tags: - "スマートコントラクト" - "セキュリティ" - "Solidity" -skill: intermediate +skill: 中級 lang: ja published: 2020-09-07 source: セキュアなコントラクトの開発 diff --git a/public/content/translations/ja/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md b/public/content/translations/ja/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md index 91e21f3db05..5aca8cf8d59 100644 --- a/public/content/translations/ja/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md +++ b/public/content/translations/ja/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md @@ -13,39 +13,39 @@ sourceUrl: https://ethereumdev.io/setup-web3js-to-use-the-ethereum-blockchain-in address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" --- -このチュートリアルでは、イーサリアム・ブロックチェーンでのやりとりで使用するために[web3.js](https://web3js.readthedocs.io/)を導入する方法を学びます。 Web3.js は、フロントエンドとバックエンドの両方において、ブロックチェーンからデータを読み取ったり、トランザクションを行ったり、スマートコントラクトをデプロイするために使用できます。 +このチュートリアルでは、イーサリアム・ブロックチェーンでのやりとりで使用するために[web3.js](https://web3js.readthedocs.io/)を導入する方法を学びます。 Web3.jsは、フロントエンドとバックエンドの両方において、ブロックチェーンからデータを読み取ったり、トランザクションを行ったり、スマートコントラクトをデプロイするために使用できます。 -まず最初に、あなたのプロジェクトに web3.js を追加する必要があります。 Web ページで使用するには、JSDeliver のような CDN を使用してライブラリを直接インポートしてください。 +まず最初に、あなたのプロジェクトにweb3.jsを追加する必要があります。 Webページで使用するには、JSDeliverのようなCDNを使用してライブラリを直接インポートしてください。 ```html ``` -バックエンドで使用するライブラリをインストールしたい場合や、ビルドが必要なフロントエンドのプロジェクトの場合は、 次のように npm を使用してインストールします。 +バックエンドで使用するライブラリをインストールしたい場合や、ビルドが必要なフロントエンドのプロジェクトの場合は、 次のようにnpmを使用してインストールします。 ```bash npm install web3 --save ``` -次に、Node.js のスクリプトや Browserify のフロントエンド・プロジェクトに Web3.js をインポートするには、以下の JavaScript コードを使用します: +次に、Node.jsのスクリプトやBrowserifyのフロントエンド・プロジェクトにWeb3.jsをインポートするには、以下のJavaScriptコードを使用します: ```js const Web3 = require("web3") ``` -プロジェクトにライブラリを追加したので、初期化する必要があります。 プロジェクトは、ブロックチェーンと通信できなければなりません。 イーサリアムのほとんどのライブラリは、リモートプロシージャーコール(RPC)を使って[ノード](/developers/docs/nodes-and-clients/)と通信します。 Web3 プロバイダを開始するには、プロバイダの URL をコンストラクタとして橋渡しする Web3 のインスタンスを生成します。 お使いのコンピュータで、ノードあるいは[Ganache インスタンス](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/)を実行中の場合は、以下のようになります: +プロジェクトにライブラリを追加したので、初期化する必要があります。 プロジェクトは、ブロックチェーンと通信できなければなりません。 イーサリアムのほとんどのライブラリは、リモートプロシージャーコール(RPC)を使って[ノード](/developers/docs/nodes-and-clients/)と通信します。 Web3プロバイダを開始するには、プロバイダのURLをコンストラクタとして橋渡しするWeb3のインスタンスを生成します。 お使いのコンピュータで、ノードあるいは[Ganacheインスタンス](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/)を実行中の場合は、以下のようになります: ```js const web3 = new Web3("http://localhost:8545") ``` -ホストされたノードに直接アクセスしたい場合は、Infura や、[Cloudflare](https://cloudflare-eth.com/)が提供する無料サービスを利用できます。 +ホストされているノードに直接アクセスしたい場合は、[ノード・アズ・ア・サービス](/developers/docs/nodes-and-clients/nodes-as-a-service)の一覧から見つけることができます。 ```js const web3 = new Web3("https://cloudflare-eth.com") ``` -Web3 インスタンスが正しく設定されたかをテストするために、 `getBlockNumber`関数を使用して、最新のブロック番号を取得してみましょう。 この関数は、コールバックをパラメータとして受け取り、ブロック番号を整数として返します。 +Web3インスタンスが正しく設定されたかをテストするために、 `getBlockNumber`関数を使用して、最新のブロック番号を取得してみましょう。 この関数は、コールバックをパラメータとして受け取り、ブロック番号を整数として返します。 ```js var Web3 = require("web3") @@ -68,15 +68,15 @@ async function getBlockNumber() { getBlockNumber() ``` -Web3 インスタンス上で利用可能なすべての関数は、 [web3.js の公式ドキュメンテーション](https://docs.web3js.org/)をご覧ください。 +Web3インスタンス上で利用可能なすべての関数は、 [web3.jsの公式ドキュメンテーション](https://docs.web3js.org/)をご覧ください。 -ほとんどの Web3 ライブラリでは、結果を送り返すノードに対してバックグラウンドで JSON RPC を呼び出すため、非同期で処理を行います。 +ほとんどのWeb3ライブラリでは、結果を送り返すノードに対してバックグラウンドでJSON RPCを呼び出すため、非同期で処理を行います。 -ブラウザで作業している場合、一部のウォレットは、Web3 インスタンスを直接注入します。トランザクションを行うためにユーザーのイーサリアムアドレスとやり取りを行う予定がある場合は特に、可能な限り`await/async`関数呼び出しを使用するようにしてください。 +ブラウザで作業している場合、一部のウォレットは、Web3インスタンスを直接注入します。トランザクションを行うためにユーザーのイーサリアムアドレスとやり取りを行う予定がある場合は特に、可能な限り`await/async`関数呼び出しを使用するようにしてください。 -以下のコードスニペットは、MetaMask ウォレットが利用可能か確認し、利用できる場合は有効化するものです。 その後、あなたはユーザーの残高を確認できるようになり、各ユーザーは、あなたが彼らにイーサリアムブロックチェーン上で実行させたいトランザクションを各自で検証できるようになります: +以下のコードスニペットは、MetaMaskウォレットが利用可能か確認し、利用できる場合は有効化するものです。 その後、あなたはユーザーの残高を確認できるようになり、各ユーザーは、あなたが彼らにイーサリアムブロックチェーン上で実行させたいトランザクションを各自で検証できるようになります: ```js if (window.ethereum != null) { @@ -91,4 +91,4 @@ if (window.ethereum != null) { } ``` -web3.js の代替として Ethers.js なども存在しますが、web3.js はブラウザからイーサリアムとやりとりする際の公式ライブラリですので、JavaScript に関するチュートリアルはすべて web3.js を使用します。 次のチュートリアルでは、[ブロックチェーンに新たに追加されたブロックを簡単にリッスンし、その内容を確認する方法](https://ethereumdev.io/listening-to-new-transactions-happening-on-the-blockchain/)を紹介します。 +他にも[Ethers.js](https://docs.ethers.io/) など、 web3.js のようにイーサリアム・ブロックチェーンとやりとりするライブラリがあります。 次のチュートリアルでは、[ブロックチェーンに新たに追加されたブロックを簡単にリッスンし、その内容を確認する方法](https://ethereumdev.io/listening-to-new-transactions-happening-on-the-blockchain/)を紹介します。 diff --git a/public/content/translations/ja/developers/tutorials/short-abi/index.md b/public/content/translations/ja/developers/tutorials/short-abi/index.md index e4a7df44104..e4c640ea6cc 100644 --- a/public/content/translations/ja/developers/tutorials/short-abi/index.md +++ b/public/content/translations/ja/developers/tutorials/short-abi/index.md @@ -5,8 +5,7 @@ author: Ori Pomerantz lang: ja tags: - "レイヤー2" - - "Optimism" -skill: intermediate +skill: 中級 published: 2022-04-01 --- @@ -16,56 +15,56 @@ published: 2022-04-01 ### 開示情報 {#full-disclosure} -筆者は、[Optimism](https://www.optimism.io/)のフルタイム従業員であり、この記事に含まれる実例はすべて Optimism で実行されます。 ただし、紹介するテクニックは他のロールアップでも問題なく実行できます。 +筆者は、[Optimism](https://www.optimism.io/)のフルタイム従業員であり、この記事に含まれる実例はすべてOptimismで実行されます。 ただし、紹介するテクニックは他のロールアップでも問題なく実行できます。 ### 用語 {#terminology} -ロールアップの議論において、「レイヤー 1」は、イーサリアムネットワークの本番環境であるメインネットを指します。 「レイヤー 2」(L2)という用語は、ロールアップまたはセキュリティのために L1 に依存しているが、そのほとんどをオフチェーンで処理する他のシステムに使用されます。 +ロールアップの議論において、「レイヤー1」は、イーサリアムネットワークの本番環境であるメインネットを指します。 「レイヤー2」(L2)という用語は、ロールアップまたはセキュリティのためにL1に依存しているが、そのほとんどをオフチェーンで処理する他のシステムに使用されます。 -## L2 上のトランザクションコストをさらに引き下げる方法 {#how-can-we-further-reduce-the-cost-of-L2-transactions} +## L2上のトランザクションコストをさらに引き下げる方法 {#how-can-we-further-reduce-the-cost-of-L2-transactions} [オプティミスティック・ロールアップ](/developers/docs/scaling/optimistic-rollups)では、すべてのユーザーが過去のトランザクションを参照し、現在の状態が正しいことを検証できるように、過去のすべてのトランザクション記録を保存する必要があります。 イーサリアムメインネットにデータを書き込む最も安価な方法は、コールデータとして書き込む方法です。 [Optimism](https://help.optimism.io/hc/en-us/articles/4413163242779-What-is-a-rollup-)と[Arbitrum](https://developer.offchainlabs.com/docs/rollup_basics#intro-to-rollups)はいずれも、コールデータのソリューションを採用しています。 -### L2 トランザクションのコスト {#cost-of-l2-transactions} +### L2トランザクションのコスト {#cost-of-l2-transactions} -L2 トランザクションのコストは、以下の 2 つの要素で構成されます: +L2トランザクションのコストは、以下の2つの要素で構成されます: -1. L2 上の処理コスト。通常、非常に安価です。 -2. L1 上のストレージコスト。これは、メインネットのガス代と連動します。 +1. L2上の処理コスト。通常、非常に安価です。 +2. L1上のストレージコスト。これは、メインネットのガス代と連動します。 -この記事の執筆時点の Optimism で、L2 ガス代は、0.001Gwei です。 一方、L1 のガス代は約 40Gwei です。 リアルタイムの価格は[こちら](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m)で確認できます。 +この記事の執筆時点のOptimismで、L2ガス代は、0.001[Gwei](/developers/docs/gas/#pre-london)です。 一方、L1のガス代は約40Gweiです。 リアルタイムの価格は[こちら](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m)で確認できます。 -1 バイトのコールデータのコストは、4 ガス (0 バイトの場合) または 16 ガス (それ以外) のいずれかです。 EVM で最も費用が高い操作のひとつは、ストレージへの書き込みです。 L2 上で 32 バイトのワードを書き込む場合、最大コストは 22100 ガスです。 現在のレートでは、22.1 gwei になります。 したがって、1 つのコールデータをゼロバイトに節約できれば、約 200 バイトをストレージに書き込むことができ、まだお釣りが来ます。 +1バイトのコールデータのコストは、4ガス (0バイトの場合) または16ガス (それ以外) のいずれかです。 EVMで最も費用が高い操作のひとつは、ストレージへの書き込みです。 L2上で32バイトのワードを書き込む場合、最大コストは22100ガスです。 現在のレートでは、22.1 gweiになります。 したがって、1つのコールデータをゼロバイトに節約できれば、約200バイトをストレージに書き込むことができ、まだお釣りが来ます。 ### ABI {#the-abi} -大多数のトランザクションは、外部所有アカウントからコントラクトにアクセスします。 ほとんどのコントラクトは Solidity で書かれており、データフィールドは[アプリケーション・バイナリ・インターフェイス(ABI) ](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding)で解釈されます。 +大多数のトランザクションは、外部所有アカウントからコントラクトにアクセスします。 ほとんどのコントラクトはSolidityで書かれており、データフィールドは[アプリケーション・バイナリ・インターフェイス(ABI) ](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding)で解釈されます。 -ただし ABI は、1 バイトのコールデータがほぼ 4 回の算術演算のコストと同じになる L1 を念頭に置いて設計されていますが、L2 では、1 バイトのコールデータのコストで算術演算を 1000 回以上実行することができます。 例えば、[この ERC-20 の送信トランザクション](https://kovan-optimistic.etherscan.io/tx/0x7ce4c144ebfce157b4de99d8ad53a352ae91b57b3fa06d8a1c79439df6bfa998)を見てみましょう。 コールデータは、以下のように分割されます: +ただしABIは、1バイトのコールデータがほぼ4回の算術演算のコストと同じになるL1を念頭に置いて設計されていますが、L2では、1バイトのコールデータのコストで算術演算を1000回以上実行することができます。 例えば、[このERC-20の送信トランザクション](https://kovan-optimistic.etherscan.io/tx/0x7ce4c144ebfce157b4de99d8ad53a352ae91b57b3fa06d8a1c79439df6bfa998)を見てみましょう。 コールデータは、以下のように分割されます: -| セクション | 長さ | バイト | 浪費バイト | 浪費ガス | 必須バイト | 必須ガス | -| -------------- | ---: | -------: | ---------: | -------: | ---------: | -------: | -| 関数セレクタ | 4 | 0 ~ 3 | 3 | 48 | 1 | 16 | -| ゼロ値 | 12 | 4 ~ 15 | 12 | 48 | 0 | 0 | -| 送信先アドレス | 20 | 16 ~ 35 | 0 | 0 | 20 | 320 | -| 金額 | 32 | 36 ~ 67 | 17 | 64 | 15 | 240 | -| 合計 | 68 | | | 160 | | 576 | +| セクション | 長さ | バイト | 浪費バイト | 浪費ガス | 必須バイト | 必須ガス | +| ------- | --:| -----:| -----:| ----:| -----:| ----:| +| 関数セレクタ | 4 | 0~3 | 3 | 48 | 1 | 16 | +| ゼロ値 | 12 | 4~15 | 12 | 48 | 0 | 0 | +| 送信先アドレス | 20 | 16~35 | 0 | 0 | 20 | 320 | +| 金額 | 32 | 36~67 | 17 | 64 | 15 | 240 | +| 合計 | 68 | | | 160 | | 576 | 説明: -- **関数セレクター**: このコントラクトに含まれる関数は 256 未満であるため、1 バイトで区別できます。 これらのバイトは通常 0 バイトではないので、[16 ガス](https://eips.ethereum.org/EIPS/eip-2028)がかかります。 -- **0 バイト **:これらのバイトは常にゼロです。と言うのも、20 バイトのアドレスを保持するためには 32 バイトのワードを必要としないからです。 0 バイトのコストは、4 ガスです([イエローペーパー](https://ethereum.github.io/yellowpaper/paper.pdf)の 27 ページにある Appendix G で、`G``txdatazero`の値について確認してください)。 -- **金額**:このコントラクトの`decimals`が 18(通常値)であり、送信できるトークンの上限が 1018だとすると、金額の上限は 1036になります。 25615 > 1036のため、必要なバイト数は 15 になります。 +- **関数セレクター**: このコントラクトに含まれる関数は256未満であるため、1バイトで区別できます。 これらのバイトは通常0バイトではないので、[16ガス](https://eips.ethereum.org/EIPS/eip-2028)がかかります。 +- **0バイト **:これらのバイトは常にゼロです。と言うのも、20バイトのアドレスを保持するためには32バイトのワードを必要としないからです。 0バイトのコストは、4ガスです([イエローペーパー](https://ethereum.github.io/yellowpaper/paper.pdf)の27ページにあるAppendix Gで、`G``txdatazero`の値について確認してください)。 +- **金額**:このコントラクトの`decimals`が18(通常値)であり、送信できるトークンの上限が1018だとすると、金額の上限は1036になります。 25615 > 1036のため、必要なバイト数は15になります。 -通常、L1 上で 160 ガスを浪費するのは無視できる範囲です。 1 件のトランザクションには最低でも[21,000 ガス](https://yakkomajuri.medium.com/blockchain-definition-of-the-week-ethereum-gas-2f976af774ed)が必要であるため、追加の 0.8%はほとんど問題になりません。 しかし、L2 では問題になります。 L2 におけるほぼすべてのコストは、L1 への書き込みで発生します。 トランザクションのコールデータに加えて、トランザクションのヘッダー(送信先アドレス、署名など)で 109 バイトが必要になります。 従って、L2 おける総コストは`109*16+576+160=2480`となり、浪費分が全体の 6.5%に達するのです。 +通常、L1上で160ガスを浪費するのは無視できる範囲です。 1件のトランザクションには最低でも[21,000ガス](https://yakkomajuri.medium.com/blockchain-definition-of-the-week-ethereum-gas-2f976af774ed)が必要であるため、追加の0.8%はほとんど問題になりません。 しかし、L2では問題になります。 L2におけるほぼすべてのコストは、L1への書き込みで発生します。 トランザクションのコールデータに加えて、トランザクションのヘッダー(送信先アドレス、署名など)で109バイトが必要になります。 従って、L2おける総コストは`109*16+576+160=2480`となり、浪費分が全体の6.5%に達するのです。 ## 送信先を限定しない場合のコスト削減方法 {#reducing-costs-when-you-dont-control-the-destination} 送信先のコントラクトを制御できない場合でも、[こちら](https://github.com/qbzzt/ethereum.org-20220330-shortABI)のようなソリューションを活用できます。 関連するファイルを確認しておきましょう。 -### Token.sol {#token.sol} +### Token.sol {#token-sol} -[これ](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/Token.sol)は、送信先のコントラクトです。 標準的な ERC-20 コントラクトですが、機能が 1 つ追加されています。 `faucet`関数により、すべてのユーザーがトークンを取得できるようになっています。 本番環境の ERC-20 コントラクトでは使えませんが、テスト環境では有益でしょう。 +[これ](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/Token.sol)は、送信先のコントラクトです。 標準的なERC-20コントラクトですが、機能が1つ追加されています。 `faucet`関数により、すべてのユーザーがトークンを取得できるようになっています。 本番環境のERC-20コントラクトでは使えませんが、テスト環境では有益でしょう。 ```solidity /** @@ -78,7 +77,7 @@ L2 トランザクションのコストは、以下の 2 つの要素で構成 [こちら](https://kovan-optimistic.etherscan.io/address/0x950c753c0edbde44a74d3793db738a318e9c8ce8)で、このコントラクトのデプロイ実例を確認できます。 -### CalldataInterpreter.sol {#calldatainterpreter.sol} +### CalldataInterpreter.sol {#calldatainterpreter-sol} [これ](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/CalldataInterpreter.sol)は、より短いコールデータでトランザクションを呼び出すことが想定されているコントラクトです。 一行ずつ見ていきましょう。 @@ -132,7 +131,7 @@ contract CalldataInterpreter { "calldataVal trying to read beyond calldatasize"); ``` -32 バイト(256 ビット)を持つ 1 つのワードをメモリにロードして、必要なフィールドに含まれない部分のバイトを削除します。 このアルゴリズムは、32 バイト以上の値に対しては機能せず、コールデータの末尾を越えたデータを読むこともできません。 L1 では、ガスを節約するためにこれらのテストを省略すべきかもしれませんが、L2 のガス代はとても安価なので、あらゆるサニティチェックを実行することができます。 +32バイト(256ビット)を持つ1つのワードをメモリにロードして、必要なフィールドに含まれない部分のバイトを削除します。 このアルゴリズムは、32バイト以上の値に対しては機能せず、コールデータの末尾を越えたデータを読むこともできません。 L1では、ガスを節約するためにこれらのテストを省略すべきかもしれませんが、L2のガス代はとても安価なので、あらゆるサニティチェックを実行することができます。 ```solidity assembly { @@ -140,9 +139,9 @@ contract CalldataInterpreter { } ``` -`fallback()`への呼び出しからデータをコピーしてもよいのですが(以下を参照) 、EVM のアセンブリ言語である[Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html)を使用する方が楽でしょう。 +`fallback()`への呼び出しからデータをコピーしてもよいのですが(以下を参照) 、EVMのアセンブリ言語である[Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html)を使用する方が楽でしょう。 -ここでは、[CALLDATALOAD のオペコード](https://www.evm.codes/#35)を使用して、`startByte`から `startByte+31`までのバイトをスタックへ読み込みます。 一般に、Yul のオペコードの構文は` ( , ...`となります。 +ここでは、[CALLDATALOADのオペコード](https://www.evm.codes/#35)を使用して、`startByte`から `startByte+31`までのバイトをスタックへ読み込みます。 一般に、Yulのオペコードの構文は` ( , ...`となります。 ```solidity @@ -160,7 +159,7 @@ contract CalldataInterpreter { fallback() external { ``` -Solidity コントラクトへの呼び出しがどの関数の署名とも一致しない場合、 [`fallback()`関数](https://docs.soliditylang.org/en/v0.8.12/contracts.html#fallback-function)を呼び出します(存在する場合)。 `CalldataInterpreter`の場合、他の`external`または`public`の関数がないため、すべての呼び出しがここに到達します。 +Solidityコントラクトへの呼び出しがどの関数の署名とも一致しない場合、 [`fallback()`関数](https://docs.soliditylang.org/en/v0.8.12/contracts.html#fallback-function)を呼び出します(存在する場合)。 `CalldataInterpreter`の場合、他の`external`または`public`の関数がないため、すべての呼び出しがここに到達します。 ```solidity uint _func; @@ -168,12 +167,12 @@ Solidity コントラクトへの呼び出しがどの関数の署名とも一 _func = calldataVal(0, 1); ``` -この関数を返すコールデータの最初の 1 バイトを読み取ります。 ここで関数が取得できないのには、2 つの理由があります: +この関数を返すコールデータの最初の1バイトを読み取ります。 ここで関数が取得できないのには、2つの理由があります: 1. `pure`または`view`の関数の場合。これらの関数は状態を変更しないため、ガスが発生しません(オフチェーンで呼び出す場合)。 ですから、ガス代を節約する必要がありません。 2. [`msg.sender`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#block-and-transaction-properties)に依存した関数。 `msg.sender`の値は、呼び出し元のアドレスではなく、`CalldataInterpreter`のアドレスになります。 -残念ながら、[ERC-20 の仕様](https://eips.ethereum.org/EIPS/eip-20)を確認すると、残りの関数は`transfer`のみです。 つまり、呼び出し可能な関数は、`transfer` (`transferFrom`を呼び出す)と、`faucet` (呼び出し元のアドレスにトークンを送信する)になります。 +残念ながら、[ERC-20の仕様](https://eips.ethereum.org/EIPS/eip-20)を確認すると、残りの関数は`transfer`のみです。 つまり、呼び出し可能な関数は、`transfer` (`transferFrom`を呼び出す)と、`faucet` (呼び出し元のアドレスにトークンを送信する)になります。 ```solidity @@ -200,7 +199,7 @@ Solidity コントラクトへの呼び出しがどの関数の署名とも一 if (_func == 2) { ``` -トークンを送信する場合、送信先アドレスと金額という 2 つのパラメータが必要です。 +トークンを送信する場合、送信先アドレスと金額という2つのパラメータが必要です。 ```solidity token.transferFrom( @@ -213,26 +212,26 @@ Solidity コントラクトへの呼び出しがどの関数の署名とも一 address(uint160(calldataVal(1, 20))), ``` -送信先アドレスは、#1 のバイトから始まります(#0 のバイトは、関数が使用します)。 アドレスの長さは、20 バイトです。 +送信先アドレスは、#1のバイトから始まります(#0のバイトは、関数が使用します)。 アドレスの長さは、20バイトです。 ```solidity calldataVal(21, 2) ``` -このコントラクトでは、送信可能なトークンの最大数が 2 バイト以内(65536 未満)に収まると想定します。 +このコントラクトでは、送信可能なトークンの最大数が2バイト以内(65536未満)に収まると想定します。 ```solidity ); } ``` -1 件の送信につき、35 バイトのコールデータが発生します。 +1件の送信につき、35バイトのコールデータが発生します。 -| セクション | 長さ | バイト | -| -------------- | ---: | -------: | -| 関数セレクタ | 1 | 0 | -| 送信先アドレス | 32 | 1 ~ 32 | -| 金額 | 2 | 33 ~ 34 | +| セクション | 長さ | バイト | +| ------- | --:| -----:| +| 関数セレクタ | 1 | 0 | +| 送信先アドレス | 32 | 1~32 | +| 金額 | 2 | 33~34 | ```solidity } // fallback @@ -240,9 +239,9 @@ Solidity コントラクトへの呼び出しがどの関数の署名とも一 } // contract CalldataInterpreter ``` -### test.js {#test.js} +### test.js {#test-js} -[この JavaScript による単体テスト](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/test/test.js)では、このメカニズムを使用する方法(および、メカニズムが適切に動作していることをを確認する方法)を示します。 ここでは、[Chai](https://www.chaijs.com/)および[Ethers](https://docs.ethers.io/v5/)についてよく理解しているという前提に基づき、特にコントラクトに関連する部分のみを説明します。 +[このJavaScriptによる単体テスト](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/test/test.js)では、このメカニズムを使用する方法(および、メカニズムが適切に動作していることをを確認する方法)を示します。 ここでは、[Chai](https://www.chaijs.com/)および[Ethers](https://docs.ethers.io/v5/)についてよく理解しているという前提に基づき、特にコントラクトに関連する部分のみを説明します。 ```js const { expect } = require("chai"); @@ -269,17 +268,17 @@ describe("CalldataInterpreter", function () { const faucetTx = { ``` -ここでは ABI を使用しないため、トランザクションを作成するために通常用いる高度な関数(`token.faucet()`など)を使用できません。 その代わりに、トランザクションをマニュアルで作成し、送信する必要があります。 +ここではABIを使用しないため、トランザクションを作成するために通常用いる高度な関数(`token.faucet()`など)を使用できません。 その代わりに、トランザクションをマニュアルで作成し、送信する必要があります。 ```javascript to: cdi.address, data: "0x01" ``` -トランザクションには、次の 2 つのパラメータが必要です: +トランザクションには、次の2つのパラメータが必要です: 1. `to`:送信先のアドレスです。 これは、コールデータのインタープリタのアドレスです。 -2. `data`:送信するコールデータです。 フォーセットを呼び出す場合、データは 1 バイト(`0x01`)です。 +2. `data`:送信するコールデータです。 フォーセットを呼び出す場合、データは1バイト(`0x01`)です。 ```javascript @@ -314,7 +313,7 @@ const transferTx = { } ``` -送信トランザクションを作成します。 最初のバイトは「0x02」で、次に送信先アドレスを置き、最後に金額(10 進法で 256 である 0x0100)を置きます。 +送信トランザクションを作成します。 最初のバイトは「0x02」で、次に送信先アドレスを置き、最後に金額(10進法で256である0x0100)を置きます。 ```javascript await (await signer.sendTransaction(transferTx)).wait() @@ -342,9 +341,9 @@ const transferTx = { 送信先コントラクトを制限できる場合、コールデータのインタープリタが信頼されるため、`msg.sender`チェックを省略する関数を作成することができます。 [`control-contract`のブランチから、動作例を確認できます](https://github.com/qbzzt/ethereum.org-20220330-shortABI/tree/control-contract)。 -コントラクトが外部のトランザクションのみに応答する場合、1 つのコントラクトのみで対応することができます。 しかし、この方法では[コンポーザビリティ](/developers/docs/smart-contracts/composability/)が失われます。 通常の ERC-20 の呼び出しに応答するコントラクトと、短いコールデータを持つトランザクションに応答するコントラクトを共に用意する方が優れた方法だと言えます。 +コントラクトが外部のトランザクションのみに応答する場合、1つのコントラクトのみで対応することができます。 しかし、この方法では[コンポーザビリティ](/developers/docs/smart-contracts/composability/)が失われます。 通常のERC-20の呼び出しに応答するコントラクトと、短いコールデータを持つトランザクションに応答するコントラクトを共に用意する方が優れた方法だと言えます。 -### Token.sol {#token.sol-2} +### Token.sol {#token-sol-2} この例では、`Token.sol`を修正します。 これにより、このプロキシだけが呼び出せる一連の関数を設定することができます。 以下は、追加の関数です: @@ -356,7 +355,7 @@ const transferTx = { address proxy = address(0); ``` -ERC-20 コントラクトは、許可されたプロキシの身元を知る必要があります。 しかし、この時点では値が不明なため、コンストラクタで変数を設定できません。 プロキシは、コンストラクタにおいてトークンのアドレスを要求するため、まずこのコントラクトのインスタンスが実行されます。 +ERC-20コントラクトは、許可されたプロキシの身元を知る必要があります。 しかし、この時点では値が不明なため、コンストラクタで変数を設定できません。 プロキシは、コンストラクタにおいてトークンのアドレスを要求するため、まずこのコントラクトのインスタンスが実行されます。 ```solidity /** @@ -383,7 +382,7 @@ ERC-20 コントラクトは、許可されたプロキシの身元を知る必 } // function setProxy ``` -プロキシは特権アクセスを持つため、セキュリティチェックが省略されます。 このプロキシが信頼できることを確認するには、`オーナー`に対し、1 回のみこの関数を呼び出すことを許可します。 `proxy`が (ゼロではない)実際の値を持つと同時に、この値は変更不可となるため、オーナーが悪意のユーザーになった場合やそのニーモニックが明らかになった場合でも、安全性が維持されます。 +プロキシは特権アクセスを持つため、セキュリティチェックが省略されます。 このプロキシが信頼できることを確認するには、`オーナー`に対し、1回のみこの関数を呼び出すことを許可します。 `proxy`が (ゼロではない)実際の値を持つと同時に、この値は変更不可となるため、オーナーが悪意のユーザーになった場合やそのニーモニックが明らかになった場合でも、安全性が維持されます。 ```solidity /** @@ -437,12 +436,12 @@ ERC-20 コントラクトは、許可されたプロキシの身元を知る必 } ``` -以下は、トークンを送信する/アローワンスを承認するエンティティから直接メッセージを受信する際に通常必要となる 3 つの操作です。 ここでは、以下の特徴を持つプロキシバージョンを使います: +以下は、トークンを送信する/アローワンスを承認するエンティティから直接メッセージを受信する際に通常必要となる3つの操作です。 ここでは、以下の特徴を持つプロキシバージョンを使います: 1. `onlyProxy()`で修正されており、他のユーザーが管理権限を持たない。 2. 追加のパラメータとして、通常`msg.sender`であるアドレスを取得する。 -### CalldataInterpreter.sol {#calldatainterpreter.sol-2} +### CalldataInterpreter.sol {#calldatainterpreter-sol-2} コールデータのインタープリタは、送信先を限定しない場合とほぼ同一ですが、プロキシの関数では`msg.sender`パラメータを受け取るため、`transfer`のアローワンスが必要ない点が異なります。 @@ -476,7 +475,7 @@ ERC-20 コントラクトは、許可されたプロキシの身元を知る必 } ``` -### Test.js {#test.js-2} +### Test.js {#test-js-2} 送信先を限定しない場合とは、いくつかの点が異なります。 @@ -487,7 +486,7 @@ await cdi.deployed() await token.setProxy(cdi.address) ``` -ERC-20 コントラクトに対し、どのプロキシを信頼するかを伝える必要があります。 +ERC-20コントラクトに対し、どのプロキシを信頼するかを伝える必要があります。 ```js console.log("CalldataInterpreter addr:", cdi.address) @@ -498,7 +497,7 @@ const signer = signers[0] const poorSigner = signers[1] ``` -`approve()`と`transferFrom()`を確認するには、第 2 の署名者が必要です。 第 2 の署名者は、トークンを受け取らないため(もちろん、ETH を所有する必要はあります)に`poorSigner`と呼びます。 +`approve()`と`transferFrom()`を確認するには、第2の署名者が必要です。 第2の署名者は、トークンを受け取らないため(もちろん、ETHを所有する必要はあります)に`poorSigner`と呼びます。 ```js // Transfer tokens @@ -510,7 +509,7 @@ const transferTx = { await (await signer.sendTransaction(transferTx)).wait() ``` -ERC-20 コントラクトは、プロキシ (`cdi`) を信頼するため、送信をリレーするためのアローワンスは必要ありません。 +ERC-20コントラクトは、プロキシ (`cdi`) を信頼するため、送信をリレーするためのアローワンスは必要ありません。 ```js // approval and transferFrom @@ -530,13 +529,13 @@ await (await poorSigner.sendTransaction(transferFromTx)).wait() // Check the approve / transferFrom combo was done correctly expect(await token.balanceOf(destAddr2)).to.equal(255) - + No key Text XPath: /pre[38]/code ``` -新たに追加した 2 つの関数をテストします。 `transferFromTx`のアドレスには、アローワンスの提供元と受領者という 2 つパラメータが要求される点に注意してください。 +新たに追加した2つの関数をテストします。 `transferFromTx`のアドレスには、アローワンスの提供元と受領者という2つパラメータが要求される点に注意してください。 ### 実例 {#example-2} @@ -552,4 +551,4 @@ XPath: /pre[38]/code ## まとめ {#conclusion} -[Optimism](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92)と[Arbitrum](https://developer.offchainlabs.com/docs/special_features)はどちらも、L1 に書き込まれるコールデータのサイズを削減し、トランザクションコストを抑える方法を提供することを目指しています。 インフラプロバイダーが汎用性が高いソリューションを追求する一方で、デベロッパの能力には限界があります。 Dapp のデベロッパーは、開発するアプリケーションについて具体的な知識を持つため、汎用性のソリューションよりも効率的にコールデータの最適化を実現できるのです。 この記事が、皆さんのニーズに合わせた理想的なソリューションを見出す上で役立つことを願っています。 +[Optimism](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92)と[Arbitrum](https://developer.offchainlabs.com/docs/special_features)はどちらも、L1に書き込まれるコールデータのサイズを削減し、トランザクションコストを抑える方法を提供することを目指しています。 インフラプロバイダーが汎用性が高いソリューションを追求する一方で、デベロッパの能力には限界があります。 Dappのデベロッパーは、開発するアプリケーションについて具体的な知識を持つため、汎用性のソリューションよりも効率的にコールデータの最適化を実現できるのです。 この記事が、皆さんのニーズに合わせた理想的なソリューションを見出す上で役立つことを願っています。 diff --git a/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md b/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md index 1137be09c20..c470f818a1c 100644 --- a/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md +++ b/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md @@ -6,7 +6,7 @@ tags: - "Solidity" - "スマートコントラクト" - "セキュリティ" -skill: intermediate +skill: 中級 lang: ja published: 2020-09-06 source: セキュアなコントラクトの構築 @@ -24,8 +24,8 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel ドキュメンテーションは様々な水準で作成でき、コントラクトの実装時に内容を修正する必要があります。 - **平易な英語で書かれたシステムの説明**では、コントラクトが実行する内容を説明し、コードベースの前提条件を記述します。 -- **スキーマとアーキテクチャのダイアグラム**では、コントラクトで実行されるやりとりや、システムの状態マシンについて記述します。 [Slither のプリンター機能](https://github.com/crytic/slither/wiki/Printer-documentation)は、スキーマを生成する上で有益です。 -- **コード内容を徹底的に文書化する。** Solidity の場合、[Natspec フォーマット](https://solidity.readthedocs.io/en/develop/natspec-format.html)を使用できます。 +- **スキーマとアーキテクチャのダイアグラム**では、コントラクトで実行されるやりとりや、システムの状態マシンについて記述します。 [Slitherのプリンター機能](https://github.com/crytic/slither/wiki/Printer-documentation)は、スキーマを生成する上で有益です。 +- **コード内容を徹底的に文書化する。** Solidityの場合、[Natspecフォーマット](https://solidity.readthedocs.io/en/develop/natspec-format.html)を使用できます。 ### オンチェーン処理とオフチェーン処理の比較 {#on-chain-vs-off-chain-computation} @@ -35,8 +35,8 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel アップグレードに関する様々なソリューションについては、[こちらのブログ投稿](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/)で検討しています。 コード開発を開始する事前に、アップグレードに対応するか否かをはっきり決定してください。 この決定により、どのような構造のコードを開発するべきかが変わってきます。 一般論として、以下を推奨します: -- **アップグレード可能性よりも、[コントラクトのマイグレーション](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/)を優先すること**。システムのマイグレーションは、アップグレード可能性が提供する利点の多くを、その欠点なしに実現するものです。 -- **委任呼び出しプロキシのパターンよりも、データ分離のパターンを使用すること**。あなたのプロジェクトに明確な抽象化による分離が含まれる場合、データ分離をわずかに修正するだけでアップグレードが可能になります。 委任呼び出しのプロキシ は、EVM の知識が必要であり、エラー発生の頻度が高まります。 +- **アップグレード可能性よりも、[コントラクトのマイグレーション](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/)を優先すること**。システムのマイグレーションは、アップグレード可能性が提供する利点の多くを有し、アップグレード可能性の欠点がありません。 +- **委任呼び出しプロキシのパターンよりも、データ分離のパターンを使用すること**。あなたのプロジェクトに明確な抽象化による分離が含まれる場合、データ分離をわずかに修正するだけでアップグレードが可能になります。 委任呼び出しのプロキシ は、EVMの知識が必要であり、エラー発生の頻度が高まります。 - **デプロイする前に、マイグレーション/アップグレードの手順を文書化すること**。ガイドラインが設定されていない場合、ストレスを受けながら作業する必要があるため、ミスを犯しやすくなります。 遵守すべき手順を前もって策定しておきましょう。 具体的には、以下を定めます: - 新たなコントラクトを開始する呼び出し。 - キーの保存場所と、アクセス方法。 @@ -56,7 +56,7 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel ### 継承 {#inheritance} - **継承を管理可能な水準に抑える**。ロジックを分割するために継承を活用すべきですが、プロジェクト全体における継承ツリーの深さと広さをなるべく小さくするように努めてください。 -- **Slither の[継承プリンター](https://github.com/crytic/slither/wiki/Printer-documentation#inheritance-graph)でコントラクトの階層を確認する**。継承プリンターは、階層の規模を確認する上で役立ちます。 +- **Slitherの[継承プリンター](https://github.com/crytic/slither/wiki/Printer-documentation#inheritance-graph)でコントラクトの階層を確認する**。継承プリンターは、階層の規模を確認する上で役立ちます。 ### イベント {#events} @@ -65,24 +65,24 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel ### 既知の落とし穴を回避する {#avoid-known-pitfalls} - **最も一般的なセキュリティの問題に注意します**。よくある問題点については、[Ethernaut CTF](https://ethernaut.openzeppelin.com/)、[Capture the Ether](https://capturetheether.com/)、[Not so smart contracts](https://github.com/crytic/not-so-smart-contracts/)などの様々なオンラインリソースを活用してください。 -- **[Solidity ドキュメント](https://solidity.readthedocs.io/en/latest/)の警告セクションに注意する**。警告セクションを通じて、言語における把握しにくい振る舞いを把握することができます。 +- **[Solidityドキュメント](https://solidity.readthedocs.io/en/latest/)の警告セクションに注意する**。警告セクションを通じて、言語における把握しにくい振る舞いを把握することができます。 ### 依存関係 {#dependencies} -- **実証済みのライブラリを使用する**。実証済みのライブラリからコードをインポートすることで、バグが多いコードを書く可能性が低くなります。 ERC-20 コントラクトを作成する場合は、 [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20)を使用してください。 +- **実証済みのライブラリを使用する**。実証済みのライブラリからコードをインポートすることで、バグが多いコードを書く可能性が低くなります。 ERC-20コントラクトを作成する場合は、 [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20)を使用してください。 - **依存性マネージャーを使用し、コードのコピーアンドペーストを避ける**。外部ソースに依存する場合は、元ソースに基づき最新状態を保つ必要があります。 ### テストと検証 {#testing-and-verification} - **完全な単体テストを作成する**。質の高いソフトウェアを開発するには、包括的なテスト一式が不可欠です。 - **[Slither](https://github.com/crytic/slither)、[Echidna](https://github.com/crytic/echidna)、および[Manticore](https://github.com/trailofbits/manticore)用のカスタムチェックとプロパティを作成する**。自動化ツールを通じて、コントラクトのセキュリティを高めることができます。 効率的なチェックおよびプロパティを作成するには、本ガイドの該当記事を参照してください。 -- **[crytic.io](https://crytic.io/)を使用する**。Crytic は、GitHub と統合されており、Slither のプライベート検出器にアクセスできる他、Echidna からカスタムのプロパティチェックを実行することができます。 +- **[crytic.io](https://crytic.io/)を使用する**。Cryticは、GitHubと統合されており、Slitherのプライベート検出器にアクセスできる他、Echidnaからカスタムのプロパティチェックを実行することができます。 ### Solidity {#solidity} -- **Solidity のバージョンは、0.4 や 0.6 ではなく 0.5 を使用する**。現在のところ、Solidity 0.5 が最もセキュアなバージョンであり、0.4 よりもビルトインプラクティスが優れています。 一方、0.6 は現時点において本番環境の使用に耐えうる安定性を持たず、さらなるアップデートが必要な状態です。 -- **安定したバージョンでコンパイルし、最新リリースで警告をチェックする。**最新バージョンのコンパイラを使って、コードの問題が報告されないことを確認してください。 ただし、Solidity はリリース間隔が短く、過去においてもコンパイラにバグが含まれていた場合が多いため、デプロイに最新バージョンを用いることは推奨しません(Slither の[推奨 solc バージョン](https://github.com/crytic/slither/wiki/Detector-Documentation#recommendation-33)を参照)。 -- **インラインアセンブラを使用しない**。アセンブラを使用するには、EVM の専門知識が必要です。 イエローペーパーを*マスターしていない場合*、EVM コードを書かないでください。 +- **Solidityのバージョンは、0.4や0.6ではなく0.5を使用する**。現在のところ、Solidity 0.5が最もセキュアなバージョンであり、0.4よりもビルトインプラクティスが優れています。 一方、0.6は現時点において本番環境の使用に耐えうる安定性を持たず、さらなるアップデートが必要な状態です。 +- **安定したバージョンでコンパイルし、最新リリースで警告をチェックする。**最新バージョンのコンパイラを使って、コードの問題が報告されないことを確認してください。 ただし、Solidityはリリース間隔が短く、過去においてもコンパイラにバグが含まれていた場合が多いため、デプロイに最新バージョンを用いることは推奨しません(Slitherの[推奨solcバージョン](https://github.com/crytic/slither/wiki/Detector-Documentation#recommendation-33)を参照)。 +- **インラインアセンブラを使用しない**。アセンブラを使用するには、EVMの専門知識が必要です。 イエローペーパーを_マスターしていない場合_、EVMコードを書かないでください。 ## デプロイに関するガイドライン {#deployment-guidelines} diff --git a/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md b/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md index 63797ead609..504dd0b7ba7 100644 --- a/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md +++ b/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md @@ -9,17 +9,17 @@ tags: - "テスト" - "Truffle" - "Ganache" -skill: intermediate +skill: 中級 published: 2020-06-05 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/continuous-integration --- -Truffle を使用した継続的統合(CI)は、基本的なテストセットを実装してあれば、非常に有益な開発環境を提供します。 非常に長期的なテストを実行できるため、[プルリクエスト](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)をマージする事前にすべてのテストに合格したことを確認でき、追加ツールを使って様々な統計を追跡することができます。 +Truffleを使用した継続的統合(CI)は、基本的なテストセットを実装してあれば、非常に有益な開発環境を提供します。 非常に長期的なテストを実行できるため、[プルリクエスト](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)をマージする事前にすべてのテストに合格したことを確認でき、追加ツールを使って様々な統計を追跡することができます。 -今回は、[Truffle Metacoin Box](https://www.trufflesuite.com/boxes/metacoin)を使用して継続的統合を設定します。 以下の内容は、Travis CI または Circle CI を使って実行できます。 +今回は、[Truffle Metacoin Box](https://www.trufflesuite.com/boxes/metacoin)を使用して継続的統合を設定します。 以下の内容は、Travis CIまたはCircle CIを使って実行できます。 -## Travis CI の設定 {#setting-up-travis-ci} +## Travis CIの設定 {#setting-up-travis-ci} [Travis CI](https://travis-ci.org/)は、簡単に追加できます。 プロジェクトのルートフォルダに、`.travis.yml`設定ファイルを追加するだけです。 @@ -37,11 +37,11 @@ script: - npm test ``` -ここでは、Truffle で単体テストを実行する場合のみテストスクリプトが実行されるシンプルな状態にしておきましょう。 しかし、Travis CI マシンが利用できるブロックチェーンが存在しないという問題があります。 しかしこれは、テスト前に`npm install ganache-cli`を実行するだけで解決できます。 具体的には、`ganache-cli > /dev/null`の npx コマンドを含む Bash スクリプトを`npx truffle test`の呼び出しの前に追加します。 [こちら](https://github.com/gorgos/Truffle-CI-Example/blob/master/scripts/run_tests.sh)で Bash スクリプトの完全な例をご覧ください。 +ここでは、Truffleで単体テストを実行する場合のみテストスクリプトが実行されるシンプルな状態にしておきましょう。 しかし、Travis CIマシンが利用できるブロックチェーンが存在しないという問題があります。 しかしこれは、テスト前に`npm install ganache-cli`を実行するだけで解決できます。 具体的には、`ganache-cli > /dev/null`のnpxコマンドを含むBashスクリプトを`npx truffle test`の呼び出しの前に追加します。 [こちら](https://github.com/gorgos/Truffle-CI-Example/blob/master/scripts/run_tests.sh)でBashスクリプトの完全な例をご覧ください。 -## Circle CI の設定 {#setting-up-circle-ci} +## Circle CIの設定 {#setting-up-circle-ci} -[CircleCi](https://circleci.com/)では、より長い設定ファイルが必要になります。 Travis では、自動で[`npm ci`](https://docs.npmjs.com/cli/ci.html)コマンドが追加されます。 これにより、`npmのインストール`よりも高速かつセキュアに依存関係をインストールできます。 ここでも、Travis の場合と同じスクリプトを使って、テストの前に ganache-cli を実行します。 +[CircleCi](https://circleci.com/)では、より長い設定ファイルが必要になります。 Travisでは、自動で[`npm ci`](https://docs.npmjs.com/cli/ci.html)コマンドが追加されます。 これにより、`npmのインストール`よりも高速かつセキュアに依存関係をインストールできます。 ここでも、Travisの場合と同じスクリプトを使って、テストの前にganache-cliを実行します。 ```yml version: 2 @@ -97,18 +97,18 @@ workflows: - dependencies ``` -## eth-gas-reporter プラグインを追加する {#adding-the-eth-gas-reporter-plugin} +## eth-gas-reporterプラグインを追加する {#adding-the-eth-gas-reporter-plugin} -eth-gas-reporter プラグインは、スマートコントラクトの関数で発生するガス代を追跡する上でとても役立ちます。 このプラグインを CI に追加しておけば、プルリクエストを追加する際に差分を表示するためにも有益です。 +eth-gas-reporterプラグインは、スマートコントラクトの関数で発生するガス代を追跡する上でとても役立ちます。 このプラグインをCIに追加しておけば、プルリクエストを追加する際に差分を表示するためにも有益です。 -### ステップ 1:eth-gas-reporter プラグインと codechecks をインストールする {#step-1-install-the-eth-gas-reporter-plugin-and-codechecks} +### ステップ1:eth-gas-reporterプラグインとcodechecksをインストールする {#step-1-install-the-eth-gas-reporter-plugin-and-codechecks} ```bash -$ npm install --save-dev eth-gas-reporter -$ npm install --save-dev @codechecks/client +npm install --save-dev eth-gas-reporter +npm install --save-dev @codechecks/client ``` -### ステップ 2:truffle-config.js の mocha 設定で、eth-gas-reporter プラグインを追加する {#step-2-add-the-plugin-to-the-mocha-settings-inside-your-truffle-configjs} +### ステップ2:truffle-config.jsのmocha設定で、eth-gas-reporterプラグインを追加する {#step-2-add-the-plugin-to-the-mocha-settings-inside-your-truffle-configjs} [設定のオプションを確認してください。](https://github.com/cgewecke/eth-gas-reporter#options) @@ -124,44 +124,42 @@ module.exports = { }; ``` -### ステップ 3:プロジェクトのルートディレクトリに、codechecks.yml を追加する {#step-3-add-a-codechecksyml-to-your-projects-root-directory} +### ステップ3:プロジェクトのルートディレクトリに、codechecks.ymlを追加する {#step-3-add-a-codechecksyml-to-your-projects-root-directory} ```yml checks: - name: eth-gas-reporter/codechecks ``` -### ステップ 4:テストコマンドの後に、codechecks を実行する {#step-4-run-codechecks-after-the-test-command} +### ステップ4:テストコマンドの後に、codechecksを実行する {#step-4-run-codechecks-after-the-test-command} ```bash - npm test - npx codechecks ``` -### ステップ 5:Codechecks のアカウントを作成する {#step-5-create-a-codechecks-account} +### ステップ5:Codechecksのアカウントを作成する {#step-5-create-a-codechecks-account} - [Codechecks](http://codechecks.io/)のアカウントを作成します。 -- GitHub リポジトリに追加します。 -- シークレットをコピーし、`CC_SECRET=COPIED SECRET`を CI に追加します(Travis の場合は[こちら](https://docs.travis-ci.com/user/environment-variables/)、CircleCi の場合は[こちら](https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-project)を参照してください)。 +- GitHubリポジトリに追加します。 +- シークレットをコピーし、`CC_SECRET=COPIED SECRET`をCIに追加します(Travisの場合は[こちら](https://docs.travis-ci.com/user/environment-variables/)、CircleCiの場合は[こちら](https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-project)を参照してください)。 - プルリクエストの作成に進んでください。 以上です。 これで、プルリクエストでガス代の変化に対して素晴らしいレポートが表示されます。 ![ガスレポートの例](./gas-reports.png) -## solidity-coverage プラグインを追加する {#adding-the-solidity-coverage-plugin} +## solidity-coverageプラグインを追加する {#adding-the-solidity-coverage-plugin} -solidity-coverage プラグインを使用すると、コードパスのうちテスト対象に含まれる割合がどの程度か確認できます。 CI 上で設定しておくと、非常に便利になります。 +solidity-coverageプラグインを使用すると、コードパスのうちテスト対象に含まれる割合がどの程度か確認できます。 CI上で設定しておくと、非常に便利になります。 -### ステップ 1:メタコインプロジェクトを作成し、カバレッジツールをインストールします。 {#step-1-create-a-metacoin-project-and-install-coverage-tools} +### ステップ1:メタコインプロジェクトを作成し、カバレッジツールをインストールします。 {#step-1-create-a-metacoin-project-and-install-coverage-tools} ```bash -$ npm install --save-dev truffle -$ npm install --save-dev coveralls -$ npm install --save-dev solidity-coverage +npm install --save-dev truffle coveralls solidity-coverage ``` -### ステップ 2:truffle-config.js のプラグイン配列に、solidity-coverage を追加します。 {#step-2-add-solidity-coverage-to-the-plugins-array-in-truffle-configjs} +### ステップ2:truffle-config.jsのプラグイン配列に、solidity-coverageを追加します。 {#step-2-add-solidity-coverage-to-the-plugins-array-in-truffle-configjs} ```js module.exports = { @@ -170,27 +168,27 @@ module.exports = { } ``` -### ステップ 3:.travis.yml または Circle CI config.yml に、カバレッジコマンドを追加します。 {#step-3-add-the-coverage-commands-to-the-travisyml-or-circle-ci-configyml} +### ステップ3:.travis.ymlまたはCircle CI config.ymlに、カバレッジコマンドを追加します。 {#step-3-add-the-coverage-commands-to-the-travisyml-or-circle-ci-configyml} ```bash - npx truffle run coverage - cat coverage/lcov.info | npx coveralls ``` -Soidity カバレッジは、それ自体で ganache-cli を開始しますので、ganache-cli をインストールする必要はありません。 ただし、カバレッジの ganache-cli は動作が異なり、通常の単体テスト実行の代替とはならないため、通常のテストコマンドは置き換えないでください。 +Soidityカバレッジは、それ自体でganache-cliを開始しますので、ganache-cliをインストールする必要はありません。 ただし、カバレッジのganache-cliは動作が異なり、通常の単体テスト実行の代替とはならないため、通常のテストコマンドは置き換えないでください。 -### ステップ 4:Coveralls にレポジトリを追加します。 {#step-4-add-repository-to-coveralls} +### ステップ4:Coverallsにレポジトリを追加します。 {#step-4-add-repository-to-coveralls} - [Coveralls](https://coveralls.io/)のアカウントを作成します。 -- 作成したアカウントを GitHub リポジトリに追加します。 +- 作成したアカウントをGitHubリポジトリに追加します。 - プルリクエストの作成に進んでください。 ![Coverallの例](./coverall.png) ## 追加のヒント {#further-ideas} -- [MythX](https://mythx.io/):MythX では、スマートコントラクトのセキュリティを自動で分析できます。 ですから、[CI に追加する](https://blog.mythx.io/howto/mythx-and-continuous-integration-part-1-circleci/)のはよいアイディアでしょう。 -- [Linting](https://wikipedia.org/wiki/Lint_%28software%29):Linting ツールを活用することで、ある程度まで強制的によいコードを書くことができます。 [Eslint](https://eslint.org/)は、JavaScript と相性が良く[セットアップが簡単](https://eslint.org/docs/user-guide/getting-started)です。一方[Solhint](https://protofire.github.io/solhint/)は、Solidity で使用できます。 -- 長期テスト:数百人のユーザーを対象としてコントラクトをテストするなど、ストレスが極端に大きいテストを実行したい場合もあるでしょう。 このようなテストは、長時間を要します。 テストごとに実行する代わりに、CI に追加します。 +- [MythX](https://mythx.io/):MythXでは、スマートコントラクトのセキュリティを自動で分析できます。 ですから、[CIに追加する](https://blog.mythx.io/howto/mythx-and-continuous-integration-part-1-circleci/)のはよいアイディアでしょう。 +- [Linting](https://wikipedia.org/wiki/Lint_%28software%29):Lintingツールを活用することで、ある程度まで強制的によいコードを書くことができます。 [Eslint](https://eslint.org/)は、JavaScriptと相性が良く[セットアップが簡単](https://eslint.org/docs/user-guide/getting-started)です。一方[Solhint](https://protofire.github.io/solhint/)は、Solidityで使用できます。 +- 長期テスト:数百人のユーザーを対象としてコントラクトをテストするなど、ストレスが極端に大きいテストを実行したい場合もあるでしょう。 このようなテストは、長時間を要します。 テストごとに実行する代わりに、CIに追加します。 -これで完了です。 開発環境において非常に有益な戦略であることが理解できたと思います。 完全な実例は、[Truffle-CI-Example](https://github.com/gorgos/Truffle-CI-Example)で確認してください。 Circle-CI と Travis の両方共必要な訳ではないので、使わない方は確実に削除してください! +これで完了です。 開発環境において非常に有益な戦略であることが理解できたと思います。 完全な実例は、[Truffle-CI-Example](https://github.com/gorgos/Truffle-CI-Example)で確認してください。 Circle-CIとTravisの両方共必要な訳ではないので、使わない方は確実に削除してください! diff --git a/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md b/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md index ededf3dd7e9..a5fb4559155 100644 --- a/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md +++ b/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md @@ -8,15 +8,16 @@ tags: - "Solidity" - "テスト" - "ERC-20" -skill: intermediate +skill: 中級 lang: ja +sidebar: true published: 2020-10-16 --- このチュートリアルでは、以下について学びます: -- Waffle を使って、スマートコントラクトをテストする方法 -- Waffle 上で、一般的なマッチャーを使ってスマートコントラクトをテストする方法 +- Waffleを使って、スマートコントラクトをテストする方法 +- Waffle上で、一般的なマッチャーを使ってスマートコントラクトをテストする方法 前提知識: @@ -24,17 +25,17 @@ published: 2020-10-16 - 新規の`JavaScript`プロジェクトを作成できる。 - 数行の`Solidity`コードを書いたことがある。 - いくつかのテストを`JavaScript`で作成したことがある。 -- `yarn`あるいは、JavaScripts のパッケージインストーラである`npm`を使用したことがある。 +- `yarn`あるいは、JavaScriptsのパッケージインストーラである`npm`を使用したことがある。 上記に該当しない場合や、以下のコードを実際に作成するつもりがない方でも、容易に理解できる内容です。 -## Waffle の簡単な紹介 {#a-few-words-about-waffle} +## Waffleの簡単な紹介 {#a-few-words-about-waffle} [Waffle](https://getwaffle.io)は、スマートコントラクトの作成とテストのための最も先進的なライブラリです。 -[JavaScript API](/developers/docs/apis/javascript/)である ethers-js と連携して動作します。 +[JavaScript API](/developers/docs/apis/javascript/)であるethers-jsと連携して動作します。 -詳細については、[Waffle のドキュメンテーション](https://ethereum-waffle.readthedocs.io/en/latest/#waffle-documentation)をご覧ください! +詳細については、[Waffleのドキュメンテーション](https://ethereum-waffle.readthedocs.io/en/latest/#waffle-documentation)をご覧ください! ## クイックチュートリアル {#the-quick-tutorial} @@ -641,7 +642,7 @@ published: 2020-10-16 -## ステップ 1:あなたのプロジェクトに、Waffle をインストールする([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#installation))。 {#step-1-install-waffle-in-your-project} +## ステップ1:あなたのプロジェクトに、Waffleをインストールする([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#installation))。 {#step-1-install-waffle-in-your-project} まずはじめに、`ethereum-waffle`をインストールします。 このチュートリアルでは、次のように `yarn`を使用しますので、以下を実行すると`ethereum-waffle`がインストールされます: @@ -649,7 +650,7 @@ published: 2020-10-16 yarn add --dev ethereum-waffle ``` -## ステップ 2:スマートコントラクトを作成する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-a-contract)) {#step-2-write-a-smart-contract} +## ステップ2:スマートコントラクトを作成する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-a-contract)) {#step-2-write-a-smart-contract} このチュートリアルでは、[OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/ded2b0a55c9c13731963ab7b85a70c8e73504bab/contracts/token/ERC20/ERC20.sol)の[ERC-20](https://openzeppelin.com)トークンを使用します。 @@ -675,7 +676,7 @@ contract BasicToken is ERC20 { ``` -## ステップ 3:スマートコントラクトをコンパイルします([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#compiling-the-contract)) {#step-3-compile-your-smart-contract} +## ステップ3:スマートコントラクトをコンパイルします([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#compiling-the-contract)) {#step-3-compile-your-smart-contract} スマートコントラクトをコンパイルするには、プロジェクトの`package.json`に以下のエントリを追加します: @@ -700,11 +701,11 @@ contract BasicToken is ERC20 { } ``` -Waffle の設定については、[こちら](https://ethereum-waffle.readthedocs.io/en/latest/configuration.html#configuration)をご覧ください。 +Waffleの設定については、[こちら](https://ethereum-waffle.readthedocs.io/en/latest/configuration.html#configuration)をご覧ください。 次に、`yarn build`を実行してスマートコントラクトをコンパイルします。 -Waffle がコントラクトをコンパイルし、JSON の出力結果を`build`ディレクトリ内に配置したことがわかります。 +Waffleがコントラクトをコンパイルし、JSONの出力結果を`build`ディレクトリ内に配置したことがわかります。 -## ステップ 4:スマートコントラクトをテストする([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)) {#step-4-test-your-smart-contract} +## ステップ4:スマートコントラクトをテストする([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)) {#step-4-test-your-smart-contract} ### ステップ 4.1:必要な依存関係をインストールします([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)) {#step-4-1} @@ -1021,7 +1022,7 @@ Waffle がコントラクトをコンパイルし、JSON の出力結果を`buil yarn add --dev mocha chai ``` -### ステップ 4.2:テストファイルを作成する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)) {#step-4-2} +### ステップ4.2:テストファイルを作成する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)) {#step-4-2} テストを作成するには、テストディレクトリに`BasicToken.test.ts`ファイルを作成する必要があります。 @@ -1043,13 +1044,13 @@ describe("BasicToken", () => { }) ``` -トークンのデプロイには、`Waffle`の`deployContract`メソッドを使用します。 引数としては、作成したコントラクトとデフォルト残高をコンパイルした json ファイルである`wallet`を引き渡す必要があります。 +トークンのデプロイには、`Waffle`の`deployContract`メソッドを使用します。 引数としては、作成したコントラクトとデフォルト残高をコンパイルしたjsonファイルである`wallet`を引き渡す必要があります。 `Waffle`では`wallet`を作成することもできるため、コントラクトをとても簡単にデプロイできます。 `wallet`の詳細については、 [こちら](https://ethereum-waffle.readthedocs.io/en/latest/basic-testing.html?highlight=wallet#getting-wallets)をご覧ください。デプロイ機能に関しては、[こちら](https://ethereum-waffle.readthedocs.io/en/latest/basic-testing.html?highlight=wallet#deploying-contracts)をご覧ください。 -それでは、ウォレット残高を確認する簡単なテストを作成してみましょう。 コントラクトのデプロイ時に 1000 の値を送信したため、ウォレット残高が 1000 トークンになっているはずですが、最初のテストではこれを確認します。 +それでは、ウォレット残高を確認する簡単なテストを作成してみましょう。 コントラクトのデプロイ時に1000の値を送信したため、ウォレット残高が1000トークンになっているはずですが、最初のテストではこれを確認します。 ```ts it("Assigns initial balance", async () => { @@ -1059,7 +1060,7 @@ it("Assigns initial balance", async () => { テストを実行するには、 `yarn test`を使用します。 -### ステップ 4.3:イベントを出力する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html?highlight=changeBalance#emitting-events)) {#step-4-3} +### ステップ4.3:イベントを出力する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html?highlight=changeBalance#emitting-events)) {#step-4-3} このチュートリアルでは、`Waffle`の中で最も便利なマッチャーを紹介したいと思いますので、一番便利なものから始めましょう。 @@ -1081,7 +1082,7 @@ it("Transfer emits event", async () => { これにより、関数が正しく呼び出されたことを確認できます! -### ステップ 4.4:メッセージと共に元に戻す([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html?highlight=changeBalance#revert-with-message)) {#step-4-4} +### ステップ4.4:メッセージと共に元に戻す([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html?highlight=changeBalance#revert-with-message)) {#step-4-4} `Waffle`では、トランザクションを元に戻す際に添付されたメッセージもテストできます。 @@ -1097,7 +1098,7 @@ it("Can not transfer above the amount", async () => { }) ``` -### ステップ 4.5:トークン残高を変更する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html?highlight=changeBalance#change-balance)) {#step-4-5} +### ステップ4.5:トークン残高を変更する([ドキュメントのリンク](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html?highlight=changeBalance#change-balance)) {#step-4-5} `Waffle`では、ウォレット残高の変化も確認できます! @@ -1115,7 +1116,7 @@ it("Send transaction changes receiver balance", async () => { }) ``` -これは、1 つのウォレットを対象とするテストです。 +これは、1つのウォレットを対象とするテストです。 以下は、複数のウォレットを対象とする場合です: @@ -1131,7 +1132,7 @@ it("Send transaction changes sender and receiver balances", async () => { ## お疲れ様でした! {#congratulations} -**おめでとうございます! チュートリアルは、これで終了です。 Waffle でスマートコントラクトをテストするための最初の大きな一歩を踏み出すことができました。** +**おめでとうございます! チュートリアルは、これで終了です。 Waffleでスマートコントラクトをテストするための最初の大きな一歩を踏み出すことができました。** **このチュートリアルのコードについては、[こちら](https://github.com/VladStarostenko/tutorial-for-ethereum-org-website)でアクセスできます。** diff --git a/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md b/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md index 564473a0df4..844582156c6 100644 --- a/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md +++ b/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md @@ -8,7 +8,7 @@ tags: - "スマートコントラクト" - "セキュリティ" - "トークン" -skill: intermediate +skill: 中級 published: 2020-08-13 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/token_integration.md @@ -16,15 +16,15 @@ sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/devel 任意のトークンとやり取りするときは、このチェックリストに従ってください。 各アイテムに関連したリスクを確実に理解し、ルールを遵守しない場合はその根拠を明確にしてください。 -幸いなことに、Slither のすべての[ユーティリティ](https://github.com/crytic/slither#tools)は、トークンアドレス上で直接実行可能です: +幸いなことに、Slitherのすべての[ユーティリティ](https://github.com/crytic/slither#tools)は、トークンアドレス上で直接実行可能です: -[Slither のチュートリアルを利用する](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) +[Slitherのチュートリアルを利用する](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) ```bash slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken ``` -このチェックリストを利用する際には、Slither を使って、当該トークンから以下を出力しておくとよいでしょう: +このチェックリストを利用する際には、Slitherを使って、当該トークンから以下を出力しておくとよいでしょう: ```bash - slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER] @@ -39,39 +39,39 @@ slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken - **デベロッパに問い合わせられること**。インシデントが発生した場合、開発チームにアラートを提供する必要があるかもしれません。 [blockchain-security-contacts](https://github.com/crytic/blockchain-security-contacts)で、適切な問合せ先を確認してください。 - **重要なアナウンスを行うセキュリティ関連のメーリングリストがあること**。重大な問題の発生時やアップグレード時に、あなたのようなユーザーに助言が提供される体制が整っているかを確認してください。 -## ERC 適合性 {#erc-conformity} +## ERC適合性 {#erc-conformity} -Slither に含まれる[slither-check-erc](https://github.com/crytic/slither/wiki/ERC-Conformance)ユーティリティで、関連する多くの ERC 標準に対するトークンの遵守度をレビューできます。 slither-check-erc を次の内容の評価に使用してください。 +Slitherに含まれる[slither-check-erc](https://github.com/crytic/slither/wiki/ERC-Conformance)ユーティリティで、関連する多くのERC標準に対するトークンの遵守度をレビューできます。 slither-check-ercを次の内容の評価に使用してください。 -- **Transfer と transferFrom がブール値を返すこと**。トークンによっては、これらの関数でブール値を返さない場合があります。 その結果、コントラクトの呼び出しが実行できない場合があります。 -- **name、decimals、symbol 関数を使用する場合、それらの関数が存在すること。**ERC-20 標準ではこれらの関数はオプションであるため、コントラクトに含まれない場合があります。 -- **Decimals が uint8 値を返すこと**。トークンによっては、不適切である unit256 値を返す場合があります。 この場合は、戻り値が 255 未満になるように変更します。 -- **トークンが、既知の[ERC-20 競合状態](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)を軽減すること**。ERC-20 標準には既知の ERC-20 競合状態が存在するため、攻撃者がトークンを盗むのを防ぐためにこれを軽減する必要があります。 -- **トークンが ERC-777 トークンではなく、transfer や transferFrom による外部からの関数呼び出しを含まないこと**。transfer 関数を使った外部からの呼び出しは、リエントランシー攻撃につながりかねません。 +- **TransferとtransferFromがブール値を返すこと**。トークンによっては、これらの関数でブール値を返さない場合があります。 その結果、コントラクトの呼び出しが実行できない場合があります。 +- **name、decimals、symbol関数を使用する場合、それらの関数が存在すること。**ERC-20標準ではこれらの関数はオプションであるため、コントラクトに含まれない場合があります。 +- **Decimalsがuint8値を返すこと**。トークンによっては、不適切であるunit256値を返す場合があります。 この場合は、戻り値が255未満になるように変更します。 +- **トークンが、既知の[ERC-20競合状態](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)を軽減すること**。ERC-20標準には既知のERC-20競合状態が存在するため、攻撃者がトークンを盗むのを防ぐためにこれを軽減する必要があります。 +- **トークンがERC-777トークンではなく、transferやtransferFromによる外部からの関数呼び出しを含まないこと**。transfer関数を使った外部からの呼び出しは、リエントランシー攻撃につながりかねません。 -Slither には[slither-prop](https://github.com/crytic/slither/wiki/Property-generation)というユーティリティが含まれており、ERC で頻繁に発生する欠陥の多くを発見するための単体テストとセキュリティ関連のプロパティを生成することができます。 slither-prop を次の内容の評価に使用してください。 +Slitherには[slither-prop](https://github.com/crytic/slither/wiki/Property-generation)というユーティリティが含まれており、ERCで頻繁に発生する欠陥の多くを発見するための単体テストとセキュリティ関連のプロパティを生成することができます。 slither-propを次の内容の評価に使用してください。 -- **コントラクトが slither-prop のすべての単体テストとセキュリティプロパティに合格すること**。 生成された単体テストを実行し、[Echidna](https://github.com/crytic/echidna)と[Manticore](https://manticore.readthedocs.io/en/latest/verifier.html)でプロパティを確認します。 +- **コントラクトがslither-propのすべての単体テストとセキュリティプロパティに合格すること**。 生成された単体テストを実行し、[Echidna](https://github.com/crytic/echidna)と[Manticore](https://manticore.readthedocs.io/en/latest/verifier.html)でプロパティを確認します。 最後に、自動による特定が困難な一部の特徴について検討します。 以下の条件が発生していないか、マニュアルで確認してください: -- **Transfer および transferFrom がフィーを取らないこと**。デフレトークンは、予期せぬ動作を引き起こす可能性があります。 +- **TransferおよびtransferFromがフィーを取らないこと**。デフレトークンは、予期せぬ動作を引き起こす可能性があります。 - **トークンから得られる潜在的な利子収入が考慮されていること**。一部のトークンは、トークン保有者に利子を分配します。 この点を考慮しない場合、利子がコントラクト内でトラップされる可能性があります。 ## コントラクトの構成 {#contract-composition} -- **コントラクトが必要以上に複雑になっていないか**。 トークンは、シンプルなコントラクトでなければなりません。コードが複雑になればなるほど、よりレビューが煩雑になります。 複雑なコードを特定するには、Slither の[human-summary プリンター](https://github.com/crytic/slither/wiki/Printer-documentation#human-summary)を使用してください。 -- **コントラクトが SafeMath を使用しているか**。SafeMath を使用していないコントラクトは、より厳格なレビュー基準が必要になります。 コントラクトで SafeMath が使用されているかどうか、マニュアルで確認してください。 -- **トークンに関連しない関数の数が、最低限に抑えられているか**。 トークンに関連しない関数は、コントラクトにおいて問題が発生する可能性を高めてしまいます。 Slither の [contract-summary プリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、コントラクトのコード全体をレビューしてください。 +- **コントラクトが必要以上に複雑になっていないか**。 トークンは、シンプルなコントラクトでなければなりません。コードが複雑になればなるほど、よりレビューが煩雑になります。 複雑なコードを特定するには、Slitherの[human-summaryプリンター](https://github.com/crytic/slither/wiki/Printer-documentation#human-summary)を使用してください。 +- **コントラクトがSafeMathを使用しているか**。SafeMathを使用していないコントラクトは、より厳格なレビュー基準が必要になります。 コントラクトでSafeMathが使用されているかどうか、マニュアルで確認してください。 +- **トークンに関連しない関数の数が、最低限に抑えられているか**。 トークンに関連しない関数は、コントラクトにおいて問題が発生する可能性を高めてしまいます。 Slitherの [contract-summaryプリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、コントラクトのコード全体をレビューしてください。 - **トークンのアドレスが複数存在しないか**。残高更新のために複数のエントリーポイントを持つトークンは、当該アドレスに基づく内部の帳簿管理を毀損する可能性があります(例:`balances[token_address][msg.sender]`が実際の残高を反映しない場合)。 ## 所有者の特権 {#owner-privileges} -- **トークンがアップグレード不可能であるか**。アップグレード可能なコントラクトは、時間の経過と共にルールが変更される可能性があります。 Slither の[human-summary プリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、コントラクトがアップグレード可能かどうかを決定します。 -- **所有者のミント能力が制限されているか**。 悪意の所有者やセキュリティが侵害された所有者は、ミント能力を悪用する可能性があります。 Slither の[human-summary プリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、ミント能力を評価し、マニュアルでコードをレビューする必要があるかを決定してください。 +- **トークンがアップグレード不可能であるか**。アップグレード可能なコントラクトは、時間の経過と共にルールが変更される可能性があります。 Slitherの[human-summaryプリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、コントラクトがアップグレード可能かどうかを決定します。 +- **所有者のミント能力が制限されているか**。 悪意の所有者やセキュリティが侵害された所有者は、ミント能力を悪用する可能性があります。 Slitherの[human-summaryプリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、ミント能力を評価し、マニュアルでコードをレビューする必要があるかを決定してください。 - **トークンが、一時停止可能であるか**。 悪意の所有者やセキュリティを侵害された所有者は、一次停止が可能なトークンを利用してコントラクトをトラップすることが可能です。 マニュアルで、一時停止可能なコードを特定してください。 - **所有者がコントラクトをブラックリストに登録できるようになっていないか**。 悪意の所有者やセキュリティが侵害された所有者は、ブラックリストに登録されたトークンを使用して、コントラクトをトラップすることが可能です。 マニュアルで、ブラックリスト機能を特定してください。 -- \*\*トークン開発チームの身元がはっきりしており、不正使用の責任を負える組織であるか/strong>。匿名の開発チームが開発したコントラクトや、または法的シェルターの対象に含まれるコントラクトに対しては、より厳格なレビューが必要になります。 +- **トークン開発チームの身元がはっきりしており、不正使用の責任を負える組織であるか/strong>。匿名の開発チームが開発したコントラクトや、または法的シェルターの対象に含まれるコントラクトに対しては、より厳格なレビューが必要になります。 ## トークンの枯渇 {#token-scarcity} @@ -79,6 +79,6 @@ Slither には[slither-prop](https://github.com/crytic/slither/wiki/Property-gen - **特定のユーザーが、トークン供給量の大部分を所有していないか**。少数のユーザーが大部分のトークンを所有する場合、トークンの再分配に基づき価格操作の可能性が発生します。 - **総供給量は十分であるか**。総供給量が少ないトークンは、価格操作が容易になります。 -- **トークンが、複数の取引所に所在しているか**。 すべてのトークンが 1 カ所の取引所のみに存在する場合、この取引所のセキュリティが侵害されると、このトークンに依存するコントラクトが侵害される可能性があります。 +- **トークンが、複数の取引所に所在しているか**。 すべてのトークンが1カ所の取引所のみに存在する場合、この取引所のセキュリティが侵害されると、このトークンに依存するコントラクトが侵害される可能性があります。 - **ユーザーは、多額の資金やフラッシュローンに関するリスクについて理解しているか**。トークン残高に依存するコントラクトは、多額の資金を持つ攻撃者やフラッシュローンを通じた攻撃について慎重に考慮する必要があります。 - **トークンは、フラッシュミントが不可能であるか**。 フラッシュミンティングは、残高や総供給量を大幅に変更しうるため、トークンの運用において厳格かつ包括的なオーバーフローチェックが必要になります。 diff --git a/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md b/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md index 80335862de8..59852d0fd58 100644 --- a/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md +++ b/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md @@ -7,7 +7,7 @@ tags: - "トークン" - "Solidity" - "erc-20" -skill: beginner +skill: 初級 lang: ja published: 2020-04-05 source: EthereumDev diff --git a/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md index 71bfa2746eb..0382c859e6d 100644 --- a/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -4,7 +4,7 @@ description: Uniswap-v2コントラクトの仕組み、 コントラクトの author: Ori Pomerantz tags: - "Solidity" -skill: intermediate +skill: 中級 published: 2021-05-01 lang: ja --- @@ -909,7 +909,7 @@ import './interfaces/IERC20.sol'; import './interfaces/IWETH.sol'; ``` -これらの大半はすでに目にしていると思います。そうでなくても、非常にわかりやすいものです。 唯一の例外は、`IWETH.sol`です。 Uniswap v2は、どのERC-20トークンのペアでも交換可能ですが、イーサ(ETH)自体はERC-20トークンではありません。 ETHは、標準より前から存在しており、独自のメカニズムによって送金されます。 ERC-20トークンが適用されるコントラクトでETHを利用できるようにするため、[ラップドイーサ(WETH)](https://weth.tkn.eth.limo/)が考案されました。 このコントラクトにETHを送ると、同じ量のWETHがミントされます。 WETHをバーンすると、ETHを取り戻すことができます。 +これらの大半はすでに目にしていると思います。そうでなくても、非常にわかりやすいものです。 唯一の例外は、`IWETH.sol`です。 Uniswap v2は、どのERC-20トークンのペアでも交換可能ですが、イーサ(ETH)自体はERC-20トークンではありません。 ETHは、標準より前から存在しており、独自のメカニズムによって送金されます。 ERC-20トークンが適用されるコントラクトでETHを利用できるようにするため、[ラップドイーサ(WETH)](https://weth.io/)が考案されました。 このコントラクトにETHを送ると、同じ量のWETHがミントされます。 WETHをバーンすると、ETHを取り戻すことができます。 ```solidity contract UniswapV2Router02 is IUniswapV2Router02 { diff --git a/public/content/translations/ja/developers/tutorials/using-websockets/index.md b/public/content/translations/ja/developers/tutorials/using-websockets/index.md index aebf657cd89..b69a39bb2ee 100644 --- a/public/content/translations/ja/developers/tutorials/using-websockets/index.md +++ b/public/content/translations/ja/developers/tutorials/using-websockets/index.md @@ -8,30 +8,30 @@ tags: - "WebSockets" - "クエリ" - "JavaScript" -skill: beginner +skill: 初級 source: Alchemy ドキュメント sourceUrl: https://docs.alchemyapi.io/guides/using-websockets published: 2020-12-01 --- -このガイドでは、初級者向けに、WebSocket と Alchemy を使ってイーサリアムブロックチェーンにリクエストを送信する方法を学びます。 +このガイドでは、初級者向けに、WebSocketとAlchemyを使ってイーサリアムブロックチェーンにリクエストを送信する方法を学びます。 -## WebSocket と HTTP の比較 {#websockets-vs-http} +## WebSocketとHTTPの比較 {#websockets-vs-http} -HTTP とは異なり、WebSocket では特定の情報が必要な場合にリクエストを継続的に実行する必要はありません。 WebSocket では、正しく設定されていれば、ネットワーク接続が継続され、変更をリッスンすることができます。 +HTTPとは異なり、WebSocketでは特定の情報が必要な場合にリクエストを継続的に実行する必要はありません。 WebSocketでは、正しく設定されていれば、ネットワーク接続が継続され、変更をリッスンすることができます。 -どのネットワーク接続でも同様ですが、WebSocket が中断なしに永続的にオープンであると想定すべきではありませんが、手動で切断された接続に適切に対処し、再接続するのは手間がかかる場合があります。 WebSocket のもう一つの欠点は、応答にはエラーメッセージのみが含まれ、HTTP ステータスコードを取得できないという点です。 +どのネットワーク接続でも同様ですが、WebSocketが中断なしに永続的にオープンであると想定すべきではありませんが、手動で切断された接続に適切に対処し、再接続するのは手間がかかる場合があります。 WebSocketのもう一つの欠点は、応答にはエラーメッセージのみが含まれ、HTTPステータスコードを取得できないという点です。 -[Alchemy Web3](https://docs.alchemy.com/reference/api-overview)を利用することで、WebSocket の接続失敗に自動的に対応し、設定なしでリトライさせることができます。 +[Alchemy Web3](https://docs.alchemy.com/reference/api-overview)を利用することで、WebSocketの接続失敗に自動的に対応し、設定なしでリトライさせることができます。 ## さっそく試してましょう {#try-it-out} -WebSocket をテストする最も簡単な方法は、[wscat](https://github.com/websockets/wscat)などの WebSocket リクエストを行うためのコマンドラインツールをインストールすることです。 wscat を使って、次のようにリクエストを送ります: +WebSocketをテストする最も簡単な方法は、[wscat](https://github.com/websockets/wscat)などのWebSocketリクエストを行うためのコマンドラインツールをインストールすることです。 wscatを使って、次のようにリクエストを送ります: -_注意:Alchemy アカウントをお持ちの場合は、 `demo`をあなたの API キーに置き換えてください。 [こちら](https://auth.alchemyapi.io/signup)で、Alchemy の無料アカウントを作成できます。_ +_注意:Alchemyアカウントをお持ちの場合は、 `demo`をあなたのAPIキーに置き換えてください。 [こちら](https://auth.alchemyapi.io/signup)で、Alchemyの無料アカウントを作成できます。_ ``` -$ wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo +wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo > {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"} @@ -39,17 +39,17 @@ $ wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo ``` -## WebSocket の使用方法 {#how-to-use-websockets} +## WebSocketの使用方法 {#how-to-use-websockets} -まず、アプリに WebSocket の URL を入力して WebSocket を開きます。 アプリの WebSocket URL を確認するには、[ダッシュボード](https://dashboard.alchemyapi.io/)の App ページを開き、「View Key」をクリックしてください。 アプリの WebSocket 用 URL は HTTP リクエスト用の URL とは異なっており、両方とも「View Key」で確認できる点に注意してください。 +まず、アプリにWebSocketのURLを入力してWebSocketを開きます。 アプリのWebSocket URLを確認するには、[ダッシュボード](https://dashboard.alchemyapi.io/)のAppページを開き、「View Key」をクリックしてください。 アプリのWebSocket用URLはHTTPリクエスト用のURLとは異なっており、両方とも「View Key」で確認できる点に注意してください。 ![AlchemyのダッシュボードでWebSocket URLを確認できる場所](./use-websockets.gif) -[Alchemy API レファレンス](https://docs.alchemyapi.io/documentation/alchemy-api-reference/)に記載されている API は、いずれも WebSocket 経由で使用可能です。 これには、HTTP POST リクエストの本文として送信する場合と同じペイロードを使用しますが、このペイロードを WebSocket 経由で送信します。 +[Alchemy APIレファレンス](https://docs.alchemyapi.io/documentation/alchemy-api-reference/)に記載されているAPIは、いずれもWebSocket経由で使用可能です。 これには、HTTP POSTリクエストの本文として送信する場合と同じペイロードを使用しますが、このペイロードをWebSocket経由で送信します。 -## Web3 での WebSocket 使用方法 {#with-web3} +## Web3でのWebSocket使用方法 {#with-web3} -Web3 のようなクライアント向けライブラリを使用する場合、WebSocket への移行は簡単です。 Web3 クライアントのインスタンスを作成する際に、HTTP URL ではなく WebSocket URL を渡すだけでよいです。 以下の例をご覧ください: +Web3のようなクライアント向けライブラリを使用する場合、WebSocketへの移行は簡単です。 Web3クライアントのインスタンスを作成する際に、HTTP URLではなくWebSocket URLを渡すだけでよいです。 以下の例をご覧ください: ```js const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key") @@ -57,24 +57,24 @@ const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key") web3.eth.getBlockNumber().then(console.log) // -> 7946893 ``` -## API を講読する {#subscription-api} +## APIを講読する {#subscription-api} -WebSocket 経由で接続する場合、`eth_subscribe`および`eth_unsubscribe`という 2 つの追加メソッドを使用できます。 これらのメソッドを使用することで、特定のイベントをリッスンし、すぐに通知を受け取ることができるようになります。 +WebSocket経由で接続する場合、`eth_subscribe`および`eth_unsubscribe`という2つの追加メソッドを使用できます。 これらのメソッドを使用することで、特定のイベントをリッスンし、すぐに通知を受け取ることができるようになります。 ### `eth_subscribe` {#eth-subscribe} -特定のイベントを対象とする新規のサブスクリプションを作成しましょう。 `eth_subscribe`の詳細については、[こちら](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_subscribe)をご覧ください。 +特定のイベントを対象とする新規のサブスクリプションを作成しましょう。 `eth_subscribe`の詳細については、[こちら](https://docs.alchemy.com/reference/eth-subscribe)をご覧ください。 #### パラメータ {#parameters} 1. サブスクリプションの種類 2. オプションのパラメータ -最初の引数では、リッスンするイベントのタイプを指定します。 2 番目の引数では、最初の引数に依存したオプションを追加します。 以下では、説明タイプ、タイプ別のオプション、およびイベントのペイロードについて説明します。 +最初の引数では、リッスンするイベントのタイプを指定します。 2番目の引数では、最初の引数に依存したオプションを追加します。 以下では、説明タイプ、タイプ別のオプション、およびイベントのペイロードについて説明します。 #### 戻り値 {#returns} -サブスクリプション ID:この ID は、受信したすべてのイベントに付与されるもので、`eth_unsubscribe`を使用してサブスクリプションを取り消すする際にも使用します。 +サブスクリプションID:このIDは、受信したすべてのイベントに付与されるもので、`eth_unsubscribe`を使用してサブスクリプションを取り消すする際にも使用します。 #### サブスクリプション関連のイベント {#subscription-events} @@ -83,14 +83,14 @@ WebSocket 経由で接続する場合、`eth_subscribe`および`eth_unsubscribe - `jsonrpc`: 常に「2.0」です。 - `method`: 常に「eth_subscription」です。 - `params`:以下のフィールドを含むオブジェクトです: - - `subscription`:このサブスクリプションを作成した`eth_subscription`の呼び出しが返したサブスクリプション ID です。 + - `subscription`:このサブスクリプションを作成した`eth_subscribe`の呼び出しが返したサブスクリプションIDです。 - `result`:サブスクリプションのタイプによって内容が異なるオブジェクトです。 #### サブスクリプションのタイプ {#subscription-types} 1. `alchemy_newFullPendingTransactions` -保留状態に追加されたすべてのトランザクションにつき、トランザクション情報を返します。 このサブスクリプションタイプは保留中のトランザクションを講読するため、Web3 の標準的な呼び出しである`web3.eth.subscribe("pendingTransactions")`と似ていますが、トランザクションのハッシュだけでなく*トランザクションの完全な情報*を発行するという点が異なります。 +保留状態に追加されたすべてのトランザクションにつき、トランザクション情報を返します。 このサブスクリプションタイプは保留中のトランザクションを講読するため、Web3の標準的な呼び出しである`web3.eth.subscribe("pendingTransactions")`と似ていますが、トランザクションのハッシュだけでなく_トランザクションの完全な情報_を発行するという点が異なります。 例: @@ -178,10 +178,10 @@ WebSocket 経由で接続する場合、`eth_subscribe`および`eth_unsubscribe トピック仕様の例: - `[]`:すべてのトピックを許可します。 -- `[A]`:最初の位置が A である(その後の位置については条件なし)。 -- `[null, B]`:最初の位置は条件なしで、かつ 2 番目の位置が B である(その後の位置については条件なし)。 -- `[A, B]`:最初の位置が A であり、2 番目の位置が B (その後の位置については条件なし) 。 -- `[[A, B], [A, B]]`: 最初の位置が (A または B)、かつ 2 番目の位置が (A または B) (その後の位置については条件なし) +- `[A]`:最初の位置がAである(その後の位置については条件なし)。 +- `[null, B]`:最初の位置は条件なしで、かつ2番目の位置がBである(その後の位置については条件なし)。 +- `[A, B]`:最初の位置がAであり、2番目の位置がB (その後の位置については条件なし) 。 +- `[[A, B], [A, B]]`: 最初の位置が (AまたはB)、かつ2番目の位置が (AまたはB) (その後の位置については条件なし) 例: @@ -215,11 +215,11 @@ WebSocket 経由で接続する場合、`eth_subscribe`および`eth_unsubscribe パラメータ -1. 以前に`eth_subscribe`呼び出しで返されたサブスクリプションの ID です。 +1. 以前に`eth_subscribe`呼び出しで返されたサブスクリプションのIDです。 戻り値 -サブスクリプションのキャンセルに成功した場合に`true`、または渡された ID のサブスクリプションが存在しない場合に`false`が返ります。 +サブスクリプションのキャンセルに成功した場合に`true`、または渡されたIDのサブスクリプションが存在しない場合に`false`が返ります。 例: @@ -246,4 +246,4 @@ curl https://eth-mainnet.alchemyapi.io/v2/your-api-key --- -無料で[Alchemy に登録し](https://auth.alchemyapi.io/signup)、[ドキュメント](https://docs.alchemyapi.io/)を確認しましょう。また[Twitter](https://twitter.com/AlchemyPlatform)をフォローして最新のニュースをチェックしてください。 +無料で[Alchemyに登録し](https://auth.alchemyapi.io/signup)、[ドキュメント](https://docs.alchemyapi.io/)を確認しましょう。また[Twitter](https://twitter.com/AlchemyPlatform)をフォローして最新のニュースをチェックしてください。 diff --git a/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md b/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md index 984cb59a0e6..ccef3259a0a 100644 --- a/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md +++ b/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md @@ -8,7 +8,7 @@ tags: - "Solidity" - "テスト" - "モックアップ作成" -skill: intermediate +skill: 中級 lang: ja published: 2020-11-14 --- @@ -32,38 +32,38 @@ published: 2020-11-14 ### **1. プロジェクト** {#1-project} -まずはじめに、シンプルな node.js のプロジェクトを作成します。 +まずはじめに、シンプルなnode.jsのプロジェクトを作成します。 ```bash -$ mkdir dynamic-mocking -$ cd dynamic-mocking -$ mkdir contracts src +mkdir dynamic-mocking +cd dynamic-mocking +mkdir contracts src -$ yarn init +yarn init # or if you're using npm -$ npm init +npm init ``` -次に、mocha と chai の依存関係をテストする typescript を追加します。 +次に、mochaとchaiの依存関係をテストするtypescriptを追加します。 ```bash -$ yarn add --dev @types/chai @types/mocha chai mocha ts-node typescript +yarn add --dev @types/chai @types/mocha chai mocha ts-node typescript # or if you're using npm -$ npm install @types/chai @types/mocha chai mocha ts-node typescript --save-dev +npm install @types/chai @types/mocha chai mocha ts-node typescript --save-dev ``` さらに、`Waffle`と`ethers`も追加します。 ```bash -$ yarn add --dev ethereum-waffle ethers +yarn add --dev ethereum-waffle ethers # or if you're using npm -$ npm install ethereum-waffle ethers --save-dev +npm install ethereum-waffle ethers --save-dev ``` これにより、プロジェクトの構造は次のようになっているはずです: ``` -. +。 ├── contracts ├── package.json └── test @@ -73,7 +73,7 @@ $ npm install ethereum-waffle ethers --save-dev 動的モックアップを使用するには、依存関係を含むスマートコントラクトが必要です。 こちらで用意してありますので、ご心配なく! -今回は`Solidity`で書かれたシンプルなスマートコントラクトを使用しますが、このコントラクトの唯一の目的は、私たちがお金持ちであるかを確認することです。 つまり、十分な ERC-20 トークンを保有しているかどうかを確認するだけのスマートコントラクトです。 このコードを、`./contracts/AmIRichAlready.sol`に追加します。 +今回は`Solidity`で書かれたシンプルなスマートコントラクトを使用しますが、このコントラクトの唯一の目的は、私たちがお金持ちであるかを確認することです。 つまり、十分なERC-20トークンを保有しているかどうかを確認するだけのスマートコントラクトです。 このコードを、`./contracts/AmIRichAlready.sol`に追加します。 ```solidity pragma solidity ^0.6.2; @@ -97,7 +97,7 @@ contract AmIRichAlready { } ``` -動的モックアップで使用するだけなので、ERC-20 全体は必要なく、関数を 1 つだけ持つ IERC-20 インターフェイスを使います。 +動的モックアップで使用するだけなので、ERC-20全体は必要なく、関数を1つだけ持つIERC-20インターフェイスを使います。 さっそく、コントラクトをビルドしましょう! ビルドには、`Waffle`を使用します。 まず、コンパイルのオプションを指定するシンプルな`waffle.json`設定ファイルを作成します。 @@ -110,13 +110,13 @@ contract AmIRichAlready { } ``` -さて、Waffle でコントラクトをビルドする準備が整いました。 +さて、Waffleでコントラクトをビルドする準備が整いました。 ```bash -$ npx waffle +npx waffle ``` -簡単ですね。 `build/`フォルダ内に、コントラクトとインターフェイスに対応する 2 つのファイルが現れました。 これらのファイルを使ってテストを行います。 +簡単ですね。 `build/`フォルダ内に、コントラクトとインターフェイスに対応する2つのファイルが現れました。 これらのファイルを使ってテストを行います。 ### **3. テストを実行する** {#3-testing} @@ -133,20 +133,20 @@ import { } from "ethereum-waffle" ``` -JS の依存関係の他に、ビルドしたコントラクトとインターフェイスをインポートする必要があります: +JSの依存関係の他に、ビルドしたコントラクトとインターフェイスをインポートする必要があります: ```typescript import IERC20 from "../build/IERC20.json" import AmIRichAlready from "../build/AmIRichAlready.json" ``` -Waffle では、`chai`を使ってテストを実行します。 ただしその前に、Waffle のマッチャーを chai に追加する必要があります: +Waffleでは、`chai`を使ってテストを実行します。 ただしその前に、Waffleのマッチャーをchaiに追加する必要があります: ```typescript use(solidity) ``` -各テストの実行前にコントラクトの状態をリセットするため、`beforeEach()`関数を実装する必要があります。 まず、この関数には何が必要かを考えてみましょう。 コントラクトをデプロイするには、ウォレットと、`AmIRichAlready`コントラクトに引数として渡すためのデプロイされた ERC-20 コントラクトが必要です。 +各テストの実行前にコントラクトの状態をリセットするため、`beforeEach()`関数を実装する必要があります。 まず、この関数には何が必要かを考えてみましょう。 コントラクトをデプロイするには、ウォレットと、`AmIRichAlready`コントラクトに引数として渡すためのデプロイされたERC-20コントラクトが必要です。 まず、ウォレットを作成します: @@ -154,13 +154,13 @@ use(solidity) const [wallet] = new MockProvider().getWallets() ``` -次に、ERC-20 コントラクトをデプロイする必要があります。 今のところ、私たちはインターフェイスしか持っていないので、工夫が必要になります。 ここで、Waffle が助けてくれます。 Waffle には、インターフェイスの*ABI*だけを使用してコントラクトを作成できる、魔法のような`deployMockContract()`関数が含まれているのです。 +次に、ERC-20コントラクトをデプロイする必要があります。 今のところ、私たちはインターフェイスしか持っていないので、工夫が必要になります。 ここで、Waffleが助けてくれます。 Waffleには、インターフェイスの_ABI_だけを使用してコントラクトを作成できる、魔法のような`deployMockContract()`関数が含まれているのです。 ```typescript const mockERC20 = await deployMockContract(wallet, IERC20.abi) ``` -ウォレットとデプロイされた ERC-20 コントラクトの両方が準備できたので、さっそく`AmIRichAlready`コントラクトをデプロイしましょう: +ウォレットとデプロイされたERC-20コントラクトの両方が準備できたので、さっそく`AmIRichAlready`コントラクトをデプロイしましょう: ```typescript const contract = await deployContract(wallet, AmIRichAlready, [ @@ -198,9 +198,9 @@ describe("Am I Rich Already", () => { }) ``` -この`AmIRichAlready`コントラクトに対する初回のテストを書きましょう。 テストの対象は何にすべきだと思いますか? 言うまでもなく、 私たちがお金持ちであるかをチェックするのですね :) +この`AmIRichAlready`コントラクトの最初のテストを書きましょう。 テストの対象は何にすべきだと思いますか? 言うまでもなく、 私たちがお金持ちであるかをチェックするのですね :) -でもちょっと待ってください。 今作成したコントラクトでは、どのような値を返すべきかを指定していませんでした。 `balanceOf()`関数のロジックが実装されていないからです。 ここでも Waffle が助けてくれます。 モックアップを作成したコントラクトには、新たに以下のような素敵なコードが付け加えられています: +でもちょっと待ってください。 今作成したコントラクトでは、どのような値を返すべきかを指定していませんでした。 `balanceOf()`関数のロジックが実装されていないからです。 ここでもWaffleが助けてくれます。 モックアップを作成したコントラクトには、新たに以下のような素敵なコードが付け加えられています: ```typescript await mockERC20.mock.BasicToken.json
@@ -1007,7 +1008,7 @@ Waffle がコントラクトをコンパイルし、JSON の出力結果を`buil.returns( ) @@ -218,14 +218,14 @@ it("returns false if the wallet has less than 1000000 tokens", async () => { このテストを、構成要素に分解してみましょう: -1. モックアップの ERC-20 コントラクトは、常に、999999 トークンの残高を返すように設定します。 +1. モックアップのERC-20コントラクトは、常に、999999トークンの残高を返すように設定します。 2. `contract.check()`メソッドが、`false`を返すか確認します。 ようやく、テストを実行する準備ができました。 ![1つのテストが合格](./test-one.png) -テストは実行されましたが・・・改善の余地がありますね。 `balanceOf()`関数は、常に 99999 を返します。 実際のコントラクトのように、関数が値を返すウォレットを指定するともっとテストらしくなるでしょう。 +テストは実行されましたが・・・改善の余地がありますね。 `balanceOf()`関数は、常に99999を返します。 実際のコントラクトのように、関数が値を返すウォレットを指定するともっとテストらしくなるでしょう。 ```typescript it("returns false if the wallet has less than 1000001 tokens", async () => { @@ -255,7 +255,7 @@ it("returns true if the wallet has at least 1000001 tokens", async () => { ## コントラクトの呼び出しをテストする {#testing-contract-calls} -これまでの進展をまとめておきましょう。 `AmIRichAlready`コントラクトの機能をテストし、正常に動作していることが確認できたようです。 これで終わりだろうって? いいえ、まだ少し残っています。 Waffe を使えば、さらに多くの事項をテストすることができます。 具体的に説明すると、 Waffle には`calledOnContract()`マッチャーと`calledOnContractWith()`マッチャーが搭載されています。 これらを使えば、作成したコントラクトがモックアップの ERC-20 コントラクトを呼び出したかどうかを確認できるのです。 いずれかのマッチャーを使用した基本的なテストは、次のようになります: +これまでの進展をまとめておきましょう。 `AmIRichAlready`コントラクトの機能をテストし、正常に動作していることが確認できたようです。 これで終わりだろうって? いいえ、まだ少し残っています。 Waffeを使えば、さらに多くの事項をテストすることができます。 具体的に説明すると、 Waffleには`calledOnContract()`マッチャーと`calledOnContractWith()`マッチャーが搭載されています。 これらを使えば、作成したコントラクトがモックアップのERC-20コントラクトを呼び出したかどうかを確認できるのです。 いずれかのマッチャーを使用した基本的なテストは、次のようになります: ```typescript it("checks if contract called balanceOf on the ERC20 token", async () => { @@ -283,16 +283,16 @@ it("checks if contract called balanceOf with certain wallet on the ERC20 token", 幸いなことに、すべてのテストに合格しました。 -Waffle を使えば、コントラクトの呼び出しをとても簡単にテストできます。 特にすばらしいのは、 これらのマッチャーを通常のコントラクトとモックアップのコントラクトの両方に使えることです! 他のテクノロジー向けの人気が高いテストライブラリと同じように、Waffle は、コードを挿入するのではなく、EVM 呼び出しを記録し、フィルタ処理を行うアプローチを採用しています。 +Waffleを使えば、コントラクトの呼び出しをとても簡単にテストできます。 特にすばらしいのは、 これらのマッチャーを通常のコントラクトとモックアップのコントラクトの両方に使えることです! 他のテクノロジー向けの人気が高いテストライブラリと同じように、Waffleは、コードを挿入するのではなく、EVM呼び出しを記録し、フィルタ処理を行うアプローチを採用しています。 ## おわりに {#the-finish-line} -おめでとうございます! これで、Waffle を使用して、コントラクトの呼び出しや、モックアップのコントラクトを動的にテストする方法を身に付けることができました。 この他にもたくさんの興味深い機能がありますので、 Waffle のドキュメンテーションに目を通すことをおすすめします。 +おめでとうございます! これで、Waffleを使用して、コントラクトの呼び出しや、モックアップのコントラクトを動的にテストする方法を身に付けることができました。 この他にもたくさんの興味深い機能がありますので、 Waffleのドキュメンテーションに目を通すことをおすすめします。 -Waffle のドキュメンテーションは、[こちら](https://ethereum-waffle.readthedocs.io/)から入手できます。 +Waffleのドキュメンテーションは、[こちら](https://ethereum-waffle.readthedocs.io/)から入手できます。 このチュートリアルのソースコードは、[こちら](https://github.com/EthWorks/Waffle/tree/master/examples/dynamic-mocking-and-testing-calls)からアクセスできます。 さらに、以下のチュートリアルをおすすめします: -- [Waffle を使ってスマートコントラクトをテストする](/developers/tutorials/waffle-test-simple-smart-contract/) +- [Waffleを使ってスマートコントラクトをテストする](/developers/tutorials/testing-smart-contract-with-waffle/) diff --git a/public/content/translations/ja/developers/tutorials/waffle-say-hello-world-with-hardhat-and-ethers/index.md b/public/content/translations/ja/developers/tutorials/waffle-say-hello-world-with-hardhat-and-ethers/index.md index 2134666844d..aea5d5cf679 100644 --- a/public/content/translations/ja/developers/tutorials/waffle-say-hello-world-with-hardhat-and-ethers/index.md +++ b/public/content/translations/ja/developers/tutorials/waffle-say-hello-world-with-hardhat-and-ethers/index.md @@ -14,9 +14,9 @@ lang: ja published: 2020-10-16 --- -この[Waffle](https://ethereum-waffle.readthedocs.io)チュートリアルでは、[Hardhat](https://hardhat.org/)と[ethers.js](https://docs.ethers.io/v5/)を使用して、「Hello world」と表示するシンプルなスマートコントラクトのプロジェクトを作成する方法を学びます。 さらに、Waffle 上で作成したスマートコントラクトに新たな機能を追加し、テストする方法を学びます。 +この[Waffle](https://ethereum-waffle.readthedocs.io)チュートリアルでは、[Hardhat](https://hardhat.org/)と[ethers.js](https://docs.ethers.io/v5/)を使用して、「Hello world」と表示するシンプルなスマートコントラクトのプロジェクトを作成する方法を学びます。 さらに、Waffle上で作成したスマートコントラクトに新たな機能を追加し、テストする方法を学びます。 -まずはじめに、以下のように新しいプロジェクトを作成します: +まずはじめに新しいプロジェクトを作成しましょう。 ```bash yarn init @@ -40,7 +40,7 @@ yarn add -D hardhat @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle e npm install -D hardhat @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai ``` -次に、`npx hardhat`を実行して、サンプルの Hardhat プロジェクトを作成します。 +次に、`npx hardhat`を実行して、サンプルのHardhatプロジェクトを作成します。 ```bash 888 888 888 888 888 @@ -73,7 +73,7 @@ MyWaffleProject │ └── sample-script.js ├── test │ └── sample-test.js -├── .gitattributs +├── .gitattributes ├── .gitignore ├── hardhat.config.js └── package.json @@ -81,7 +81,7 @@ MyWaffleProject ### 次に、これらのファイルのいくつかを説明します。 {#now-lets-talk} -- Greeter.sol は、このチュートリアルで使用する Solidity で書かれたスマートコントラクトです。 +- Greeter.solは、このチュートリアルで使用するSolidityで書かれたスマートコントラクトです。 ```solidity contract Greeter { @@ -103,11 +103,11 @@ greeting = _greeting; } ``` -このスマートコントラクトは、以下の 3 つの要素に分解できます: +このスマートコントラクトは、以下の3つの要素に分解できます: 1. コンストラクタ:`greeting`という名前の文字列型の変数を宣言する場所です。 -2. greet 関数:`greeting`を返す関数です。 -3. setGreeting 関数:`greeting`の値を変更する関数です。 +2. greet関数:`greeting`を返す関数です。 +3. setGreeting関数:`greeting`の値を変更する関数です。 - sample-test.js:テストを実行するファイルです。 @@ -128,7 +128,7 @@ describe("Greeter", function () { ### 次に、コントラクトをコンパイルし、テストを実行します。 {#compiling-and-testing} -Waffle では、Mocha(テスト用フレームワーク)および Chai(アサーションライブラリ)を使ってテストを実行します。 `npx hardhat test`を実行して、以下のメッセージが表示されるまで待つだけです。 +Waffleでは、Mocha(テスト用フレームワーク)およびChai(アサーションライブラリ)を使ってテストを実行します。 `npx hardhat test`を実行して、以下のメッセージが表示されるまで待つだけです。 ```bash ✓ Should return the new greeting once it's changed @@ -139,7 +139,7 @@ Waffle では、Mocha(テスト用フレームワーク)および Chai(ア 他のユーザーが、挨拶の代わりに空の文字列を追加したと想定してみましょう。 無言の挨拶は嬉しくありませんね! ですから、このようなことが起こらないようにします: -空の文字列が渡された場合に、Solidity の`revert`機能を利用できるようにします。 この機能は、Waffle の chai マッチャーである`to.be.revertedWith()`で簡単にテストできます。 +空の文字列が渡された場合に、Solidityの`revert`機能を利用できるようにします。 この機能は、Waffleのchaiマッチャーである`to.be.revertedWith()`で簡単にテストできます。 ```js it("Should revert when passing an empty string", async () => { @@ -174,7 +174,7 @@ Changing greeting from 'Hello, world!' to '' require(bytes(_greeting).length > 0, "Greeting should not be empty"); ``` -これにより、setGreeting 関数は以下のようになっているはずです: +これにより、setGreeting関数は以下のようになっているはずです: ```solidity function setGreeting(string memory _greeting) public { @@ -197,6 +197,6 @@ greeting = _greeting; ### まとめ {#conclusion} -Waffle、Hardhat、および ethers.js を使った簡単なプロジェクトを作成しました。 このチュートリアルでは、プロジェクトを開始し、テストを追加し、さらに新たな機能を実装する方法について学びました。 +Waffle、Hardhat、およびethers.jsを使った簡単なプロジェクトを作成しました。 このチュートリアルでは、プロジェクトを開始し、テストを追加し、さらに新たな機能を実装する方法について学びました。 -スマートコントラクトのテストに大活躍する Chai マッチャーについてさらに知りたい場合は、[Waffle の公式文書](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html)を参照してください。 +スマートコントラクトのテストに大活躍するChaiマッチャーについてさらに知りたい場合は、[Waffleの公式文書](https://ethereum-waffle.readthedocs.io/en/latest/matchers.html)を参照してください。 diff --git a/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md b/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md index f4a03f03ae3..8cab56944c6 100644 --- a/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md +++ b/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md @@ -4,7 +4,7 @@ description: イーサリアムの正式な仕様であるイエローペーパ author: "qbzzt" tags: - "イーサリアム仮想マシン(EVM)" -skill: intermediate +skill: 中級 lang: ja published: 2022-05-15 --- @@ -33,7 +33,7 @@ _システム状態_とは、システムを実行するため必要なすべて このセクションでは、EVMの基本事項と、EVMと他の計算モデルとの比較について説明しています。 -[スタックマシン](https://en.wikipedia.org/wiki/Stack_machine)は、中間データをレジスタではなく[**スタック**](https://en.wikipedia.org/wiki/Stack_(abstract_data_type))に格納するコンピュータです。 これは、仮想マシンで好まれるアーキテクチャです。なぜなら、実装が簡単で、バグやセキュリティの脆弱性が発生する可能性を大幅に低くできるためです。 スタック内のメモリは、256ビットのワードに分割されます。 256ビットが選ばれた理由としては、Kecck-256ハッシュや楕円曲線計算など、イーサリアムの中核となる暗号操作に都合が良いためです。 スタックの最大サイズは、1024バイトです。 オペコード実行時、通常、スタックからパラメータを取得します。 `POP`(スタックの先頭のアイテムの削除)、`DUP_N`(スタックのN番目のアイテムの複製)など、スタック内の要素を再構成するための専用オペコードがあります。 +[スタックマシン](https://en.wikipedia.org/wiki/Stack_machine)は、中間データをレジスタではなく[**スタック**](https:// en.wikipedia.org/wiki/Stack_(abstract_data_type))に格納するコンピュータです。 これは、仮想マシンで好まれるアーキテクチャです。なぜなら、実装が簡単で、バグやセキュリティの脆弱性が発生する可能性を大幅に低くできるためです。 スタック内のメモリは、256ビットのワードに分割されます。 256ビットが選ばれた理由としては、Kecck-256ハッシュや楕円曲線計算など、イーサリアムの中核となる暗号操作に都合が良いためです。 スタックの最大サイズは、1024バイトです。 オペコード実行時、通常、スタックからパラメータを取得します。 `POP`(スタックの先頭のアイテムの削除)、`DUP_N`(スタックのN番目のアイテムの複製)など、スタック内の要素を再構成するための専用オペコードがあります。 EVMには、 実行中にデータを保存するために使用される**メモリ**と呼ばれる揮発性スペースもあります。 このメモリは、32バイトのワードで構成されます。 すべてのメモリのロケーションは、ゼロで初期化されます。 次の[Yul](https://docs.soliditylang.org/en/latest/yul.html)コードを実行してメモリにワードを追加すると、32バイトのメモリのワード内にある空スペースがパディングによってゼロで埋められます。つまり、ロケーション0~29、0x60~30、0xA7~31にゼロが含まれる1つのワードが作成されます。 @@ -96,7 +96,7 @@ EVMには、システム状態の一部として保持される独自の不揮 | _Ia_ | [`ADDRESS`](https://www.evm.codes/#30) | `address(this)` | | _Io_ | [`ORIGIN`](https://www.evm.codes/#32) | `tx.origin` | | _Ip_ | [`GASPRICE`](https://www.evm.codes/#3a) | `tx.gasprice` | -| _Id_ | [`CALLDATALOAD`](https://www.evm.codes/#35)など | `msg.data` | +| _Id_ | [`CALLDATALOAD`](https://www.evm.codes/#35), etc. | `msg.data` | | _Is_ | [`CALLER`](https://www.evm.codes/#33) | `msg.sender` | | _Iv_ | [`CALLVALUE`](https://www.evm.codes/#34) | `msg.value` | | _Ib_ | [`CODECOPY`](https://www.evm.codes/#39) | `address(this).code` | @@ -235,7 +235,7 @@ _σ[μs[0] mod 2160] ≠ ∅_の場合、このアドレ | 0x8F | DUP16 | 16 | 17 | 16番目のスタックアイテムを複製 | | | | | | _μ′s[0] ≡ μs[15]_ | -スタックアイテムを使用するには、ポップする必要があることに注意してください。つまり、そのアイテム上にあるすべてのスタックアイテムもポップする必要があります。 [`DUP `](https://www.evm.codes/#8f)および[`SWAP `](https://www.evm.codes/#9f)の場合は、最大で16個の値をポップして、その後にプッシュしなければならなりません。 +スタックアイテムを使用するには、ポップする必要があることに注意してください。つまり、そのアイテム上にあるすべてのスタックアイテムもポップする必要があります。 [`DUP `](https://www.evm.codes/#8f)および[`SWAP `](https://www. evm.codes/#9f)の場合は、最大で16個の値をポップして、その後にプッシュしなければならなりません。 ## 9.5 実行サイクル {#95-exec-cycle} diff --git a/public/content/translations/ja/energy-consumption/energy_consumption_pre_post_merge.svg.xlsx b/public/content/translations/ja/energy-consumption/energy_consumption_pre_post_merge.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e70e1eb88a5a8bbd18979a95656a93625a632cfb GIT binary patch literal 4826 zcmaJ_2{@GP_Z}nrPL`2 %2<+pjbzDQA^R3%-?B6Ilw_AJ znIeheL;o3lzdv>Lb>6w&>wT_kp7UPke$KhieO^5n@rjcFa&mHjyFjKf;FvMtpUqTV zP##E>2mGp+E7ILU9PR8>W!R_N4x!%z9`Jr)mO&}-1gCDdERbs^&>4T!u^yH1njV|Q zXqgHW@&vrLY^?59lEPKxZDwFPNtsgSL?uPKvo4ec%KDi^Jm}n9(LI^a>iE3XT5wwv zalRo{e4C+Q&gM#@om @$6AZl)6X75x45^*JxLy@QC*Q zk52=4L!T?I_O00tH3RfuWaQ4_m3lHn008I&0Kfh()T!{O!`+Zh?h@jJd-Tvn+CT_B z$uJW-?B=$CtJVF?=aNEBG+a-sRe3Mu*%!5a`eYDIl@!0T>6craKlC>3aJ3nL=P|Gb9hqH;c$E$FP9-K$)F zXkW61OKrSE0_l$U(6^}ekxwECGltsbR^=DYpmWfwOyJVF5G0--b( zIuL-)gm<0EY$=Mnr)=DG80s^ZOr8pSAj0@?|2x!^_ kbg9&Yw1TX#Z+ zVam&T2K0qtV&K94A&k-4*HU^0ngg)GE7*QmjS(fytyfig6*U+UadCYBxL>r|s8?7- z $gzli`fX ~@l<7et73f(i-*>lAi1NJ($*) NYAZD9rsx#h&~P1UX~ zt%4q$%9~h8dON-nlyEUo_Ny}LF`2=1<$}HK`a-DX(~)i+SPP#Sw_KU`ROQO8O21 z_7;87z}vTgap#p0p$BPqps1O>+B${?@ZB5V$B7Q{nxI&hTf?K__*cBxe&S{0X5~qM zO5)!KNdjgW!xpGE2sPPfrjN8nGxnxzOsXd>hjk&ebAqT-4 W>5LO)RwjPA>wlG zgYK*kpggL-t09 yK%VN;QTs$_ezlc2m3U$E zKxZttT88r5#SD&JdEQ_a#4gFVn{&klWTpD&^!A9l?gdIk0>fk |4`42F<;r@Sf?D-9(&M+RxOfdiR8t3t2YDBQ-qN0&47tIRpB7YURH#OqYYPvQ@&O zPUV&}CH)w_8aScK$Po5HBzPFfi2s&){6C@eba8WZw?iU5+$Db2+~ML7(0{8BM%f0T zC!NDrAH*mAO-Q)(CyiiK4%ZFMTskK%fsL1wY0+78ZA<+_zU^=sIw{Pl5P1dB%taDN zMeheJE#u(yttMg?CevsPM!+hQT&Jl}SK7K)?pC_54X9kdEjezMieXffl;88Qldd-_ zb*^&gMf6ox4o#;>glJnH(N+@HRE)Q>{=^%x#|PyWvsWT%buDPdzb=Ff6Rp=73rSKZ z2)G_hG_}XsvZz@^ltpea5ilsp$LV135rY4kP6U3(m!F3n(i!>lei-<`^-0te5B+}N z0r7lO>sXUWgMLMt5x1$)YW1pA`9@CbTcE7{K{K0=vo9>`CO;AmT#yQrl4^ %j|8r|L`ITh)oVjUcO)aj)~#3!{!IZG8>h%zyu{G(Z pTMel?vw#Em!$3E!HaZ>Eh 7RePnXUU+9qU%WJ z+zQ7eG`#|gNuDJhwX&Vge}UsK$c{14ruz~RSEd4ERM2T}I=dQi$05#Kz` &=(^#aabR4$&|ut$DG{ jR@st0or3Rws%XdVz`q)$dNSK;{GGKV}IV95CB zcH!QY(Q`gId2!=3lOPJ04;dvRoD5xeaFLK|t3cHexhHjR`j*fI8Tz2jPM_E8H0z|j z^-`bn2h(w)sQ^|-wgTK`8jQ*Y1&gY`eKFVRfMTY7s2r>{WXkH{RmgrpBorq2&ObM0 z0(TQ6>{vBEIJH|l|L9G3AIB 0 z2UFrqY`H43 m%uQJeydvkNc^OnZ2CXmmbXA?hD!SO+x#qLY|3r<V^e zj?TO@+l7UxJ$DkKiY&dc*H)RW8#Rc!fU;HpY;oS7o*tETxH?Kk>~eF)2i>x?U?c67 zI4Jtu=-S6G_ccYI8g3gSXK4qf^X`9daqgBeHbG*(j$2#oLL7ILH9_Qz#_*TC!5aaR z5~TLEv#r8n8s4s )r)kB*P`dyLs2y}8Jo%z&fHbD;bO1rMV)$lj% z9 特定のブロックの高さで -フォークすることです。そして、デプロイされたコントラクトと作成したコントラクトのやり取りをシミュレートします。 +統合テストは、コントラクトがモジュラー型アーキテクチャを採用していたり、実行中に他のオンチェーンコントラクトと接続する場合に有用です。 統合テストを実行する方法の1つは、([Forge](https://book.getfoundry.sh/forge/fork-testing)や[Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks)などのツールを使用して)ブロックチェーンの特定のブロックの高さで +フォークすることです。そして、デプロイされたコントラクトと作成したコントラクトのやり取りをシミュレートします。 フォークされたブロックチェーンは、メインネットと同様の仕組みで動作し、アカウントに状態と残高が関連付けられています。 しかし、サンドボックス化されたローカル開発環境としてのみ機能します。例えば、トランザクションに実際のETHは必要なく、変更しても実際のイーサリアムプロトコルに影響することはありません。 @@ -168,7 +168,7 @@ Solidityスマートコントラクト用の単体テストフレームワーク 静的アナライザーは、スマートコントラクトのソースコードを受け取って解析し、コントラクトがプロパティを満たしているかどうかを判断します。 動的解析とは異なり、静的解析では、コントラクトを実行して正確性の解析を行うことはありません。 静的解析は、スマートコントラクトが実行中にたどる可能性のあるすべてのパスを推論します。つまり、ソースコードの構造を調べて、コントラクトの操作がランタイムで何を意味するかを決定します。 -コントラクトで静的解析を実行する一般的な手法として、[リンティング](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting- important)と[静的テスト](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis)があります。 どちらの手法も、コンパイラによって出力された[抽象構文木](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree)や[制御フローグラフ](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/)など、コントラクト実行における低レベル表現の解析が必要です。 +コントラクトで静的解析を実行する一般的な手法として、[リンティング](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting-important)と[静的テスト](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis)があります。 どちらの手法も、コンパイラによって出力された[抽象構文木](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree)や[制御フローグラフ](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/)など、コントラクト実行における低レベル表現の解析が必要です。 静的解析は、安全でない構造の使用や構文エラー、コントラクトコード内のコーディング規約違反などの安全性の問題を検出するには有効です。 しかし、より深い脆弱性の検出が不得意であることが知られており、過剰な誤検出が生じる可能性があります。 @@ -253,7 +253,7 @@ Solidityスマートコントラクト用の単体テストフレームワーク 上記のように、厳密なテストをしても、コントラクトにバグがないとは言い切れません。 形式検証によるアプローチは、正確性をより強力に保証できますが、現時点では使用が難しく、かなりのコストがかかります。 -第三者によるコードレビューを受ければ、コントラクトの脆弱性を発見できる可能性が高くなります。 第三者にコントラクトを分析してもらうには、[スマートコントラクトの監査](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/)および[バグ報奨金](https://medium. com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)のいずれかの方法があります。 +第三者によるコードレビューを受ければ、コントラクトの脆弱性を発見できる可能性が高くなります。 第三者にコントラクトを分析してもらうには、[スマートコントラクトの監査](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/)および[バグ報奨金](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)のいずれかの方法があります。 監査は、スマートコントラクトのセキュリティ上の欠陥や不健全な開発プラクティスを探し出す経験豊かな監査人が行います。 監査では、コードベース全体の手動レビューだけでなく、テストや形式検証も行われるのが一般的です。 diff --git a/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md b/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md index e14b5882411..a773a66f191 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/upgrading/index.md @@ -74,53 +74,51 @@ lang: ja [Solidityのドキュメント](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries)の引用: -> **delegatecall**という特別な可変メッセージ呼び出しがあります。**delegatecall**は、ターゲットアドレスのコードが、呼び出し側コントラクトのコンテキスト(例: アドレス)で実行されることを除けば、メッセージ呼び出しと同一です。また、`msg.sender`と`msg.value`の値は変わりません。__これは、コントラクトが実行時に、別のアドレスからコードを動的にロードできることを意味します。 つまり、ストレージ、現在のアドレス、残高は呼び出し元のコントラクトを参照しており、 コードのみが呼び出し先のアドレスから取得されます_。 -> -> プロキシコントラクトには、`fallback`関数が組み込まれているため、ユーザーが関数を呼び出すたびに`delegatecall`をが呼び出されていることがわかります。 Solidityプログラミングでは、コントラクトの関数呼び出しが指定した関数と一致しない場合、[フォールバック関数](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function)が実行されます。 -> -> プロキシパターンを機能させるには、プロキシコントラクトがサポートしていない関数の呼び出しを処理する方法を指定したカスタムフォールバック関数を作成する必要があります。 この場合、プロキシのフォールバック関数は、delegatecallを起動し、ユーザーのリクエストを現在のロジックコントラクト実装に切り替えるようにプログラムされます。 -> -> プロキシコントラクトは、デフォルトでは不変ですが、新しいロジックコントラクトを作成することで、ビジネスロジックを更新することができます。 アップグレードを実行するには、プロキシコントラクトが参照しているロジックコントラクトのアドレスを変更する必要があります。 -> -> プロキシコントラクトが新しいロジックコントラクトを参照するように変更することで、ユーザーがプロキシコントラクトの関数を呼び出すときに実行されるコードを変更することができます。 これにより、ユーザーは新しいコントラクトとやり取りする必要がなくなり、コントラクトのロジックをアップグレードすることができます。 -> -> プロキシパターンは、コントラクトのマイグレーションを容易にすることから、アップグレードで広く普及している方法です。 ただし、プロキシパターンの使用は、より複雑なため、不適切に扱うと[関数セレクタークラッシュ](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357)などの重大な欠陥を引き起こす可能性があります。 -> -> [プロキシパターンの詳細](https://blog.openzeppelin.com/proxy-patterns/) -> -> ### アップグレードメカニズム #4: ストラテジパターン {#strategy-pattern} -> -> このテクニックは、[ストラテジパターン](https://en.wikipedia.org/wiki/Strategy_pattern)に基づいています。ストラテジパターンとは、特定の機能を実装するために、他のプログラムとインターフェースするソフトウェアプログラムを作成するよう奨励するものです。 ストラテジパターンをイーサリアム開発に適用すると、他のコントラクトから関数を呼び出すスマートコントラクトを構築することになります。 -> -> この場合、メインコントラクトはコアとなるビジネスロジックを持ちますが、他のスマートコントラクト(「サテライトコントラクト」) のインターフェースで、特定の機能を実行します。 このメインコントラクトには、各サテライトコントラクトのアドレスが格納されており、サテライトコントラクトの実装を切り替えることができます。 -> -> 新しいサテライトコントラクトを構築して、メインコントラクトにその新しいコントラクトアドレスを設定することで、 スマートコントラクトの_ストラテジ_を変更(つまり、新しいロジックを実装)することができます。 -> -> 先ほどのプロキシパターンと似ていますが、ストラテジパターンでは、ユーザーがやり取りするメインコントラクトがビジネスロジックを持っています。これは、プロキシパターンと異なる点です。 このパターンを使用すると、コアインフラストラクチャに影響を与えることなく、スマートコントラクトに限定的な変更を加えることができます。 -> -> このパターンの欠点は、マイナーアップグレードにしか対応できないことです。 また、メインコントラクトが(ハッキングなどにより)侵害された場合は、このアップグレード方法は使用できません。 -> -> ### アップグレードメカニズム #5: ダイヤモンドパターン {#diamond-pattern} -> -> ダイヤモンドパターンは、プロキシパターンの改良版と言えます。 ダイヤモンドパターンでは、ダイヤモンドプロキシコントラクトが、関数呼び出しを複数のロジックコントラクトに委任できることができます。これは、プロキシパターンではできなかったことです。 -> -> ダイヤモンドパターンのロジックコントラクトを_ファセット_と呼びます。 ダイヤモンドパターンを機能させるには、各ファセットアドレスに[関数セレクタ](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector)をマップするマッピングを、プロキシコントラクト内に作成する必要があります。 -> -> ユーザーが関数を呼び出すと、プロキシコントラクトはマッピングをチェックして、その関数の実行を担当するファセットを見つけます。 次に、(フォールバック関数を使って)`delegatecall`を呼び出します。この呼び出しは、適切なロジックコントラクトにリダイレクトされます。 -> -> このダイヤモンドアップグレードパターンは、従来のプロキシアップグレードパターンに比べて、以下の利点があります。 -> -> 1. コード全体を変更しなくとも、コントラクトの一部をアップグレード可能。 プロキシパターンを使ってアップグレードすると、マイナーアップグレードであっても、新しいロジックコントラクトを最初から作成しなければなりません。 -> -> 2. すべてのスマートコントラクト(プロキシパターンで使用されるロジックコントラクトを含む)には、24KBのサイズ制限がある。この制限は、特に、多くの機能を必要とする複雑なコントラクトで適用されます。 ダイヤモンドパターンを使えば、関数を複数のロジックコントラクトに分割できるため、この問題を簡単に解決できます。 -> -> 3. プロキシパターンは、アクセス制御に対して、一括管理するアプローチを採用。 アップグレード機能にアクセスできるエンティティは、 コントラクト_全体_を変更することができます。 一方、ダイヤモンドパターンを使用することで、モジュールごとにアクセス許可を設定することができます。これにより、エンティティがスマートコントラクト内の特定の機能をアップグレードすることを制限できます。 -> -> [ダイヤモンドパターンの詳細](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w) -> -> ## スマートコントラクトのアップグレードにおけるメリットとデメリット {#pros-and-cons-of-upgrading-smart-contracts} -> -> +> **delegatecall**という特別な可変メッセージ呼び出しがあります。**delegatecall**は、ターゲットアドレスのコードが、呼び出し側コントラクトのコンテキスト(例: アドレス)で実行されることを除けば、メッセージ呼び出しと同一です。また、`msg.sender`と`msg.value`の値は変わりません。__これは、コントラクトが実行時に、別のアドレスからコードを動的にロードできることを意味します。 つまり、ストレージ、現在のアドレス、残高は呼び出し元のコントラクトを参照しており、 コードのみが呼び出し先のアドレスから取得されます_。 + +プロキシコントラクトには、`fallback`関数が組み込まれているため、ユーザーが関数を呼び出すたびに`delegatecall`をが呼び出されていることがわかります。 Solidityプログラミングでは、コントラクトの関数呼び出しが指定した関数と一致しない場合、[フォールバック関数](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function)が実行されます。 + +プロキシパターンを機能させるには、プロキシコントラクトがサポートしていない関数の呼び出しを処理する方法を指定したカスタムフォールバック関数を作成する必要があります。 この場合、プロキシのフォールバック関数は、delegatecallを起動し、ユーザーのリクエストを現在のロジックコントラクト実装に切り替えるようにプログラムされます。 + +プロキシコントラクトは、デフォルトでは不変ですが、新しいロジックコントラクトを作成することで、ビジネスロジックを更新することができます。 アップグレードを実行するには、プロキシコントラクトが参照しているロジックコントラクトのアドレスを変更する必要があります。 + +プロキシコントラクトが新しいロジックコントラクトを参照するように変更することで、ユーザーがプロキシコントラクトの関数を呼び出すときに実行されるコードを変更することができます。 これにより、ユーザーは新しいコントラクトとやり取りする必要がなくなり、コントラクトのロジックをアップグレードすることができます。 + +プロキシパターンは、コントラクトのマイグレーションを容易にすることから、アップグレードで広く普及している方法です。 ただし、プロキシパターンの使用は、より複雑なため、不適切に扱うと[関数セレクタークラッシュ](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357)などの重大な欠陥を引き起こす可能性があります。 + +[プロキシパターンの詳細](https://blog.openzeppelin.com/proxy-patterns/) + +### アップグレードメカニズム #4: ストラテジパターン {#strategy-pattern} + +このテクニックは、[ストラテジパターン](https://en.wikipedia.org/wiki/Strategy_pattern)に基づいています。ストラテジパターンとは、特定の機能を実装するために、他のプログラムとインターフェースするソフトウェアプログラムを作成するよう奨励するものです。 ストラテジパターンをイーサリアム開発に適用すると、他のコントラクトから関数を呼び出すスマートコントラクトを構築することになります。 + +この場合、メインコントラクトはコアとなるビジネスロジックを持ちますが、他のスマートコントラクト(「サテライトコントラクト」) のインターフェースで、特定の機能を実行します。 このメインコントラクトには、各サテライトコントラクトのアドレスが格納されており、サテライトコントラクトの実装を切り替えることができます。 + +新しいサテライトコントラクトを構築して、メインコントラクトにその新しいコントラクトアドレスを設定することで、 スマートコントラクトの_ストラテジ_を変更(つまり、新しいロジックを実装)することができます。 + +先ほどのプロキシパターンと似ていますが、ストラテジパターンでは、ユーザーがやり取りするメインコントラクトがビジネスロジックを持っています。これは、プロキシパターンと異なる点です。 このパターンを使用すると、コアインフラストラクチャに影響を与えることなく、スマートコントラクトに限定的な変更を加えることができます。 + +このパターンの欠点は、マイナーアップグレードにしか対応できないことです。 また、メインコントラクトが(ハッキングなどにより)侵害された場合は、このアップグレード方法は使用できません。 + +### アップグレードメカニズム #5: ダイヤモンドパターン {#diamond-pattern} + +ダイヤモンドパターンは、プロキシパターンの改良版と言えます。 ダイヤモンドパターンでは、ダイヤモンドプロキシコントラクトが、関数呼び出しを複数のロジックコントラクトに委任できることができます。これは、プロキシパターンではできなかったことです。 + +ダイヤモンドパターンのロジックコントラクトを_ファセット_と呼びます。 ダイヤモンドパターンを機能させるには、各ファセットアドレスに[関数セレクタ](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector)をマップするマッピングを、プロキシコントラクト内に作成する必要があります。 + +ユーザーが関数を呼び出すと、プロキシコントラクトはマッピングをチェックして、その関数の実行を担当するファセットを見つけます。 次に、(フォールバック関数を使って)`delegatecall`を呼び出します。この呼び出しは、適切なロジックコントラクトにリダイレクトされます。 + +このダイヤモンドアップグレードパターンは、従来のプロキシアップグレードパターンに比べて、以下の利点があります。 + +1. コード全体を変更しなくとも、コントラクトの一部をアップグレード可能。 プロキシパターンを使ってアップグレードすると、マイナーアップグレードであっても、新しいロジックコントラクトを最初から作成しなければなりません。 + +2. すべてのスマートコントラクト(プロキシパターンで使用されるロジックコントラクトを含む)には、24KBのサイズ制限がある。この制限は、特に、多くの機能を必要とする複雑なコントラクトで適用されます。 ダイヤモンドパターンを使えば、関数を複数のロジックコントラクトに分割できるため、この問題を簡単に解決できます。 + +3. プロキシパターンは、アクセス制御に対して、一括管理するアプローチを採用。 アップグレード機能にアクセスできるエンティティは、 コントラクト_全体_を変更することができます。 一方、ダイヤモンドパターンを使用することで、モジュールごとにアクセス許可を設定することができます。これにより、エンティティがスマートコントラクト内の特定の機能をアップグレードすることを制限できます。 + +[ダイヤモンドパターンの詳細](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w) + +## スマートコントラクトのアップグレードにおけるメリットとデメリット {#pros-and-cons-of-upgrading-smart-contracts} | メリット | デメリット | | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md index b4167e42d27..7f52b265663 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md @@ -86,7 +86,7 @@ function deposit(uint256 assets, address receiver) public returns (uint256 share function maxMint(address receiver) public view returns (uint256) ``` -この関数は、`receiverによる1回のmint`の呼び出しにより、ミント可能なシェア数の上限を返します。 +この関数は、`receiver` による1回の [`mint`](#mint) の呼び出しにより、ミント可能なシェア数の上限を返します。 #### previewMint {#previewmint} diff --git a/public/content/translations/ja/developers/docs/transactions/index.md b/public/content/translations/ja/developers/docs/transactions/index.md index 7f1a9a9a89b..fa44d9e6c6b 100644 --- a/public/content/translations/ja/developers/docs/transactions/index.md +++ b/public/content/translations/ja/developers/docs/transactions/index.md @@ -99,7 +99,7 @@ Gethのようなイーサリアムクライアントは、この署名プロセ } ``` -- `raw`は、[再帰長プレフィックス(RLP)](/developers/docs/data- Structures-and-encoding/rlp)エンコード形式の署名されたトランザクション +- `raw`は、[再帰長プレフィックス(RLP)](/developers/docs/data-structures-and-encoding/rlp)エンコード形式の署名されたトランザクション - `tx`はJSON形式の署名されたトランザクション 署名ハッシュでトランザクションが送信者から送信され、ネットワークに送信されたことを暗号的に証明することができます。 @@ -176,7 +176,7 @@ Aliceのアカウントに **+1.0 ETH**振り込み ## 型付トランザクションエンベロープ(Typed Transaction Envelope) {#typed-transaction-envelope} -イーサリアムは当初、トランザクション形式は1つのみでした。 各トランザクションには、ノンス (nonce)、ガス代、ガスリミット、toアドレス、値、データ、v、r、sがあります。 これらのフィールドは、以下のように[RLPエンコード](/developers/docs/data- Structures-and-encoding/rlp/)されています。 +イーサリアムは当初、トランザクション形式は1つのみでした。 各トランザクションには、ノンス (nonce)、ガス代、ガスリミット、toアドレス、値、データ、v、r、sがあります。 これらのフィールドは、以下のように[RLPエンコード](/developers/docs/data-structures-and-encoding/rlp/)されています。 `RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` diff --git a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index f93d3c828d3..207fbdf1fcc 100644 --- a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -6,7 +6,7 @@ lang: ja tags: - "python" - "web3.py" -skill: 初級 +skill: beginner published: 2020-09-08 source: Snake charmers sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/ diff --git a/public/content/translations/ja/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/ja/developers/tutorials/all-you-can-cache/index.md deleted file mode 100644 index c02c1e1e0a1..00000000000 --- a/public/content/translations/ja/developers/tutorials/all-you-can-cache/index.md +++ /dev/null @@ -1,960 +0,0 @@ ---- -title: "キャッシュでできること" -description: ロールアップのトランザクションをより安くするキャッシュコントラクトの作成と使い方を学びます。 -author: Ori Pomerantz -tags: - - "レイヤー2" - - "キャッシュ" - - "ストレージ" -skill: 中級 -published: 2022-09-15 -lang: ja ---- - -ロールアップを使うと、トランザクションのバイトあたりのコストは、ストレージスロットのコストよりもはるかに高くなってしまいます。 そのため、オンチェーンに可能な限り多くの情報をキャッシュするほうが合理的です。 - -この記事では、複数回使用される可能性のあるパラメータの値をキャッシュして、(初回以降では) はるかに少ないバイト数で使えるようにするキャッシュコントラクトの作成および使用方法を学びます。 また、このキャッシュコントラクトを使用するチェーン上のコードを書く方法についても説明します。 - -記事を読まずにソースコードだけを確認したいならば、[こちら](https://github.com/qbzzt/20220915-all-you-can-cache)にあります。 開発スタックは、[Foundry](https://book.getfoundry.sh/getting-started/installation)を使っています。 - -## 設計の概要 {#overall-design} - -わかりやすくするために、すべてのトランザクションのパラメータは、`uint256`(32バイト長)であることとします。 トランザクションを受け取ると、次のように各パラメータをパースします。 - -1. 先頭のバイトが`0xFF`の場合、次の32バイトをパラメータの値として取得し、キャッシュに書き込む - -2. 先頭のバイトが`0xFE`の場合、次の32バイトをパラメータの値として取得するが、それをキャッシュに_書き込まない_。 - -3. その他の値の場合、上位4ビットを追加のバイト数として、下位4ビットをキャッシュキーの最上位ビットとして取得する。 以下に、いくつかの例を示します。 - - | calldataのバイト | キャッシュキー | - |:--------------- | --------:| - | 0x0F | 0x0F | - | 0x10,0x10 | 0x10 | - | 0x12,0xAC | 0x02AC | - | 0x2D,0xEA, 0xD6 | 0x0DEAD6 | - -## キャッシュ操作 {#cache-manipulation} - -[`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol)にキャッシュが実装されています。 一行ずつ見ていきましょう。 - -```solidity -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - - -contract Cache { - - bytes1 public constant INTO_CACHE = 0xFF; - bytes1 public constant DONT_CACHE = 0xFE; -``` - -上記の定数は、すべての情報を提供し、それをキャッシュに書き込むかどうかを判断するのに使います。 キャッシュに書き込むには、2回の[`SSTORE`](https://www.evm.codes/#55)操作が必要になり、未使用のストレージスロットに対し、それぞれ22100ガスのコストが発生するので選択できるようにしています。 - -```solidity - - mapping(uint => uint) public val2key; -``` - -値とそのキーの間で[マッピング](https://www.geeksforgeeks.org/solidity-mappings/)をしています。 この情報は、トランザクションを送信する前に、値をエンコードするのに必要になります。 - -```solidity - // Location n has the value for key n+1, because we need to preserve - // zero as "not in the cache". - uint[] public key2val; -``` - -キーから値へのマッピングに配列が使えます。なぜなら、キーを割り当て、それを簡単に順次実行するためです。 - -```solidity - function cacheRead(uint _key) public view returns (uint) { - require(_key <= key2val.length, "Reading uninitialize cache entry"); - return key2val[_key-1]; - } // cacheRead -``` - -キャッシュから値を読み込みます。 - -```solidity - // Write a value to the cache if it's not there already - // Only public to enable the test to work - function cacheWrite(uint _value) public returns (uint) { - // If the value is already in the cache, return the current key - if (val2key[_value] != 0) { - return val2key[_value]; - } -``` - -同じ値をキャッシュに複数回入れるのは、無駄です。 値がすでに存在するならば、既存のキーを返します。 - -```solidity - // Since 0xFE is a special case, the largest key the cache can - // hold is 0x0D followed by 15 0xFF's. If the cache length is already that - // large, fail. - // 1 2 3 4 5 6 7 8 9 A B C D E F - require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, - "cache overflow"); -``` - -これほどまでの大きなキャッシュを取得することは考えられません (約1.8\*1037のエントリーを保存するには約 1027TBが必要になります) 。 私はというと、[「常に640kBあれば十分だ」](https://quoteinvestigator.com/2011/09/08/640k-enough/)ということを覚えているくらいの年齢です。 このテストは安くできます。 - -```solidity - // Write the value using the next key - val2key[_value] = key2val.length+1; -``` - -(値からキーへ) 逆引できる検索を加えています。 - -```solidity - key2val.push(_value); -``` - -前方検索 (キーから値へ) を追加します。 連続して値を指定するため、最後の配列にある値の後に追加するだけです。 - -```solidity - return key2val.length; - } // cacheWrite -``` - -新しい値が格納されるセルである`key2val`の新しい長さを返します。 - -```solidity - function _calldataVal(uint startByte, uint length) - private pure returns (uint) -``` - -この関数は、任意の長さcalldata (ワードサイズは最大32バイト) から値を読み取ります。 - -```solidity - { - uint _retVal; - - require(length < 0x21, - "_calldataVal length limit is 32 bytes"); - require(length + startByte <= msg.data.length, - "_calldataVal trying to read beyond calldatasize"); -``` - -この関数は内部関数です。そのため、コードの残りの部分が正しく記述されていれば、これらのテストは必要ありません。 しかし、そんなにコストは掛からないため、テストをしてもよいかもしれません。 - -```solidity - assembly { - _retVal := calldataload(startByte) - } -``` - -これは、[Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html)のコードです。 calldataから32バイトの値を読み取ります。 `startByte+32`より前にcalldataが停止した場合でも、EVM内で初期化されていない領域はゼロと見なされるため、機能します。 - -```solidity - _retVal = _retVal >> (256-length*8); -``` - -私たちは、必ずしも32バイトの値が欲しいわけではありません。 これで、余分なバイトを削除できます。 - -```solidity - return _retVal; - } // _calldataVal - - - // Read a single parameter from the calldata, starting at _fromByte - function _readParam(uint _fromByte) internal - returns (uint _nextByte, uint _parameterValue) - { -``` - -calldataからパラメータを1つ読み取ります。 パラメータの長さは、1バイトから33バイトまでの範囲です。そのため、読み取った値だけでなく、次のバイトの位置も返す必要があることに注意してください。 - -```solidity - // The first byte tells us how to interpret the rest - uint8 _firstByte; - - _firstByte = uint8(_calldataVal(_fromByte, 1)); -``` - -Solidityでは、バグを減らすために潜在的に危険な[暗黙の型変換](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions)を禁止しています。 例えば、256ビットから8ビットへのダウングレードを明示的に行う必要があります。 - -```solidity - - // Read the value, but do not write it to the cache - if (_firstByte == uint8(DONT_CACHE)) - return(_fromByte+33, _calldataVal(_fromByte+1, 32)); - - // Read the value, and write it to the cache - if (_firstByte == uint8(INTO_CACHE)) { - uint _param = _calldataVal(_fromByte+1, 32); - cacheWrite(_param); - return(_fromByte+33, _param); - } - - // If we got here it means that we need to read from the cache - - // Number of extra bytes to read - uint8 _extraBytes = _firstByte / 16; -``` - -下位にある[ニブル](https://en.wikipedia.org/wiki/Nibble)を取得し、他のバイトと組み合わせてキャッシュから値を読み取ります。 - -```solidity - uint _key = (uint256(_firstByte & 0x0F) << (8*_extraBytes)) + - _calldataVal(_fromByte+1, _extraBytes); - - return (_fromByte+_extraBytes+1, cacheRead(_key)); - - } // _readParam - - - // Read n parameters (functions know how many parameters they expect) - function _readParams(uint _paramNum) internal returns (uint[] memory) { -``` - -パラメータの数は、calldata自体から取得できますが、私たちが呼び出す関数は、予期しているパラメータの数を知っています。 これは、関数を使って簡単に取得できます。 - -```solidity - // The parameters we read - uint[] memory params = new uint[](_paramNum); - - // Parameters start at byte 4, before that it's the function signature - uint _atByte = 4; - - for(uint i=0; i<_paramNum; i++) { - (_atByte, params[i]) = _readParam(_atByte); - } -``` - -必要な数のパラメータを読み込みます。 calldataの読み込みが終わると、`_readParams`は、呼び出しを戻します。 - -```solidity - - return(params); - } // readParams - - // For testing _readParams, test reading four parameters - function fourParam() public - returns (uint256,uint256,uint256,uint256) - { - uint[] memory params; - params = _readParams(4); - return (params[0], params[1], params[2], params[3]); - } // fourParam -``` - -Foundryの素晴らしい機能の一つは、Solidityでテストを作成できることです([後述するキャッシュのテストを参照](#testing-the-cache))。 そのため、単体テストが簡単に作成できます。 これは、4つのパラメータを読み取り、それらが正しいことをテストで検証できるように返す関数です。 - -```solidity - // Get a value, return bytes that will encode it (using the cache if possible) - function encodeVal(uint _val) public view returns(bytes memory) { -``` - -`encodeVal`は、オフチェーンコードがキャッシュを使用するcalldataを作るのを支援する関数です。 単一の値を受け取り、その値をエンコードしたバイト値で返します。 この関数は、`view`なのでトランザクションは必要なく、外部からの呼び出しにガス代はかかりません。 - -```solidity - uint _key = val2key[_val]; - - // The value isn't in the cache yet, add it - if (_key == 0) - return bytes.concat(INTO_CACHE, bytes32(_val)); -``` - -[EVM](/developers/docs/evm/)では、初期化されていないすべてのストレージはゼロであるとみなされます。 そのため、存在しない値のキーを検索すると、ゼロを受け取ります。 このケースにおいて、それをエンコードするバイトは `INTO_CACHE`であり、その後に実際の値が続きます (つまり次回は、キャッシュが使われます) 。 - -```solidity - // If the key is <0x10, return it as a single byte - if (_key < 0x10) - return bytes.concat(bytes1(uint8(_key))); -``` - -単一のバイトが一番簡単です。 [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat)のみを使って、`bytesIVEU$bXk?qn|M<8u0})`AU dW`vv|oj zyOc1R1E7hiwKjX1i%mM+_UKd! 6rDhr>c3B!W1Fxu3q X7jG z_9ItmYh79|$(M=|DvyNI4(C6AJ-<(>-Jx4e4`kE!lRwY3SQ(tXRd6q %QI21I2>NiBm5>QDChyFL@N^sg zS8+#o)OHXqE{=zdI}V0#-1MPWhLzN2f~?gLiGNt2#xj*nH# za>^>*OLsXx{sT43o*_LK Few8J1IV!96956DB=aX5cvMl?Lwj zLzmtUQoNarjR$urW=n@tQq#e%2X)4ec(wD3??;4A5GQ2VP^<@vE*Qv5#SUN4vm^PclBUGVzsv?&8%pvH z=wTO&(Jn%NY7)8}A0JgS-eP>2-9jgHAJet6;nw$Nvyq$29aiJHE#`B;9g&kz4$YUj z=Nq+SYJOQjicV_3hyEcVaxyHhv-EwK)yEN#WO6j+YJPygqf_R7cWkLKlhI@mFNGq8 zPU`MmETu4534f>uruxE(1Flh(s?UbT=tLd1ex2T|l1unA5c+HDXa9KyKl?pF0Q~PH z4m*BH+(ifcbfb jv(A>~V;xfCw ZJ zNf`+PsBFkd4LC`;6*Kh-MKNHZeUU?bQQ?RF2^k^d4Y~>)9v5hrz%_%43m8pEl1~iO zf MGlRCFa<`LcMWI1@9o#u(JANfmhm!kB(*XW&6R^mdA}8Q8vBI4 zFZ^m&(!c=-G3|d!sUBA6HA0SkDqG`5cJ;Jmu~>(&X4VQVM6(up%B`-8H#L-Jk56w1 zGKNt@P*!P`nT`}-qNAxe`86p8**W=Ib%o*qM9O?l#M5vRgq;o_=~DB$tj2iCNq8{h z-O9T3Wxd^|#T{( Z#@tkV zwg{Z`nwoBzrjhYdLoww`M{Rk(q{pi%po0wxL&*fc#V1tUHe;&=fI^`Bp!fm3a(+~m zTvHcZ qeFoQf>kITF^cu-(gR-7vGfpV zh1P=;M%zDZl!BVO$)A+DR*qTu#i>~#v>@5CBUG=SgP*Y}D{Qg9tNd;+j5NVypB+_Y zW}bs&F5A{~#>oqq@N78S;9@@kwNU&8sv{&7P0=>ASQgD)8Y0&0d_j)>OMUSQl4K&Y zt8Zia@8%cYBP7Tq4=`{NUsAY3S|b9U1RQ-UI6lu3wB)b$hc5?uuwNY $h@-Tv<9c)tC5E);l)^(&%BB%}u;Atk(#5`U%QGXP9aSp6SA Co4>UH literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/enterprise/index.md b/public/content/translations/ja/enterprise/index.md index 7971163d401..4911344d18d 100644 --- a/public/content/translations/ja/enterprise/index.md +++ b/public/content/translations/ja/enterprise/index.md @@ -4,9 +4,9 @@ description: パブリックなイーサリアムブロックチェーン上の lang: ja --- -# エンタープライズ向けイーサリアムメインネット {#ethereum-for-enterprise} +# 企業向けイーサリアム {#ethereum-for-enterprise} -ブロックチェーンアプリケーションはビジネスに役立ちます。 +大企業を含むさまざまな種類のビジネスでイーサリアムを役立てることができます。 - 信頼性を高め、ビジネス当事者間の連携コストを削減 - ビジネスネットワークの説明責任と運用効率を向上 @@ -17,123 +17,134 @@ lang: ja ## パブリックとプライベードのイーサリアムの比較 {#private-vs-public} -パブリック型イーサリアムメインネットは 1 つしかありません。 メインネット上に構築されているアプリケーションは相互運用が可能です。インターネット上で構築されたアプリケーションと同様に、分散型ブロックチェーンの可能性を最大限に活用して相互に接続することができます。 +パブリック型イーサリアムメインネットは1つしかありません。 メインネット上に構築されているアプリケーションは相互運用が可能です。インターネット上で構築されたアプリケーションと同様に、分散型ブロックチェーンの可能性を最大限に活用して相互に接続することができます。 -多くの企業やコンソーシアムは、イーサリアムテクノロジーに基づく特定のアプリケーションに対して、プライベートで許可型のブロックチェーンを展開しています。 +多くの企業やコンソーシアムは、特定のアプリケーション向けに、イーサリアム技術に基づくプライベートなパーミッションド・ブロックチェーンをデプロイしています。 ### 主な相違点 {#key-differences} -- ブロックチェーンのセキュリティ/不変性。改ざんに対するブロックチェーンの耐性は、そのコンセンサスアルゴリズムによって決定されます。 イーサリアムメインネットは、世界中の個人とマイナーによって運営される何千もの独立したノードの相互作用によって保護されています。 プライベートチェーンには、通常、1 つまたは複数の組織によって制御される少数のノードがあります。それらのノードは厳重に制御できますが、ノードが数個侵害されるだけでチェーンを書き換えたり不正取引を行うことができます。 -- パフォーマンス - プライベートエンタープライズイーサリアムチェーンでは、特別なハードウェア要件と権限証明などの異なるコンセンサスアルゴリズムを備えた高性能ノードを使用する可能性があるため。 ベースレイヤー(Layer1)でより高いトランザクションスループットを達成する場合があります。 イーサリアムメインネットでは、拡張レイヤーである[レイヤー 2](/developers/docs/scaling/#layer-2-scaling)を使用することで、高いスループットを実現できます。 -- コスト - プライベートチェーンを運営するためのコストは主に、チェーンを設定し管理する労力と、それを実行するためのサーバに織り込まれています。 イーサリアムメインネットに接続するためのコストはかかりませんが、各トランザクションにかかるガス料金は Ether で支払う必要があります。 エンドユーザーや企業がトランザクションに Ether を直接使用しなくてもいいように、トランザクションリレイヤー(別名ガスステーション)が開発されています。 ある[分析](https://github.com/EYBlockchain/fundamental-cost-of-ownership/blob/master/EY%20Total%20Cost%20of%20Ownership%20for%20Blockchain%20Solutions.pdf)によると、メインネット上でアプリケーションを運用するための総コストは、プライベートチェーンを実行するコストを下回る可能性があることを示しています。 +- ブロックチェーンのセキュリティ/不変性。改ざんに対するブロックチェーンの耐性は、そのコンセンサスアルゴリズムによって決定されます。 イーサリアムメインネットは、世界中の個人とマイナーによって運営される何千もの独立したノードの相互作用によって保護されています。 プライベートチェーンには、通常、1つまたは複数の組織によって制御される少数のノードがあります。それらのノードは厳重に制御できますが、ノードが数個侵害されるだけでチェーンを書き換えたり不正取引を行うことができます。 +- パフォーマンス - プライベートエンタープライズイーサリアムチェーンでは、特別なハードウェア要件と権限証明などの異なるコンセンサスアルゴリズムを備えた高性能ノードを使用する可能性があるため。 ベースレイヤー(Layer1)でより高いトランザクションスループットを達成する場合があります。 イーサリアムメインネットでは、拡張レイヤーである[レイヤー2](/layer-2)を使用することで、高いスループットを実現できます。 +- コスト - プライベートチェーンを運営するためのコストは、チェーンを設定し、管理するための労働とそれを実行するためのサーバに主に反映されます。 イーサリアムメインネットに接続するためのコストはかかりませんが、各トランザクションにかかるガス料金はイーサで支払う必要があります。 メタトランザクションリレーヤーでは、エンドユーザーだけでなく企業もトランザクションでイーサを直接保持して使用する必要が無くなります。 [ある分析](https://theblockchaintest.com/uploads/resources/EY%20-%20Total%20cost%20of%20ownership%20for%20blockchain%20solutions%20-%202019%20-%20Apr.pdf)では、アプリケーションを運用するための総コストは、プライベート チェーンを実行するよりもメインネットの方が低くなる可能性があることを示しています。 - ノードの権限 - 承認されたノードのみがプライベートチェーンに参加できます。 誰でもイーサリアムメインネット上でノードを設定できます。 -- プライバシー - プライベートチェーンに書き込まれたデータへのアクセスは、アクセス制御とプライベートトランザクションを使用したより詳細なベースで、ネットワークへのアクセスを制限することで制御できます。 メインネットレイヤー 1 に書き込まれたすべてのデータは誰でも閲覧可能であるため、機密情報はオフチェーンで保存、送信されるか、または暗号化される必要があります。 レイヤー 1 のデータを区切ったりオフにした状態に維持できるレイヤー 2 ソリューションに加えて、これを容易にするデザインパターンが出現しています(たとえば、 ベースライン、Aztec)。 +- プライバシー - プライベートチェーンに書き込まれたデータへのアクセスは、アクセス制御とプライベートトランザクションを使用したより詳細なベースで、ネットワークへのアクセスを制限することで制御できます。 メインネットレイヤー1に書き込まれたすべてのデータは誰でも閲覧可能であるため、機密情報はオフチェーンで保存、送信されるか、または暗号化される必要があります。 レイヤー1のデータを区切ったりオフにした状態に維持できるレイヤー2ソリューションに加えて、これを容易にするデザインパターンが出現しています(たとえば、 ベースライン、Nightfall)。 ### イーサリアムメインネット上に構築する理由 {#why-build-on-ethereum-mainnet} -Hyperledger、Quorum、Corda プロジェクトが開始された 2016 年頃から、企業はブロックチェーン技術の実験を行っています。 主に民間の許可を受けたエンタープライズ向けブロックチェーンに重点を置いていましたが、2019 年から、ビジネスアプリケーション向けのパブリックブロックチェーンとプライベートブロックチェーンという考え方に移行していきました。 Forrester が実施した[調査](https://assets.ey.com/content/dam/ey-sites/ey-com/en_gl/topics/blockchain/ey-public-blockchain-opportunity-snapshot.pdf)では、「調査回答者は... この可能性を見出しています。75%が将来的にパブリックブロックチェーンを活用する可能性があると述べており、3 分の 1 弱が非常に可能性が高いと答えている」ことが明らかになっています。 EY の Paul Brody は[パブリックブロックチェーンを構築することの利点について](https://www.youtube.com/watch?v=-ycu5vGDdZw&feature=youtu.be&t=3668)話しており、パブリックブロックチェーンには、(アプリケーションに応じて)より強力なセキュリティ/不変性、 透明性、総所有コストの削減、およびメインネット上にある他のすべてのアプリケーションと相互運用する機能(ネットワーク効果)が含まれる可能性があると述べています。 企業間で共通の枠組みを共有することで、情報を交換、共有、同期できない多数の孤立した無駄なサイロ構造を回避することができます。 +ビジネスにとって、パブリックブロックチェーンの主な利点としては、独占に抵抗できることです。 ビジネスでの取引を調整するための中立的な仲裁者としてイーサリアムメインネットを使うことで、競合他社が支配権や影響力を駆使して不利な立場に置いてくるような別の会社を信頼することを回避できます。 誰もが参加、使用、貢献できる、オープンでパーミッションレスの分散型プラットフォームにおいて、権力を利用してユーザーに対して優位に立つような中央権力は存在しません。 -パブリックブロックチェーンに焦点を移しているもう一つの開発は、 [レイヤー 2](/developers/docs/scaling/#layer-2-scaling)です。 レイヤー 2 は主にスケーラビリティ技術のカテゴリーであり、パブリックチェーン上でハイスループットアプリケーションを実現するものですが、 レイヤー 2 ソリューションは、 [過去にエンタープライズ向けデベロッパーがプライベートチェーンを選択するようになるきっかけとなったその他の課題に対処することもできます](https://entethalliance.org/how-ethereum-layer-2-scaling-solutions-address-barriers-to-enterprises-building-on-mainnet/)。 +Hyperledger、Quorum、Cordaプロジェクトが開始された2016年頃から、企業はブロックチェーン技術の実験を行っています。 当初は、主にプライベート・パーミッションド・エンタープライズ・ブロックチェーンに重点を置いていましたが、2019年から、ビジネスアプリケーション向けのパブリックブロックチェーンとプライベートブロックチェーンという考え方に移行していきました。 EYのPaul Brodyは[(プライベートに対して)パブリックブロックチェーンを構築することの利点について](https://www.youtube.com/watch?v=-ycu5vGDdZw&feature=youtu.be&t=3668)話しており、パブリックブロックチェーンには、(アプリケーションに応じて)より強力なセキュリティ/不変性、 透明性、総所有コストの削減、およびメインネット上にある他のすべてのアプリケーションと相互運用する機能(ネットワーク効果)が含まれる可能性があると述べています。 企業間で共通の枠組みを共有することで、情報を交換、共有、同期できない多数の孤立した無駄なサイロ構造を回避することができます。 -## エンタープライズ向けデベロッパーリソースについて {#enterprise-developer-resources} +パブリックブロックチェーンに焦点を移しているもう一つの開発は、 [レイヤー2](/layer-2)です。 レイヤー2は主にスケーラビリティ技術のカテゴリーであり、パブリックチェーン上でハイスループットアプリケーションを実現するものですが、 レイヤー2ソリューションは、 [過去にエンタープライズ向けデベロッパーがプライベートチェーンを選択するようになるきっかけとなったその他の課題に対処することもできます](https://entethalliance.org/how-ethereum-layer-2-scaling-solutions-address-barriers-to-enterprises-building-on-mainnet/)。 + +## リソース {#enterprise-resources} + +### 参考文献 {#further-reading} + +ビジネスにおいてイーサリアムからどのようなメリットを得ているか理解するための非技術的なリソース + +- [エンタープライズ・イーサリアム・アライアンス2023ビジネス準備状況レポート](https://entethalliance.org/eea-ethereum-business-readiness-report-2023/) - _パブリックイーサリアムとビジネス向けのより広範なイーサリアムエコシステムの可能性と機能の調査_ +- [_ビジネス向けのイーサリアム_ Paul Brody著](https://www.uapress.com/product/ethereum-for-business/) - _資産管理からサプライチェーンへの支払いにおいて収益を生み出すユースケースがわかりやすい英語で書かれているガイド_ ### 組織 {#organizations} イーサリアムを企業にとって身近な存在にするために、さまざまな組織が次のような協力的な取り組みを行っています。 -- [エンタープライズ・イーサリアム・アライアンス (EEA)](https://entethalliance.org/) EEA により、組織は日常業務にイーサリアムテクノロジーを導入、使用することができます。 イーサリアムのエコシステムを強化し、新しいビジネスチャンスを開発し、業界の採用を促進し、互いに学び、協力します。 EEA のメインネットワーキンググループは、パブリックなイーサリアムメインネットを構築することに興味を持っている企業や、彼らをサポートするイーサリアムコミュニティメンバーの集まりです。 -- [イーサリアム・オアシス・オープン・プロジェクト](https://github.com/ethereum-oasis/oasis-open-project) イーサリアム・オアシス・オープン・プロジェクトは、多様なステークホルダーに中立的なフォーラムを提供し、イーサリアムの長期的な安定性、相互運用性、統合の容易性を促進する高品質の仕様を実現できるオアシス・オープン・プロジェクトです。 このプロジェクトでは、イーサリアムプロトコルの新機能と拡張を容易にする明確なオープン標準、高品質なドキュメント、共有テストスイートを開発を予定しています。 -- [ベースラインプロジェクト(Baseline Project)](https://www.baseline-protocol.org/) ペースラインプロトコルは、暗号技術、メッセージング、ブロックチェーンの利点を組み合わせて、パブリックなイーサリアムメインネットを介して安全かつプライベートなビジネスプロセスを低コストで提供するオープンソースのイニシアチブです。 このプロトコルにより、機密データをオンチェーンに残すことなく、企業間の機密かつ複雑なコラボレーションが可能になります。 ベースラインプロジェクトは、イーサリアム・オアシス・オープン・プロジェクトのサブプロジェクトであり、ベースライン技術運営委員会によって調整されています。 +- [エンタープライズ・イーサリアム・アライアンス (EEA)](https://entethalliance.org/) EEAは、組織に対して日常業務にイーサリアムテクノロジーを導入、使用することを支援します。 組織の目標としては、専門的および商業的なサポート、提唱および研究、標準の開発およびエコシステムトラストサービスを通じてビジネスにおけるイーサリアムを促進することです。 +- [グローバル・ブロックチェーン・ビジネス評議会 (GBBC) ](https://www.gbbc.io/) - GBBCは、ブロックチェーン・テクノロジー・エコシステムの業界団体です。 政策立案者や規制当局との調整、イベントの開催および深い議論、研究の推進を通して、GBBCは、より安全で公平で機能的な社会を構築するためのブロックチェーンのさらなる導入に専念しています。 + + +## エンタープライズ向けデベロッパーリソースについて {#enterprise-developer-resources} ### プロダクトとサービス {#products-and-services} -- [Alchemy](https://www.alchemy.com/)_ イーサリアムでアプリケーションを作成、監視するための API サービスとツールを提供_0> -- [Blast](https://blastapi.io/) _イーサリアムアーカイブのメインネットおよびテストネットの RPC/WSS API を提供する API プラットフォーム_ -- [Blockapps](https://blockapps.net/) _STRATO プラットフォームを構成するエンタープライズイーサリアムプロトコル、ツール、API の実装_ -- [Chainstack](https://chainstack.com/) _メインネットおよびテストネットのイーサリアムインフラストラクチャをパブリックおよび隔離されたカスタマークラウドでホスト_ -- [ConsenSys](https://consensys.io/) _イーサリアム上で構築するためのさまざまなプロダクトとツール、ならびにコンサルティングとカスタム開発サービスを提供_ -- [Envision Blockchain](https://envisionblockchain.com/) _イーサリアムメインネットに特化したエンタープライズ向けコンサルティングおよび開発サービスを提供_ -- [EY OpsChain](https://blockchain.ey.com/products/contract-manager) _ 信頼できるビジネスパートナーのネットワーク全体で、RFQ、コントラクト、発注書、請求書を発行することにより、調達ワークフローを提供_ -- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _Java で書かれた Apache 2.0 ライセンスに基づくオープンソースのエンタープライズ向けイーサリアムクライアント_ -- [Infura](https://infura.io/) _イーサリアムおよび IPFS ネットワークへのスケーラブルな API アクセス_ -- [Kaleido](https://kaleido.io/) _簡素化されたブロックチェーンとデジタル資産アプリケーションを提供するエンタープライズ向け開発プラットフォーム_ -- [エンタープライズ向け Web3 アプリケーションに](https://provide.services/)_インフラストラクチャと API を提供_ -- [QuickNode](https://www.quicknode.com/) _統合されたプロダクトスイートとエンタープライズ級のソリューションを提供しながら、NFT API、トークン API などの高レベル API を備えた信頼性の高い高速ノードを提供_ -- [Tenderly](https://tenderly.co) - _スマートコントラクトの開発、テスト、監視、運用のためのデバッグ、オブザーバビリティ、インフラストラクチャビルディングブロックを提供する Web3 開発プラットフォーム_ -- [Unibright](https://unibright.io/) _ビジネスプロセスと統合の分野で 20 年以上の経験を持つブロックチェーン専門家、建築家、デベロッパー、コンサルタントのチーム_ -- [Zero Services GmbH](https://www.zeroservices.eu/) _ヨーロッパとアジアのコロケーションにまたがるマネージドサービスのプロバイダー ノードを安全かつ確実に運用、監視_ +- [4EVERLAND](https://www.4everland.org/) - _分散型アプリケーションをホストするためのAPI、RPCサービス、ツールを提供し、イーサリアム上で分散型ストレージを実現_ +- [Alchemy](https://www.alchemy.com/) - _ イーサリアムでアプリケーションを作成、監視するためのAPIサービスとツールを提供_ +- [Blast](https://blastapi.io/) - _イーサリアムアーカイブのメインネットおよびテストネットのRPC/WSS APIを提供するAPIプラットフォーム_ +- [Blockapps](https://blockapps.net/) - _STRATOプラットフォームを構成するエンタープライズイーサリアムプロトコル、ツール、APIの実装_ +- [Chainstack](https://chainstack.com/) - _メインネットおよびテストネットのイーサリアムインフラストラクチャをパブリックおよび隔離されたカスタマークラウドでホスト_ +- [ConsenSys](https://consensys.io/) - _イーサリアム上で構築するためのさまざまなプロダクトとツール、ならびにコンサルティングとカスタム開発サービスを提供_ +- [Envision Blockchain](https://envisionblockchain.com/) - _イーサリアムメインネットに特化したエンタープライズ向けコンサルティングおよび開発サービスを提供_ +- [EY OpsChain](https://blockchain.ey.com/products/contract-manager) - _ 信頼できるビジネスパートナーのネットワーク全体で、RFQ、コントラクト、発注書、請求書を発行することにより、調達ワークフローを提供_ +- [Hyperledger Besu](https://www.hyperledger.org/use/besu) - _Javaで書かれたApache 2.0ライセンスに基づくオープンソースのエンタープライズ向けイーサリアムクライアント_ +- [Infura](https://infura.io/) - _イーサリアムおよびIPFSネットワークへのスケーラブルなAPIアクセス_ +- [Kaleido](https://kaleido.io/) - _簡素化されたブロックチェーンとデジタル資産アプリケーションを提供するエンタープライズ向け開発プラットフォーム_ +- [NodeReal](https://nodereal.io/) - _Web3エコシステムにスケーラブルなブロックチェーンインフラストラクチャとAPIサービス プロバイダーを提供_ +- [Provide](https://provide.services/) - _企業向けゼロ知識ミドルウェア_ +- [QuickNode](https://www.quicknode.com/) - _統合されたプロダクトスイートとエンタープライズ級のソリューションを提供しながら、NFT API、トークンAPIなどの高レベルAPIを備えた信頼性の高い高速ノードを提供_ +- [Tenderly](https://tenderly.co) - _スマートコントラクトの開発、テスト、監視、運用のためのデバッグ、オブザーバビリティ、インフラストラクチャビルディングブロックを提供するWeb3開発プラットフォーム_ +- [Unibright](https://unibright.io/) - _ビジネスプロセスと統合の分野で20年以上の経験を持つブロックチェーン専門家、建築家、デベロッパー、コンサルタントのチーム_ +- [Zeeve](https://www.zeeve.io/) - _イーサリアムに構築するための幅広いプロダクトとツール、エンタープライズWeb3アプリケーションのためのインフラストラクチャおよびAPIも提供_ ### ツールとライブラリ {#tooling-and-libraries} -- [Alethio](https://explorer.aleth.io/) _イーサリアムデータ分析プラットフォーム_ -- [Chainlens](https://www.chainlens.com/) _Web3 Labs によるパブリックとプライベートイーサリアム互換ネットワークのためのデータおよび分析プラットフォーム_ -- [Ernst & Young's ‘Nightfall’](https://github.com/EYBlockchain/nightfall) _プライベートトランザクション用のツールキット_ -- [EthSigner](https://github.com/ConsenSys/ethsigner) _Web3 プロバイダーで使用するトランザクション署名のアプリケーション_ -- [Tenderly](https://tenderly.co/) _プライベートネットワークをサポートするリアルタイムの分析、アラート、モニタリングを提供するデータプラットフォーム。_ -- [Truffle Suite](https://trufflesuite.com) _ブロックチェーン開発スイート (Truffle, Ganache, Drizzle)_ +- [ベースラインプロジェクト](https://www.baseline-protocol.org/) - _ベースラインプロトコルはツールとライブラリのセットで、企業が各システムのデータを維持しつつ、プライバシーを守って複雑でマルチパーティのビジネスプロセスおよびワークフローを調整することを支援。 この標準により、ネットワークを共通の参照フレームとして使うことで、2つ以上の状態マシンがデータの一貫性とワークフローの継続性を実現し、維持することが可能_ +- [Chainlens](https://www.chainlens.com/) - _Web3 LabsのSaaSおよびオンプレミスのブロックチェーンデータおよび分析プラットフォーム_ +- [アーンスト・アンド・ヤング「Nightfall」](https://github.com/EYBlockchain/nightfall_3) - _オプティミスティック・ロールアップを使って、ERC20、ERC721、ERC1155アプリケーションをゼロ知識で転送するためのアプリケーション_ +- [Truffle Suite](https://trufflesuite.com) - _ブロックチェーン開発スイート (Truffle、Ganache、Drizzle)_ ### スケーラビリティソリューション {#scalability-solutions} -[レイヤー 2](/layer-2)はイーサリアム(レイヤー 1)上で実行される一連の技術またはシステムであり、レイヤー 1 のセキュリティプロパティを継承して、トランザクション処理能力(スループット)、トランザクション手数料(運用コスト)、レイヤー 1 よりも高速なトランザクション確認機能を提供します。 レイヤー 2 のスケーリングソリューションはレイヤー 1 によって保護されていますが、このソリューションにより、レイヤー 1 では対応できなかった多数のユーザーやアクション、データをブロックチェーンアプリケーションが処理できるようになります。 その多くは、パフォーマンスとセキュリティを最大化するために、最新の暗号技術とゼロ知識(ZK)証明の進歩を活用しています。 +[レイヤー2](/layer-2)はイーサリアム(レイヤー1)上で実行される一連の技術またはシステムであり、レイヤー1のセキュリティプロパティを継承して、レイヤー1よりも優れたトランザクション処理能力(スループット)、安価なトランザクション手数料(運用コスト)、高速なトランザクション確認機能を提供します。 レイヤー2のスケーリングソリューションはレイヤー1によって保護されていますが、このソリューションにより、レイヤー1では対応できなかった多数のユーザーやアクション、データをブロックチェーンアプリケーションが処理できるようになります。 その多くは、パフォーマンスとセキュリティを最大化するために、最新の暗号技術とゼロ知識(ZK)証明の進歩を活用しています。 -レイヤー 2 のスケーラビリティソリューションの上にアプリケーションを構築することで、 [企業が過去にプライベートブロックチェーン上に構築するようになった理由でもある多数の懸念事項を解決し、](https://entethalliance.org/how-ethereum-layer-2-scaling-solutions-address-barriers-to-enterprises-building-on-mainnet/)メインネット上に構築する利点を維持することができます。 +レイヤー2のスケーラビリティソリューションの上にアプリケーションを構築することで、 [企業が過去にプライベートブロックチェーン上に構築するようになった理由でもある多数の懸念事項を解決し、](https://entethalliance.org/how-ethereum-layer-2-scaling-solutions-address-barriers-to-enterprises-building-on-mainnet/)メインネット上に構築する利点を維持することができます。 ## メインネットで稼働しているエンタープライズアプリケーション {#enterprise-live-on-mainnet} -パブリックなイーサリアムメインネット上にデプロイされたエンタープライズアプリケーションをいくつかご紹介します。 +パブリックなイーサリアムメインネット上にデプロイされたエンタープライズアプリケーションをいくつか紹介します。 -### 決済 {#payments} +### お支払い {#payments} -- [Brave Browser](https://basicattentiontoken.org/) _ 広告へのアテンションに対してユーザーに報酬を支払い、ユーザーはベーシックアテンショントークンを介してパブリッシャーを支援することが可能_ -- [hCaptcha](https://www.hcaptcha.com/) _機械学習の目的でデータにラベルを付けるためにユーザーが行った作業に対してウェブサイト運営者に支払うボット防止 CAPTCHA システム。 現在は Cloudflare によってデプロイ_ -- [EthereumAds](https://ethereumads.com/) _ウェブサイト運営者が広告スペースを販売し、イーサリアム経由で支払いを受ける_ +- [Brave Browser](https://basicattentiontoken.org/) _は、広告を表示したユーザーに報酬を支払い、ユーザーはBasic Attentionトークンを介してパブリッシャーを支援することが可能_ +- [hCaptcha](https://www.hcaptcha.com/) _機械学習の目的でデータにラベルを付けるためにユーザーが行った作業に対して、ウェブサイト運営者に支払うボット防止CAPTCHAシステム。 現在はCloudflareによってデプロイ_ +- [EthereumAds](https://ethereumads.com/) _ウェブサイト運営者が広告スペースを販売し、イーサリアム経由で支払いを受けることが可能_ ### ファイナンス {#finance} -- [サンタンデール銀行](https://www.coindesk.com/santander-settles-both-sides-of-a-20-million-bond-trade-on-ethereum) _債券発行と決済_ -- [ソシエテ・ジェネラル](https://www.generali-investments.com/it/en/institutional/article/generali-investments-and-generali-iard-carry-out-first-market-transaction-based-on-blockchain-infrastructure) _債券発行_ -- [ケイデンス](https://www.forbes.com/sites/benjaminpirus/2019/10/09/fatburger-and-others-feed-30-million-into-ethereum-for-new-bond-offering/#513870be115b) _FAT ブランドの債券発行とトークン化_ -- [Sila](https://silamoney.com/) _ステーブルコインを使用したバンキングおよび ACH ペイメントの IaaS(インフラストラクチャ・アズ・ア・サービス) _ +- [Santander Bank](https://www.coindesk.com/santander-settles-both-sides-of-a-20-million-bond-trade-on-ethereum) _債券の発行と決済_ +- [Societe Generale](https://www.generali-investments.com/it/en/institutional/article/generali-investments-and-generali-iard-carry-out-first-market-transaction-based-on-blockchain-infrastructure) _債券の発行_ +- [Cadence](https://www.forbes.com/sites/benjaminpirus/2019/10/09/fatburger-and-others-feed-30-million-into-ethereum-for-new-bond-offering/#513870be115b) _FATブランドの債券発行とトークン化_ +- [Sila](https://silamoney.com/) _ステーブルコインを使用したバンキングおよびACHペイメントのIaaS(インフラストラクチャ・アズ・ア・サービス) _ - [Taurus](https://www.taurushq.com/) _トークン化された証券の発行_ ### 資産トークン化 {#tokenization} -- [Tinlake](https://tinlake.centrifuge.io/) *請求書、住宅ローン、ストリーミングロイヤリティ*などのトークン化された現実世界の資産を通じた債権ファイナンス -- [RealT](https://realt.co/) _世界中の投資家は、完全に準拠した分割かつトークン化された所有権を通じて、米国の不動産市場に参入可能_ +- [Tinlake](https://tinlake.centrifuge.io/) _請求書、住宅ローン、ストリーミングロイヤリティ_などのトークン化された現実世界の資産を通じた債権ファイナンス +- [RealT](https://realt.co/) _世界中の投資家は、法規制に完全に準拠した部分的なトークン化された所有権を通じて、米国の不動産市場に参入可能_ - [AgroToken](https://agrotoken.io/en/home) _農産物のトークン化と取引_ - [Fasset](https://www.fasset.com/) _持続可能なインフラをサポートするためのプラットフォーム_ ### データの公証化 {#notarization-of-data} -- [BBVA](https://www.ledgerinsights.com/bbva-blockchain-loan-banking-tech-award/) _確定されたローンの詳細はハッシュ化され、メインネットに記録されます_ -- [ANSA](https://cointelegraph.com/news/italys-top-news-agency-uses-blockchain-to-fight-fake-coronavirus-news) _イタリア最大の報道機関が偽のニュースと戦い、読者がニュースのソースをメインネットに記録することで検証できるようにします_ -- [Verizon](https://decrypt.co/46745/verizon-news-press-releases-ethereum-full-transparency) _企業の説明責任と信頼性を確保するために、イーサリアムのプレスリリースを記録します_ -- [Breitling](https://www.coindesk.com/breitling-arianee-all-new-watches-ethereum) _イーサリアムでの腕時計の証明書と修理履歴を記録します_ -- [EthSign](https://ethsign.xyz/) _イーサリアムブロックチェーン上の署名された電子ドキュメントを記録します_ +- [BBVA](https://www.ledgerinsights.com/bbva-blockchain-loan-banking-tech-award/) _終了した融資の詳細がハッシュ化されメインネットに記録_ +- [ANSA](https://cointelegraph.com/news/italys-top-news-agency-uses-blockchain-to-fight-fake-coronavirus-news) _イタリアの最大の通信社で、フェイクニュースと戦い、ニュースをメインネットに記録することで、読者は出所を確認することが可能_ +- [Verizon](https://decrypt.co/46745/verizon-news-press-releases-ethereum-full-transparency) _イーサリアム上でプレスリリースを記録することで、企業の説明責任と信用を確保_ +- [Breitling](https://www.coindesk.com/breitling-arianee-all-new-watches-ethereum) _イーサリアム上で時計の出所と修理履歴を記録_ +- [EthSign](https://ethsign.xyz/) _イーサリアムブロックチェーン上で署名された電子ドキュメントを記録_ ### サプライチェーン {#supply-chain} -- [Morpheus.network](https://morpheus.network/) _イーサリアムメインネット上で公証データを用いたハイブリッドなプライベートチェーンを実現するサプライチェーン自動化プラットフォーム。カナダの食品・石油・ガス販売会社 Federated Co-op Ltd.やアルゼンチンのペットフード会社 Vitalcan などが採用_ -- [Minespider](https://www.minespider.com/) _サプライチェーン追跡_ +- [Morpheus.network](https://morpheus.network/) _イーサリアムメインネット上で公証データを用いたハイブリッドなプライベートチェーンを実現するサプライチェーン自動化プラットフォーム。カナダの食品・石油・ガス販売会社Federated Co-op Ltd.やアルゼンチンのペットフード会社Vitalcanなどが採用_ +- [Minespider](https://www.minespider.com/) _サプライチェーンの追跡_ - [EY OpsChain Contract Manager](https://blockchain.ey.com/products/contract-manager) _信頼できるビジネスパートナーのネットワーク全体で、RFQ、コントラクト、発注書、請求書を発行することにより、企業は調達ワークフローに従事可能_ -- [Treum](https://treum.io/) _ブロックチェーン技術を使用して、透明性、トレーサビリティ、トレーダビリティをサプライチェーンに配置_ +- [Treum](https://treum.io/) _ブロックチェーン技術を使用して、サプライチェーンの透明性、トレーサビリティ、トレーダビリティを実現_ - [TradeTrust](https://www.tradetrust.io/) _海外発送向けの電子船荷証券(eBL)を検証_ ### 保険 {#insurance} - [Arbol](https://www.arbolmarket.com/) _天候関連のリスクをカバーするパラメトリック保険_ -- [Etherisc](https://etherisc.com/) _さまざまなリスクに対する分散型保険_ +- [Etherisc](https://etherisc.com/) _様々なリスクに対する分散型保険_ ### 資格情報と認証 {#credentials} -- [イタリアの 2 つの高等学校](https://cointelegraph.com/news/two-italian-high-schools-to-issue-digital-diplomas-with-blockchain) _イーサリアムメインネットで発行されたデジタルディプロマ_ -- [ザンクトガレン大学](https://cointelegraph.com/news/swiss-university-fights-fake-diplomas-with-blockchain-technology) _学位を認証するためのパイロットプロジェクトを実施したスイスの大学_ +- [イタリアにある高校の2校](https://cointelegraph.com/news/two-italian-high-schools-to-issue-digital-diplomas-with-blockchain) _イーサリアムメインネットでデジタル卒業証書を発行_ +- [St. Gallen大学](https://cointelegraph.com/news/swiss-university-fights-fake-diplomas-with-blockchain-technology) _スイスの大学による学位を証明するためのパイロットプロジェクト_ - [Hyland Credentials](https://www.hylandcredentials.com) _デジタルディプロマ、その他の教育資格情報、ライセンス、証明書_ - [OpenCerts](https://opencerts.io/faq) _シンガポールでブロックチェーン教育の資格情報を発行_ - [BlockCerts](https://www.blockcerts.org/) _ブロックチェーン資格情報のオープン標準を開発_ ### ユーティリティ {#utilities} -- [GridPlus](https://blog.gridplus.io/gridplus-is-live-in-texas-efc83c814601) _電気料金の支払い_ +- [GridPlus](https://blog.gridplus.io/gridplus-is-live-in-texas-efc83c814601) _電気代の支払い_ -このリストへの追加を希望される場合は、貢献の[手順](/contributing/)を参照してください。 +このリストへの追加を希望される場合は、[貢献の手順](/contributing/)を参照してください。 diff --git a/public/content/translations/ja/enterprise/private-ethereum/index.md b/public/content/translations/ja/enterprise/private-ethereum/index.md index 6409a8dd4c7..28dc1b56c95 100644 --- a/public/content/translations/ja/enterprise/private-ethereum/index.md +++ b/public/content/translations/ja/enterprise/private-ethereum/index.md @@ -14,13 +14,13 @@ lang: ja イーサリアムをエンタープライズ向けにするための協力的な取り組みがいくつかあり、さまざまな組織によってまとめられています。 -- [エンタープライズ・イーサリアム・アライアンス (EEA)](https://entethalliance.org/) EEA により、組織は日常業務にイーサリアムテクノロジーを導入、使用することができます。 私たちはイーサリアムエコシステムに力を与え、新しいビジネスチャンスを開発し、業界の採用を促進し、互いに学び、協力します。 -- [ハイパーレジャー](https://hyperledger.org) _ハイパーレジャーは、業界を越えてブロックチェーン技術を発展させるために作られたオープンソースの共同プロジェクトであり、 金融、銀行、モノのインターネット、サプライチェーン、製造、テクノロジーのリーダーなど、リナックスファウンデーションが主催するグローバルコラボレーションです。 このファウンデーションには、[Besu](https://www.hyperledger.org/use/besu) and [Burrow](https://www.hyperledger.org/projects/hyperledger-burrow)といったイーサリアムスタックで動作するいくつかのプロジェクトがあります。_ +- [エンタープライズ・イーサリアム・アライアンス (EEA)](https://entethalliance.org/) EEAにより、組織は日常業務にイーサリアムテクノロジーを導入、使用することができます。 私たちはイーサリアムエコシステムに力を与え、新しいビジネスチャンスを開発し、業界の採用を促進し、互いに学び、協力します。 +- [ハイパーレジャー](https://hyperledger.org) _ハイパーレジャーは、業界を越えてブロックチェーン技術を発展させるために作られたオープンソースの共同プロジェクトであり、 金融、銀行、モノのインターネット、サプライチェーン、製造、テクノロジーのリーダーなど、リナックスファウンデーションが主催するグローバルコラボレーションです。 このファウンデーションでは、[Besu](https://www.hyperledger.org/use/besu)を含むイーサリアムスタックと連携するいくつかのプロジェクトがあります。_ ### プロトコルとインフラストラクチャ {#protocol-and-infrastructure} -- [Chainstack](https://chainstack.com/) _分散型ネットワークとサービスを迅速に構築、デプロイ、管理するビジネスを支援する、マルチクラウドおよびマルチプロトコルの PaaS (プラットフォーム・アズ・ア・サービス) _ -- [Clearmatics Autonity](https://www.clearmatics.com/about/) _p2p プロトコルを実装してクライアントソフトウェアとインフラを提供するプロトコル群_ -- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _Apache 2.0 ライセンスの基で開発されたオープンソースのイーサリアムクライアントで、Java で書かれており、PoW、PoA(IBFT、IBFT 2.0、Etherhash、Clike)を含むいくつかの合意形成アルゴリズムを含んでいる。 その包括的な権限スキームは、コンソーシアム環境での使用に特化した設計となっている。_ -- [Hyperledger Burrow](https://www.hyperledger.org/projects/hyperledger-burrow) _イーサリアム仮想マシン (EVM) の仕様に部分的に合わせて開発された認可制のスマートコントラクトのインタプリタを備えた、モジュール型のブロックチェーンクライアント_ +- [Chainstack](https://chainstack.com/) _分散型ネットワークとサービスを迅速に構築、デプロイ、管理するビジネスを支援する、マルチクラウドおよびマルチプロトコルのPaaS (プラットフォーム・アズ・ア・サービス) _ +- [Clearmatics Autonity](https://www.clearmatics.com/about/) _p2pプロトコルを実装してクライアントソフトウェアとインフラを提供するプロトコル群_ +- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _Apache 2.0ライセンスの基で開発されたオープンソースのイーサリアムクライアントで、Javaで書かれており、PoWやPoA(IBFT、IBFT 2.0、Ethash、Clique)を含むいくつかのコンセンサス形成アルゴリズムを含んでいる。 その包括的な権限スキームは、コンソーシアム環境での使用に特化した設計となっている_ - [Kaleido](https://kaleido.io/) _クロスクラウドでハイブリッドなエンタープライズエコシステムの構築と実行のためのフルスタックプラットフォーム_ +- [Zeeve](https://www.zeeve.io/) _イーサリアムに構築するための幅広い製品とツール、エンタープライズWeb3アプリケーションのためのインフラストラクチャおよびAPIも提供_ diff --git a/public/content/translations/ja/foundation/index.md b/public/content/translations/ja/foundation/index.md index fdba569cb0c..21b3d93500f 100644 --- a/public/content/translations/ja/foundation/index.md +++ b/public/content/translations/ja/foundation/index.md @@ -11,7 +11,7 @@ lang: ja [イーサリアム・ファウンデーション](http://ethereum.foundation/)(EF)は、 [イーサリアム](/what-is-ethereum/)および関連技術をサポートする非営利団体です。 -EF は企業でも、伝統的な非営利団体でもありません。 彼らの役割はイーサリアムを制御またはリードすることではなく、イーサリアム関連技術の重要な開発に資金を提供する唯一の組織でもありません。 EF は、はるかに大きな[エコシステム](/community/)の一部です。 +EFは企業でも、伝統的な非営利団体でもありません。 彼らの役割はイーサリアムを制御またはリードすることではなく、イーサリアム関連技術の重要な開発に資金を提供する唯一の組織でもありません。 EFは、はるかに大きな[エコシステム](/community/)の一部です。 ## イーサリアム・ファウンデーションの取り組み {#ethereum-foundation-initiatives} @@ -23,18 +23,18 @@ EF は企業でも、伝統的な非営利団体でもありません。 彼ら ### Devcon {#devcon} -2014 年より、イーサリアム・ファウンデーションは、すべての i-イーサリアムデベロッパー、研究者、思想家、メーカーのための年次会議である開発者会議(Devcon)を開催しています。 +2014年より、イーサリアム・ファウンデーションは、すべてのイーサリアムデベロッパー、研究者、思想家、メーカーのための年次会議である開発者会議(Devcon)を開催しています。 [archive.devcon.org](https://archive.devcon.org/)にて、毎年の会議プレゼンテーションのビデオコンテンツにアクセスできます。 -詳細は[devcon.org](https://devcon.org/)をご覧ください。 [Devcon ブログ](https://devcon.org/en/blogs/)、または最新のお知らせは[@efdevcon](https://twitter.com/EFDevcon)をご覧ください。 +詳細については、[devcon.org](https://devcon.org/)および[Devconブログ](https://devcon.org/en/blogs/)をご覧ください。また、[@efdevcon](https://twitter.com/EFDevcon)をフォローして最新のお知らせをご覧ください。 ### フェローシッププログラム {#fellowship-program} -[イーサリアム・ファウンデーション・フェローシッププログラム](https://fellowship.ethereum.foundation/)は、国籍や文化、経済階級で生じる格差に対する支援イニシアチブです。 フェローシッププログラムは、ユニークで才能のある個人を特定、サポートすることでイーサリアムとの関連性を確立し、Web3 の将来を担うコミュニティや評価されていない人々に対して門戸を開くことによって、こうしたギャップを埋めていくことを目的としています。 +[イーサリアム・ファウンデーション・フェローシッププログラム](https://fellowship.ethereum.foundation/)は、国籍や文化、経済階級で生じる格差に対する支援イニシアチブです。 フェローシッププログラムは、ユニークで才能のある個人を特定、サポートすることでイーサリアムとの関連性を確立し、Web3の将来を担うコミュニティや評価されていない人々に対して門戸を開くことによって、こうしたギャップを埋めていくことを目的としています。 [フェローシップ イーサリアム・ファウンデーション](https://fellowship.ethereum.foundation/)でもっと学ぶ。
-ファウンデーションおよびファウンデーションの仕事の詳細については、[ethereum.foundation](http://ethereum.foundation/)、EF の最新のニュースとお知らせについては、[イーサリアム・ファウンデーションブログ](https://blog.ethereum.org/)をご覧ください。 +ファウンデーションおよびファウンデーションの仕事の詳細については、[ethereum.foundation](http://ethereum.foundation/)、EFの最新のニュースとお知らせについては、[イーサリアム・ファウンデーションブログ](https://blog.ethereum.org/)をご覧ください。 diff --git a/public/content/translations/ja/governance/index.md b/public/content/translations/ja/governance/index.md index 04e05cbf692..6bbad3d0919 100644 --- a/public/content/translations/ja/governance/index.md +++ b/public/content/translations/ja/governance/index.md @@ -2,6 +2,7 @@ title: イーサリアムのガバナンス description: イーサリアムに関する決定がどのように行われるかについてのご紹介 lang: ja +postMergeBannerTranslation: page-upgrades-post-merge-banner-governance-ood --- # イーサリアムのガバナンスの概要 {#introduction} @@ -120,7 +121,7 @@ _注: どの個人もこれらのグループの複数に参加できます(た The DAOフォークは、周到に脆弱性を突いた[2016年のThe DAO攻撃](https://www.coindesk.com/understanding-dao-hack-journalists)で360万ETH以上の[分散型自律組織(DAO)](/glossary/#dao)コントラクトが流出した事件を受けたものです。 このフォークにより、欠陥をもったコントラクトから新しいコントラクトに資金が転送され、ハッキングでETHを失った人が回収できるようになりました。 -この行動指針はイーサリアムコミュニティの投票で行われました。 ETH保有者は、 [投票プラットフォーム](http://v1.carbonvote.com/)でトランザクションを通じて投票することができました。 フォークの実行は、投票の85%以上に支持されました。 +この行動指針はイーサリアムコミュニティの投票で行われました。 Any ETH holder was able to vote via a transaction on [a voting platform](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/). フォークの実行は、投票の85%以上に支持されました。 ここで重要なのは、プロトコルがハッキングを元に戻すためにフォークしたものの、フォークを決定する際の投票の重要性については、いくつかの理由から議論の余地があるということです。 diff --git a/public/content/translations/ja/guides/how-to-create-an-ethereum-account/index.md b/public/content/translations/ja/guides/how-to-create-an-ethereum-account/index.md index 606066d45a9..5dd5e1f2141 100644 --- a/public/content/translations/ja/guides/how-to-create-an-ethereum-account/index.md +++ b/public/content/translations/ja/guides/how-to-create-an-ethereum-account/index.md @@ -6,7 +6,7 @@ lang: ja # イーサリアムアカウントの開設方法 -イーサリアムアカウントはいつでも誰でも無料で開設することができます。 いくつかの方法で開設することができますが、最も簡単で広く利用されているのはウォレットアプリです。 ウォレットでイーサリアムを利用するためのキーを作成し保管します。 その後、ウォレットを使って、トランザクションを送信したり、トークン残高を確認したり、イーサリアム上に構築されたトークン交換所、ゲーム、NFTマーケットなどのアプリに接続したりすることができます。 Web2アプリの中にもイーサリアムにログインできるものがあります。 +イーサリアムアカウントはいつでも誰でも無料で開設することができます。 いくつかの方法で開設することができますが、最も簡単で広く利用されているのはウォレットアプリです。 ウォレットでイーサリアムを利用するための[キー](/glossary/#key)を作成し保管します。 その後、ウォレットを使って、トランザクションを送信したり、トークン残高を確認したり、イーサリアム上に構築されたトークン交換所、ゲーム、[NFT](/glossary/#nft)マーケットプレースなどのアプリに接続したりすることができます。 Web2アプリの中にもイーサリアムにログインできるものがあります。 一般企業の新しいアカウントを開設するのとは違い、イーサリアムのアカウントの開設は、自由で、プライバシーを保護しながら、許可を求めることもなく行うことができます。 アカウントはウォレットのソフトウェアがユーザーへ独自に作成したキーによって制御されるもので、第三者によって発行されるものでも、一元管理されるものでもありません。 @@ -28,7 +28,7 @@ lang: ja ウォレットを選んだら、ウォレットの公式サイトやアプリストアにアクセスして、ダウンロード、インストールしてください。 それらはすべて無料のはずです。 -## ステップ 3: アプリを開いて、イーサリアムのアカウントを開設またはインポートする +## ステップ 3: アプリを開いて、イーサリアムアカウントを開設する 新しいウォレットを初めて開くと、新しいアカウントを開設するか、既存のアカウントをインポートするかを選択するよう求められる場合があります。 新しいアカウントの開設をクリックします。 @@ -55,13 +55,13 @@ lang: ja 複数のイーサリアムアカウントを一つのシードフレーズから分岐する木の枝と考えてもいいでしょう。 それぞれのシード(タネ)から全く違う木のアカウントが作成されます。 -### ビットコインをイーサリアムのアドレスに送金したり、イーサをビットコインのアドレスに送金したりできますか? +### ビットコインをイーサリアムのアドレスに送金したり、Etherをビットコインのアドレスに送金したりできますか? -できません。 ビットコインとイーサは、異なる2つのネットワーク(すなわち、異なるブロックチェーン)に存在し、それぞれ独自の記録手法とアドレスの形式を備えています。 この2つのネットワークを橋渡ししようとする試みはいくつもあります。 最も活発なものは現在の [ラップドビットコイン(WBTC)](https://www.bitcoin.com/get-started/what-is-wbtc/)です。 とはいえ、WBTCはカストディアル型 (特定の組織が重要な機能を管理している形) であり、情報提供のみが目的であるため、これは推奨される試みではありません。 +できません。 ビットコインとEtherは、異なる2つのネットワーク(すなわち、異なるブロックチェーン)に存在し、それぞれ独自の記録手法とアドレスの形式を備えています。 この2つのネットワークを橋渡ししようとする試みはいくつもあります。 最も活発なものは現在の [ラップドビットコイン(WBTC)](https://www.bitcoin.com/get-started/what-is-wbtc/)です。 とはいえ、WBTCはカストディアル型 (特定の組織が重要な機能を管理している形) であり、情報提供のみが目的であるため、これは推奨される試みではありません。 -### イーサのアドレスを所有している場合、他のブロックチェーンでもそれと同じアドレスが使えますか? +### ETHのアドレスを所有している場合、他のブロックチェーンでもそれと同じアドレスが使えますか? -イーサリアム上で構築されたソフトウェアを利用しているブロックチェーン(いわゆる、EVM互換ブロックチェーン)であれば同じアドレスを使うことができます。 この [リスト](https://chainlist.org/) は、同じアドレスで使用できるブロックチェーンの一覧です。 ビットコインのような一部のブロックチェーンでは、全く別のネットワークの規定を実装しているため、異なるフォーマットのアドレスが必要になります。 スマートコントラクトのウォレットをお持ちの場合は、どのブロックチェーンがサポートされているかについて、詳細を製品のウェブサイトで確認する必要があります。 +イーサリアム上で構築されたソフトウェアを利用しているブロックチェーン(いわゆる、EVM互換ブロックチェーン)であれば同じ[アドレス](/glossary/#address)を使うことができます。 この [リスト](https://chainlist.org/) は、同じアドレスで使用できるブロックチェーンの一覧です。 ビットコインのような一部のブロックチェーンでは、全く別のネットワークの規定を実装しているため、異なるフォーマットのアドレスが必要になります。 スマートコントラクトのウォレットをお持ちの場合は、どのブロックチェーンがサポートされているかについて、詳細を製品のウェブサイトで確認する必要があります。 ### 自分のウォレットを持つことは、取引所に資金を預けるよりも安全でしょうか? diff --git a/public/content/translations/ja/guides/how-to-revoke-token-access/index.md b/public/content/translations/ja/guides/how-to-revoke-token-access/index.md index 115d392c907..b5c980b9b99 100644 --- a/public/content/translations/ja/guides/how-to-revoke-token-access/index.md +++ b/public/content/translations/ja/guides/how-to-revoke-token-access/index.md @@ -1,16 +1,16 @@ --- title: 暗号資金へのスマートコントラクトのアクセスを無効にする方法 -description: 悪意のある暗号資産へのスマートコントラクトのアクセスを無効にする方法を解説します。 +description: 悪意のある暗号資産へのスマートコントラクトのアクセスを無効にする方法の解説 lang: ja --- # 暗号資金へのスマートコントラクトのアクセスを無効にする方法 -このガイドでは、暗号資産へのアクセスを許可したスマートコントラクトの一覧を表示させる方法とそれらをキャンセルする方法について解説します。 +このガイドでは、暗号資産へのアクセスを許可した[スマートコントラクト](/glossary/#smart-contract)の一覧を表示させる方法と、それらをキャンセルする方法について解説します。 -スマートコントラクトに裏口を作り、スマートコントラクトと対話するユーザーが気づかないうちに彼らの資産にアクセスできるようにする悪意のあるデベロッパーも存在します。 よくあるのは、そのようなプラットフォームが、将来的にガス代を少しでも節約するために、**トークンの支出限度を無制限にすること**をユーザーに許可させることですが、これはとてもリスクが高いです。 +スマートコントラクトに裏口を作り、スマートコントラクトと対話するユーザーが気づかないうちに彼らの資産にアクセスできるようにする悪意のあるデベロッパーも存在します。 よくあるのは、そのようなプラットフォームが、将来的に[ガス](/glossary/#gas)代を少しでも節約するために、**トークンの支出限度を無制限にすること**をユーザーに許可させることですが、そうするとリスクが高まります。 -プラットフォームがウォレット上のトークンへの無制限のアクセス権を得ると、プラットフォームからウォレットに資産を引き出したとしても、そのトークンをすべて使うことができてしまいます。 悪意ある行為者がユーザーの資産にアクセスし、それをウォレットに引き出してしまえば、取引が復元できる可能性はなくなります。 +プラットフォームがウォレット上のトークンへの無制限のアクセス権を得ると、ユーザーがプラットフォームから[ウォレット](/glossary/#wallet)に資産を引き出したとしても、そのトークンをすべて使うことができてしまいます。 悪意ある行為者がユーザーの資産にアクセスし、それをウォレットに引き出してしまえば、取引が復元できる可能性はなくなります。 唯一の対策は、テストされていない新しいプロジェクトの使用を控えることや、必要なものだけを承認すること、あるいは定期的にアクセス権を取り消すことです。 では、どうすればいいのでしょうか? @@ -18,12 +18,12 @@ lang: ja 自分のアドレスに接続されたスマートコントラクトを閲覧したり、無効にさせることが可能なウェブサイトもあります。 以下のようなウェブサイトにアクセスし、ウォレットに接続してください。 -- [Ethallowance (イーサアラウアンス)](https://ethallowance.com/) (イーサリアム) -- [Etherscan (イーサスキャン)](https://etherscan.io/tokenapprovalchecker) (イーサリアム) -- [Cointool (コインツール)](https://cointool.app/approve/eth)(複数のネットワーク) -- [Revoke (リボーク)](https://revoke.cash/) (複数のネットワーク) -- [Unrekt (アンレクト)](https://app.unrekt.net/)(複数のネットワーク) -- [EverRevoke (エバーリボーク)](https://everrise.com/everrevoke/)(複数のネットワーク) +- [Ethallowance (イーサアラウアンス) ](https://ethallowance.com/) (イーサリアム) +- [Etherscan (イーサスキャン) ](https://etherscan.io/tokenapprovalchecker) (イーサリアム) +- [Cointool (コインツール) ](https://cointool.app/approve/eth)(複数のネットワーク) +- [Revoke (リボーク) ](https://revoke.cash/) (複数のネットワーク) +- [Unrekt (アンレクト) ](https://app.unrekt.net/)(複数のネットワーク) +- [EverRevoke (エバーリボーク) ](https://everrise.com/everrevoke/)(複数のネットワーク) ## ステップ 2: ウォレットを接続する @@ -48,7 +48,7 @@ lang: ja
- 詳細をご希望の場合は、+さらに詳しく知りたいですか?他のガイドを参照する @@ -58,7 +58,7 @@ lang: ja ### トークンへのアクセス権を取り消すと、ステーキング、プール、レンディングなどのDeFiも終了しますか? -いいえ、DeFiの取引に影響を及ぼすことはありません。 現状の設定を保ち、引き続き報酬などを獲得し続けます。 +いいえ、[DeFi](/glossary/#defi)の取引に影響を及ぼすことはありません。 現状の設定を保ち、引き続き報酬などを獲得し続けます。 ### ウォレットとプロジェクトとの接続を切断することは、資産を使用する許可を取り消すことと同じですか? diff --git a/public/content/translations/ja/guides/how-to-swap-tokens/index.md b/public/content/translations/ja/guides/how-to-swap-tokens/index.md index 37693cfdd8e..26bdac87570 100644 --- a/public/content/translations/ja/guides/how-to-swap-tokens/index.md +++ b/public/content/translations/ja/guides/how-to-swap-tokens/index.md @@ -6,13 +6,13 @@ lang: ja # トークンの交換方法 -お気に入りのトークンが全てリストされている取引所を探すのにうんざりしていませんか? 分散型取引所を使うことでほとんどのトークンを交換することができます。 +お気に入りのトークンが全てリストされている取引所を探すのにうんざりしていませんか? [分散型取引所](/glossary/#dex)を使うことでほとんどのトークンを交換することができます。 -トークンのスワップでは、イーサリアムのネットワーク上に存在する異なる2種類のトークンの交換、例えば、ETHとDAI(ERC-20トークン) の交換を行います。 そのプロセスは、非常に速く安価に行われます。 これにはトークンをスワップするための暗号ウォレットが必要になります。 +トークンのスワップでは、イーサリアムのネットワーク上に存在する異なる2種類のトークンの交換、例えば、ETHとDAI([ERC-20](/glossary/#erc-20)トークン) の交換を行います。 そのプロセスは、非常に速く安価に行われます。 これにはトークンをスワップするための暗号ウォレットが必要になります。 **前提条件:** -- チュートリアルに従って、暗号ウォレットを手に入れる:[イーサリアムのアカウントを「登録」する方法](/guides/how-to-create-an-ethereum-account/) +- チュートリアルに従って、[暗号ウォレット](/glossary/#wallet)を手に入れる:[イーサリアムのアカウントを「登録」する方法](/guides/how-to-create-an-ethereum-account/) - ウォレットに資金を追加する ## 1. 分散型取引所(DEX) を選び、ウォレットを接続する @@ -50,7 +50,7 @@ lang: ja
- 詳細をご希望の場合は、+さらに詳しく知りたいですか?他のガイドを参照する diff --git a/public/content/translations/ja/guides/how-to-use-a-bridge/index.md b/public/content/translations/ja/guides/how-to-use-a-bridge/index.md index 0f4d5e9f602..77b5386d504 100644 --- a/public/content/translations/ja/guides/how-to-use-a-bridge/index.md +++ b/public/content/translations/ja/guides/how-to-use-a-bridge/index.md @@ -10,7 +10,7 @@ lang: ja **前提条件:** -- 以下のチュートリアルから暗号ウォレットを持つこと:[Ethereumのアカウントを「登録」する方法](/guides/how-to-create-an-ethereum-account/) +- チュートリアルに従って、暗号ウォレットを手に入れる:[イーサリアムのアカウントを「登録」する方法](/guides/how-to-create-an-ethereum-account/) - ウォレットに資金を追加する ## 1. 使用したいレイヤー2ネットワークを決定する @@ -53,7 +53,7 @@ lang: ja
- 詳細をご希望の場合は、+さらに詳しく知りたいですか?他のガイドを参照する diff --git a/public/content/translations/ja/guides/how-to-use-a-wallet/index.md b/public/content/translations/ja/guides/how-to-use-a-wallet/index.md index 28eceec69d7..0e43bbe7d7f 100644 --- a/public/content/translations/ja/guides/how-to-use-a-wallet/index.md +++ b/public/content/translations/ja/guides/how-to-use-a-wallet/index.md @@ -63,7 +63,7 @@ lang: ja 6. これで完了です! アプリを使い始めましょう [dAppsページ](/dapps/#explore)にて、興味深いプロジェクトを見つけることができます。
- 詳細をご希望の場合は、+さらに詳しく知りたいですか?他のガイドを参照する @@ -71,7 +71,7 @@ lang: ja ## よくある質問 -### イーサのアドレスを所有している場合、他のブロックチェーンでもそれと同じアドレスが使えますか? +### ETHのアドレスを所有している場合、他のブロックチェーンでもそれと同じアドレスが使えますか? すべてのEVM対応のブロックチェーンで同じアドレスを使用できます (リカバリーフレーズのあるタイプのウォレットを使用している場合) 。 この [リスト](https://chainlist.org/) は、同じアドレスで使用できるブロックチェーンの一覧です。 ビットコインのような一部のブロックチェーンでは、全く別のネットワークの規定を実装しているため、異なるフォーマットのアドレスが必要になります。 スマートコントラクトのウォレットをお持ちの場合は、どのブロックチェーンがサポートされているかについて、詳細を製品のウェブサイトで確認する必要があります。 diff --git a/public/content/translations/ja/roadmap/account-abstraction/index.md b/public/content/translations/ja/roadmap/account-abstraction/index.md index 68e8eaa137e..957f164cc40 100644 --- a/public/content/translations/ja/roadmap/account-abstraction/index.md +++ b/public/content/translations/ja/roadmap/account-abstraction/index.md @@ -40,19 +40,19 @@ summaryPoints: アカウント抽象化では、スマートコントラクトを使用して資産を保持し、トランザクションを承認することで、この問題を解決します。 これらのスマートコントラクトにカスタムロジックを施すことができ、可能な限り安全に、そしてユーザーごとにカスタマイズすることができます。 最終的には、アカウントへのアクセスを制御するために秘密鍵を使用しますが、より簡単で安全に秘密鍵を管理するための安全策が施してあります。 -例えば、バックアップキーをウォレットに追加できます。そのため、メインキーを紛失したり誤って公開したりしてしまった場合でも、バックアップキーで許可することで新しい安全なキーに置き換えられます。 各バックアップキーを別の方法で保護したり、信頼できるガーディアン間で分割したりすることもでき、 結果として、泥棒が資金を完全に制御するのがはるかに難しくなります。 同様に、ウォレットにルールを追加して、メインキーが侵害された場合の影響を軽減できます。例えば、低額のトランザクションを単一の署名で検証できるようにし、一方で高額のトランザクションでは複数の認証された署名者の承認が必要になるよう設定します。 スマートコントラクトウォレットの使用方法で窃盗を阻止するのに役立つものは他にもあります。例えば、ホワイトリストを使用して、信頼できるアドレスへのトランザクションか、事前に承認された複数のキーで検証されない限り、すべてのトランザクションをブロックすることができます。 +例えば、バックアップキーをウォレットに追加できます。そのため、メインキーを紛失したり誤って公開したりしてしまった場合でも、バックアップキーで許可することで新しい安全なキーに置き換えられます。 各バックアップキーを別の方法で保護したり、信頼できるガーディアン間で分割したりすることもでき、 結果として、泥棒が資金を完全に制御するのがはるかに難しくなります。 同様に、ウォレットにルールを追加して、メインキーが侵害された場合の影響を軽減できます。例えば、低額のトランザクションを単一の署名で検証できるようにし、一方で高額のトランザクションでは複数の認証された署名者の承認が必要になるよう設定します。 スマートコントラクトウォレットの使用方法で窃盗を阻止するのに役立つものは他にもあります。例えば、許可リストを使用して、信頼できるアドレスへのトランザクションか、事前に承認された複数のキーで検証されない限り、すべてのトランザクションをブロックすることができます。 ### スマートコントラクトウォレットに組み込めるセキュリティロジックの例: - **マルチシグ認証**: 複数の信頼できるユーザーまたはデバイス間で認証資格情報を共有できます。 これにより、事前設定された金額を超えるトランザクションには、信頼できる当事者の特定の割合 (例: 5人中の3人) からの承認が必要となるようにコントラクトを設定できます。 例えば、高額のトランザクションでは、モバイルデバイスとハードウェアウォレットの両方からの承認、または信頼できる家族に配布されたアカウントからの署名を必須にすることができます。 - **アカウントの凍結**: デバイスが紛失したり侵害された場合、認証された別のデバイスからアカウントをロックすることができ、ユーザーの資産を保護します。 -- **アカウントの復元**: デバイスを紛失したり、パスワードを忘れたりすることがあります。 現在の仕組みでは、あなたの資産が永久に凍結される可能性があります。 そこで、スマートコントラクトウォレットを使用することで、新しいデバイスを承認してアクセスをリセットできる事前承認済みアカウントを設定します。 +- **アカウントの復元**: デバイスを紛失したり、パスワードを忘れたりすることがあります。 現在の仕組みでは、あなたの資産が永久に凍結される可能性があります。 そこで、スマートコントラクトウォレットを使用することで、新しいデバイスを承認してアクセスをリセットできるアカウントの許可リストを設定します。 - **トランザクションリミットの設定**: 1日、1週間、1か月などの期間でアカウントから転送できる金額の1日当たりのしきい値を指定できます。 つまり、攻撃者がアカウントにアクセスできたとしても、一度にすべての金額を流出させることはできなくなり、攻撃者からのアクセスを凍結してリセットすることができます。 -- **ホワイトリストの作成**: 安全であるとわかっている特定のアドレスへのトランザクションのみを許可します。 つまり、秘密鍵が_盗まれたとしても_、攻撃者はホワイトリストに登録されていない宛先アカウントに資金を送金することはできません。 これらのホワイトリストを変更するには複数の署名が必要になるため、攻撃者は、あなたの複数のバックアップキーにアクセスできない限り、リストに自分のアドレスを追加できません。 +- **許可リストの作成**: 安全であるとわかっている特定のアドレスへのトランザクションのみを許可します。 つまり、秘密鍵が_盗まれたとしても_、攻撃者はリストに登録されている宛先アカウントにしか資金を送金することはできません。 これらの許可リストを変更するには複数の署名が必要になるため、攻撃者は、あなたの複数のバックアップキーにアクセスできない限り、リストに自分のアドレスを追加できません。 ## ユーザーエクスペリエンスの向上 {#better-user-experience} -アカウント抽象化によって、スマートコントラクトウォレットがプロトコルレベルでサポートされるようになります。これにより、**ユーザーエクスペリエンスが全体的に改善**され、**セキュリティも向上**します。 アカウント抽象化を行う最も重要な理由は、スマートコントラクト、ウォレット、アプリケーションのデベロッパーが、これまでにない方法でユーザーエクスペリエンスをより自由に革新できるようになるからです。 アカウント抽象化によって明らかに改善する点として、トランザクションのバンドル化による速度と効率の向上が挙げられます 例えば、シンプルなスワップは、ワンクリックで完了できるはずです。しかし、現在は、スワップを実行する前に、個々のトークンの支出を承認するために、複数のトランザクションに署名する必要があります。 アカウント抽象化は、トランザクションをバンドル化することで、こうした摩擦を取り除きます。 さらに、バンドル化されたトランザクションは、各トランザクションに必要なトークンの正確な値を承認し、トランザクションが完了した後に承認を取り消すことができます。そのため、より安全性が高まります。 +アカウント抽象化によって、スマートコントラクトウォレットがプロトコルレベルでサポートされるようになります。これにより、**ユーザーエクスペリエンスが全体的に改善**され、**セキュリティも向上**します。 アカウント抽象化を行う最も重要な理由は、スマートコントラクト、ウォレット、アプリケーションのデベロッパーが、これまでにない方法でユーザーエクスペリエンスをより自由に革新できるようになるからです。 アカウント抽象化によって明らかに改善する点として、トランザクションのバンドル化による速度と効率の向上が挙げられます。 例えば、シンプルなスワップならワンクリックで完了できるはずです。しかし現在のところ、スワップを実行する前に、個々のトークンの支出を承認するために複数のトランザクションに署名する必要があります。 アカウント抽象化は、トランザクションをバンドル化することで、こうした摩擦を取り除きます。 さらに、バンドル化されたトランザクションは、各トランザクションに必要なトークンの正確な値を承認し、トランザクションが完了した後に承認を取り消すことができます。そのため、より安全性が高まります。 ガス代の管理もアカウント抽象化によって大幅に改善されます。 アプリケーションは、ユーザーのガス代を支払うことができるだけでなく、ガス代をETH以外のトークンで支払うこともできます。このため、ユーザーは資金のトランザクションでETH残高を維持する必要がなくなります。 その仕組みを説明すると、コントラクト内でユーザーのトークンをETHに交換し、そのETHをガス代の支払いに使用しています。 diff --git a/public/content/translations/ja/roadmap/beacon-chain/index.md b/public/content/translations/ja/roadmap/beacon-chain/index.md index 7e39a5cb4e5..a0915577bb1 100644 --- a/public/content/translations/ja/roadmap/beacon-chain/index.md +++ b/public/content/translations/ja/roadmap/beacon-chain/index.md @@ -28,7 +28,7 @@ summaryPoint3: ビーコンチェーンは、コンセンサスロジックと ビーコンチェーンの稼働の伴い、 [プルーフ・オブ・ステーク](/developers/docs/consensus-mechanisms/pos/)がイーサリアムに導入されました。 イーサリアムの安全性が保たれ、バリデータはより多くのETHを獲得することができるようになりました。 実際にバリデータソフトウェアを起動するには、ETHをステーキングすることになります。 ステーカーは、チェーンに新しいブロックを作成し、検証するバリデータソフトウェアを実行します。 -ステーキングは、かつての[マイニング](/developers/docs/mining/)と同じ目的を果たしますが、その手法は多くの点で異なります。 マイニングには、強力なハードウェアや大量のエネルギーが必要であり、そのため、多額の先行投資が必要になります。その結果、規模の経済が生まれ、集中化が進みました マイニングにおいても、資産を担保としてロックする必要がなかったため、攻撃後に悪意のある行為者を罰するプロトコルの能力にも限界がありました。 +ステーキングは、かつての[マイニング](/developers/docs/consensus-mechanisms/pow/mining/)と同じ目的を果たしますが、その手法は多くの点で異なります。 マイニングには、強力なハードウェアや大量のエネルギーが必要であり、そのため、多額の先行投資が必要になります。その結果、規模の経済が生まれ、集中化が進みました マイニングにおいても、資産を担保としてロックする必要がなかったため、攻撃後に悪意のある行為者を罰するプロトコルの能力にも限界がありました。 プルーフ・オブ・ステークへの移行により、イーサリアムは従来のプルーフ・オブ・ワークに比べて、格段にセキュリティと分散性が向上しました。 ネットワークに参加する人が多いほど、より分散化され、攻撃の危険性が減少します。 diff --git a/public/content/translations/ja/roadmap/danksharding/index.md b/public/content/translations/ja/roadmap/danksharding/index.md index dbfe0a9b0e2..f4933df455e 100644 --- a/public/content/translations/ja/roadmap/danksharding/index.md +++ b/public/content/translations/ja/roadmap/danksharding/index.md @@ -1,5 +1,5 @@ --- -title: ダークシャーディング +title: ダンクシャーディング description: イーサリアムをスケーリングするための2段階のアップグレードである、プロトダンクシャーディングとダンクシャーディングについて学びます。 lang: ja summaryPoints: @@ -9,23 +9,25 @@ summaryPoints: - その後、完全なダンクシャーディングは、データブロブの検証責任をノードのサブセット全体に広げ、さらにイーサリアムのスケーリングを1秒間のトランザクション件数を10万件以上に拡張します。 --- -# ダークシャーディング {#danksharding} +# ダンクシャーディング {#danksharding} **ダンクシャーディング**は、イーサリアムが真にスケーラブルなブロックチェーンになるうえで重要な役割を果たしています。しかし、そこに到達するには、複数のプロトコルをアップグレードする必要があります。 **プロトダンクシャーディング**は、ダンクシャーディングへの中間ステップです。 どちらもユーザーにとってレイヤー2でのトランザクションを可能な限り安価にすることを目的としています。また、イーサリアムを1秒間のトランザクション件数を10万件以上に拡大することを目指しています。 ## プロトダンクシャーディングとは {#what-is-protodanksharding} -[EIP-4844](https://eips.ethereum.org/EIPS/eip-4844)として知られるプロトダンクシャーディングは、[ロールアップ](/layer-2/#rollups)がより安価なデータをブロックに追加する方法です。 この名称は、アイデアを提案した2名の研究者 (プロトラムダ氏とダンクラッド・フィースト氏)に由来しています。 現在のシステムでは、ロールアップは`CALLDATA`にトランザクションを投稿するため、ユーザートランザクションのコストを安くするには限界があります。 たとえロールアップがデータを必要とするのが短期間であっても、すべてのイーサリアムノードによって処理され、チェーン上にデータが永久に存在するため高価になってしまいます。 プロトダンクシャーディングでは、ブロックに送信、添付できるデータブロブを導入します。 これらのブロブ内のデータは、EVMにアクセスできず、一定期間 (1~3か月) が経過すると自動的に削除されます。 データブロブにより、ロールアップはデータをより安価に送信できるため、節約した費用をトランザクションのコストとして削減することができます。これにより、エンドユーザーはより安価にトランザクションを行うことができます。 +[EIP-4844](https://eips.ethereum.org/EIPS/eip-4844)として知られるプロトダンクシャーディングは、[ロールアップ](/layer-2/#rollups)がより安価なデータをブロックに追加する方法です。 この名称は、アイデアを提案した2名の研究者 (プロトラムダ氏とダンクラッド・フィースト氏)に由来しています。 歴史的に、ロールアップは`CALLDATA`にトランザクションを投稿するため、ユーザートランザクションのコストを安くするには限界がありました。 + +たとえロールアップがデータを必要とするのが短期間であっても、すべてのイーサリアムノードによって処理され、チェーン上にデータが永久に存在するため高価になってしまいます。 プロトダンクシャーディングでは、ブロックに送信、添付できるデータブロブを導入します。 これらのブロブ内のデータは、EVMにアクセスできず、一定期間 (執筆時点において4096エポックに設定、すなわち約18日間) が経過すると自動的に削除されます。 データブロブにより、ロールアップはデータをより安価に送信できるため、節約した費用をトランザクションのコストとして削減することができます。これにより、エンドユーザーはより安価にトランザクションを行うことができます。-ロールアップは、トランザクションをオフチェーンでバッチ処理し、その結果をイーサリアムに投稿することで、イーサリアムをスケーラビリティを改善する方法です。 ロールアップは、基本的にデータと実行確認の2つの要素で構成されています。 データは、イーサリアムに投稿される状態変更を生成するためにロールアップによって処理されている、トランザクションの完全なシーケンスです。 実行確認では、正直なアクターである証明者が、提案された状態変更が正しいことを確認するために、トランザクションを再度実行します。 実行確認を行うには、誰でもダウンロードして確認できるように、トランザクションデータの公開期間を十分に設けておく必要があります。 実行確認により、証明者は、ロールアップシーケンサーが行った不正行為を特定でき、異議申立をすることができます。 ただし、このトランザクションデータを永久的に保存する必要はありません。 +ロールアップは、トランザクションをオフチェーンでバッチ処理し、その結果をイーサリアムに投稿することで、イーサリアムをスケーラビリティを改善する方法です。 ロールアップは、基本的にデータと実行確認の2つの要素で構成されています。 データは、イーサリアムに投稿される状態変更を生成するためにロールアップによって処理されている、トランザクションの完全なシーケンスです。 実行確認では、正直なアクターである証明者が、提案された状態変更が正しいことを確認するために、トランザクションを再度実行します。 実行チェックを行うためには、トランザクションデータが十分長い間利用可能であり、誰でもダウンロードして確認できるようになっている必要があります。 実行確認により、証明者は、ロールアップシーケンサーが行った不正行為を特定でき、異議申立をすることができます。 ただし、このトランザクションデータを永久的に保存する必要はありません。 -ロールアップは、トランザクションデータへのコミットメントをオンチェーンに投稿し、実際のデータをデータブロブで入手できるようにするため、 証明者はコミットメントが有効であることを確認したり、間違っていると思われるデータに異議を唱えることができます。 ノードレベルでは、データブロブはコンセンサスクライアントに保持されます。 コンセンサスクライアントは、データを確認し、それがネットワーク全体に伝播したことを証明します。 データが永久的に保持される場合、これらのクライアントの容量が大きくなり、ノードの実行に大量のハードウェアが必要になる可能性があります そのため、データは1~3か月ごとにノードから自動的に削除されます。 コンセンサスクライアントのアテステーションは、証明者がデータを十分に検証する機会があったことを示しています。 実際のデータは、ロールアップオペレータやユーザーなどがオフチェーンに保存できます。 +ロールアップは、トランザクションデータへのコミットメントをオンチェーンに投稿し、実際のデータをデータブロブで入手できるようにするため、 証明者はコミットメントが有効であることを確認したり、間違っていると思われるデータに異議を唱えることができます。 ノードレベルでは、データブロブはコンセンサスクライアントに保持されます。 コンセンサスクライアントは、データを確認し、それがネットワーク全体に伝播したことを証明します。 データが永久的に保持される場合、これらのクライアントの容量が大きくなり、ノードの実行に大量のハードウェアが必要になる可能性があります その代わりに、データは18日ごとにノードから自動的に削除されます。 コンセンサスクライアントのアテステーションは、証明者がデータを十分に検証する機会があったことを示しています。 実際のデータは、ロールアップオペレータやユーザーなどがオフチェーンに保存できます。 @@ -35,15 +37,17 @@ summaryPoints: ### KZGとは {#what-is-kzg} -KZGは、Kate-Zaverucha-Goldbergの頭文字で、これは3人の[原作者](https://link.springer.com/chapter/10.1007/978-3-642-17373-8_11)の名前を表しています。 データのブロブを小さな[暗号「コミットメント」](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html) まで縮小するスキームのことです。 ロールアップによって送信されたデータブロブは、ロールアップが不正な動作を行っていないか確認するために検証する必要があります。 そのためには、証明者がブロブ内のトランザクションを再実行して、コミットメントが正しいことを確認します。 これは、実行クライアントがマークルプルーフを使用してレイヤー1上のイーサリアムトランザクションの正当性をチェックする方法と、概念的には同じです。 KZGは、多項式をデータに当てはめる代替証明です。 コミットメントは、秘密になっている複数のデータ点で多項式を評価します。 証明者は、データに対して同じ多項式と同じ値で評価し、結果が同じであることを確認します。 これは、ゼロ知識技術と互換性のあるデータ検証方式であり、一部のロールアップやイーサリアムプロトコルの他の箇所で使用されています。 +KZGはKate-Zaverucha-Goldbergの頭文字であり、これはデータの塊を小さな[暗号学的「コミットメント」](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html)に縮小する方式の[最初の著者たち](https://link.springer.com/chapter/10.1007/978-3-642-17373-8_11)の名前に由来しています。 ロールアップによって送信されたデータブロブは、ロールアップが不正な動作を行っていないか確認するために検証する必要があります。 そのためには、証明者がブロブ内のトランザクションを再実行して、コミットメントが正しいことを確認します。 これは、実行クライアントがマークルプルーフを使用してレイヤー1上のイーサリアムトランザクションの正当性をチェックする方法と、概念的には同じです。 KZGは、多項式をデータに当てはめる代替証明です。 コミットメントは、秘密になっている複数のデータ点で多項式を評価します。 証明者は、データに対して同じ多項式と同じ値で評価し、結果が同じであることを確認します。 これは、ゼロ知識技術と互換性のあるデータ検証方式であり、一部のロールアップやイーサリアムプロトコルの他の箇所で使用されています。 + +### KZGセレモニーとは何だったのか? {#what-is-a-kzg-ceremony} -### KZGセレモニーとは {#what-is-a-kzg-ceremony} +KZGセレモニーは、Ethereumコミュニティの多くの人々が共同で秘密のランダムな数字の文字列を生成し、それをいくつかのデータの検証に使用できるようにする方法でした。 この数字列は、誰にも知られず、誰にも再現できないことが、非常に重要であり、 これを確実にするために、セレモニーに参加した各人は前の参加者から文字列を受け取りました。 その後、彼らは新しいランダムな値を生成して (例えば、ブラウザにマウスの動きを測定させることによって) 、それを前の値と混ぜ合わせました。 次に、彼らはその値を次の参加者に送り、自分のローカルマシンからはその値を削除しました。 セレモニーに参加する人の中で1人でもこれを正直に行った場合、最終的な値は攻撃者には知り得ないものになります。 -KZGセレモニーは、イーサリアムコミュニティ全体から多くの人々が協力して生成する、データの検証に使用できる秘密のランダムな数字列を生成する方法です。 この数字列は、誰にも知られず、誰にも再現できないことが、非常に重要であり、 そのために、セレモニーに参加する各人は、前の参加者から文字列を受け取ります。 次に、ブラウザにマウスの動きを測定させるなどして、いくつかの新しいランダム値を作成します。それを以前の値と混ぜて、 次の参加者に送信し、送信後にローカルマシンからその値を破棄します。 セレモニーに参加する1人がこれを正直に行う限り、最終的な値が攻撃者に判明することはありません。 EIP-4844のKZGセレモニーは一般公開され、何万人もの人々がエントロピーを追加するために参加しました。 セレモニーを妨害するためには、参加者の100%が積極的に不正行為を行わなければなりません。 参加者の観点では、自分自身が正直であるとわかっていれば、その人自身がセレモニーの安全を確保したことがわかるので、他の人を信頼する必要はありません(参加者が個々に、N人中1人の正直な参加者の要件を満たしています) 。 +EIP-4844 KZGセレモニーは公開されており、数万人の人々が参加して自分自身のエントロピー (ランダム性) を追加しました。 合計で14万回以上の貢献があり、これはその種の中で世界最大のセレモニーとなりました。 セレモニーを妨害するためには、参加者の100%が積極的に不正行為を行わなければなりません。 参加者の観点では、自分自身が正直であるとわかっていれば、その人自身がセレモニーの安全を確保したことがわかるので、他の人を信頼する必要はありません(参加者が個々に、N人中1人の正直な参加者の要件を満たしています) 。-ロールアップがデータをブロブに投稿すると、チェーン上に投稿するという「コミットメント」を提供します。 このコミットメントは、特定の点でデータに適合する多項式を評価した結果です。 この点は、KZGセレモニーで生成された乱数によって定義され、 証明者はデータを検証するために同じ点で多項式を評価できます。同じ値になった場合、データは正しいということになります。 +ロールアップがブロブにデータを投稿するとき、彼らはチェーン上に投稿する「コミットメント」を提供します。 このコミットメントは、特定の点でデータに適合する多項式を評価した結果です。 この点は、KZGセレモニーで生成された乱数によって定義され、 証明者はデータを検証するために同じ点で多項式を評価できます。同じ値になった場合、データは正しいということになります。 @@ -61,7 +65,7 @@ KZGセレモニーは、イーサリアムコミュニティ全体から多く ダンクシャーディングは、プロトダンクシャーディングで始まったロールアップスケーリングの完成版です。 ダンクシャーディングは、イーサリアムに大容量のスペースをもたらし、ロールアップのトランザクションデータを圧縮して保存できるようにします。 これにより、イーサリアムは数百ものロールアップを簡単にサポートでき、毎秒数百万のトランザクションを処理できるようになります。 -この仕組みを説明すると、ブロックに添付されるブロブをプロトダンクシャーディングの1個から完全なダンクシャーディングである64個まで拡張する方法を導入することで機能します。 必要な残りの変更は、新しい大きなブロブを処理できるようにするためにコンセンサスクライアントの動作方法をすべて更新することです。 これらの変更の中には、ダンクシャーディングとは関係なく、別の目的のためにすでに計画されているものもあります。 例えば、ダンクシャーディングでは、提案者と作成者の分離が実装されている必要があります。 これは、さまざまなバリデータ間でブロックの作成とブロックの提案のタスクを分離するアップグレードです。 同様に、ダンクシャーディングにはデータ可用性のサンプリングが必要ですが、多くの履歴データを保存しない超軽量クライアント「ステートレスクライアント」の開発にも必要です。 +これを機能させる方法として、ブロックに添付されるブロブの数を、プロトダンクシャーディングの6つから、完全なダンクシャーディングで64に拡張します。 必要な残りの変更は、新しい大きなブロブを処理できるようにするためにコンセンサスクライアントの動作方法をすべて更新することです。 これらの変更の中には、ダンクシャーディングとは関係なく、別の目的のためにすでに計画されているものもあります。 例えば、ダンクシャーディングでは、提案者と作成者を分離する必要があります。 これは、さまざまなバリデータ間でブロックの作成とブロックの提案のタスクを分離するアップグレードです。 同様に、ダンクシャーディングにはデータ可用性のサンプリングが必要ですが、多くの履歴データを保存しない超軽量クライアント「ステートレスクライアント」の開発にも必要です。@@ -77,7 +81,7 @@ KZGセレモニーは、イーサリアムコミュニティ全体から多く ### 現在の進行状況 {#current-progress} -完全なダンクシャーディングは、数年先を予定していますが、 プロトダンクシャーディングは、近日にリリースされます。 この記事の執筆時点(2023年2月)において、KZGセレモニーはまだ開催中であり、これまでに5万人以上の参加者を集めています。 プロトダンクシャーディングの[EIP](https://eips.ethereum.org/EIPS/eip-4844)は完成に近づいており、仕様も合意に至っています。現在、クライアントのテストが行われており、本番環境に導入するためのプロトタイプが実装されています。 次のステップは、公開テストネット上で変更を実装することです。 [EIP 4844準備チェックリスト](https://github.com/ethereum/pm/blob/master/Dencun/4844-readiness-checklist.md)を使うことで、最新の状況を把握することができます。 +完全なダンクシャーディングは、数年先を予定していますが、 一方で、KZGセレモニーは、14万以上のコントリビューションがありました。そして、プロトダンクシャーディングの[EIP](https://eips.ethereum.org/EIPS/eip-4844)は成熟しました。 この提案は、すべてのテストネットで完全に実装されました。そして、2024年3月にカンクン - デネブ (「デンクン」)ネットワーク・アップグレードでメインネットでもリリースされました。 ### 参考文献 {#further-reading} diff --git a/public/content/translations/ja/roadmap/future-proofing/index.md b/public/content/translations/ja/roadmap/future-proofing/index.md index f3111b899b0..8cb26ce15f1 100644 --- a/public/content/translations/ja/roadmap/future-proofing/index.md +++ b/public/content/translations/ja/roadmap/future-proofing/index.md @@ -11,11 +11,11 @@ template: roadmap ## 量子耐性 {#quantum-resistance} -現在のイーサリアムを保護するの一部の暗号技術は、量子コンピューティングが実現した際に脆弱性が露呈する可能性があります。 量子コンピューターが現代の暗号技術にとって脅威となるには数十年かかると言われていますが、イーサリアムは今後何世紀にもわたって安全に運用することを目標にしています。 そのため、[イーサリアムの量子耐性](https://consensys.net/blog/developers/how-will-quantum-supremacy-affect-blockchain/)をできるだけ早く実現する必要があります。 +現在のイーサリアムを保護する[暗号技術](/glossary/#cryptography)の一部は、量子コンピューティングが実現した際に脆弱性が露呈する可能性があります。 量子コンピューターが現代の暗号技術にとって脅威となるには数十年かかると言われていますが、イーサリアムは今後何世紀にもわたって安全に運用することを目標にしています。 そのため、[イーサリアムの量子耐性](https://consensys.net/blog/developers/how-will-quantum-supremacy-affect-blockchain/)をできるだけ早く実現する必要があります。 -イーサリアムのデベロッパーが直面している課題として、現在のプルーフ・オブ・ステークのプロトコルが、有効なブロックの投票を集約するために、非常に効率的な署名スキームであるBLSに依存していることです。 この署名スキームは、量子コンピューターによって破られてしまう可能性があります。一方、量子耐性のある代替手段は、計算効率がそれほど良くありません。 +イーサリアムのデベロッパーが直面している課題は、現在の[プルーフ・オブ・ステーク](/glossary/#pos)のプロトコルが、有効な[ブロック](/glossary/#block)の投票を集約するために、非常に効率的な署名スキームであるBLSに依存していることです。 この署名スキームは、量子コンピューターによって破られてしまう可能性があります。一方、量子耐性のある代替手段は、計算効率がそれほど良くありません。 -イーサリアムでは、暗号秘密を生成するために[「KZG」コミットメントスキーム](/roadmap/danksharding/#what-is-kzg)が広く使われています。しかし、このスキームは量子コンピュータによって破られる可能性があります。 現在は、多くのユーザーが生成したランダム性を使用して「信頼できるセットアップ」として回避されており、量子コンピューターによるリバースエンジニアリングができないようになっています。 しかし、理想的には、量子安全暗号を組み込むことで、脆弱性を根本的に解決することが望まれます。 BLSスキームの効率的な代替となる可能性のある2つの主要なアプローチとして、[STARKベース](https://hackmd.io/@vbuterin/stark_aggregation)と[ラティスベース](https://medium.com/asecuritysite-when-bob-met-alice/so-what-is-lattice-encryption-326ac66e3175)の署名スキームがあります。 これらについては現在、研究および試作中です。 +イーサリアムでは、暗号秘密を生成するために[「KZG」コミットメントスキーム](/roadmap/danksharding/#what-is-kzg)が広く使われています。しかし、このスキームは量子コンピュータによって破られる可能性があります。 現在は、多くのユーザーが生成したランダム性を使用して「信頼できるセットアップ」として回避されており、量子コンピューターによるリバースエンジニアリングができないようになっています。 しかし、理想的には、量子安全暗号を組み込むことで、脆弱性を根本的に解決することが望まれます。 BLSスキームの効率的な代替となる可能性のある2つの主要なアプローチとして、[STARKベース](https://hackmd.io/@vbuterin/stark_aggregation)と[ラティスベース](https:/ /medium.com/asecuritysite-when-bob-met-alice/so-what-is-lattice-encryption-326ac66e3175)の署名スキームがあります。 **これらについては現在、研究および試作中です**。 KZGと信頼できるセットアップについての詳細 @@ -23,13 +23,13 @@ template: roadmap 複雑なシステムでは、攻撃者が悪用できるバグや脆弱性が発生しやすくなります。 そのため、イーサリアムは、ロードマップの中で、不要なコードを削除したり、改善したりして、システムを簡素化することを目指しています。 無駄のないシンプルなコードベースにすることで、デベロッパーは保守、理解しやすくなります。 -[イーサリアム仮想マシン(EVM)](/developers/docs/evm)をよりシンプルで効率的なものにするアップデートが予定されています。 その一環として、[SELFDESTRUCTオペコードが削除](https://hackmd.io/@vbuterin/selfdestruct)されます。このコマンドはめったに使用されなくなりましたが、状況によっては使用すると危険を伴う場合があります。例えば、特にイーサリアムのストレージモデルに対する将来のアップグレードと組み合わせた場合です。 イーサリアムクライアントは、現在でも完全に削除可能な古いトランザクションタイプをサポートしています。 また、ガスの計算方法も改善される予定です。暗号操作を支える算術演算に対して、より効率的な方法が導入されます。 +[イーサリアム仮想マシン(EVM)](/developers/docs/evm)をよりシンプルで効率的なものにするアップデートが予定されています。 その一環として、[SELFDESTRUCTオペコードが削除](https://hackmd.io/@vbuterin/selfdestruct)されます。このコマンドはめったに使用されなくなりましたが、状況によっては使用すると危険を伴う場合があります。例えば、特にイーサリアムのストレージモデルに対する将来のアップグレードと組み合わせた場合です。 [イーサリアムクライアント](/glossary/#consensus-client)は、現在では完全に削除可能ないくつかの古いトランザクションタイプをまだサポートしています。 また、[ガス](/glossary/#gas)の計算方法も改善される可能性があり、暗号論的操作を支える演算について、より効率的な方法が導入できます。 同様に、現在のイーサリアムクライアントの他の部分もアップデートされる可能性があります。 一例として現在は、実行クライアントとコンセンサスクライアントが異なるデータ圧縮方式を使用しています。 この圧縮方式をネットワーク全体で統一すれば、クライアント間でのデータ共有がより簡単で直感的になります。 ## 現在の進行状況 {#current-progress} -イーサリアムの将来的な安全性を確保するために必要なアップグレードの多くは、まだ研究段階です。実装には数年かかると考えられており、 SELF-DESTRUCTの削除や、実行クライアントとコンセンサスクライアントで使用される圧縮方式の統一などのアップグレードは、量子耐性のある暗号よりも早く実現される可能性があります。 +イーサリアムの将来的な安全性を確保するために必要なアップグレードの多くは、**まだ研究段階で実装には数年かかると考えられています**。 SELF-DESTRUCTの削除や、実行クライアントとコンセンサスクライアントで使用される圧縮方式の統一などのアップグレードは、量子耐性のある暗号よりも早く実現される可能性があります。 **参考文献** diff --git a/public/content/translations/ja/roadmap/index.md b/public/content/translations/ja/roadmap/index.md index 5a303e4f393..26f277bdeab 100644 --- a/public/content/translations/ja/roadmap/index.md +++ b/public/content/translations/ja/roadmap/index.md @@ -3,7 +3,7 @@ title: イーサリアムロードマップ description: イーサリアムのスケーラビリティ、セキュリティ、サステナビリティを改善する工程 lang: ja template: roadmap -image: /roadmap/roadmap-ux.png +image: /heroes/roadmap-hub-hero.jpg alt: "イーサリアムロードマップ" summaryPoints: buttons: @@ -61,7 +61,7 @@ buttons:-イーサリアムのロードマップは、研究者と開発者たちが長年かけて築き上げてきたものです。このプロトコルは非常に技術的な内容ではあるものの、やる気があれば誰でも参加することができます。 新しいアイデアは、通常、[ethresear.ch](https://ethresear.ch/)、[イーサリアム・マジシャンズ](https://www.figma.com/exit?url=https%3A%2F%2Fethereum-magicians.org%2F) 、イーサリアム研究開発のDiscordサーバーなどのフォーラムで議論されます。 議論の内容は、新たに見つかった脆弱性への対応、アプリケーションレイヤーで活動する組織(dAppや取引所など)からの提案、エンドユーザーにとっての既知の摩擦(コストやトランザクション速度など)への対応だったりします。 新しいアイデアが成熟すると、[イーサリアム改善提案](https://eips.ethereum.org/)として提案できます。 このアイデアの創出は、誰でも参加できるオープンなプロセスです。コミュニティのメンバーであれば、いつでも議論に参加できます。 +イーサリアムのロードマップは、研究者と開発者たちが長年かけて築き上げてきたものです。このプロトコルは非常に技術的な内容ではあるものの、やる気があれば誰でも参加することができます。 新しいアイデアは、通常、[ethresear.ch](https://ethresear.ch/)、[イーサリアム・マジシャンズ](https://ethereum-magicians.org) 、イーサリアム研究開発のDiscordサーバーなどのフォーラムで議論されます。 議論の内容は、新たに見つかった脆弱性への対応、アプリケーションレイヤーで活動する組織( [dApp](/glossary/#dapp)や取引所など)からの提案、エンドユーザーにとっての既知の摩擦(コストやトランザクション速度など)への対応だったりします。 新しいアイデアが成熟すると、[イーサリアム改善提案](https://eips.ethereum.org/)として提案できます。 このアイデアの創出は、誰でも参加できるオープンなプロセスです。コミュニティのメンバーであれば、いつでも議論に参加できます。 [イーサリアムにおけるガバナンスの詳細](/governance/) @@ -70,42 +70,42 @@ buttons: ## イーサリアムのロードマップは時間とともに変化しますか? {#will-ethereums-roadmap-change-over-time} -はい、ほぼ間違いなく変化します。 ロードマップは、現在のイーサリアムをアップグレードするための計画です。短期的および将来にわたる長期的な計画の両方をカバーしています。 新しい情報技術が使えるようになると、ロードマップも変更される可能性があります。 +**はい、ほぼ間違いなく変化します。** ロードマップは、現在のイーサリアムをアップグレードするための計画です。短期的および将来にわたる長期的な計画の両方をカバーしています。 新しい情報技術が使えるようになると、ロードマップも変更される可能性があります。 イーサリアムのロードマップは、イーサリアムを改善するための目的の集合と考えてください。 いわば、コアの研究者と開発者が考えた、イーサリアムが目指すべき最適なパスの仮説です。 ## ロードマップに終わりはありますか? {#when-will-the-roadmap-be-finished} -イーサリアムでは、今後6か月の間に、ステーキングの引き出しなどのアップグレードを実装します 。一方、耐量子暗号などのアップグレードは優先度が低く、今後5〜10年間は実装されないかもしれません。 イーサリアムは、多数のロードマップアイテムを同時に進めており、それぞれ異なる速度で開発されています。そのため、各アップグレードの正確なタイミングを予測するのは難しくなっています。 アップグレードの緊急性は、時間の経過とともに外部要因によって変化する可能性があります。例えば、量子コンピューターの性能と普及が急速に進むにつれて、耐量子暗号の緊急性がますます高まっていくかもしれません。 +一部のアップグレードについては、優先順位が低く、5~10年間は実装されない可能性があります(例: 量子耐性)。 イーサリアムは、多数のロードマップアイテムを同時に進めており、それぞれ異なる速度で開発されています。そのため、**各アップグレードの正確なタイミングを予測するのは難しくなっています**。 アップグレードの緊急性は、時間の経過とともに外部要因によって変化する可能性があります。例えば、量子コンピューターの性能と普及が急速に進むにつれて、耐量子暗号の緊急性がますます高まっていくかもしれません。 イーサリアムの発展を考えるには、生物学的進化を参考にするのも1つの方法です。 新しい課題に適応し、適応度を維持できるネットワークは、より成功する可能性が高くなります。そのため、ネットワークのパフォーマンスが上がるにつれて、スケーラブルで安全なプロトコルが必要になります。またプロトコルの変更を最小限に抑え、変化に対して耐性を持つことも重要です。 ## アップグレードをするには、何が必要ですか? {#do-i-have-to-do-anything-when-there-is-an-upgrade} -アップグレードは、基本的にエンドユーザーに影響しません。しかし、より良いユーザーエクスペリエンス、より安全なプロトコル、イーサリアムとのやり取りにおいてより多くの選択肢などを提供することについては、影響が考えられます。 エンドユーザーは、アップグレードについて何もする必要はありません。資産を保護するためにも、特別なことをする必要はありません。 ただし、ノードオペレーターは、アップグレードの準備のためにクライアントを更新する必要があります。 一部のアップグレードは、アプリケーションデベロッパーにとって変更となる可能性があります。 例えば、履歴の有効期限におけるアップグレードでは、アプリケーションデベロッパーは、新しい情報源から履歴データを取得することになります。 +アップグレードは、基本的にエンドユーザーに影響しません。しかし、より良いユーザーエクスペリエンス、より安全なプロトコル、イーサリアムとのやり取りにおいてより多くの選択肢などを提供することについては、影響が考えられます。 **通常のユーザーは、アップグレードについて何もする必要はありません**。資産を保護するためにも、特別なことをする必要はありません。 ただし、[ノード](/glossary/#node)オペレーターは、アップグレードの準備のためにクライアントを更新する必要があります。 一部のアップグレードは、アプリケーションデベロッパーにとって変更となる可能性があります。 例えば、履歴の有効期限におけるアップグレードでは、アプリケーションデベロッパーは、新しい情報源から履歴データを取得することになります。 ## バージやスプラージなどは何を指していますか? {#what-about-the-verge-splurge-etc} -[ヴィタリック・ブテリンは、イーサリアムのロードマップの構想を提案しました](https://twitter.com/VitalikButerin/status/1588669782471368704)が、その内容は、イーサリアムのアーキテクチャへの影響別に、個別のカテゴリに分類されていました。 提案内容は、以下のとおりです。 +[ヴィタリック・ブテリンは、イーサリアムのロードマップの構想を提案しました](https://twitter.com/VitalikButerin/status/1741190491578810445)が、その内容は、イーサリアムのアーキテクチャへの影響別に、いくつかのカテゴリに分類されていました。 提案内容は、以下のとおりです。 -- マージ: プルーフ・オブ・ワークからプルーフ・オブ・ステークへの移行に関連するアップグレード -- サージ: ロールアップとデータシャーディングによるスケーラビリティ向上に関連するアップグレード -- スカージ: MEVからの検閲耐性、分散化、プロトコルのリスクに関連するアップグレード -- バージ: ブロックの検証をより簡単にするアップグレード -- パージ: ノード実行における計算コストの削減とプロトコルの簡素化に関連するアップグレード -- スプラージ: これまでのカテゴリに分類できないその他のアップグレード +- **マージ**: [プルーフ・オブ・ワーク](/glossary/#pow)から[プルーフ・オブ・ステーク](/glossary/#pos)への移行に関連するアップグレード +- **サージ**: [ロールアップ](/glossary/#rollups)とデータシャーディングによるスケーラビリティ向上に関連するアップグレード +- **スカージ**: [MEV](/glossary/#mev)がもたらす検閲耐性、分散化、プロトコルのリスクに関連するアップグレード +- **バージ**: [ブロック](/glossary/#block)の検証をより簡単にするアップグレード +- **パージ**: ノード実行における計算コストの削減とプロトコルの簡素化に関連するアップグレード +- **スプラージ**: これまでのカテゴリに分類できないその他のアップグレード よりシンプルでよりユーザーに寄り添ったモデルを目指すため、この用語は使用しないことにしました。 ヴィタリックが提案した構想はそのままですが、用語をよりユーザーにわかりやすいものに変更します。 ## シャーディングとは何ですか? {#what-about-sharding} -シャーディングでは、イーサリアムのブロックチェーンを分割する技術です。バリデータのサブセットは、それぞれのチェーンでデータを検証する役割を担います。 これは、もともとイーサリアムをスケーリングする方法として開発されました。 しかし、レイヤー2ロールアップの開発が予想以上に進み、すでにさまざまなスケーリング機能を提供できるようになりました。また、プロトダンクシャーディングの実装後には、さらに多くの機能を提供する予定となっているため、 「シャードチェーン」は不要になり、ロードマップから削除されました。 +シャーディングは、イーサリアムのブロックチェーンを分割する技術です。[バリデータ](/glossary/#validator)のサブセットは、それぞれのチェーンでデータを検証する役割を担います。 これは、もともとイーサリアムをスケーリングする方法として開発されました。 しかし、[レイヤー2](/glossary/#layer-2)ロールアップの開発が予想以上に進み、すでにさまざまなスケーリング機能を提供できるようになりました。また、プロトダンクシャーディングの実装後には、さらに多くの機能を提供する予定となっているため、 「シャードチェーン」は不要になり、ロードマップから削除されました。 ## 特定の技術アップグレードについての情報 {#looking-for-specific-technical-upgrades} diff --git a/public/content/translations/ja/roadmap/merge/index.md b/public/content/translations/ja/roadmap/merge/index.md index e6000985601..87cc7ab0dbf 100644 --- a/public/content/translations/ja/roadmap/merge/index.md +++ b/public/content/translations/ja/roadmap/merge/index.md @@ -11,7 +11,7 @@ summaryPoint3: マージとは、元のイーサリアムメインネットが summaryPoint4: マージによりイーサリアムのエネルギー消費が99.95%削減されました。 --- - ETH2とは何ですか?
-「Eth2」という用語は、プルーフ・オブ・ステークへ移行する前、イーサリアムの今後を説明するために広く使用されていましたが、より正確な用語の方が好ましいということで段階的に廃止されました。元々は、プルーフ・オブ・ステークへの移行前のネットワークと移行後のネットワークを区別するために使われていました。また、異なるイーサリアムクライアントを指す場合もありました。具体的には、実行クライアントをETH1クライアント、コンセンサスクライアントをETH2クライアントと呼んでいました。
+「Eth2」という用語は、プルーフ・オブ・ステークへ移行する前、イーサリアムの今後を説明するために広く使用されていましたが、より正確な用語の方が好ましいということで段階的に廃止されました。元々は、プルーフ・オブ・ステークへの移行前のネットワークと移行後のネットワークを区別するために使われていました。また、異なるイーサリアムクライアントを指す場合もありました。具体的には、実行クライアントをETH1クライアント、コンセンサスクライアントをETH2クライアントと呼んでいました。
+ マージは、2022年9月15日に行われました。 これにより、イーサリアムはプルーフ・オブ・ステーク・コンセンサスへの移行を完了し、公式にプルーフ・オブ・ワークは廃止されました。この移行により、エネルギー消費量が最大99.95%削減されました。 diff --git a/public/content/translations/ja/roadmap/merge/issuance/index.md b/public/content/translations/ja/roadmap/merge/issuance/index.md index fb07218b074..91c8df33cd2 100644 --- a/public/content/translations/ja/roadmap/merge/issuance/index.md +++ b/public/content/translations/ja/roadmap/merge/issuance/index.md @@ -127,7 +127,7 @@ ETHの発行とは逆に、イーサリアムではETHがバーンされるレ したがって、例えば`X`(一日のETH発行量)がステークされた合計ETH量をもととして1800ETHになったとすると、`f(X)`(すべての発行量を相殺するために必要なgwei) は、`17gwei`となります(有効数字2桁の場合) 。 -## さらに学びたい方へ {#further-reading} +## 参考文献 {#further-reading} - [マージ](/roadmap/merge/) - [Ultrasound.money](https://ultrasound.money/) - _ETHの発行とバーンをリアルタイムで可視化したダッシュボードが利用可能_ diff --git a/public/content/translations/ja/roadmap/pbs/index.md b/public/content/translations/ja/roadmap/pbs/index.md index 6266e5ef6b5..2a23d9fafc3 100644 --- a/public/content/translations/ja/roadmap/pbs/index.md +++ b/public/content/translations/ja/roadmap/pbs/index.md @@ -20,7 +20,7 @@ lang: ja-経済力のある組織は、特定のアドレスのトランザクションをブロックするようにバリデータに圧力をかけてくるかもしれません。 バリデータは、ブラックリストに登録されたアドレスのトランザクションを検出し、その組織が提案したブロックを除外することで、この圧力に対抗します。 PBSを導入すると、ブロック提案者は、自身のブロックでどのトランザクションをブロードキャストしているのか分からなくなるので、この対抗策は使えなくなります。 住んでいる地域で検閲が法律になっている場合、個人やアプリが検閲ルールに準拠しなければならないことがあります。 これらのケースでは、コンプライアンスはアプリケーションレベルで行われ、プロトコルはパーミッションレスで検閲が行われない状態のままです。 +経済力のある組織は、特定のアドレスのトランザクションをブロックするようにバリデータに圧力をかけてくるかもしれません。 バリデーターは、自分たちのトランザクションプール内のブラックリストに載ったアドレスを検出し、自分たちが提案するブロックからそれらを除外することによって、この圧力に対応します。 PBSを導入すると、ブロック提案者は、自身のブロックでどのトランザクションをブロードキャストしているのか分からなくなるので、この対抗策は使えなくなります。 住んでいる地域で検閲が法律になっている場合、個人やアプリが検閲ルールに準拠しなければならないことがあります。 これらのケースでは、コンプライアンスはアプリケーションレベルで行われ、プロトコルはパーミッションレスで検閲が行われない状態のままです。 diff --git a/public/content/translations/ja/roadmap/scaling/index.md b/public/content/translations/ja/roadmap/scaling/index.md index 7db90396ab7..b113df15b24 100644 --- a/public/content/translations/ja/roadmap/scaling/index.md +++ b/public/content/translations/ja/roadmap/scaling/index.md @@ -11,7 +11,7 @@ template: roadmap-
+- **[Starknet](https://starkware.co/starknet/)** - _StarkNetは、StarkWareによって開発されたEVM互換のレイヤー2スケーリングソリューションです。_ ## ZKロールアップの参考文献 {#further-reading-on-zk-rollups} diff --git a/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md b/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md index 3dd8f86f527..88e894bf98c 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/formal-verification/index.md @@ -44,7 +44,7 @@ lang: ja 形式的仕様記述により、プログラム実行の正しさを数学的に論証することが可能となります。 形式モデルと同様、形式仕様記述は高水準のプロパティもしくはスマートコントラクトの実装の低水準の挙動をとらえることができます。 -形式仕様記述はプログラム論理を用いて導出され、それによってプログラムのプロパティが形式的に論証できるようになります。 プログラム論理が備えている形式規則により、プログラムのしかるべき挙動が(数学的に)表現されます。 [到達可能性論理 ](https://en.wikipedia.org/wiki/Reachability_problem)、[時相論理](https://en.wikipedia.org/wiki/Temporal_logic)、[ホーア論理](https://en.wikipedia.org/wiki/Hoare_logic)を含む様々なプログラム論理が形式仕様記述に用いられます。 +形式仕様記述はプログラム論理を用いて導出され、それによってプログラムのプロパティが形式的に論証できるようになります。 プログラム論理が備えている形式規則により、プログラムのしかるべき挙動が(数学的に)表現されます。 [到達可能性論理](https://en.wikipedia.org/wiki/Reachability_problem)、[時相論理](https://en.wikipedia.org/wiki/Temporal_logic)、[ホーア論理](https://en.wikipedia.org/wiki/Hoare_logic)を含む様々なプログラム論理が形式仕様記述に用いられます。 スマートコントラクトの形式仕様記述は**高水準**な仕様記述と**低水準**な仕様記述に大別されます。 いずれの場合でも、分析対象のシステムのプロパティを適切かつ一義的に記述できなければなりません。 diff --git a/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md b/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md index 0d861f36794..d6a9f9ccab9 100644 --- a/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md +++ b/public/content/translations/ja/developers/docs/smart-contracts/testing/index.md @@ -149,8 +149,8 @@ Solidityスマートコントラクト用の単体テストフレームワーク 単体テストでは、コントラクトの関数を個別にデバッグしましたが、統合テストでは、スマートコントラクトのコンポーネント全体を評価します。 統合テストでは、スマートコントラクト間の呼び出しで発生する問題や、同じスマートコントラクト内の異なる関数間のやり取りで発生する問題を検出できます。 例えば、[継承](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance)や依存性注入などの機能が正しく動作するかどうかを確認するのに役立ちます。 -統合テストは、コントラクトがモジュラー型アーキテクチャを採用していたり、実行中に他のオンチェーンコントラクトと接続する場合に有用です。 統合テストを実行する方法の1つは、([Forge](https://book.getfoundry.sh/forge/fork-testing)や[Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks)などのツールを使用して)ブロックチェーンの- 現在のロールアップはイーサリアムのレイヤー1よりも約3~8倍安い
+- 今日のロールアップはイーサリアムレイヤー1よりも約5~20倍安価
- ゼロ知識ロールアップはまもなく、約40~100倍安くなる予定
- イーサリアムの今後の仕様変更により、さらに約100~1000倍のスケーリングが実現
- ユーザーは、トランザクションのコストが0.001ドル未満というメリットを享受
@@ -24,26 +24,28 @@ template: roadmap ### プロトダンクシャーディング {#proto-danksharding} -ロールアップのデータは、イーサリアム上に永続的に保存されるため、コストがかかります。 ユーザーは、ロールアップで支払うトランザクションコストの90%以上を、データストレージに費やしています。 トランザクションコストを削減するため、新たに「ブロブ」と呼ばれる一時ストレージ領域にデータを移動できるようになりました。 ブロブは、永続的でないため、比較的コストが安くなっており、不要になるとイーサリアムから削除されます。 ロールアップデータの長期保存は、ロールアップオペレータ、取引所、インデックスサービスなど、それを必要とする人々の役割となります。 イーサリアムへのブロブトランザクションの追加は、「プロトダンクシャーディング」と呼ばれるアップグレードの一部であり、 2023年後半の比較的早い時期にリリースされる予定です。 +ロールアップのデータは、歴史的にイーサリアム上に永続的に保存されており、そのコストは高いです。 ユーザーは、ロールアップで支払うトランザクションコストの90%以上を、データストレージに費やしています。 トランザクションコストを削減するため、新たに「ブロブ」と呼ばれる一時ストレージ領域にデータを移動できるようになりました。 ブロブは、永続的でないため、比較的コストが安くなっており、不要になるとイーサリアムから削除されます。 ロールアップデータの長期保管は、ロールアップオペレーター、取引所、インデキシングサービスなど、そのデータが必要な人々の責任となります。 イーサリアムへのブロブトランザクションの追加は、「プロトダンクシャーディング」と呼ばれるアップグレードの一部であり、 -プロトダンクシャーディングによって、イーサリアムプロトコルにブロブトランザクションが組み込まれると、イーサリアムのブロックにたくさんのブロブを追加できるようになります。 これにより、イーサリアムのスループットが大幅に向上し(100倍以上)、トランザクションのコストも下げることができます。 +プロトダンクシャーディングを使用すると、多くのブロブをイーサリアムブロックに追加することが可能です。 これにより、イーサリアムのスループットが大幅に向上し(100倍以上)、一方でトランザクションコストを大幅に下げることができます。 -### ダークシャーディング {#danksharding} +### ダンクシャーディング {#danksharding} -ブロブデータ拡張の第2段階は、大変複雑です。理由は、ロールアップデータがネットワーク上で利用可能であることを確認する新しい方法が必要だからです。また、バリデータの役割を分離して、ブロック構築とブロック提案に分けることも必要です。 さらに、バリデータがブロブデータの小さなサブセットを検証したことを暗号的に証明する方法も必要になります。 +ブロブデータ拡張の第2段階は、大変複雑です。理由は、ロールアップデータがネットワーク上で利用可能であることを確認する新しい方法が必要だからです。また、[バリデータ](/glossary/#validator)の役割を分離して、[ブロック](/glossary/#block)構築とブロック提案に分けることも必要です。 さらに、バリデータがブロブデータの小さなサブセットを検証したことを暗号的に証明する方法も必要になります。 -この2番目のステップは、[「ダンクシャーディング」](/roadmap/danksharding/)と呼ばれます。 完全に実装されるまでには、数年かかると予想されています。 ダンクシャーディングは、[ブロック構築とブロック提案を分離する](/roadmap/pbs)などの他の開発に依存しています。また、データが利用可能であることを効率的に確認するために、[データ可用性サンプリング(DAS)](/developers/docs/data-availability)と呼ばれる、数キロバイトのデータをランダムにサンプリングする新しいネットワーク設計も採用しています。 +この2番目のステップは、[「ダンクシャーディング」](/roadmap/danksharding/)と呼ばれます。 完全に実装されるまでには、**数年かかると予想されています**。 ダンクシャーディングは、[ブロック構築とブロック提案を分離する](/roadmap/pbs)などの他の開発に依存しています。また、データが利用可能であることを効率的に確認するために、[データ可用性サンプリング(DAS)](/developers/docs/data-availability)と呼ばれる、数キロバイトのデータをランダムにサンプリングする新しいネットワーク設計も採用しています。ダンクシャーディングの詳細 ## 分散型ロールアップ {#decentralizing-rollups} -[ロールアップ](/layer-2)は、イーサリアムのスケーラビリティ問題を解決する技術として、すでに実用化されています。 [ロールアッププロジェクトの豊富なエコシステム](https://l2beat.com/scaling/tvl)は、さまざまなセキュリティ保証を備えており、ユーザーは迅速かつ安価にトランザクションを実行できます。 しかし、ロールアップは、集中型のシーケンサー(トランザクションをイーサリアムに送信する前にすべてのトランザクション処理と集約を行うコンピューター)に依存しています。 シーケンサーは、オペレーターが制裁を受けたり、賄賂を受け取ったり、その他の方法で妨害される可能性があるため、検閲に対して脆弱です。 同時に、[ロールアップでは受信データを検証する方法が異なります](https://l2beat.com)。 最善の方法としては、「証明者」が不正証明または有効性証明を提出することですが、すべてのロールアップに備わっているわけではありません。 さらに、有効性証明および不正証明を使用するロールアップであっても、既知の証明者の小さなプールを使用するものがあります。 そのため、イーサリアムをスケーリングするための次の重要なステップは、シーケンサーと証明者を実行する責任をより多くの人々に分散することです。 +[ロールアップ](/layer-2)は、イーサリアムのスケーラビリティ問題を解決する技術として、すでに実用化されています。 [ロールアッププロジェクトの豊富なエコシステム](https://l2beat.com/scaling/tvl)は、さまざまなセキュリティ保証を備えており、ユーザーは迅速かつ安価にトランザクションを実行できます。 しかし、ロールアップは、集中型のシーケンサー(トランザクションをイーサリアムに送信する前にすべてのトランザクション処理と集約を行うコンピューター)に依存しています。 シーケンサーは、オペレーターが制裁を受けたり、賄賂を受け取ったり、その他の方法で妨害される可能性があるため、検閲に対して脆弱です。 同時に、[ロールアップでは受信データを検証する方法が異なります](https://l2beat.com)。 最善の方法としては、「証明者」が[不正証明](/glossary/#fraud-proof)または有効性証明を提出することですが、すべてのロールアップに備わっているわけではありません。 さらに、有効性証明および不正証明を使用するロールアップであっても、既知の証明者の小さなプールを使用するものがあります。 そのため、イーサリアムをスケーリングするための次の重要なステップは、シーケンサーと証明者を実行する責任をより多くの人々に分散することです。ロールアップの詳細 ## 現在の進行状況 {#current-progress} -プロトダンクシャーディングは、ロードマップの初期段階で実装される予定です。 セットアップに必要な分散型の計算ステップはすでに開発済みです。また、いくつかのクライアントがブロブデータを処理できるプロトタイプも実装済みです。 完全なダンクシャーディングは、他のロードマップアイテムの完了を待つ必要があるため、おそらく数年先になるでしょう。 分散型ロールアップのインフラストラクチャは、段階的なプロセスを踏みます。たくさんの異なるロールアップが存在し、各システムで小さな違いがあります。そのため、それぞれ違った速度で完全に分散化されることになるでしょう。 +プロトダンクシャーディングは、これらのロードマップ項目の中で最初に、2024年3月のカンクン-デネブ(「デンクン」)ネットワークアップグレードの一環として実装される予定です。 完全なダンクシャーディングは、他のロードマップアイテムの完了を待つ必要があるため、**おそらく数年先になるでしょう**。 分散型ロールアップのインフラストラクチャは、段階的なプロセスを踏みます。たくさんの異なるロールアップが存在し、各システムで小さな違いがあります。そのため、それぞれ違った速度で完全に分散化されることになるでしょう。 + +[デンクンネットワークアップグレードの詳細](/roadmap/dencun/)diff --git a/public/content/translations/ja/roadmap/secret-leader-election/index.md b/public/content/translations/ja/roadmap/secret-leader-election/index.md index 85e4c933f25..780aeb8b375 100644 --- a/public/content/translations/ja/roadmap/secret-leader-election/index.md +++ b/public/content/translations/ja/roadmap/secret-leader-election/index.md @@ -33,7 +33,7 @@ SSLE(シークレット・シングル・リーダー選出)では、選出さ ## シークレット・非シングル・リーダー選出(SnSLE) {#secret-non-single-leader-election} -プルーフ・オブ・ワークにおいてブロックの提案を決定する方法と同様に、バリデータが各スロットでブロックを提案する機会をランダムに与える仕組みもあり、**シークレット・非シングル・リーダー選出(SnSLE)**と呼ばれています。 例えば、現在のプロトコルでバリデータをランダムに選択するために使われているRANDAO関数を活用すれば、簡単に実現できます。 RANDAOを使うアイデアとは、多くの独立しているバリデータから送信されたハッシュを混合することで、十分な乱数が生成するというものです。 SnSLEにおいて、これらのハッシュを使って、次のブロック提案者を選ぶことができます。例えば、最小値のハッシュの選択です。 有効なハッシュ値の範囲を設定することで、各スロットでバリデータが選ばれる可能性を調整することができます。 ハッシュ値が`2^256 * 5 / N` (`N` = アクティブなバリデータ数)未満でなければならないとアサートすると、各スロットで個々のバリデータが選択される可能性は、`5/N`になります。 この例では、少なくとも1人の提案者が各スロットで有効なハッシュを生成する確率は99.3%になります。 +プルーフ・オブ・ワークにおいてブロックの提案を決定する方法と同様に、バリデータが各スロットでブロックを提案する機会をランダムに与える仕組みもあり、シークレット・非シングル・リーダー選出(SnSLE)と呼ばれています。 例えば、現在のプロトコルでバリデータをランダムに選択するために使われているRANDAO関数を活用すれば、簡単に実現できます。 RANDAOを使うアイデアとは、多くの独立しているバリデータから送信されたハッシュを混合することで、十分な乱数が生成するというものです。 SnSLEにおいて、これらのハッシュを使って、次のブロック提案者を選ぶことができます。例えば、最小値のハッシュの選択です。 有効なハッシュ値の範囲を設定することで、各スロットでバリデータが選ばれる可能性を調整することができます。 ハッシュ値が`2^256 * 5 / N` (`N` = アクティブなバリデータ数)未満でなければならないとアサートすると、各スロットで個々のバリデータが選択される可能性は、`5/N`になります。 この例では、少なくとも1人の提案者が各スロットで有効なハッシュを生成する確率は99.3%になります。 ## 現在の進行状況 {#current-progress} diff --git a/public/content/translations/ja/roadmap/security/index.md b/public/content/translations/ja/roadmap/security/index.md index 981c6e3c9a0..39b32db8977 100644 --- a/public/content/translations/ja/roadmap/security/index.md +++ b/public/content/translations/ja/roadmap/security/index.md @@ -7,27 +7,27 @@ alt: "イーサリアムロードマップ" template: roadmap --- -イーサリアムは、すでに非常に安全な分散型スマートコントラクトプラットフォームですが、 今後もあらゆる種類の攻撃に耐えられるように、まだまだ改善の余地があります。 具体的には、イーサリアムクライアントにおける競合ブロックの処理方法を少しだけ変更したり、ネットワークがブロックを [「確定済み」](/developers/docs/consensus-mechanisms/pos/#finality)(攻撃者が多大な経済的損失を受けないと変更できない)にする速度を上げたりするなどです。 +イーサリアムは、**すでに非常に安全**な分散型[スマートコントラクト](/glossary/#smart-contract)プラットフォームですが、 今後もあらゆる種類の攻撃に耐えられるように、まだまだ改善の余地があります。 具体的には、[イーサリアムクライアント](/glossary/#consensus-client)における競合[ブロック](/glossary/#block)の処理方法を少しだけ変更したり、ネットワークがブロックを [「確定済み」](/developers/docs/consensus-mechanisms/pos/#finality)(攻撃者が多大な経済的損失を受けないと変更できない)と判断する速度を上げたりするなどです。 -また、ブロック提案者にブロックの実際の内容を見えないようにすることで、トランザクションの検閲をさらに困難にする改善策や、クライアントがいつ検閲を行ったかを識別する新しい方法もあります。 これらの改善策が合わさることで、プルーフ・オブ・ステークにおけるプロトコルがアップグレードされ、個人から企業のユーザーまで、イーサリアム上のアプリ、データ、資産から即座に信用を得ることができます。 +また、ブロック提案者にブロックの実際の内容を見えないようにすることで、トランザクションの検閲をさらに困難にする改善策や、クライアントがいつ検閲を行ったかを識別する新しい方法もあります。 これらの改善策が合わさることで、[プルーフ・オブ・ステーク](/glossary/#pos)におけるプロトコルがアップグレードされ、個人から企業のユーザーまで、イーサリアム上のアプリ、データ、資産を即座に信頼することができます。 ## ステーキングの引き出し {#staking-withdrawals} -イーサリアムのプルーフ・オブ・ワークからプルーフ・オブ・ステークへのアップグレードは、イーサリアムの先駆者たちが自分のイーサ(ETH)をデポジットコントラクトに「ステーキング」することで始まりました。 このステーキングに使われるETHは、ネットワークの保護に使われます。 ただし、このETHは、現時点ではロックされており、ユーザーに返すことはできません。 プルーフ・オブ・ステークのアップグレードでは、ステーキングしたETHの引き出しが可能になります。 これは、プルーフ・オブ・ステークのプロトコルが完全に機能するために重要な要素であり、ステーカーがETH報酬を自由に使えるようになることで、イーサリアムのセキュリティにも有益です。 なぜなら、ステーキングに流動性を求めるユーザーが、リキッドステーキングデリバティブ(LSD)に頼る必要がなくなるからです。LSDは、イーサリアムを集中化させる力になる可能性があります。 このアップグレードは、2023年4月12日に完了する予定です。 +イーサリアムの[プルーフ・オブ・ワーク](/glossary/#pow)からプルーフ・オブ・ステークへのアップグレードは、イーサリアムの先駆者たちが自分のETHをデポジットコントラクトに「ステーキング」することで始まりました。 このステーキングに使われるETHは、ネットワークの保護に使われます。 2回目のアップグレードが2023年4月12日にあり、ステーキングしたETHを引き出せるようになりました。 それ以降は、バリデータがETHを自由にステーキングしたり引き出したりできるようになりました。 引き出しについての詳細 ## 攻撃からの防御 {#defending-against-attacks} -引き出しが可能になった後にも、イーサリアムの[プルーフ・オブ・ステーク](/developers/docs/consensus-mechanisms/pos/)のプロトコルにはいくつかの改善点があります。 1つは、[ビューマージ](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739)と呼ばれる、より安全なフォーク選択アルゴリズムです。 これにより、高度なタイプの攻撃をさらに防ぐことができます。 +イーサリアムのプルーフ・オブ・ステーク・プロトコルには改善の余地があります。 1つは、[ビューマージ](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739)と呼ばれる、より安全な[フォーク](/glossary/#fork)選択アルゴリズムです。 これにより、特定の高度な攻撃がさらに困難になります。 -イーサリアムがブロックを確定させるまでの時間を短縮することで、ユーザーがより快適に利用できるようになります。また、攻撃者が、高度な「再編成」攻撃を行って直近のブロックの再シャッフルを試みることで、利益を得たり、特定のトランザクションを検閲しようとするのを防ぐことができます。 [**シングルスロット・ファイナリティ(SSF)**](/roadmap/single-slot-finality/)は、トランザクションが確定に至るまでの遅延時間を短縮する方法です。 現行のシステムでは、15分以内に生成されたブロックは、理論上攻撃者が他のバリデータにブロックの再構成を誘導できます。 SSFでは、この脆弱性が解消されます。 個人からアプリや取引所まで、全てのユーザーは、トランザクションが取り消されないという保証を迅速に受けられます。ネットワークでは、SSFによりあらゆる種類の攻撃を遮断することができます。 +イーサリアムがブロックを[ファイナライズ](/glossary/#finality)させるまでの時間を短縮することで、ユーザーがより快適に利用できるようになります。また、攻撃者が、高度な「再編成」攻撃を行って直近のブロックの再シャッフルを試みることで、利益を得たり、特定のトランザクションを検閲しようとするのを防ぐことができます。 [**シングルスロット・ファイナリティ(SSF)**](/roadmap/single-slot-finality/)は、トランザクションが**確定済みになるまでの遅延時間を短縮する方法**です。 現行のシステムでは、15分以内に生成されたブロックは、理論上攻撃者が他のバリデータにブロックの再構成を誘導できます。 SSFでは、この脆弱性が解消されます。 個人からアプリや取引所まで、全てのユーザーは、トランザクションが取り消されないという保証を迅速に受けられます。ネットワークでは、SSFによりあらゆる種類の攻撃を遮断することができます。シングルスロット・ファイナリティの詳細 ## 検閲からの防御 {#defending-against-censorship} -分散化は、個人や少数のグループのバリデータが、過剰な影響力を持ってしまうことを防ぐ効果があります。 新たなステーキングの技術は、イーサリアムのバリデータを可能な限り分散化した状態に保ち、ハードウェア、ソフトウェア、ネットワークの障害から保護します。 この新たなステーキングの技術では、複数のノード間でバリデータの責任を共有するソフトウェアも対象になっています。 これを、**分散バリデータ技術(DVT)**と呼びます。 DVTにより、複数のコンピュータが共同で検証を行うことで、冗長性とフォールトトレランスが向上します。そのため、ステーキングプールでは、DVTの使用が推奨されています。 DVTでは、バリデータ鍵を複数のシステムに分割します。これにより、1つのオペレータが複数のバリデータを実行できなくなり、 不正なオペレータによるイーサリアムへ攻撃が困難になります。 つまり、バリデータを個人ではなく、_コミュニティ_全体で実行することで、セキュリティを高めるというアイデアです。 +分散化は、個人や少数のグループの[バリデータ](/glossary/#validator)が、過剰な影響力を持ってしまうことを防ぐ効果があります。 新たなステーキングの技術は、イーサリアムのバリデータを可能な限り分散化した状態に保ち、ハードウェア、ソフトウェア、ネットワークの障害から保護します。 この新たなステーキングの技術では、複数の[ノード](/glossary/#node)間でバリデータの責任を共有するソフトウェアも対象になっています。 これを、**分散バリデータ技術(DVT)**と呼びます。 DVTにより、複数のコンピュータが共同で検証を行うことで、冗長性とフォールトトレランスが向上します。そのため、[ステーキングプール](/glossary/#staking-pool)では、DVTの使用が推奨されています。 DVTでは、バリデータ鍵を複数のシステムに分割します。これにより、1つのオペレータが複数のバリデータを実行できなくなり、 不正なオペレータによるイーサリアムへ攻撃が困難になります。 つまり、バリデータを個人ではなく、_コミュニティ_全体で実行することで、セキュリティを高めるというアイデアです。分散バリデータ技術の詳細 @@ -45,4 +45,4 @@ template: roadmap ## 現在の進行状況 {#current-progress} -ロードマップ上のセキュリティアップグレードの研究は進んでいますが、実装にはまだ時間がかかりそうです。 ビューマージ、PBS、SSF、SLEにおける次のステップは、仕様を決定し、プロトタイプの構築を開始することです。 +**ロードマップ上のセキュリティアップグレードの研究は進んでいますが**、実装にはまだ時間がかかりそうです。 ビューマージ、PBS、SSF、SLEにおける次のステップは、仕様を決定し、プロトタイプの構築を開始することです。 diff --git a/public/content/translations/ja/roadmap/single-slot-finality/index.md b/public/content/translations/ja/roadmap/single-slot-finality/index.md index add46d2a795..789329f292f 100644 --- a/public/content/translations/ja/roadmap/single-slot-finality/index.md +++ b/public/content/translations/ja/roadmap/single-slot-finality/index.md @@ -58,7 +58,7 @@ lang: ja ## 現在の進行状況 {#current-progress} -SSFはまだ研究段階です。 [バークルツリー](/roadmap/verkle-trees/)や[ダンクシャーディング](/roadmap/danksharding])などの他の大きなアップグレードが完了してから、数年後になるかもしれません。 +SSFはまだ研究段階です。 [バークルツリー](/roadmap/verkle-trees/)や[ダンクシャーディング](/roadmap/danksharding/)などの他の大きなアップグレードが完了してから、数年後になるかもしれません。 ## 参考文献 {#further-reading} diff --git a/public/content/translations/ja/roadmap/user-experience/index.md b/public/content/translations/ja/roadmap/user-experience/index.md index e9cf4e03df0..56fd8d07ef7 100644 --- a/public/content/translations/ja/roadmap/user-experience/index.md +++ b/public/content/translations/ja/roadmap/user-experience/index.md @@ -7,19 +7,19 @@ alt: "イーサリアムロードマップ" template: roadmap --- -イーサリアムを簡単に使用するためには、鍵やウォレットの管理からトランザクションの開始まで、さまざまな手順が必要です。 一般への普及を促進するには、これらの手順を簡略化して、イーサリアムを大幅に使いやすくする必要があります。また、Web2アプリのようなスムーズなユーザーエクスペリエンスを提供することで、パーミッションレスで検閲耐性のあるアクセスを体験できるようにしなければなりません。 +[鍵](/glossary/#key)や[ウォレット](/glossary/#wallet)の管理からトランザクションの開始まで、**イーサリアムを簡単に使用できるようにする必要があります**。 一般への普及を促進するには、イーサリアムを大幅に使いやすくする必要があります。[Web2](/glossary/#web2) アプリのようなスムーズなユーザーエクスペリエンスを提供することで、パーミッションレスで検閲耐性のあるアクセスを体験できるようにしなければなりません。 ## シードフレーズを超えて {#no-more-seed-phrases} イーサリアムのアカウントは、 「公開鍵」でアカウントを特定し、「秘密鍵」でメッセージに署名します。この鍵のペアを利用して、イーサリアムのアカウントは保護されています。 秘密鍵は、マスターパスワードのようなものです。この鍵があれば、イーサリアムアカウントに完全にアクセスすることができます。 イーサリアムのアカウントの操作は、銀行やWeb2アプリのように、ユーザーに代わって口座を管理する仕組みとは異なるため、戸惑う人もいるでしょう。 集中化されているサードパーティに依存することなくイーサリアムを一般に普及させるには、ユーザーが公開鍵と秘密鍵による暗号化や鍵管理を理解しなくても、自分の資産を保管し、自分のデータを管理できる簡単でスムーズな方法が必要です。 -これに対する解決策は、スマートコントラクトウォレットを使用してイーサリアムとやり取りすることです。 スマートコントラクトウォレットは、鍵の紛失や盗難に備えたアカウント保護、より優れた不正行為の検出や防御、新しい機能の追加など、さまざまなメリットをもたらします。 スマートコントラクトウォレットはすでに存在していますが、まだ使いにくいため、イーサリアムプロトコルがそれらをより便利に使えるようにサポートする必要があります。 この追加サポートは、アカウント抽象化と呼ばれています。 +これに対する解決策は、[スマートコントラクト](/glossary/#smart-contract)ウォレットを使用してイーサリアムとやり取りすることです。 スマートコントラクトウォレットは、鍵の紛失や盗難に備えたアカウント保護、より優れた不正行為の検出や防御、新しい機能の追加など、さまざまなメリットをもたらします。 スマートコントラクトウォレットはすでに存在していますが、まだ使いにくいため、イーサリアムプロトコルがそれらをより便利に使えるようにサポートする必要があります。 この追加サポートは、アカウント抽象化と呼ばれています。アカウント抽象化の詳細 ## 誰でも使えるノード -ノードを実行しているユーザーは、データを提供するサードパーティに依存せず、イーサリアムブロックチェーンと迅速かつプライバシーを保ち、パーミッションレスにやり取りができます。 しかし、現時点では、ノードを実行するには技術的な知識とかなりのディスク容量が必要でであるため、多くの人はノードを実行する代わりに仲介者に頼らざるを得ません。 +[ノード](/glossary/#node)を実行しているユーザーは、データを提供するサードパーティに依存せず、迅速かつプライバシーが保たれた形で、パーミッションレスにイーサリアム[ブロックチェーン](/glossary/#blockchain)とやり取りできます。 しかし、現時点では、ノードを実行するには技術的な知識とかなりのディスク容量が必要でであるため、多くの人はノードを実行する代わりに仲介者に頼らざるを得ません。 ノードの実行をより簡単にし、リソースの消費を大幅に削減するアップグレードを予定しています。 データの格納方法は、 スペース効率の高い**バークルツリー**と呼ばれるス構造に変更する予定です。 また、[ステートレス](/roadmap/statelessness)や[データ有効期限](/roadmap/statelessness/#data-expiry)の導入により、イーサリアム ノードはイーサリアム状態データ全体のコピーを保存する必要がなくなり、ハードディスク容量を大幅に削減できます。 [ライトノード](/developers/docs/nodes-and-clients/light-clients/)は、フルノードを実行することで得られる多くのメリットを提供しますが、携帯電話や単純なブラウザアプリ内でも簡単に実行できるようになります。 @@ -29,8 +29,8 @@ template: roadmap ## 現在の進行状況 {#current-progress} -スマートコントラクトウォレットはすでに利用可能ですが、それらをできるだけ分散化してパーミッションレスにするには、さらなるアップグレードが必要です。 EIP-4337は、イーサリアムのプロトコルへを変更せずに導入できる成熟した提案です。 EIP-4337で必要となる主要なスマートコントラクトは、2023年3月にデプロイされました。 +スマートコントラクトウォレットはすでに利用可能ですが、それらをできるだけ分散化してパーミッションレスにするには、さらなるアップグレードが必要です。 EIP-4337は、イーサリアムのプロトコルへを変更せずに導入できる成熟した提案です。 EIP-4337で必要となる主要なスマートコントラクトは、**2023年3月にデプロイされました**。 -完全なステートレスはまだ研究段階にあり、実装されるのは数年先になると考えられます。 データ有効期限を含む完全にステートレスになる工程には、いくつかのマイルストーンがあり、そのうちのいくつかは、近い将来に実装される可能性がありますが、 [バークルツリー](/roadmap/verkle-trees/)や[プロポーザー/ビルダーセパレーション](/roadmap/pbs/)などの他の工程が先に完了している必要があります。 +**完全なステートレスはまだ研究段階にあり**、実装されるのは数年先になると考えられます。 データ有効期限を含む完全にステートレスになる工程には、いくつかのマイルストーンがあり、そのうちのいくつかは、近い将来に実装される可能性がありますが、 [バークルツリー](/roadmap/verkle-trees/)や[プロポーザー/ビルダーセパレーション](/roadmap/pbs/)などの他の工程が先に完了している必要があります。 バークルツリーのテストネットは、すでに稼働しています。次のフェーズでは、バークルツリーを有効にしたクライアントをプライベートテストネットで実行し、次にパブリックテストネットで実行します。 コントラクトをテストネットにデプロイしたり、テストネットでクライアントを実行したりすることで、開発を進めるお手伝いができます。 diff --git a/public/content/translations/ja/security/index.md b/public/content/translations/ja/security/index.md index f1c4e537529..8b37744fa84 100644 --- a/public/content/translations/ja/security/index.md +++ b/public/content/translations/ja/security/index.md @@ -10,100 +10,11 @@ lang: ja-## ウェブセキュリティ入門 {#web-security} - -### 強力なパスワードの使用 {#use-strong-passwords} - -[アカウントのハッキングの80%以上は、パスワードの脆弱さ、またはパスワードが盗まれることにより起こっています](https://cloudnine.com/ediscoverydaily/electronic-discovery/80-percent-hacking-related-breaches-related-password-issues-cybersecurity-trends/) 。 文字、数字、記号の長い組み合わせを用いて、アカウントを安全に保ちましょう。 - -よくある間違いは、辞書にのっている一般的な単語を2~3組み合わせて使うことです。 次のようなパスワードは、[辞書攻撃](https://wikipedia.org/wiki/Dictionary_attack)として知られる単純なハッキングの攻撃に逢いやすく危険です。 - -```md -脆弱なパスワード例: CuteFluffyKittens! - -強力なパスワード例: ymv\*azu.EAC8eyp8umf -``` - -もう一つのよくある間違いは、簡単に推測される、もしくは [ソーシャルエンジニアリング](https://wikipedia.org/wiki/Social_engineering_(security))を通して見つけることができるパスワードを使用することです。 パスワードに母親の旧姓、子供やペットの名前、生年月日を含めることは安全ではなく、ハッキングされるリスクが大きくなります。 - -#### パスワードのグッド・プラクティス: {#good-password-practices} - -- パスワードジェネレータや入力フォームで許可される最長のパスワードを使用 -- 大文字、小文字、数字、記号を組み合わせる -- パスワードに家族名などの個人情報を使用しない -- 辞書に載っている一般的な単語を使わない - -[より強力なパスワードの作成の詳細](https://terranovasecurity.com/how-to-create-a-strong-password-in-7-easy-steps/) - -### パスワードの使い回しをしない {#use-unique-passwords} - -強力なパスワードであっても、情報漏洩によってパスワードが漏れた場合には保護されません。 [Have I Been Pwned](https://haveibeenpwned.com)というウェブサイトで、データベースに保存されている情報漏洩にあなたのアカウントが含まれているかどうかを調べることができます。 検索の結果、もしそのデータベースにあなたのアカウントがあれば、**パスワードをすぐに変更してください**。 すべてのアカウントで異なるパスワードにしておくと、いずれかのパスワードが漏洩したときに、ハッカーにすべてのアカウントにアクセスされるリスクを低減します。 - -### パスワードマネージャーの使用 {#use-password-manager} - - - - -すべてのアカウントで固有の強力なパスワードを覚えておくことは理想的とはいえません。 パスワードマネージャーは、すべてのパスワードを安全に暗号化して保存し、強力なマスターパスワードを利用してそれらにアクセスすることができます。 また、新しいサービスに登録する際、強力なパスワードを提案するため、自分自身でパスワードを作成する必要がなくなります。 また、情報漏洩が起こった場合は、多くのパスワードマネージャーには通知機能があるため、悪意のある攻撃の前にパスワードを変更することができます。 - -![パスワードマネージャーの使用例](./passwordManager.png) - -#### パスワードマネージャー: {#try-password-manager} - -- [Bitwarden](https://bitwarden.com/) -- [KeePass](https://keepass.info/) -- [1Password](https://1password.com/) -- または、他の[推奨パスワードマネージャー](https://www.privacytools.io/secure-password-manager)を確認してください - -### 二要素認証の使用 {#two-factor-authentication} - -あなたが紛れもなくご本人であることを証明するため、認証にはさまざまな証明方法があります。 これらは **認証要素** として知られており、主に次の三要素があります。 - -- 自分自身が知っていること(パスワードやセキュリティ質問など) -- 生体認証(指紋や虹彩/顔認証など) -- 所有しているもの(スマートフォンのセキュリティキーまたは認証アプリ) - -**二要素認証(2FA)**は、オンラインアカウントに*セキュリティ要素*を追加すると、パスワードだけではアカウントにアクセスすることはできなくなります。 最も一般的には、二つ目の要素は**時間ベースのワンタイムパスワード (TOTP)**として知られる、ランダム化された6桁のコードを使用します。このコードはGoogle AuthenticatorやAuthyなどの認証アプリからアクセスします。 時間制限のあるコードを生成するシードがあなたのデバイスに保存されているため、この要素は「所有しているもの」です。 - -- パスワードマネージャーを利用すると、強力で一意のパスワードを作成し、それらを覚えておくことができます! パスワードマネージャーの利用を強く推奨します(多くは無料で利用可能)。 --- - -#### セキュリティキー {#security-keys} - -二要素認証(2FA)をさらに強化させたい場合は、セキュリティキーの使用を検討してください。 セキュリティキーは、認証アプリと同じように動作する物理的なハードウェア認証デバイスです。 セキュリティキーの使用は、二要素認証(2FA)で最も安全な方法です。 これらのキーの多くは、FIDOユニバーサル第二認証要素(U2F)規格を利用しています。 FIDOユニバーサル第二認証要素(U2F)についての詳細は[こちら](https://www.yubico.com/authentication-standards/fido-u2f/)をご覧ください。 - -FIDOユニバーサル第二認証要素(U2F)の詳細に関する動画 - -- 注: SMSベースの2FAを使用するとSIMハイジャックに遭う恐れがあり、安全ではありません。 最大限に安全を確保するためには、{" "} - Google Authenticator - -またはAuthy のようなサービスを利用してください。 --- -### ブラウザ拡張機能のアンインストール {#uninstall-browser-extensions} - -Chrome拡張機能やFirefoxのアドオンなどのブラウザ拡張機能は、便利なブラウザ機能を強化し、ユーザーエクスペリエンスを向上させることができますが、リスクが伴います。 デフォルトでは、ほとんどのブラウザ拡張機能は「サイトデータの読み取りと変更」の権限を要求し、データに対してほとんど何でもできるようにします。 Chrome拡張機能は常に自動的に更新されるため、以前は安全であった拡張機能であっても、悪意のあるコードを含むように更新されてしまう可能性があります。 ほとんどのブラウザ拡張機能は、データを盗もうとしていませんが、それらができるということを認識しておく必要があります。 - -#### 安全性を確保するためのヒント: {#browser-extension-safety} - -- 信頼できるソースからのみブラウザ拡張機能をインストール -- 未使用のブラウザ拡張機能を削除 -- 自動更新を無効にするため、ローカルからChrome拡張機能をインストールします (上級者向け) - -[ブラウザ拡張機能に関するリスクの詳細](https://www.kaspersky.co.uk/blog/browser-extensions-security/12750/) - - - ## 仮想通貨セキュリティ入門 {#crypto-security} ### 知識のレベルアップ {#level-up-your-knowledge} -一般的に、仮想通貨で詐欺の被害に遭ってしまう最大の理由の1つは理解の不足です。 例えば、イーサリアムネットワークが分散化されており、イーサリアムを所有する者はいないことを理解していないと、カスタマーサービスエージェントを装う者に「秘密鍵を教えると失われたETHが返ってくる」というような嘘に簡単に騙されてしまいます。 イーサリアムの仕組みについての知識を得ることは大切です。 +一般的に、仮想通貨で詐欺の被害に遭ってしまう最大の理由の1つは理解の不足です。 例えば、イーサリアムネットワークが分散化されており、イーサリアムを所有する者はいないことを理解していないと、カスタマーサービスエージェントを装う者の「[秘密鍵](/glossary/#private-key)を教えると失われたETHが返ってくる」というような嘘に簡単に騙されてしまいます。 イーサリアムの仕組みについての知識を得ることは大切です。 イーサリアムとは @@ -116,19 +27,19 @@ Chrome拡張機能やFirefoxのアドオンなどのブラウザ拡張機能は ## ウォレットのセキュリティ {#wallet-security} -### 絶対に秘密鍵を他人に教えない {#protect-private-keys} +### リカバリーフレーズを誰にも渡さない {#protect-recovery-phrase} -**どんな理由があっても、秘密鍵は絶対に他人に教えないでください!** +**どんな理由があっても、リカバリーフレーズは絶対に他人に教えないでください!** -ウォレットの秘密鍵は、イーサリアムウォレットのパスワードとして機能します。 秘密鍵を教えてしまうと、あなたのウォレットアドレスを知っている人が、あなたのアカウントの全資産を盗むことができます! +ウォレットのリカバリーフレーズは、イーサリアムウォレットのパスワードとして機能します。 リカバリーフレーズを教えてしまうと、あなたのウォレットアドレスを知っている人が、あなたのアカウントの全資産を盗むことができます! イーサリアムウォレットとは -#### シードフレーズ/秘密鍵のスクリーンショットを撮らない {#screenshot-private-keys} +#### リカバリーフレーズのスクリーンショットを撮らない {#screenshot-recovery-phrase} -シードフレーズや秘密鍵のスクリーンショットを撮ると、スクリーンショットがクラウドに同期され、ハッカーにアクセスされる危険性があります。 クラウドから秘密鍵を取得することは、ハッカーよく行う攻撃ベクトルです。 +リカバリーフレーズのスクリーンショットを撮ると、スクリーンショットがクラウドに同期され、ハッカーにアクセスされる危険性があります。 クラウドからリカバリーフレーズを取得することは、ハッカーがよく行う攻撃ベクトルです。 ### ハードウェアウォレットの使用 {#use-hardware-wallet} @@ -145,7 +56,7 @@ Chrome拡張機能やFirefoxのアドオンなどのブラウザ拡張機能は 誤ったウォレットアドレスに仮想通貨を送信してしまうことはよくある間違いです。 **イーサリアム上でトランザクションを送ると取り消しができません。**送信先のアドレスの所有者を知っていて、あなたが送金した額を返金してくれるように説得することができなければ、失ったお金を取り戻すことはできません。 -トランザクションを送信する前に、送信先アドレスが、意図する受信者のアドレスと正確に一致することを常に確認してください。 また、スマートコントラクトを使ってやり取りする場合にも、署名する前にトランザクションメッセージを読むことをお勧めします。 +トランザクションを送信する前に、送信先アドレスが、意図する受信者のアドレスと正確に一致することを常に確認してください。 また、[スマートコントラクト](/glossary/#smart-contract)を使ってやり取りする場合にも、署名する前にトランザクションメッセージを読むことをお勧めします。 ### スマートコントラクトの使用限度額を設定 {#spend-limits} @@ -165,19 +76,29 @@ Chrome拡張機能やFirefoxのアドオンなどのブラウザ拡張機能は - 無料または割り引かれたETHを誰かがくれるはずはない - 秘密鍵や個人情報を教えない +### Twitter 広告フィッシング {#ad-phishing} + +![Twitter 広告フィッシング](./twitterPhishingScam.png) + +Twitter (Xとも知られています) のリンクプレビュー機能 (アンファール) を偽装して、ユーザーが正規のウェブサイトにアクセスしていると思い込ませる可能性のある方法があります。 この技術は、ツイートで共有されたURLのプレビューを生成するTwitterの仕組みを悪用し、例えば_ethereum.org_からのものと表示されます (上に示されています) が、実際には悪意のあるサイトにリダイレクトされています。 + +特にリンクをクリックした後は、正しいドメインにいるかどうかを常に確認してください。 + +[詳細はこちら](https://harrydenley.com/faking-twitter-unfurling). + ### プレゼント詐欺 {#giveaway} 暗号通貨の最も一般的な詐欺の1つは、プレゼント詐欺です。 プレゼント詐欺は多くの手口がありますが、一般的な方法は、指定されたウォレットアドレスにETHを送金すると、ETHが2倍になって返ってくるというものです。 *口座確認のために仮想通貨を送ると、2倍にしてプレゼントするなどの手口です。* 通常、これらの詐欺は、無料のプレゼントに対して時間制限を設け、意思決定を鈍らせ、偽りの緊急性を装います。 -#### ソーシャルメディアのハッキング {#social-media-hacks} +### ソーシャルメディアのハッキング {#social-media-hacks} この種の詐欺で注目を集めたのは、2020年7月に著名な有名人や組織のTwitterアカウントがハッキングされ、 ハッカーが著名人を騙りハッキングしたアカウントでビットコインのプレゼント告知を投稿した事件です。 詐欺のツイートはすぐに気づかれて削除されましたが、ハッカーは11ビットコイン(2021年9月時点で50万ドル)を持ち逃げしました。 ![Twitterでの詐欺行為](./appleTwitterScam.png) -#### 著名人からのプレゼント {#celebrity-giveaway} +### 著名人からのプレゼント {#celebrity-giveaway} 著名人からのプレゼントもよくある詐欺の手法の1つです。 詐欺師は、著名人のビデオインタビューや講演会を使い、YouTubeでライブ配信します。著名人があたかもライブで暗号通貨のプレゼントのインタビューをしているかのように見せかけます。 @@ -209,7 +130,7 @@ Chrome拡張機能やFirefoxのアドオンなどのブラウザ拡張機能は ### 「ETH2」トークン詐欺 {#eth2-token-scam} -[マージ](/roadmap/merge/)の準備段階で、「ETH2」という用語の混乱を悪用し、ユーザーにETHを「ETH2」トークンとして取引させようとする詐欺が横行しました。 マージにより導入された「ETH2」や他の新しいトークンなどはありません。 マージ前に所有していたETHは、現在も何も変わることなく、同じETHです。 **ETHに関しては、プルーフ・オブ・ワークからプルーフ・オブ・ステークへの移行によって必要となる対応は一切ありません**。 +[マージ](/roadmap/merge/)の準備段階で、「ETH2」という用語の混乱を悪用し、ユーザーにETHを「ETH2」トークンとして取引させようとする詐欺が横行しました。 マージにより導入された「ETH2」や他の新しいトークンなどはありません。 マージ前に所有していたETHは、現在も何も変わることなく、同じETHです。 **ETHに関しては、[プルーフ・オブ・ワーク](/glossary/#pow)から[プルーフ・オブ・ステーク](/glossary/#pos)への移行によって必要となる対応は一切ありません**。 ETHを入金すれば「ETH2」が戻ってくるという「サポート担当」を偽る詐欺があります。 [公式のイーサリアムサポート](/community/support/)というものはなく、新しいトークンも存在しません。 また、ウォレットのシードフレーズは誰にも教えないようにしてください。 @@ -255,12 +176,101 @@ _注: ステークされたETHを表す、Rocket PoolのrETH、LidoのstETH、Co ### エアドロップ詐欺 {#airdrop-scams} -エアドロップ詐欺は、あなたのウォレットに資産(NFTやトークン)をエアドロップし、エアドロップされた資産を受け取るために詐欺ウェブサイトに誘導するという手法です。 受け取ろうとすると、イーサリアムウォレットでサインインし、トランザクションを「承認 」するよう促されます。 このトランザクションによって、公開鍵と秘密鍵が詐欺師に送信されてしまい、あなたのアカウントが危険な状態に晒されてしまいます。 この種の詐欺の別の手口として、詐欺師のアカウントに送金するトランザクションを承認させるものもあります。 +エアドロップ詐欺は、あなたのウォレットに資産([NFT](/glossary/#nft)やトークン)をエアドロップし、エアドロップされた資産を受け取るために詐欺ウェブサイトに誘導するという手法です。 受け取ろうとすると、イーサリアムウォレットでサインインし、トランザクションを「承認 」するよう促されます。 このトランザクションによって、公開鍵と秘密鍵が詐欺師に送信されてしまい、あなたのアカウントが危険な状態に晒されてしまいます。 この種の詐欺の別の手口として、詐欺師のアカウントに送金するトランザクションを承認させるものもあります。 [エアドロップ詐欺の詳細](https://www.youtube.com/watch?v=LLL_nQp1lGk)+## ウェブセキュリティ入門 {#web-security} + +### 強力なパスワードの使用 {#use-strong-passwords} + +[アカウントのハッキングの80%以上は、パスワードの脆弱さ、またはパスワードが盗まれることにより起こっています](https://cloudnine.com/ediscoverydaily/electronic-discovery/80-percent-hacking-related-breaches-related-password-issues-cybersecurity-trends/) 。 文字、数字、記号の長い組み合わせを用いて、アカウントを安全に保ちましょう。 + +よくある間違いは、辞書にのっている一般的な単語を2~3組み合わせて使うことです。 このようなパスワードは、辞書攻撃として知られる単純なハッキングの攻撃に遭いやすく危険です。 + +```md +脆弱なパスワード例: CuteFluffyKittens! + +強力なパスワード例: ymv\*azu.EAC8eyp8umf +``` + +もう一つのよくある間違いは、簡単に推測される、もしくは [ソーシャルエンジニアリング](https://wikipedia.org/wiki/Social_engineering_(security))を通して見つけることができるパスワードを使用することです。 パスワードに母親の旧姓、子供やペットの名前、生年月日を含めることは安全ではなく、ハッキングされるリスクが大きくなります。 + +#### パスワードのグッド・プラクティス: {#good-password-practices} + +- パスワードジェネレータや入力フォームで許可される最長のパスワードを使用 +- 大文字、小文字、数字、記号を組み合わせる +- パスワードに家族名などの個人情報を使用しない +- 辞書に載っている一般的な単語を使わない + +[より強力なパスワードの作成の詳細](https://terranovasecurity.com/how-to-create-a-strong-password-in-7-easy-steps/) + +### パスワードの使い回しをしない {#use-unique-passwords} + +強力なパスワードであっても、情報漏洩によってパスワードが漏れた場合には保護されません。 [Have I Been Pwned](https://haveibeenpwned.com)というウェブサイトで、データベースに保存されている情報漏洩にあなたのアカウントが含まれているかどうかを調べることができます。 検索の結果、もしそのデータベースにあなたのアカウントがあれば、**パスワードをすぐに変更してください**。 すべてのアカウントで異なるパスワードにしておくと、いずれかのパスワードが漏洩したときに、ハッカーにすべてのアカウントにアクセスされるリスクを低減します。 + +### パスワードマネージャーの使用 {#use-password-manager} + + + + +すべてのアカウントで固有の強力なパスワードを覚えておくことは理想的とはいえません。 パスワードマネージャーは、すべてのパスワードを安全に暗号化して保存し、強力なマスターパスワードを利用してそれらにアクセスすることができます。 また、新しいサービスに登録する際、強力なパスワードを提案するため、自分自身でパスワードを作成する必要がなくなります。 また、情報漏洩が起こった場合は、多くのパスワードマネージャーには通知機能があるため、悪意のある攻撃の前にパスワードを変更することができます。 + +![パスワードマネージャーの使用例](./passwordManager.png) + +#### パスワードマネージャー: {#try-password-manager} + +- [Bitwarden](https://bitwarden.com/) +- [KeePass](https://keepass.info/) +- [1Password](https://1password.com/) +- または、他の[推奨パスワードマネージャー](https://www.privacytools.io/secure-password-manager)を確認してください + +### 二要素認証の使用 {#two-factor-authentication} + +あなたが紛れもなくご本人であることを証明するため、認証にはさまざまな証明方法があります。 これらは **認証要素** として知られており、主に次の三要素があります。 + +- 自分自身が知っていること(パスワードやセキュリティ質問など) +- 生体認証(指紋や虹彩/顔認証など) +- 所有しているもの(スマートフォンのセキュリティキーまたは認証アプリ) + +**二要素認証(2FA)**は、オンラインアカウントに*セキュリティ要素*を追加すると、パスワードだけではアカウントにアクセスすることはできなくなります。 最も一般的には、二つ目の要素は**時間ベースのワンタイムパスワード (TOTP)**として知られる、ランダム化された6桁のコードを使用します。このコードはGoogle AuthenticatorやAuthyなどの認証アプリからアクセスします。 時間制限のあるコードを生成するシードがあなたのデバイスに保存されているため、この要素は「所有しているもの」です。 + ++ パスワードマネージャーを利用すると、強力で一意のパスワードを作成し、それらを覚えておくことができます! パスワードマネージャーの利用を強く推奨します(多くは無料で利用可能)。 +++ + +#### セキュリティキー {#security-keys} + +二要素認証(2FA)をさらに強化させたい場合は、セキュリティキーの使用を検討してください。 セキュリティキーは、認証アプリと同じように動作する物理的なハードウェア認証デバイスです。 セキュリティキーの使用は、二要素認証(2FA)で最も安全な方法です。 これらのキーの多くは、FIDOユニバーサル第二認証要素(U2F)規格を利用しています。 FIDOユニバーサル第二認証要素(U2F)についての詳細は[こちら](https://www.yubico.com/authentication-standards/fido-u2f/)をご覧ください。 + +FIDOユニバーサル第二認証要素(U2F)の詳細に関する動画 + ++ 注: SMSベースの2FAを使用するとSIMハイジャックに遭う恐れがあり、安全ではありません。 最大限に安全を確保するためには、{" "} + Google Authenticator + +またはAuthy のようなサービスを利用してください。 +++ +### ブラウザ拡張機能のアンインストール {#uninstall-browser-extensions} + +Chrome拡張機能やFirefoxのアドオンなどのブラウザ拡張機能は、便利なブラウザ機能を強化し、ユーザーエクスペリエンスを向上させることができますが、リスクが伴います。 デフォルトでは、ほとんどのブラウザ拡張機能は「サイトデータの読み取りと変更」の権限を要求し、データに対してほとんど何でもできるようにします。 Chrome拡張機能は常に自動的に更新されるため、以前は安全であった拡張機能であっても、悪意のあるコードを含むように更新されてしまう可能性があります。 ほとんどのブラウザ拡張機能は、データを盗もうとしていませんが、それらができるということを認識しておく必要があります。 + +#### 安全性を確保するためのヒント: {#browser-extension-safety} + +- 信頼できるソースからのみブラウザ拡張機能をインストール +- 未使用のブラウザ拡張機能を削除 +- 自動更新を無効にするため、ローカルからChrome拡張機能をインストールします (上級者向け) + +[ブラウザ拡張機能に関するリスクの詳細](https://www.kaspersky.co.uk/blog/browser-extensions-security/12750/) + + + ## 参考文献 {#further-reading} ### ウェブセキュリティ {#reading-web-security} diff --git a/public/content/translations/ja/web3/index.md b/public/content/translations/ja/web3/index.md index 8825d33cea9..d33518e43ae 100644 --- a/public/content/translations/ja/web3/index.md +++ b/public/content/translations/ja/web3/index.md @@ -59,7 +59,7 @@ Web3の並外れた機能は、明確に分けられるものではなく、分 Web3は、前例のない方法でデジタル資産の所有権を提供します。 例えば、Web2のゲームをプレイしているとします。 ゲーム内アイテムを購入すると、アカウントに直接紐づけられます。 ゲームクリエイターがアカウントを削除すると、これらのアイテムが失われてしまいます。 または、ゲームのプレイを停止すると、ゲーム内アイテムに投資した価値が失われます。 -Web3では、 [ 非代替性トークン(NFT)](/nft/) を通じて直接所有することができます。 所有権は、誰からも、ゲームのクリエイターからも奪い取られることはありません。 また、ゲームをするのをやめても、ゲーム内のアイテムをオープンマーケットで売却・取引することで、その価値を回収することができます。 +Web3では、 [ 非代替性トークン(NFT)](/glossary/#nft) を通じて直接所有することができます。 所有権は、誰からも、ゲームのクリエイターからも奪い取られることはありません。 また、ゲームをするのをやめても、ゲーム内のアイテムをオープンマーケットで売却・取引することで、その価値を回収することができます。 非代替性トークン(NFT)について学ぶ@@ -82,7 +82,7 @@ Web2.0では、コンテンツ制作者は「プラットフォームのルー Web3では、自分のデータを所有するだけでなく、企業の株式のように機能するトークンを使って、プラットフォームを集団にて所有することができます。 分散型自律組織(DAO)はプラットフォームの分散型の所有権を取りまとめ、ユーザーがプラットフォームの今後についての意思決定をすることができます。 -分散型自律組織(DAO)は、技術的には、リソース(トークン)のプールに対する分散型の意思決定を自動化する、合意されたスマートコントラクトと定義されています。 トークンを持ったユーザーがリソースの使い道について投票し、その投票結果をコードが自動的に実行します。 +分散型自律組織(DAO)は、技術的には、リソース(トークン)のプールに対する分散型の意思決定を自動化する、合意された[スマートコントラクト](/glossary/#smart-contract)と定義されています。 トークンを持ったユーザーがリソースの使い道について投票し、その投票結果をコードが自動的に実行します。 しかし、多くのWeb3コミュニティが分散型自律組織(DAO)として定義されています。 これらのコミュニティはすべて、コードによる分散化と自動化のレベルが異なります。 現在、分散型自律組織(DAO)とは何か、今後どのような進化を遂げるかを模索が行われているところです。 @@ -97,15 +97,11 @@ Web3では、自分のデータを所有するだけでなく、企業の株式 慣例的に、使用するすべてのプラットフォームでアカウントを作成する必要があります。 例えば、Twitterアカウント、YouTubeアカウント、Redditアカウントを持っているとします。 そこで、表示名またはプロフィール画像を変更したい場合は、 それぞれのアカウントで変更作業をしなければなりません。 ソーシャルサインインを使用する場合もありますが、これは検閲という問題を引き起こします。 これらのプラットフォームは、ワンクリックで、オンライン上の生活すべてからあなたを締め出すことができます。 さらに、多くのプラットフォームでは、アカウントを作成するには個人を特定できる情報を提供する必要があります。 -Web3では、イーサリアムアドレスとイーサリアム・ネーム・サービス(ENS)プロファイルでデジタルIDを制御でき、これらの問題が解決されます。 イーサリアムアドレスを使用すると、安全で、検閲耐性があり、匿名のプラットフォームすべてにおいて、シングルログインが利用できます。 - -- イーサリアムでサインイン - +Web3は、イーサリアムアドレスと[イーサリアムネームサービス(ENS) ](/glossary/#ens)プロファイルを使用してデジタルアイデンティティを制御できるようにすることで、これらの問題を解決します。 イーサリアムアドレスを使用すると、安全で、検閲耐性があり、匿名のプラットフォームすべてにおいて、シングルログインが利用できます。 ### ネイティブの支払い {#native-payments} -銀行口座のない人や銀行口座を持つことができない国に住む人を除いて、Web2の支払いインフラストラクチャは、銀行や支払い業者に依存しています。 Web3は [ETH](/eth/)のようなトークンをブラウザで直接送金するため、サードパーティを信頼する必要はありません。 +銀行口座のない人や銀行口座を持つことができない国に住む人を除いて、Web2の支払いインフラストラクチャは、銀行や支払い業者に依存しています。 Web3は [ETH](/glossary/#ether)のようなトークンをブラウザで直接送金するため、信頼できるサードパーティを必要としません。ETHの詳細 @@ -117,7 +113,7 @@ Web3には多くの利点があるにもかかわらず、エコシステムが ### アクセシビリティ {#accessibility} -イーサリアムでサインインするなどの重要なWeb3機能は、誰でも無料で使用することができます。 しかし、トランザクションの相対的なコストは依然として高額です。 Web3は、高いトランザクションフィーのため、裕福でない人々や、発展途上国では利用されそうもありません。 イーサリアムでは、これらの課題は[ロードマップ](/roadmap/)と[レイヤー2スケーリングソリューション](/developers/docs/scaling/)を通じて解決されています。 技術の準備はできていますが、Web3を誰でもアクセスしやすくするには、レイヤー2でより高レベルの導入が必要です。 +イーサリアムでサインインするなどの重要なWeb3機能は、誰でも無料で使用することができます。 しかし、トランザクションの相対的なコストは依然として高額です。 Web3は、高いトランザクションフィーのため、裕福でない人々や、発展途上国では利用されそうもありません。 イーサリアムでは、これらの課題は[ロードマップ](/roadmap/)と[レイヤー2スケーリングソリューション](/glossary/#layer-2)を通じて解決されています。 技術の準備はできていますが、Web3を誰でもアクセスしやすくするには、レイヤー2でより高レベルの導入が必要です。 ### ユーザーエクスペリエンス {#user-experience} diff --git a/public/content/translations/ja/web3/web1.svg.xlsx b/public/content/translations/ja/web3/web1.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..70b4f071c3ea7f4a5edbbd3a2a0d401861bbbc86 GIT binary patch literal 4690 zcmaJ^2RxLGAIBwo&$DHd?3rvLBU#yUT%2_>&v@;<;_US*vNDR3d1TK*N-{z=7m`tg z{KlSPDcX!X{c|M |m$wPEsq{^BT5aH`BP<#?98E6`Fzk6p@mpZlG>1n$y*S-cwzB&8K zK1JD_-OV%y_rx#yaK{nsH1-1fN2L8q%V4tsd`DcZRH=pSO2c;hUEfr5Qjr{a5Q$Sx zTvXumqN)pB4hf+zS~*i<<{`azpa{!Bg+&*nyoi`AJs;KNCb0zf=w2CC;TwMB=a-y? z+t!p1s}hu%-%Q@Sp((=d;7E=@EJ;2xlG>7(Wm}?i)8_Xv4h-XL7Um;M`+F8oB1!N0 zN>@TLyO08D?&~Psr{E#>mjKn?elFCoe_UsTPoGShSP&5td_6c2=}<0{P8$Dx X8vGla?@Li&7^(3&duz(k^(AWQ!bs}`ut=+-S9zs_z$An=e(okV?+z~2R z)ZKl3H=Fo}Per($Nmw4#sjw@SK*~EdHuMvSGExq90*fm$d_iQpHf#b9`rPk0(5$sH zV2|%3uVE40G85#f;l0z1<@JnDNV-4MRav2-jS>_VEU)gfC|Am24-|EGcwNk)Fqo+h zZAfuUy?AhC_{;QjM!ml>D_-FQ6cXLpSpUSD)8wiLyX2Mss)v=vI)+mVDokj?eZr|Q z6Ww$9VOu#oNY13?G}K4Xhio ;%K)9vNlD>}boGt)J^HK=awi%IHl zj+pnd9X@q`I}&U%am`rv#8bvi9qdtL&aRi4&~bmq3ssi};usj&XSGohg<>iw9h-8J zhJNW*^zXmJqW=+=ox6<>CL*DKPDC)F<&9Xnb_f&WeWLnEYBU2eqo-1#wi?kDCY|GQ zWlX+5Kw3B*`09ov#2=f*Wl-T@>!qt_-B(o*RRG6&4JEE0P3^WN2k90Rk;W?>I({dt zSKT71+x1&5P@-}eS#oK^->RgB;;;Blvm3_OWamVQS6|nXEV32DWy=VLG`)?7%GcFC zE8=JScQxd5$)wvH=S_CpzQdbrOVMl=7GkrP;%2L5H|s?#@+|;Z@zbrgwzh6BH^I zixVZ8&fkFIo6t}`mLrfpVc2`$r{6j-X5IImx)+=IX6NNb6~DfyYHq966tKF_W=OpQ zfH`EauR;3j!ux9ee#vLN0?yS|GnFq8m+GxCsl)?8!f?^ufd}|gDmi|n(g*79 (15(}eyrBwCn;xj2U&5@G+8w-M3e8|vY%MJ#tTipiW=IJaL- EB@LE82jY^2$BElJIar&JlhZER49rU$?Rk9n#STfzjL2M$ulPVk z@yTjq-_|vM5gKRVo2wWK3!|Av*=H7%iQzQsyD;l3b_0j&HnjA}fuHda|vlSn7w= z_R0L`Jqq^=#MzqVr0<6J$A(kI7QwH;YstxlbNLdY!pZsOmN`GC!$(z8BZEJyJV+yZ z`k}@0ghH-$N}rTP*iuF7JKLm1!9~R-^7`@T47ULt{wrMaCG(8)egO=@VTx)Z7E>Oy zCo|>M7fTsP8=+6GjqhEBh0QWMHa1R}Sq9d3`vZ_DOQC@JurFpv1xl2&{RA^|cHX`d zW-ryeQ4u!&AiVfvU~rww?5wMkCm_cCa0v{HQ|=imJIczPybe4`*=fO9oqxR19~{81 z5e|rGUgj(2x@JWo=StR<$-EbhNNst|FDN1k7_+f|U-}%yQC66!e}n9E4E%|*7Nv|% zXN%~1jJG4)g45ANXuQ3f2_-Vuc$7D=m^7y>Xp5o&-7@IKp>EWRBG7e5Jz_#YePR5l zwP`-Q%jV5XQr>CGrl$5g`$>|!ezZge!A~@;g*r?s1Ui^0M0~7yI_idsKr#g&8-)@a zpwTTn+_@U3uU19)(O3qQ>0XbIZjN2^FDijgkW2vyplf-Rqs$aN-l$mNI-5|HQK|gK zw}VTtvb0;KC3aUNq2DlKu&7 zNPY~Oho`SI_;e4UiN@)O(R6i}T;6~DIJ?g~HLl#suito`#ullL-Gd|f?Aso5{QLJ~ zl8%OBcmU|#8Gl&Y(t@41Z`zQ+QzPS#pW`(I9vJMKfM-cxzAuUY+UC+LVPXnK>`vHP z9tt}h$Y}uaDNU?jv4?MmhzMPTG|aa13ab0LMdDdBaqJYPAa|i8V4IOIH~P$r{k?}9-etZJe98Kee$z^Kfq67huGAPpv)oNnImqJt zNwuv%GIsMemd|kt(%tgarP-y_u_7#z#0FdQSH=AqJRRwbS(N#?^Rmiu_i4ljLgU!9 zD%SEEl(khtq#WMHf }@)x9loy^H`NN(E`KHR(v{(>L?Sgg3f$>&S8FZv;xq zvn Wi-zRH8kHt0Pmo9njNN%rUDD?-^0`e4kfGvbTs|-WqETzx0#iOTxF#= z)P@z359u(SFk||`Vi*m#(LZspUx^9X+1dd?p-!iZ8?J?3+~korN3N>QgxRVJL~Fb= zOhbPsS=!!Ffj(Tf%MqV$O-WKMa4x7i%7w~Le0QB?$P=FnbC=|C&Vpa4aMPbK&~1G_ zL(2#c@2gy#H0|rB!I_}D+042!e0^nz;O$gW3V)Amp?EYQF`3rwu O!={&=volJgN4CH OHDp%LhOoM+6KsVFEa*#% zC5 AnF)mJ zr6HW@j2403_QZ&(1iYA6+%dz{x<^V?1p2Gd$$I=mpP5lOn?zM=vyq89ai^ @sMZL);E!{ z(8Oojn9sUcRgZUxO?ZhAk#3uYaKsMl-(7GUX~d_vHY?6fl5J9KtnQN7q}Iqkcs*+w zsAp{#+hUZoUx#y#p5uh)s<@858{G?t;?3LqoZFY(ALt6gL#=%!%R@UAt?W$%`;#Ca z4@h{T5v@kgt!ii1!uJy>g?%LF^XQIV^vhk&dKRzvyX?!GwI+d%+K*QNv8 z4c5{5XvFywe*MEc&yl4wnv|EK11&_i?{~ua4nF!C9R+ed7jvU2b0aUG;VNJ#%~Y84 zPIA!mNKWHXixHNjo=)U2l4a^(fmdxLOp?inqUata?gM&b3zxXnFDs~ZdBXUj#|1bv z)UQ~ycTJW7>v<3?=egYhY8zXZ914&L0G>^6uD5wJ!Au{O?x&?)9%78pAgs}an_uF) z{UIc2jf=R#X=o1Dlt*a-pc?kzZKD(k^kocpuR!jic47Nu5Ajm+B9kx Y9HNB`tgbKjML)IQKo}3U|AXUo@FX_UY zmGr)mB+6qYg%>1EynLCo*y$*uA%_+^7O{%l_mX!TPx0z0IKqvhh0q)7z1DqaPaWh7 zX3Q|}tyc&*0pM99W40uz0=ZlDv<58}$X8 -qD1KIVHIkYOsmlD!M5K+g!pDNbSIP-C5G^z%9r zLk@qo-zauHt)Cs7S7#Wxd1l_|N1hX(=WoPd g7Cf#z=%S3q$7%?d9AI{8ljh>hL^4_&KFfxW8rJzdAU-S1>%{%s%1& z$jtv)#jm%XheOQbIkQ8;{|ECg`2BkGd1SyK=9vW&pWgf*`1z}!^ZoX7U7n)D`8lI! WsG_HZdlB _&53Mt8!RXHUt zgz&%9_xGnBeS6*A=kdA6 GDO38MKyaLBXCAnqp39iFk>wn(OtL~XjJYda?5H#0tm(liGa zbBDaKYO3wMB8sjlz+|DiN$At(g}?&6xr!B`5 J3ni;J-@ACBj1>D zX`8la-tJnmgJ;~1A;M_{Kba@j{wbjU>I&3+fXs p@|_Mvwq?@;`H=;_>>e zAG%_ZJR%B!%-4~6&!9s*F9}t8`_H3?17bQK`1VOBi{7VTN2~@1H93?>rvM%veSUc_ z;+f3q;1~Ph7Ce1zQZm=5YJG8hJUkX6JnZ-X$~px$>kv<DvkcAw`h2Zm4W ztoY;GO>%e?2Ij&Ss`zhp &U6L*2v}d{O>F^rKt1y_R z=3bxZlti+7X?SP4l}-O%TInl-z&wgupI5(fJ$~+{4?B1F$*UeN21qne+Z}Yql ~z@dfavH9O7x%Joz`goLJX3ptxpt183VyP4+RudZ~|4tvlb&sHw1Xtz(V~ zKB }Gvu)?M?Cs(H3cDSz+8L&%r zb75*K9Y(y#Pu0Fzlqb7p$wvsNQ|Ai(^2H@1XF1Ax5gpjTQFjsf_bu7e7@>o48B zYrm`5& @CAx)p_LnW)Kn~G!^0bTV^_!d^%2{Q;6F^9V2;kDvt zcCKcz?@955GurGC@7$g*Eg~&9kkkKx-*Z1y6iyH+ks?@+7MRdbI*=uoI%M6N=`(B@ z7=!f9obAQuxYl{GLD|1AvXalLB@wFT`z55#fsi9)u&-X~`{GQcV828SzmQ9%)oj@d z)VVqcE|sJ u-XSIYTPk^frqb8l)7i@b3ib99`8hbpUyc*{?+9sQ+lhu`9y>yy zfW)^CqQpL{g}dc*-qJu)yKn+GUQIoY&7JR9elZ-_2@$6jMX^1Qk`~HYA_i3reCh|# z4b9wXCS;^Hk42$?);VOl&Bc0RwgZxPG6U^cDh)c)5OWl?V;Us9zW=!B`7==>Wh1V_ zjG5RqT;MiB9R>JXsr}}{Jk`&M-U|P7SZO(T4Gz$=q?-7)_+SKoy}^_ZOqm4qIGk+m zMA$Q`SVmXCx9D*>C@Vzk;@U~@uQP-LY3vMnJ3w8bKd;Auzq~Q!HqA|Q5PC?s(A+-W zEYN6B_1J{V++?+ORkU&=zx^G7gyUfgbAW50cJ6InD1=~9G*VQwEq<`1m4%o(JVwmk z*#TloL&LaaJ+L7DW6SHv4?iS6?Lpeg!_xQkv|pVtpXe&=lr9q_U7;6hiil3?KEp%H zFUrW|cQtK~aap$0P}lFFQXCh9t6GAsnP}4cr1r@ttvw2la>ckCWu vaJp<%+@ zGN`UQfUpT|DH2#0wqxF;K! 7;c#n=h|M`#2#ifKH|& fl)8P*#`Ycay?J DqAUXzOn1N=R;qQ9f#;%M3x_h% zLK%2W&dfz<9V(R4205d0uwyCbg^*JE0|iO#_6O6}3C5s7JlcN ziJ|Ge`h}FYy@TwlOzA4L 1c%Ak1OA=GFl(a zbl}GH-&{M$Xv!JjxUu|b_U_<=t-w@RfHLT*a8G{2;waL;mxYU{#}gIZB%L@GXe;?~ z-Q2E8XsdMR+EjnlE-7x%pm`zI{8*qV1N;qasD2Kbm$#n_^mt2QX~^-2F?4koT-+`$ z&gk<=iYc-3@4vpvVB4gI-$Ni#v%kghaAsyq!pV4yl+gY5YyhlndC^YHFL_AlnaTCF z&4(I7*+$!@&^f@%nSzJk+gy9aP0gUFZxgnbdm!gsSq&C4I#b9ip74zjun37`{aic0 zu$sR|1gXVyUQAwM6Q;7yp>`Pa=!FN=(FT?Vr?!~>%6y(3_OVkh*m`6~tM4W NIY#4T3$HsetaLM!4RX4CRcY&wfPcAx=X;RY 2yyr7i5%T9x;dwgvM}dmww8sSJF`qk#u+qhki9Js&1)`R 8D~IBdjB)JqxL-kpa9%En-yrFK2sFly@ql9GSesY*tyj BbwgP-N(uu6QoBUFcaD%(w${b; zQv)gJ6r`XKz)0b )6Sor5)eJC{;eTv%gX8Lun~Wr{>aaq>9uuw;X3gGP3}fLo>aPrq`eg0c zxVt+aFK&c3c5%~0TpPKfG8<;AA{3?Z&NvzSp5$zMM{o09-R`m2bW38qO0G+8`HxI@ z`H3U9Io2$(`7lq33ohvhqEZjT2_wCh)>%e2M0j7>(xh2mKLf!8)3rvf55wvohREMe z#U~2($mEGdouQ=Gz7f`)IO^BQd+8uLVv;a5hagJrwMj;cerNJ|Nu`w!APX}={0cn_ z%6G6Z*obWIy+UISwG2lt4>j`jP@zRbDbe^5MSTb2Z%U7^@bIoMvwRs&^$+P|6^_#? zfqib~(@9K>shems)nT>NjW|H{eBAIHe2Zz~;`Gw4^W7E>IOK}XPpVWX6u%!Bvukdl z0~DneJ?NuJuz^oS7Ic??h_qfCWdWzfo>?sn0j9871o_xgqNZX=qhIkw51-ZhakZS> z@MBbhz97XW2b$muMY-x+M4WES@#@zd$SqUH)`0J?tDp5}4Sw!>90B-WC5|_K8RDuF zR-&k4%Mmp(UX^I56`iTeZ#RV`r5Sy9x$-=Z?&RKfmc+aajS`bp^ilVZqY($x0jvK; zh=6aqP$8U-$e-Tj!%gD#$khD{H0jlK^X9;R8}oO89R9PbjHxC^ELY?y`c!iNoS zFM5nLkkQJ`iSbZnm?E#MxyC(LZ4ew(PhVlthuFcJP2#s}3GOiS9$vU2rfcuP^ukf` z+6_VA#zoI;Jz+#B#809mv{TW_-c-0h-f?Z0>OvH%#iZ4$diGQJb}XF;Ob=Y=-Y$EQ z9K$jSzM`^6m|n_dERXE&i{ZL)pAgrzDJ< 5$LIIt*YYKO!4Gwv6I43Ik+AE`D*QMUn|6xOe=$8lJFhp@cxUE%H=i3c!Ik+ zYyd&(M1BCR(OIo>fZzB1ar6q0N)Me09X@>deRTTQqCWo-btBQ+39p3`No#6!;gvb! ziCroqpk*Jy5rk>o8&Vh6ml~f`4d-3i*DHY*#PmF4&dmBInN>{LWp)F4G%txNhnkE0 zY=^|8r{{qMtdzzQx!m>$FGVmLKPG~+oKo|7PXci7odjE?OJ>ZqOZ9So5DMgA*!2?c z+b)c3d3<-bUhBcVHshx&F!x@+Q2zm24$|;BQrEJ{1VZ$8mTH;MuC&kNmt Q(??0iSLxtBv z9eA4M$OOuuwGUbMmL9+i{nbUf5a(Wx@X8@&W~Kam&MoGbXWw~M9wj;*Yq-;}rdnkQ zoMO}5R1FmoOv(86#Zggax!iKEOs5I8EX{v-EI`OxSBN^XqhoLkU-$%P@lJ&OY4M5U zjKA6+WWK)kuMSR2I-Ev5F(2$BPbt>l51y7qIK_8j*4T#qlm7eN!)Y~uYvU8Ujs*#< zhd+v`-@TmX(>UdDVma7+VZEFhjX&y$-yNRj4Zo%|pZJfY{C5YZ*A0$doEU)oXJ-DN zZ2W%oG)m(3(TOo*i}P U4o`8+M UHZckAiD$5{3~UFCAOHXV10{5xEC2ui literal 0 HcmV?d00001 diff --git a/public/content/translations/ja/web3/web3.svg.xlsx b/public/content/translations/ja/web3/web3.svg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bb81da3e091ede07adee14aeb5427e79a252be4c GIT binary patch literal 4734 zcmaJ^2RzjO|2MM28E0o^lhD~aD_o9@Y{zj{R){mQ_ezJ1_*z*ZarWLbBMl)VD-lA7 z!v9X+-=BK)?R9sb$LAi8d%r&Se2wSp_0$IAUZBDvBqYT0;K(t=I%h!iy@`^Gvj^PS z1FGlk3U@cVig0qQ)*Xa&3X%W7IcD3Y7Il_n4Nc!`TOd?RA~XD~Y4t|XdwP5prEbje zlr`wJc~ecVG-$25a3>ShjSozl;}_=b%~dE57V|fXdeFVI0-;K3zw^A^igQm5CfAsL zb&sNW&RQ$k&Mkgl2k9`1oy?YN`vlN`eHm^%KLf@kW7& z2%9|}SIgL(=fYf$q|DhhN^A;+_9Y$b>pF47DTxO={spBe-Y~MSmaP2QeQp+Z)SucJ zu*dhBWU+{E84GY%@>q0Z-K*vml;}@&R+O)6qlAS7%BgxS$`mo%(qD74dsV z7TAY<5k3iXLg4r?VE2oD ~kD^^!<6Bp{euJHzVx6n^>>u3`jTcYpVU$`>im-HWQqjIH}}hzHaJ)48$| z<)t4az`Uv!8YaBD?oGy5k-S$g?8s&FFpS& 5FwJRo3&0p7?ljtoHcNp*d(R){ch^C7{j9oR@VzG1fO5wye?^e#vEvbyF z<-G@j2?%f#HYTakL*%?gXdE5r&wnGO`-#-r&C&}4Qt;m!VGP>LQ8VWbArgWwz|R2v z8GB WM mw`HZ~u92*~sv=!v zEkH^Y6Ai0--X1PlRoPY`O!w`o%i@|}ZO2W=UD!F+91pD#y|{lplkrf3EtCd!h_`Pu zS6WQ)?3S$d5A2?RU{EwpgxDj#x;5SjHN_(tB8g*$-RVA^mVr0WzG h~ zeGwI0<}HbERj-YpT02~(puxU6iEj(j6@2|-)ja%;73MQ#FHo0jp_ot-!0bct&;>() z`?pZC{|u#3KUGQhOoPIeC=)ZjfM%NHI{v5h*gnSd $`|I4pAr zHJhJ8M63qH?`HT}(^uT;NJY*PQ@l~bXZQNY5#mEjQXmt49id0dsOA_A UQ#Ef*}>q6Kl_GY~ymoP~ZhwJfVb0^Z4M%gT?JbD+1i9uP> znkEX3kngXJgJEWL<9OJ?o!~#Or@)5{rkvlik{<;h `bS!j%i?HxO)AvrnCqUFH6=#O3Z z6L0LGgw(Lq<=D~>K#DI8JD(`atrf4~BuNALo5G`#x-YU(@PKG&y|1Sp(k#hz>S%h$ zD#o)=JE=ajG6E%iNNS(VYVDDKkSoI4C?jDL+8-SXjLt`1MOKlM3uW-eMTC;`&Mk9n zKSGWvC4~oWD`h8>J^#>bc1$7DGNl7x7BW);pRi7v=He?Xk=Ks5G8o`?_ `型を任意の長さのバイト配列に変換します。 名前はよそにして、引数を1つだけ指定したときに、正常に動作します。 - -```solidity - // Two byte value, encoded as 0x1vvv - if (_key < 0x1000) - return bytes.concat(bytes2(uint16(_key) | 0x1000)); -``` - -163以下のキーを持っている場合は、それを2バイトで表現できます。 まず、256ビットの値である`_key`を16ビットの値に変換し、論理和を使用して余分なバイト数を先頭のバイトに加えます。 そして、この値を`bytes`に変換可能な`bytes2`値に入れます。 - -```solidity - // There is probably a clever way to do the following lines as a loop, - // but it's a view function so I'm optimizing for programmer time and - // simplicity. - - if (_key < 16*256**2) - return bytes.concat(bytes3(uint24(_key) | (0x2 * 16 * 256**2))); - if (_key < 16*256**3) - return bytes.concat(bytes4(uint32(_key) | (0x3 * 16 * 256**3))); - . - 。 - 。 - if (_key < 16*256**14) - return bytes.concat(bytes15(uint120(_key) | (0xE * 16 * 256**14))); - if (_key < 16*256**15) - return bytes.concat(bytes16(uint128(_key) | (0xF * 16 * 256**15))); -``` - -他の値(3バイト、4バイト等)も、フィールドのサイズが異なるだけで、同じ方法で処理されます。 - -```solidity - // If we get here, something is wrong. - revert("Error in encodeVal, should not happen"); -``` - -ここまでで、16\*25615以上のキーを取得できることになります。 しかし、`cacheWrite`では、キーを制限しています。そのため、14\*25616より上には行けません (これは、最初のバイトが0xFEになり、 `DONT_CACHE`になってしまうためです) 。 しかし、将来プログラマーがバグを入れてしまう場合に備え、テストを追加するのに、それほど費用はかかりません。 - -```solidity - } // encodeVal - -} // Cache -``` - -### キャッシュのテスト {#testing-the-cache} - -Foundryの素晴らしい機能の一つは、[Solidityでテストを作成できること](https://book.getfoundry.sh/forge/tests)です。そのため、単体テストを簡単に作成できます。 `Cache`クラスのテストは、[こちら](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol)にあります。 テストにおけるテストコードは、繰り返しが多い傾向があります。そのため、この記事では、重要な部分のみを説明します。 - -```solidity -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import "forge-std/Test.sol"; - - -// Need to run `forge test -vv` for the console. -import "forge-std/console.sol"; -``` - -これは、テストパッケージおよび`console.log`を使うのに必要となるボイラープレートです。 - -```solidity -import "src/Cache.sol"; -``` - -テストするコントラクトのインポートです。 - -```solidity -contract CacheTest is Test { - Cache cache; - - function setUp() public { - cache = new Cache(); - } -``` - -`setUp`関数は、各テストの前に呼び出されます。 このケースにおいては、新しいキャッシュを作成してテスト同士が影響しないようにします。 - -```solidity - function testCaching() public { -``` - -`test`の名前で始まる関数がテストです。 この関数では、値を書き込み、読み取ることでキャッシュ機能の基本的な確認を行います。 - -```solidity - for(uint i=1; i<5000; i++) { - cache.cacheWrite(i*i); - } - - for(uint i=1; i<5000; i++) { - assertEq(cache.cacheRead(i), i*i); -``` - -これは、[`assert...`関数](https://book.getfoundry.sh/reference/forge-std/std-assertions)を使って、実際にテストをする方法です。 このケースでは、書き込んだ値が読み込んだ値であることを確認します。 キャッシュキーが線形に割り当てられるため、`cache.cacheWrite`の結果は、破棄できます。 - -```solidity - } - } // testCaching - - - // Cache the same value multiple times, ensure that the key stays - // the same - function testRepeatCaching() public { - for(uint i=1; i<100; i++) { - uint _key1 = cache.cacheWrite(i); - uint _key2 = cache.cacheWrite(i); - assertEq(_key1, _key2); - } -``` - -まず、各値をキャッシュに2回書き込みます。そして、キーが同じであることを確認します (2回目の書き込みは、実際に起こらないことを意図しています)。 - -```solidity - for(uint i=1; i<100; i+=3) { - uint _key = cache.cacheWrite(i); - assertEq(_key, i); - } - } // testRepeatCaching -``` - -理論的には、連続したキャッシュの書き込みに関連しないバグが存在する可能性があります。 そのため、ここでは連続的ではない書き込みを何回か実行し、値がまだ書き換えられていないことを確認します。 - -```solidity - // Read a uint from a memory buffer (to make sure we get back the parameters - // we sent out) - function toUint256(bytes memory _bytes, uint256 _start) internal pure - returns (uint256) -``` - -`bytes memory`バッファから256ビットのワードを読み取ります。 このユーティリティ関数でキャッシュを使う関数の呼び出しを実行したときに、正しい結果が得られることを検証できます。 - -```solidity - { - require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); - uint256 tempUint; - - assembly { - tempUint := mload(add(add(_bytes, 0x20), _start)) - } -``` - -Yulでは、`uint256`を超えるデータ構造をサポートしていません。そのため、メモリバッファである`_bytes`など、より高度なデータ構造を参照するときは、そのデータ構造のアドレスが取得されます。 Solidityでは、`bytes memory`値を長さを含む32バイトワードとして保存します。長さの後に実際のバイトが続くため、バイト数`_start`を取得して、`_bytes+32+_start`を計算する必要があります。 - -```solidity - - return tempUint; - } // toUint256 - - // Function signature for fourParams(), courtesy of - // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d - bytes4 constant FOUR_PARAMS = 0x3edc1e6d; - - // Just some constant values to see we're getting the correct values back - uint256 constant VAL_A = 0xDEAD60A7; - uint256 constant VAL_B = 0xBEEF; - uint256 constant VAL_C = 0x600D; - uint256 constant VAL_D = 0x600D60A7; -``` - -テストに必要な定数です。 - -```solidity - function testReadParam() public { -``` - -`readParams`を使う関数`fourParams()`を呼び出し、パラメータを正しく読み取れることをテストします。 - -```solidity - address _cacheAddr = address(cache); - bool _success; - bytes memory _callInput; - bytes memory _callOutput; -``` - -キャッシュを使う関数の呼び出しに、通常のABIメカニズムは使えません。そのため、低レベルの [`.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html# members-of-addresses)メカニズムを使う必要があります。 [`.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses)のメカニズムでは、入力として`bytes memory`を取り、それを (ブール値と共に) 出力として返します。 - -```solidity - // First call, the cache is empty - _callInput = bytes.concat( - FOUR_PARAMS, -``` - -1つのコントラクトで、キャッシュされた関数 (トランザクションからの直接呼び出し用) とキャッシュ無しの関数 (他のコントラクトからの呼び出し用) の両方をサポートしていると有用です。 それには、正しい関数を呼び出すために、すべてを[`fallback`関数](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function)に置くのではなく、引き続きSolidityのメカニズムに頼る必要があります。 この実装によって構成可能性をより容易に達成できます。 ほとんどの状況において、1バイトで関数を十分に識別できます。そのため、3バイト (16\*3=48ガス) を無駄にしていることになります。 しかし、この記事を書いている時点では、48ガスのコストは0.07セントなので、より単純でバグが発生しにくいコードとしては妥当なコストです。 - -```solidity - // First value, add it to the cache - cache.INTO_CACHE(), - bytes32(VAL_A), -``` - -最初の値は、全ての値をキャッシュに書き込む必要をあることを示すフラグです。次に、32バイトの値が続きます。 他の値は似ていますが、`VAL_B`は、キャッシュに書き込まれず、`VAL_C`は、3番目のパラメータと4番目のパラメータの両方である点が異なります。 - -```solidity - 。 - 。 - 。 - ); - (_success, _callOutput) = _cacheAddr.call(_callInput); -``` - -`Cache`コントラクトを実際に呼び出すところです。 - -```solidity - assertEq(_success, true); -``` - -この呼び出しが成功することを要求しています。 - -```solidity - assertEq(cache.cacheRead(1), VAL_A); - assertEq(cache.cacheRead(2), VAL_C); -``` - -空のキャッシュから始め、 `VAL_A`を加えてから `VAL_C`を追加します。 最初のキーに1があり、2番目のキーには、2があることを要求しています。 - -``` - assertEq(toUint256(_callOutput,0), VAL_A); - assertEq(toUint256(_callOutput,32), VAL_B); - assertEq(toUint256(_callOutput,64), VAL_C); - assertEq(toUint256(_callOutput,96), VAL_C); -``` - -出力は、4つのパラメータです。 ここで、それが正しいことを検証しています。 - -```solidity - // Second call, we can use the cache - _callInput = bytes.concat( - FOUR_PARAMS, - - // First value in the Cache - bytes1(0x01), -``` - -16未満のキャッシュキーは、ちょうど1バイトになります。 - -```solidity - // Second value, don't add it to the cache - cache.DONT_CACHE(), - bytes32(VAL_B), - - // Third and fourth values, same value - bytes1(0x02), - bytes1(0x02) - ); - . - 。 - 。 - } // testReadParam -``` - -呼出し後のテストは、最初の呼び出しの後のテストと同一です。 - -```solidity - function testEncodeVal() public { -``` - -この関数は、`testReadParam`に似ています。しかし、パラメータを明示的に記述する代わりに、`encodeVal()`を使うところが違います。 - -```solidity - 。 - 。 - 。 - _callInput = bytes.concat( - FOUR_PARAMS, - cache.encodeVal(VAL_A), - cache.encodeVal(VAL_B), - cache.encodeVal(VAL_C), - cache.encodeVal(VAL_D) - ); - . - 。 - 。 - assertEq(_callInput.length, 4+1*4); - } // testEncodeVal -``` - -`testEncodeVal()`の唯一の追加テストとして、`_callInput`の長さが正しいかを検証することがあります。 最初の呼び出しでは、4+33\*4となります。 次の呼び出しでは、すべての値がすでにキャッシュ内にあり、4+1\*4となります。 - -```solidity - // Test encodeVal when the key is more than a single byte - // Maximum three bytes because filling the cache to four bytes takes - // too long. - function testEncodeValBig() public { - // Put a number of values in the cache. - // To keep things simple, use key n for value n. - for(uint i=1; i<0x1FFF; i++) { - cache.cacheWrite(i); - } -``` - -上記の`testEncodeVal`関数は、4つの値のみをキャッシュに書き込むので、[マルチバイト値を処理する関数の部分](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171)についてチェックされません。 しかし、その部分は、複雑でエラーが発生しやすくなっています。 - -この関数の最初の部分は、1から0x1FFFまでのすべての値を順番にキャッシュに書き込むループなので、これらの値をエンコードして、どこに行くのかを知ることができます。 - -```solidity - 。 - 。 - 。 - - _callInput = bytes.concat( - FOUR_PARAMS, - cache.encodeVal(0x000F), // One byte 0x0F - cache.encodeVal(0x0010), // Two bytes 0x1010 - cache.encodeVal(0x0100), // Two bytes 0x1100 - cache.encodeVal(0x1000) // Three bytes 0x201000 - ); -``` - -1バイト、2バイト、3バイトの値をテストします。 十分なスタックエントリを書き込むには時間がかかりすぎるため (0x10000000では少なくとも約2億5千万回) 、それ以上のテストは行いません。 - -```solidity - 。 - 。 - 。 - 。 - } // testEncodeValBig - - - // Test what with an excessively small buffer we get a revert - function testShortCalldata() public { -``` - -パラメータが足りていない場合の異常時に何が起こるかをテストします。 - -```solidity - 。 - 。 - 。 - (_success, _callOutput) = _cacheAddr.call(_callInput); - assertEq(_success, false); - } // testShortCalldata -``` - -処理が取り消されるので、得られる結果は、`false`になります。 - -``` - // Call with cache keys that aren't there - function testNoCacheKey() public { - . - 。 - 。 - _callInput = bytes.concat( - FOUR_PARAMS, - - // First value, add it to the cache - cache.INTO_CACHE(), - bytes32(VAL_A), - - // Second value - bytes1(0x0F), - bytes2(0x1234), - bytes11(0xA10102030405060708090A) - ); -``` - -この関数は、キャッシュが空なので読み込む値がないことは別として、正当な4つのパラメータを取得します。 - -```solidity - 。 - 。 - 。 - // Test what with an excessively long buffer everything works file - function testLongCalldata() public { - address _cacheAddr = address(cache); - bool _success; - bytes memory _callInput; - bytes memory _callOutput; - - // First call, the cache is empty - _callInput = bytes.concat( - FOUR_PARAMS, - - // First value, add it to the cache - cache.INTO_CACHE(), bytes32(VAL_A), - - // Second value, add it to the cache - cache.INTO_CACHE(), bytes32(VAL_B), - - // Third value, add it to the cache - cache.INTO_CACHE(), bytes32(VAL_C), - - // Fourth value, add it to the cache - cache.INTO_CACHE(), bytes32(VAL_D), - - // And another value for "good luck" - bytes4(0x31112233) - ); -``` - -この関数は、5つの値を送信します。 5番目の値は、有効なキャッシュエントリではないため、無視されます。このキャッシュエントリが含まれない場合は、処理が取り消されることになります。 - -```solidity - (_success, _callOutput) = _cacheAddr.call(_callInput); - assertEq(_success, true); - . - 。 - 。 - } // testLongCalldata - -} // CacheTest - -``` - -## サンプルアプリケーション {#a-sample-app} - -Solidityでテストを作成するのは素晴らしいものの、結局のところ、有用なDappにするには、チェーンの外部からリクエストを処理できる必要があります。 この記事では、「Write Once, Read Many」の略である`WORM`使ってDappにおけるキャッシュの使い方を詳しく説明します。 キーが書き込まれていない場合は、値を書き込むことができます。 キーがすでに書き込まれている場合は、処理が取り消されます。 - -### コントラクト {#the-contract} - -[ここに](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol)コントラクトのコードがあります。 コードでは、ほとんどすでに解説した`Cache`と`CacheTest`を繰り返しているため、興味深い部分のみを取り上げます。 - -```solidity -import "./Cache.sol"; - -contract WORM is Cache { -``` - -`Cache`を使う最も簡単な方法は、自分のコントラクトに継承することです。 - -```solidity - function writeEntryCached() external { - uint[] memory params = _readParams(2); - writeEntry(params[0], params[1]); - } // writeEntryCached -``` - -この関数は、上述の`CacheTest`の`fourParam`に似ています。 ABI仕様に従っていないため、関数内でパラメータを宣言しないほうが間違いなく良いでしょう。 - -```solidity - // Make it easier to call us - // Function signature for writeEntryCached(), courtesy of - // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 - bytes4 constant public WRITE_ENTRY_CACHED = 0xe4e4f2d3; -``` - -ABIの仕様に従っていないため、`writeEntryCached`を呼び出す外部コードは、`worm.writeEntryCached`を使う代わりに手動でcalldataを作成しなければなりません。 この定数値があると、その記述が楽になります。 - -`WRITE_ENTRY_CACHED`を状態変数として定義しても、それを外部から読み取るには、Getter関数 `worm.WRITE_ENTRY_CACHED()`を使うわなければならないことに気をつけてください。 - -```solidity - function readEntry(uint key) public view - returns (uint _value, address _writtenBy, uint _writtenAtBlock) -``` - -読み取りの関数は、`view`で宣言されているので、トランザクションは必要なく、ガスもかかりません。 結果、パラメータにキャッシュを使うメリットは、ありません。 ビュー関数では、より単純な標準メカニズムを使う方が最善です。 - -### テストコード {#the-testing-code} - -[ここに](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol)コントラクトのテストコードがあります。 再度となりますが、興味深い部分のみを取り上げます。 - -```solidity - function testWReadWrite() public { - worm.writeEntry(0xDEAD, 0x60A7); - - vm.expectRevert(bytes("entry already written")); - worm.writeEntry(0xDEAD, 0xBEEF); -``` - -[この箇所は (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert)、Foundryテストで次の呼び出しが失敗し、失敗した理由をレポートすることを記述する方法です。 これは、低レベルのインターフェイス (` .call()`など) を使用して呼び出しデータを作成し、コントラクトを呼び出すというよりも、` . ()`構文を使う時に作動させます。 - -```solidity - function testReadWriteCached() public { - uint cacheGoat = worm.cacheWrite(0x60A7); -``` - -上記は、`cacheWrite`がキャッシュキーを返すというファクトを使います。 これは運用環境での使用を想定していません。`cacheWrite`は、状態を変更するためです。従ってトランザクション中しか読みだせません。 トランザクションには、戻り値がありません。結果があれば、その結果はイベントとして出力されることになります。 そのため、 `cacheWrite`の戻り値は、オンチェーンコードからのみアクセスできます。また、オンチェーンコードでは、パラメータキャッシュは不要です。 - -```solidity - (_success,) = address(worm).call(_callInput); -``` - -上記は、` .call()`に2つの戻り値があるものの、最初の値のみを使うことをSolidityに伝える方法です。 - -```solidity - (_success,) = address(worm).call(_callInput); - assertEq(_success, false); -``` - -低レベルの`.call()`関数を使っているので`vm.expectRevert()`は使用できません。呼び出しで取得したブール値で成功を確認する必要があります。 - -```solidity - event EntryWritten(uint indexed key, uint indexed value); - - . - 。 - 。 - - _callInput = bytes.concat( - worm.WRITE_ENTRY_CACHED(), worm.encodeVal(a), worm.encodeVal(b)); - vm.expectEmit(true, true, false, false); - emit EntryWritten(a, b); - (_success,) = address(worm).call(_callInput); -``` - -上記は、Foundryでコードが[イベントを正しく発行していること](https://book.getfoundry.sh/cheatcodes/expect-emit)を確認する方法です。 - -### クライアント {#the-client} - -Solidityのテストで得られないものの1つとして、自身のアプリケーションにカットアンドペーストできるJavaScriptコードでしょう。 そのコードを書くために、WORMをOptimismの新しいテストネットであるOptimism Goerliにデプロイしました。 アドレスは、 0xd34335b1d818cee54e3323d3246bd31d94e6a78a
です。 - -- クライアントのJavaScriptコードは、こちらにあります。 次の方法で使うことができます。 -
- --
- -- -
- -- 次のGitリポジトリをクローンしてください。 - -
- -git clone https://github.com/qbzzt/20220915-all-you-can-cache.git -
- -
- -- 必要な次のパッケージをインストールしてください。 - -
- -cd javascript - yarn -
- -
- -- 次の設定ファイルをコピーしてください。 - -
- -cp .env.example .env -
- -
--
-.env
を編集して設定を行ってください。 --
- -- - -- パラメータ - - -- 値 - -- - -- MNEMONIC - - -- トランザクションの支払いで十分なETHを持っているアカウントのニーモニック。 こちらでOptimismのGoerliネットワークの無料ETHを手に入れられます。 - -- -- OPTIMISM_GOERLI_URL - - -- Optimism GoerliのURLを設定します。 公開エンドポイントは、 -https://goerli.optimism.io
です。通信制限がありますが、必要なことをするには十分です。 --
- -- -
--
index.js
の実行 - -- - -node index.js -
- このサンプルアプリケーションは、まず、WORMにエントリを書き込み、calldataとEtherescan上のトランザクションへのリンクを表示します。 そして、そのエントリを読み込み、使用するキーとエントリ内の値 (値、ブロック番号、作成者) を表示します。 -
-- クライアントの大体の部分は、通常のDappのJavaScriptと変わりません。 そのため、ここでも興味深い部分のみを取り上げます。 -
- -- -。 -。 -。 -const main = async () => { - const func = await worm.WRITE_ENTRY_CACHED() - - // Need a new key every time - const key = await worm.encodeVal(Number(new Date())) -
- 与えられたスロットには、1回しか書き込むことができないため、タイムスタンプを使用してスロットが再利用されないようにします。 -
- -- -const val = await worm.encodeVal("0x600D") - -// Write an entry -const calldata = func + key.slice(2) + val.slice(2) -
- Ethersでは、calldataが16進数の文字列、
- -0x
の後に16進数の偶数が続くことを想定しています。key
とval
は、両方とも0x
で始まるため、これらのヘッダーを削除する必要があります。 -- -const tx = await worm.populateTransaction.writeEntryCached() -tx.data = calldata - -sentTx = await wallet.sendTransaction(tx) -
- Solidityのテストコードと同様に、キャッシュされた関数を通常は呼び出すことができません。 代わりに、低レベルのメカニズムを使用する必要があります。 -
- -- -。 - 。 - 。 - // Read the entry just written - const realKey = '0x' + key.slice(4) // remove the FF flag - const entryRead = await worm.readEntry(realKey) - . - 。 - 。 -
- エントリの読み取りには、通常のメカニズムを使用できます。
- - - -view
関数では、パラメータのキャッシュを使う必要はありません。 -- まとめ -
- -- この記事のコードの目的は、PoC (プルーフ・オブ・コンセプト) で、アイデアを理解しやすくすることです。 本番環境でのシステムでは、次のいくつかの追加機能を実装する必要性が考えられます。 -
- --
- -- -
-uint256
以外の値に対応すること。 例えば、文字列です。 -- - グローバルキャッシュの代わりに、ユーザーとキャッシュ間のマッピングを持つことも考えられます。 異なるユーザーで異なる値を使う場合です。 -
-- - アドレスに使用される値は、他の目的に使用される値とは異なります。 アドレス専用の別のキャッシュに分けた方が合理的かもしれません。 -
-- -
-- 現在のコードでは、キャッシュキーは「先着最小キー」アルゴリズムになっています。 最初の16個の値は、1バイトとして送信できます。 次の4080個の値は、2バイトとして送信できます。 次の約100万個の値は、3バイトなどとなります。 本番のシステムでは、キャッシュエントリ上で使用量カウンタを保持し、16個の最も一般的な値が1バイト、次の4080個にくる一般的な値が2バイトになるようにする等、再編成する必要があります。 -
-- ただし、それはリスクのある操作です。 次の一連のイベントを想像してみてください。 -
--
- -- -
- -- Noam Naiveは、彼がトークンを送信するアドレスをエンコードするために
-encodeVal
を呼び出します。 これは、アプリケーションで最初に使用されるアドレスの1つであるため、0x06の値にエンコードされます。 また、トランザクションではないため、view
関数になります。そのため、Noamと彼が使うノードの間であり、他の人はそれについて知りません。 -- -
- -- Owen Ownerは、キャッシュの並べ替え操作を実行します。 そのアドレスを使用する人はほとんどいないため、現在は 0x201122としてエンコードされています。 別の値である1018には、0x06が割り当てられます。 -
-- -
-- Noam Naiveは、保有しているトークンを0x06に送信します。 そのトークンは、アドレス
-0x0000000000000000000000000de0b6b3a7640000
に送られますが、そのアドレスの秘密鍵を誰も知らないため、そこにスタックしてしまいます。 Noamにとってこれは悲惨です。 -- この問題とキャッシュの再順序付け中にメモリプール内にあるトランザクションに関連する問題を解決する方法は、いくつかありますが、注意をしなければなりません。 -
-- 私は、Optimismの従業員なので、最もよく知っているロールアップであるOptimismを使用してキャッシュを説明しました。 内部処理に最小限のコストが発生する他のロールアップでも機能するはずです。他のロールアップを比較すると、L1へのトランザクションデータの書き込みが主なコストとなります。 -
diff --git a/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md b/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md index 33dca9de55b..1cdf48dc7f1 100644 --- a/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md +++ b/public/content/translations/ja/developers/tutorials/create-and-deploy-a-defi-app/index.md @@ -9,7 +9,7 @@ tags: - "Truffle" - "Ganache" - "スマートコントラクト" -skill: 中級 +skill: intermediate lang: ja published: 2020-12-31 source: github.com diff --git a/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md b/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md index e059c68d8c6..d16956e8b7c 100644 --- a/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md +++ b/public/content/translations/ja/developers/tutorials/deploying-your-first-smart-contract/index.md @@ -82,7 +82,7 @@ contract Counter { ![Remix solidityコンパイラ上の「deploy」ボタン](./remix-deploy-button.png) -「Deploy」ボタンをクリックすると、画面下部に作成したコントラクトが表示されます。 画面左側にある矢印をクリックすると、コントラクトの内容が表示されます。 これが、このコントラクトにおける`counter`変数、`increment()`関数、およびゲッターです。 +「Deploy」ボタンをクリックすると、画面下部に作成したコントラクトが表示されます。 画面左側にある矢印をクリックすると、コントラクトの内容が表示されます。 これが、このコントラクトにおける`counter`変数、`increment()`関数、およびゲッター`getCounter()`です。 `count`もしくは`getCount`ボタンをクリックすると、このコントラクトの`count`変数の内容を取得して表示します。 この時点では`increment` 関数を呼び出していないので、「0」が表示されます。 diff --git a/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md b/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md index 67b04a27616..f01f894f8a3 100644 --- a/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md +++ b/public/content/translations/ja/developers/tutorials/eip-1271-smart-contract-signatures/index.md @@ -8,7 +8,7 @@ tags: - "スマートコントラクト" - "検証" - "署名(signing)" -skill: 中級 +skill: intermediate published: 2023-01-12 --- diff --git a/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md index f302f1e0429..d06bfdcbae6 100644 --- a/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -7,7 +7,7 @@ tags: - "Vyper" - "ERC-721" - "Python" -skill: 初級 +skill: beginner published: 2021-04-01 --- diff --git a/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md index 8ed9f4c77d2..afad73cf909 100644 --- a/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/erc20-annotated-code/index.md @@ -6,7 +6,7 @@ lang: ja tags: - "Solidity" - "erc-20" -skill: 初級 +skill: beginner published: 2021-03-09 --- diff --git a/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md index 6b751fcd015..119b5ca92b0 100644 --- a/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md +++ b/public/content/translations/ja/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -75,7 +75,7 @@ _**注意:** [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.a **すでにクライアントをインストール済みの場合は、** 現在のノードプロバイダーのURLを、APIキーを含むAlchemyのURL( `"https://eth-mainnet.alchemyapi.io/v2/your-api-key"`など)に変更します。 -**_注意:_** 以下のスクリプトは、 コマンドラインで実行するのではなく、**ノードコンテキスト**または**ファイルに保存した形で**実行する必要があります。 Nodeまたはnpmがインストールされていない場合は、Mac用設定ガイド [](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) をご覧ください。 +**_注意:_** 以下のスクリプトは、 コマンドラインで実行するのではなく、**ノードコンテキスト**または**ファイルに保存した形で**実行する必要があります。 Nodeまたはnpmがインストールされていない場合は、[Mac用設定ガイド](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) をご覧ください。 Alchemyと統合可能な[Web3ライブラリ](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries)は無数に存在しますが、このチュートリアルでは、Alchemyとシームレスに動作するように構築・設定されたweb3.jsの完全互換版である[Alchemy Web3](https://docs.alchemy.com/reference/api-overview)をお勧めします。 Alchemy Web3は、自動リトライや WebScoket に対する充実したサポートなどの利点を持っています。 diff --git a/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md index 66b00ecc96b..c24270cffca 100644 --- a/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md +++ b/public/content/translations/ja/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -7,7 +7,7 @@ tags: - "Solidity" - "スマートコントラクト" - "セキュリティ" -skill: 中級 +skill: intermediate published: 2020-09-07 source: セキュアなコントラクトの開発 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis diff --git a/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md index 1d5bc962ef9..3be7dc73466 100644 --- a/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md +++ b/public/content/translations/ja/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -462,7 +462,7 @@ Provider、Signer、Contractの詳細については、[ethers.jsドキュメン `initMessage = "Hello world!"`を使用してコントラクトをデプロイしたことを思い出せますでしょうか? ここでは、スマートコントラクトに保存されているメッセージを読み取り、コンソールに出力します。 -JavaScriptでは、ネットワークとのやり取りで非同期関数を使います。 非同期関数の詳細については、[この記事の中ほど](https://blog.bitsrc.io/ Understanding-asynchronous-javascript-the-event-loop-74cd408419ff)をご覧ください。 +JavaScriptでは、ネットワークとのやり取りで非同期関数を使います。 非同期関数の詳細については、[この記事の中ほど](https://blog.bitsrc.io/Understanding-asynchronous-javascript-the-event-loop-74cd408419ff)をご覧ください。 以下のコードを使用して、スマートコントラクトの`message`関数を呼び出し、initメッセージを読み取ります。 diff --git a/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md b/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md index 18cac862b60..b77db2aa191 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-implement-an-erc721-market/index.md @@ -7,7 +7,7 @@ tags: - "erc-721" - "Solidity" - "トークン" -skill: 中級 +skill: intermediate lang: ja published: 2020-03-19 source: Hackernoon diff --git a/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md index f0d80c70c92..6c7785f0bd0 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -8,7 +8,7 @@ tags: - "スマートコントラクト" - "テスト" - "モック" -skill: 中級 +skill: intermediate published: 2020-05-02 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/mocking-contracts diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md index 3712930532a..e481f540dfb 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md @@ -9,7 +9,7 @@ tags: - "セキュリティ" - "テスト" - "ファジング" -skill: 上級 +skill: advanced published: 2020-04-10 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md index 41a17d872c5..baa9cab81c5 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md @@ -9,7 +9,7 @@ tags: - "セキュリティ" - "テスト" - "フォーマルな検証" -skill: 上級 +skill: advanced published: 2020-01-13 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md index e3192cecfea..2196e56b178 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md @@ -9,7 +9,7 @@ tags: - "セキュリティ" - "テスト" - "静的解析" -skill: 上級 +skill: advanced published: 2020-06-09 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither diff --git a/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md b/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md index 669c5b39b70..8c4d3d5f70e 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md @@ -7,7 +7,7 @@ tags: - "Solidity" - "スマートコントラクト" - "オラクル" -skill: 初級 +skill: beginner published: 2021-06-29 source: Tellor Docs sourceUrl: https://docs.tellor.io/tellor/ diff --git a/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md b/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md index 98735d50114..dd960cde570 100644 --- a/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md +++ b/public/content/translations/ja/developers/tutorials/how-to-write-and-deploy-an-nft/index.md @@ -345,6 +345,6 @@ Yassss! イーサリアム(テストネット)チェーンにNFTスマート ![Alchemy のエクスプローラーダッシュボードで「内部」で行われた通話を表示する](./alchemy-explorer-goerli.png) -ここでは、 .deploy() 関数を呼び出した際に、Hardhat/Ethers が内部で作った JSON-RPC の呼び出しをいくつか見ることができます。 ここで呼び出している2つの重要なJSON-RPCは、実際にSepoliaチェーン上でコントラクトを書き込むリクエストの[eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction)と、(トランザクションを送信する際の典型的なパターンである) ハッシュを与えられたトランザクションに関する情報を読み取るリクエスト[eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash)です。 トランザクションの送信の詳細については、このチュートリアルの [ Web3 を使用したトランザクションの送信 ](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) をご覧ください。 +ここでは、 .deploy() 関数を呼び出した際に、Hardhat/Ethers が内部で作った JSON-RPC の呼び出しをいくつか見ることができます。 ここで呼び出している2つの重要なJSON-RPCは、実際にSepoliaチェーン上でコントラクトを書き込むリクエストの[eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction)と、(トランザクションを送信する際の典型的なパターンである) ハッシュを与えられたトランザクションに関する情報を読み取るリクエスト[eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash)です。 トランザクションの送信の詳細については、このチュートリアルの [Web3 を使用したトランザクションの送信](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) をご覧ください。 以上がこのチュートリアルのパート1です。 [パート2](/developers/tutorials/how-to-mint-an-nft/) では、NFT を発行することで実際にスマートコントラクトとやりとりをします。そして、[パート3](/developers/tutorials/how-to-view-nft-in-metamask/) では、Etherreum ウォレット内の NFT を確認する方法を示します! diff --git a/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md b/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md index 8c11cdec88d..adb43255f91 100644 --- a/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md +++ b/public/content/translations/ja/developers/tutorials/logging-events-smart-contracts/index.md @@ -7,7 +7,7 @@ tags: - "Remix" - "Solidity" - "イベント" -skill: 中級 +skill: intermediate lang: ja published: 2020-04-03 source: EthereumDev diff --git a/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md b/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md index e2b63496cb1..20642137f79 100644 --- a/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md +++ b/public/content/translations/ja/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md @@ -5,7 +5,7 @@ author: "Mario Havel" tags: - "クライアント" - "ノード" -skill: 中級 +skill: intermediate lang: ja published: 2021-01-13 --- diff --git a/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md index 96cc92d9c85..85575af4262 100644 --- a/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/optimism-std-bridge-annotated-code/index.md @@ -6,7 +6,7 @@ tags: - "Solidity" - "ブリッジ" - "レイヤー2" -skill: 中級 +skill: intermediate published: 2022-03-30 lang: ja --- @@ -992,7 +992,7 @@ contract L2StandardERC20 is IL2StandardERC20, ERC20 { L2のブリッジは、ERC-165を健全性チェックとして用いて、資産を送信するのに用いるERC-20コントラクトが `IL2StandardERC20`であるか確認します。 -**注意:不正なコントラクトが`supportsInterface`に対して虚偽の値を返すことを防ぐメカニズムは含まれていないため、これはセキュリティ保護のメカニズム_ではなく_、健全性チェックのメカニズムです。 +**注意:不正なコントラクトが`supportsInterface`に対して虚偽の値を返すことを防ぐメカニズムは含まれていないため、これはセキュリティ保護のメカニズム_ではなく_、健全性チェックのメカニズムです。 ```solidity // slither-disable-next-line external-function diff --git a/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md index 4b2392296aa..7b312f73b87 100644 --- a/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md +++ b/public/content/translations/ja/developers/tutorials/secure-development-workflow/index.md @@ -6,7 +6,7 @@ tags: - "スマートコントラクト" - "セキュリティ" - "Solidity" -skill: 中級 +skill: intermediate lang: ja published: 2020-09-07 source: セキュアなコントラクトの開発 diff --git a/public/content/translations/ja/developers/tutorials/short-abi/index.md b/public/content/translations/ja/developers/tutorials/short-abi/index.md index e4c640ea6cc..fd9cb3f38ea 100644 --- a/public/content/translations/ja/developers/tutorials/short-abi/index.md +++ b/public/content/translations/ja/developers/tutorials/short-abi/index.md @@ -5,7 +5,7 @@ author: Ori Pomerantz lang: ja tags: - "レイヤー2" -skill: 中級 +skill: intermediate published: 2022-04-01 --- diff --git a/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md b/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md index c470f818a1c..81636f3cf98 100644 --- a/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md +++ b/public/content/translations/ja/developers/tutorials/smart-contract-security-guidelines/index.md @@ -6,7 +6,7 @@ tags: - "Solidity" - "スマートコントラクト" - "セキュリティ" -skill: 中級 +skill: intermediate lang: ja published: 2020-09-06 source: セキュアなコントラクトの構築 diff --git a/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md b/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md index 504dd0b7ba7..6d9b6b25add 100644 --- a/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md +++ b/public/content/translations/ja/developers/tutorials/solidity-and-truffle-continuous-integration-setup/index.md @@ -9,7 +9,7 @@ tags: - "テスト" - "Truffle" - "Ganache" -skill: 中級 +skill: intermediate published: 2020-06-05 source: soliditydeveloper.com sourceUrl: https://soliditydeveloper.com/continuous-integration diff --git a/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md b/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md index a5fb4559155..a20a70835ad 100644 --- a/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md +++ b/public/content/translations/ja/developers/tutorials/testing-erc-20-tokens-with-waffle/index.md @@ -8,9 +8,8 @@ tags: - "Solidity" - "テスト" - "ERC-20" -skill: 中級 +skill: intermediate lang: ja -sidebar: true published: 2020-10-16 --- diff --git a/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md b/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md index 844582156c6..87176cedee9 100644 --- a/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md +++ b/public/content/translations/ja/developers/tutorials/token-integration-checklist/index.md @@ -8,7 +8,7 @@ tags: - "スマートコントラクト" - "セキュリティ" - "トークン" -skill: 中級 +skill: intermediate published: 2020-08-13 source: セキュアなコントラクトの構築 sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/token_integration.md @@ -71,7 +71,7 @@ Slitherには[slither-prop](https://github.com/crytic/slither/wiki/Property-gene - **所有者のミント能力が制限されているか**。 悪意の所有者やセキュリティが侵害された所有者は、ミント能力を悪用する可能性があります。 Slitherの[human-summaryプリンター](https://github.com/crytic/slither/wiki/Printer-documentation#contract-summary)を使用して、ミント能力を評価し、マニュアルでコードをレビューする必要があるかを決定してください。 - **トークンが、一時停止可能であるか**。 悪意の所有者やセキュリティを侵害された所有者は、一次停止が可能なトークンを利用してコントラクトをトラップすることが可能です。 マニュアルで、一時停止可能なコードを特定してください。 - **所有者がコントラクトをブラックリストに登録できるようになっていないか**。 悪意の所有者やセキュリティが侵害された所有者は、ブラックリストに登録されたトークンを使用して、コントラクトをトラップすることが可能です。 マニュアルで、ブラックリスト機能を特定してください。 -- **トークン開発チームの身元がはっきりしており、不正使用の責任を負える組織であるか/strong>。匿名の開発チームが開発したコントラクトや、または法的シェルターの対象に含まれるコントラクトに対しては、より厳格なレビューが必要になります。 +- **トークン開発チームの身元がはっきりしており、不正使用の責任を負える組織であるか/strong>。匿名の開発チームが開発したコントラクトや、または法的シェルターの対象に含まれるコントラクトに対しては、より厳格なレビューが必要になります。 ## トークンの枯渇 {#token-scarcity} diff --git a/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md b/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md index 59852d0fd58..80335862de8 100644 --- a/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md +++ b/public/content/translations/ja/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md @@ -7,7 +7,7 @@ tags: - "トークン" - "Solidity" - "erc-20" -skill: 初級 +skill: beginner lang: ja published: 2020-04-05 source: EthereumDev diff --git a/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md b/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md index 0382c859e6d..a86e21bd040 100644 --- a/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/public/content/translations/ja/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -4,7 +4,7 @@ description: Uniswap-v2コントラクトの仕組み、 コントラクトの author: Ori Pomerantz tags: - "Solidity" -skill: 中級 +skill: intermediate published: 2021-05-01 lang: ja --- diff --git a/public/content/translations/ja/developers/tutorials/using-websockets/index.md b/public/content/translations/ja/developers/tutorials/using-websockets/index.md index b69a39bb2ee..fb7f8888c49 100644 --- a/public/content/translations/ja/developers/tutorials/using-websockets/index.md +++ b/public/content/translations/ja/developers/tutorials/using-websockets/index.md @@ -8,7 +8,7 @@ tags: - "WebSockets" - "クエリ" - "JavaScript" -skill: 初級 +skill: beginner source: Alchemy ドキュメント sourceUrl: https://docs.alchemyapi.io/guides/using-websockets published: 2020-12-01 diff --git a/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md b/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md index ccef3259a0a..998980038d0 100644 --- a/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md +++ b/public/content/translations/ja/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md @@ -8,7 +8,7 @@ tags: - "Solidity" - "テスト" - "モックアップ作成" -skill: 中級 +skill: intermediate lang: ja published: 2020-11-14 --- diff --git a/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md b/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md index 8cab56944c6..1ff87d49abb 100644 --- a/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md +++ b/public/content/translations/ja/developers/tutorials/yellow-paper-evm/index.md @@ -4,7 +4,7 @@ description: イーサリアムの正式な仕様であるイエローペーパ author: "qbzzt" tags: - "イーサリアム仮想マシン(EVM)" -skill: 中級 +skill: intermediate lang: ja published: 2022-05-15 --- @@ -33,7 +33,7 @@ _システム状態_とは、システムを実行するため必要なすべて このセクションでは、EVMの基本事項と、EVMと他の計算モデルとの比較について説明しています。 -[スタックマシン](https://en.wikipedia.org/wiki/Stack_machine)は、中間データをレジスタではなく[**スタック**](https:// en.wikipedia.org/wiki/Stack_(abstract_data_type))に格納するコンピュータです。 これは、仮想マシンで好まれるアーキテクチャです。なぜなら、実装が簡単で、バグやセキュリティの脆弱性が発生する可能性を大幅に低くできるためです。 スタック内のメモリは、256ビットのワードに分割されます。 256ビットが選ばれた理由としては、Kecck-256ハッシュや楕円曲線計算など、イーサリアムの中核となる暗号操作に都合が良いためです。 スタックの最大サイズは、1024バイトです。 オペコード実行時、通常、スタックからパラメータを取得します。 `POP`(スタックの先頭のアイテムの削除)、`DUP_N`(スタックのN番目のアイテムの複製)など、スタック内の要素を再構成するための専用オペコードがあります。 +[スタックマシン](https://en.wikipedia.org/wiki/Stack_machine)は、中間データをレジスタではなく[**スタック**](https://en.wikipedia.org/wiki/Stack_(abstract_data_type))に格納するコンピュータです。 これは、仮想マシンで好まれるアーキテクチャです。なぜなら、実装が簡単で、バグやセキュリティの脆弱性が発生する可能性を大幅に低くできるためです。 スタック内のメモリは、256ビットのワードに分割されます。 256ビットが選ばれた理由としては、Kecck-256ハッシュや楕円曲線計算など、イーサリアムの中核となる暗号操作に都合が良いためです。 スタックの最大サイズは、1024バイトです。 オペコード実行時、通常、スタックからパラメータを取得します。 `POP`(スタックの先頭のアイテムの削除)、`DUP_N`(スタックのN番目のアイテムの複製)など、スタック内の要素を再構成するための専用オペコードがあります。 EVMには、 実行中にデータを保存するために使用される**メモリ**と呼ばれる揮発性スペースもあります。 このメモリは、32バイトのワードで構成されます。 すべてのメモリのロケーションは、ゼロで初期化されます。 次の[Yul](https://docs.soliditylang.org/en/latest/yul.html)コードを実行してメモリにワードを追加すると、32バイトのメモリのワード内にある空スペースがパディングによってゼロで埋められます。つまり、ロケーション0~29、0x60~30、0xA7~31にゼロが含まれる1つのワードが作成されます。 @@ -235,7 +235,7 @@ _σ[μs[0] mod 2160] ≠ ∅_の場合、このアドレ | 0x8F | DUP16 | 16 | 17 | 16番目のスタックアイテムを複製 | | | | | | _μ′s[0] ≡ μs[15]_ | -スタックアイテムを使用するには、ポップする必要があることに注意してください。つまり、そのアイテム上にあるすべてのスタックアイテムもポップする必要があります。 [`DUP `](https://www.evm.codes/#8f)および[`SWAP `](https://www. evm.codes/#9f)の場合は、最大で16個の値をポップして、その後にプッシュしなければならなりません。 +スタックアイテムを使用するには、ポップする必要があることに注意してください。つまり、そのアイテム上にあるすべてのスタックアイテムもポップする必要があります。 [`DUP `](https://www.evm.codes/#8f)および[`SWAP `](https://www.evm.codes/#9f)の場合は、最大で16個の値をポップして、その後にプッシュしなければならなりません。 ## 9.5 実行サイクル {#95-exec-cycle} diff --git a/public/content/translations/ja/enterprise/index.md b/public/content/translations/ja/enterprise/index.md index 4911344d18d..1e3ff22fc55 100644 --- a/public/content/translations/ja/enterprise/index.md +++ b/public/content/translations/ja/enterprise/index.md @@ -51,7 +51,7 @@ Hyperledger、Quorum、Cordaプロジェクトが開始された2016年頃から イーサリアムを企業にとって身近な存在にするために、さまざまな組織が次のような協力的な取り組みを行っています。 - [エンタープライズ・イーサリアム・アライアンス (EEA)](https://entethalliance.org/) EEAは、組織に対して日常業務にイーサリアムテクノロジーを導入、使用することを支援します。 組織の目標としては、専門的および商業的なサポート、提唱および研究、標準の開発およびエコシステムトラストサービスを通じてビジネスにおけるイーサリアムを促進することです。 -- [グローバル・ブロックチェーン・ビジネス評議会 (GBBC) ](https://www.gbbc.io/) - GBBCは、ブロックチェーン・テクノロジー・エコシステムの業界団体です。 政策立案者や規制当局との調整、イベントの開催および深い議論、研究の推進を通して、GBBCは、より安全で公平で機能的な社会を構築するためのブロックチェーンのさらなる導入に専念しています。 +- [グローバル・ブロックチェーン・ビジネス評議会 (GBBC)](https://www.gbbc.io/) - GBBCは、ブロックチェーン・テクノロジー・エコシステムの業界団体です。 政策立案者や規制当局との調整、イベントの開催および深い議論、研究の推進を通して、GBBCは、より安全で公平で機能的な社会を構築するためのブロックチェーンのさらなる導入に専念しています。 ## エンタープライズ向けデベロッパーリソースについて {#enterprise-developer-resources} diff --git a/public/content/translations/ja/guides/how-to-revoke-token-access/index.md b/public/content/translations/ja/guides/how-to-revoke-token-access/index.md index b5c980b9b99..e73cb9c0f6b 100644 --- a/public/content/translations/ja/guides/how-to-revoke-token-access/index.md +++ b/public/content/translations/ja/guides/how-to-revoke-token-access/index.md @@ -18,12 +18,12 @@ lang: ja 自分のアドレスに接続されたスマートコントラクトを閲覧したり、無効にさせることが可能なウェブサイトもあります。 以下のようなウェブサイトにアクセスし、ウォレットに接続してください。 -- [Ethallowance (イーサアラウアンス) ](https://ethallowance.com/) (イーサリアム) -- [Etherscan (イーサスキャン) ](https://etherscan.io/tokenapprovalchecker) (イーサリアム) -- [Cointool (コインツール) ](https://cointool.app/approve/eth)(複数のネットワーク) -- [Revoke (リボーク) ](https://revoke.cash/) (複数のネットワーク) -- [Unrekt (アンレクト) ](https://app.unrekt.net/)(複数のネットワーク) -- [EverRevoke (エバーリボーク) ](https://everrise.com/everrevoke/)(複数のネットワーク) +- [Ethallowance (イーサアラウアンス)](https://ethallowance.com/) (イーサリアム) +- [Etherscan (イーサスキャン)](https://etherscan.io/tokenapprovalchecker) (イーサリアム) +- [Cointool (コインツール)](https://cointool.app/approve/eth) (複数のネットワーク) +- [Revoke (リボーク)](https://revoke.cash/) (複数のネットワーク) +- [Unrekt (アンレクト)](https://app.unrekt.net/) (複数のネットワーク) +- [EverRevoke (エバーリボーク)](https://everrise.com/everrevoke/) (複数のネットワーク) ## ステップ 2: ウォレットを接続する diff --git a/public/content/translations/ja/roadmap/future-proofing/index.md b/public/content/translations/ja/roadmap/future-proofing/index.md index 8cb26ce15f1..8c2330309e7 100644 --- a/public/content/translations/ja/roadmap/future-proofing/index.md +++ b/public/content/translations/ja/roadmap/future-proofing/index.md @@ -15,7 +15,7 @@ template: roadmap イーサリアムのデベロッパーが直面している課題は、現在の[プルーフ・オブ・ステーク](/glossary/#pos)のプロトコルが、有効な[ブロック](/glossary/#block)の投票を集約するために、非常に効率的な署名スキームであるBLSに依存していることです。 この署名スキームは、量子コンピューターによって破られてしまう可能性があります。一方、量子耐性のある代替手段は、計算効率がそれほど良くありません。 -イーサリアムでは、暗号秘密を生成するために[「KZG」コミットメントスキーム](/roadmap/danksharding/#what-is-kzg)が広く使われています。しかし、このスキームは量子コンピュータによって破られる可能性があります。 現在は、多くのユーザーが生成したランダム性を使用して「信頼できるセットアップ」として回避されており、量子コンピューターによるリバースエンジニアリングができないようになっています。 しかし、理想的には、量子安全暗号を組み込むことで、脆弱性を根本的に解決することが望まれます。 BLSスキームの効率的な代替となる可能性のある2つの主要なアプローチとして、[STARKベース](https://hackmd.io/@vbuterin/stark_aggregation)と[ラティスベース](https:/ /medium.com/asecuritysite-when-bob-met-alice/so-what-is-lattice-encryption-326ac66e3175)の署名スキームがあります。 **これらについては現在、研究および試作中です**。 +イーサリアムでは、暗号秘密を生成するために[「KZG」コミットメントスキーム](/roadmap/danksharding/#what-is-kzg)が広く使われています。しかし、このスキームは量子コンピュータによって破られる可能性があります。 現在は、多くのユーザーが生成したランダム性を使用して「信頼できるセットアップ」として回避されており、量子コンピューターによるリバースエンジニアリングができないようになっています。 しかし、理想的には、量子安全暗号を組み込むことで、脆弱性を根本的に解決することが望まれます。 BLSスキームの効率的な代替となる可能性のある2つの主要なアプローチとして、[STARKベース](https://hackmd.io/@vbuterin/stark_aggregation)と[ラティスベース](https://medium.com/asecuritysite-when-bob-met-alice/so-what-is-lattice-encryption-326ac66e3175)の署名スキームがあります。 **これらについては現在、研究および試作中です**。 KZGと信頼できるセットアップについての詳細 From 0783f20f01218563c3f30ed1e2ebd6668bf21aa4 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 3 May 2024 15:16:41 +0100 Subject: [PATCH 3/6] Apply suggestions from code review --- public/content/translations/ja/developers/docs/mev/index.md | 2 +- .../ja/developers/docs/standards/tokens/erc-4626/index.md | 2 +- .../tutorials/a-developers-guide-to-ethereum-part-one/index.md | 2 +- .../translations/ja/roadmap/secret-leader-election/index.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/content/translations/ja/developers/docs/mev/index.md b/public/content/translations/ja/developers/docs/mev/index.md index 8fbed65d21c..557602163a2 100644 --- a/public/content/translations/ja/developers/docs/mev/index.md +++ b/public/content/translations/ja/developers/docs/mev/index.md @@ -178,7 +178,7 @@ PBS(提案者と作成者の分離)は、MEVの抽出に伴う悪影響を 4. ビルダーAPIを実行しているビルダーは、ブラインドのブロック提案を確認した上で、完全な実行ペイロードで対応すると想定されています。 これにより、バリデータは「署名済み」のビーコンブロックを作成し、ネットワークに拡散することができます。 -5. ビルダーAPIを使用するバリデータの場合でも、ブロックビルダーが迅速に対応しない場合にブロック提案に伴う報酬が受け取れない場合を避けるために、ローカルでブロックを構築する必要があります。 しかしバリデータは、この時点で公開されたトランザクションあるいは他のセットを用いて別のブロックを作成することはできません。これは_曖昧化_(同じスロット内の2つのブロックに署名すること)を発生させるため、スラッシングの対象である違反行為です。 +5. ビルダーAPIを使用するバリデータの場合でも、ブロックビルダーが迅速に対応しない場合にブロック提案に伴う報酬が受け取れない場合を避けるために、ローカルでブロックを構築する必要があります。 しかしバリデータは、この時点で公開されたトランザクションあるいは他のセットを用いて別のブロックを作成することはできません。これは_曖昧化_(同じスロット内の2つのブロックに署名すること)を発生させるため、スラッシングの対象である違反行為です。 ビルダーAPIの実装例としては、イーサリアムに対するMEVの悪影響を軽減するように[フラッシュボットのオークション機能](https://docs.flashbots.net/Flashbots-auction/overview/)を改善した[MEV Boost](https://github.com/flashbots/mev-boost)があります。 フラッシュボットのオークションでは、プルーフ・オブ・ワークを行うマイナーに対し、利益を伴うブロックを作成する作業を**サーチャー**と呼ばれる専門のユーザーに外注することが認められています。 diff --git a/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md index 7f52b265663..4fec6280794 100644 --- a/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md +++ b/public/content/translations/ja/developers/docs/standards/tokens/erc-4626/index.md @@ -187,7 +187,7 @@ event Deposit( #### 出金イベント -`redeem` あるいは [`withdraw`](#withdraw)メソッドにより、預金者がボールトからシェアを引き出す際に、**必ず**発行しなければなりません。 +`redeem` あるいは [`withdraw`](#withdraw)メソッドにより、預金者がボールトからシェアを引き出す際に、**必ず**発行しなければなりません。 ```solidity event Withdraw( diff --git a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index 207fbdf1fcc..3d49cbf808e 100644 --- a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -41,7 +41,7 @@ sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt- 各[ブロック](/developers/docs/blocks/)は、その前のブロックを参照します。`parentHash`は、単に前のブロックのハッシュ値です。注: イーサリアムは -[ハッシュ関数](https://wikipedia.org/wiki/Hash_function)を定期的に使用して、固定サイズの値(ハッシュ)を生成します。 イーサリアムではハッシュ値が重要な役割を果たしますが、今のところは固有のIDと考えておくとよいでしょう。 +注: イーサリアムは [ハッシュ関数](https://wikipedia.org/wiki/Hash_function)を定期的に使用して、固定サイズの値(ハッシュ)を生成します。 イーサリアムではハッシュ値が重要な役割を果たしますが、今のところは固有のIDと考えておくとよいでしょう。 ![ブロックチェーンと各ブロック内のデータを表す図](./blockchain-diagram.png) diff --git a/public/content/translations/ja/roadmap/secret-leader-election/index.md b/public/content/translations/ja/roadmap/secret-leader-election/index.md index 780aeb8b375..85e4c933f25 100644 --- a/public/content/translations/ja/roadmap/secret-leader-election/index.md +++ b/public/content/translations/ja/roadmap/secret-leader-election/index.md @@ -33,7 +33,7 @@ SSLE(シークレット・シングル・リーダー選出)では、選出さ ## シークレット・非シングル・リーダー選出(SnSLE) {#secret-non-single-leader-election} -プルーフ・オブ・ワークにおいてブロックの提案を決定する方法と同様に、バリデータが各スロットでブロックを提案する機会をランダムに与える仕組みもあり、シークレット・非シングル・リーダー選出(SnSLE)と呼ばれています。 例えば、現在のプロトコルでバリデータをランダムに選択するために使われているRANDAO関数を活用すれば、簡単に実現できます。 RANDAOを使うアイデアとは、多くの独立しているバリデータから送信されたハッシュを混合することで、十分な乱数が生成するというものです。 SnSLEにおいて、これらのハッシュを使って、次のブロック提案者を選ぶことができます。例えば、最小値のハッシュの選択です。 有効なハッシュ値の範囲を設定することで、各スロットでバリデータが選ばれる可能性を調整することができます。 ハッシュ値が`2^256 * 5 / N` (`N` = アクティブなバリデータ数)未満でなければならないとアサートすると、各スロットで個々のバリデータが選択される可能性は、`5/N`になります。 この例では、少なくとも1人の提案者が各スロットで有効なハッシュを生成する確率は99.3%になります。 +プルーフ・オブ・ワークにおいてブロックの提案を決定する方法と同様に、バリデータが各スロットでブロックを提案する機会をランダムに与える仕組みもあり、**シークレット・非シングル・リーダー選出(SnSLE)**と呼ばれています。 例えば、現在のプロトコルでバリデータをランダムに選択するために使われているRANDAO関数を活用すれば、簡単に実現できます。 RANDAOを使うアイデアとは、多くの独立しているバリデータから送信されたハッシュを混合することで、十分な乱数が生成するというものです。 SnSLEにおいて、これらのハッシュを使って、次のブロック提案者を選ぶことができます。例えば、最小値のハッシュの選択です。 有効なハッシュ値の範囲を設定することで、各スロットでバリデータが選ばれる可能性を調整することができます。 ハッシュ値が`2^256 * 5 / N` (`N` = アクティブなバリデータ数)未満でなければならないとアサートすると、各スロットで個々のバリデータが選択される可能性は、`5/N`になります。 この例では、少なくとも1人の提案者が各スロットで有効なハッシュを生成する確率は99.3%になります。 ## 現在の進行状況 {#current-progress} From dfccc7c98b3bf06aeb5bc47b2a55620e0165edaa Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 7 May 2024 09:48:52 +0100 Subject: [PATCH 4/6] Fix broken FeaturedText tag --- .../a-developers-guide-to-ethereum-part-one/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index 3d49cbf808e..5f40ef7259f 100644 --- a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -39,9 +39,9 @@ sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt- } ``` -各[ブロック](/developers/docs/blocks/)は、その前のブロックを参照します。`parentHash`は、単に前のブロックのハッシュ値です。注: イーサリアムは +各[ブロック](/developers/docs/blocks/)は、その前のブロックを参照します。`parentHash`は、単に前のブロックのハッシュ値です。 - 注: イーサリアムは [ハッシュ関数](https://wikipedia.org/wiki/Hash_function)を定期的に使用して、固定サイズの値(ハッシュ)を生成します。 イーサリアムではハッシュ値が重要な役割を果たしますが、今のところは固有のIDと考えておくとよいでしょう。 +注: イーサリアムは ハッシュ関数を定期的に使用して、固定サイズの値(ハッシュ)を生成します。 イーサリアムではハッシュ値が重要な役割を果たしますが、今のところは固有のIDと考えておくとよいでしょう。 ![ブロックチェーンと各ブロック内のデータを表す図](./blockchain-diagram.png) From 70ddd79598563ea4b4bfc7c36723df7c27eb02eb Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Tue, 7 May 2024 12:01:15 +0100 Subject: [PATCH 5/6] Fix FeaturedText --- .../a-developers-guide-to-ethereum-part-one/index.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md index 5f40ef7259f..872577ba549 100644 --- a/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md +++ b/public/content/translations/ja/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -284,9 +284,10 @@ Out[13]: 1000003000000000000000000 2つ目のアカウントの残高は、 1,000,000 ETHから1,000,003 ETHに増えているので、正しいようです。 1つ目のアカウントはどうなったのでしょうか? 3 ETHより少し多い金額が失われたようです。 残念ながら、人生にはタダというものはなく、イーサリアムのパブリックネットワークを利用するには、そのサポート役であるピアに対価を支払う必要があります。 トランザクションを送信したアカウントから、少額のトランザクションフィーが差し引かれました。このフィーは、消費されたガスの量(ETH送金では21000単位のガス)にベースフィーを掛けたものです。ベースフィーは、ネットワークのアクティビティに加えて、ブロック内にトランザクションを含めるバリデータに送信されるチップによって異なります。 -[ガスの詳細](/developers/docs/gas/#post-london)注: パブリックネットワークにおいてトランザクションフィーは、ネットワークの需要やどれだけ迅速にトランザクションを処理する必要があるのかによって変動します。 フィー(手数料)の計算方法の内訳に興味がある場合は、 +[ガスの詳細](/developers/docs/gas/#post-london) -[ブロックに含まれるトランザクションの仕組み](https://medium.com/ethereum-grid/ethereum-101-how-are-transactions-included-in-a-block-9ae5f491853f)に関する以前の投稿をご覧ください。 +注: パブリックネットワークにおいてトランザクションフィーは、ネットワークの需要やどれだけ迅速にトランザクションを処理する必要があるのかによって変動します。 フィー(手数料)の計算方法の内訳に興味がある場合は、 +ブロックに含まれるトランザクションの仕組みに関する以前の投稿をご覧ください。 ## ちょっと一息 {#and-breathe} From 0e957e064a37348ebb8958d727e7f60a395ef8ae Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Tue, 7 May 2024 15:51:42 -0700 Subject: [PATCH 6/6] revert: regressions from recent changes --- .../translations/ja/community/get-involved/index.md | 5 +---- .../translations/ja/community/grants/index.md | 1 - .../patricia-merkle-trie/index.md | 12 ++++++------ 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/public/content/translations/ja/community/get-involved/index.md b/public/content/translations/ja/community/get-involved/index.md index f6f6036f258..f5272999cf1 100644 --- a/public/content/translations/ja/community/get-involved/index.md +++ b/public/content/translations/ja/community/get-involved/index.md @@ -90,7 +90,7 @@ ETHをステーキングすると、イーサリアムネットワークの保 ## プロダクトマネージャー{#product-managers} -- イーサリアムエコシステムは皆さんの才能が必要です。 多くの企業がプロダクトマネージャーの求人を行っています。 オープンソースプロジェクトへの貢献を始めたい場合は、[Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu)または[MetaCartel](https://www.metacartel.org/)にご連絡ください。 +- イーサリアムエコシステムは皆さんの才能が必要です。 多くの企業がプロダクトマネージャーの求人を行っています。 オープンソースプロジェクトへの貢献を始めたい場合は、[Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu)または[RaidGuild](https://www.raidguild.org/)にご連絡ください。 ## マーケティング {#marketing} @@ -121,16 +121,13 @@ ETHをステーキングすると、イーサリアムネットワークの保 - [DAOSquare](https://www.daosquare.io) [@DAOSquare](https://twitter.com/DAOSquare) - _非技術分野で分散型自律組織(DAO)の概念をプロモーションし、価値の創造を支援_ - [Developer DAO](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _インターネットは共同所有されるべきという信念を共有するデベロッパーコミュニティ_ - [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _分散型自律組織(DAO)として機能しているフリーランスのWeb3開発共同体_ -- [DXdao](https://DXdao.eth.link/) [@DXdao](https://twitter.com/DXdao_) - _分散型開発、分散型アプリ(Dapp)のガバナンスとプロトコル_ - [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _DAOhausのコミュニティガバナンス_ -- [Hero DAO](https://herodao.org/) [@hero_dao](https://twitter.com/hero_dao) - _コミュニティにより所有されているスーパーヒーロー・フランチャイズ_ - [LexDAO](https://lexdao.coop) [@lex_DAO](https://twitter.com/lex_DAO) - _リーガル・エンジニアリング_ - [Machi X](https://machix.com) [@MachiXOfficial](https://twitter.com/MachiXOfficial) - _アート・コミュニティ_ - [MetaCartel](https://metacartel.org) [@Meta_Cartel](https://twitter.com/Meta_Cartel) - _分散型自律組織(DAO)インキュベータ_ - [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _プレシード暗号プロジェクトのベンチャー_ - [MetaGame](https://metagame.wtf) [@MetaFam](https://twitter.com/MetaFam) - _実際のMMORPGゲームメカニクス_ - [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _デジ・フィジカルのアパレルブランド_ -- [ΜΓΔ](https://metagammadelta.com/) (Meta Gamma Delta) [@metagammadelta](https://twitter.com/metagammadelta) - _女性主導のプロジェクト_ - [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _イーサリアム開発の資金調達に注力するコミュニティ_ - [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _Web3デベロッパーの共同体_ diff --git a/public/content/translations/ja/community/grants/index.md b/public/content/translations/ja/community/grants/index.md index 4bc24c0f156..c54199159b0 100644 --- a/public/content/translations/ja/community/grants/index.md +++ b/public/content/translations/ja/community/grants/index.md @@ -15,7 +15,6 @@ lang: ja これらのプログラムは、広範囲のプロジェクトに助成金を提供し、イーサリアムエコシステムを幅広くサポートするものです。 拡張性、コミュニティ構築、セキュリティ、プライバシーなどのソリューションが対象となり、 どれか1つのイーサリアムプラットフォームに固有の助成プログラムではありません。 不明な場合は、まずはこちらから始めてみてください。 - [EFエコシステム・サポート・プログラム](https://esp.ethereum.foundation) - _ユニバーサルツール、インフラストラクチャ、研究、公共財を対象とした、イーサリアムにプラスとなるオープンソース・プロジェクトへの資金提供_ -- [MetaCartel](https://www.metacartel.org/grants/) - _分散型アプリ(Dapp)開発、分散型自律組織(DAO)作成_ - [Moloch DAO](https://www.molochdao.com/) - _プライバシー、レイヤー2スケーリング、クライアントセキュリティなど_ - [分散型自律組織(DAO)の助成](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _助成プログラムを提供する組織のGoogleスプレッドシート_ - [学術助成金](https://esp.ethereum.foundation/academic-grants) - _イーサリアム関連の学術研究をサポートする助成金_ diff --git a/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md index 2eca619a553..76ea7893d93 100644 --- a/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ b/public/content/translations/ja/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -164,14 +164,14 @@ sidebarDepth: 2 ### ツリーの例 {#example-trie} -次の4つのパスバリューのペアを含むツリーが必要だとします。 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coin')`、`('horse', 'stallion')` +次の4つのパスバリューのペアを含むツリーが必要だとします。 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coins')`、`('horse', 'stallion')` まず、パスと値(バリュー)の両方を`bytes`に変換します。 以下では、_paths_を実際のバイト表現 `<>`によって表示しています。しかし、 _values_は、分かりやすいように文字列として`''`で表示しています(実際は`bytes`) 。 ``` <64 6f> : 'verb' <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coin' + <64 6f 67 65> : 'coins' <68 6f 72 73 65> : 'stallion' ``` @@ -180,12 +180,12 @@ sidebarDepth: 2 ``` rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashD ] - hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] ``` -1つのノードが内部の別のノードから参照されるとき、含まれているのは、`H(rlp.encode(x))`であり、`H(x) = keccak256(x) if len(x) >= 32 else x`と`rlp.encode`は、[RLP](/developers/docs/data-structures-and-encoding/rlp)エンコーディング関数です。 +1つのノードが内部の別のノードから参照されるとき、含まれているのは、`H(rlp.encode(node))`であり、`H(x) = keccak256(x) if len(x) >= 32 else x`と`rlp.encode`は、[RLP](/developers/docs/data-structures-and-encoding/rlp)エンコーディング関数です。 ツリーを更新するとき、新しく作成されたノードの長さが32以上の_場合_、キーバリューのペア`(keccak256(x), x)`を永続的なルックアップテーブルに格納する必要があることに注意してください。 ただし、ノードがそれよりも短い場合、関数 function f(x) = x は可逆であるため、何も格納する必要はありません。