Skip to content

Instantly share code, notes, and snippets.

View shramee's full-sized avatar
🥳
Coding party

Shramee Srivastav shramee

🥳
Coding party
View GitHub Profile
@shramee
shramee / MIST: Seek and Hide.md
Last active September 20, 2025 09:16
Amount correlation and forced exits

MIST: Introducing Seek and Hide

Traditional Privacy Mixers

Traditional privacy mixers allow senders to deposit and hide assets in a contract and recipients to seek and withdraw them using zero-knowledge proofs. Typically mixers allow fixed denominations which are at best inefficient and at worst unusable, and offer weak privacy because of dispersed anonimity pools. There's only 1 answer to these issues, flexible amounts.

However, following issues arise when traditional mixers to allow flexible amounts.

1. Amount Correlation

When a user deposits a unique amount (e.g., 7.3 ETH) and another withdraws exactly 7.3 ETH, blockchain observers can easily correlate these transactions, completely breaking privacy. Your deposit fingerprints your withdrawal.

@shramee
shramee / ipa.md
Last active August 19, 2025 05:34

IPA (Inner Product Argument) Commitment Scheme

Overview

This implementation provides an optimized Inner Product Argument (IPA) commitment scheme that only multiplies half of the elements in each vector during each prover round, improving efficiency over naive implementations.

Mathematical Foundation

The IPA scheme operates with the following components:

@shramee
shramee / simple-pretty-merkle-proof.circom
Created August 3, 2025 12:12
Basic Simple Merkle Membership Proof
pragma circom 2.0.0;
include "circomlib/circuits/poseidon.circom";
include "circomlib/circuits/comparators.circom";
include "circomlib/circuits/mux1.circom";
template BinarySelectorHasher() {
signal input i; // Must be 0 or 1
signal input a; // Input
signal input b; // Sibling

Bulletproofs++ Protocol Documentation

As describe in section 5 Arithmetic Circuits of Bulletproofs++ paper.

1. Arithmetic Circuit Protocol

Implemented in mod.rs

From section 5.3 Full Protocol Description (of 5 Arithmetic circuits),

Protocol: Arithmetic Circuit Protocol $\langle\mathcal{P}_{ac}, \mathcal{V}_{ac}\rangle$

OnlyDust shields

Shield:

<a href="https://app.onlydust.xyz/projects/6196eca8-5467-4587-b9f7-8ebebab0f841">
<img src="https://img.shields.io/badge/An%20OnlyDust%20project-%23000?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAAXNSR0IArs4c6QAABNNJREFUOE9tlGtQ1FUchp/z/+8usLCArOAuICyggwpI4mVEQzNJVMQZb6WpqTikXSxDDC2bMUv9YAw2loWUOo06lo02XsoUL2NqogmmgmCgcleQ24Jclt09zeLo2OV8O7/3Pc+cOXPeV/A/S57B96Zm/Gu7m1MLsqYvOv+sZVNeXvwrg/rGhgcF7hEioP3fx8WzA7keDRGk1hst2cOiDl+rDR061qWf8S/y8lOMMvaB6ZFrv25SbWHGHhHm4+++Anz3CiGcTzhPgTJluJ6Yqzk9g3ULdmw+S3P38Bkflbv9JFv29nFszjyIqkg185fZwieqKZKSlcuSPLLfO2YEteNLaF0lxMBuF7QXKJGKLe7Vb3RT9y+5rsaT+vE+3BEJUTkN+VWJynf1FbY5slFHDH77FxeFLg7OPrvYy6Ms1//sBNTIfkB9NoSvEkLIXmABDfMiLNn7vBdtpuC3XBpPzyPY/c5XQ7pi3nTpppyu5G67Q2l+y/NI7wU+VU+idSQ6x29EjMxAKJXguJ8iNAlHxRykOg9b9XjjLpPfrDU0HNuEX+xO1OjCDtJGmMXAfOs/3lleNvHwSCXSqXV2GVCCl4NoAsftMtRLkWIy1hlz0B+covsZU8o6RNx18AfiIiAmy4Fu2twDB9RDHICJi1ihH0KW1mxXhEbB3gw6/xbACvZb0JyXLOKo+3Yp/VInKwUExXyO27pDMCwJwtfj7Img9bQHTefbnT11IOu9
@shramee
shramee / loops.cairo
Created October 25, 2022 07:50
Loops with jmp in Cairo (Starknet).
// Dynamic allocation in Cairo is done using the `alloc` function,
// which itself is implemented in Cairo using the
// [segments](https://www.cairo-lang.org/docs/how_cairo_works/segments.html) mechanism.
// Thanks to this mechanism, `alloc` allocates an array of an arbitrary size,
// which does not need to be specified in the call.
//
// The function `sqr_array` should compute and return an array
// of the square values of a given array.
// Write the body of `sqr_array` using the given helper function
// `_inner_sqr_array` and check that the program output
@shramee
shramee / String-to-felt.js
Last active October 12, 2022 19:11
Converts a string to felt, @uses BigInt
function asciiToFelt(str) {
if ( ! isNaN( str ) ) return '' + str;
var arr1 = [];
for (var n = 0, l = str.length; n < l; n++) {
const hex = Number(str.charCodeAt(n)).toString(16);
arr1.push(hex);
}
let hex = arr1.join("");
if ( hex %2 ) hex = '0' + hex;
return BigInt('0x' + hex).toString();
@shramee
shramee / google-reviews.php
Last active January 20, 2025 23:39
Get and shows google reviews
<?php
/**
* Get google reviews
* @return array Google reviews data
*/
function get_google_reviews(){
// URL to fetch
$google_api = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=<your_place_id>&sensor=true&key=<key>';
@shramee
shramee / mongodb-aggregations.js
Created November 26, 2021 03:46
NTU SDI 4.3: Mongo DB aggregation pipelines with restaurants sample data
// region Setup database client
const { MongoClient } = require( 'mongodb' );
// Server to connect to
const uri = "mongodb://localhost:27017";
const dbServer = new MongoClient( uri );
// endregion Setup database client
@shramee
shramee / sdi-vehicles-drivers-sequelize.js
Created November 1, 2021 08:20
Resets the database for NTU SDI vehicles and driver database
async function addDataToDB() {
try {
// Destructive operation do only when needed
// await sequelize.sync( {force: true} );
await Vehicle.create( {
type: 'car',
carPlateNo: 'SA882'
} );