Skip to content

Instantly share code, notes, and snippets.

@Eenae
Eenae / sol-abi-to-interface.js
Last active March 26, 2021 11:33 — forked from chriseth/sol-abi-to-interface.js
ABI to solidity interface converter
#!/usr/bin/env node
// Credits: @rangelife
var fs=require('fs');
try {
var abi=JSON.parse(fs.readFileSync(process.argv[3]));
} catch (e) {
dieUsage();
}
@Eenae
Eenae / AppStore.ts
Created August 12, 2020 06:29
Interacting with Ethereum via Metamask example
import {runInAction, action, observable} from 'mobx';
import {getWeb3, LOCKED_METAMASK_ERROR, NO_METAMASK_ERROR} from "../tools/tools";
import {l} from '../tools/debug';
import Web3 from "web3";
import {createBrowserHistory} from 'history';
export enum Web3State {
UNKNOWN,
NO_METAMASK,
CONNECTED,
#!/usr/bin/env python3
import random
from typing import List
def pull_two_cards(total_cards: int=52):
first = random.randint(0, total_cards - 1)
total_cards -= 1
@Eenae
Eenae / collisions-solidity-storage-layouts-array-layout.js
Created March 20, 2019 10:32
Example of Solidity array allocation
uint256 foo;
uint256 bar;
uint256[] items;
function allocate() public {
require(0 == items.length);
items.length = 2;
items[0] = 12;
items[1] = 42;
@Eenae
Eenae / SeparateStorages.js
Last active March 13, 2019 08:03
Reading the previous version storage
mapping (address => uint256) private _balances;
// previous version of a token smart contract
ERC20 private _previous;
// flag indicates that migration of certain user balance was performed
mapping (address => bool) private _migrated;
function balanceOf(address owner) public view returns (uint256) {
return _migrated[owner] ? _balances[owner] : _previous.balanceOf(owner);
@Eenae
Eenae / TestProxySlotCollision.js
Last active January 21, 2019 15:35
Test which fails because of proxy slot collision
const BalanceSheet = artifacts.require("BalanceSheet")
const AllowanceSheet = artifacts.require("AllowanceSheet")
const AkropolisBaseToken = artifacts.require("AkropolisBaseToken")
const AkropolisToken = artifacts.require("AkropolisToken")
const TokenProxy = artifacts.require("TokenProxy")
const TokenProxyDelayed = artifacts.require("TokenProxyDelayed")
const ZERO_ADDRESS = 0x0000000000000000000000000000000000000000;
const l = console.log;

Keybase proof

I hereby claim:

  • I am eenae on github.
  • I am eenae (https://keybase.io/eenae) on keybase.
  • I have a public key ASBMOORebOAS0k2HOW9qgk-R0rVwxPAHhMcjxJUwbx-NLgo

To claim this, I am signing this object:

@Eenae
Eenae / StorageIO.js
Created March 14, 2018 17:00
Exploring EVM memory model
'use strict';
const StorageIO = artifacts.require("StorageIO.sol");
contract('StorageIO', function(accounts) {
it("Overlapping read", async function() {
const io = await StorageIO.new();
for (const offset of [533, 534, 535])