Skip to content

Instantly share code, notes, and snippets.

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
Python simple persistent database with dataclass, JSON and Redis.
View python-redis-json-dataclass-example.py
"""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 Apr 14, 2021
Generating Ethereum addresses from mnemonic seed words
View Generating Ethereum addresses from mnemonic seed words.js
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`)
}
View start_ipython_within_your_app.py
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 Apr 2, 2021
SQLAlchemy crypto price feed class and find the nearest price to a timepoint
View price_feed_nearest_point_of_time.py
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 Apr 2, 2021
Get all ERC-20() transactions using BigQuery public dataset
View get_all_erc_20_approve_transactions_using_bigquery.sql
-- 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 Mar 26, 2021
Solidity and Ethereum int256 for Python, SQLAlchemy and SQL Databases, efficiently as 32 bytes blobs
View example.py
class LiquidityChanged(TransactionEvent):
"""A sampled liquidity at any moment."""
__tablename__ = "liquidity"
delta0 = sa.Column(Int257, nullable=False, index=False)
View erc_20_scanner.py
"""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 Jan 28, 2021
How to get the total cost of approve() function calls on Ethereum blockchain
View bigquery.sql
-- 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;
View dockerised-solc.bash
#!/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`
View bad-pr.md

Completed the exercise.

Added a sign up component.

Time spent: 4 hours.