Skip to content

Instantly share code, notes, and snippets.

View alerdenisov's full-sized avatar

Aleksandr Denisov alerdenisov

View GitHub Profile
@alerdenisov
alerdenisov / multicall.ts
Created April 15, 2021 18:44
multicall.ts
import { BytesLike, Contract } from "ethers"
import { Provider } from "@ethersproject/providers"
import { Multicall, Multicall__factory } from "../types"
export interface CallRequest {
onResult: (response: string) => void
call: Call
}
export interface Call {
target: string
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin"
# Path to your oh-my-zsh installation.
export ZSH=${HOME}/.oh-my-zsh
macro_rules! define_array {
($name: ident, $size: expr) => {
#[derive(Copy, Clone)]
#[repr(C)]
pub struct $name<T: Sized + Clone + Copy + std::fmt::Debug + PartialEq + Eq>([T; $size]);
impl<T: Sized + Clone + Copy + std::fmt::Debug + PartialEq + Eq> std::fmt::Debug for $name<T> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0[..].fmt(f)
}
@alerdenisov
alerdenisov / proxy.sol
Created October 4, 2020 18:55
Proxy all
contract Proxy {
fallback() external payable {
assembly {
let len := calldatasize()
calldatacopy(0, 0, len)
let r := delegatecall(gas(), mload(0x0), 0x20, sub(len, 0x20), 0, 0)
}
}
}
@alerdenisov
alerdenisov / proxy.sol
Created October 4, 2020 18:52
Proxy all calls
contract Proxy {
fallback() external payable {
assembly {
let len := calldatasize()
calldatacopy(0, 0, len)
let addr := mload(0x0)
let result := delegatecall(gas(), addr, 0x20, sub(len, 0x20), 0, 0)
returndatacopy(0, 0, returndatasize())
switch result
case 0 { revert(0, returndatasize()) }
/// main.rs
pub fn start_foo_protocol(params: foo::FooParams) -> foo::FooExecution {
execute(params, foo::run)
}
///////// foo.rs
pub enum FooMessages {
MessageOne,
MessageTwo,
}
@alerdenisov
alerdenisov / A.sol
Created August 29, 2020 18:57
Shadowing issue with named returns
pragma solidity 0.4.11;
contract A {
uint foo = 50;
/**
* @dev Public getter of private `foo` field
* @return Returns value of `foo`
*/
function GetFoo() constant returns (uint foo) {
AQACAEAAAAAAAAAAMWRhMTg5ZThlYjhjOTJhOWE1ZTQ0YTZjM2I0ZGZkZjA1MTM1YzFjMzI4YjA2Zjc5ZjI1ZTBhZGZkZDE2MDliMEAAAAAAAAAAOWNhOGM0NzNjODVkYTA4Y2Q1ZmYzMTQwMmM5ZGFhY2M5NzA4MTAzNTQ1OGIwNmY4NmIyNDQ0ZjIwNThmNmMyNEAAAAAAAAAAZmUyZTBmYzI2YmZhNmI5MjE2YjAyNTQ0OTRlYWUxOWM2OTJkZGY1NWYzMWVhOGQwY2M2YTUyNmFiMzIyNmZhMTUBAAAAAAAAMTAwMTEzNjkyOTEyODk3MzAxNzIxODI5NzI2NTU2ODQ3MjgzODkzMzMyMTY4ODcwMTU2MTQ3MDE1NjI3MjM3NjMxOTQyNTcxNzY2ODY4MjI3NTc4OTgzNTU3OTg1MTY5ODE5MzI1MTI0MzQ2NzI2OTE0NDY1MDY4NzM4ODM5MjU5NzQwNjM2NzE5MTE1Mzc4NzU3NTgxNjM2MTEzODM5NDU2MTcyMzk3Mjc3ODk4MjQ4Mzk4NTg4NTExODcwNzM3MjYzNTkyNTg1NjI3NDAzMDg5NzkxNTMxNjk3MjA1OTEzMDI3MTI1NjMyNTE5NDQzMjg5MzEwMjkxODQ2ODgyNTk4NDc5NTUwNDY4MDU4OTYzMTEzMDIyNzIxMDUxNzkwNDk0Nzk5NTE2NDc5MjAyNDkzNTk5NAEAAAAAAAA5OTY5NzI0NTAxMzY2NDkyNTE5NjIzNDUwNzUyMjAxMjI2MTQ5MTkzNzc1MDE5MTg5MzEyMjc3NDc2MjQ0NDkzMTk1MTkyMTEwNjk4MDUwMzY4ODkyMzcxNzA2NjUzNzk1OTI5MzA4NTM5MzY4NzE0MDYyMTg4MTI1NTYxMDk3NjY1NzkyMTcxODk0MTA5OTMxNjc3MTE1NTIzMjAzMjg0NDU1NDMwOTU4NTYyMDg1ODIzNTY5MjU2Nzc5MDk0NTkwNDAyMjkwODU4NTgzOTY0MTQxMDg1MDcyODY3MDEw
CeBWd5JU3KVhVkYrRsR2AcZr5fpv8uhpc72h4Spd4NCMJfPiebes7YTrw9RBj8KJAwYnWt4Kg7TyrHJjMg5ChTQb2in2zAJXhQeeFSSozvTmntfzx7UhcSbhRcQ5QYyDJgHHDsX5iVBgSZfQcD7w2EcqM2EVa5EN7RBUSz6uY2YgSdnUxr9PL3RivzREzWJik8DHYCkbvcs9ScrvLXoqwJDRc6STq2Yghu1ZvJxSdBDRCjbiQHgGwPCdEEoZSjnyPpz8fhCb6tcGo562vJkp8uAuSG1DauFUj1qV56gqESu6hqX3Srr637RWzzyfUPkSzaqDgoS9WGSeRxo465YHWgbtWcjzE6FyNyL5eJHDsC7DQecVNWstYJoTPL2c8KwybnGPbQYgpdjtXyNXwDpxA4gi8h9nEYBy4aR4SvwWJS5d97WZsHRpARRRtPn1TWq9epyPGLxGfAVy91vLcaQTyYRRKG26M6xEsnJWbCrPw1wKUFRtCHzPe7JG1mMSJc3YmwYL5qpVUGzm63aUtXnc7yPB2ZK1EKVSpCv8hWTHwBRZHtjZ2yEiZuHQMdasRfGW6qm646ihtc7e6buzCfkrkCwYso5thXbgP28ukL6Cpc3WJRCqbKB7booKModmQ34nkVYnDSchdEzu7pR51f59QfBatZ5EJHPg3MoSiCH6kw4MXAfDQkCeC4FVpBoS3baC6rxmSHrDZopvHgWUXCkSGGWXwBvtZBvj6zBezYeS6BBWfY6ZC74HEi9rfzWyGS9NmbVZ3WJ6Ppbf59mC2MaxP6d9TkqGWsheWmJaDLwpzgjdtBe4R4r2UTjadZv7VxxWesDSn4Vhv4f5TSWs9YbGXcL9fHiYxPuQnx1Py9PHDfJfZKyfm2MYMU1vUzJqoRyhADgAhbBhKkd5fjAXSX8Y2RomCVBpRgppE9paKjJHeFaxuVhVoMDwZrbtBcXh4wrw332dqSTm6TJbLRKQNwFB9RsZAbDKPpzST3YPfhQhTUpvExz2Tgd8PTWY3LwGTDFa
@alerdenisov
alerdenisov / 0_Foo.sol
Created July 9, 2019 17:18
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.5.10+commit.5a6ea5b1.js&optimize=false&gist=
pragma solidity 0.5.10;
contract Foo {
function bar() public {
}
}