Skip to content

Commit 92c963d

Browse files
authored
Quickstart demo (#48)
1 parent 6aedba1 commit 92c963d

File tree

14 files changed

+143
-0
lines changed

14 files changed

+143
-0
lines changed

src/demo_tzbtc/__init__.py

Whitespace-only changes.

src/demo_tzbtc/dipdup.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
spec_version: 0.1
2+
package: demo_tzbtc
3+
4+
database:
5+
kind: sqlite
6+
path: demo_tzbtc.sqlite3
7+
8+
contracts:
9+
tzbtc_mainnet:
10+
address: KT1PWx2mnDueood7fEmfbBDKx1D9BAnnXitn
11+
typename: tzbtc
12+
13+
datasources:
14+
tzkt_staging:
15+
kind: tzkt
16+
url: https://staging.api.tzkt.io
17+
18+
indexes:
19+
tzbtc_holders_mainnet:
20+
kind: operation
21+
datasource: tzkt_staging
22+
contracts:
23+
- tzbtc_mainnet
24+
handlers:
25+
- callback: on_transfer
26+
pattern:
27+
- destination: tzbtc_mainnet
28+
entrypoint: transfer
29+
- callback: on_mint
30+
pattern:
31+
- destination: tzbtc_mainnet
32+
entrypoint: mint

src/demo_tzbtc/handlers/__init__.py

Whitespace-only changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from decimal import Decimal
2+
from datetime import datetime
3+
4+
import demo_tzbtc.models as models
5+
6+
7+
async def on_balance_update(address: str, balance_update: Decimal, timestamp: datetime):
8+
holder, _ = await models.Holder.get_or_create(address=address)
9+
holder.balance += balance_update # type: ignore
10+
holder.turnover += abs(balance_update) # type: ignore
11+
holder.tx_count += 1 # type: ignore
12+
holder.last_seen = timestamp # type: ignore
13+
assert holder.balance >= 0, address
14+
await holder.save()

src/demo_tzbtc/handlers/on_mint.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from decimal import Decimal
2+
from typing import Optional
3+
4+
import demo_tzbtc.models as models
5+
from demo_tzbtc.handlers.on_balance_update import on_balance_update
6+
from demo_tzbtc.types.tzbtc.parameter.mint import MintParameter
7+
from demo_tzbtc.types.tzbtc.storage import TzbtcStorage
8+
from dipdup.models import OperationData, OperationHandlerContext, OriginationContext, TransactionContext
9+
10+
11+
async def on_mint(
12+
ctx: OperationHandlerContext,
13+
mint: TransactionContext[MintParameter, TzbtcStorage],
14+
) -> None:
15+
amount = Decimal(mint.parameter.value) / (10 ** 8)
16+
await on_balance_update(address=mint.parameter.to, balance_update=amount, timestamp=mint.data.timestamp)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import logging
2+
3+
from dipdup.utils import reindex
4+
5+
_logger = logging.getLogger(__name__)
6+
7+
8+
async def on_rollback(
9+
from_level: int,
10+
to_level: int,
11+
) -> None:
12+
if from_level - to_level == 1:
13+
return
14+
_logger.warning('Rollback event received, reindexing')
15+
await reindex()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from decimal import Decimal
2+
from typing import Optional
3+
4+
import demo_tzbtc.models as models
5+
from demo_tzbtc.handlers.on_balance_update import on_balance_update
6+
from demo_tzbtc.types.tzbtc.parameter.transfer import TransferParameter
7+
from demo_tzbtc.types.tzbtc.storage import TzbtcStorage
8+
from dipdup.models import OperationData, OperationHandlerContext, OriginationContext, TransactionContext
9+
10+
11+
async def on_transfer(
12+
ctx: OperationHandlerContext,
13+
transfer: TransactionContext[TransferParameter, TzbtcStorage],
14+
) -> None:
15+
if transfer.parameter.from_ == transfer.parameter.to:
16+
return
17+
amount = Decimal(transfer.parameter.value) / (10 ** 8)
18+
await on_balance_update(address=transfer.parameter.from_, balance_update=-amount, timestamp=transfer.data.timestamp)
19+
await on_balance_update(address=transfer.parameter.to, balance_update=amount, timestamp=transfer.data.timestamp)

src/demo_tzbtc/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from tortoise import Model, fields
2+
3+
4+
class Holder(Model):
5+
address = fields.CharField(max_length=36, pk=True)
6+
balance = fields.DecimalField(decimal_places=8, max_digits=20, default=0)
7+
turnover = fields.DecimalField(decimal_places=8, max_digits=20, default=0)
8+
tx_count = fields.BigIntField(default=0)
9+
last_seen = fields.DatetimeField(null=True)

src/demo_tzbtc/types/__init__.py

Whitespace-only changes.

src/demo_tzbtc/types/tzbtc/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)