Upload 40MB vitalik's blog to vitalikblog.eth with a smart contract on Arbitrum Nova with 0.13ETH

We have uploaded all @VitalikButerin’s blog (40MB) on Arbitrum Nova mainnet permanently with only 0.13 ETH!

Further, anyone can browse the blog using web3:// access protocol at https://vitalikblog.w3eth.io/ or web3://vitalikblog.eth/ (defined in ERC-4804), which maps the name to contract 0xe4ba0e245436b737468c206ab5c8f4950597ab7f on Nova.

Questions and answers

Why did you do this?

We are experimenting with a new application of Ethereum: host websites directly on Ethereum ! This brings huge benefits compared to other solutions:

  • reuse Ethereum security with minimal 3rd trust
  • dynamic with rich UX vs static ones
  • simple user/dev onboarding with ETH wallet and dev stack (hardhat/remix/etc)

Should it be super expensive?

Yes, uploading 40MB on the mainnet will be prohibitively expensive - even using opt. rollups are unaffordable since the data will be uploaded as mainnet calldata.

Luckily, Arbitrum Nova’s DAC solves the problem, and it only takes 0.13 ETH!

Interesting, how could I browse the website on smart contract?

The web3:// access protocol (ERC-4804, see https://web3url.io) is proposed to do this. And we have launched two gateways http://w3link.io and http://w3eth.io to support browsing web3:// (see previous reddit post).

How could I create a web3:// website with ENS for myself?

If you have local files, you can use ethfs-uploader to create an EthFS contract and upload all the local files to the contract.

You can also check ERC-5018 Filesystem-like Interface for Smart Contracts for more details.

Further, to map your name to the contract address, you have to set “web3” text record to an EIP-3770 chain-specific address (see web3url.io or “web3” text record of “vitalikblog.eth”)

What are the next steps?

We are exploring more interesting applications on Ethereum and ENS such as dynamic NFT, decentralized social networks, etc, on Arbitrum Nova.

You can play some prototypes on http://web3url.io. Enjoy!

5 Likes

Would it be possible to upload a compressed file? Can the protocol/gateway decompress it automatically on query?

Good question! The protocol/standard itself does not specify a compression protocol. To support compression, the developers can upload a frontend compression library (e.g., zip.js) and use the library to do the compression or perhaps implements a contract-based compression library (that will be pretty cool!)

In the future, we can implement protocol-level compression like HTTP compression. Feel free if you have any ideas about that and I will love to incorporate the idea into the standard :slight_smile:

1 Like

To support compression, the developers can upload a frontend compression library (e.g., zip.js) and use the library to do the compression or perhaps implements a contract-based compression library (that will be pretty cool!)

I use the same strategy on Predomain.eth.limo to store categories data (mainly texts - could be improved if compiled to binary) where it’s decompressed on runtime with ~80% savings in file size. The prize is significant.

2 Likes