Skip to content

Instantly share code, notes, and snippets.

View Piliponful's full-sized avatar
💭
I'm doing nothing on github

Maxim Pilipenko Piliponful

💭
I'm doing nothing on github
View GitHub Profile
@winnab
winnab / gist:2c5608fe4034b2276f2a8664dbe9c9f0
Last active March 26, 2018 09:14
Gogland useful shortcuts

From another project

Navigation

  • Go to definition: cmd + B
  • Go to list of all method declarations: cmd + opt + B
  • Line up and down: cmd + shift + up or down arrow
  • Expansive text selection: option + up arrow (as many times as needed)
  • cmd+[: go back
  • cmd+]: go forward
  • alt+F7: find usages of the identifier under the cursor.
@i-am-tom
i-am-tom / Main.purs
Created March 29, 2017 06:41
Wolfram's Rule 30 cellular automaton in PureScript.
module Main where
import Prelude
import Control.Comonad (class Comonad, class Extend, extend, extract)
import Control.Monad.Eff.Console (log)
import Data.Array ((..), (!!), cons, length, replicate, zipWith)
import Data.Function (on)
import Data.Int (fromStringAs, binary, toNumber, floor)
import Data.Int.Bits ((.&.))
@evertonfraga
evertonfraga / ethereum-dev-mode.md
Last active June 22, 2022 11:55
Set up an Ethereum development network in two minutes
@evertonfraga
evertonfraga / delegatecall.sol
Last active December 19, 2017 03:01
Prevent library direct code execution
/**
This code snippet aims to show how to prevent library methods from being executed directly.
That's achieved by baking in the address of the library before it's deployed, then comparing `address(this)` against the saved address within a modifier.
A contract/library address is deterministic, so one could inject that in: keccak256(creator_address, nonceValue).
Thanks to @pirapira, @chriseth and @arachnid for the idea.
*/
@gavinandresen
gavinandresen / UTXO_Cuckoo.md
Last active June 7, 2021 17:45
Using a cuckoo filter for fast 'unspent?' lookups

A "Cuckoo Filter" is a nifty data structure invented a few years ago; read the paper for details.

Like a Bloom filter, you insert items and then can later ask "does this item exist in the filter?" You'll get either a definite "no" or "yes, probably" with some false-positive error rate. Cuckoo filters have two advantages over Bloom filters:

  1. They are more space efficient at false positive rates less than about 0.03.
  2. You can delete items from them without affecting the false positive rate at all.

It seems to me that an in-memory cuckoo filter could work really well to keep track of Bitcoin's "unspent transaction output set" (UTXO set), to make transaction (or block) validation as fast as possible using minimal memory or disk.

Recall that Bitcoin transactions (other than coinbase transactions that create new coins) have inputs that refer to unspent outputs. An input refers to a previous output by giving the transaction id (a 32-byte hash) co