Skip to content

Instantly share code, notes, and snippets.

View patcito's full-sized avatar

Patrick Aljord patcito

View GitHub Profile
@patcito
patcito / gist:132fc6094f29d9f6da2ad2922896ac51
Last active January 17, 2026 12:53
Frontend Dev Guide: Querying Invest Proofs for Users

Investor Wave - Frontend Developer Guide

This guide explains how to query merkle proofs from the API for the invest flow.

Overview

The investor wave system generates merkle proofs for whitelisted investors. Frontend needs to:

  1. Check if a user is whitelisted
  2. Get their proof and allocation amount
  3. Pass these to the contract's invest() function
@patcito
patcito / gist:1a09ab9fb40d93d7b960a0c7b573a2a0
Last active January 17, 2026 12:53
Solidity Dev Guide: Querying Merkle Root for Contract Updates

Investor Wave - Solidity Developer Guide

This guide explains how to query the current merkle root from the API to update your smart contract.

Overview

The investor wave system maintains a merkle tree of whitelisted investors. When a new investor CSV is deployed, a new merkle root is generated. You need to update your contract with this new root to enable the new whitelist.

API Endpoint

@patcito
patcito / gist:06a54d578e81476d67cf0b237edde5d6
Last active January 16, 2026 14:10
Infra Setup Guide: Investor Wave Import Service

Investor Wave Import - Infrastructure Setup Guide

This guide explains how to set up the import_wave service in your Docker Compose configuration.

Overview

The investor wave system imports whitelisted investors from a CSV file and generates merkle proofs for on-chain verification. The import runs as a one-time job during deployments, after database migrations.

compose.production.yaml Configuration

import React from 'react';
import { Image, View, Text, TextInput, LayoutAnimation } from 'react-native';
import KeyboardEventListener from '../util/KeyboardEventListener';
export default class AuthenticationScreen extends React.Component {
state = {
keyboardHeight: 0,
}
componentDidMount() {
import React, { Component } from "react";
import { StyleSheet, View, Text, PanResponder } from "react-native";
export default class Swipeable extends Component {
state = {
dragging: false,
offsetTop: 0,
offsetLeft: 0
};
import React from "react";
import { Constants } from "expo";
import {
TextInput,
ScrollView,
View,
Text,
StyleSheet,
StatusBar,
Button,
import React from 'react';
import { Constants } from 'expo';
import {
TextInput,
ScrollView,
View,
Text,
StyleSheet,
StatusBar,
} from 'react-native';
import React from "react";
import { SectionList, StyleSheet, Text, View, Image } from "react-native";
import ToggleButton from "../components/ToggleButton";
const thursdaySections = [
{
key: "8:30 AM",
data: [{ key: 0, title: "Registration, breakfast" }]
},
{
import React from "react";
import { SectionList, StyleSheet, Text, View, Image } from "react-native";
import ToggleButton from "../components/ToggleButton";
const thursdaySections = [
{
key: "8:30 AM",
data: [{ key: 0, title: "Registration, breakfast" }]
},
{
const thursdaySections = [
{
id: "8:30 AM",
data: [{ id: 0, title: "Registration, breakfast" }]
},
{
id: "10:00 AM",
data: [{ id: 0, title: "Conference Keynote", speaker: "Lucy Vatne" }]
}
];