Skip to content

Instantly share code, notes, and snippets.

Avatar

chriseth

  • Berlin
View GitHub Profile
View priorityQueue.sol
// Adapted from https://github.com/omgnetwork/plasma-contracts
// Licensed under Apache License 2.0
// SPDX-License-Identifier: Apache-2.0
export { Queue, insert, pop, min, defaultLessThanMemory, defaultLessThanStorage }
struct Queue<T> {
T[] heap;
function(T memory, T storage) internal view returns (bool) lessThanMemory;
function(T storage, T storage) internal view returns (bool) lessThanStorage;
View Oracle.sol
struct Query
{
uint id;
function(uint, bytes memory) external callback;
}
contract Oracle
{
event Queried(bytes,function(uint, bytes memory) external);
View Token.sol
// unmodified
contract Token {
uint8 public decimals = 18;
string public name;
uint256 public lastTouched;
address public hub;
address public owner;
@chriseth
chriseth / debugdata.json
Created Jul 2, 2020
Function entry point information
View debugdata.json
[
{
"entryPoint": 399,
"id": 42,
"paramStackSlots": 2,
"returnStackSlots": 0
},
{
"entryPoint": 408,
"id": 35,
@chriseth
chriseth / analysis.cpp
Last active May 18, 2020
runtime jump validation
View analysis.cpp
#include <iostream>
#include <vector>
#include <optional>
#include <assert.h>
using namespace std;
uint8_t constexpr PUSH = 0x60;
uint8_t constexpr JUMPDEST = 0x5b;
uint8_t constexpr BEGINSUB = 0xb5;
@chriseth
chriseth / gist:c95c20393e0dd1063d4366983b4bc4c9
Created May 29, 2019
Solidity to EWasm code generation
View gist:c95c20393e0dd1063d4366983b4bc4c9
Solidity code:
contract c {
function f(uint x) internal returns (uint) {
while (x > 0)
return 2 * f(x - 1);
}
}
Yul IR:
View ERC20.yul
/*******************************************************
* WARNING *
* Solidity to Yul compilation is still EXPERIMENTAL *
* It can result in LOSS OF FUNDS or worse *
* !USE AT YOUR OWN RISK! *
*******************************************************/
object "ERC20_396" {
code {
{
@chriseth
chriseth / input.sol
Created Apr 17, 2019
Sol to Yul compiler
View input.sol
contract C {
function f() public pure returns (uint x) { x = 7; }
}
View create.sol
uint salt = 0x123;
bool success;
// order matters!
bytes memory p = abi.encode(param1, ..., paramn);
bytes memory c = type(C).creationCode;
assembly {
function memCopyPadded(from, to, length) {
for { let i := 0 } lt(i, length) { i := add(i, 0x20) } {
mstore(to, mload(from))
to := add(to, 0x20)
@chriseth
chriseth / Automated Source Code Repository.md
Last active Apr 2, 2019
Automated Source Code Repository
View Automated Source Code Repository.md

To increase decentralization, it would be great to have a verified repository of smart contract source codes. Due to the metadata being part of the bytecode, we should have everything that is needed to actually perform the verification. This repository could be an actual repository on github, where people can create pull requests to have their smart contract code compiled and verified. There could be a CI job that does the verification as follows:

  • fetch the bytecode from the chain via infura or another service
  • install the correct compiler version using npm
  • only flag the PR green, if the compilation output matches the bytecode

If the directory name is the address of the contract, the source code should be easy to find, even if multiple

You can’t perform that action at this time.