From c393fd4b0905fdc5b613561c730d8f96e8b12ce0 Mon Sep 17 00:00:00 2001 From: effects-ai Date: Sun, 11 Jan 2026 16:31:25 -0800 Subject: [PATCH] feat: add support for increased delegated stakes --- ...dd_replacement_hash_to_dag_token_locks.sql | 4 +++ ...fields_to_delegate_stake_create_events.sql | 5 ++++ ...elds_to_delegate_stake_withdraw_events.sql | 5 ++++ ..._epoch_to_delegate_stake_create_events.sql | 1 + prisma/schema.prisma | 25 ++++++++++++------- src/handlers/delegatedStakingHandler.ts | 4 +++ src/handlers/tokenLocksHandler.ts | 1 + 7 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 prisma/migrations/20260109/01_add_replacement_hash_to_dag_token_locks.sql create mode 100644 prisma/migrations/20260109/02_add_current_fields_to_delegate_stake_create_events.sql create mode 100644 prisma/migrations/20260109/03_add_current_fields_to_delegate_stake_withdraw_events.sql create mode 100644 prisma/migrations/20260313/01_add_created_at_epoch_to_delegate_stake_create_events.sql diff --git a/prisma/migrations/20260109/01_add_replacement_hash_to_dag_token_locks.sql b/prisma/migrations/20260109/01_add_replacement_hash_to_dag_token_locks.sql new file mode 100644 index 0000000..f029c32 --- /dev/null +++ b/prisma/migrations/20260109/01_add_replacement_hash_to_dag_token_locks.sql @@ -0,0 +1,4 @@ +-- Add replacement_hash field to dag_token_locks + +ALTER TABLE dag_token_locks +ADD COLUMN replacement_hash varchar NULL; diff --git a/prisma/migrations/20260109/02_add_current_fields_to_delegate_stake_create_events.sql b/prisma/migrations/20260109/02_add_current_fields_to_delegate_stake_create_events.sql new file mode 100644 index 0000000..43ecdb0 --- /dev/null +++ b/prisma/migrations/20260109/02_add_current_fields_to_delegate_stake_create_events.sql @@ -0,0 +1,5 @@ +-- Add current_token_lock_hash and current_amount fields to delegate_stake_create_events + +ALTER TABLE delegate_stake_create_events +ADD COLUMN current_token_lock_hash varchar NULL, +ADD COLUMN current_amount int8 NULL; diff --git a/prisma/migrations/20260109/03_add_current_fields_to_delegate_stake_withdraw_events.sql b/prisma/migrations/20260109/03_add_current_fields_to_delegate_stake_withdraw_events.sql new file mode 100644 index 0000000..25002e4 --- /dev/null +++ b/prisma/migrations/20260109/03_add_current_fields_to_delegate_stake_withdraw_events.sql @@ -0,0 +1,5 @@ +-- Add current_token_lock_hash and current_amount fields to delegate_stake_withdraw_events + +ALTER TABLE delegate_stake_withdraw_events +ADD COLUMN current_token_lock_hash varchar NULL, +ADD COLUMN current_amount int8 NULL; diff --git a/prisma/migrations/20260313/01_add_created_at_epoch_to_delegate_stake_create_events.sql b/prisma/migrations/20260313/01_add_created_at_epoch_to_delegate_stake_create_events.sql new file mode 100644 index 0000000..d6afe13 --- /dev/null +++ b/prisma/migrations/20260313/01_add_created_at_epoch_to_delegate_stake_create_events.sql @@ -0,0 +1 @@ +ALTER TABLE delegate_stake_create_events ADD COLUMN created_at_epoch int8 NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6aca504..e18efe8 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -218,7 +218,8 @@ model dag_token_locks { round_id String @db.Uuid snapshot_hash String @db.VarChar parent_hash String? @db.VarChar - currency_id String? @db.VarChar + currency_id String? @db.VarChar + replacement_hash String? @db.VarChar addresses addresses @relation(fields: [source_addr], references: [address], onDelete: Cascade, onUpdate: Restrict, map: "dag_token_locks_source_addr_fk") global_snapshot global_snapshots @relation(fields: [snapshot_hash], references: [hash], onDelete: Cascade, onUpdate: Restrict, map: "dag_token_lock_global_snapshot_fk") dag_token_unlock dag_token_unlocks? @@ -600,9 +601,12 @@ model delegate_stake_create_events { lock_reference_hash String @db.VarChar parent_hash String @db.VarChar global_snapshot_hash String @db.VarChar - transfer_from_hash String? @unique @db.VarChar - created_at DateTime @default(now()) @db.Timestamp(6) - updated_at DateTime @default(now()) @db.Timestamp(6) + transfer_from_hash String? @unique @db.VarChar + current_token_lock_hash String? @db.VarChar + current_amount BigInt? + created_at_epoch BigInt? + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @default(now()) @db.Timestamp(6) global_snapshot global_snapshots @relation(fields: [global_snapshot_hash], references: [hash], onDelete: Cascade, onUpdate: Restrict) addresses addresses @relation(fields: [source_addr], references: [address], onDelete: Cascade, onUpdate: Restrict) @@ -624,10 +628,13 @@ model delegate_stake_withdraw_events { source_addr String @db.VarChar stake_create_hash String @unique @db.VarChar global_snapshot_hash String @db.VarChar - unlock_epoch BigInt - is_completed Boolean - created_at DateTime @default(now()) @db.Timestamp(6) - updated_at DateTime @default(now()) @db.Timestamp(6) + created_at_epoch BigInt + unlock_epoch BigInt + is_completed Boolean + current_token_lock_hash String? @db.VarChar + current_amount BigInt? + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @default(now()) @db.Timestamp(6) global_snapshot global_snapshots @relation(fields: [global_snapshot_hash], references: [hash], onDelete: Cascade, onUpdate: Restrict) addresses addresses @relation(fields: [source_addr], references: [address], onDelete: Cascade, onUpdate: Restrict) @@ -662,4 +669,4 @@ model token_lock_total_rewards_view { total_rewards BigInt delegate_stake_create_events delegate_stake_create_events[] -} \ No newline at end of file +} diff --git a/src/handlers/delegatedStakingHandler.ts b/src/handlers/delegatedStakingHandler.ts index 363ca86..70ff4af 100644 --- a/src/handlers/delegatedStakingHandler.ts +++ b/src/handlers/delegatedStakingHandler.ts @@ -56,6 +56,8 @@ const delegateStakeCreateResponse = (event) => ({ timestamp: event.created_at, globalSnapshotHash: event.global_snapshot_hash, globalSnapshotOrdinal: event.global_snapshot?.ordinal, + currentTokenLockHash: event.lock_reference_hash, + currentAmount: event.current_amount, }); const delegateStakeCreateResponses = (txs) => @@ -70,6 +72,8 @@ const delegateStakeWithdrawResponse = (event) => ({ timestamp: event.created_at, globalSnapshotHash: event.global_snapshot_hash, globalSnapshotOrdinal: event.global_snapshot?.ordinal, + currentTokenLockHash: event.lock_reference_hash, + currentAmount: event.current_amount, }); const delegateStakeWithdrawResponses = (txs) => diff --git a/src/handlers/tokenLocksHandler.ts b/src/handlers/tokenLocksHandler.ts index ccc1167..b4434a6 100644 --- a/src/handlers/tokenLocksHandler.ts +++ b/src/handlers/tokenLocksHandler.ts @@ -28,6 +28,7 @@ const dagTokenLockResponse = (transaction) => ({ transaction.dag_token_unlock?.global_snapshot.ordinal ?? null, globalSnapshotHash: transaction.snapshot_hash, globalSnapshotOrdinal: transaction.global_snapshot.ordinal, + replacementHash: transaction.replacement_hash, }); const dagTokenLockResponses = (txs) => txs.map(dagTokenLockResponse);