Skip to content

Instantly share code, notes, and snippets.

View miohtama's full-sized avatar
🏠
https://tradingstrategy.ai

Mikko Ohtamaa miohtama

🏠
https://tradingstrategy.ai
View GitHub Profile
@miohtama
miohtama / python-redis-json-dataclass-example.py
Created May 18, 2021 09:48
Python simple persistent database with dataclass, JSON and Redis.
"""A simple trade execution report database by using Python dataclass, Redis and JSON.
- A very simple database for arbitrage trade execution reports.
- Dataclasses are serialised and deserialised to JSON that is stored in the Redis.
- There is type validation for members and class-types.
- Class-types like Decimal are converted back to their original format upon deserialisation.
- Optional members are supported and the member presence is validated.
- Past trades can be iterated in either order by creation.
- A simple CSV exported is provided.
@miohtama
miohtama / Generating Ethereum addresses from mnemonic seed words.js
Created April 14, 2021 08:45
Generating Ethereum addresses from mnemonic seed words
const HDWallet = require('ethereum-hdwallet')
const mnemonic = 'your seed prhase goes here'
const hdwallet = HDWallet.fromMnemonic(mnemonic)
for(let i=0; i<1000; i++) {
console.log(`0x${hdwallet.derive(`m/44'/60'/0'/0/${i}`).getAddress().toString('hex')}, 3.33`)
}
def _console(context: ProcessContext):
imported_objects = {}
import datetime
from IPython import embed
from dex_ohlcv.models.base import Base
imported_objects["db_session_scoper"] = context.create_db_session_scoper()
imported_objects["web3"] = context.create_web3()
imported_objects["datetime"] = datetime
@miohtama
miohtama / price_feed_nearest_point_of_time.py
Created April 2, 2021 15:34
SQLAlchemy crypto price feed class and find the nearest price to a timepoint
import enum
import datetime
import sqlalchemy as sa
from sqlalchemy import case, union_all
from sqlalchemy.orm import Session, aliased
from .utils import TimeStampedBaseModel
@miohtama
miohtama / get_all_erc_20_approve_transactions_using_bigquery.sql
Created April 2, 2021 10:00
Get all ERC-20() transactions using BigQuery public dataset
-- Get all approve() transaction
-- Web3.utils.keccak256("approve(address,uint256)").slice(0, 10);
-- '0x095ea7b3'
WITH txdata as (
SELECT tx.hash as txid, tx.block_timestamp as block_timestamp, cast(tx.receipt_gas_used as numeric) * cast(tx.gas_price as numeric) as cost FROM
bigquery-public-data.crypto_ethereum.transactions as tx
where
tx.input
LIKE "0x095ea7b3%")
SELECT (SUM(cost) / POWER(10, 18)) as eth_cost from txdata;
@miohtama
miohtama / example.py
Created March 26, 2021 10:51
Solidity and Ethereum int256 for Python, SQLAlchemy and SQL Databases, efficiently as 32 bytes blobs
class LiquidityChanged(TransactionEvent):
"""A sampled liquidity at any moment."""
__tablename__ = "liquidity"
delta0 = sa.Column(Int257, nullable=False, index=False)
"""A stateful event scanner for Ethereum-based blockchains using web3.py.
With the stateful mechanism, you can do one batch scan or incremental scans,
where events are added where the scanner left last time.
Copyright 2021 Mikko Ohtamaa, https://twitter.com/moo9000, licensed under MIT
"""
import datetime
import time
@miohtama
miohtama / bigquery.sql
Created January 28, 2021 11:47
How to get the total cost of approve() function calls on Ethereum blockchain
-- Web3.utils.keccak256("approve(address,uint256)").slice(0, 10);
-- '0x095ea7b3'
WITH txdata as (
SELECT tx.hash as txid, cast(tx.receipt_gas_used as numeric) * cast(tx.gas_price as numeric) as cost FROM
bigquery-public-data.crypto_ethereum.transactions as tx
where
tx.input
LIKE "0x095ea7b3%")
SELECT (SUM(cost) / POWER(10, 18)) as eth_cost from txdata;
#!/bin/sh
#
# This is a faux solc stub that runs a dockerized solc
#
VERSION=$SOLC_VERSION
# Docker complains about abs paths
ME=`dirname "$0"`
ME=`realpath $ME`

Completed the exercise.

Added a sign up component.

Time spent: 4 hours.