From 0c21599fdcc5afedf6ffc6f9f87f74f5eb0f870f Mon Sep 17 00:00:00 2001 From: Pete Vielhaber Date: Mon, 18 Nov 2024 09:02:40 -0600 Subject: [PATCH 1/5] .md to .mdx conversion --- .DS_Store | Bin 0 -> 8196 bytes .gitignore | 3 +- arbitrum-docs/.DS_Store | Bin 0 -> 10244 bytes .../build-decentralized-apps/.DS_Store | Bin 0 -> 10244 bytes .../04-cross-chain-messaging.mdx | 4 +-- .../01-comparison-overview.mdx | 2 +- .../02-block-numbers-and-time.mdx | 2 +- .../precompiles/.DS_Store | Bin 0 -> 6148 bytes .../{01-overview.md => 01-overview.mdx} | 2 +- .../{02-reference.md => 02-reference.mdx} | 2 +- .../reference/.DS_Store | Bin 0 -> 6148 bytes ...-mainnet-risks.md => 08-mainnet-risks.mdx} | 0 .../token-bridging/.DS_Store | Bin 0 -> 6148 bytes .../token-bridging/02-token-bridge-ether.md | 2 +- ...04-how-to-bridge-tokens-custom-gateway.mdx | 2 +- arbitrum-docs/how-arbitrum-works/.DS_Store | Bin 0 -> 6148 bytes .../how-arbitrum-works/arbos/geth.md | 6 ++-- .../how-arbitrum-works/arbos/introduction.md | 8 ++--- .../arbos/l1-l2-messaging.md | 8 ++--- .../arbos/l2-l1-messaging.md | 2 +- arbitrum-docs/how-arbitrum-works/gas-fees.md | 6 ++-- .../how-arbitrum-works/l1-gas-pricing.md | 2 +- arbitrum-docs/launch-orbit-chain/.DS_Store | Bin 0 -> 6148 bytes .../how-tos/manage-fee-collectors.md | 32 +++++++++--------- .../how-tos/use-a-custom-gas-token.mdx | 2 +- arbitrum-docs/run-arbitrum-node/.DS_Store | Bin 0 -> 8196 bytes .../arbos-releases/arbos11.md | 6 ++-- 27 files changed, 46 insertions(+), 45 deletions(-) create mode 100644 .DS_Store create mode 100644 arbitrum-docs/.DS_Store create mode 100644 arbitrum-docs/build-decentralized-apps/.DS_Store create mode 100644 arbitrum-docs/build-decentralized-apps/precompiles/.DS_Store rename arbitrum-docs/build-decentralized-apps/precompiles/{01-overview.md => 01-overview.mdx} (95%) rename arbitrum-docs/build-decentralized-apps/precompiles/{02-reference.md => 02-reference.mdx} (99%) create mode 100644 arbitrum-docs/build-decentralized-apps/reference/.DS_Store rename arbitrum-docs/build-decentralized-apps/reference/{08-mainnet-risks.md => 08-mainnet-risks.mdx} (100%) create mode 100644 arbitrum-docs/build-decentralized-apps/token-bridging/.DS_Store create mode 100644 arbitrum-docs/how-arbitrum-works/.DS_Store create mode 100644 arbitrum-docs/launch-orbit-chain/.DS_Store create mode 100644 arbitrum-docs/run-arbitrum-node/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..64c2ab48ef3238afcb5341d8a738eacd35d7f1ba GIT binary patch literal 8196 zcmeHMOK%e~5FV$6ZW^Fzlk$>)l_De#ZAlRgLL3O8sHzZZ)l^VaO4v=@uykWbyPJek zRmvTXNZh#a1K`RJ;LMF1`~^6|3C52=9;HV>!Xw$=#GdikU)FYJ0|2DZsLTQ!2LKC; zz+?ieJw)`2G9WSCGKxshA0UDN8c>62s0>(}2E%}1z%XDKFbo(5{sji`&K6?*=H6Gm zrZx;12L4M1#Q9)j5t!H5Rw$1StYiv+IE>9wP{%w#`q&!t8ruq`D~_qM2clhxPBDmb z$9`LwBjz=>6)JZi${mP~Omv1qWOVeir8$tiLQ@+C3G=+(j#~v94j6`7Q;ueLdY)Sl6C!-Ma6EQ8xR5#D<0s92~Jmtc0~ue8^kH$cY+Z z!3oyIr&Z2F78g*JC`qHr|evIZg)3sO=iwtSt)J#HO8OHMF7!f3KG#P&-P!US8nPh zlINWze(EeSKAJdm_{dmtd~9MYl}b+@J$CFwDVcJe@>Vqv)4tAq9u)irU9SdSrC4{$ z9;>cJ^l?=5p3qWqqR(`NR__05THUUrP5M`Z9Bv_?l*#dyHa9~Wt##>l?}bS5Vnl0; zY?I^oO{90J9(kOFw`mX}-gSb&VO3h#-tZll`b(_9qlni^$ua3$=4?5j!f(w(UCc9c z^^4*xlfT(f&M74c8KvM)%ydW7NLHCsqw#nqzpPsaT@Yfg^Qjw2~{Qm~-TY*Ll1BQYB zivcn`Uz{)Cn$^`jxOkCk+gKi85hCo`3Z)BH!bG&obR6;LABL#gx-YM>tq^-q%nt!c LgQ*Myf0ThAcc~|; literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index 11dc0888e..d5c300a76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .vscode arbitrum-docs/sdk -arbitrum-docs/stylus-by-example \ No newline at end of file +arbitrum-docs/stylus-by-example +.vercel diff --git a/arbitrum-docs/.DS_Store b/arbitrum-docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1843aad2f6c271669a15e23e311dcc021ece4465 GIT binary patch literal 10244 zcmeHM&u<(x6n;+9WHw2g%`e&_K}U*^I3#6Ll9Z|kmTgfLaY)sTN~*RjGds>^l-coW zW;UBN3d)&sMB>JUKLC#K2XN-b4gLi|uKP&Q^FtBE{}r80%j z`1HUMQrc{TlCh{}f^VIAVfVI3B9zc1)cLbnUAvZe*p z$*DsE5|(ro_XZB_<~^{t3Lb{gPC*_y1-+*Qy-U#Rq8@0XCI>Y&5q;G|3#BeS!Lxj4 zp$(m4%h})m)t}u9I|*t(+8xggqe|shHZVAJZg|8PF~*F?^)1n>M^@AgYgX`3KCKJk z*=gRg@4LL$D9_vyeq^~m50ruHaHu@`)b$(o0|)Ad^$ z5#NpK?i1c9PZd<}ap$vVMeBPV=*&DTQ10#oocqe(+U91+qm4}d!J`nkuSUGR>Te48 z-vQ=poyZk_c%KI$-+=qY0 zAkI}kNi*-pnKI4A8GLuoq`5@0b>C|9QfaPwHz_gb9lA+(=q~1JL{I4(`i_2}pXnF+ zjsBp&7-OSsn$5De*%ek{%WQ>Rk1Yq%F?};%huRKLJ*GSL!1sjTf-mXUz`AjcSIMb;WZ2=Sbd|g^cDTI1zgSthHg7JkyoerT#}H1W zhp+ImFTe`Z=Nu+aOvIuv9FlaiP-Zm$cfeL|EYF)u%OAXePx}EZ)1?9|Q`nW{?&xEu z+QJN!`(nH&FQ^hr!j=b2t+Xs)efh{h`8w}Ref70~@hC9nKsf-)3t%pZ@pHa!*o6!m zjYC(cF9`X?BFD#96S$Qh3j!zQ>mEJMl0QcndCll}TizFTS^xu@E1^F5! z^PJX0X6#>U-suCZ!q5+5dvIvG03jGB2jQ^VMD{REu=V71vD`V~`)8{Qv(; zsY^T22xtV(CIW2ecKvn@ZA&i=ip`XF?Iz;qh%!jM!&oX4B;!jY@HsscskZ=O=lOpwIv6da$44tUmu|?o;~#?9811{{?neKic1LPz?C3404j0frdA!h*iHkAD&-7( z2EGDU_#%84PVk?xTRF}{g;p(8yV35f*E{3g-@Y^(BGPKzR)NSMA{~+C(j_Eg0>9@t z5@wQ;tB@M>iMr%alXfViXr#6(Py`eKML-cy1QdaPfdI~I4*EhYRjLRm0*b&P0p1@B zM3&V=4q_==2NH1sAm>ml0eScVqGKeon#e&cMHMzZHZ$q$OY05)Va_uS3s}>ZDa;sZvEi5f~-FzWZ%5sX#0AZpeRcPyjD}1-`sbF8uly zVniQMvQ7N1B{HH_>LCCAsp~f_*SBDgm*6AB)n5{jBf5ca6h+sk9%KZoD`d+}fddN- zl-MX~BNtAv`88v688%DM*+si8X=4*lO=*`y-XuHPt&E+Uuu~Sz0Idq~OIuk%>$sgE zTGj>w59!!GYo9W9mxYrh+yb<*1G{@--9~S>VKqQR`7k@}=il0~df{#|2H&h**9jxj z{GrXv&Rw`Tug~iX`kVT;->XNBs2kQA!7F}x?)$EFkZ)Ko9J{x>exc{|+~(4?e!pBQU9+^KlX5=wsg6 zGNL^90@{LZlk8zlnaN*LGkJ<;ivRah=YPH5FPfz?2B1`#G5`!1Vd4OM#>**P%pji! z#6YmQqtJ;LY#Lpr_IbgT=~f2O0`@0f=S`sMAn#zO8kwK6C#6wM&^l{m1+%i2H_FB1 z&aesH%b?2%xGh2njcts^nIl_UuK-!)!7&%*n671TU6xaI2e>?(G#23T zshylz!@HWCF==p9byEoc=W}IhA2Td@k5oYsPy`eKML-caj|67pP8odv|77z2|L3vm zs!xi5B9IW!<~HgZH9Q<#%4Es#UAuw!7Lfzj8^lsnkjQmBq+G}2fv@B5B63}mB?siI li5$cdB?zbfX8^9NPVl-!`Ts*#d`G!qQvUxRBRgUL|2O-K5q$sv literal 0 HcmV?d00001 diff --git a/arbitrum-docs/build-decentralized-apps/04-cross-chain-messaging.mdx b/arbitrum-docs/build-decentralized-apps/04-cross-chain-messaging.mdx index ff601d8bf..fc47d1af5 100644 --- a/arbitrum-docs/build-decentralized-apps/04-cross-chain-messaging.mdx +++ b/arbitrum-docs/build-decentralized-apps/04-cross-chain-messaging.mdx @@ -9,7 +9,7 @@ The Arbitrum protocol and related tooling makes it easy for developers to build ## Ethereum-to-Arbitrum messaging -Arbitrary L1 to L2 contract calls can be created via the `Inbox`'s `createRetryableTicket` method; upon publishing the L1 transaction, the L2 side will typically get included within minutes. Happily / commonly, the L2 execution will automatically succeed, but if reverts, and it can be rexecuted via a call to the `redeem` method of the [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx) precompile. +Arbitrary L1 to L2 contract calls can be created via the `Inbox`'s `createRetryableTicket` method; upon publishing the L1 transaction, the L2 side will typically get included within minutes. Happily / commonly, the L2 execution will automatically succeed, but if reverts, and it can be rexecuted via a call to the `redeem` method of the [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx) precompile. For details and protocol specification, see [L1 to L2 Messages](/how-arbitrum-works/arbos/l1-l2-messaging.md). @@ -17,7 +17,7 @@ For an example of retryable tickets in action, see the [Greeter](https://github. ## Arbitrum-to-Ethereum messaging -Similarly, L2 contracts can send Arbitrary messages for execution on L1. These are initiated via calls to the [ArbSys](/build-decentralized-apps/precompiles/02-reference.md#arbsys) precompile contract's `sendTxToL1` method. Upon confirmation (about 1 week later), they can executed by retrieving the relevant data via a call to `NodeInterface` contract's `constructOutboxProof` method, and then executing them via the `Outbox`'s `executeTransaction` method. +Similarly, L2 contracts can send Arbitrary messages for execution on L1. These are initiated via calls to the [ArbSys](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys) precompile contract's `sendTxToL1` method. Upon confirmation (about 1 week later), they can executed by retrieving the relevant data via a call to `NodeInterface` contract's `constructOutboxProof` method, and then executing them via the `Outbox`'s `executeTransaction` method. For details and protocol specification, see [L2 to L1 Messages](/how-arbitrum-works/arbos/l2-l1-messaging.md). diff --git a/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/01-comparison-overview.mdx b/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/01-comparison-overview.mdx index 7a8ed4e98..09b112dfd 100644 --- a/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/01-comparison-overview.mdx +++ b/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/01-comparison-overview.mdx @@ -36,7 +36,7 @@ Similarly, Arbitrum chains can also send messages to the parent chain. Find more ## Precompiles -Besides supporting all precompiles available in Ethereum, Arbitrum provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. You can find a full reference of them in [Precompiles](/build-decentralized-apps/precompiles/01-overview.md). +Besides supporting all precompiles available in Ethereum, Arbitrum provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. You can find a full reference of them in [Precompiles](/build-decentralized-apps/precompiles/01-overview.mdx). ## NodeInterface diff --git a/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/02-block-numbers-and-time.mdx b/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/02-block-numbers-and-time.mdx index 680f8b58d..b9bc36f6a 100644 --- a/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/02-block-numbers-and-time.mdx +++ b/arbitrum-docs/build-decentralized-apps/arbitrum-vs-ethereum/02-block-numbers-and-time.mdx @@ -62,7 +62,7 @@ const txnReceipt = await arbitrumProvider.getTransactionReceipt('0x...'); */ ``` -The Arbitrum block number can also be retrieved within an Arbitrum contract via [ArbSys](/build-decentralized-apps/precompiles/02-reference.md#arbsys) precompile: +The Arbitrum block number can also be retrieved within an Arbitrum contract via [ArbSys](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys) precompile: ```sol ArbSys(100).arbBlockNumber() // returns Arbitrum block number diff --git a/arbitrum-docs/build-decentralized-apps/precompiles/.DS_Store b/arbitrum-docs/build-decentralized-apps/precompiles/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ceef6088fa152b940f01cf586b6672bf030d6408 GIT binary patch literal 6148 zcmeHK%Sr=55UkN00v^oKn~KGeJ+$OhqEl0S zVkD=tJ=eUZVsUgjlFiI<>dc>ymt?cEJzF|b;}~Tq5DIh^IQQyE=l?B#nchc!mlCy5 zAQbp#3Z%i}elh1q)wA{2=jp7?^ar|3c|`$@apw}iiuRE!>-7Gtn0Zab;;2#7ZggT? N1Wb@9LV*(~@Bx0ZE8zeD literal 0 HcmV?d00001 diff --git a/arbitrum-docs/build-decentralized-apps/precompiles/01-overview.md b/arbitrum-docs/build-decentralized-apps/precompiles/01-overview.mdx similarity index 95% rename from arbitrum-docs/build-decentralized-apps/precompiles/01-overview.md rename to arbitrum-docs/build-decentralized-apps/precompiles/01-overview.mdx index ba8fe7daf..b4dddd6c9 100644 --- a/arbitrum-docs/build-decentralized-apps/precompiles/01-overview.md +++ b/arbitrum-docs/build-decentralized-apps/precompiles/01-overview.mdx @@ -7,4 +7,4 @@ content_type: concept Precompiles are predefined smart contracts that have special addresses and provide specific functionality which is executed not at the EVM bytecode level, but natively by the Arbitrum client itself. Precompiles are primarily used to introduce specific functions that would be computationally expensive if executed in EVM bytecode, and functions that facilitate the interaction between the Layer 1 (L1) and the Layer 2 (L2). By having them natively in the Arbitrum client, they can be optimized for performance. -Besides supporting all precompiles available in Ethereum, Arbitrum provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. For more details on the addresses these precompiles live, and the specific methods available, please refer to the [methods documentation](/build-decentralized-apps/precompiles/02-reference.md). +Besides supporting all precompiles available in Ethereum, Arbitrum provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. For more details on the addresses these precompiles live, and the specific methods available, please refer to the [methods documentation](/build-decentralized-apps/precompiles/02-reference.mdx). diff --git a/arbitrum-docs/build-decentralized-apps/precompiles/02-reference.md b/arbitrum-docs/build-decentralized-apps/precompiles/02-reference.mdx similarity index 99% rename from arbitrum-docs/build-decentralized-apps/precompiles/02-reference.md rename to arbitrum-docs/build-decentralized-apps/precompiles/02-reference.mdx index c63ffd763..569abad86 100644 --- a/arbitrum-docs/build-decentralized-apps/precompiles/02-reference.md +++ b/arbitrum-docs/build-decentralized-apps/precompiles/02-reference.mdx @@ -5,7 +5,7 @@ user_story: As a developer, I want to understand the most useful precompiles ava content_type: reference --- -ArbOS provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. This reference page exhaustively documents the specific calls ArbOS makes available through precompiles. For a more conceptual description of what precompiles are and how they work, please refer to the [precompiles conceptual page](/build-decentralized-apps/precompiles/01-overview.md). +ArbOS provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. This reference page exhaustively documents the specific calls ArbOS makes available through precompiles. For a more conceptual description of what precompiles are and how they work, please refer to the [precompiles conceptual page](/build-decentralized-apps/precompiles/01-overview.mdx). This reference page is divided into two sections. The first one lists all precompiles in a summary table with links to the reference of the specific precompile, along with the address where they live, their purpose and links to the go implementation and solidity interface. The second one details the methods available in each precompile with links to the specific implementation. diff --git a/arbitrum-docs/build-decentralized-apps/reference/.DS_Store b/arbitrum-docs/build-decentralized-apps/reference/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..97b0824ee0622dba426c17b70a5be286171dc359 GIT binary patch literal 6148 zcmeHK%TB{E5FA4f2riWX2@ps*aSP%N$56q6Ge1DnmV!tV)bcv!&Oh)Ad><#6T^nfA z_KFbNt?cn5J6?|)I|kqy5A7YG4q%Q+ur|+Zf=R!mF`Ef3(&?0=KpP#zxI=&JX=^YA zOo6|qfV{g)*v1au+8o30Z-GbL==jLLd&+oCjvKPd-qKX&-d9vr7PnDhStrXr zJ!NltWXc%d9p}^0C}Ug&z7C$))5q->^JsMLrNX;L-UISJktx+UGsc)ITc0JFZOr)> z{AE)(-z%J(bVs;ijwADEG1{0TJ#$7<7mcT^*G#uE)-uOBqPOUh z;(;S{CyX?0SY+=55TO#xHD z6!=y^_J@c`FbPsZT9xXQoOo34aW_`6T=l|LC`~Rqu)l30X;9n`=YNr>c z4NfVXtz(muvo>P7WD=9-N{{NoEF8yLkfV5oNsWDx6o^T{(j!}F_937$SY`_Rssf*u CN2SmJ literal 0 HcmV?d00001 diff --git a/arbitrum-docs/build-decentralized-apps/reference/08-mainnet-risks.md b/arbitrum-docs/build-decentralized-apps/reference/08-mainnet-risks.mdx similarity index 100% rename from arbitrum-docs/build-decentralized-apps/reference/08-mainnet-risks.md rename to arbitrum-docs/build-decentralized-apps/reference/08-mainnet-risks.mdx diff --git a/arbitrum-docs/build-decentralized-apps/token-bridging/.DS_Store b/arbitrum-docs/build-decentralized-apps/token-bridging/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ddf8fdfc5d10bc5eee7c39e5cee490dfb06a3b6b GIT binary patch literal 6148 zcmeHKO>fgc5S>j!>rjDm04W!cC9Y|4+5$qom{1N}F@gi2VAoM=)$vBQ6RV0M`3ygX zE5C&Q!U^8&ZdKw2aR4ENcC6XAUo*S=#@_W3kr>Y60a2HT94KS^I+8WQ?W|X%Woo!l zC?9hgQ%-YAfL1I6mVtkr0seMxl1BsDA&D>d^82l5mnIZHPvvox$_V{e2%7RQk0(e zMYJ~B*EYADEoa+#7o5r}D8q7A48!~lmtIPlMi==odX6Dw!C zQE!Wu0n318fcFO%%IF)cHL9%xiMj#++o)E8JpU%Jjcd?1SZhQJL}*i>HWlWIA+$N_ zUDMAuSZmbgB+TVQn309Kp$IiP{JW|<316d4Ed!Q;RR%V6vCHTGv!CDpSB-4RGGH0_ zuNV;Rqu^+WC7HAJ%HsH}b)oN}EZncws7#QU<5*?*DDFX(pv~nB&^K6XL=D9L2q+qC KVj1|W415QRfWasL literal 0 HcmV?d00001 diff --git a/arbitrum-docs/build-decentralized-apps/token-bridging/02-token-bridge-ether.md b/arbitrum-docs/build-decentralized-apps/token-bridging/02-token-bridge-ether.md index 13b64a79c..69863b353 100644 --- a/arbitrum-docs/build-decentralized-apps/token-bridging/02-token-bridge-ether.md +++ b/arbitrum-docs/build-decentralized-apps/token-bridging/02-token-bridge-ether.md @@ -28,7 +28,7 @@ As far as the L1 knows, all deposited funds are held by Arbitrum's Bridge contra ## Withdrawing ether -Withdrawing ether can be done using the [ArbSys precompile](/build-decentralized-apps/precompiles/02-reference.md#arbsys)'s `withdrawEth` method: +Withdrawing ether can be done using the [ArbSys precompile](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys)'s `withdrawEth` method: ```sol ArbSys(100).withdrawEth{ value: 2300000 }(destAddress) diff --git a/arbitrum-docs/build-decentralized-apps/token-bridging/bridge-tokens-programmatically/04-how-to-bridge-tokens-custom-gateway.mdx b/arbitrum-docs/build-decentralized-apps/token-bridging/bridge-tokens-programmatically/04-how-to-bridge-tokens-custom-gateway.mdx index 66e3816d4..2450ef467 100644 --- a/arbitrum-docs/build-decentralized-apps/token-bridging/bridge-tokens-programmatically/04-how-to-bridge-tokens-custom-gateway.mdx +++ b/arbitrum-docs/build-decentralized-apps/token-bridging/bridge-tokens-programmatically/04-how-to-bridge-tokens-custom-gateway.mdx @@ -38,7 +38,7 @@ On the other hand, the **L2 counterpart of the gateway**, must conform to the [I - A method `outboundTransfer`, to handle external calls, and forwarded calls from `L2GatewayRouter.outboundTransfer`. - A method `finalizeInboundTransfer`, to handle messages coming ONLY from L1’s gateway. - Two methods `calculateL2TokenAddress` and `getOutboundCalldata` to handle other bridging operations. -- Methods to send cross-chain messages through the [ArbSys precompile](/build-decentralized-apps/precompiles/02-reference.md#arbsys). An example implementation can be found in `sendTxToL1` on [L2ArbitrumMessenger](https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/arbitrum/L2ArbitrumMessenger.sol). +- Methods to send cross-chain messages through the [ArbSys precompile](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys). An example implementation can be found in `sendTxToL1` on [L2ArbitrumMessenger](https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/arbitrum/L2ArbitrumMessenger.sol). ### What about my custom tokens? diff --git a/arbitrum-docs/how-arbitrum-works/.DS_Store b/arbitrum-docs/how-arbitrum-works/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e59d1b2c7c6dfd4269aa016296babb28f37d490f GIT binary patch literal 6148 zcmeHK&2AGh5FV!~-O?aZ1X4L5t;97gNkt%W-zDQzf0m$0;cyb-WNrF_j+N4fUX~_09buF;wgF3yUj%Tb6a$`=cG1c(644%w zX=ojH4A(al8?LH=nk>tyJ4%G`K}-YjGAgyeSlbqAvQqDXVFcd;)LEIHU~lVPN6a7LIe{-maR4j^=#{Rptbnau zqd6Tz<1hKj8rXUW{^H4O3vcVwNz|`Sbh#yproV1RMhY6#}Yy*gNbZC3Cl~B*%BHkMb6UiRBgr7Zp_I iI+g}s#XBfMnDe;--Z6YpaEyT59|3{ERStoFiokCYi}R-d literal 0 HcmV?d00001 diff --git a/arbitrum-docs/how-arbitrum-works/arbos/geth.md b/arbitrum-docs/how-arbitrum-works/arbos/geth.md index d59714649..a1ca1aebf 100644 --- a/arbitrum-docs/how-arbitrum-works/arbos/geth.md +++ b/arbitrum-docs/how-arbitrum-works/arbos/geth.md @@ -70,7 +70,7 @@ If the user attempts to purchase compute gas in excess of ArbOS's per-block gas ### [`PushCaller`][pushcaller_link]{#PushCaller} -These hooks track the callers within the EVM callstack, pushing and popping as calls are made and complete. This provides [`ArbSys`](/build-decentralized-apps/precompiles/02-reference.md#arbsys) with info about the callstack, which it uses to implement the methods `WasMyCallersAddressAliased` and `MyCallersAddressWithoutAliasing`. +These hooks track the callers within the EVM callstack, pushing and popping as calls are made and complete. This provides [`ArbSys`](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys) with info about the callstack, which it uses to implement the methods `WasMyCallersAddressAliased` and `MyCallersAddressWithoutAliasing`. ### [`L1BlockHash`][l1blockhash_link] @@ -180,7 +180,7 @@ Represents a retryable submission and may schedule an [`ArbitrumRetryTx`](#Arbit ### [`ArbitrumRetryTx`][arbitrumretrytx_link]{#ArbitrumRetryTx} -These are scheduled by calls to the `redeem` method of the [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx) precompile and via retryable auto-redemption. Please see the [retryables documentation](/how-arbitrum-works/arbos/introduction.md#Retryables) for more info. +These are scheduled by calls to the `redeem` method of the [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx) precompile and via retryable auto-redemption. Please see the [retryables documentation](/how-arbitrum-works/arbos/introduction.md#Retryables) for more info. ### [`ArbitrumInternalTx`][arbitruminternaltx_link]{#ArbitrumInternalTx} @@ -265,7 +265,7 @@ Retryables are mostly implemented in [ArbOS](/how-arbitrum-works/arbos/introduct Added [`UnderlyingTransaction`][underlyingtransaction_link] to Message interface Added [`GetCurrentTxLogs`](https://github.com/OffchainLabs/go-ethereum/tree/7503143fd13f73e46a966ea2c42a058af96f7fcf/core/state/statedb_arbitrum.go) to StateDB -We created the AdvancedPrecompile interface, which executes and charges gas with the same function call. This is used by [Arbitrum's precompiles](/build-decentralized-apps/precompiles/01-overview.md), and also wraps Geth's standard precompiles. +We created the AdvancedPrecompile interface, which executes and charges gas with the same function call. This is used by [Arbitrum's precompiles](/build-decentralized-apps/precompiles/01-overview.mdx), and also wraps Geth's standard precompiles. ### WASM build support diff --git a/arbitrum-docs/how-arbitrum-works/arbos/introduction.md b/arbitrum-docs/how-arbitrum-works/arbos/introduction.md index 3d1546051..0a0ece5cd 100644 --- a/arbitrum-docs/how-arbitrum-works/arbos/introduction.md +++ b/arbitrum-docs/how-arbitrum-works/arbos/introduction.md @@ -4,7 +4,7 @@ ArbOS is the Layer 2 EVM hypervisor that facilitates the execution environment o ## Precompiles -ArbOS provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. Visit the [precompiles conceptual page](/build-decentralized-apps/precompiles/01-overview.md) for more information about how these work, and the [precompiles reference page](/build-decentralized-apps/precompiles/02-reference.md) for a full reference of the precompiles available in Arbitrum chains. +ArbOS provides L2-specific precompiles with methods smart contracts can call the same way they can solidity functions. Visit the [precompiles conceptual page](/build-decentralized-apps/precompiles/01-overview.mdx) for more information about how these work, and the [precompiles reference page](/build-decentralized-apps/precompiles/02-reference.mdx) for a full reference of the precompiles available in Arbitrum chains. A precompile consists of a solidity interface in [`contracts/src/precompiles/`][nitro_precompiles_dir] and a corresponding Golang implementation in [`precompiles/`][precompiles_dir]. Using Geth's ABI generator, [`solgen/gen.go`][gen_file] generates [`solgen/go/precompilesgen/precompilesgen.go`][precompilesgen_link], which collects the ABI data of the precompiles. The [runtime installer][installer_link] uses this generated file to check the type safety of each precompile's implementer. @@ -42,7 +42,7 @@ ArbOS's state is viewed and modified via [`ArbosState`][arbosstate_link] objects Because two [`ArbosState`][arbosstate_link] objects with the same [`backingStorage`][backingstorage_link] contain and mutate the same underlying state, different [`ArbosState`][arbosstate_link] objects can provide different views of ArbOS's contents. [`Burner`][burner_link] objects, which track gas usage while working with the [`ArbosState`][arbosstate_link], provide the internal mechanism for doing so. Some are read-only, causing transactions to revert with `vm.ErrWriteProtection` upon a mutating request. Others demand the caller have elevated privileges. While yet others dynamically charge users when doing stateful work. For safety the kind of view is chosen when [`OpenArbosState()`][openarbosstate_link] creates the object and may never change. -Much of ArbOS's state exists to facilitate its [precompiles](/build-decentralized-apps/precompiles/02-reference.md). The parts that aren't are detailed below. +Much of ArbOS's state exists to facilitate its [precompiles](/build-decentralized-apps/precompiles/02-reference.mdx). The parts that aren't are detailed below. [arbosstate_link]: https://github.com/OffchainLabs/nitro/blob/fa36a0f138b8a7e684194f9840315d80c390f324/arbos/arbosState/arbosstate.go#L36 [backingstorage_link]: https://github.com/OffchainLabs/nitro/blob/fa36a0f138b8a7e684194f9840315d80c390f324/arbos/storage/storage.go#L51 @@ -71,7 +71,7 @@ This component maintains the last 256 L1 block hashes in a circular buffer. This ### [`l1PricingState`][l1pricingstate_link] -In addition to supporting the [`ArbAggregator precompile`](/build-decentralized-apps/precompiles/02-reference.md#arbaggregator), the L1 pricing state provides tools for determining the L1 component of a transaction's gas costs. This part of the state tracks both the total amount of funds collected from transactions in L1 gas fees, as well as the funds spent by batch posters to post data batches on L1. +In addition to supporting the [`ArbAggregator precompile`](/build-decentralized-apps/precompiles/02-reference.mdx#arbaggregator), the L1 pricing state provides tools for determining the L1 component of a transaction's gas costs. This part of the state tracks both the total amount of funds collected from transactions in L1 gas fees, as well as the funds spent by batch posters to post data batches on L1. Based on this information, ArbOS maintains an L1 data fee, also tracked as part of this state, which determines how much transactions will be charged for L1 fees. ArbOS dynamically adjusts this value so that fees collected are approximately equal to batch posting costs, over time. @@ -81,7 +81,7 @@ Based on this information, ArbOS maintains an L1 data fee, also tracked as part The L2 pricing state tracks L2 resource usage to determine a reasonable L2 gas price. This process considers a variety of factors, including user demand, the state of Geth, and the computational speed limit. The primary mechanism for doing so consists of a pair of pools, one larger than the other, that drain as L2-specific resources are consumed and filled as time passes. L1-specific resources like L1 `calldata` are not tracked by the pools, as they have little bearing on the actual work done by the network actors that the speed limit is meant to keep stable and synced. -While much of this state is accessible through the [`ArbGasInfo`](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo) and [`ArbOwner`](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompiles, most changes are automatic and happen during [block production][block_production_link] and [the transaction hooks](geth#Hooks). Each of an incoming message's transactions removes from the pool the L2 component of the gas it uses, and afterward the message's timestamp [informs the pricing mechanism][notify_pricer_link] of the time that's passed as ArbOS [finalizes the block][finalizeblock_link]. +While much of this state is accessible through the [`ArbGasInfo`](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo) and [`ArbOwner`](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompiles, most changes are automatic and happen during [block production][block_production_link] and [the transaction hooks](geth#Hooks). Each of an incoming message's transactions removes from the pool the L2 component of the gas it uses, and afterward the message's timestamp [informs the pricing mechanism][notify_pricer_link] of the time that's passed as ArbOS [finalizes the block][finalizeblock_link]. ArbOS's larger gas pool [determines][maintain_limit_link] the per-block gas limit, setting a dynamic [upper limit][per_block_limit_link] on the amount of compute gas an L2 block may have. This limit is always enforced, though for the [first transaction][first_transaction_link] it's done in the [GasChargingHook](geth#GasChargingHook) to avoid sharp decreases in the L1 gas price from over-inflating the compute component purchased to above the gas limit. This improves UX by allowing the first transaction to succeed rather than requiring a resubmission. Because the first transaction lowers the amount of space left in the block, subsequent transactions do not employ this strategy and may fail from such compute-component inflation. This is acceptable because such transactions are only present in cases where the system is under heavy load and the result is that the user's transaction is dropped without charges since the state transition fails early. Those trusting the sequencer can rely on the transaction being automatically resubmitted in such a scenario. diff --git a/arbitrum-docs/how-arbitrum-works/arbos/l1-l2-messaging.md b/arbitrum-docs/how-arbitrum-works/arbos/l1-l2-messaging.md index fa181a7d5..965821c01 100644 --- a/arbitrum-docs/how-arbitrum-works/arbos/l1-l2-messaging.md +++ b/arbitrum-docs/how-arbitrum-works/arbos/l1-l2-messaging.md @@ -41,7 +41,7 @@ Here we walk through the different stages of the lifecycle of a retryable ticket 2. Sender's deposit must be enough to make the L1 submission succeed and for the L2 execution to be _attempted_. If provided correctly, a new ticket with a unique `TicketID` is created and added to retryable buffer. Also, funds (`submissionCost` + `l2CallValue`) are deducted from the sender and placed into the escrow for later use in redeeming the ticket. -3. Ticket creation causes the [`ArbRetryableTx`](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx) precompile to emit a `TicketCreated` event containing the `TicketID` on L2. +3. Ticket creation causes the [`ArbRetryableTx`](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx) precompile to emit a `TicketCreated` event containing the `TicketID` on L2. [inbox_link]: https://github.com/OffchainLabs/nitro-contracts/blob/67127e2c2fd0943d9d87a05915d77b1f220906aa/src/bridge/Inbox.sol @@ -85,7 +85,7 @@ Here we walk through the different stages of the lifecycle of a retryable ticket ### Automatic Redemption -4. It is very important to note that the submission of a ticket on L1 is separable / asynchronous from its execution on L2, i.e., a successful L1 ticket creation does not guarantee a successful redemption. Once the ticket is successfully created, the two following conditions are checked: (1) if the user's L2 balance is greater than (or equal to) `maxFeePerGas * gasLimit` **and** (2) if the `maxFeePerGas` (provided by the user in the ticket submission process) is greater than (or equal to) the `l2Basefee`. If these conditions are both met, ticket's submission is followed by an attempt to execute it on L2 (i.e., an **auto-redeem** using the supplied gas, as if the `redeem` method of the [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx) precompile had been called). Depending on how much gas the sender has provided in step 1, ticket's redemption can either (1) immediately succeed or (2) fail. We explain both situations here: +4. It is very important to note that the submission of a ticket on L1 is separable / asynchronous from its execution on L2, i.e., a successful L1 ticket creation does not guarantee a successful redemption. Once the ticket is successfully created, the two following conditions are checked: (1) if the user's L2 balance is greater than (or equal to) `maxFeePerGas * gasLimit` **and** (2) if the `maxFeePerGas` (provided by the user in the ticket submission process) is greater than (or equal to) the `l2Basefee`. If these conditions are both met, ticket's submission is followed by an attempt to execute it on L2 (i.e., an **auto-redeem** using the supplied gas, as if the `redeem` method of the [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx) precompile had been called). Depending on how much gas the sender has provided in step 1, ticket's redemption can either (1) immediately succeed or (2) fail. We explain both situations here: - If the ticket is successfully auto-redeemed, it will execute with the sender, destination, callvalue, and calldata of the original submission. The submission fee is refunded to the user on L2 (`excessFeeRefundAddress`). Note that to ensure successful auto-redeem of the ticket, one could use the Arbitrum SDK which provides a [convenience function](https://github.com/OffchainLabs/arbitrum-sdk/blob/4cedb1fcf1c7302a4c3d0f8e75fb33d82bc8338d/src/lib/message/L1ToL2MessageGasEstimator.ts#L215) that returns the desired gas parameters when sending L1-L2 messages. @@ -125,7 +125,7 @@ Here we walk through the different stages of the lifecycle of a retryable ticket ### Manual Redemption -5. At this point, _anyone_ can attempt to manually redeem the ticket again by calling [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx)'s `redeem` precompile method, which donates the call's gas to the next attempt. Note that the amount of gas is NOT limited by the original gasLimit set during the ticket creation. ArbOS will [enqueue the redeem][enqueue_link], which is its own special `ArbitrumRetryTx` type, to its list of redeems that ArbOS [guarantees to exhaust][exhaust_link] before moving on to the next non-redeem transaction in the block its forming. In this manner redeems are scheduled to happen as soon as possible, and will always be in the same block as the tx that scheduled it. Note that the redeem attempt's gas comes from the call to redeem, so there's no chance the block's gas limit is reached before execution. +5. At this point, _anyone_ can attempt to manually redeem the ticket again by calling [ArbRetryableTx](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx)'s `redeem` precompile method, which donates the call's gas to the next attempt. Note that the amount of gas is NOT limited by the original gasLimit set during the ticket creation. ArbOS will [enqueue the redeem][enqueue_link], which is its own special `ArbitrumRetryTx` type, to its list of redeems that ArbOS [guarantees to exhaust][exhaust_link] before moving on to the next non-redeem transaction in the block its forming. In this manner redeems are scheduled to happen as soon as possible, and will always be in the same block as the tx that scheduled it. Note that the redeem attempt's gas comes from the call to redeem, so there's no chance the block's gas limit is reached before execution. 6. If the fixed period (one week) elapses without a successful redeem, the ticket **expires** and will be [automatically **discarded**][discard_link], unless some party has paid a fee to [**keep the ticket alive**][renew_link] for another full period. A ticket can live indefinitely as long as it is renewed each time before it expires. @@ -180,7 +180,7 @@ If a ticket with a callvalue is eventually discarded (cancelled or expired), hav :::note Important Notes: -If a redeem is not done at submission or the submission's initial redeem fails, anyone can attempt to redeem the retryable again by calling [`ArbRetryableTx`](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx)'s `redeem` precompile method, which donates the call's gas to the next attempt. ArbOS will [enqueue the redeem][enqueue_link], which is its own special `ArbitrumRetryTx` type, to its list of redeems that ArbOS [guarantees to exhaust][exhaust_link] before moving on to the next non-redeem transaction in the block its forming. In this manner redeems are scheduled to happen as soon as possible, and will always be in the same block as the transaction that scheduled it. Note that the redeem attempt's gas comes from the call to `redeem`, so there's no chance the block's gas limit is reached before execution. +If a redeem is not done at submission or the submission's initial redeem fails, anyone can attempt to redeem the retryable again by calling [`ArbRetryableTx`](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx)'s `redeem` precompile method, which donates the call's gas to the next attempt. ArbOS will [enqueue the redeem][enqueue_link], which is its own special `ArbitrumRetryTx` type, to its list of redeems that ArbOS [guarantees to exhaust][exhaust_link] before moving on to the next non-redeem transaction in the block its forming. In this manner redeems are scheduled to happen as soon as possible, and will always be in the same block as the transaction that scheduled it. Note that the redeem attempt's gas comes from the call to `redeem`, so there's no chance the block's gas limit is reached before execution. - One can redeem live tickets using the [Arbitrum Retryables Transaction Panel][retryable_dashboard_link] - The calldata of a ticket is saved on L2 until it is redeemed or expired diff --git a/arbitrum-docs/how-arbitrum-works/arbos/l2-l1-messaging.md b/arbitrum-docs/how-arbitrum-works/arbos/l2-l1-messaging.md index 11d173767..14fc752ea 100644 --- a/arbitrum-docs/how-arbitrum-works/arbos/l2-l1-messaging.md +++ b/arbitrum-docs/how-arbitrum-works/arbos/l2-l1-messaging.md @@ -13,7 +13,7 @@ Part of the L2 state of an Arbitrum chain — and consequently, part of what's a ### Client Flow -From a client perspective, an L2 to L1 message begins with a call to the L2 [`ArbSys`](/build-decentralized-apps/precompiles/02-reference.md#arbsys) precompile contract's `sendTxToL1` method. Once the message is included in an assertion (typically within ~1 hour) and the assertion is confirmed (typically about ~ 1 week), any client can execute the message. To do this, the client first retrieves the proof data via a call to the Arbitrum chain's "virtual"/precompile-esque\*\* `NodeInterface` contract's `constructOutboxProof` method. The data returned can then be used in the `Outbox`'s `executeTransaction` method to perform the L1 execution. +From a client perspective, an L2 to L1 message begins with a call to the L2 [`ArbSys`](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys) precompile contract's `sendTxToL1` method. Once the message is included in an assertion (typically within ~1 hour) and the assertion is confirmed (typically about ~ 1 week), any client can execute the message. To do this, the client first retrieves the proof data via a call to the Arbitrum chain's "virtual"/precompile-esque\*\* `NodeInterface` contract's `constructOutboxProof` method. The data returned can then be used in the `Outbox`'s `executeTransaction` method to perform the L1 execution. ### Protocol Design Details diff --git a/arbitrum-docs/how-arbitrum-works/gas-fees.md b/arbitrum-docs/how-arbitrum-works/gas-fees.md index 46fb2f823..a3f2b0470 100644 --- a/arbitrum-docs/how-arbitrum-works/gas-fees.md +++ b/arbitrum-docs/how-arbitrum-works/gas-fees.md @@ -11,11 +11,11 @@ There are two parties a user pays when submitting a tx: The L1 component is the product of the transaction's estimated contribution to its batch's size — computed using Brotli on the transaction by itself — and the L2's view of the L1 data price, a value which dynamically adjusts over time to ensure the batch-poster is ultimately fairly compensated. For details, see [L1 Pricing](/how-arbitrum-works/l1-gas-pricing.md). -The L2 component consists of the traditional fees Geth would pay to stakers in a vanilla L1 chain, such as the computation and storage charges applying the state transition function entails. ArbOS charges additional fees for executing its L2-specific [precompiles](/build-decentralized-apps/precompiles/01-overview.md), whose fees are dynamically priced according to the specific resources used while executing the call. +The L2 component consists of the traditional fees Geth would pay to stakers in a vanilla L1 chain, such as the computation and storage charges applying the state transition function entails. ArbOS charges additional fees for executing its L2-specific [precompiles](/build-decentralized-apps/precompiles/01-overview.mdx), whose fees are dynamically priced according to the specific resources used while executing the call. ## Gas Price Floor -The L2 gas price on a given Arbitrum chain has a set floor, which can be queried via [ArbGasInfo](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo)'s `getMinimumGasPrice` method (currently @arbOneGasFloorGwei@ gwei on Arbitrum One and @novaGasFloorGwei@ gwei on Nova). +The L2 gas price on a given Arbitrum chain has a set floor, which can be queried via [ArbGasInfo](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo)'s `getMinimumGasPrice` method (currently @arbOneGasFloorGwei@ gwei on Arbitrum One and @novaGasFloorGwei@ gwei on Nova). ## Estimating Gas @@ -29,7 +29,7 @@ The sequencer prioritizes transactions on a first-come first-served basis. Becau When a transaction schedules another, the subsequent transaction's execution [will be included][estimation_inclusion_link] when estimating gas via the node's RPC. A transaction's gas estimate, then, can only be found if all the transactions succeed at a given gas limit. This is especially important when working with retryables and scheduling redeem attempts. -Because a call to [`redeem`](/build-decentralized-apps/precompiles/02-reference.md#arbretryabletx) donates all of the call's gas, doing multiple requires limiting the amount of gas provided to each subcall. Otherwise the first will take all of the gas and force the second to necessarily fail irrespective of the estimation's gas limit. +Because a call to [`redeem`](/build-decentralized-apps/precompiles/02-reference.mdx#arbretryabletx) donates all of the call's gas, doing multiple requires limiting the amount of gas provided to each subcall. Otherwise the first will take all of the gas and force the second to necessarily fail irrespective of the estimation's gas limit. Gas estimation for Retryable submissions is possible via the [NodeInterface](/build-decentralized-apps/nodeinterface/02-reference.mdx) and similarly requires the auto-redeem attempt to succeed. diff --git a/arbitrum-docs/how-arbitrum-works/l1-gas-pricing.md b/arbitrum-docs/how-arbitrum-works/l1-gas-pricing.md index a89111b56..042490f99 100644 --- a/arbitrum-docs/how-arbitrum-works/l1-gas-pricing.md +++ b/arbitrum-docs/how-arbitrum-works/l1-gas-pricing.md @@ -55,6 +55,6 @@ A second term is added to the L1 Gas Basefee, based on the derivative of the sur ## Getting L1 fee info -The L1 gas basefee can be queried via [`ArbGasInfo.getL1BaseFeeEstimate`](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo). To estimate the L1 fee a transaction will use, the [NodeInterface.gasEstimateComponents()](/build-decentralized-apps/nodeinterface/02-reference.mdx) or [NodeInterface.gasEstimateL1Component()](/build-decentralized-apps/nodeinterface/02-reference.mdx) method can be used. +The L1 gas basefee can be queried via [`ArbGasInfo.getL1BaseFeeEstimate`](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo). To estimate the L1 fee a transaction will use, the [NodeInterface.gasEstimateComponents()](/build-decentralized-apps/nodeinterface/02-reference.mdx) or [NodeInterface.gasEstimateL1Component()](/build-decentralized-apps/nodeinterface/02-reference.mdx) method can be used. Arbitrum transaction receipts include a `gasUsedForL1` field, showing the amount of gas used on L1 in units of L2 gas. diff --git a/arbitrum-docs/launch-orbit-chain/.DS_Store b/arbitrum-docs/launch-orbit-chain/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..946a284867853836ae0a0cd3fb47782b41c43f92 GIT binary patch literal 6148 zcmeHK&2AGh5FV$Y*-#-x0;D2Qv50FZX(=GYC4_R|N)Q|XmE9ywSJ|%1{t%?9QqJ%W zyaHFAgm>Wt-;5n~Hz^=42q8~ok9RyXJN{<8j)_S1is2Sfi-sqb z&?X&1^8QJz2Vty3c;e5UXZ@zr)OHn z;d~r~&!f?FuXX8>PVyj1MyVJ?!x2? z9BJ9_#fsmzsJIBRO;ABO;!Dv>-BrCv)qN^e-Ia=$40SsBv$%+Bv+U6WcIN#Nc)V0? zT$^S6CSo1Qj$$q~U5#1lvutr4YvWy3ASaAtCe^JWNThX%5anMRHbt z141m3ttxM=By&TDfJ49`zzFd7!MD6?`OI+nbfA+f0C*i@A&mJ?0NeVOcP*b8jv0_L zrr^d@*(-)J=8*eVuWR|taAQu&UOtq4v$8i7C2xm+U(`u;4R^gmz#&jYV8uMP`22tT z^ZS3*$UQj(90LCp0;;~--|b;Z_H12R9G|s5+8Z<`)|(kFCg|*OECW7@*U^M9=kox( VYx&G@NI>q7fWY87hrnM&;0N2{3wi(m literal 0 HcmV?d00001 diff --git a/arbitrum-docs/launch-orbit-chain/how-tos/manage-fee-collectors.md b/arbitrum-docs/launch-orbit-chain/how-tos/manage-fee-collectors.md index f031d7b35..ba9297906 100644 --- a/arbitrum-docs/launch-orbit-chain/how-tos/manage-fee-collectors.md +++ b/arbitrum-docs/launch-orbit-chain/how-tos/manage-fee-collectors.md @@ -34,15 +34,15 @@ Let's now look at how to configure the collector addresses for each fee type. ### Orbit base fee -Orbit base fees are paid to the `infraFeeAccount` configured in your chain. You can retrieve the current configured address by calling the method `getInfraFeeAccount()` of the [ArbOwnerPublic](/build-decentralized-apps/precompiles/02-reference.md#arbownerpublic) precompile. For example: +Orbit base fees are paid to the `infraFeeAccount` configured in your chain. You can retrieve the current configured address by calling the method `getInfraFeeAccount()` of the [ArbOwnerPublic](/build-decentralized-apps/precompiles/02-reference.mdx#arbownerpublic) precompile. For example: ```shell cast call --rpc-url $ORBIT_CHAIN_RPC 0x000000000000000000000000000000000000006B "getInfraFeeAccount() (address)" ``` -_Note: The [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile also has a `getInfraFeeAccount()` method that can be used, but only by the owner of the chain._ +_Note: The [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile also has a `getInfraFeeAccount()` method that can be used, but only by the owner of the chain._ -Alternatively, you can use the Orbit SDK to retrieve the current address configured as `infraFeeAccount`, by calling the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile: +Alternatively, you can use the Orbit SDK to retrieve the current address configured as `infraFeeAccount`, by calling the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile: ```typescript const orbitChainClient = createPublicClient({ @@ -55,7 +55,7 @@ const infraFeeAccount = await orbitChainClient.arbOwnerReadContract({ }); ``` -To set a new `infraFeeAccount`, use the method `setInfraFeeAccount(address)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile. For example: +To set a new `infraFeeAccount`, use the method `setInfraFeeAccount(address)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile. For example: ```shell cast send --rpc-url $ORBIT_CHAIN_RPC --private-key $OWNER_PRIVATE_KEY 0x0000000000000000000000000000000000000070 "setInfraFeeAccount(address) ()" $NEW_INFRAFEEACCOUNT_ADDRESS @@ -84,15 +84,15 @@ await orbitChainClient.sendRawTransaction({ ### Orbit surplus fee -Orbit surplus fees are paid to the `networkFeeAccount` configured in your chain. You can retrieve the current configured address by calling the method `getNetworkFeeAccount()` of the [ArbOwnerPublic](/build-decentralized-apps/precompiles/02-reference.md#arbownerpublic) precompile. For example: +Orbit surplus fees are paid to the `networkFeeAccount` configured in your chain. You can retrieve the current configured address by calling the method `getNetworkFeeAccount()` of the [ArbOwnerPublic](/build-decentralized-apps/precompiles/02-reference.mdx#arbownerpublic) precompile. For example: ```shell cast call --rpc-url $ORBIT_CHAIN_RPC 0x000000000000000000000000000000000000006B "getNetworkFeeAccount() (address)" ``` -_Note: The [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile also has a `getNetworkFeeAccount()` method that can be used, but only by the owner of the chain._ +_Note: The [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile also has a `getNetworkFeeAccount()` method that can be used, but only by the owner of the chain._ -Alternatively, you can use the Orbit SDK to retrieve the current address configured as `networkFeeAccount`, by calling the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile: +Alternatively, you can use the Orbit SDK to retrieve the current address configured as `networkFeeAccount`, by calling the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile: ```typescript const orbitChainClient = createPublicClient({ @@ -105,7 +105,7 @@ const networkFeeAccount = await orbitChainClient.arbOwnerReadContract({ }); ``` -To set a new `networkFeeAccount`, use the method `setNetworkFeeAccount(address)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile. For example: +To set a new `networkFeeAccount`, use the method `setNetworkFeeAccount(address)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile. For example: ```shell cast send --rpc-url $ORBIT_CHAIN_RPC --private-key $OWNER_PRIVATE_KEY 0x0000000000000000000000000000000000000070 "setNetworkFeeAccount(address) ()" $NEW_NETWORKFEEACCOUNT_ADDRESS @@ -140,7 +140,7 @@ Reading information from the `ArgAggregator` precompile or using it to set new i ::: -Parent chain base fees are paid to the fee collector of the active batch poster configured in your chain. The current configured batch posters can be obtained by calling the method `getBatchPosters()` of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.md#arbaggregator) precompile. For example: +Parent chain base fees are paid to the fee collector of the active batch poster configured in your chain. The current configured batch posters can be obtained by calling the method `getBatchPosters()` of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.mdx#arbaggregator) precompile. For example: ```shell cast call --rpc-url $ORBIT_CHAIN_RPC 0x000000000000000000000000000000000000006D "getBatchPosters() (address[])" @@ -152,19 +152,19 @@ This list has to also be verified against the `SequencerInbox` contract living o cast call --rpc-url $PARENT_CHAIN_RPC $SEQUENCER_INBOX_ADDRESS "isBatchPoster(address) (bool)" $BATCH_POSTER_ADDRESS ``` -Once you have the current batch poster, you can obtain the fee collector address configured for that batch poster by calling the method `getFeeCollector(address)` of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.md#arbaggregator) precompile and passing the address of the batch poster. +Once you have the current batch poster, you can obtain the fee collector address configured for that batch poster by calling the method `getFeeCollector(address)` of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.mdx#arbaggregator) precompile and passing the address of the batch poster. ```shell cast call --rpc-url $ORBIT_CHAIN_RPC 0x000000000000000000000000000000000000006D "getFeeCollector(address) (address)" $BATCH_POSTER_ADDRESS ``` -To set a new fee collector for a specific batch poster, use the method `setFeeCollector(address, address)` of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.md#arbaggregator) precompile and pass the address of the batch poster and the address of the new fee collector. +To set a new fee collector for a specific batch poster, use the method `setFeeCollector(address, address)` of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.mdx#arbaggregator) precompile and pass the address of the batch poster and the address of the new fee collector. ```shell cast send --rpc-url $ORBIT_CHAIN_RPC --private-key $OWNER_PRIVATE_KEY 0x000000000000000000000000000000000000006D "setFeeCollector(address,address) ()" $BATCH_POSTER_ADDRESS $NEW_FEECOLLECTOR_ADDRESS ``` -Finally, if you want to set a new batch poster, you can call the method `addBatchPoster(address)` of the of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.md#arbaggregator) precompile and pass the address of the new batch poster, and later call the method `setIsBatchPoster(address,bool)` of the SequencerInbox contract on the parent chain. +Finally, if you want to set a new batch poster, you can call the method `addBatchPoster(address)` of the of the [ArbAggregator](/build-decentralized-apps/precompiles/02-reference.mdx#arbaggregator) precompile and pass the address of the new batch poster, and later call the method `setIsBatchPoster(address,bool)` of the SequencerInbox contract on the parent chain. ```shell cast send --rpc-url $ORBIT_CHAIN_RPC --private-key $OWNER_PRIVATE_KEY 0x000000000000000000000000000000000000006D "addBatchPoster(address) ()" $NEW_BATCH_POSTER_ADDRESS @@ -178,13 +178,13 @@ _Note: When setting a new batch poster, its fee collector will be configured to ### Parent chain surplus fee -Parent chain surplus fees are paid to a specific `L1RewardRecipient` address that is configured individually per chain. The current fee collector address can be obtained by calling the method `getL1RewardRecipient()` of the [ArbGasInfo](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo) precompile. For example: +Parent chain surplus fees are paid to a specific `L1RewardRecipient` address that is configured individually per chain. The current fee collector address can be obtained by calling the method `getL1RewardRecipient()` of the [ArbGasInfo](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo) precompile. For example: ```shell cast call --rpc-url $ORBIT_CHAIN_RPC 0x000000000000000000000000000000000000006C "getL1RewardRecipient() (address)" ``` -To get the amount of rewards that are being paid to this fee collector, you can call the method `getL1RewardRate()` of the [ArbGasInfo](/build-decentralized-apps/precompiles/02-reference.md#arbgasinfo) precompile. This function will return the amount of wei per gas unit paid to the `L1RewardRecipient` configured. For example: +To get the amount of rewards that are being paid to this fee collector, you can call the method `getL1RewardRate()` of the [ArbGasInfo](/build-decentralized-apps/precompiles/02-reference.mdx#arbgasinfo) precompile. This function will return the amount of wei per gas unit paid to the `L1RewardRecipient` configured. For example: ```shell cast call --rpc-url $ORBIT_CHAIN_RPC 0x000000000000000000000000000000000000006C "getL1RewardRate() (uint64)" @@ -207,7 +207,7 @@ const parentChainRewardRate = await orbitChainClient.arbGasInfoReadContract({ }); ``` -To set a new `L1RewardRecipient` address, you can call the method `setL1PricingRewardRecipient(address)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile, and pass the address of the new reward recipient. For example: +To set a new `L1RewardRecipient` address, you can call the method `setL1PricingRewardRecipient(address)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile, and pass the address of the new reward recipient. For example: ```shell cast send --rpc-url $ORBIT_CHAIN_RPC --private-key $OWNER_PRIVATE_KEY 0x0000000000000000000000000000000000000070 "setL1PricingRewardRecipient(address) ()" $NEW_L1REWARDRECIPIENT_ADDRESS @@ -234,7 +234,7 @@ await orbitChainClient.sendRawTransaction({ }); ``` -To change the reward rate, you can use the method `setL1PricingRewardRate(uint64)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile and pass the amount of wei per gas unit to reward. For example: +To change the reward rate, you can use the method `setL1PricingRewardRate(uint64)` of the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile and pass the amount of wei per gas unit to reward. For example: ```shell cast send --rpc-url $ORBIT_CHAIN_RPC --private-key $OWNER_PRIVATE_KEY 0x0000000000000000000000000000000000000070 "setL1PricingRewardRate(uint64) ()" $NEW_REWARD_RATE diff --git a/arbitrum-docs/launch-orbit-chain/how-tos/use-a-custom-gas-token.mdx b/arbitrum-docs/launch-orbit-chain/how-tos/use-a-custom-gas-token.mdx index e2a0a18a8..3c68a3255 100644 --- a/arbitrum-docs/launch-orbit-chain/how-tos/use-a-custom-gas-token.mdx +++ b/arbitrum-docs/launch-orbit-chain/how-tos/use-a-custom-gas-token.mdx @@ -31,7 +31,7 @@ While certain restrictions are in place today (see above), some of them may be r There are several parameter changes required to ensure proper functioning of an Orbit chain configured to use a custom gas token. -After deploying the chain, you must reset the base fees of the parent chain by calling the following functions in the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.md#arbowner) precompile: +After deploying the chain, you must reset the base fees of the parent chain by calling the following functions in the [ArbOwner](/build-decentralized-apps/precompiles/02-reference.mdx#arbowner) precompile: - `SetL1PricePerUnit`, setting `pricePerUnit` to `0` - `SetL1PricingRewardRate`, setting `perUnitReward` to `0` diff --git a/arbitrum-docs/run-arbitrum-node/.DS_Store b/arbitrum-docs/run-arbitrum-node/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..73b0912a579bad6c37a9823fe3dc35667158b87e GIT binary patch literal 8196 zcmeHM%Wl&^6ur|2b*QK+K~a%FvV_p3&y$v8x$+JoLE(K-=1h>WYtNGbx?bDRlt zMac?KflqWqA*Dzopbb_5tAJI&Dqt0`3jB`>V9(~@{9)fWwKla1SOqSn0{nh(5gA(r zjtt7H1Bn~~fD0&=fP0(+gyR<2DsW^_sIX~H52~Q5;)tOP9rZ3Z2et|v88mcKhEA&R ztcnwg67S%-(wtPwpiQj;R)JXs`0Tzy9&J*C^wjx%NE_6r-m_SDgIEV>$4l!m;>Irt zxZ^U9w!r;J1DyK1bU+#9{X2R*NM@-kQ)rM!(yg<4-Vrf%RTRhnwwu(yt3phIm^!5 z&b}UYaz7trZ9jd@xffc;!P&hZyo|!(-s+7fI?4Sg2~#0Ny%0^_yo!>Z9=7!$>1D$0 zm_yot$iX&8@n-)7(C-yC)B~yt>=;c1}-g&f4AkkDl)x#Qj9`a3ZK;7olq= zKTf~k?!rzUb}U%bRFpmfM(tr{w8)1e{uU^r>WvC+4KB znoJyC{vnuMr0Fz6Cg7N%L^c-B?*CBI2CKk7Q()eBUgz`wQ*7moHdqC$0+&kxwXoaS zZKKa;zlzG;=dIdBe22(^+l>qg1&QqDKsk;B$A1{&-bGX9v Date: Mon, 18 Nov 2024 12:19:04 -0600 Subject: [PATCH 2/5] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index d5c300a76..8bd9cafc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ .vscode arbitrum-docs/sdk arbitrum-docs/stylus-by-example -.vercel From 9fba719bacf0ee7f9b15764dd37d8fb126be348d Mon Sep 17 00:00:00 2001 From: Pete Vielhaber Date: Mon, 18 Nov 2024 12:44:44 -0600 Subject: [PATCH 3/5] remove DS_Store --- arbitrum-docs/run-arbitrum-node/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 arbitrum-docs/run-arbitrum-node/.DS_Store diff --git a/arbitrum-docs/run-arbitrum-node/.DS_Store b/arbitrum-docs/run-arbitrum-node/.DS_Store deleted file mode 100644 index 73b0912a579bad6c37a9823fe3dc35667158b87e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM%Wl&^6ur|2b*QK+K~a%FvV_p3&y$v8x$+JoLE(K-=1h>WYtNGbx?bDRlt zMac?KflqWqA*Dzopbb_5tAJI&Dqt0`3jB`>V9(~@{9)fWwKla1SOqSn0{nh(5gA(r zjtt7H1Bn~~fD0&=fP0(+gyR<2DsW^_sIX~H52~Q5;)tOP9rZ3Z2et|v88mcKhEA&R ztcnwg67S%-(wtPwpiQj;R)JXs`0Tzy9&J*C^wjx%NE_6r-m_SDgIEV>$4l!m;>Irt zxZ^U9w!r;J1DyK1bU+#9{X2R*NM@-kQ)rM!(yg<4-Vrf%RTRhnwwu(yt3phIm^!5 z&b}UYaz7trZ9jd@xffc;!P&hZyo|!(-s+7fI?4Sg2~#0Ny%0^_yo!>Z9=7!$>1D$0 zm_yot$iX&8@n-)7(C-yC)B~yt>=;c1}-g&f4AkkDl)x#Qj9`a3ZK;7olq= zKTf~k?!rzUb}U%bRFpmfM(tr{w8)1e{uU^r>WvC+4KB znoJyC{vnuMr0Fz6Cg7N%L^c-B?*CBI2CKk7Q()eBUgz`wQ*7moHdqC$0+&kxwXoaS zZKKa;zlzG;=dIdBe22(^+l>qg1&QqDKsk;B$A1{&-bGX9v Date: Mon, 18 Nov 2024 13:48:09 -0600 Subject: [PATCH 4/5] test removing --- arbitrum-docs/.DS_Store | Bin 10244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 arbitrum-docs/.DS_Store diff --git a/arbitrum-docs/.DS_Store b/arbitrum-docs/.DS_Store deleted file mode 100644 index 1843aad2f6c271669a15e23e311dcc021ece4465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHM&u<(x6n;+9WHw2g%`e&_K}U*^I3#6Ll9Z|kmTgfLaY)sTN~*RjGds>^l-coW zW;UBN3d)&sMB>JUKLC#K2XN-b4gLi|uKP&Q^FtBE{}r80%j z`1HUMQrc{TlCh{}f^VIAVfVI3B9zc1)cLbnUAvZe*p z$*DsE5|(ro_XZB_<~^{t3Lb{gPC*_y1-+*Qy-U#Rq8@0XCI>Y&5q;G|3#BeS!Lxj4 zp$(m4%h})m)t}u9I|*t(+8xggqe|shHZVAJZg|8PF~*F?^)1n>M^@AgYgX`3KCKJk z*=gRg@4LL$D9_vyeq^~m50ruHaHu@`)b$(o0|)Ad^$ z5#NpK?i1c9PZd<}ap$vVMeBPV=*&DTQ10#oocqe(+U91+qm4}d!J`nkuSUGR>Te48 z-vQ=poyZk_c%KI$-+=qY0 zAkI}kNi*-pnKI4A8GLuoq`5@0b>C|9QfaPwHz_gb9lA+(=q~1JL{I4(`i_2}pXnF+ zjsBp&7-OSsn$5De*%ek{%WQ>Rk1Yq%F?};%huRKLJ*GSL!1sjTf-mXUz`AjcSIMb;WZ2=Sbd|g^cDTI1zgSthHg7JkyoerT#}H1W zhp+ImFTe`Z=Nu+aOvIuv9FlaiP-Zm$cfeL|EYF)u%OAXePx}EZ)1?9|Q`nW{?&xEu z+QJN!`(nH&FQ^hr!j=b2t+Xs)efh{h`8w}Ref70~@hC9nKsf-)3t%pZ@pHa!*o6!m zjYC(cF9`X?BFD#96S$Qh3j!zQ>mEJMl0QcndCll}TizFTS^xu@E1^F5! z^PJX0X6#>U-suCZ!q5+5dvIvG03jGB2jQ^VMD{REu=V71vD`V~`)8{Qv(; zsY^T22xtV(CIW2ecKvn@ZA&i=ip`XF?Iz;qh%!jM!&oX4B;!jY@HsscskZ=O=lOpwIv6da$44tUmu|?o;~#?9811{{? Date: Mon, 18 Nov 2024 13:52:55 -0600 Subject: [PATCH 5/5] remove DS_Store --- .DS_Store | Bin 8196 -> 0 bytes .../build-decentralized-apps/.DS_Store | Bin 10244 -> 0 bytes .../precompiles/.DS_Store | Bin 6148 -> 0 bytes .../reference/.DS_Store | Bin 6148 -> 0 bytes .../token-bridging/.DS_Store | Bin 6148 -> 0 bytes arbitrum-docs/how-arbitrum-works/.DS_Store | Bin 6148 -> 0 bytes arbitrum-docs/launch-orbit-chain/.DS_Store | Bin 6148 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store delete mode 100644 arbitrum-docs/build-decentralized-apps/.DS_Store delete mode 100644 arbitrum-docs/build-decentralized-apps/precompiles/.DS_Store delete mode 100644 arbitrum-docs/build-decentralized-apps/reference/.DS_Store delete mode 100644 arbitrum-docs/build-decentralized-apps/token-bridging/.DS_Store delete mode 100644 arbitrum-docs/how-arbitrum-works/.DS_Store delete mode 100644 arbitrum-docs/launch-orbit-chain/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 64c2ab48ef3238afcb5341d8a738eacd35d7f1ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMOK%e~5FV$6ZW^Fzlk$>)l_De#ZAlRgLL3O8sHzZZ)l^VaO4v=@uykWbyPJek zRmvTXNZh#a1K`RJ;LMF1`~^6|3C52=9;HV>!Xw$=#GdikU)FYJ0|2DZsLTQ!2LKC; zz+?ieJw)`2G9WSCGKxshA0UDN8c>62s0>(}2E%}1z%XDKFbo(5{sji`&K6?*=H6Gm zrZx;12L4M1#Q9)j5t!H5Rw$1StYiv+IE>9wP{%w#`q&!t8ruq`D~_qM2clhxPBDmb z$9`LwBjz=>6)JZi${mP~Omv1qWOVeir8$tiLQ@+C3G=+(j#~v94j6`7Q;ueLdY)Sl6C!-Ma6EQ8xR5#D<0s92~Jmtc0~ue8^kH$cY+Z z!3oyIr&Z2F78g*JC`qHr|evIZg)3sO=iwtSt)J#HO8OHMF7!f3KG#P&-P!US8nPh zlINWze(EeSKAJdm_{dmtd~9MYl}b+@J$CFwDVcJe@>Vqv)4tAq9u)irU9SdSrC4{$ z9;>cJ^l?=5p3qWqqR(`NR__05THUUrP5M`Z9Bv_?l*#dyHa9~Wt##>l?}bS5Vnl0; zY?I^oO{90J9(kOFw`mX}-gSb&VO3h#-tZll`b(_9qlni^$ua3$=4?5j!f(w(UCc9c z^^4*xlfT(f&M74c8KvM)%ydW7NLHCsqw#nqzpPsaT@Yfg^Qjw2~{Qm~-TY*Ll1BQYB zivcn`Uz{)Cn$^`jxOkCk+gKi85hCo`3Z)BH!bG&obR6;LABL#gx-YM>tq^-q%nt!c LgQ*Myf0ThAcc~|; diff --git a/arbitrum-docs/build-decentralized-apps/.DS_Store b/arbitrum-docs/build-decentralized-apps/.DS_Store deleted file mode 100644 index 598f61e0d7300bf5c244e7f250c0492059e115a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeI1OK;Oa5XZ-Dp^i#X4@Eo#k_8tIX>neKic1LPz?C3404j0frdA!h*iHkAD&-7( z2EGDU_#%84PVk?xTRF}{g;p(8yV35f*E{3g-@Y^(BGPKzR)NSMA{~+C(j_Eg0>9@t z5@wQ;tB@M>iMr%alXfViXr#6(Py`eKML-cy1QdaPfdI~I4*EhYRjLRm0*b&P0p1@B zM3&V=4q_==2NH1sAm>ml0eScVqGKeon#e&cMHMzZHZ$q$OY05)Va_uS3s}>ZDa;sZvEi5f~-FzWZ%5sX#0AZpeRcPyjD}1-`sbF8uly zVniQMvQ7N1B{HH_>LCCAsp~f_*SBDgm*6AB)n5{jBf5ca6h+sk9%KZoD`d+}fddN- zl-MX~BNtAv`88v688%DM*+si8X=4*lO=*`y-XuHPt&E+Uuu~Sz0Idq~OIuk%>$sgE zTGj>w59!!GYo9W9mxYrh+yb<*1G{@--9~S>VKqQR`7k@}=il0~df{#|2H&h**9jxj z{GrXv&Rw`Tug~iX`kVT;->XNBs2kQA!7F}x?)$EFkZ)Ko9J{x>exc{|+~(4?e!pBQU9+^KlX5=wsg6 zGNL^90@{LZlk8zlnaN*LGkJ<;ivRah=YPH5FPfz?2B1`#G5`!1Vd4OM#>**P%pji! z#6YmQqtJ;LY#Lpr_IbgT=~f2O0`@0f=S`sMAn#zO8kwK6C#6wM&^l{m1+%i2H_FB1 z&aesH%b?2%xGh2njcts^nIl_UuK-!)!7&%*n671TU6xaI2e>?(G#23T zshylz!@HWCF==p9byEoc=W}IhA2Td@k5oYsPy`eKML-caj|67pP8odv|77z2|L3vm zs!xi5B9IW!<~HgZH9Q<#%4Es#UAuw!7Lfzj8^lsnkjQmBq+G}2fv@B5B63}mB?siI li5$cdB?zbfX8^9NPVl-!`Ts*#d`G!qQvUxRBRgUL|2O-K5q$sv diff --git a/arbitrum-docs/build-decentralized-apps/precompiles/.DS_Store b/arbitrum-docs/build-decentralized-apps/precompiles/.DS_Store deleted file mode 100644 index ceef6088fa152b940f01cf586b6672bf030d6408..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Sr=55UkN00v^oKn~KGeJ+$OhqEl0S zVkD=tJ=eUZVsUgjlFiI<>dc>ymt?cEJzF|b;}~Tq5DIh^IQQyE=l?B#nchc!mlCy5 zAQbp#3Z%i}elh1q)wA{2=jp7?^ar|3c|`$@apw}iiuRE!>-7Gtn0Zab;;2#7ZggT? N1Wb@9LV*(~@Bx0ZE8zeD diff --git a/arbitrum-docs/build-decentralized-apps/reference/.DS_Store b/arbitrum-docs/build-decentralized-apps/reference/.DS_Store deleted file mode 100644 index 97b0824ee0622dba426c17b70a5be286171dc359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%TB{E5FA4f2riWX2@ps*aSP%N$56q6Ge1DnmV!tV)bcv!&Oh)Ad><#6T^nfA z_KFbNt?cn5J6?|)I|kqy5A7YG4q%Q+ur|+Zf=R!mF`Ef3(&?0=KpP#zxI=&JX=^YA zOo6|qfV{g)*v1au+8o30Z-GbL==jLLd&+oCjvKPd-qKX&-d9vr7PnDhStrXr zJ!NltWXc%d9p}^0C}Ug&z7C$))5q->^JsMLrNX;L-UISJktx+UGsc)ITc0JFZOr)> z{AE)(-z%J(bVs;ijwADEG1{0TJ#$7<7mcT^*G#uE)-uOBqPOUh z;(;S{CyX?0SY+=55TO#xHD z6!=y^_J@c`FbPsZT9xXQoOo34aW_`6T=l|LC`~Rqu)l30X;9n`=YNr>c z4NfVXtz(muvo>P7WD=9-N{{NoEF8yLkfV5oNsWDx6o^T{(j!}F_937$SY`_Rssf*u CN2SmJ diff --git a/arbitrum-docs/build-decentralized-apps/token-bridging/.DS_Store b/arbitrum-docs/build-decentralized-apps/token-bridging/.DS_Store deleted file mode 100644 index ddf8fdfc5d10bc5eee7c39e5cee490dfb06a3b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO>fgc5S>j!>rjDm04W!cC9Y|4+5$qom{1N}F@gi2VAoM=)$vBQ6RV0M`3ygX zE5C&Q!U^8&ZdKw2aR4ENcC6XAUo*S=#@_W3kr>Y60a2HT94KS^I+8WQ?W|X%Woo!l zC?9hgQ%-YAfL1I6mVtkr0seMxl1BsDA&D>d^82l5mnIZHPvvox$_V{e2%7RQk0(e zMYJ~B*EYADEoa+#7o5r}D8q7A48!~lmtIPlMi==odX6Dw!C zQE!Wu0n318fcFO%%IF)cHL9%xiMj#++o)E8JpU%Jjcd?1SZhQJL}*i>HWlWIA+$N_ zUDMAuSZmbgB+TVQn309Kp$IiP{JW|<316d4Ed!Q;RR%V6vCHTGv!CDpSB-4RGGH0_ zuNV;Rqu^+WC7HAJ%HsH}b)oN}EZncws7#QU<5*?*DDFX(pv~nB&^K6XL=D9L2q+qC KVj1|W415QRfWasL diff --git a/arbitrum-docs/how-arbitrum-works/.DS_Store b/arbitrum-docs/how-arbitrum-works/.DS_Store deleted file mode 100644 index e59d1b2c7c6dfd4269aa016296babb28f37d490f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2AGh5FV!~-O?aZ1X4L5t;97gNkt%W-zDQzf0m$0;cyb-WNrF_j+N4fUX~_09buF;wgF3yUj%Tb6a$`=cG1c(644%w zX=ojH4A(al8?LH=nk>tyJ4%G`K}-YjGAgyeSlbqAvQqDXVFcd;)LEIHU~lVPN6a7LIe{-maR4j^=#{Rptbnau zqd6Tz<1hKj8rXUW{^H4O3vcVwNz|`Sbh#yproV1RMhY6#}Yy*gNbZC3Cl~B*%BHkMb6UiRBgr7Zp_I iI+g}s#XBfMnDe;--Z6YpaEyT59|3{ERStoFiokCYi}R-d diff --git a/arbitrum-docs/launch-orbit-chain/.DS_Store b/arbitrum-docs/launch-orbit-chain/.DS_Store deleted file mode 100644 index 946a284867853836ae0a0cd3fb47782b41c43f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2AGh5FV$Y*-#-x0;D2Qv50FZX(=GYC4_R|N)Q|XmE9ywSJ|%1{t%?9QqJ%W zyaHFAgm>Wt-;5n~Hz^=42q8~ok9RyXJN{<8j)_S1is2Sfi-sqb z&?X&1^8QJz2Vty3c;e5UXZ@zr)OHn z;d~r~&!f?FuXX8>PVyj1MyVJ?!x2? z9BJ9_#fsmzsJIBRO;ABO;!Dv>-BrCv)qN^e-Ia=$40SsBv$%+Bv+U6WcIN#Nc)V0? zT$^S6CSo1Qj$$q~U5#1lvutr4YvWy3ASaAtCe^JWNThX%5anMRHbt z141m3ttxM=By&TDfJ49`zzFd7!MD6?`OI+nbfA+f0C*i@A&mJ?0NeVOcP*b8jv0_L zrr^d@*(-)J=8*eVuWR|taAQu&UOtq4v$8i7C2xm+U(`u;4R^gmz#&jYV8uMP`22tT z^ZS3*$UQj(90LCp0;;~--|b;Z_H12R9G|s5+8Z<`)|(kFCg|*OECW7@*U^M9=kox( VYx&G@NI>q7fWY87hrnM&;0N2{3wi(m