Skip to content

Instantly share code, notes, and snippets.

@Philogy
Philogy / String.t.sol
Last active October 28, 2022 11:21
Load dynamically sized string / byte-string from storage into memory
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import {Test} from "forge-std/Test.sol";
/// @author Philippe Dumonet <https://github.com/philogy>
contract StringTest is Test {
bytes str;
function testBytesLikeStorage(bytes memory _inputStr) public {
@Philogy
Philogy / llama-lend-get-history.py
Last active February 6, 2023 18:47
LLama Lend History Gettooor
import sys
import os
import dotenv
import requests
from collections import defaultdict
from decimal import Decimal as D
dotenv.load_dotenv()
# Instructions:
@Philogy
Philogy / headers.py
Created May 26, 2023 18:26
Extended Header Tool
#!/bin/python3
import pyperclip
import argparse
def check_width(args, base_width):
min_width = len(args.text) + base_width
if args.width < min_width:
raise ValueError(
f'Width of {args.width} cannot fit "{args.text}" (len: {len(args.text)} + {base_width})'
@Philogy
Philogy / day1.rs
Last active June 25, 2023 21:58
Advent Of Code 2022 (Day 1) in Rust
use std::fs;
fn sort_desc<T: Ord>(v: &mut Vec<T>) {
v.sort_by(|a, b| b.cmp(a));
}
/// # Advent Of Code 2022 (Day 1).
///
/// Challenge is you an input which displays "calories of elves" ([link](https://adventofcode.com/2022/day/1)):
///
@Philogy
Philogy / day2.rs
Last active June 26, 2023 20:16
Advent of Code 2022 (Day 2) in Rust
use std::cmp::{Ordering, PartialOrd};
use std::fs;
#[derive(Debug, PartialEq, Eq, Clone)]
enum Move {
Rock,
Paper,
Scissors,
}
@Philogy
Philogy / frange.py
Created August 17, 2023 09:58
Python `range` but with float starts, ends and steps
def frange(start, end=None, step=None):
assert (end is None) <= (step is None)
if end is None:
start, end, step = 0, start, 1
elif step is None:
step = 1
assert step != 0
sign = -1 if step < 0 else 1
v = start
while v * sign < end * sign:
@Philogy
Philogy / main.rs
Created December 4, 2023 16:17
LeetCode: Queue from 2-Stacks in Rust
struct MyQueue {
queue: Vec<i32>,
stack: Vec<i32>,
}
/**
* `&self` means the method takes an immutable reference.
* If you need a mutable reference, change it to `&mut self` instead.
*/
impl MyQueue {
@Philogy
Philogy / Proxy.sol
Created December 16, 2023 01:24
No Assembly Solidity ERC1967 Proxy
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
/// @author philogy <https://github.com/philogy>
contract Proxy {
uint256 internal constant IMPL_SLOT = uint256(keccak256("eip1967.proxy.implementation")) - 1;
uint256 internal constant ADMIN_SLOT = uint256(keccak256("eip1967.proxy.admin")) - 1;
address[0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff] internal slots;
@Philogy
Philogy / NFT_ERC6909.sol
Created January 6, 2024 11:29
EIP6909 Implementation optimized for IDs with a totalSuppy of 1 each (collection of purely non-fungible tokens
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Simple EIP-6909 for IDs that are solely non-fungible.
/// @author Forked from Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC6909.sol)
/// @author philogy <https://github.com/philogy>
///
/// @dev Note:
/// The ERC6909 standard allows minting and transferring to and from the zero address,
/// minting and transferring zero tokens, as well as self-approvals.
(defn _double [:uint256 x] :uint256 [:internal :pure]
(* x 2))
(defn add [:uint256 x] :uint256 [:external :pure]
(if (< x 10) 0 (self/_double x)))