From e915cad42a5b92e76642b45cc4c5259134c8df58 Mon Sep 17 00:00:00 2001
From: PG Herveou <pgherveou@gmail.com>
Date: Fri, 21 Feb 2025 16:49:35 +0100
Subject: [PATCH] [pallet-revive] Remove js examples (#7660)

Remove JS examples, they now belongs to the evm-test-suite repo

---------

Co-authored-by: cmd[bot] <41898282+github-actions[bot]@users.noreply.github.com>
---
 Cargo.lock                                    |  18 -
 prdoc/pr_7660.prdoc                           |   8 +
 substrate/frame/revive/rpc/Cargo.toml         |  21 -
 substrate/frame/revive/rpc/examples/README.md |  16 +-
 substrate/frame/revive/rpc/examples/bun.lockb | Bin 10962 -> 0 bytes
 .../revive/rpc/examples/{rust => }/deploy.rs  |   0
 .../rpc/examples/{rust => }/extrinsic.rs      |   0
 .../frame/revive/rpc/examples/js/.gitignore   |  24 -
 .../revive/rpc/examples/js/.prettierrc.json   |   6 -
 .../revive/rpc/examples/js/.solhint.json      |   9 -
 .../revive/rpc/examples/js/abi/Errors.json    | 106 ----
 .../revive/rpc/examples/js/abi/Errors.ts      | 106 ----
 .../rpc/examples/js/abi/EventExample.json     |  34 --
 .../rpc/examples/js/abi/EventExample.ts       |  34 --
 .../revive/rpc/examples/js/abi/Flipper.json   |  35 --
 .../revive/rpc/examples/js/abi/Flipper.ts     |  35 --
 .../rpc/examples/js/abi/FlipperCaller.json    |  46 --
 .../rpc/examples/js/abi/FlipperCaller.ts      |  46 --
 .../revive/rpc/examples/js/abi/PiggyBank.json |  65 ---
 .../rpc/examples/js/abi/RevertExample.ts      |  14 -
 .../revive/rpc/examples/js/abi/piggyBank.ts   |  65 ---
 .../frame/revive/rpc/examples/js/bun.lockb    | Bin 72109 -> 0 bytes
 .../rpc/examples/js/contracts/Errors.sol      |  51 --
 .../rpc/examples/js/contracts/Event.sol       |  13 -
 .../rpc/examples/js/contracts/Flipper.sol     |  35 --
 .../rpc/examples/js/contracts/PiggyBank.sol   |  32 --
 .../rpc/examples/js/contracts/Tracing.sol     |  52 --
 .../frame/revive/rpc/examples/js/evm/.gitkeep |   0
 .../frame/revive/rpc/examples/js/index.html   |  38 --
 .../revive/rpc/examples/js/package-lock.json  | 443 ---------------
 .../frame/revive/rpc/examples/js/package.json |  26 -
 .../revive/rpc/examples/js/pvm/Errors.polkavm | Bin 7274 -> 0 bytes
 .../rpc/examples/js/pvm/EventExample.polkavm  | Bin 2615 -> 0 bytes
 .../rpc/examples/js/pvm/Flipper.polkavm       | Bin 1738 -> 0 bytes
 .../rpc/examples/js/pvm/FlipperCaller.polkavm | Bin 4615 -> 0 bytes
 .../rpc/examples/js/pvm/PiggyBank.polkavm     | Bin 5090 -> 0 bytes
 .../revive/rpc/examples/js/src/balance.ts     |   8 -
 .../rpc/examples/js/src/build-contracts.ts    |  99 ----
 .../frame/revive/rpc/examples/js/src/event.ts |  29 -
 .../js/src/fixtures/debug_traceCall.json      | 143 -----
 .../examples/js/src/fixtures/trace_block.json | 152 -----
 .../js/src/fixtures/trace_transaction.json    | 143 -----
 .../rpc/examples/js/src/geth-diff.test.ts     | 531 ------------------
 .../frame/revive/rpc/examples/js/src/lib.ts   | 127 -----
 .../revive/rpc/examples/js/src/piggy-bank.ts  |  64 ---
 .../revive/rpc/examples/js/src/solc.d.ts      |  83 ---
 .../revive/rpc/examples/js/src/spammer.ts     |  93 ---
 .../revive/rpc/examples/js/src/transfer.ts    |  19 -
 .../frame/revive/rpc/examples/js/src/util.ts  | 212 -------
 .../frame/revive/rpc/examples/js/src/web.ts   | 129 -----
 .../revive/rpc/examples/js/tsconfig.json      |  23 -
 .../examples/{rust => }/remark-extrinsic.rs   |   0
 .../rpc/examples/{rust => }/rpc-playground.rs |   0
 .../revive/rpc/examples/rpc_demo.polkavm      |   1 -
 .../rpc/examples/{rust => }/transfer.rs       |   0
 substrate/frame/revive/rpc/src/tests.rs       | 109 +---
 56 files changed, 11 insertions(+), 3332 deletions(-)
 create mode 100644 prdoc/pr_7660.prdoc
 delete mode 100755 substrate/frame/revive/rpc/examples/bun.lockb
 rename substrate/frame/revive/rpc/examples/{rust => }/deploy.rs (100%)
 rename substrate/frame/revive/rpc/examples/{rust => }/extrinsic.rs (100%)
 delete mode 100644 substrate/frame/revive/rpc/examples/js/.gitignore
 delete mode 100644 substrate/frame/revive/rpc/examples/js/.prettierrc.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/.solhint.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/Errors.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/Errors.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/EventExample.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/EventExample.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/Flipper.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/Flipper.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/PiggyBank.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/RevertExample.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/abi/piggyBank.ts
 delete mode 100755 substrate/frame/revive/rpc/examples/js/bun.lockb
 delete mode 100644 substrate/frame/revive/rpc/examples/js/contracts/Errors.sol
 delete mode 100644 substrate/frame/revive/rpc/examples/js/contracts/Event.sol
 delete mode 100644 substrate/frame/revive/rpc/examples/js/contracts/Flipper.sol
 delete mode 100644 substrate/frame/revive/rpc/examples/js/contracts/PiggyBank.sol
 delete mode 100644 substrate/frame/revive/rpc/examples/js/contracts/Tracing.sol
 delete mode 100644 substrate/frame/revive/rpc/examples/js/evm/.gitkeep
 delete mode 100644 substrate/frame/revive/rpc/examples/js/index.html
 delete mode 100644 substrate/frame/revive/rpc/examples/js/package-lock.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/package.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/pvm/Errors.polkavm
 delete mode 100644 substrate/frame/revive/rpc/examples/js/pvm/EventExample.polkavm
 delete mode 100644 substrate/frame/revive/rpc/examples/js/pvm/Flipper.polkavm
 delete mode 100644 substrate/frame/revive/rpc/examples/js/pvm/FlipperCaller.polkavm
 delete mode 100644 substrate/frame/revive/rpc/examples/js/pvm/PiggyBank.polkavm
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/balance.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/build-contracts.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/event.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/fixtures/debug_traceCall.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/fixtures/trace_block.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/fixtures/trace_transaction.json
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/geth-diff.test.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/lib.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/piggy-bank.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/solc.d.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/spammer.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/transfer.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/util.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/src/web.ts
 delete mode 100644 substrate/frame/revive/rpc/examples/js/tsconfig.json
 rename substrate/frame/revive/rpc/examples/{rust => }/remark-extrinsic.rs (100%)
 rename substrate/frame/revive/rpc/examples/{rust => }/rpc-playground.rs (100%)
 delete mode 120000 substrate/frame/revive/rpc/examples/rpc_demo.polkavm
 rename substrate/frame/revive/rpc/examples/{rust => }/transfer.rs (100%)

diff --git a/Cargo.lock b/Cargo.lock
index cf75334f495..5457e44aeaa 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6664,23 +6664,6 @@ dependencies = [
  "windows-sys 0.48.0",
 ]
 
-[[package]]
-name = "ethabi"
-version = "18.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898"
-dependencies = [
- "ethereum-types 0.14.1",
- "hex",
- "once_cell",
- "regex",
- "serde",
- "serde_json",
- "sha3 0.10.8",
- "thiserror 1.0.65",
- "uint 0.9.5",
-]
-
 [[package]]
 name = "ethabi-decode"
 version = "1.0.0"
@@ -15170,7 +15153,6 @@ dependencies = [
  "anyhow",
  "clap 4.5.13",
  "env_logger 0.11.3",
- "ethabi",
  "futures",
  "git2",
  "hex",
diff --git a/prdoc/pr_7660.prdoc b/prdoc/pr_7660.prdoc
new file mode 100644
index 00000000000..41a37d0893b
--- /dev/null
+++ b/prdoc/pr_7660.prdoc
@@ -0,0 +1,8 @@
+title: '[pallet-revive] Remove js examples'
+doc:
+- audience: Runtime Dev
+  description: |-
+    Remove JS examples, they now belongs to the evm-test-suite repo
+crates:
+- name: pallet-revive-eth-rpc
+  bump: minor
diff --git a/substrate/frame/revive/rpc/Cargo.toml b/substrate/frame/revive/rpc/Cargo.toml
index 33d447e67a2..0353cf23709 100644
--- a/substrate/frame/revive/rpc/Cargo.toml
+++ b/substrate/frame/revive/rpc/Cargo.toml
@@ -17,26 +17,6 @@ path = "src/main.rs"
 name = "eth-rpc-tester"
 path = "src/eth-rpc-tester.rs"
 
-[[example]]
-name = "deploy"
-path = "examples/rust/deploy.rs"
-
-[[example]]
-name = "transfer"
-path = "examples/rust/transfer.rs"
-
-[[example]]
-name = "rpc-playground"
-path = "examples/rust/rpc-playground.rs"
-
-[[example]]
-name = "extrinsic"
-path = "examples/rust/extrinsic.rs"
-
-[[example]]
-name = "remark-extrinsic"
-path = "examples/rust/remark-extrinsic.rs"
-
 [dependencies]
 anyhow = { workspace = true }
 clap = { workspace = true, features = ["derive", "env"] }
@@ -70,7 +50,6 @@ tokio = { workspace = true, features = ["full"] }
 
 [dev-dependencies]
 env_logger = { workspace = true }
-ethabi = { version = "18.0.0" }
 pretty_assertions = { workspace = true }
 static_init = { workspace = true }
 substrate-cli-test-utils = { workspace = true }
diff --git a/substrate/frame/revive/rpc/examples/README.md b/substrate/frame/revive/rpc/examples/README.md
index 1079c254b9c..5bbd6255713 100644
--- a/substrate/frame/revive/rpc/examples/README.md
+++ b/substrate/frame/revive/rpc/examples/README.md
@@ -47,21 +47,7 @@ RUST_LOG="info,eth-rpc=debug" cargo run -p pallet-revive-eth-rpc --example deplo
 
 ## JS examples
 
-Interact with the node using MetaMask & Ether.js, by starting the example web app:
-
-```bash
-
-cd substrate/frame/revive/rpc/examples/js
-bun install
-bun run dev
-```
-
-Alternatively, you can run the example script directly:
-
-```bash
-cd substrate/frame/revive/rpc/examples/js
-bun src/script.ts
-```
+JS examples have been moved to the [evm-test-suite](https://github.com/paritytech/evm-test-suite) repository.
 
 ### Configure MetaMask
 
diff --git a/substrate/frame/revive/rpc/examples/bun.lockb b/substrate/frame/revive/rpc/examples/bun.lockb
deleted file mode 100755
index 3a7a0df5cea48f9e639655bd11d1b9b94751e6b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10962
zcmeHN2{@G7|9@j5ZhKNhq?<M~gBgV+Dyg(7+Dn6>Va$wKEG5ytZ&%&q-$J`|uars(
z-KcQ2(4s|~cBDnxyT9*uW)5%Nena<v|IhP(?sJdFocEmfd_LdhEblq*_wCw+t&mCC
zz5)@OFA6jFRfzQApD7gk1qTR(d}e@H8p4w^!>skSD2nngn=&*Z^XI|~E8^}RJ@_Je
za@yJ|zFBz4>^<w3rYl_L4D1DsAepK%s@Ye0jJn*DG*FjSSxbtFk%@(VSdxcGl$AB`
ztB3XckTAZKqB5Y|9Lhm5rfepUL+yofYbbA1w_67}@_0jz?FddsTUC}S*(s_3%I)BO
zh(II=5y<3_0fM5kq5cP`e+A~^ebc5Yz73EgUpeIZkjFya9&&|_s=WZp9ibc?sidKX
zLxwyGT@_AMOHqbaml%h2n`%8v?sZpeVspFqAcHWI=!D2?el1hxpYuJ`e%OQYE!O>5
z-i>ps?bZo94L-ZNp7G)CdeX^4d#mR*?t?2W9Yk&0dkjl7tsTB4XWnpwgkK-rNz58f
za93PhEIUY6AE?f`Ie(XF#hTIkFNRlLHL{B@i#zPO=%ICf^g7AGW_QDe2go{1p2B;U
zI@9Ej;}eRn)p(nY&&iI~4_(wf{tR{JM2oJA^_$nel()3Gct0bTJKcVG!86+g<A^>6
zrQr^qyE_M5&%b`_!`S$>?8z%F)B8K<iJeYA_1u)%gc$l4a~x%upbsf0@E=}d0{1p5
z5j+oC+o<t43QZb?rYM5XgZ6Bi{4U>#{{-zF0Z;rvcpIW2?OXxK1w7gfL#R%##^M!#
zcTwvPLz*IbG!~x@fIezGnZ*rZ@jlVN0`SAs_P2t1n8S@q1kZ&F^dHJb{TrJIUIZ6|
z)$+0Kd*!DA$QAG~*Olpe{bvSBWB*~_!4lDE8;Jhn0Pg~L#A5nh`9A^Pie`Uf`;f>l
z1N<n!lk)e<@6Dhn`~QV}Kftrpcu=M8NuqRyh99EuTEII49-9&$YJk<<BKY%wNBhaT
zL+a}q{+A2Vt~UTtK9*7c@AY32;9b@BBeunVk@s~qkzWOPTt5+ubzn}T62bQbr;SkK
z5lHGAA|dT?;0^#h%EdY|j~a{52K-pH{KonYxrzKXF!9Lv|10Zfe*oe5H3ZJat{rsw
zv4F?^!?6eZh(?cJ<Uo7zAIA;)5A}z=gt89yAj<Sta^!-&k}_eAGTOjD*27*#nKb3t
z9{quO8NomLx)c0k!W{3D=j^v~yiecwVHyAb*>-+z^%;%)I}`9Vp;WwdYR2nHPg1u(
zuY9?sXvVZzvwOtfXggJyu({d1ysUPY%X~^k?XncgH^sIn@Sj`QDx+PlsYU7L^wpsP
z`TY!@TXXB2Y#J|_N2oS~8k5xh;oBk0ZO@hl&bjP<H%{@+$(LQ`yP>@Nl&fCaSk|5N
z)0~ot$;^X~*zJ-RcllxYRI^J~rXLL#+|#P%oa#a2#l9wqv9k5j4ND3(Z@#X$G0w5?
z(BuUor-8A@FW)p;cCcT{75-fPsKlQC6X3A&t$DW=xhwYl^4z&oH{+VZM;(8hv{AV9
z=T0<U9K$3rTJbzf6u!S67@E0iLerIp;`@C56t_Wlq}9sNeu}15uOhTlRv8^}b~~8;
zvM|fM^wwB!9s9hMK`pa-+g+9L+D|B^@sjl)xfv3ZN1Iy>U$H5!A~o__JFSW}D}vGv
zSBx|?47(q?Cw21v7logBGsp7NI(FaX$hH|9ZTjZz>)SeQ=X83Nnz4gxN9V<Lfh2~9
z!kQDc{b8`zQ1|oY-bR~l*9`5|p670GC8I<3oiX>9IBhO|oBCdl+g`7Y;Z}L=yHz&%
z#^vS(rTWK{%pT<x>C*JYwSpu@%(SUP4&3d^@fo$)sl@MN$)G6b^~LWh3Yp=R<2P9+
z&uHp?BUQxiKl$~YYd`dK<QKls`uKQDyGz5}GArYL(wbOC<E8H(7_pW1#(DRCFEvdx
zNlxhgyP3J=^wWcW+PiqI)g%L}E49tLiApw<$IMS(^ed+_t2$`@r^$zZ-XdRfGP0EW
zG3s9aUK%fbZDlwPF06gB^=<g!7V!rA&V1~C-K^T;{or*=ZY=ihVjW;t>$>UaiK0bg
zQueZ@TO{VcD$XqQTBLB*ow#gTMfDc1h$%E)`tydt<PI1b=zP%a=7lL4lahA353wlF
z@lUwA%<$v7cQwLs+1Dm|Misb@c>JdS%x*qcD<`Lx$M2{**<@n-lzo+Z5-(TNcyS#j
ziIK72<Idv_LpumFJx7ZVgr~>WbXaZtbc8tZR!`=zA$}KDMXb?tx%@}!#afFlmIqDx
zZP;a@tzTwx_SK~cOvm5n52W#u^&Ghwi4%4Vn4o`X^}G@N&P<B+k`xMif8zc&gE6<)
zvZ$*rL&U7B+TII$82h9;g)d}TcsF}cZNFqh%SGp|^<NNBG}`MijhDV}V7x1+@`&r&
z-gu$@0?XrpqLT|3=tT5?o$%1`MRe#uf1_9hdyLPxoMQo7$5nk6J2kguxiL;B6ui~;
z4&cR=Ur)MA<HhqCNsPj<)AN$Hmr>Jl4;QXmx--d$o!ZJ=-YjmQSFELk7d<z2Ku7zK
zbBDuoZ#E5yJh|^wwC(|YT@&fhsR18T^L1MFqw(Tdfh5K~Dr)ooesdnRA3tcxlTP-t
z554E!zrTE~CHv5&u=|xyGLN*mR-B(-<+Y{v?0j?oR;g!-SrIEYULAj1)SP+lF1II*
zmpu27n{mS`#=RhRO<C!&4oia+Jtwlf$_~Fv%6XY{A<EtQa-5U4=`j;3;a2jV*O}+n
zc{!J_^?zINL05l$^4_4Byc3*eG+umulEmod^YU2JuuQv*CAnjluCZ--$@G0x$k>Qm
ztTJQCRmq!teOBf(x2dtOJcNS>EvW8&dc4lgg<ICzNp`i4H0aUxz-$_CTS5vs!|Lt}
z^M|W>7aw%%G|=_=S?>g&Qy;c+&hH!VeDrl&-J<;L<HFW%p&^gUpPGB8B=B=>4-Rd6
zd2Pk=j+YMTw+ha&r}5%mge1oHPxsb1g-qM#P-7IIu_@o*R{Xp~+o;Fqr_MhM?gW^%
z>g+c$eedn)$8(pjoN~d(^i1DfYnuh6hq@1YZMc;0v28Pr*MN{h&X5&7opj=G$|aGm
zo3WP#H=|wAkZhw1-n&~bFDXBI&qQxk7uOq%#}3n9&)#t^^nKdy8o6M#@h>gXONY&R
z6Q#9KM&l*>5u|4%57_!#JI5`wf-^KYXlJQde8a(O{hbf_1IJDJXy<oP{~@<1`C3KN
zIrm?@^IJbki=HxUtyyCA@+S@#&gmVSw%(1#i~AUo7+J;HZx-!1o%{R3ssW)#p14=o
zI#+O{m0k8u%-<)Pcl5#?gPHGN1+{4^TYdjGL3Ypw%ZpC7XSeL|?UnWFCtbbT<22q5
zgcNcH@6?4C`@5c8*gvH2u$Jq~ZCNLOG3tGVUpYNpFUxVob${)7gMH7R%@Z_PrAT@)
zub<bPW=0EAvipVWd|F`{v+IBrjThc6)g?xaNn%=VSk!Bw-Nv`o1#zBfTQ{C?KC))e
zgdW9<ZpQl`T~@UwN9%xF^fIY~eGO-nq+ReZ=ib!4A0KUw4D+2|O&<@qk0Xh(=;qEB
zcDs9I6?`1LFnF@zHJ8ZsV_qDcK4{0eDjnA1Oy44Q<c2jXimXH{%N@1GeBw9T9y*2n
zW?8kR$0_!x*v)w6C;Jj(LJB#fpDkM`UDk5rv5O9QwYM&Lj%j+Sv!!%5_lEOmi}w#p
z^3ueWt7Ohcj5_6JOdUDe$GB$X*p%z61)U8`OFSZ+OV`nO$$k^*8CjK!=NE}j%&-ge
z{2}_~{q2EHbED1Aw%`PH=e{%I%i^c#hZPr8+$gOSB<#o;LuKDE99h;RIk(-6nEruw
zrZID9ykx(s<ULWfY{2e6EW^$-rtT5)p3O=<G2e5d@!Y(Zb37(FwaD$l2~RTH>tx`1
zYC?=hKzz&j>y3ZAVqBbJ^qc?tABUu#Sq;36O}Nj(cb-8qRnEeTMkXaz{a&;$$b@HJ
zOe3Lxdo#K&ZDErK&z*1Tg6+sVSQgt)DEJ<O|8}kaS%lv)?EYDX|7*>^9{AS-|9as6
z(gPCpo2!lLT;EA1^<xP{GC5BuWRZ9&%S+1VJDb~Do67{V_~HO7bFMj0C<qjZ1L{wt
zpZ`!LRF}LrBkx5>`K(%ueP@+X`c4XttuwG`;KlVHpRdS;`x!h_;`tBHYIv@~cO>{e
z1K&O1djdSuqgJ@b#`6)LZE;_Wdsy6W;@JkzA$VrM{XOc2`$asn&s6Jmvyu9tZiq)2
zs3Xcn9@GJKL7h-H)E)K2{Ugdn{m~Az0d+y0P*=1EbwYhmU$g;r$NQ)|+TYp?ejsUC
zsB(R$DYkv4DeR$t`qcT+=Fj~DvSLV_RtuF?rs41l+Q*QHr&g2cwzez>mNn%KcR<G&
z5{rd9Hr6a_mW^^}hhP%zg*(<PdzP&|wGL`g4vFI;hGolwSI*nu4tOSpM0(+lJ<A5f
z)Wy0<ELe%Lu?0CK8cw3cT1`+4K<eV<B%Z9)fCCVUM8-+v81C4y><~m^?<6*jY}PCe
zhoWlKx{+wLR+DJZjActvB<@Y(!b;t2k&Q&sNu*gRM~NXZc@ndRJAIUH`<8BfS#Ym@
z??~d?T20h$tBc%|$TqN9t1u+CPh#IntvSd>qW>g1UavLzK7ho}0Rz^c-^dpMBw`L2
z=mKOT-vE#pxspwJhkPwSqUp*zN;dLc0g1b-F*Y_7`O<(y;+0xsXH$Q+2gVME#ic0n
zH3Es&Yc=7*pt1qo$ae@NP7iE-ST+tY;6|ut2g$!&*i@s0<rX35OGP~4IJs0H3UoHN
zsh>dhbrUE;&E(h%h6yBCvtX{-d~>R~NO)3#Jd!QthY7;?Gv#uL%#jVHK=>9z8p#q#
zLV{#0u{4nVWkWVojbP%Cv}4HwXSv8DC43oMB=+Y^cz(gWKt3}_CKhR+#Pb#qVFolf
z9g)XR91_A4`7`+upn^<Y;!6X>LZLXEDdqbMq<lZQEQB8-mPUe-d|rqK88C-H1pF!$
z<#14fSjL13;L(7qYXj)IYo>CNAq9S?qv{e39I6Irq4IFZv}5&!Q2=NS7`j=2q!+;g
zSTGvEt5+a^s;`uuwQd0QwQ~XfbrsldV+YHuX7%g33mEFInf9P~Ln?gP?e%c=H~{gu
z$ZM8PA9uh&FEUk60wf@Vo5@qiXENpDV7{oXN+A{2cP$)=HT2Ziy^9N@a(HRL(B*)F
z^deKa<ThZS6z7Z7Pw5QhWbx<oCEy`BU*r!{K_F31IVSp&FOqB2{?Dy}`WqZf<#OAA
zUS$0S3UXPmqXvJ#3JMVTh1MKc0W^0n%~(LuN-)OJdz#U8&aUrvVEINZ%u{$QBAbf@
z);~7<gGWUH8tnM8A<z;GcuzfNRZWmb5Xgd0{9q-M2zh>dHIy$87fXX#emo|A?x$+T
z^qa{OXj(w&%|Ix<2o8lm<#?1x#d0xI2&<_E3+fvIQGG$#i`)i0`%M$j311ooTx!1t
zO2O~|g^(GbX^7HV0U52tR6R@^rPZGuUgs!!FDTvB&<F~S1Z;35v~74Dr#%hP6Yx-E
ns&=WUwL;`C@DnhV4@?bxLT?5n^dhVlxM@H#)ieJ8-|v3_6GD$u

diff --git a/substrate/frame/revive/rpc/examples/rust/deploy.rs b/substrate/frame/revive/rpc/examples/deploy.rs
similarity index 100%
rename from substrate/frame/revive/rpc/examples/rust/deploy.rs
rename to substrate/frame/revive/rpc/examples/deploy.rs
diff --git a/substrate/frame/revive/rpc/examples/rust/extrinsic.rs b/substrate/frame/revive/rpc/examples/extrinsic.rs
similarity index 100%
rename from substrate/frame/revive/rpc/examples/rust/extrinsic.rs
rename to substrate/frame/revive/rpc/examples/extrinsic.rs
diff --git a/substrate/frame/revive/rpc/examples/js/.gitignore b/substrate/frame/revive/rpc/examples/js/.gitignore
deleted file mode 100644
index a547bf36d8d..00000000000
--- a/substrate/frame/revive/rpc/examples/js/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/substrate/frame/revive/rpc/examples/js/.prettierrc.json b/substrate/frame/revive/rpc/examples/js/.prettierrc.json
deleted file mode 100644
index 123daf08ec5..00000000000
--- a/substrate/frame/revive/rpc/examples/js/.prettierrc.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-	"trailingComma": "es5",
-	"tabWidth": 4,
-	"semi": false,
-	"singleQuote": true
-}
diff --git a/substrate/frame/revive/rpc/examples/js/.solhint.json b/substrate/frame/revive/rpc/examples/js/.solhint.json
deleted file mode 100644
index 83a795a1f4e..00000000000
--- a/substrate/frame/revive/rpc/examples/js/.solhint.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-	"extends": "solhint:recommended",
-	"rules": {
-		"compiler-version": ["error", "^0.8.0"],
-		"gas-custom-errors": "off",
-		"one-contract-per-file": "off",
-		"no-empty-blocks": "off"
-	}
-}
diff --git a/substrate/frame/revive/rpc/examples/js/abi/Errors.json b/substrate/frame/revive/rpc/examples/js/abi/Errors.json
deleted file mode 100644
index 2d8dccc771e..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/Errors.json
+++ /dev/null
@@ -1,106 +0,0 @@
-[
-  {
-    "inputs": [
-      {
-        "internalType": "string",
-        "name": "message",
-        "type": "string"
-      }
-    ],
-    "name": "CustomError",
-    "type": "error"
-  },
-  {
-    "inputs": [
-      {
-        "internalType": "bool",
-        "name": "newState",
-        "type": "bool"
-      }
-    ],
-    "name": "setState",
-    "outputs": [],
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "state",
-    "outputs": [
-      {
-        "internalType": "bool",
-        "name": "",
-        "type": "bool"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "triggerAssertError",
-    "outputs": [],
-    "stateMutability": "pure",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "triggerCustomError",
-    "outputs": [],
-    "stateMutability": "pure",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "triggerDivisionByZero",
-    "outputs": [
-      {
-        "internalType": "uint256",
-        "name": "",
-        "type": "uint256"
-      }
-    ],
-    "stateMutability": "pure",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "triggerOutOfBoundsError",
-    "outputs": [
-      {
-        "internalType": "uint256",
-        "name": "",
-        "type": "uint256"
-      }
-    ],
-    "stateMutability": "pure",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "triggerRequireError",
-    "outputs": [],
-    "stateMutability": "pure",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "triggerRevertError",
-    "outputs": [],
-    "stateMutability": "pure",
-    "type": "function"
-  },
-  {
-    "inputs": [
-      {
-        "internalType": "uint256",
-        "name": "value",
-        "type": "uint256"
-      }
-    ],
-    "name": "valueMatch",
-    "outputs": [],
-    "stateMutability": "payable",
-    "type": "function"
-  }
-]
\ No newline at end of file
diff --git a/substrate/frame/revive/rpc/examples/js/abi/Errors.ts b/substrate/frame/revive/rpc/examples/js/abi/Errors.ts
deleted file mode 100644
index b39567531c6..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/Errors.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-export const ErrorsAbi = [
-  {
-    inputs: [
-      {
-        internalType: "string",
-        name: "message",
-        type: "string",
-      },
-    ],
-    name: "CustomError",
-    type: "error",
-  },
-  {
-    inputs: [
-      {
-        internalType: "bool",
-        name: "newState",
-        type: "bool",
-      },
-    ],
-    name: "setState",
-    outputs: [],
-    stateMutability: "nonpayable",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "state",
-    outputs: [
-      {
-        internalType: "bool",
-        name: "",
-        type: "bool",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "triggerAssertError",
-    outputs: [],
-    stateMutability: "pure",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "triggerCustomError",
-    outputs: [],
-    stateMutability: "pure",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "triggerDivisionByZero",
-    outputs: [
-      {
-        internalType: "uint256",
-        name: "",
-        type: "uint256",
-      },
-    ],
-    stateMutability: "pure",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "triggerOutOfBoundsError",
-    outputs: [
-      {
-        internalType: "uint256",
-        name: "",
-        type: "uint256",
-      },
-    ],
-    stateMutability: "pure",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "triggerRequireError",
-    outputs: [],
-    stateMutability: "pure",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "triggerRevertError",
-    outputs: [],
-    stateMutability: "pure",
-    type: "function",
-  },
-  {
-    inputs: [
-      {
-        internalType: "uint256",
-        name: "value",
-        type: "uint256",
-      },
-    ],
-    name: "valueMatch",
-    outputs: [],
-    stateMutability: "payable",
-    type: "function",
-  },
-] as const;
diff --git a/substrate/frame/revive/rpc/examples/js/abi/EventExample.json b/substrate/frame/revive/rpc/examples/js/abi/EventExample.json
deleted file mode 100644
index a64c920c406..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/EventExample.json
+++ /dev/null
@@ -1,34 +0,0 @@
-[
-  {
-    "anonymous": false,
-    "inputs": [
-      {
-        "indexed": true,
-        "internalType": "address",
-        "name": "sender",
-        "type": "address"
-      },
-      {
-        "indexed": false,
-        "internalType": "uint256",
-        "name": "value",
-        "type": "uint256"
-      },
-      {
-        "indexed": false,
-        "internalType": "string",
-        "name": "message",
-        "type": "string"
-      }
-    ],
-    "name": "ExampleEvent",
-    "type": "event"
-  },
-  {
-    "inputs": [],
-    "name": "triggerEvent",
-    "outputs": [],
-    "stateMutability": "nonpayable",
-    "type": "function"
-  }
-]
\ No newline at end of file
diff --git a/substrate/frame/revive/rpc/examples/js/abi/EventExample.ts b/substrate/frame/revive/rpc/examples/js/abi/EventExample.ts
deleted file mode 100644
index efb0d741b48..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/EventExample.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-export const EventExampleAbi = [
-  {
-    anonymous: false,
-    inputs: [
-      {
-        indexed: true,
-        internalType: "address",
-        name: "sender",
-        type: "address",
-      },
-      {
-        indexed: false,
-        internalType: "uint256",
-        name: "value",
-        type: "uint256",
-      },
-      {
-        indexed: false,
-        internalType: "string",
-        name: "message",
-        type: "string",
-      },
-    ],
-    name: "ExampleEvent",
-    type: "event",
-  },
-  {
-    inputs: [],
-    name: "triggerEvent",
-    outputs: [],
-    stateMutability: "nonpayable",
-    type: "function",
-  },
-] as const;
diff --git a/substrate/frame/revive/rpc/examples/js/abi/Flipper.json b/substrate/frame/revive/rpc/examples/js/abi/Flipper.json
deleted file mode 100644
index 4c1b163d294..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/Flipper.json
+++ /dev/null
@@ -1,35 +0,0 @@
-[
-  {
-    "inputs": [],
-    "name": "flip",
-    "outputs": [],
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "getValue",
-    "outputs": [
-      {
-        "internalType": "bool",
-        "name": "",
-        "type": "bool"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "value",
-    "outputs": [
-      {
-        "internalType": "bool",
-        "name": "",
-        "type": "bool"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  }
-]
\ No newline at end of file
diff --git a/substrate/frame/revive/rpc/examples/js/abi/Flipper.ts b/substrate/frame/revive/rpc/examples/js/abi/Flipper.ts
deleted file mode 100644
index d7428beb6aa..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/Flipper.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export const FlipperAbi = [
-  {
-    inputs: [],
-    name: "flip",
-    outputs: [],
-    stateMutability: "nonpayable",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "getValue",
-    outputs: [
-      {
-        internalType: "bool",
-        name: "",
-        type: "bool",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "value",
-    outputs: [
-      {
-        internalType: "bool",
-        name: "",
-        type: "bool",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-] as const;
diff --git a/substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.json b/substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.json
deleted file mode 100644
index c4ed4228f47..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.json
+++ /dev/null
@@ -1,46 +0,0 @@
-[
-  {
-    "inputs": [
-      {
-        "internalType": "address",
-        "name": "_flipperAddress",
-        "type": "address"
-      }
-    ],
-    "stateMutability": "nonpayable",
-    "type": "constructor"
-  },
-  {
-    "inputs": [],
-    "name": "callFlip",
-    "outputs": [],
-    "stateMutability": "nonpayable",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "callGetValue",
-    "outputs": [
-      {
-        "internalType": "bool",
-        "name": "",
-        "type": "bool"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "flipperAddress",
-    "outputs": [
-      {
-        "internalType": "address",
-        "name": "",
-        "type": "address"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  }
-]
\ No newline at end of file
diff --git a/substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.ts b/substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.ts
deleted file mode 100644
index 2d695886d96..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/FlipperCaller.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-export const FlipperCallerAbi = [
-  {
-    inputs: [
-      {
-        internalType: "address",
-        name: "_flipperAddress",
-        type: "address",
-      },
-    ],
-    stateMutability: "nonpayable",
-    type: "constructor",
-  },
-  {
-    inputs: [],
-    name: "callFlip",
-    outputs: [],
-    stateMutability: "nonpayable",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "callGetValue",
-    outputs: [
-      {
-        internalType: "bool",
-        name: "",
-        type: "bool",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "flipperAddress",
-    outputs: [
-      {
-        internalType: "address",
-        name: "",
-        type: "address",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-] as const;
diff --git a/substrate/frame/revive/rpc/examples/js/abi/PiggyBank.json b/substrate/frame/revive/rpc/examples/js/abi/PiggyBank.json
deleted file mode 100644
index e6655889e21..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/PiggyBank.json
+++ /dev/null
@@ -1,65 +0,0 @@
-[
-  {
-    "inputs": [],
-    "stateMutability": "nonpayable",
-    "type": "constructor"
-  },
-  {
-    "inputs": [],
-    "name": "deposit",
-    "outputs": [
-      {
-        "internalType": "uint256",
-        "name": "",
-        "type": "uint256"
-      }
-    ],
-    "stateMutability": "payable",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "getDeposit",
-    "outputs": [
-      {
-        "internalType": "uint256",
-        "name": "",
-        "type": "uint256"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "inputs": [],
-    "name": "owner",
-    "outputs": [
-      {
-        "internalType": "address",
-        "name": "",
-        "type": "address"
-      }
-    ],
-    "stateMutability": "view",
-    "type": "function"
-  },
-  {
-    "inputs": [
-      {
-        "internalType": "uint256",
-        "name": "withdrawAmount",
-        "type": "uint256"
-      }
-    ],
-    "name": "withdraw",
-    "outputs": [
-      {
-        "internalType": "uint256",
-        "name": "remainingBal",
-        "type": "uint256"
-      }
-    ],
-    "stateMutability": "nonpayable",
-    "type": "function"
-  }
-]
\ No newline at end of file
diff --git a/substrate/frame/revive/rpc/examples/js/abi/RevertExample.ts b/substrate/frame/revive/rpc/examples/js/abi/RevertExample.ts
deleted file mode 100644
index ab483b1811c..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/RevertExample.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export const RevertExampleAbi = [
-  {
-    inputs: [],
-    stateMutability: "nonpayable",
-    type: "constructor",
-  },
-  {
-    inputs: [],
-    name: "doRevert",
-    outputs: [],
-    stateMutability: "nonpayable",
-    type: "function",
-  },
-] as const;
diff --git a/substrate/frame/revive/rpc/examples/js/abi/piggyBank.ts b/substrate/frame/revive/rpc/examples/js/abi/piggyBank.ts
deleted file mode 100644
index a6b8c1b0be5..00000000000
--- a/substrate/frame/revive/rpc/examples/js/abi/piggyBank.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-export const PiggyBankAbi = [
-  {
-    inputs: [],
-    stateMutability: "nonpayable",
-    type: "constructor",
-  },
-  {
-    inputs: [],
-    name: "deposit",
-    outputs: [
-      {
-        internalType: "uint256",
-        name: "",
-        type: "uint256",
-      },
-    ],
-    stateMutability: "payable",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "getDeposit",
-    outputs: [
-      {
-        internalType: "uint256",
-        name: "",
-        type: "uint256",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-  {
-    inputs: [],
-    name: "owner",
-    outputs: [
-      {
-        internalType: "address",
-        name: "",
-        type: "address",
-      },
-    ],
-    stateMutability: "view",
-    type: "function",
-  },
-  {
-    inputs: [
-      {
-        internalType: "uint256",
-        name: "withdrawAmount",
-        type: "uint256",
-      },
-    ],
-    name: "withdraw",
-    outputs: [
-      {
-        internalType: "uint256",
-        name: "remainingBal",
-        type: "uint256",
-      },
-    ],
-    stateMutability: "nonpayable",
-    type: "function",
-  },
-] as const;
diff --git a/substrate/frame/revive/rpc/examples/js/bun.lockb b/substrate/frame/revive/rpc/examples/js/bun.lockb
deleted file mode 100755
index 3b8ad3d048b079b71dffad82cf37fd1952375ce2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 72109
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
F{uc>F_R;_V

diff --git a/substrate/frame/revive/rpc/examples/js/contracts/Errors.sol b/substrate/frame/revive/rpc/examples/js/contracts/Errors.sol
deleted file mode 100644
index abbdba8d32e..00000000000
--- a/substrate/frame/revive/rpc/examples/js/contracts/Errors.sol
+++ /dev/null
@@ -1,51 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-contract Errors {
-	bool public state;
-
-	// Payable function that can be used to test insufficient funds errors
-    function valueMatch(uint256 value) public payable {
-		require(msg.value == value , "msg.value does not match value");
-    }
-
-    function setState(bool newState) public {
-        state = newState;
-    }
-
-    // Trigger a require statement failure with a custom error message
-    function triggerRequireError() public pure {
-        require(false, "This is a require error");
-    }
-
-    // Trigger an assert statement failure
-    function triggerAssertError() public pure {
-        assert(false);
-    }
-
-    // Trigger a revert statement with a custom error message
-    function triggerRevertError() public pure {
-        revert("This is a revert error");
-    }
-
-    // Trigger a division by zero error
-    function triggerDivisionByZero() public pure returns (uint256) {
-        uint256 a = 1;
-        uint256 b = 0;
-        return a / b;
-    }
-
-    // Trigger an out-of-bounds array access
-    function triggerOutOfBoundsError() public pure returns (uint256) {
-        uint256[] memory arr = new uint256[](1);
-        return arr[2];
-    }
-
-    // Trigger a custom error
-    error CustomError(string message);
-
-    function triggerCustomError() public pure {
-        revert CustomError("This is a custom error");
-    }
-}
-
diff --git a/substrate/frame/revive/rpc/examples/js/contracts/Event.sol b/substrate/frame/revive/rpc/examples/js/contracts/Event.sol
deleted file mode 100644
index 1e4ce7cf876..00000000000
--- a/substrate/frame/revive/rpc/examples/js/contracts/Event.sol
+++ /dev/null
@@ -1,13 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-contract EventExample {
-    event ExampleEvent(address indexed sender, uint256 value, string message);
-
-    function triggerEvent() public {
-        uint256 value = 12345;
-        string memory message = "Hello world";
-        emit ExampleEvent(msg.sender, value, message);
-    }
-}
-
diff --git a/substrate/frame/revive/rpc/examples/js/contracts/Flipper.sol b/substrate/frame/revive/rpc/examples/js/contracts/Flipper.sol
deleted file mode 100644
index 93b09f08c27..00000000000
--- a/substrate/frame/revive/rpc/examples/js/contracts/Flipper.sol
+++ /dev/null
@@ -1,35 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-// Flipper - Stores and toggles a boolean value
-contract Flipper {
-    bool public value;
-
-    function flip() external {
-		value = !value;
-    }
-
-    function getValue() external view returns (bool) {
-        return value;
-    }
-}
-
-// FlipperCaller - Interacts with the Flipper contract
-contract FlipperCaller {
-    // Address of the Flipper contract
-    address public flipperAddress;
-
-    // Constructor to initialize Flipper's address
-    constructor(address _flipperAddress) public {
-        flipperAddress = _flipperAddress;
-    }
-
-    function callFlip() external {
-        Flipper(flipperAddress).flip();
-    }
-
-    function callGetValue() external view returns (bool) {
-        return Flipper(flipperAddress).getValue();
-    }
-}
-
diff --git a/substrate/frame/revive/rpc/examples/js/contracts/PiggyBank.sol b/substrate/frame/revive/rpc/examples/js/contracts/PiggyBank.sol
deleted file mode 100644
index 89be1b2589d..00000000000
--- a/substrate/frame/revive/rpc/examples/js/contracts/PiggyBank.sol
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-contract PiggyBank {
-
-    uint256 private balance;
-    address public owner;
-
-    constructor() public {
-        owner = msg.sender;
-        balance = 0;
-    }
-
-    function deposit() public payable returns (uint256) {
-        balance += msg.value;
-        return balance;
-    }
-
-    function getDeposit() public view returns (uint256) {
-        return balance;
-    }
-
-    function withdraw(uint256 withdrawAmount) public returns (uint256 remainingBal) {
-		require(msg.sender == owner, "You are not the owner");
-        balance -= withdrawAmount;
-        (bool success, ) = payable(msg.sender).call{value: withdrawAmount}("");
-        require(success, "Transfer failed");
-
-        return balance;
-    }
-}
-
diff --git a/substrate/frame/revive/rpc/examples/js/contracts/Tracing.sol b/substrate/frame/revive/rpc/examples/js/contracts/Tracing.sol
deleted file mode 100644
index c7867fc4a05..00000000000
--- a/substrate/frame/revive/rpc/examples/js/contracts/Tracing.sol
+++ /dev/null
@@ -1,52 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.0;
-
-contract TracingCaller {
-	event TraceEvent(uint256 value, string message);
-    address payable public callee;
-
-	constructor(address payable _callee) public payable {
-        require(_callee != address(0), "Callee address cannot be zero");
-        callee = _callee;
-    }
-
-    function start(uint256 counter) external {
-        if (counter == 0) {
-			return;
-        }
-
-        uint256 paymentAmount = 0.01 ether;
-        callee.transfer(paymentAmount);
-
-        emit TraceEvent(counter, "before");
-		TracingCallee(callee).consumeGas(counter);
-		emit TraceEvent(counter, "after");
-
-        try TracingCallee(callee).failingFunction{value: paymentAmount}() {
-        } catch {
-        }
-
-		this.start(counter - 1);
-    }
-}
-
-contract TracingCallee {
-    event CalleeCalled(uint256 counter);
-
-    function consumeGas(uint256 counter) external {
-		// burn some gas
-        for (uint256 i = 0; i < 10; i++) {
-			uint256(keccak256(abi.encodePacked(i)));
-        }
-
-        emit CalleeCalled(counter);
-    }
-
-	function failingFunction() external payable {
-        require(false, "This function always fails");
-    }
-
-	// Enable contract to receive Ether
-    receive() external payable {}
-}
-
diff --git a/substrate/frame/revive/rpc/examples/js/evm/.gitkeep b/substrate/frame/revive/rpc/examples/js/evm/.gitkeep
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/substrate/frame/revive/rpc/examples/js/index.html b/substrate/frame/revive/rpc/examples/js/index.html
deleted file mode 100644
index 97efebe180e..00000000000
--- a/substrate/frame/revive/rpc/examples/js/index.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!doctype html>
-<html lang="en">
-	<head>
-		<meta charset="UTF-8" />
-		<link rel="icon" href="https://polkadot.com/favicon.ico" />
-		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-		<title>MetaMask Playground</title>
-		<style>
-			input {
-				width: 300px;
-				margin-right: 10px;
-			}
-
-			button {
-				display: block;
-				margin-bottom: 10px;
-			}
-		</style>
-	</head>
-	<body>
-		<input
-			id="transferInput"
-			type="text"
-			style="float: left"
-			placeholder="Destination address"
-			value="0x3cd0a705a2dc65e5b1e1205896baa2be8a07c6e0"
-		/>
-		<button id="transferButton">Transfer coins</button>
-
-		<button id="deployButton">Deploy Contract</button>
-
-		<input id="callInput" type="text" style="float: left" placeholder="Contract address" />
-		<button id="callButton">Call Contract</button>
-
-		<button id="deployAndCallButton">Deploy and Call Contract</button>
-		<script type="module" src="src/web.ts"></script>
-	</body>
-</html>
diff --git a/substrate/frame/revive/rpc/examples/js/package-lock.json b/substrate/frame/revive/rpc/examples/js/package-lock.json
deleted file mode 100644
index 5c7db0abc93..00000000000
--- a/substrate/frame/revive/rpc/examples/js/package-lock.json
+++ /dev/null
@@ -1,443 +0,0 @@
-{
-	"name": "demo",
-	"version": "0.0.0",
-	"lockfileVersion": 3,
-	"requires": true,
-	"packages": {
-		"": {
-			"name": "demo",
-			"version": "0.0.0",
-			"dependencies": {
-				"ethers": "^6.13.1",
-				"solc": "^0.8.28"
-			},
-			"devDependencies": {
-				"typescript": "^5.5.3",
-				"vite": "^5.4.8"
-			}
-		},
-		"node_modules/@adraffy/ens-normalize": {
-			"version": "1.10.1",
-			"license": "MIT"
-		},
-		"node_modules/@esbuild/linux-x64": {
-			"version": "0.21.5",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			],
-			"engines": {
-				"node": ">=12"
-			}
-		},
-		"node_modules/@noble/curves": {
-			"version": "1.2.0",
-			"license": "MIT",
-			"dependencies": {
-				"@noble/hashes": "1.3.2"
-			},
-			"funding": {
-				"url": "https://paulmillr.com/funding/"
-			}
-		},
-		"node_modules/@noble/hashes": {
-			"version": "1.3.2",
-			"license": "MIT",
-			"engines": {
-				"node": ">= 16"
-			},
-			"funding": {
-				"url": "https://paulmillr.com/funding/"
-			}
-		},
-		"node_modules/@rollup/rollup-linux-x64-gnu": {
-			"version": "4.24.0",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			]
-		},
-		"node_modules/@rollup/rollup-linux-x64-musl": {
-			"version": "4.24.0",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			]
-		},
-		"node_modules/@types/estree": {
-			"version": "1.0.6",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/@types/node": {
-			"version": "18.15.13",
-			"license": "MIT"
-		},
-		"node_modules/aes-js": {
-			"version": "4.0.0-beta.5",
-			"license": "MIT"
-		},
-		"node_modules/command-exists": {
-			"version": "1.2.9",
-			"resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
-			"integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
-			"license": "MIT"
-		},
-		"node_modules/commander": {
-			"version": "8.3.0",
-			"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-			"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-			"license": "MIT",
-			"engines": {
-				"node": ">= 12"
-			}
-		},
-		"node_modules/esbuild": {
-			"version": "0.21.5",
-			"dev": true,
-			"hasInstallScript": true,
-			"license": "MIT",
-			"bin": {
-				"esbuild": "bin/esbuild"
-			},
-			"engines": {
-				"node": ">=12"
-			},
-			"optionalDependencies": {
-				"@esbuild/aix-ppc64": "0.21.5",
-				"@esbuild/android-arm": "0.21.5",
-				"@esbuild/android-arm64": "0.21.5",
-				"@esbuild/android-x64": "0.21.5",
-				"@esbuild/darwin-arm64": "0.21.5",
-				"@esbuild/darwin-x64": "0.21.5",
-				"@esbuild/freebsd-arm64": "0.21.5",
-				"@esbuild/freebsd-x64": "0.21.5",
-				"@esbuild/linux-arm": "0.21.5",
-				"@esbuild/linux-arm64": "0.21.5",
-				"@esbuild/linux-ia32": "0.21.5",
-				"@esbuild/linux-loong64": "0.21.5",
-				"@esbuild/linux-mips64el": "0.21.5",
-				"@esbuild/linux-ppc64": "0.21.5",
-				"@esbuild/linux-riscv64": "0.21.5",
-				"@esbuild/linux-s390x": "0.21.5",
-				"@esbuild/linux-x64": "0.21.5",
-				"@esbuild/netbsd-x64": "0.21.5",
-				"@esbuild/openbsd-x64": "0.21.5",
-				"@esbuild/sunos-x64": "0.21.5",
-				"@esbuild/win32-arm64": "0.21.5",
-				"@esbuild/win32-ia32": "0.21.5",
-				"@esbuild/win32-x64": "0.21.5"
-			}
-		},
-		"node_modules/ethers": {
-			"version": "6.13.3",
-			"funding": [
-				{
-					"type": "individual",
-					"url": "https://github.com/sponsors/ethers-io/"
-				},
-				{
-					"type": "individual",
-					"url": "https://www.buymeacoffee.com/ricmoo"
-				}
-			],
-			"license": "MIT",
-			"dependencies": {
-				"@adraffy/ens-normalize": "1.10.1",
-				"@noble/curves": "1.2.0",
-				"@noble/hashes": "1.3.2",
-				"@types/node": "18.15.13",
-				"aes-js": "4.0.0-beta.5",
-				"tslib": "2.4.0",
-				"ws": "8.17.1"
-			},
-			"engines": {
-				"node": ">=14.0.0"
-			}
-		},
-		"node_modules/follow-redirects": {
-			"version": "1.15.9",
-			"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
-			"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
-			"funding": [
-				{
-					"type": "individual",
-					"url": "https://github.com/sponsors/RubenVerborgh"
-				}
-			],
-			"license": "MIT",
-			"engines": {
-				"node": ">=4.0"
-			},
-			"peerDependenciesMeta": {
-				"debug": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/js-sha3": {
-			"version": "0.8.0",
-			"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
-			"integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
-			"license": "MIT"
-		},
-		"node_modules/memorystream": {
-			"version": "0.3.1",
-			"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-			"integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
-			"engines": {
-				"node": ">= 0.10.0"
-			}
-		},
-		"node_modules/nanoid": {
-			"version": "3.3.7",
-			"dev": true,
-			"funding": [
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"bin": {
-				"nanoid": "bin/nanoid.cjs"
-			},
-			"engines": {
-				"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-			}
-		},
-		"node_modules/os-tmpdir": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-			"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
-			"license": "MIT",
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/picocolors": {
-			"version": "1.1.0",
-			"dev": true,
-			"license": "ISC"
-		},
-		"node_modules/postcss": {
-			"version": "8.4.47",
-			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/postcss/"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/postcss"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"dependencies": {
-				"nanoid": "^3.3.7",
-				"picocolors": "^1.1.0",
-				"source-map-js": "^1.2.1"
-			},
-			"engines": {
-				"node": "^10 || ^12 || >=14"
-			}
-		},
-		"node_modules/rollup": {
-			"version": "4.24.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@types/estree": "1.0.6"
-			},
-			"bin": {
-				"rollup": "dist/bin/rollup"
-			},
-			"engines": {
-				"node": ">=18.0.0",
-				"npm": ">=8.0.0"
-			},
-			"optionalDependencies": {
-				"@rollup/rollup-android-arm-eabi": "4.24.0",
-				"@rollup/rollup-android-arm64": "4.24.0",
-				"@rollup/rollup-darwin-arm64": "4.24.0",
-				"@rollup/rollup-darwin-x64": "4.24.0",
-				"@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
-				"@rollup/rollup-linux-arm-musleabihf": "4.24.0",
-				"@rollup/rollup-linux-arm64-gnu": "4.24.0",
-				"@rollup/rollup-linux-arm64-musl": "4.24.0",
-				"@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
-				"@rollup/rollup-linux-riscv64-gnu": "4.24.0",
-				"@rollup/rollup-linux-s390x-gnu": "4.24.0",
-				"@rollup/rollup-linux-x64-gnu": "4.24.0",
-				"@rollup/rollup-linux-x64-musl": "4.24.0",
-				"@rollup/rollup-win32-arm64-msvc": "4.24.0",
-				"@rollup/rollup-win32-ia32-msvc": "4.24.0",
-				"@rollup/rollup-win32-x64-msvc": "4.24.0",
-				"fsevents": "~2.3.2"
-			}
-		},
-		"node_modules/semver": {
-			"version": "5.7.2",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-			"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-			"license": "ISC",
-			"bin": {
-				"semver": "bin/semver"
-			}
-		},
-		"node_modules/solc": {
-			"version": "0.8.28",
-			"resolved": "https://registry.npmjs.org/solc/-/solc-0.8.28.tgz",
-			"integrity": "sha512-AFCiJ+b4RosyyNhnfdVH4ZR1+TxiL91iluPjw0EJslIu4LXGM9NYqi2z5y8TqochC4tcH9QsHfwWhOIC9jPDKA==",
-			"license": "MIT",
-			"dependencies": {
-				"command-exists": "^1.2.8",
-				"commander": "^8.1.0",
-				"follow-redirects": "^1.12.1",
-				"js-sha3": "0.8.0",
-				"memorystream": "^0.3.1",
-				"semver": "^5.5.0",
-				"tmp": "0.0.33"
-			},
-			"bin": {
-				"solcjs": "solc.js"
-			},
-			"engines": {
-				"node": ">=10.0.0"
-			}
-		},
-		"node_modules/source-map-js": {
-			"version": "1.2.1",
-			"dev": true,
-			"license": "BSD-3-Clause",
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/tmp": {
-			"version": "0.0.33",
-			"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-			"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
-			"license": "MIT",
-			"dependencies": {
-				"os-tmpdir": "~1.0.2"
-			},
-			"engines": {
-				"node": ">=0.6.0"
-			}
-		},
-		"node_modules/tslib": {
-			"version": "2.4.0",
-			"license": "0BSD"
-		},
-		"node_modules/typescript": {
-			"version": "5.6.3",
-			"dev": true,
-			"license": "Apache-2.0",
-			"bin": {
-				"tsc": "bin/tsc",
-				"tsserver": "bin/tsserver"
-			},
-			"engines": {
-				"node": ">=14.17"
-			}
-		},
-		"node_modules/vite": {
-			"version": "5.4.8",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"esbuild": "^0.21.3",
-				"postcss": "^8.4.43",
-				"rollup": "^4.20.0"
-			},
-			"bin": {
-				"vite": "bin/vite.js"
-			},
-			"engines": {
-				"node": "^18.0.0 || >=20.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/vitejs/vite?sponsor=1"
-			},
-			"optionalDependencies": {
-				"fsevents": "~2.3.3"
-			},
-			"peerDependencies": {
-				"@types/node": "^18.0.0 || >=20.0.0",
-				"less": "*",
-				"lightningcss": "^1.21.0",
-				"sass": "*",
-				"sass-embedded": "*",
-				"stylus": "*",
-				"sugarss": "*",
-				"terser": "^5.4.0"
-			},
-			"peerDependenciesMeta": {
-				"@types/node": {
-					"optional": true
-				},
-				"less": {
-					"optional": true
-				},
-				"lightningcss": {
-					"optional": true
-				},
-				"sass": {
-					"optional": true
-				},
-				"sass-embedded": {
-					"optional": true
-				},
-				"stylus": {
-					"optional": true
-				},
-				"sugarss": {
-					"optional": true
-				},
-				"terser": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/ws": {
-			"version": "8.17.1",
-			"license": "MIT",
-			"engines": {
-				"node": ">=10.0.0"
-			},
-			"peerDependencies": {
-				"bufferutil": "^4.0.1",
-				"utf-8-validate": ">=5.0.2"
-			},
-			"peerDependenciesMeta": {
-				"bufferutil": {
-					"optional": true
-				},
-				"utf-8-validate": {
-					"optional": true
-				}
-			}
-		}
-	}
-}
diff --git a/substrate/frame/revive/rpc/examples/js/package.json b/substrate/frame/revive/rpc/examples/js/package.json
deleted file mode 100644
index 5b225711dc5..00000000000
--- a/substrate/frame/revive/rpc/examples/js/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-	"name": "demo",
-	"private": true,
-	"version": "0.0.0",
-	"type": "module",
-	"scripts": {
-		"dev": "vite",
-		"build": "tsc && vite build",
-		"preview": "vite preview",
-		"prettier": "prettier --write .",
-		"solhint": "solhint \"contracts/**/*.sol\""
-	},
-	"dependencies": {
-		"@parity/revive": "^0.0.9",
-		"ethers": "^6.13.5",
-		"solc": "^0.8.28",
-		"solhint": "^5.0.5",
-		"viem": "^2.22.4"
-	},
-	"devDependencies": {
-		"prettier": "^3.4.2",
-		"@types/bun": "^1.1.15",
-		"typescript": "^5.7.2",
-		"vite": "^5.4.11"
-	}
-}
diff --git a/substrate/frame/revive/rpc/examples/js/pvm/Errors.polkavm b/substrate/frame/revive/rpc/examples/js/pvm/Errors.polkavm
deleted file mode 100644
index 48de6e0aa0c6cc1604008ba4e65c237dd557675b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7274
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
GsQ&}g)MbzW

diff --git a/substrate/frame/revive/rpc/examples/js/pvm/EventExample.polkavm b/substrate/frame/revive/rpc/examples/js/pvm/EventExample.polkavm
deleted file mode 100644
index cea22e46adcad0dc9bf6375e676dd4923c624c89..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2615
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
M#c}`1SXe~=21`UJvj6}9

diff --git a/substrate/frame/revive/rpc/examples/js/pvm/Flipper.polkavm b/substrate/frame/revive/rpc/examples/js/pvm/Flipper.polkavm
deleted file mode 100644
index 67f11e68f117309169a317d415ba547020c1f568..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1738
zcmbVMO>7%Q6rNqLGviHL*2Z2>(?7@BMoD@>*&-SWsX<|y394i-DGGurackFZaO;vd
zb&}=atQ``l1g@!R+EYaxC5{jR^^mr?v=WC12?-=u;+O-f1VRFFsv2l`wyQ=Fy^xi^
z-JQ2@KELmKZ#Ve%F@(NvK(#}_=w1NbMFA=E8L38g0Coe~0WSgq00VFWa4MWg3`D}I
z@W83$`SFcaA{mZstVYgEL}Ss^z(^`N9F9dtqT$5Aa5ObKd~O7yXU?7-O@&V;qBWvw
z<VoIzaAGt%kQxr38#x^v9*#!rPI2mhROOxOXoy75Cz9h0A2qtfslzAG1!SUYND>YT
zy~2A!Mwk%iM8kH;wp}_YHQGDuFWV#I7bg@Q8}e(qjF9lvC!H&^Bs;w?mtO6A2?DZ?
zJ5VP`7QY^Izlz}+8Pl;3i7V6aVB@X>6`g;Y3NbyoQ9;K#2`b`z7bZxQMWG8TNIY!!
zAzR3fgNoz`Dh&@{!(CH3WO`mO)z+dXkaMm^R2>I&;tML|{q+#OiF5)4&9?sPDOf%A
zAkhs))Q*f9SGw>Z5{uqdDA$b9$Oqg@xmV#{!f`e&W5F7t*1TdZP^(O=#mX$H%;U;5
zHt?G|&H#N-kp=iCZpD;rI)i{iC%QuxI*A*JA+jCnK{jBrgQj}^wx1q{@J=0DaSDmj
z6RkUz9~)RglX37;&>cEb;8D@(TQ`-Tk?Hvnnd%BEdREaUm98n^dLZf!P^rt{(T3Dc
z0?Q4lHJ#=eT63U}+U7)aNXf>0I*|ooGWJU7X!(y{e&`cJN8k9XbmUiL96fG);j^Av
zL!M;~dA2n@BDgV`e#<Kz5xLsW)gV`UxEiS2yoo3>VaAlA_aWH7DUO8fV%E&Y1G-~f
z$FdCwtu&<8O@#isFa8t4zY8D6luy%F(ucrI-kL|ebp`-!n4X2vs`?G7>L8@v6Ra4`
zjzP%b148ijNzea}uq2Swg`F0-I>y!WT#a*ea0|i)|066=E0*5;JA~c!vFouG`mJ)n
zS_~%5<aA|;RLYLzRhYrq8DHhL<H}VZ+#BQp%BEqj8G~VLO2PK~sA|hNcw)uK$`~2@
zcpsyC8QsI^Zbo-8+QjHiMk%9SMpZ^VjJg?po>3R0PDT|*pJQ|fquUwX#%Lp>GNTSg
z38R?N21f0SN{reV6&V%GIAx?(`tFBoA^gr{b*#5;@wS@7$GwuP{teiBW6i)z2=SI#
z0CczoI^2>$Td=&^`}!~qDb~ETK&-N2Ez+F1j%JpHTpF!cmN0L*1^nLt768{#ao1{Y
zc{TE_d54;}74sG`m$G-V@#{6N#;VSSdZE5Yk3#s}^{RYad#`JE@G8p^1dzYgzox^d
z%fAOMLQv5>YiKT~IodV1(X)Tfe=yhGQz&WOq*==6OWJ*{jenW%{w*K8kv9%Rj3%eE
z&Eb5VG-vWk;aVn>(e{^HIQLI!yw~8pu3}%W*4^v(`<q>5h#V^vx@BItTq<1F+RK-<
z?n0?h&_XW%eqPX?{@R-PF{3a9Ic@FV&CHavVo3{K>gE1R)rE&2pXvL&y-kzQzo3ul
A@c;k-

diff --git a/substrate/frame/revive/rpc/examples/js/pvm/FlipperCaller.polkavm b/substrate/frame/revive/rpc/examples/js/pvm/FlipperCaller.polkavm
deleted file mode 100644
index b7b037c1c7b31018fccc0d7bfc0e058d05b68588..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4615
zcmcIne{37|760DZ$@hFt!zIMd^#}A~oRF4^Wp#meKx86wy>kkjO<KGkkc1{ZJ59Ng
zrnQs1P3bwzP75J5_3RX+m8w;K2%&0Q`O&helNdF>w2FF@S2UJMNaK$QC>>jul4kGD
zNfSo@7>GrA_v8D0_ulut_jx}oZMhF2T#3v-0;Au0(P`wh4*YqEv0?=>_Bfzhf$jim
z0(t<b6-WW<2YM1H1GKfhyW61Fj`rU6)~(9UzJ<4LrM+X}ZC9kfbF0$P*=jt<oxQEQ
zdX=7bxwEHpTWfD*M`vqy=eFLS&feWUk1YsW{BC@=tFyhkwYazoL_~J%*xlRyXm_Xi
zg|RXxbWeNt?#|ZUp7zIfZR_mm>Fg+}Acs#_jnfRjR@%|Ivs>va9hqK34*%|9v<Io^
zJ+zd#lL!)9i3iC2<SFv6WQnEH>bFuQn@gOfwWWV4U60S>o2j$Z2h<a`VcVFEp?A<R
z`WN;K_8n!3vWsPFmuy*LD{n5}Q~vYv*UDcn@95j#&v<Z<zQ;o&M7*$XLoQ3j6DtR!
zQ!U_Cg7)CGXaj{1`C_c<ZVdO1m<Mx+%q3uB;b|>OSA426l<FAVO?a?}k{EKV5mShy
zEkq+`5P4?_hb(~-EHPG_#FTC)(-q!Xm3alJj^jvmj-#~WG#ad!>TrtAkm!^|ryx4L
zaoJ0k5xOkt;gB8?^e%5cOXbIKK7oUH7;P{ltMYme_IfBzVkpmS01qNPygrlQvQaJ_
zH7rT11E`>4rO#6a2Ray4qRPn{i-5>Rx(zP25Xk6mXv7jCJ$L{~4E^^j0erVEH^id@
zhA@wfCJ4B1X1P^G<I3Iwj^%s94IWIuu5Hfd@?TyF;vW;>m;q!Sh&cj$7xnH2{Y(<+
zxdEi~Df@=UvRQ68`TiJHg=gUp5Q@%aFqrjBEJ!`CpBVwxEK;JXT(2a+Jkc2wojXNm
zSai0ftEa%Ej>pAnR;*^kYD&Z%sw%VT>P!E<jtI4ji=T|E@o<|OVLY~352j1>FguW_
z(vxf^%IOg%pTT;B1Fwp8StQnt040G2P<rXq;OJDx0X5628Ag}u)eNP}>(xyBP&^Fg
zfiyb@0`2q8uY74Hfbp!})u4|F`glm6@amJ2qAH2}%T#{Cri_A?Y?8~rYRilo8iUlI
zuEfE}^%7In58u9h1zZkp{!Ib^WcqvqRfWg^wFFckOFT-`0EP7ixSW3Ae|DZfMnP1}
zC{PgKc+w1t2eA;BbOoAGnM<VV_>@$gACYMXvY05FKlL&MlJ2m2Z1AOr1~}DN01q`5
z0K*0fUaJ7~=HEag2DGS=kO`d@*7C7M?ULd$M|dcjB=*X85rK^--z^+|))LtG>)k*6
z1QWrH@n2oq_NJv6GgTJ86gIF2pxq_tV~jq|>JyYcxd_}(TLATYqYqYFe`*oyLWEc+
z0SQ1};#wH!S7qs%7>G|A0Pq4#i{Xb{iZN=~tH&rcEa>2W=_*`TT)Z5>t3k6DzybNA
zMD?(sB=v}-jOtw>arFRFC$dN#A3^F^aslQyo`UZ_BXv0xj~UP~Z~?wIq5AdA&VrDl
z*-w*THjo4)0C~x8Vm3K%c39FA44g$zP^#?JA+5mdV%6YgrUQ5#2?m<L_39InJ{eLp
zWxq12Oy*z3`M0Qi%!KY443062j}@T6sonMJ_6D_!jgLXPn@DyY2Vs8$oQ43&xfsQ>
zD|z-tp1px*SMcm|o?XVXOL>;%*=nA3@~nert9bT$o~`8B3Z7+n_Bx&|=h-DZTgJ0?
zo~3!##<L&?^K2>4mhh~VXDyp~mJISN@iU}`8J^<kQV5z7&BP$51!XjACYTww%poI^
zP+VY5mBVCzWGAVH+rXn)pb?-X&;aS7tdLw1<NoB|0bB>5=FHc+DR`|Wgu25dC)O3n
zS+VY{amg8%)8uSgZX=6ese(3v5DNqjN{0u?Op=3iPe)FZM!pZxdYCCLRoM(qql@RW
z_H^WMalgz%%|f(jB8ahtrijheTn6qCD6#GpC`reG#*r!?Mn*A`&%zB1%E66Q<<lr_
zP#88N4QiwSRlHs+)x%N?yYk-p#5YR8G82lMtF6n7qVGYg>)*R%6ra`aUJ7ES6pj;v
zbleFP25S2zY1wu)EhCZ+^)<`rqY%Y@PDvV-avyCZVKy_wL79dHNZ9`H2mt_A<s?*h
zN$naS;_?7NTZsVP1_@q7^qN~P1@NO#ioXt`*UnxW(YJo^uK;$;{=X4DfdJB<z=im*
zi0OBc32IdyHwFNRJKThR`8fEx0CW~82Xq>sT10NcZE(<TXbNVFSbH<PJ#s~;n*t`*
zKr3ThDC2?*+#V+8aBHH`053Qh&`JPWAy?8}h|ElK`9m~x$>LHG;U;c}?CJ0n0dUS|
z7vc6hmc^~w1SSj+227#*8=xHlm_lm}x0xu-0!r8Y(NY{KZjb&mfM1;18xGAkv$<fd
ze*`wtGkPSXXTS}B6G6|0^ii)0nGWUKYt9IeFi>zh_UYTb`Bx~&e7#%9zj>{u>z@H3
zfU6+(&cw&|hC!wP{Xk;A_xa}myk-WR-7ilW#T<%1^x}AU3aTiL_rhZRhfpgn0rEcu
z`Uq$Wai*CFf&*s4Aq+DaA}u2VJXFj^mXMgcK86Ydyij2pp8`Fvf1!6U+Qte^U^KB(
z^IxBdQcyQCqfBO!g=qm|p$QI6tkV2Wt+_grq@X!wCYj7BHh+@Nk5h*4W27b!nyC3n
zt=aNb7ELVC{8p{GRNDlCjTt0!ipjjg=HIr@4Ix7oO<bz^S*>}QwrTlSc{KkGTJs8R
z(~a83m6=HjG-uvnGEp{v#u(R(UeIULHrg~lr8U#qCc9w-tY6jgGS>V{wB|BxQ@JKw
zw;&<O=5y4X5eclsltW-|{wBlfVWT6T8^h+fWVV{Y%kz2deefRvyzlaSUjHv6){id7
zqu_XmvBWf0!RO7FjmSoXTn2i|x8Il`i6Mn~7!@To9Ev4Yg7S`x#Q3ro1NisT2E6CS
zgL$L)pTN$E>2C?&;JhFuPlI|B;tx-M3F1N}=n{?HewkYgac&Oc90_UUeIZdh4GEQv
zaY1VNbUX%yM-597<3IOV0MqcfnHt8}NkFE-sAFa=)N&8nWDcDLmElwet2!Bd7pwO&
zdLO0l)SuLKR)2!h_c7@=Ru<l{=T6|lLnY@=mE?Xv6~^hoZBy_QD%XYzZKb)4J-5B=
zoMta*CFfr%$qB$*QaDjs*pG8-$=neNet_lnln%?oq4#Af--(Ccem`ap+I#eBs<0EE
zdyXnRXFH#;74F67Zl?;j)8`ZPxqFS@P3QaQAl<C409Er5xc`d_0X&Kn*<;Ml%J=nU
z%A~%WQcgA6VdQP3VIXd_!9d)I1w`r$r#o2P$)qdl;U^#kv!29ACqcqPo)Y-H#=;pF
z*0`ACG_2h(sE>QF6__O^_%yJt5gZ&8+<OGa3c<k&jw->y2#zwrK?x3Ea~m>Swp|Ef
zD~dxs1kbu@8`MR#r9OMX*xd3A+@P$4_Fq892Hm#R?y8_rd(5?N(3eam54s~M_t1#j
zmvRTkn<!gFO1Q5@2;TC#Ah;$EqEuzTpK{kuxNC=6Qt&jC6#S_ccY07rwFFacf71Pj
z5$Qp=O8%Q%uG*R=s>aGxHXY%;UT-SZ^2|~9fhM0XnDPfx<3g?I2R%W*&*%2JZWF~x
zF_;o+T&`7O?JBY5DCn^ra8H1i1Mb?Ilv}*|?-Tr@=ug3Mg(kP5!&m8b4Y@@$<le9h
z#JLV6g+X8H;L$_wT5+GB{_cXz7SQZ-RXhcXkFFL|zywEM5M49q8}hkaE*l*4OJd;=
zg0J%VrlW@p{$uOl>?vO*98joq3?)Ydx2v)SPCIu-aK*xD7eCjoS~X;-PNm#|O4nkZ
zTCpazNVYpwFD8Ad@oe~r!7oNq?uiAN>4WC8zw(H5jA;^5K>_?MG?5_ii8T{PM;P=U
D5EZ}k

diff --git a/substrate/frame/revive/rpc/examples/js/pvm/PiggyBank.polkavm b/substrate/frame/revive/rpc/examples/js/pvm/PiggyBank.polkavm
deleted file mode 100644
index 2fc5e139825aa174d85127c3f29543fd7ebe05fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5090
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
WdcE2KUq64=_gITpjqN#=rT!lU*lM2u

diff --git a/substrate/frame/revive/rpc/examples/js/src/balance.ts b/substrate/frame/revive/rpc/examples/js/src/balance.ts
deleted file mode 100644
index 1261dcab781..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/balance.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { walletClient } from './lib.ts'
-
-const recipient = '0x8D97689C9818892B700e27F316cc3E41e17fBeb9'
-try {
-	console.log(`Recipient balance: ${await walletClient.getBalance({ address: recipient })}`)
-} catch (err) {
-	console.error(err)
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/build-contracts.ts b/substrate/frame/revive/rpc/examples/js/src/build-contracts.ts
deleted file mode 100644
index 17f5dffd997..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/build-contracts.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { compile, SolcOutput } from '@parity/revive'
-import { format } from 'prettier'
-import { parseArgs } from 'node:util'
-import solc from 'solc'
-import { readdirSync, readFileSync, writeFileSync } from 'fs'
-import { basename, join } from 'path'
-
-type CompileInput = Parameters<typeof compile>[0]
-
-const {
-	values: { filter, solcOnly },
-} = parseArgs({
-	args: process.argv.slice(2),
-	options: {
-		filter: {
-			type: 'string',
-			short: 'f',
-		},
-		solcOnly: {
-			type: 'boolean',
-			short: 's',
-		},
-	},
-})
-
-function evmCompile(sources: CompileInput) {
-	const input = {
-		language: 'Solidity',
-		sources,
-		settings: {
-			outputSelection: {
-				'*': {
-					'*': ['*'],
-				},
-			},
-		},
-	}
-
-	return solc.compile(JSON.stringify(input))
-}
-
-console.log('Compiling contracts...')
-
-const rootDir = join(__dirname, '..')
-const contractsDir = join(rootDir, 'contracts')
-const abiDir = join(rootDir, 'abi')
-const pvmDir = join(rootDir, 'pvm')
-const evmDir = join(rootDir, 'evm')
-
-const input = readdirSync(contractsDir)
-	.filter((f) => f.endsWith('.sol'))
-	.filter((f) => !filter || f.includes(filter))
-
-for (const file of input) {
-	console.log(`🔨 Compiling ${file}...`)
-	const name = basename(file, '.sol')
-	const input = {
-		[name]: { content: readFileSync(join(contractsDir, file), 'utf8') },
-	}
-
-	if (!solcOnly) {
-		console.log('Compiling with revive...')
-		const reviveOut = await compile(input, { bin: 'resolc' })
-
-		for (const contracts of Object.values(reviveOut.contracts)) {
-			for (const [name, contract] of Object.entries(contracts)) {
-				console.log(`📜 Add PVM contract ${name}`)
-				writeFileSync(
-					join(pvmDir, `${name}.polkavm`),
-					Buffer.from(contract.evm.bytecode.object, 'hex')
-				)
-			}
-		}
-	}
-
-	console.log(`Compile with solc ${file}`)
-	const evmOut = JSON.parse(evmCompile(input)) as SolcOutput
-
-	for (const contracts of Object.values(evmOut.contracts)) {
-		for (const [name, contract] of Object.entries(contracts)) {
-			console.log(`📜 Add EVM contract ${name}`)
-			writeFileSync(
-				join(evmDir, `${name}.bin`),
-				Buffer.from(contract.evm.bytecode.object, 'hex')
-			)
-
-			const abi = contract.abi
-			const abiName = `${name}Abi`
-			writeFileSync(join(abiDir, `${name}.json`), JSON.stringify(abi, null, 2))
-
-			writeFileSync(
-				join(abiDir, `${name}.ts`),
-				await format(`export const ${abiName} = ${JSON.stringify(abi, null, 2)} as const`, {
-					parser: 'typescript',
-				})
-			)
-		}
-	}
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/event.ts b/substrate/frame/revive/rpc/examples/js/src/event.ts
deleted file mode 100644
index 2e672a9772f..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/event.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-//! Run with bun run script-event.ts
-
-import { abi } from '../abi/event.ts'
-import { assert, getByteCode, walletClient } from './lib.ts'
-
-const deployHash = await walletClient.deployContract({
-	abi,
-	bytecode: getByteCode('event'),
-})
-const deployReceipt = await walletClient.waitForTransactionReceipt({ hash: deployHash })
-const contractAddress = deployReceipt.contractAddress
-console.log('Contract deployed:', contractAddress)
-assert(contractAddress, 'Contract address should be set')
-
-const { request } = await walletClient.simulateContract({
-	account: walletClient.account,
-	address: contractAddress,
-	abi,
-	functionName: 'triggerEvent',
-})
-
-const hash = await walletClient.writeContract(request)
-const receipt = await walletClient.waitForTransactionReceipt({ hash })
-console.log(`Receipt: ${receipt.status}`)
-console.log(`Logs receipt: ${receipt.status}`)
-
-for (const log of receipt.logs) {
-	console.log('Event log:', log)
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/fixtures/debug_traceCall.json b/substrate/frame/revive/rpc/examples/js/src/fixtures/debug_traceCall.json
deleted file mode 100644
index b017c97693d..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/fixtures/debug_traceCall.json
+++ /dev/null
@@ -1,143 +0,0 @@
-{
-	"from": "0x0000000000000000000000000000000000000000",
-	"gas": "0x42",
-	"gasUsed": "0x42",
-	"to": "<contract_addr>",
-	"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000002",
-	"calls": [
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_callee_addr>",
-			"input": "0x",
-			"value": "0x2386f26fc10000",
-			"type": "CALL"
-		},
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_callee_addr>",
-			"input": "0xa329e8de0000000000000000000000000000000000000000000000000000000000000002",
-			"logs": [
-				{
-					"address": "<contract_callee_addr>",
-					"topics": [
-						"0xa07465e8ec189714f79f3786a8f616baf78ebd9cb1769bd61f18de45f2567360"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000002",
-					"position": "0x0"
-				}
-			],
-			"value": "0x0",
-			"type": "CALL"
-		},
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_callee_addr>",
-			"input": "0xd1b96663",
-			"output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a546869732066756e6374696f6e20616c77617973206661696c73000000000000",
-			"error": "execution reverted",
-			"revertReason": "This function always fails",
-			"value": "0x2386f26fc10000",
-			"type": "CALL"
-		},
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_addr>",
-			"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000001",
-			"calls": [
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0x",
-					"value": "0x2386f26fc10000",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0xa329e8de0000000000000000000000000000000000000000000000000000000000000001",
-					"logs": [
-						{
-							"address": "<contract_callee_addr>",
-							"topics": [
-								"0xa07465e8ec189714f79f3786a8f616baf78ebd9cb1769bd61f18de45f2567360"
-							],
-							"data": "0x0000000000000000000000000000000000000000000000000000000000000001",
-							"position": "0x0"
-						}
-					],
-					"value": "0x0",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0xd1b96663",
-					"output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a546869732066756e6374696f6e20616c77617973206661696c73000000000000",
-					"error": "execution reverted",
-					"revertReason": "This function always fails",
-					"value": "0x2386f26fc10000",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_addr>",
-					"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000000",
-					"value": "0x0",
-					"type": "CALL"
-				}
-			],
-			"logs": [
-				{
-					"address": "<contract_addr>",
-					"topics": [
-						"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066265666f72650000000000000000000000000000000000000000000000000000",
-					"position": "0x1"
-				},
-				{
-					"address": "<contract_addr>",
-					"topics": [
-						"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000056166746572000000000000000000000000000000000000000000000000000000",
-					"position": "0x2"
-				}
-			],
-			"value": "0x0",
-			"type": "CALL"
-		}
-	],
-	"logs": [
-		{
-			"address": "<contract_addr>",
-			"topics": ["0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"],
-			"data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066265666f72650000000000000000000000000000000000000000000000000000",
-			"position": "0x1"
-		},
-		{
-			"address": "<contract_addr>",
-			"topics": ["0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"],
-			"data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000056166746572000000000000000000000000000000000000000000000000000000",
-			"position": "0x2"
-		}
-	],
-	"value": "0x0",
-	"type": "CALL"
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/fixtures/trace_block.json b/substrate/frame/revive/rpc/examples/js/src/fixtures/trace_block.json
deleted file mode 100644
index 952c1c5ce08..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/fixtures/trace_block.json
+++ /dev/null
@@ -1,152 +0,0 @@
-[
-	{
-		"txHash": "<hash>",
-		"result": {
-			"from": "<caller>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_addr>",
-			"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000002",
-			"calls": [
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0x",
-					"value": "0x2386f26fc10000",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0xa329e8de0000000000000000000000000000000000000000000000000000000000000002",
-					"logs": [
-						{
-							"address": "<contract_callee_addr>",
-							"topics": [
-								"0xa07465e8ec189714f79f3786a8f616baf78ebd9cb1769bd61f18de45f2567360"
-							],
-							"data": "0x0000000000000000000000000000000000000000000000000000000000000002",
-							"position": "0x0"
-						}
-					],
-					"value": "0x0",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0xd1b96663",
-					"output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a546869732066756e6374696f6e20616c77617973206661696c73000000000000",
-					"error": "execution reverted",
-					"revertReason": "This function always fails",
-					"value": "0x2386f26fc10000",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_addr>",
-					"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000001",
-					"calls": [
-						{
-							"from": "<contract_addr>",
-							"gas": "0x42",
-							"gasUsed": "0x42",
-							"to": "<contract_callee_addr>",
-							"input": "0x",
-							"value": "0x2386f26fc10000",
-							"type": "CALL"
-						},
-						{
-							"from": "<contract_addr>",
-							"gas": "0x42",
-							"gasUsed": "0x42",
-							"to": "<contract_callee_addr>",
-							"input": "0xa329e8de0000000000000000000000000000000000000000000000000000000000000001",
-							"logs": [
-								{
-									"address": "<contract_callee_addr>",
-									"topics": [
-										"0xa07465e8ec189714f79f3786a8f616baf78ebd9cb1769bd61f18de45f2567360"
-									],
-									"data": "0x0000000000000000000000000000000000000000000000000000000000000001",
-									"position": "0x0"
-								}
-							],
-							"value": "0x0",
-							"type": "CALL"
-						},
-						{
-							"from": "<contract_addr>",
-							"gas": "0x42",
-							"gasUsed": "0x42",
-							"to": "<contract_callee_addr>",
-							"input": "0xd1b96663",
-							"output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a546869732066756e6374696f6e20616c77617973206661696c73000000000000",
-							"error": "execution reverted",
-							"revertReason": "This function always fails",
-							"value": "0x2386f26fc10000",
-							"type": "CALL"
-						},
-						{
-							"from": "<contract_addr>",
-							"gas": "0x42",
-							"gasUsed": "0x42",
-							"to": "<contract_addr>",
-							"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000000",
-							"value": "0x0",
-							"type": "CALL"
-						}
-					],
-					"logs": [
-						{
-							"address": "<contract_addr>",
-							"topics": [
-								"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-							],
-							"data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066265666f72650000000000000000000000000000000000000000000000000000",
-							"position": "0x1"
-						},
-						{
-							"address": "<contract_addr>",
-							"topics": [
-								"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-							],
-							"data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000056166746572000000000000000000000000000000000000000000000000000000",
-							"position": "0x2"
-						}
-					],
-					"value": "0x0",
-					"type": "CALL"
-				}
-			],
-			"logs": [
-				{
-					"address": "<contract_addr>",
-					"topics": [
-						"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066265666f72650000000000000000000000000000000000000000000000000000",
-					"position": "0x1"
-				},
-				{
-					"address": "<contract_addr>",
-					"topics": [
-						"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000056166746572000000000000000000000000000000000000000000000000000000",
-					"position": "0x2"
-				}
-			],
-			"value": "0x0",
-			"type": "CALL"
-		}
-	}
-]
diff --git a/substrate/frame/revive/rpc/examples/js/src/fixtures/trace_transaction.json b/substrate/frame/revive/rpc/examples/js/src/fixtures/trace_transaction.json
deleted file mode 100644
index 9ef9c7c4dfc..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/fixtures/trace_transaction.json
+++ /dev/null
@@ -1,143 +0,0 @@
-{
-	"from": "<caller>",
-	"gas": "0x42",
-	"gasUsed": "0x42",
-	"to": "<contract_addr>",
-	"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000002",
-	"calls": [
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_callee_addr>",
-			"input": "0x",
-			"value": "0x2386f26fc10000",
-			"type": "CALL"
-		},
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_callee_addr>",
-			"input": "0xa329e8de0000000000000000000000000000000000000000000000000000000000000002",
-			"logs": [
-				{
-					"address": "<contract_callee_addr>",
-					"topics": [
-						"0xa07465e8ec189714f79f3786a8f616baf78ebd9cb1769bd61f18de45f2567360"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000002",
-					"position": "0x0"
-				}
-			],
-			"value": "0x0",
-			"type": "CALL"
-		},
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_callee_addr>",
-			"input": "0xd1b96663",
-			"output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a546869732066756e6374696f6e20616c77617973206661696c73000000000000",
-			"error": "execution reverted",
-			"revertReason": "This function always fails",
-			"value": "0x2386f26fc10000",
-			"type": "CALL"
-		},
-		{
-			"from": "<contract_addr>",
-			"gas": "0x42",
-			"gasUsed": "0x42",
-			"to": "<contract_addr>",
-			"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000001",
-			"calls": [
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0x",
-					"value": "0x2386f26fc10000",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0xa329e8de0000000000000000000000000000000000000000000000000000000000000001",
-					"logs": [
-						{
-							"address": "<contract_callee_addr>",
-							"topics": [
-								"0xa07465e8ec189714f79f3786a8f616baf78ebd9cb1769bd61f18de45f2567360"
-							],
-							"data": "0x0000000000000000000000000000000000000000000000000000000000000001",
-							"position": "0x0"
-						}
-					],
-					"value": "0x0",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_callee_addr>",
-					"input": "0xd1b96663",
-					"output": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a546869732066756e6374696f6e20616c77617973206661696c73000000000000",
-					"error": "execution reverted",
-					"revertReason": "This function always fails",
-					"value": "0x2386f26fc10000",
-					"type": "CALL"
-				},
-				{
-					"from": "<contract_addr>",
-					"gas": "0x42",
-					"gasUsed": "0x42",
-					"to": "<contract_addr>",
-					"input": "0x95805dad0000000000000000000000000000000000000000000000000000000000000000",
-					"value": "0x0",
-					"type": "CALL"
-				}
-			],
-			"logs": [
-				{
-					"address": "<contract_addr>",
-					"topics": [
-						"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066265666f72650000000000000000000000000000000000000000000000000000",
-					"position": "0x1"
-				},
-				{
-					"address": "<contract_addr>",
-					"topics": [
-						"0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"
-					],
-					"data": "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000056166746572000000000000000000000000000000000000000000000000000000",
-					"position": "0x2"
-				}
-			],
-			"value": "0x0",
-			"type": "CALL"
-		}
-	],
-	"logs": [
-		{
-			"address": "<contract_addr>",
-			"topics": ["0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"],
-			"data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000066265666f72650000000000000000000000000000000000000000000000000000",
-			"position": "0x1"
-		},
-		{
-			"address": "<contract_addr>",
-			"topics": ["0x25d760f35a7a9cb2bffd2ea8756913655b3786c642f300a702e2934062763549"],
-			"data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000056166746572000000000000000000000000000000000000000000000000000000",
-			"position": "0x2"
-		}
-	],
-	"value": "0x0",
-	"type": "CALL"
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/geth-diff.test.ts b/substrate/frame/revive/rpc/examples/js/src/geth-diff.test.ts
deleted file mode 100644
index 33e38fccd8a..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/geth-diff.test.ts
+++ /dev/null
@@ -1,531 +0,0 @@
-import {
-	jsonRpcErrors,
-	createEnv,
-	getByteCode,
-	killProcessOnPort,
-	waitForHealth,
-	polkadotSdkPath,
-	visit,
-} from './util.ts'
-import { afterAll, afterEach, describe, expect, test } from 'bun:test'
-import { encodeFunctionData, Hex, parseEther, decodeEventLog } from 'viem'
-import { ErrorsAbi } from '../abi/Errors'
-import { EventExampleAbi } from '../abi/EventExample'
-import { TracingCallerAbi } from '../abi/TracingCaller'
-import { TracingCalleeAbi } from '../abi/TracingCallee'
-import { Subprocess, spawn } from 'bun'
-import { fail } from 'node:assert'
-
-const procs: Subprocess[] = []
-if (process.env.START_GETH) {
-	process.env.USE_GETH = 'true'
-	procs.push(
-		// Run geth on port 8546
-		await (async () => {
-			killProcessOnPort(8546)
-			console.log('Starting geth')
-			const proc = spawn(
-				'geth --http --http.api web3,eth,debug,personal,net --http.port 8546 --dev --verbosity 0'.split(
-					' '
-				),
-				{ stdout: Bun.file('/tmp/geth.out.log'), stderr: Bun.file('/tmp/geth.err.log') }
-			)
-
-			await waitForHealth('http://localhost:8546').catch()
-			return proc
-		})()
-	)
-}
-
-if (process.env.START_SUBSTRATE_NODE) {
-	procs.push(
-		//Run the substate node
-		(() => {
-			killProcessOnPort(9944)
-			console.log('Starting substrate node')
-			return spawn(
-				[
-					'./target/debug/substrate-node',
-					'--dev',
-					'-l=error,evm=debug,sc_rpc_server=info,runtime::revive=debug',
-				],
-				{
-					stdout: Bun.file('/tmp/substrate-node.out.log'),
-					stderr: Bun.file('/tmp/substrate-node.err.log'),
-					cwd: polkadotSdkPath,
-				}
-			)
-		})()
-	)
-}
-
-if (process.env.START_ETH_RPC) {
-	process.env.USE_ETH_RPC = 'true'
-	// Run eth-rpc on 8545
-	procs.push(
-		await (async () => {
-			killProcessOnPort(8545)
-			console.log('Starting eth-rpc')
-			const proc = spawn(
-				[
-					'./target/debug/eth-rpc',
-					'--dev',
-					'--node-rpc-url=ws://localhost:9944',
-					'-l=rpc-metrics=debug,eth-rpc=debug',
-				],
-				{
-					stdout: Bun.file('/tmp/eth-rpc.out.log'),
-					stderr: Bun.file('/tmp/eth-rpc.err.log'),
-					cwd: polkadotSdkPath,
-				}
-			)
-			await waitForHealth('http://localhost:8545').catch()
-			return proc
-		})()
-	)
-}
-
-afterEach(() => {
-	jsonRpcErrors.length = 0
-})
-
-afterAll(async () => {
-	procs.forEach((proc) => proc.kill())
-})
-
-const envs = await Promise.all([
-	...(process.env.USE_GETH ? [createEnv('geth')] : []),
-	...(process.env.USE_ETH_RPC ? [createEnv('eth-rpc')] : []),
-])
-
-for (const env of envs) {
-	describe(env.serverWallet.chain.name, () => {
-		const getErrorTesterAddr = (() => {
-			let contractAddress: Hex = '0x'
-			return async () => {
-				if (contractAddress !== '0x') {
-					return contractAddress
-				}
-				const hash = await env.serverWallet.deployContract({
-					abi: ErrorsAbi,
-					bytecode: getByteCode('Errors', env.evm),
-				})
-				const deployReceipt = await env.serverWallet.waitForTransactionReceipt({ hash })
-				contractAddress = deployReceipt.contractAddress!
-				return contractAddress
-			}
-		})()
-
-		const getEventExampleAddr = (() => {
-			let contractAddress: Hex = '0x'
-			return async () => {
-				if (contractAddress !== '0x') {
-					return contractAddress
-				}
-				const hash = await env.serverWallet.deployContract({
-					abi: EventExampleAbi,
-					bytecode: getByteCode('EventExample', env.evm),
-				})
-				const deployReceipt = await env.serverWallet.waitForTransactionReceipt({ hash })
-				contractAddress = deployReceipt.contractAddress!
-				return contractAddress
-			}
-		})()
-
-		const getTracingExampleAddrs = (() => {
-			let callerAddr: Hex = '0x'
-			let calleeAddr: Hex = '0x'
-			return async () => {
-				if (callerAddr !== '0x') {
-					return [callerAddr, calleeAddr]
-				}
-				calleeAddr = await (async () => {
-					const hash = await env.serverWallet.deployContract({
-						abi: TracingCalleeAbi,
-						bytecode: getByteCode('TracingCallee', env.evm),
-					})
-					const receipt = await env.serverWallet.waitForTransactionReceipt({
-						hash,
-					})
-					return receipt.contractAddress!
-				})()
-
-				callerAddr = await (async () => {
-					const hash = await env.serverWallet.deployContract({
-						abi: TracingCallerAbi,
-						args: [calleeAddr],
-						bytecode: getByteCode('TracingCaller', env.evm),
-						value: parseEther('10'),
-					})
-					const receipt = await env.serverWallet.waitForTransactionReceipt({
-						hash,
-					})
-					return receipt.contractAddress!
-				})()
-
-				return [callerAddr, calleeAddr]
-			}
-		})()
-
-		test('triggerAssertError', async () => {
-			try {
-				await env.accountWallet.readContract({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'triggerAssertError',
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(3)
-				expect(lastJsonRpcError?.data).toBe(
-					'0x4e487b710000000000000000000000000000000000000000000000000000000000000001'
-				)
-				expect(lastJsonRpcError?.message).toBeOneOf([
-					'execution reverted: assert(false)',
-					'execution reverted: panic: assertion failed (0x01)',
-				])
-			}
-		})
-
-		test('triggerRevertError', async () => {
-			try {
-				await env.accountWallet.readContract({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'triggerRevertError',
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(3)
-				expect(lastJsonRpcError?.message).toBeOneOf([
-					'execution reverted: This is a revert error',
-					'execution reverted: revert: This is a revert error',
-				])
-				expect(lastJsonRpcError?.data).toBe(
-					'0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001654686973206973206120726576657274206572726f7200000000000000000000'
-				)
-			}
-		})
-
-		test('triggerDivisionByZero', async () => {
-			try {
-				await env.accountWallet.readContract({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'triggerDivisionByZero',
-				})
-				expect.assertions(3)
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(3)
-				expect(lastJsonRpcError?.data).toBe(
-					'0x4e487b710000000000000000000000000000000000000000000000000000000000000012'
-				)
-				expect(lastJsonRpcError?.message).toBeOneOf([
-					'execution reverted: division or modulo by zero',
-					'execution reverted: panic: division or modulo by zero (0x12)',
-				])
-			}
-		})
-
-		test('triggerOutOfBoundsError', async () => {
-			try {
-				await env.accountWallet.readContract({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'triggerOutOfBoundsError',
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(3)
-				expect(lastJsonRpcError?.data).toBe(
-					'0x4e487b710000000000000000000000000000000000000000000000000000000000000032'
-				)
-				expect(lastJsonRpcError?.message).toBeOneOf([
-					'execution reverted: out-of-bounds access of an array or bytesN',
-					'execution reverted: panic: array out-of-bounds access (0x32)',
-				])
-			}
-		})
-
-		test('triggerCustomError', async () => {
-			try {
-				await env.accountWallet.readContract({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'triggerCustomError',
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(3)
-				expect(lastJsonRpcError?.data).toBe(
-					'0x8d6ea8be0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001654686973206973206120637573746f6d206572726f7200000000000000000000'
-				)
-				expect(lastJsonRpcError?.message).toBe('execution reverted')
-			}
-		})
-
-		test('eth_call (not enough funds)', async () => {
-			try {
-				await env.emptyWallet.simulateContract({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'valueMatch',
-					value: parseEther('10'),
-					args: [parseEther('10')],
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(-32000)
-				expect(lastJsonRpcError?.message).toInclude('insufficient funds')
-				expect(lastJsonRpcError?.data).toBeUndefined()
-			}
-		})
-
-		test('eth_call transfer (not enough funds)', async () => {
-			const value = parseEther('10')
-			const balance = await env.emptyWallet.getBalance(env.emptyWallet.account)
-			expect(balance, 'Balance should be less than 10').toBeLessThan(value)
-			try {
-				await env.emptyWallet.sendTransaction({
-					to: '0x75E480dB528101a381Ce68544611C169Ad7EB342',
-					value,
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(-32000)
-				expect(lastJsonRpcError?.message).toInclude('insufficient funds')
-				expect(lastJsonRpcError?.data).toBeUndefined()
-			}
-		})
-
-		test('eth_estimate (not enough funds)', async () => {
-			try {
-				await env.emptyWallet.estimateContractGas({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'valueMatch',
-					value: parseEther('10'),
-					args: [parseEther('10')],
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(-32000)
-				expect(lastJsonRpcError?.message).toInclude('insufficient funds')
-				expect(lastJsonRpcError?.data).toBeUndefined()
-			}
-		})
-
-		test('eth_estimate call caller (not enough funds)', async () => {
-			try {
-				await env.emptyWallet.estimateContractGas({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'valueMatch',
-					value: parseEther('10'),
-					args: [parseEther('10')],
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(-32000)
-				expect(lastJsonRpcError?.message).toInclude('insufficient funds')
-				expect(lastJsonRpcError?.data).toBeUndefined()
-			}
-		})
-
-		test('eth_estimate (revert)', async () => {
-			try {
-				await env.serverWallet.estimateContractGas({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'valueMatch',
-					value: parseEther('11'),
-					args: [parseEther('10')],
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(3)
-				expect(lastJsonRpcError?.message).toBeOneOf([
-					'execution reverted: msg.value does not match value',
-					'execution reverted: revert: msg.value does not match value',
-				])
-				expect(lastJsonRpcError?.data).toBe(
-					'0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001e6d73672e76616c756520646f6573206e6f74206d617463682076616c75650000'
-				)
-			}
-		})
-
-		test('eth_get_balance (no account)', async () => {
-			const balance = await env.serverWallet.getBalance({
-				address: '0x0000000000000000000000000000000000000123',
-			})
-			expect(balance).toBe(0n)
-		})
-
-		test('eth_estimate (not enough funds to cover gas specified)', async () => {
-			let balance = await env.serverWallet.getBalance(env.emptyWallet.account)
-			expect(balance).toBe(0n)
-			try {
-				await env.emptyWallet.estimateContractGas({
-					address: await getErrorTesterAddr(),
-					abi: ErrorsAbi,
-					functionName: 'setState',
-					args: [true],
-				})
-				fail('Expect call to fail')
-			} catch (err) {
-				const lastJsonRpcError = jsonRpcErrors.pop()
-				expect(lastJsonRpcError?.code).toBe(-32000)
-				expect(lastJsonRpcError?.message).toInclude('insufficient funds')
-				expect(lastJsonRpcError?.data).toBeUndefined()
-			}
-		})
-
-		test('eth_estimate (no gas specified)', async () => {
-			let balance = await env.serverWallet.getBalance(env.emptyWallet.account)
-			expect(balance).toBe(0n)
-
-			const data = encodeFunctionData({
-				abi: ErrorsAbi,
-				functionName: 'setState',
-				args: [true],
-			})
-
-			await env.emptyWallet.request({
-				method: 'eth_estimateGas',
-				params: [
-					{
-						data,
-						from: env.emptyWallet.account.address,
-						to: await getErrorTesterAddr(),
-					},
-				],
-			})
-		})
-
-		test('logs', async () => {
-			let address = await getEventExampleAddr()
-			let { request } = await env.serverWallet.simulateContract({
-				address,
-				abi: EventExampleAbi,
-				functionName: 'triggerEvent',
-			})
-
-			let hash = await env.serverWallet.writeContract(request)
-			let receipt = await env.serverWallet.waitForTransactionReceipt({ hash })
-			const logs = await env.serverWallet.getLogs({
-				address,
-				blockHash: receipt.blockHash,
-			})
-			expect(logs).toHaveLength(1)
-			expect(logs[0]).toMatchObject({
-				address,
-				data: '0x00000000000000000000000000000000000000000000000000000000000030390000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000b48656c6c6f20776f726c64000000000000000000000000000000000000000000',
-				transactionHash: hash,
-			})
-
-			expect(
-				decodeEventLog({
-					abi: EventExampleAbi,
-					data: logs[0].data,
-					topics: logs[0].topics,
-				})
-			).toEqual({
-				eventName: 'ExampleEvent',
-				args: {
-					sender: env.serverWallet.account.address,
-					value: 12345n,
-					message: 'Hello world',
-				},
-			})
-		})
-
-		test('tracing', async () => {
-			let [callerAddr, calleeAddr] = await getTracingExampleAddrs()
-
-			const receipt = await (async () => {
-				const { request } = await env.serverWallet.simulateContract({
-					address: callerAddr,
-					abi: TracingCallerAbi,
-					functionName: 'start',
-					args: [2n],
-				})
-				const hash = await env.serverWallet.writeContract(request)
-				return await env.serverWallet.waitForTransactionReceipt({ hash })
-			})()
-
-			const visitor: Parameters<typeof visit>[1] = (key, value) => {
-				switch (key) {
-					case 'address':
-					case 'from':
-					case 'to': {
-						if (value === callerAddr) {
-							return '<contract_addr>'
-						} else if (value === calleeAddr) {
-							return '<contract_callee_addr>'
-						} else if (value == env.serverWallet.account.address.toLowerCase()) {
-							return '<caller>'
-						}
-
-						return value
-					}
-					case 'revertReason':
-						return value.startsWith('revert: ') ? value.slice('revert: '.length) : value
-
-					case 'gas':
-					case 'gasUsed': {
-						return '0x42'
-					}
-					case 'txHash': {
-						return '<hash>'
-					}
-					default: {
-						return value
-					}
-				}
-			}
-
-			// test debug_traceTransaction
-			{
-				const fixture = await Bun.file('./src/fixtures/trace_transaction.json').json()
-				const res = await env.debugClient.traceTransaction(receipt.transactionHash, {
-					withLog: true,
-				})
-				expect(visit(res, visitor)).toEqual(fixture)
-			}
-
-			// test debug_traceBlock
-			{
-				const res = await env.debugClient.traceBlock(receipt.blockNumber, { withLog: true })
-				const fixture = await Bun.file('./src/fixtures/trace_block.json').json()
-				expect(visit(res, visitor)).toEqual(fixture)
-			}
-
-			// test debug_traceCall
-			{
-				const fixture = await Bun.file('./src/fixtures/debug_traceCall.json').json()
-				const res = await env.debugClient.traceCall(
-					{
-						to: callerAddr,
-						data: encodeFunctionData({
-							abi: TracingCallerAbi,
-							functionName: 'start',
-							args: [2n],
-						}),
-					},
-					{ withLog: true }
-				)
-				expect(visit(res, visitor)).toEqual(fixture)
-			}
-		})
-	})
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/lib.ts b/substrate/frame/revive/rpc/examples/js/src/lib.ts
deleted file mode 100644
index 1470f492e34..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/lib.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import { readFileSync } from 'node:fs'
-import { spawn } from 'node:child_process'
-import { parseArgs } from 'node:util'
-import { createWalletClient, defineChain, Hex, http, parseEther, publicActions } from 'viem'
-import { privateKeyToAccount } from 'viem/accounts'
-
-const {
-	values: { geth, proxy, westend, endowment, ['private-key']: privateKey },
-} = parseArgs({
-	args: process.argv.slice(2),
-	options: {
-		['private-key']: {
-			type: 'string',
-			short: 'k',
-		},
-		endowment: {
-			type: 'string',
-			short: 'e',
-		},
-		proxy: {
-			type: 'boolean',
-		},
-		geth: {
-			type: 'boolean',
-		},
-		westend: {
-			type: 'boolean',
-		},
-	},
-})
-
-if (geth) {
-	console.log('Testing with Geth')
-	const child = spawn(
-		'geth',
-		[
-			'--http',
-			'--http.api',
-			'web3,eth,debug,personal,net',
-			'--http.port',
-			process.env.GETH_PORT ?? '8546',
-			'--dev',
-			'--verbosity',
-			'0',
-		],
-		{ stdio: 'inherit' }
-	)
-
-	process.on('exit', () => child.kill())
-	child.unref()
-	await new Promise((resolve) => setTimeout(resolve, 500))
-}
-const rpcUrl = proxy
-	? 'http://localhost:8080'
-	: westend
-		? 'https://westend-asset-hub-eth-rpc.polkadot.io'
-		: geth
-			? 'http://localhost:8546'
-			: 'http://localhost:8545'
-
-export const chain = defineChain({
-	id: geth ? 1337 : 420420420,
-	name: 'Asset Hub Westend',
-	network: 'asset-hub',
-	nativeCurrency: {
-		name: 'Westie',
-		symbol: 'WST',
-		decimals: 18,
-	},
-	rpcUrls: {
-		default: {
-			http: [rpcUrl],
-		},
-	},
-	testnet: true,
-})
-
-const wallet = createWalletClient({
-	transport: http(),
-	chain,
-})
-const [account] = await wallet.getAddresses()
-export const serverWalletClient = createWalletClient({
-	account,
-	transport: http(),
-	chain,
-})
-
-export const walletClient = await (async () => {
-	if (privateKey) {
-		const account = privateKeyToAccount(`0x${privateKey}`)
-		console.log(`Wallet address ${account.address}`)
-
-		const wallet = createWalletClient({
-			account,
-			transport: http(),
-			chain,
-		})
-
-		if (endowment) {
-			await serverWalletClient.sendTransaction({
-				to: account.address,
-				value: parseEther(endowment),
-			})
-			console.log(`Endowed address ${account.address} with: ${endowment}`)
-		}
-
-		return wallet.extend(publicActions)
-	} else {
-		return serverWalletClient.extend(publicActions)
-	}
-})()
-
-/**
- * Get one of the pre-built contracts
- * @param name - the contract name
- */
-export function getByteCode(name: string): Hex {
-	const bytecode = geth ? readFileSync(`evm/${name}.bin`) : readFileSync(`pvm/${name}.polkavm`)
-	return `0x${Buffer.from(bytecode).toString('hex')}`
-}
-
-export function assert(condition: any, message: string): asserts condition {
-	if (!condition) {
-		throw new Error(message)
-	}
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/piggy-bank.ts b/substrate/frame/revive/rpc/examples/js/src/piggy-bank.ts
deleted file mode 100644
index 4983a6f3b30..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/piggy-bank.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { assert, getByteCode, walletClient } from './lib.ts'
-import { PiggyBankAbi } from '../abi/piggyBank.ts'
-import { parseEther } from 'viem'
-
-const hash = await walletClient.deployContract({
-	abi: PiggyBankAbi,
-	bytecode: getByteCode('PiggyBank'),
-})
-const deployReceipt = await walletClient.waitForTransactionReceipt({ hash })
-const contractAddress = deployReceipt.contractAddress
-console.log('Contract deployed:', contractAddress)
-assert(contractAddress, 'Contract address should be set')
-
-// Deposit 10 WST
-{
-	const result = await walletClient.estimateContractGas({
-		account: walletClient.account,
-		address: contractAddress,
-		abi: PiggyBankAbi,
-		functionName: 'deposit',
-		value: parseEther('10'),
-	})
-
-	console.log(`Gas estimate: ${result}`)
-
-	const { request } = await walletClient.simulateContract({
-		account: walletClient.account,
-		address: contractAddress,
-		abi: PiggyBankAbi,
-		functionName: 'deposit',
-		value: parseEther('10'),
-	})
-
-	const hash = await walletClient.writeContract(request)
-	const receipt = await walletClient.waitForTransactionReceipt({ hash })
-	console.log(`Deposit receipt: ${receipt.status}`)
-}
-
-// Withdraw 5 WST
-{
-	const { request } = await walletClient.simulateContract({
-		account: walletClient.account,
-		address: contractAddress,
-		abi: PiggyBankAbi,
-		functionName: 'withdraw',
-		args: [parseEther('5')],
-	})
-
-	const hash = await walletClient.writeContract(request)
-	const receipt = await walletClient.waitForTransactionReceipt({ hash })
-	console.log(`Withdraw receipt: ${receipt.status}`)
-
-	// Check remaining balance
-	const balance = await walletClient.readContract({
-		address: contractAddress,
-		abi: PiggyBankAbi,
-		functionName: 'getDeposit',
-	})
-
-	console.log(`Get deposit: ${balance}`)
-	console.log(
-		`Get contract balance: ${await walletClient.getBalance({ address: contractAddress })}`
-	)
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/solc.d.ts b/substrate/frame/revive/rpc/examples/js/src/solc.d.ts
deleted file mode 100644
index 813829f40b6..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/solc.d.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-declare module 'solc' {
-	// Basic types for input/output handling
-	export interface CompileInput {
-		language: string
-		sources: {
-			[fileName: string]: {
-				content: string
-			}
-		}
-		settings?: {
-			optimizer?: {
-				enabled: boolean
-				runs: number
-			}
-			outputSelection: {
-				[fileName: string]: {
-					[contractName: string]: string[]
-				}
-			}
-		}
-	}
-
-	export interface CompileOutput {
-		errors?: Array<{
-			component: string
-			errorCode: string
-			formattedMessage: string
-			message: string
-			severity: string
-			sourceLocation?: {
-				file: string
-				start: number
-				end: number
-			}
-			type: string
-		}>
-		sources?: {
-			[fileName: string]: {
-				id: number
-				ast: object
-			}
-		}
-		contracts?: {
-			[fileName: string]: {
-				[contractName: string]: {
-					abi: object[]
-					evm: {
-						bytecode: {
-							object: string
-							sourceMap: string
-							linkReferences: {
-								[fileName: string]: {
-									[libraryName: string]: Array<{
-										start: number
-										length: number
-									}>
-								}
-							}
-						}
-						deployedBytecode: {
-							object: string
-							sourceMap: string
-							linkReferences: {
-								[fileName: string]: {
-									[libraryName: string]: Array<{
-										start: number
-										length: number
-									}>
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-
-	// Main exported functions
-	export function compile(
-		input: string | CompileInput,
-		options?: { import: (path: string) => { contents: string } }
-	): string
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/spammer.ts b/substrate/frame/revive/rpc/examples/js/src/spammer.ts
deleted file mode 100644
index 682bfcabb26..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/spammer.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { spawn } from 'bun'
-import {
-	createEnv,
-	getByteCode,
-	killProcessOnPort,
-	polkadotSdkPath,
-	wait,
-	waitForHealth,
-} from './util'
-import { FlipperAbi } from '../abi/Flipper'
-
-if (process.env.START_SUBSTRATE_NODE) {
-	//Run the substate node
-	console.log('🚀 Start substrate-node...')
-	killProcessOnPort(9944)
-	spawn(
-		[
-			'./target/debug/substrate-node',
-			'--dev',
-			'-l=error,evm=debug,sc_rpc_server=info,runtime::revive=debug',
-		],
-		{
-			stdout: Bun.file('/tmp/substrate-node.out.log'),
-			stderr: Bun.file('/tmp/substrate-node.err.log'),
-			cwd: polkadotSdkPath,
-		}
-	)
-}
-
-// Run eth-rpc on 8545
-if (process.env.START_ETH_RPC) {
-	console.log('🚀 Start eth-rpc...')
-	killProcessOnPort(8545)
-	spawn(
-		[
-			'./target/debug/eth-rpc',
-			'--dev',
-			'--node-rpc-url=ws://localhost:9944',
-			'-l=rpc-metrics=debug,eth-rpc=debug',
-		],
-		{
-			stdout: Bun.file('/tmp/eth-rpc.out.log'),
-			stderr: Bun.file('/tmp/eth-rpc.err.log'),
-			cwd: polkadotSdkPath,
-		}
-	)
-}
-
-await waitForHealth('http://localhost:8545').catch()
-const env = await createEnv('eth-rpc')
-const wallet = env.accountWallet
-
-console.log('🚀 Deploy flipper...')
-const hash = await wallet.deployContract({
-	abi: FlipperAbi,
-	bytecode: getByteCode('Flipper'),
-})
-
-const deployReceipt = await wallet.waitForTransactionReceipt({ hash })
-if (!deployReceipt.contractAddress) throw new Error('Contract address should be set')
-const flipperAddr = deployReceipt.contractAddress
-
-let nonce = await wallet.getTransactionCount(wallet.account)
-
-console.log('🔄 Starting loop...')
-console.log('Starting nonce:', nonce)
-try {
-	while (true) {
-		console.log(`Call flip (nonce: ${nonce})...`)
-		const { request } = await wallet.simulateContract({
-			account: wallet.account,
-			address: flipperAddr,
-			abi: FlipperAbi,
-			functionName: 'flip',
-			nonce,
-		})
-
-		const hash = await wallet.writeContract(request)
-		console.time(hash)
-		wallet.waitForTransactionReceipt({ hash }).then((receipt) => {
-			console.timeEnd(hash)
-			console.log('-----------------------------------')
-			console.log(`status: ${receipt.status ? '✅' : '❌'}`)
-			console.log(`block: ${receipt.blockNumber} - hash: ${receipt.blockHash}`)
-			console.log(`tx: ${hash}`)
-			console.log('-----------------------------------')
-		})
-		await wait(1_000)
-		nonce++
-	}
-} catch (err) {
-	console.error('Failed with error:', err)
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/transfer.ts b/substrate/frame/revive/rpc/examples/js/src/transfer.ts
deleted file mode 100644
index 711e4eb8937..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/transfer.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { parseEther } from 'viem'
-import { walletClient } from './lib.ts'
-
-const recipient = '0x75E480dB528101a381Ce68544611C169Ad7EB342'
-try {
-	console.log(`Signer balance:    ${await walletClient.getBalance(walletClient.account)}`)
-	console.log(`Recipient balance: ${await walletClient.getBalance({ address: recipient })}`)
-
-	let resp = await walletClient.sendTransaction({
-		to: recipient,
-		value: parseEther('1.0'),
-	})
-	console.log(`Transaction hash:  ${resp}`)
-	console.log(`Sent:              ${parseEther('1.0')}`)
-	console.log(`Signer balance:    ${await walletClient.getBalance(walletClient.account)}`)
-	console.log(`Recipient balance: ${await walletClient.getBalance({ address: recipient })}`)
-} catch (err) {
-	console.error(err)
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/util.ts b/substrate/frame/revive/rpc/examples/js/src/util.ts
deleted file mode 100644
index cf5c08d2561..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/util.ts
+++ /dev/null
@@ -1,212 +0,0 @@
-import { spawnSync } from 'bun'
-import { resolve } from 'path'
-import { readFileSync } from 'fs'
-import {
-	CallParameters,
-	createClient,
-	createWalletClient,
-	defineChain,
-	formatTransactionRequest,
-	type Hex,
-	hexToNumber,
-	http,
-	publicActions,
-} from 'viem'
-import { privateKeyToAccount, nonceManager } from 'viem/accounts'
-
-export function getByteCode(name: string, evm: boolean = false): Hex {
-	const bytecode = evm ? readFileSync(`evm/${name}.bin`) : readFileSync(`pvm/${name}.polkavm`)
-	return `0x${Buffer.from(bytecode).toString('hex')}`
-}
-
-export type JsonRpcError = {
-	code: number
-	message: string
-	data: Hex
-}
-
-export const polkadotSdkPath = resolve(__dirname, '../../../../../../..')
-
-export function killProcessOnPort(port: number) {
-	// Check which process is using the specified port
-	const result = spawnSync(['lsof', '-ti', `:${port}`])
-	const output = result.stdout.toString().trim()
-
-	if (output) {
-		console.log(`Port ${port} is in use. Killing process...`)
-		const pids = output.split('\n')
-
-		// Kill each process using the port
-		for (const pid of pids) {
-			spawnSync(['kill', '-9', pid])
-			console.log(`Killed process with PID: ${pid}`)
-		}
-	}
-}
-
-export let jsonRpcErrors: JsonRpcError[] = []
-export async function createEnv(name: 'geth' | 'eth-rpc') {
-	const gethPort = process.env.GETH_PORT || '8546'
-	const ethRpcPort = process.env.ETH_RPC_PORT || '8545'
-	const url = `http://localhost:${name == 'geth' ? gethPort : ethRpcPort}`
-
-	let id = await (async () => {
-		const resp = await fetch(url, {
-			method: 'POST',
-			headers: {
-				'Content-Type': 'application/json',
-			},
-			body: JSON.stringify({ jsonrpc: '2.0', method: 'eth_chainId', id: 1 }),
-		})
-		let { result } = await resp.json()
-		return hexToNumber(result)
-	})()
-
-	const chain = defineChain({
-		id,
-		name,
-		nativeCurrency: {
-			name: 'Westie',
-			symbol: 'WST',
-			decimals: 18,
-		},
-		rpcUrls: {
-			default: {
-				http: [url],
-			},
-		},
-		testnet: true,
-	})
-
-	const transport = http(url, {
-		onFetchResponse: async (response) => {
-			const raw = await response.clone().json()
-			if (raw.error) {
-				jsonRpcErrors.push(raw.error as JsonRpcError)
-			}
-		},
-	})
-
-	const wallet = createWalletClient({
-		transport,
-		chain,
-	})
-
-	const [account] = await wallet.getAddresses()
-	const serverWallet = createWalletClient({
-		account,
-		transport,
-		chain,
-	}).extend(publicActions)
-
-	const accountWallet = createWalletClient({
-		account: privateKeyToAccount(
-			'0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133',
-			{ nonceManager }
-		),
-		transport,
-		chain,
-	}).extend(publicActions)
-
-	const emptyWallet = createWalletClient({
-		account: privateKeyToAccount(
-			'0x4450c571bae82da0528ecf76fcf7079e12ecc46dc873c9cacb6db8b75ed22f41',
-			{ nonceManager }
-		),
-		transport,
-		chain,
-	}).extend(publicActions)
-
-	const debugClient = createClient({
-		chain,
-		transport,
-	}).extend((client) => ({
-		async traceTransaction(txHash: Hex, tracerConfig: { withLog: boolean }) {
-			return client.request({
-				method: 'debug_traceTransaction' as any,
-				params: [txHash, { tracer: 'callTracer', tracerConfig } as any],
-			})
-		},
-		async traceBlock(blockNumber: bigint, tracerConfig: { withLog: boolean }) {
-			return client.request({
-				method: 'debug_traceBlockByNumber' as any,
-				params: [
-					`0x${blockNumber.toString(16)}`,
-					{ tracer: 'callTracer', tracerConfig } as any,
-				],
-			})
-		},
-
-		async traceCall(args: CallParameters, tracerConfig: { withLog: boolean }) {
-			return client.request({
-				method: 'debug_traceCall' as any,
-				params: [
-					formatTransactionRequest(args),
-					'latest',
-					{ tracer: 'callTracer', tracerConfig } as any,
-				],
-			})
-		},
-	}))
-
-	return { debugClient, emptyWallet, serverWallet, accountWallet, evm: name == 'geth' }
-}
-
-export type Env = Awaited<ReturnType<typeof createEnv>>
-
-export function wait(ms: number) {
-	return new Promise((resolve) => setTimeout(resolve, ms))
-}
-
-export function timeout(ms: number) {
-	return new Promise((_resolve, reject) => setTimeout(() => reject(new Error('timeout hit')), ms))
-}
-
-// wait for http request to return 200
-export function waitForHealth(url: string) {
-	return new Promise<void>((resolve, reject) => {
-		const start = Date.now()
-		const interval = setInterval(async () => {
-			try {
-				const res = await fetch(url, {
-					method: 'POST',
-					headers: {
-						'content-type': 'application/json',
-					},
-					body: JSON.stringify({
-						jsonrpc: '2.0',
-						method: 'eth_syncing',
-						params: [],
-						id: 1,
-					}),
-				})
-
-				if (res.status !== 200) {
-					return
-				}
-
-				clearInterval(interval)
-				resolve()
-			} catch (_err) {
-				const elapsed = Date.now() - start
-				if (elapsed > 30_000) {
-					clearInterval(interval)
-					reject(new Error('hit timeout'))
-				}
-			}
-		}, 1000)
-	})
-}
-
-export function visit(obj: any, callback: (key: string, value: any) => any): any {
-	if (Array.isArray(obj)) {
-		return obj.map((item) => visit(item, callback))
-	} else if (typeof obj === 'object' && obj !== null) {
-		return Object.keys(obj).reduce((acc, key) => {
-			acc[key] = visit(callback(key, obj[key]), callback)
-			return acc
-		}, {} as any)
-	} else {
-		return obj
-	}
-}
diff --git a/substrate/frame/revive/rpc/examples/js/src/web.ts b/substrate/frame/revive/rpc/examples/js/src/web.ts
deleted file mode 100644
index ee7c8ed034d..00000000000
--- a/substrate/frame/revive/rpc/examples/js/src/web.ts
+++ /dev/null
@@ -1,129 +0,0 @@
-import {
-	AddressLike,
-	BrowserProvider,
-	Contract,
-	ContractFactory,
-	Eip1193Provider,
-	JsonRpcSigner,
-	parseEther,
-} from 'ethers'
-
-declare global {
-	interface Window {
-		ethereum?: Eip1193Provider
-	}
-}
-
-function str_to_bytes(str: string): Uint8Array {
-	return new TextEncoder().encode(str)
-}
-
-document.addEventListener('DOMContentLoaded', async () => {
-	if (typeof window.ethereum == 'undefined') {
-		return console.log('MetaMask is not installed')
-	}
-
-	console.log('MetaMask is installed!')
-	const provider = new BrowserProvider(window.ethereum)
-
-	console.log('Getting signer...')
-	let signer: JsonRpcSigner
-	try {
-		signer = await provider.getSigner()
-		console.log(`Signer: ${signer.address}`)
-	} catch (e) {
-		console.error('Failed to get signer', e)
-		return
-	}
-
-	console.log('Getting block number...')
-	try {
-		const blockNumber = await provider.getBlockNumber()
-		console.log(`Block number: ${blockNumber}`)
-	} catch (e) {
-		console.error('Failed to get block number', e)
-		return
-	}
-
-	const nonce = await signer.getNonce()
-	console.log(`Nonce: ${nonce}`)
-
-	document.getElementById('transferButton')?.addEventListener('click', async () => {
-		const address = (document.getElementById('transferInput') as HTMLInputElement).value
-		await transfer(address)
-	})
-
-	document.getElementById('deployButton')?.addEventListener('click', async () => {
-		await deploy()
-	})
-	document.getElementById('deployAndCallButton')?.addEventListener('click', async () => {
-		const nonce = await signer.getNonce()
-		console.log(`deploy with nonce: ${nonce}`)
-
-		const address = await deploy()
-		if (address) {
-			const nonce = await signer.getNonce()
-			console.log(`call with nonce: ${nonce}`)
-			await call(address)
-		}
-	})
-	document.getElementById('callButton')?.addEventListener('click', async () => {
-		const address = (document.getElementById('callInput') as HTMLInputElement).value
-		await call(address)
-	})
-
-	async function deploy() {
-		console.log('Deploying contract...')
-
-		const bytecode = await fetch('rpc_demo.polkavm')
-			.then((response) => {
-				if (!response.ok) {
-					throw new Error('Network response was not ok')
-				}
-				return response.arrayBuffer()
-			})
-			.then((arrayBuffer) => new Uint8Array(arrayBuffer))
-
-		const contractFactory = new ContractFactory(
-			['constructor(bytes memory _data)'],
-			bytecode,
-			signer
-		)
-
-		try {
-			const args = str_to_bytes('hello')
-			const contract = await contractFactory.deploy(args)
-			await contract.waitForDeployment()
-			const address = await contract.getAddress()
-			console.log(`Contract deployed: ${address}`)
-			return address
-		} catch (e) {
-			console.error('Failed to deploy contract', e)
-			return
-		}
-	}
-
-	async function call(address: string) {
-		const abi = ['function call(bytes data)']
-		const contract = new Contract(address, abi, signer)
-		const tx = await contract.call(str_to_bytes('world'))
-
-		console.log('Transaction hash:', tx.hash)
-	}
-
-	async function transfer(to: AddressLike) {
-		console.log(`transferring 1 DOT to ${to}...`)
-		try {
-			const tx = await signer.sendTransaction({
-				to,
-				value: parseEther('1.0'),
-			})
-
-			const receipt = await tx.wait()
-			console.log(`Transaction hash: ${receipt?.hash}`)
-		} catch (e) {
-			console.error('Failed to send transaction', e)
-			return
-		}
-	}
-})
diff --git a/substrate/frame/revive/rpc/examples/js/tsconfig.json b/substrate/frame/revive/rpc/examples/js/tsconfig.json
deleted file mode 100644
index 55cb8379e88..00000000000
--- a/substrate/frame/revive/rpc/examples/js/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-	"compilerOptions": {
-		"target": "ES2020",
-		"useDefineForClassFields": true,
-		"module": "ESNext",
-		"lib": ["ES2020", "DOM", "DOM.Iterable"],
-		"skipLibCheck": true,
-
-		/* Bundler mode */
-		"moduleResolution": "bundler",
-		"allowImportingTsExtensions": true,
-		"isolatedModules": true,
-		"moduleDetection": "force",
-		"noEmit": true,
-
-		/* Linting */
-		"strict": true,
-		"noUnusedLocals": true,
-		"noUnusedParameters": true,
-		"noFallthroughCasesInSwitch": true
-	},
-	"include": ["src"]
-}
diff --git a/substrate/frame/revive/rpc/examples/rust/remark-extrinsic.rs b/substrate/frame/revive/rpc/examples/remark-extrinsic.rs
similarity index 100%
rename from substrate/frame/revive/rpc/examples/rust/remark-extrinsic.rs
rename to substrate/frame/revive/rpc/examples/remark-extrinsic.rs
diff --git a/substrate/frame/revive/rpc/examples/rust/rpc-playground.rs b/substrate/frame/revive/rpc/examples/rpc-playground.rs
similarity index 100%
rename from substrate/frame/revive/rpc/examples/rust/rpc-playground.rs
rename to substrate/frame/revive/rpc/examples/rpc-playground.rs
diff --git a/substrate/frame/revive/rpc/examples/rpc_demo.polkavm b/substrate/frame/revive/rpc/examples/rpc_demo.polkavm
deleted file mode 120000
index 63925dfcc54..00000000000
--- a/substrate/frame/revive/rpc/examples/rpc_demo.polkavm
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../target/pallet-revive-fixtures/rpc_demo.polkavm
\ No newline at end of file
diff --git a/substrate/frame/revive/rpc/examples/rust/transfer.rs b/substrate/frame/revive/rpc/examples/transfer.rs
similarity index 100%
rename from substrate/frame/revive/rpc/examples/rust/transfer.rs
rename to substrate/frame/revive/rpc/examples/transfer.rs
diff --git a/substrate/frame/revive/rpc/src/tests.rs b/substrate/frame/revive/rpc/src/tests.rs
index 375e3a5dd3f..87178ccdfd7 100644
--- a/substrate/frame/revive/rpc/src/tests.rs
+++ b/substrate/frame/revive/rpc/src/tests.rs
@@ -15,6 +15,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //! Test the eth-rpc cli with the kitchensink node.
+//! This only includes basic transaction tests, most of the other tests are in the
+//! [evm-test-suite](https://github.com/paritytech/evm-test-suite) repository.
 
 use crate::{
 	cli::{self, CliCommand},
@@ -22,7 +24,6 @@ use crate::{
 	EthRpcClient,
 };
 use clap::Parser;
-use ethabi::Token;
 use jsonrpsee::ws_client::{WsClient, WsClientBuilder};
 use pallet_revive::{
 	create1,
@@ -48,17 +49,6 @@ async fn ws_client_with_retry(url: &str) -> WsClient {
 	.expect("Hit timeout")
 }
 
-fn get_contract(name: &str) -> anyhow::Result<(Vec<u8>, ethabi::Contract)> {
-	let pvm_dir: std::path::PathBuf = "./examples/js/pvm".into();
-	let abi_dir: std::path::PathBuf = "./examples/js/abi".into();
-	let bytecode = std::fs::read(pvm_dir.join(format!("{}.polkavm", name)))?;
-
-	let abi = std::fs::read(abi_dir.join(format!("{}.json", name)))?;
-	let contract = ethabi::Contract::load(abi.as_slice())?;
-
-	Ok((bytecode, contract))
-}
-
 struct SharedResources {
 	_node_handle: std::thread::JoinHandle<()>,
 	_rpc_handle: std::thread::JoinHandle<()>,
@@ -210,54 +200,6 @@ async fn deploy_and_call() -> anyhow::Result<()> {
 	Ok(())
 }
 
-#[tokio::test]
-async fn revert_call() -> anyhow::Result<()> {
-	let _lock = SHARED_RESOURCES.write();
-	let client = Arc::new(SharedResources::client().await);
-	let (bytecode, contract) = get_contract("Errors")?;
-	let receipt = TransactionBuilder::new(&client)
-		.input(bytecode)
-		.send()
-		.await?
-		.wait_for_receipt()
-		.await?;
-
-	let err = TransactionBuilder::new(&client)
-		.to(receipt.contract_address.unwrap())
-		.input(contract.function("triggerRequireError")?.encode_input(&[])?.to_vec())
-		.send()
-		.await
-		.unwrap_err();
-
-	let call_err = unwrap_call_err!(err.source().unwrap());
-	assert_eq!(call_err.message(), "execution reverted: revert: This is a require error");
-	assert_eq!(call_err.code(), 3);
-	Ok(())
-}
-
-#[tokio::test]
-async fn event_logs() -> anyhow::Result<()> {
-	let _lock = SHARED_RESOURCES.write();
-	let client = Arc::new(SharedResources::client().await);
-	let (bytecode, contract) = get_contract("EventExample")?;
-	let receipt = TransactionBuilder::new(&client)
-		.input(bytecode)
-		.send()
-		.await?
-		.wait_for_receipt()
-		.await?;
-
-	let receipt = TransactionBuilder::new(&client)
-		.to(receipt.contract_address.unwrap())
-		.input(contract.function("triggerEvent")?.encode_input(&[])?.to_vec())
-		.send()
-		.await?
-		.wait_for_receipt()
-		.await?;
-	assert_eq!(receipt.logs.len(), 1, "There should be one log.");
-	Ok(())
-}
-
 #[tokio::test]
 async fn invalid_transaction() -> anyhow::Result<()> {
 	let _lock = SHARED_RESOURCES.write();
@@ -277,50 +219,3 @@ async fn invalid_transaction() -> anyhow::Result<()> {
 
 	Ok(())
 }
-
-#[tokio::test]
-async fn native_evm_ratio_works() -> anyhow::Result<()> {
-	let _lock = SHARED_RESOURCES.write();
-	let client = Arc::new(SharedResources::client().await);
-	let (bytecode, contract) = get_contract("PiggyBank")?;
-	let contract_address = TransactionBuilder::new(&client)
-		.input(bytecode)
-		.send()
-		.await?
-		.wait_for_receipt()
-		.await?
-		.contract_address
-		.unwrap();
-
-	let value = 10_000_000_000_000_000_000u128; // 10 eth
-	TransactionBuilder::new(&client)
-		.to(contract_address)
-		.input(contract.function("deposit")?.encode_input(&[])?.to_vec())
-		.value(value.into())
-		.send()
-		.await?
-		.wait_for_receipt()
-		.await?;
-
-	let contract_value = client.get_balance(contract_address, BlockTag::Latest.into()).await?;
-	assert_eq!(contract_value, value.into());
-
-	let withdraw_value = 1_000_000_000_000_000_000u128; // 1 eth
-	TransactionBuilder::new(&client)
-		.to(contract_address)
-		.input(
-			contract
-				.function("withdraw")?
-				.encode_input(&[Token::Uint(withdraw_value.into())])?
-				.to_vec(),
-		)
-		.send()
-		.await?
-		.wait_for_receipt()
-		.await?;
-
-	let contract_value = client.get_balance(contract_address, BlockTag::Latest.into()).await?;
-	assert_eq!(contract_value, (value - withdraw_value).into());
-
-	Ok(())
-}
-- 
GitLab