Skip to content

Instantly share code, notes, and snippets.

@qzhodl
qzhodl / ethstorage-v1-trusted-setup-ceremony_attestation.log
Created August 8, 2025 02:52
Attestation for EthStorage V1 Trusted Setup Ceremony MPC Phase 2 Trusted Setup ceremony
Hey, I'm qzhodl-5291653 and I have contributed to the EthStorage V1 Trusted Setup Ceremony.
The following are my contribution signatures:
Circuit # 1 (blob-poseidon-circuit)
Contributor # 6
Contribution Hash: dfe53c86 cb6bf6da 3698d0c3 d18745ec
18b71d1f 4932f32a 43e92911 947e0ec3
54d12f80 e34f8aaf 1892278a 435517ee
d9a9340b fc6be313 72385748 186804ba
@qzhodl
qzhodl / ethstorage-trusted-setup-ceremony_attestation.log
Created July 18, 2025 07:24
Attestation for Ethstorage Trusted Setup Ceremony MPC Phase 2 Trusted Setup ceremony
Hey, I'm qzhodl-5291653 and I have contributed to the Ethstorage Trusted Setup Ceremony.
The following are my contribution signatures:
Circuit # 1 (blob-poseidon-circuit)
Contributor # 2
Contribution Hash: aa57a681 1341f0d8 a0b6d337 1f0800e3
98c331ca 7f78ede0 b51b3785 0f40f898
078659f5 37f3d5aa 7b16dbfc 2cd9d22b
29ada123 d0399955 a4355aec 77d6a56e
@qzhodl
qzhodl / Instructions.md
Last active August 2, 2024 03:31
How to Update the Blog Hosted by EthStorage
@qzhodl
qzhodl / IDecentralizedApp.sol
Created July 19, 2024 08:28
ERC-5219 example
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;
struct KeyValue {
string key;
string value;
}
interface IDecentralizedApp {
/// @notice Send an HTTP GET-like request to this contract
@qzhodl
qzhodl / append-spec.md
Last active July 11, 2024 04:30
Support append for storage contract

To further reduce the gas cost of writing data, we can support the appending feature on the storage contract to avoid an additional sstore. Two new functions will be added:

  • function appendBlob(uint256 _blobIdx, uint256 _length) public payable returns (uint256 kvIndex)
  • function get(uint256 _kvIndex, DecodeType _decodeType, uint256 _off, uint256 _len) public view virtual returns (bytes memory)

Important

If the appendBlob is used, the application contract will need to remeber the returned kvIndex, and then retrieve the value later using it.

A prototype of implementation will be:

function append(uint256 _blobIdx, uint256 _length) public payable returns (uint256) {
     require(_length <= MAX_KV_SIZE, "DecentralizedKV: data too large");
@qzhodl
qzhodl / ethstorage-circom_attestation.log
Created July 10, 2024 08:44
Attestation for EthStorage circom MPC Phase 2 Trusted Setup ceremony
Hey, I'm qzhodl-5291653 and I have contributed to the EthStorage circom MPC Phase2 Trusted Setup ceremony.
The following are my contribution signatures:
Circuit # 1 (blob_poseidon_2)
Contributor # 4
Contribution Hash: 1f1e7ec7 727b27b9 27d64957 88e8fe8a
aac0c2ee d0e5b055 0d8cde0e adfb003c
ab16ed66 52663a54 55a4a059 6fbbf665
0c40096f a2e78d30 6739012f f068021f
@qzhodl
qzhodl / task.md
Last active May 9, 2024 07:15
2nd Campaign

Creating your first unstoppable dApp on Ethereum

In this article, we will demonstrate how to deploy the simplest unstoppable dApp using the ethfs-cli tool.

For the content to be deployed, let's assume that:

  • There is an application folder (e.g., dist), which contains two files inside (e.g., app.html and degen.jpeg).
  • The app.html file displays a greeting message from a smart contract and a degen image (264KB). It's very simple:
<html>
@qzhodl
qzhodl / tutorial.md
Last active May 8, 2024 10:58
Creating your first fully on-chain application

Creating your first fully on-chain application

In this article, we will demonstrate how to deploy the simplest fully on-chain application using the ethfs-cli tool.

For the content to be uploaded, let's assume that

  • there is an application folder to be uploaded; (e.g., dist)
  • there are two files in the folder. (e.g., app.html and degen.jpeg). The app.html displays the degen image (264KB), and it will be very simple:
<html>
	LFG,  Degen!
@qzhodl
qzhodl / GetBlob.js
Last active February 21, 2024 03:12
Get BLOB from EthStorage
const { ethers } = require('ethers');
const provider = new ethers.providers.JsonRpcProvider('http://65.108.236.27:9540');
// Simplified ABI for demonstration
const contractABI = [
{
"constant": true,
"inputs": [{"name": "key", "type": "bytes32"}],