Completed the exercise.
Added a sign up component.
Time spent: 4 hours.
"""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. |
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 |
import enum | |
import datetime | |
import sqlalchemy as sa | |
from sqlalchemy import case, union_all | |
from sqlalchemy.orm import Session, aliased | |
from .utils import TimeStampedBaseModel | |
-- 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; |
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 |
-- 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.