Skip to content

Port DTRManager with OmniProtocol transport #544

@tcsenpai

Description

@tcsenpai

Port DTRManager from DTR branch with OmniProtocol transport replacement.

Source

git show origin/dtr:src/libs/network/dtr/dtrmanager.ts (699 lines)

Target

src/libs/network/dtr/dtrmanager.ts

Transport Change Required

OLD (HTTP-based)

const res = await validator.longCall({
    method: "nodeCall",
    params: [{ message: "RELAY_TX", data: payload }],
})

NEW (OmniProtocol binary)

import { OmniOpcode } from "@/libs/omniprotocol/protocol/opcodes"
import { encodeJsonRequest } from "@/libs/omniprotocol/serialization/jsonEnvelope"

const res = await validator.omniSend(
    OmniOpcode.RELAY_TX, 
    encodeJsonRequest({ transactions: payload })
)

Key Components to Preserve

  1. validityDataCache: Map<string, ValidityData> - for retry logic
  2. isWaitingForBlock: boolean - block-aware optimization
  3. lastBlockNumber: number - cache invalidation
  4. relayTransactions() - main relay method (update transport)
  5. receiveRelayedTransactions() - validator receiving logic (keep as-is)
  6. waitForBlockThenRelay() - background retry (update transport)
  7. Background retry service (10-second interval)

Notes

  • Most logic is transport-agnostic
  • Only relayTransactions() and waitForBlockThenRelay() need transport updates
  • receiveRelayedTransactions() validation logic stays exactly the same

[Beads: node-4rm]

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions