Proposal #66: Update the ETH RPC List and ENS - 50 TORN
Expenditure: 50 TORN
Reason: The current default Blockscout RPC is unusable because it enforces a strict JSON-RPC mode.
The feeOracleV4 and feeOracleV5 calls in tornado-oracles do not include the latest block parameters, causing compatibility issues with strictly compatible RPC endpoints.
The most practical and straightforward solution is to update the ETH RPC list to resolve this incompatibility issue.
UI Update Details:
ETH RPCs: pocket, Mevblocker, mevblockerFullprivacy, torndaoRPC, sentioRPC, lavaRPC, blastRPC, xrpc
Goal: Update the IPFS hash of the Tornado Cash Classic UI associated with the ENS domain tornadocash.eth.
UI Codebase: https://codeberg.org/torndao/classic-ui/commits/branch/development
UI Code Commit: https://codeberg.org/torndao/classic-ui/commit/d52c01688f5697e60a1d3c598a4c30989403fb0f
IPFS Hash: bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5by (Accessible via https://ipfs.io/ipfs/bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5by)
IPFS Hash Verification Tool: https://codeberg.org/torndao/tornado-ipfs-ui
Content Hash: e3010170122031fdc81d48dea2004a10fd5c6deac9ce7ab1347bf603118431eee9ab17d01d0e (Calculated using tools at https://codeberg.org/torndao/tornado-ipfs-ui/src/branch/main/ContentHash.html)
Affected Domains: The updated IPFS hash will affect the following domains:
tornadocash.eth.limo
tornadocash.eth.link
ipfs.io/ipns/tornadocash.eth
tornadocash-eth.ipns.dweb.linkPlease note that the referenced commit "UI Code Commit:
d52c01688f5697e60a1d3c598a4c30989403fb0f" is incorrect, as it corresponds to the previous Proposal #65 commit hash. The correct UI commit ise312df5a4f6caaa7e93f1b5960c603d8dd7ec67a. This discrepancy in the proposal text does not impact the final IPFS hash calculation.
This proposal passed with 122.13k TORN (100%) voting For. The required quorum of 100k TORN was met, and the proposal was successfully executed here (May-02-2026 11:36:23 AM UTC).
- Code repository: https://codeberg.org/torndao/classic-ui/commits/branch/development
- UI code commit version: https://codeberg.org/torndao/classic-ui/commit/e312df5a4f6caaa7e93f1b5960c603d8dd7ec67a
There are two new commits compared to the last version (https://tornadocash.eth.limo/governance/65; https://codeberg.org/torndao/classic-ui/commit/d52c01688f5697e60a1d3c598a4c30989403fb0f; https://ipfs.io/ipfs/bafybeie5hxovqc4ifcnrnhvmjbefxgeix6oqvzaspyytdxiyscji22v5pu):
- https://codeberg.org/torndao/classic-ui/commit/ed62d9ef1798de9da443784e4a303e87c3a124b2 (commit message: "update eth rpc"),
- https://codeberg.org/torndao/classic-ui/commit/e312df5a4f6caaa7e93f1b5960c603d8dd7ec67a (commit message: "Unexpected character ','").
- Commit
ed62d9ef1798de9da443784e4a303e87c3a124b2(commit message: "update eth rpc") mainly reorganised the existing RPC configuration by moving entries such aslavaRPC,torndaoRPC, andsentioRPC. However, the change also introduced a duplicatelavaRPCentry with the same key and value. Since JavaScript objects cannot contain duplicate keys, the later definition silently overwrites the previous one, leaving the first entry redundant and potentially confusing. Additionally, some RPC identifiers do not follow the existing naming convention (e.g.,pocketvs. the usual*RPCpattern), andmevblocker/mevblockerFullprivacyshare the same display nameMevblockerdespite pointing to different endpoints, which could create ambiguity when displaying or selecting RPC providers. Overall, the commit is not malicious, but it can be considered low-quality due to several avoidable issues, including duplicate entries, inconsistent naming, and minor configuration mistakes. But as always use your own node!
- blockscoutRPC: {
- name: 'BlockscoutRPC',
- url: 'https://eth.blockscout.com/api/eth-rpc'
+ pocket: {
+ name: 'pocket',
+ url: 'https://eth.api.pocket.network'
+ },
+ mevblocker: {
+ name: 'Mevblocker',
+ url: 'https://rpc.mevblocker.io'
+ },
+ mevblockerFullprivacy: {
+ name: 'Mevblocker',
+ url: 'https://rpc.mevblocker.io/fullprivacy'
+ },
+ torndaoRPC: {
+ name: 'Torndao RPC',
+ url: 'https://torndao.com/ethrpc'
+ },
+ sentioRPC: {
+ name: 'SentioRPC',
+ url: 'https://rpc.sentio.xyz/mainnet'
+ },
+ lavaRPC: {
+ name: 'LavaRPC',
+ url: 'https://eth1.lava.build'
},
blastRPC: {
name: 'BlastRPC',
@@ -33,25 +53,9 @@ export default {
name: 'Xrpc',
url: 'https://0xrpc.io/eth'
},
- gasHawkRPC: {
- name: 'GasHawkRPC',
- url: 'https://core.gashawk.io/rpc'
- },
lavaRPC: {
name: 'LavaRPC',
url: 'https://eth1.lava.build'
- },
- torndaoRPC: {
- name: 'Torndao RPC',
- url: 'https://torndao.com/ethrpc'
- },
- sentioRPC: {
- name: 'SentioRPC',
- url: 'https://rpc.sentio.xyz/mainnet'
- },
- tornadoRPC: {
- name: 'Tornado RPC',
- url: 'https://tornadocash-rpc.com/mainnet'- Commit
e312df5a4f6caaa7e93f1b5960c603d8dd7ec67a(commit message: "Unexpected character ','") fixed a syntax error caused by a non-standard comma character pushed in commited62d9ef1798de9da443784e4a303e87c3a124b2:
- },
+ },First, we verify that the claimed commit hash bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5by is correctly calculated. I use https://codeberg.org/torndao/tornado-ipfs-ui - the original version seemed fine to me until now & the latest commits are just the commit hash updates:
- https://codeberg.org/torndao/tornado-ipfs-ui/commit/4c178eb7beb0cd49fc6a48ee1240b3adb06ff64b (commit message: "update GIT_COMMIT_HASH"),
- https://codeberg.org/torndao/tornado-ipfs-ui/commit/3e680d02ec730eafa3d6221fb5ea717216fb24cd (commit message: "更新Dockerfile").
Interestingly, the committer torndao777 used a Chinese commit message only for this particular last commit, while all the other commit messages were written in English.
~$ git clone https://codeberg.org/torndao/tornado-ipfs-ui.git
~$ docker build -t tornado-classic-ui .
~$ docker container run --rm -it --entrypoint cat tornado-classic-ui /app/ipfs_hash.txtwhich returns bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5by. So the claimed IPFS hash is correctly derived.
Let's use on-chain data to verify this as well. Let's get the ENS public resolver (0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e is the ENS registry):
cast call 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e "resolver(bytes32)(address)" $(cast namehash tornadocash.eth) -r https://eth.drpc.orgwhich returns 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41.
Now we can get the IPFS hash (sorry some custom Bash magic lol):
cast call 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41 "contenthash(bytes32)(bytes)" $(cast namehash tornadocash.eth) -r https://eth.drpc.org | sed 's/^0xe301//' | xxd -r -p | base32 | tr -d '=' | tr '[:upper:]' '[:lower:]' | sed 's/^a/ipfs:\/\/ba/'which returns ipfs://bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5by. Looks good!
Finally, let's cross-check with with the eth.limo headers (since we don't trust anyone):
curl -sI https://tornadocash.eth.limo/ | grep -i "x-ipfs"which returns
access-control-expose-headers: Content-Length,Content-Range,X-Chunked-Output,X-Ipfs-Path,X-Ipfs-Roots,X-Stream-Output
x-ipfs-path: /ipfs/bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5by/
x-ipfs-roots: bafybeibr7xeb2sg6uiaeueh5lrw6vsoopkyti67wamiyimpo5gvrpua5bySo we're good here.
You can find my review of Proposal #65 here.