From d1337781e335427b1bfcff5c011ea6088b0160e0 Mon Sep 17 00:00:00 2001
From: Drew Stone
Date: Sun, 21 Dec 2025 01:37:38 -0700
Subject: [PATCH 01/14] Update operator docs and API refs for modular protocol
---
.../developers/api/reference/ITangleJobs.mdx | 87 ++++
.../api/reference/ITangleOperators.mdx | 155 +++++++
.../api/reference/ITangleServices.mdx | 413 ++++++++++++++++++
.../api/reference/generated/ITangleJobs.mdx | 87 ++++
.../reference/generated/ITangleOperators.mdx | 155 +++++++
.../reference/generated/ITangleServices.mdx | 413 ++++++++++++++++++
pages/developers/blueprint-sdk.mdx | 219 +++++-----
pages/developers/cli/tangle.mdx | 320 ++++----------
.../system-architecture/overview.mdx | 65 +++
pages/operators/manager/_meta.ts | 3 +
pages/operators/manager/introduction.mdx | 21 +-
pages/operators/manager/requirements.mdx | 9 +-
pages/operators/manager/security.mdx | 42 ++
pages/operators/manager/setup.mdx | 59 +++
pages/operators/manager/sizing.mdx | 29 ++
pages/operators/onboarding.mdx | 212 +++++++++
.../operators/operator/join_operator/join.mdx | 49 +--
.../operator/join_operator/leave.mdx | 87 +---
.../operator/join_operator/stake.mdx | 127 ++----
.../templates/helpers/index.cjs | 37 ++
20 files changed, 2031 insertions(+), 558 deletions(-)
create mode 100644 pages/developers/api/reference/ITangleJobs.mdx
create mode 100644 pages/developers/api/reference/ITangleOperators.mdx
create mode 100644 pages/developers/api/reference/ITangleServices.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleJobs.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleOperators.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleServices.mdx
create mode 100644 pages/developers/system-architecture/overview.mdx
create mode 100644 pages/operators/manager/security.mdx
create mode 100644 pages/operators/manager/setup.mdx
create mode 100644 pages/operators/manager/sizing.mdx
create mode 100644 pages/operators/onboarding.mdx
create mode 100644 scripts/solidity-docgen/templates/helpers/index.cjs
diff --git a/pages/developers/api/reference/ITangleJobs.mdx b/pages/developers/api/reference/ITangleJobs.mdx
new file mode 100644
index 0000000..4c317e0
--- /dev/null
+++ b/pages/developers/api/reference/ITangleJobs.mdx
@@ -0,0 +1,87 @@
+---
+title: ITangleJobs
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleJobs
+
+Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleJobs.sol
+
+### ITangleJobs
+
+Job submission and result management interface
+
+#### Functions
+
+#### submitJob
+
+```solidity
+function submitJob(uint64 serviceId, uint8 jobIndex, bytes inputs) external payable returns (uint64 callId)
+```
+
+Submit a job to a service
+
+#### submitResult
+
+```solidity
+function submitResult(uint64 serviceId, uint64 callId, bytes result) external
+```
+
+Submit a job result (as operator)
+
+#### submitResults
+
+```solidity
+function submitResults(uint64 serviceId, uint64[] callIds, bytes[] results) external
+```
+
+Submit multiple results in one transaction
+
+#### submitAggregatedResult
+
+```solidity
+function submitAggregatedResult(uint64 serviceId, uint64 callId, bytes output, uint256 signerBitmap, uint256[2] aggregatedSignature, uint256[4] aggregatedPubkey) external
+```
+
+Submit an aggregated BLS result for a job
+
+_Only valid for jobs where requiresAggregation returns true_
+
+##### Parameters
+
+| Name | Type | Description |
+| ------------------- | ---------- | ------------------------------------------------------------------------ |
+| serviceId | uint64 | The service ID |
+| callId | uint64 | The job call ID |
+| output | bytes | The aggregated output data |
+| signerBitmap | uint256 | Bitmap indicating which operators signed (bit i = operator i in service) |
+| aggregatedSignature | uint256[2] | The aggregated BLS signature [x, y] |
+| aggregatedPubkey | uint256[4] | The aggregated public key [x0, x1, y0, y1] |
+
+#### getJobCall
+
+```solidity
+function getJobCall(uint64 serviceId, uint64 callId) external view returns (struct Types.JobCall)
+```
+
+Get job call info
+
+#### Events
+
+#### JobSubmitted
+
+```solidity
+event JobSubmitted(uint64 serviceId, uint64 callId, uint8 jobIndex, address caller, bytes inputs)
+```
+
+#### JobResultSubmitted
+
+```solidity
+event JobResultSubmitted(uint64 serviceId, uint64 callId, address operator, bytes result)
+```
+
+#### JobCompleted
+
+```solidity
+event JobCompleted(uint64 serviceId, uint64 callId)
+```
diff --git a/pages/developers/api/reference/ITangleOperators.mdx b/pages/developers/api/reference/ITangleOperators.mdx
new file mode 100644
index 0000000..c643d5f
--- /dev/null
+++ b/pages/developers/api/reference/ITangleOperators.mdx
@@ -0,0 +1,155 @@
+---
+title: ITangleOperators
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleOperators
+
+Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleOperators.sol
+
+### ITangleOperators
+
+Operator registration and management interface
+
+#### Functions
+
+#### preRegister
+
+```solidity
+function preRegister(uint64 blueprintId) external
+```
+
+Signal intent to register for a blueprint
+
+#### registerOperator
+
+```solidity
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external payable
+```
+
+Register as operator for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| blueprintId | uint64 | The blueprint to register for |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity This key is used for signing/verifying messages in the P2P gossip network and may differ from the wallet key (msg.sender) |
+| rpcAddress | string | The operator's RPC endpoint URL |
+
+#### registerOperator
+
+```solidity
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress, bytes registrationInputs) external payable
+```
+
+Register as operator providing blueprint-specific registration inputs
+
+##### Parameters
+
+| Name | Type | Description |
+| ------------------ | ------ | ----------------------------------------------- |
+| blueprintId | uint64 | |
+| ecdsaPublicKey | bytes | |
+| rpcAddress | string | |
+| registrationInputs | bytes | Encoded payload validated by blueprint's schema |
+
+#### unregisterOperator
+
+```solidity
+function unregisterOperator(uint64 blueprintId) external
+```
+
+Unregister from a blueprint
+
+#### updateOperatorPreferences
+
+```solidity
+function updateOperatorPreferences(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external
+```
+
+Update operator preferences for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------ | --------------------------------------------------------- |
+| blueprintId | uint64 | The blueprint to update preferences for |
+| ecdsaPublicKey | bytes | New ECDSA public key (pass empty bytes to keep unchanged) |
+| rpcAddress | string | New RPC endpoint (pass empty string to keep unchanged) |
+
+#### getOperatorRegistration
+
+```solidity
+function getOperatorRegistration(uint64 blueprintId, address operator) external view returns (struct Types.OperatorRegistration)
+```
+
+Get operator registration for a blueprint
+
+#### getOperatorPreferences
+
+```solidity
+function getOperatorPreferences(uint64 blueprintId, address operator) external view returns (struct Types.OperatorPreferences)
+```
+
+Get operator preferences for a blueprint (includes ECDSA public key)
+
+#### getOperatorPublicKey
+
+```solidity
+function getOperatorPublicKey(uint64 blueprintId, address operator) external view returns (bytes)
+```
+
+Get operator's ECDSA public key for gossip network identity
+
+_Returns the key used for signing/verifying gossip messages_
+
+#### isOperatorRegistered
+
+```solidity
+function isOperatorRegistered(uint64 blueprintId, address operator) external view returns (bool)
+```
+
+Check if operator is registered for a blueprint
+
+#### Events
+
+#### OperatorRegistered
+
+```solidity
+event OperatorRegistered(uint64 blueprintId, address operator, bytes ecdsaPublicKey, string rpcAddress)
+```
+
+Emitted when an operator registers for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------- | ------------------------------------------------ |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address (wallet) |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity |
+| rpcAddress | string | The operator's RPC endpoint |
+
+#### OperatorUnregistered
+
+```solidity
+event OperatorUnregistered(uint64 blueprintId, address operator)
+```
+
+#### OperatorPreferencesUpdated
+
+```solidity
+event OperatorPreferencesUpdated(uint64 blueprintId, address operator, bytes ecdsaPublicKey, string rpcAddress)
+```
+
+Emitted when an operator updates their preferences
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------- | -------------------------------------------------------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address |
+| ecdsaPublicKey | bytes | The updated ECDSA public key (may be empty if unchanged) |
+| rpcAddress | string | The updated RPC endpoint (may be empty if unchanged) |
diff --git a/pages/developers/api/reference/ITangleServices.mdx b/pages/developers/api/reference/ITangleServices.mdx
new file mode 100644
index 0000000..d92a263
--- /dev/null
+++ b/pages/developers/api/reference/ITangleServices.mdx
@@ -0,0 +1,413 @@
+---
+title: ITangleServices
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleServices
+
+Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleServices.sol
+
+### ITangleServices
+
+Service lifecycle management interface
+
+#### Functions
+
+#### requestService
+
+```solidity
+function requestService(uint64 blueprintId, address[] operators, bytes config, address[] permittedCallers, uint64 ttl, address paymentToken, uint256 paymentAmount) external payable returns (uint64 requestId)
+```
+
+Request a new service
+
+#### requestServiceWithExposure
+
+```solidity
+function requestServiceWithExposure(uint64 blueprintId, address[] operators, uint16[] exposureBps, bytes config, address[] permittedCallers, uint64 ttl, address paymentToken, uint256 paymentAmount) external payable returns (uint64 requestId)
+```
+
+Request a service with explicit exposure commitments
+
+#### requestServiceWithSecurity
+
+```solidity
+function requestServiceWithSecurity(uint64 blueprintId, address[] operators, struct Types.AssetSecurityRequirement[] securityRequirements, bytes config, address[] permittedCallers, uint64 ttl, address paymentToken, uint256 paymentAmount) external payable returns (uint64 requestId)
+```
+
+Request a service with multi-asset security requirements
+
+_Each operator must provide security commitments matching these requirements when approving_
+
+#### approveService
+
+```solidity
+function approveService(uint64 requestId, uint8 restakingPercent) external
+```
+
+Approve a service request (as operator) - simple version
+
+#### approveServiceWithCommitments
+
+```solidity
+function approveServiceWithCommitments(uint64 requestId, struct Types.AssetSecurityCommitment[] commitments) external
+```
+
+Approve a service request with multi-asset security commitments
+
+_Commitments must match the security requirements specified in the request_
+
+#### rejectService
+
+```solidity
+function rejectService(uint64 requestId) external
+```
+
+Reject a service request (as operator)
+
+#### createServiceFromQuotes
+
+```solidity
+function createServiceFromQuotes(uint64 blueprintId, struct Types.SignedQuote[] quotes, bytes config, address[] permittedCallers, uint64 ttl) external payable returns (uint64 serviceId)
+```
+
+Create a service instantly using pre-signed operator quotes
+
+_No approval flow needed - operators have pre-committed via signatures_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---------------- | -------------------------- | ---------------------------------------- |
+| blueprintId | uint64 | The blueprint to use |
+| quotes | struct Types.SignedQuote[] | Array of signed quotes from operators |
+| config | bytes | Service configuration |
+| permittedCallers | address[] | Addresses allowed to call jobs |
+| ttl | uint64 | Service time-to-live (must match quotes) |
+
+#### extendServiceFromQuotes
+
+```solidity
+function extendServiceFromQuotes(uint64 serviceId, struct Types.SignedQuote[] quotes, uint64 extensionDuration) external payable
+```
+
+Extend a service using pre-signed operator quotes
+
+#### terminateService
+
+```solidity
+function terminateService(uint64 serviceId) external
+```
+
+Terminate a service (as owner)
+
+#### addPermittedCaller
+
+```solidity
+function addPermittedCaller(uint64 serviceId, address caller) external
+```
+
+Add a permitted caller to a service
+
+#### removePermittedCaller
+
+```solidity
+function removePermittedCaller(uint64 serviceId, address caller) external
+```
+
+Remove a permitted caller from a service
+
+#### joinService
+
+```solidity
+function joinService(uint64 serviceId, uint16 exposureBps) external
+```
+
+Join an active service (Dynamic membership only)
+
+#### joinServiceWithCommitments
+
+```solidity
+function joinServiceWithCommitments(uint64 serviceId, uint16 exposureBps, struct Types.AssetSecurityCommitment[] commitments) external
+```
+
+Join an active service with per-asset security commitments (Dynamic membership only)
+
+#### leaveService
+
+```solidity
+function leaveService(uint64 serviceId) external
+```
+
+Leave an active service (Dynamic membership only)
+
+#### scheduleExit
+
+```solidity
+function scheduleExit(uint64 serviceId) external
+```
+
+Schedule exit from an active service when exit queues are enabled
+
+#### executeExit
+
+```solidity
+function executeExit(uint64 serviceId) external
+```
+
+Execute a scheduled exit after the queue delay
+
+#### cancelExit
+
+```solidity
+function cancelExit(uint64 serviceId) external
+```
+
+Cancel a scheduled exit before execution
+
+#### forceExit
+
+```solidity
+function forceExit(uint64 serviceId, address operator) external
+```
+
+Force exit an operator from a service (if permitted by config)
+
+#### forceRemoveOperator
+
+```solidity
+function forceRemoveOperator(uint64 serviceId, address operator) external
+```
+
+Force remove an operator from a service (blueprint manager only)
+
+##### Parameters
+
+| Name | Type | Description |
+| --------- | ------- | ---------------------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator to remove |
+
+#### billSubscription
+
+```solidity
+function billSubscription(uint64 serviceId) external
+```
+
+Bill a subscription service for the current period
+
+#### billSubscriptionBatch
+
+```solidity
+function billSubscriptionBatch(uint64[] serviceIds) external returns (uint256 totalBilled, uint256 billedCount)
+```
+
+Bill multiple subscription services in one call
+
+#### getBillableServices
+
+```solidity
+function getBillableServices(uint64[] serviceIds) external view returns (uint64[] billable)
+```
+
+Get billable services from a list of candidates
+
+#### fundService
+
+```solidity
+function fundService(uint64 serviceId, uint256 amount) external payable
+```
+
+Fund a service escrow balance
+
+#### getServiceRequest
+
+```solidity
+function getServiceRequest(uint64 requestId) external view returns (struct Types.ServiceRequest)
+```
+
+Get service request
+
+#### getServiceRequestSecurityRequirements
+
+```solidity
+function getServiceRequestSecurityRequirements(uint64 requestId) external view returns (struct Types.AssetSecurityRequirement[])
+```
+
+Get security requirements for a service request
+
+#### getServiceRequestSecurityCommitments
+
+```solidity
+function getServiceRequestSecurityCommitments(uint64 requestId, address operator) external view returns (struct Types.AssetSecurityCommitment[])
+```
+
+Get security commitments for a service request by operator
+
+#### getService
+
+```solidity
+function getService(uint64 serviceId) external view returns (struct Types.Service)
+```
+
+Get service info
+
+#### isServiceActive
+
+```solidity
+function isServiceActive(uint64 serviceId) external view returns (bool)
+```
+
+Check if service is active
+
+#### isServiceOperator
+
+```solidity
+function isServiceOperator(uint64 serviceId, address operator) external view returns (bool)
+```
+
+Check if address is operator in service
+
+#### getServiceOperator
+
+```solidity
+function getServiceOperator(uint64 serviceId, address operator) external view returns (struct Types.ServiceOperator)
+```
+
+Get operator info for a service
+
+#### getServiceOperators
+
+```solidity
+function getServiceOperators(uint64 serviceId) external view returns (address[])
+```
+
+Get the list of operators for a service
+
+#### getServiceSecurityRequirements
+
+```solidity
+function getServiceSecurityRequirements(uint64 serviceId) external view returns (struct Types.AssetSecurityRequirement[])
+```
+
+Get persisted security requirements for an active service
+
+#### getServiceEscrow
+
+```solidity
+function getServiceEscrow(uint64 serviceId) external view returns (struct PaymentLib.ServiceEscrow)
+```
+
+Get service escrow details
+
+#### getExitRequest
+
+```solidity
+function getExitRequest(uint64 serviceId, address operator) external view returns (struct Types.ExitRequest)
+```
+
+Get exit request for an operator
+
+#### getExitStatus
+
+```solidity
+function getExitStatus(uint64 serviceId, address operator) external view returns (enum Types.ExitStatus)
+```
+
+Get exit status for an operator
+
+#### getExitConfig
+
+```solidity
+function getExitConfig(uint64 serviceId) external view returns (struct Types.ExitConfig)
+```
+
+Get exit configuration for a service
+
+#### canScheduleExit
+
+```solidity
+function canScheduleExit(uint64 serviceId, address operator) external view returns (bool canExit, string reason)
+```
+
+Check if operator can schedule exit now
+
+#### getServiceSecurityCommitments
+
+```solidity
+function getServiceSecurityCommitments(uint64 serviceId, address operator) external view returns (struct Types.AssetSecurityCommitment[])
+```
+
+Get persisted security commitments for an active service by operator
+
+#### isPermittedCaller
+
+```solidity
+function isPermittedCaller(uint64 serviceId, address caller) external view returns (bool)
+```
+
+Check if address can call jobs on service
+
+#### serviceCount
+
+```solidity
+function serviceCount() external view returns (uint64)
+```
+
+Get current service count
+
+#### Events
+
+#### ServiceRequested
+
+```solidity
+event ServiceRequested(uint64 requestId, uint64 blueprintId, address requester)
+```
+
+#### ServiceRequestedWithSecurity
+
+```solidity
+event ServiceRequestedWithSecurity(uint64 requestId, uint64 blueprintId, address requester, address[] operators, struct Types.AssetSecurityRequirement[] securityRequirements)
+```
+
+#### ServiceApproved
+
+```solidity
+event ServiceApproved(uint64 requestId, address operator)
+```
+
+#### ServiceRejected
+
+```solidity
+event ServiceRejected(uint64 requestId, address operator)
+```
+
+#### ServiceActivated
+
+```solidity
+event ServiceActivated(uint64 serviceId, uint64 requestId, uint64 blueprintId)
+```
+
+#### ServiceTerminated
+
+```solidity
+event ServiceTerminated(uint64 serviceId)
+```
+
+#### OperatorJoinedService
+
+```solidity
+event OperatorJoinedService(uint64 serviceId, address operator, uint16 exposureBps)
+```
+
+#### OperatorLeftService
+
+```solidity
+event OperatorLeftService(uint64 serviceId, address operator)
+```
+
+#### SubscriptionBilled
+
+```solidity
+event SubscriptionBilled(uint64 serviceId, uint256 amount, uint64 period)
+```
diff --git a/pages/developers/api/reference/generated/ITangleJobs.mdx b/pages/developers/api/reference/generated/ITangleJobs.mdx
new file mode 100644
index 0000000..4c317e0
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleJobs.mdx
@@ -0,0 +1,87 @@
+---
+title: ITangleJobs
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleJobs
+
+Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleJobs.sol
+
+### ITangleJobs
+
+Job submission and result management interface
+
+#### Functions
+
+#### submitJob
+
+```solidity
+function submitJob(uint64 serviceId, uint8 jobIndex, bytes inputs) external payable returns (uint64 callId)
+```
+
+Submit a job to a service
+
+#### submitResult
+
+```solidity
+function submitResult(uint64 serviceId, uint64 callId, bytes result) external
+```
+
+Submit a job result (as operator)
+
+#### submitResults
+
+```solidity
+function submitResults(uint64 serviceId, uint64[] callIds, bytes[] results) external
+```
+
+Submit multiple results in one transaction
+
+#### submitAggregatedResult
+
+```solidity
+function submitAggregatedResult(uint64 serviceId, uint64 callId, bytes output, uint256 signerBitmap, uint256[2] aggregatedSignature, uint256[4] aggregatedPubkey) external
+```
+
+Submit an aggregated BLS result for a job
+
+_Only valid for jobs where requiresAggregation returns true_
+
+##### Parameters
+
+| Name | Type | Description |
+| ------------------- | ---------- | ------------------------------------------------------------------------ |
+| serviceId | uint64 | The service ID |
+| callId | uint64 | The job call ID |
+| output | bytes | The aggregated output data |
+| signerBitmap | uint256 | Bitmap indicating which operators signed (bit i = operator i in service) |
+| aggregatedSignature | uint256[2] | The aggregated BLS signature [x, y] |
+| aggregatedPubkey | uint256[4] | The aggregated public key [x0, x1, y0, y1] |
+
+#### getJobCall
+
+```solidity
+function getJobCall(uint64 serviceId, uint64 callId) external view returns (struct Types.JobCall)
+```
+
+Get job call info
+
+#### Events
+
+#### JobSubmitted
+
+```solidity
+event JobSubmitted(uint64 serviceId, uint64 callId, uint8 jobIndex, address caller, bytes inputs)
+```
+
+#### JobResultSubmitted
+
+```solidity
+event JobResultSubmitted(uint64 serviceId, uint64 callId, address operator, bytes result)
+```
+
+#### JobCompleted
+
+```solidity
+event JobCompleted(uint64 serviceId, uint64 callId)
+```
diff --git a/pages/developers/api/reference/generated/ITangleOperators.mdx b/pages/developers/api/reference/generated/ITangleOperators.mdx
new file mode 100644
index 0000000..c643d5f
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleOperators.mdx
@@ -0,0 +1,155 @@
+---
+title: ITangleOperators
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleOperators
+
+Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleOperators.sol
+
+### ITangleOperators
+
+Operator registration and management interface
+
+#### Functions
+
+#### preRegister
+
+```solidity
+function preRegister(uint64 blueprintId) external
+```
+
+Signal intent to register for a blueprint
+
+#### registerOperator
+
+```solidity
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external payable
+```
+
+Register as operator for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| blueprintId | uint64 | The blueprint to register for |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity This key is used for signing/verifying messages in the P2P gossip network and may differ from the wallet key (msg.sender) |
+| rpcAddress | string | The operator's RPC endpoint URL |
+
+#### registerOperator
+
+```solidity
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress, bytes registrationInputs) external payable
+```
+
+Register as operator providing blueprint-specific registration inputs
+
+##### Parameters
+
+| Name | Type | Description |
+| ------------------ | ------ | ----------------------------------------------- |
+| blueprintId | uint64 | |
+| ecdsaPublicKey | bytes | |
+| rpcAddress | string | |
+| registrationInputs | bytes | Encoded payload validated by blueprint's schema |
+
+#### unregisterOperator
+
+```solidity
+function unregisterOperator(uint64 blueprintId) external
+```
+
+Unregister from a blueprint
+
+#### updateOperatorPreferences
+
+```solidity
+function updateOperatorPreferences(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external
+```
+
+Update operator preferences for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------ | --------------------------------------------------------- |
+| blueprintId | uint64 | The blueprint to update preferences for |
+| ecdsaPublicKey | bytes | New ECDSA public key (pass empty bytes to keep unchanged) |
+| rpcAddress | string | New RPC endpoint (pass empty string to keep unchanged) |
+
+#### getOperatorRegistration
+
+```solidity
+function getOperatorRegistration(uint64 blueprintId, address operator) external view returns (struct Types.OperatorRegistration)
+```
+
+Get operator registration for a blueprint
+
+#### getOperatorPreferences
+
+```solidity
+function getOperatorPreferences(uint64 blueprintId, address operator) external view returns (struct Types.OperatorPreferences)
+```
+
+Get operator preferences for a blueprint (includes ECDSA public key)
+
+#### getOperatorPublicKey
+
+```solidity
+function getOperatorPublicKey(uint64 blueprintId, address operator) external view returns (bytes)
+```
+
+Get operator's ECDSA public key for gossip network identity
+
+_Returns the key used for signing/verifying gossip messages_
+
+#### isOperatorRegistered
+
+```solidity
+function isOperatorRegistered(uint64 blueprintId, address operator) external view returns (bool)
+```
+
+Check if operator is registered for a blueprint
+
+#### Events
+
+#### OperatorRegistered
+
+```solidity
+event OperatorRegistered(uint64 blueprintId, address operator, bytes ecdsaPublicKey, string rpcAddress)
+```
+
+Emitted when an operator registers for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------- | ------------------------------------------------ |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address (wallet) |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity |
+| rpcAddress | string | The operator's RPC endpoint |
+
+#### OperatorUnregistered
+
+```solidity
+event OperatorUnregistered(uint64 blueprintId, address operator)
+```
+
+#### OperatorPreferencesUpdated
+
+```solidity
+event OperatorPreferencesUpdated(uint64 blueprintId, address operator, bytes ecdsaPublicKey, string rpcAddress)
+```
+
+Emitted when an operator updates their preferences
+
+##### Parameters
+
+| Name | Type | Description |
+| -------------- | ------- | -------------------------------------------------------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address |
+| ecdsaPublicKey | bytes | The updated ECDSA public key (may be empty if unchanged) |
+| rpcAddress | string | The updated RPC endpoint (may be empty if unchanged) |
diff --git a/pages/developers/api/reference/generated/ITangleServices.mdx b/pages/developers/api/reference/generated/ITangleServices.mdx
new file mode 100644
index 0000000..d92a263
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleServices.mdx
@@ -0,0 +1,413 @@
+---
+title: ITangleServices
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleServices
+
+Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleServices.sol
+
+### ITangleServices
+
+Service lifecycle management interface
+
+#### Functions
+
+#### requestService
+
+```solidity
+function requestService(uint64 blueprintId, address[] operators, bytes config, address[] permittedCallers, uint64 ttl, address paymentToken, uint256 paymentAmount) external payable returns (uint64 requestId)
+```
+
+Request a new service
+
+#### requestServiceWithExposure
+
+```solidity
+function requestServiceWithExposure(uint64 blueprintId, address[] operators, uint16[] exposureBps, bytes config, address[] permittedCallers, uint64 ttl, address paymentToken, uint256 paymentAmount) external payable returns (uint64 requestId)
+```
+
+Request a service with explicit exposure commitments
+
+#### requestServiceWithSecurity
+
+```solidity
+function requestServiceWithSecurity(uint64 blueprintId, address[] operators, struct Types.AssetSecurityRequirement[] securityRequirements, bytes config, address[] permittedCallers, uint64 ttl, address paymentToken, uint256 paymentAmount) external payable returns (uint64 requestId)
+```
+
+Request a service with multi-asset security requirements
+
+_Each operator must provide security commitments matching these requirements when approving_
+
+#### approveService
+
+```solidity
+function approveService(uint64 requestId, uint8 restakingPercent) external
+```
+
+Approve a service request (as operator) - simple version
+
+#### approveServiceWithCommitments
+
+```solidity
+function approveServiceWithCommitments(uint64 requestId, struct Types.AssetSecurityCommitment[] commitments) external
+```
+
+Approve a service request with multi-asset security commitments
+
+_Commitments must match the security requirements specified in the request_
+
+#### rejectService
+
+```solidity
+function rejectService(uint64 requestId) external
+```
+
+Reject a service request (as operator)
+
+#### createServiceFromQuotes
+
+```solidity
+function createServiceFromQuotes(uint64 blueprintId, struct Types.SignedQuote[] quotes, bytes config, address[] permittedCallers, uint64 ttl) external payable returns (uint64 serviceId)
+```
+
+Create a service instantly using pre-signed operator quotes
+
+_No approval flow needed - operators have pre-committed via signatures_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---------------- | -------------------------- | ---------------------------------------- |
+| blueprintId | uint64 | The blueprint to use |
+| quotes | struct Types.SignedQuote[] | Array of signed quotes from operators |
+| config | bytes | Service configuration |
+| permittedCallers | address[] | Addresses allowed to call jobs |
+| ttl | uint64 | Service time-to-live (must match quotes) |
+
+#### extendServiceFromQuotes
+
+```solidity
+function extendServiceFromQuotes(uint64 serviceId, struct Types.SignedQuote[] quotes, uint64 extensionDuration) external payable
+```
+
+Extend a service using pre-signed operator quotes
+
+#### terminateService
+
+```solidity
+function terminateService(uint64 serviceId) external
+```
+
+Terminate a service (as owner)
+
+#### addPermittedCaller
+
+```solidity
+function addPermittedCaller(uint64 serviceId, address caller) external
+```
+
+Add a permitted caller to a service
+
+#### removePermittedCaller
+
+```solidity
+function removePermittedCaller(uint64 serviceId, address caller) external
+```
+
+Remove a permitted caller from a service
+
+#### joinService
+
+```solidity
+function joinService(uint64 serviceId, uint16 exposureBps) external
+```
+
+Join an active service (Dynamic membership only)
+
+#### joinServiceWithCommitments
+
+```solidity
+function joinServiceWithCommitments(uint64 serviceId, uint16 exposureBps, struct Types.AssetSecurityCommitment[] commitments) external
+```
+
+Join an active service with per-asset security commitments (Dynamic membership only)
+
+#### leaveService
+
+```solidity
+function leaveService(uint64 serviceId) external
+```
+
+Leave an active service (Dynamic membership only)
+
+#### scheduleExit
+
+```solidity
+function scheduleExit(uint64 serviceId) external
+```
+
+Schedule exit from an active service when exit queues are enabled
+
+#### executeExit
+
+```solidity
+function executeExit(uint64 serviceId) external
+```
+
+Execute a scheduled exit after the queue delay
+
+#### cancelExit
+
+```solidity
+function cancelExit(uint64 serviceId) external
+```
+
+Cancel a scheduled exit before execution
+
+#### forceExit
+
+```solidity
+function forceExit(uint64 serviceId, address operator) external
+```
+
+Force exit an operator from a service (if permitted by config)
+
+#### forceRemoveOperator
+
+```solidity
+function forceRemoveOperator(uint64 serviceId, address operator) external
+```
+
+Force remove an operator from a service (blueprint manager only)
+
+##### Parameters
+
+| Name | Type | Description |
+| --------- | ------- | ---------------------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator to remove |
+
+#### billSubscription
+
+```solidity
+function billSubscription(uint64 serviceId) external
+```
+
+Bill a subscription service for the current period
+
+#### billSubscriptionBatch
+
+```solidity
+function billSubscriptionBatch(uint64[] serviceIds) external returns (uint256 totalBilled, uint256 billedCount)
+```
+
+Bill multiple subscription services in one call
+
+#### getBillableServices
+
+```solidity
+function getBillableServices(uint64[] serviceIds) external view returns (uint64[] billable)
+```
+
+Get billable services from a list of candidates
+
+#### fundService
+
+```solidity
+function fundService(uint64 serviceId, uint256 amount) external payable
+```
+
+Fund a service escrow balance
+
+#### getServiceRequest
+
+```solidity
+function getServiceRequest(uint64 requestId) external view returns (struct Types.ServiceRequest)
+```
+
+Get service request
+
+#### getServiceRequestSecurityRequirements
+
+```solidity
+function getServiceRequestSecurityRequirements(uint64 requestId) external view returns (struct Types.AssetSecurityRequirement[])
+```
+
+Get security requirements for a service request
+
+#### getServiceRequestSecurityCommitments
+
+```solidity
+function getServiceRequestSecurityCommitments(uint64 requestId, address operator) external view returns (struct Types.AssetSecurityCommitment[])
+```
+
+Get security commitments for a service request by operator
+
+#### getService
+
+```solidity
+function getService(uint64 serviceId) external view returns (struct Types.Service)
+```
+
+Get service info
+
+#### isServiceActive
+
+```solidity
+function isServiceActive(uint64 serviceId) external view returns (bool)
+```
+
+Check if service is active
+
+#### isServiceOperator
+
+```solidity
+function isServiceOperator(uint64 serviceId, address operator) external view returns (bool)
+```
+
+Check if address is operator in service
+
+#### getServiceOperator
+
+```solidity
+function getServiceOperator(uint64 serviceId, address operator) external view returns (struct Types.ServiceOperator)
+```
+
+Get operator info for a service
+
+#### getServiceOperators
+
+```solidity
+function getServiceOperators(uint64 serviceId) external view returns (address[])
+```
+
+Get the list of operators for a service
+
+#### getServiceSecurityRequirements
+
+```solidity
+function getServiceSecurityRequirements(uint64 serviceId) external view returns (struct Types.AssetSecurityRequirement[])
+```
+
+Get persisted security requirements for an active service
+
+#### getServiceEscrow
+
+```solidity
+function getServiceEscrow(uint64 serviceId) external view returns (struct PaymentLib.ServiceEscrow)
+```
+
+Get service escrow details
+
+#### getExitRequest
+
+```solidity
+function getExitRequest(uint64 serviceId, address operator) external view returns (struct Types.ExitRequest)
+```
+
+Get exit request for an operator
+
+#### getExitStatus
+
+```solidity
+function getExitStatus(uint64 serviceId, address operator) external view returns (enum Types.ExitStatus)
+```
+
+Get exit status for an operator
+
+#### getExitConfig
+
+```solidity
+function getExitConfig(uint64 serviceId) external view returns (struct Types.ExitConfig)
+```
+
+Get exit configuration for a service
+
+#### canScheduleExit
+
+```solidity
+function canScheduleExit(uint64 serviceId, address operator) external view returns (bool canExit, string reason)
+```
+
+Check if operator can schedule exit now
+
+#### getServiceSecurityCommitments
+
+```solidity
+function getServiceSecurityCommitments(uint64 serviceId, address operator) external view returns (struct Types.AssetSecurityCommitment[])
+```
+
+Get persisted security commitments for an active service by operator
+
+#### isPermittedCaller
+
+```solidity
+function isPermittedCaller(uint64 serviceId, address caller) external view returns (bool)
+```
+
+Check if address can call jobs on service
+
+#### serviceCount
+
+```solidity
+function serviceCount() external view returns (uint64)
+```
+
+Get current service count
+
+#### Events
+
+#### ServiceRequested
+
+```solidity
+event ServiceRequested(uint64 requestId, uint64 blueprintId, address requester)
+```
+
+#### ServiceRequestedWithSecurity
+
+```solidity
+event ServiceRequestedWithSecurity(uint64 requestId, uint64 blueprintId, address requester, address[] operators, struct Types.AssetSecurityRequirement[] securityRequirements)
+```
+
+#### ServiceApproved
+
+```solidity
+event ServiceApproved(uint64 requestId, address operator)
+```
+
+#### ServiceRejected
+
+```solidity
+event ServiceRejected(uint64 requestId, address operator)
+```
+
+#### ServiceActivated
+
+```solidity
+event ServiceActivated(uint64 serviceId, uint64 requestId, uint64 blueprintId)
+```
+
+#### ServiceTerminated
+
+```solidity
+event ServiceTerminated(uint64 serviceId)
+```
+
+#### OperatorJoinedService
+
+```solidity
+event OperatorJoinedService(uint64 serviceId, address operator, uint16 exposureBps)
+```
+
+#### OperatorLeftService
+
+```solidity
+event OperatorLeftService(uint64 serviceId, address operator)
+```
+
+#### SubscriptionBilled
+
+```solidity
+event SubscriptionBilled(uint64 serviceId, uint256 amount, uint64 period)
+```
diff --git a/pages/developers/blueprint-sdk.mdx b/pages/developers/blueprint-sdk.mdx
index 90e9336..b36f08d 100644
--- a/pages/developers/blueprint-sdk.mdx
+++ b/pages/developers/blueprint-sdk.mdx
@@ -1,117 +1,104 @@
-# Gadget SDK
-
-The Blueprint SDK is a powerful toolkit designed to streamline the development of Tangle Blueprints. It provides a comprehensive set of features and tools that make building multi-party services faster, easier, and more secure.
-
-## Getting Started
-
-import TableOfContentCards from "../../components/TableOfContentCards.tsx"
-
-
+
+## Navigation
+
+
+ title: "CLI",
+ href: "/developers/cli/quickstart",
+ subItems: [
+ { title: "Install", href: "/developers/cli/installation", description: "Install cargo-tangle" },
+ { title: "Keys", href: "/developers/cli/keys", description: "Create and manage keystores" },
+ ],
+ },
+ ]}
+/>
diff --git a/pages/developers/cli/tangle.mdx b/pages/developers/cli/tangle.mdx
index 4655fc3..29322a8 100644
--- a/pages/developers/cli/tangle.mdx
+++ b/pages/developers/cli/tangle.mdx
@@ -1,283 +1,119 @@
---
-title: Tangle Blueprints
+title: Tangle CLI Blueprint Commands
---
# Tangle CLI Blueprint Commands
-This guide covers the commands available for creating, testing, and interacting with Tangle Blueprints.
-It also walks you through a full [demo](#step-by-step-demo) for creating, deploying, and running a Tangle Blueprint locally.
+This page covers the `cargo-tangle` CLI surface for creating and operating blueprints on Tangle’s EVM protocol.
-## Creating a Blueprint
+For the full command surface, use:
-We offer a template for getting started with building a Tangle Blueprint. The `create` command allows you to
-generate a new blueprint from our template or even a custom one:
-
-```shell
-cargo tangle blueprint create --name
-```
-
-Options:
-
-- `--name` (**required**): The name of the blueprint
-- `--repo` (**optional and conflicts with `--path`**): The repository to pull the template from (defaults to our blueprint template)
-- `--branch` (**optional and conflicts with `--tag`**): The branch of the template to pull from if `--repo` is specified
-- `--tag` (**optional and conflicts with `--branch`**): The tag of the template to pull from if `--repo` is specified
-- `--path` (**optional and conflicts with `--repo`**): The path to copy a template from
-
-## Deploying a Blueprint
-
-Deploy your Blueprint to the Tangle Network:
-
-```shell
-cargo tangle blueprint deploy tangle --ws-rpc-url --http-rpc-url --keystore-path
-```
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `wss://rpc.tangle.tools`, automatically uses devnet URL
- if `--devnet` is specified)
-- `--http-rpc-url`: HTTP RPC URL (default: `https://rpc.tangle.tools`, automatically uses devnet URL
- if `--devnet` is specified)
-- `--package`: The blueprint package to deploy (used for workspaces with multiple packages)
-- `--keystore-path`: Path to the keystore (default: `./keystore`)
-- `--devnet`: Run a local devnet in background for testing, with WebSocket RPC URL
- defaulting to `ws://127.0.0.1:9944` and HTTP RPC URL defaulting to `http://127.0.0.1:9944`
-
-## Listing Blueprints
-
-List Blueprints deployed on Tangle:
-
-```shell
-cargo tangle blueprint list-blueprints --ws-rpc-url
-```
-
-Alias: `lb`
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-
-## Registering for a Blueprint
-
-Register as an operator for a Blueprint:
-
-```shell
-cargo tangle blueprint register --ws-rpc-url --blueprint-id --keystore-uri
-```
-
-Alias: `reg`
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-- `--blueprint-id` (**required**): The ID of the Blueprint to register for
-- `--keystore-uri`: Path to the keystore (default: `./keystore`)
-
-## Requesting a Service
-
-Request a service from a Blueprint:
-
-```shell
-cargo tangle blueprint request-service --ws-rpc-url --blueprint-id --min-exposure-percent --max-exposure-percent --target-operators --value --keystore-uri
-```
-
-Alias: `req`
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-- `--blueprint-id` (**required**): The ID of the Blueprint to request service from
-- `--min-exposure-percent`: Minimum exposure percentage (default: `50`)
-- `--max-exposure-percent`: Maximum exposure percentage (default: `80`)
-- `--target-operators` (**required**): List of target operator account IDs
-- `--value` (**required**): Payment amount for the service
-- `--keystore-uri`: Path to the keystore (default: `./keystore`)
-
-## Listing Service Requests
-
-List pending service requests:
-
-```shell
-cargo tangle blueprint list-requests --ws-rpc-url
-```
-
-Alias: `ls`
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-
-## Accepting a Service Request
-
-Accept a service request as an operator:
-
-```shell
-cargo tangle blueprint accept-request --ws-rpc-url --min-exposure-percent --max-exposure-percent --restaking-percent --keystore-uri --request-id
-```
-
-Alias: `accept`
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-- `--min-exposure-percent`: Minimum exposure percentage (default: `50`)
-- `--max-exposure-percent`: Maximum exposure percentage (default: `80`)
-- `--restaking-percent`: Restaking percentage (default: `50`)
-- `--keystore-uri`: Path to the keystore (default: `./keystore`)
-- `--request-id` (**required**): The ID of the request to accept
-
-## Rejecting a Service Request
-
-Reject a service request as an operator:
-
-```shell
-cargo tangle blueprint reject-request --ws-rpc-url --keystore-uri --request-id
+```bash
+cargo tangle --help
+cargo tangle blueprint --help
```
-Alias: `reject`
-
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-- `--keystore-uri`: Path to the keystore (default: `./keystore`)
-- `--request-id` (**required**): The ID of the request to reject
-
-## Running a Blueprint
-
-Run a Blueprint with the specified configuration:
-
-```shell
-cargo tangle blueprint run --protocol tangle --rpc-url --keystore-path --settings-file
-```
-
-Options:
-
-- `--protocol`: Protocol to run (must be `tangle`)
-- `--rpc-url`: HTTP RPC URL (default: `http://127.0.0.1:9944`)
-- `--keystore-path`: Path to the keystore (default: `./keystore`)
-- `--binary-path`: Path to the AVS binary (optional)
-- `--network`: Type of network you are connecting to (local, testnet, mainnet) (default: `local`)
-- `--data-dir`: Data directory path (default: `./data`)
-- `--bootnodes`: Optional bootnodes to connect to
-- `--settings-file`: Path to the protocol settings env file, if not specified then
- you will be prompted for the required information (default: `./settings.env`)
-
-## Submitting a Job
-
-Submit a job to a running Blueprint:
+## Create a Blueprint
-```shell
-cargo tangle blueprint submit --ws-rpc-url --service-id --blueprint-id --keystore-uri --job --params-file --watcher
+```bash
+cargo tangle blueprint create --name
```
-Options:
-
-- `--ws-rpc-url`: WebSocket RPC URL (default: `ws://127.0.0.1:9944`)
-- `--service-id`: The service ID to submit the job to
-- `--blueprint-id` (**required**): The Blueprint ID to submit the job to
-- `--keystore-uri` (**required**): Path to the keystore
-- `--job` (**required**): The job ID to submit
-- `--params-file` (**optional**): Path to a JSON file containing job parameters
-- `--watcher` (**optional**): Whether to wait for the job to complete. If specified, the command will block until the job is completed, returning the job result.
-
-## Step-by-Step Demo
-
-Below is a complete demo for creating, deploying, and running a Tangle Blueprint. Before we get started, there are a few things to note.
-To walk through the flow of the demo, we act as two different accounts:
-
-1. The Blueprint owner
-2. The Operator
+## Generate Registration Inputs (Optional)
-The Blueprint owner is the account that will deploy the Blueprint, request service, and submit jobs.
-The Operator is the account that will respond to service requests and run Blueprints.
+If you want to generate registration inputs without sending a transaction (for review or CI):
-The Blueprint owner uses the `./deploy-keystore` keystore, while the Operator uses the `./test-keystore` keystore. Both of these
-are generated when deploying with the `--devnet` flag.
-
-### Prerequisites
-
-1. Install Cargo Tangle CLI, see [installation](./installation.mdx).
-
-We will create a new Blueprint using the `create` command. For this demo, we won't make any changes to our blueprint.
-The Blueprint generated from the template is ready to be tested as-is.
-
-```shell
- cargo tangle blueprint create --name my-blueprint
+```bash
+cargo tangle blueprint preregister \
+ --http-rpc-url https://... \
+ --ws-rpc-url wss://... \
+ --tangle-contract 0x... \
+ --restaking-contract 0x... \
+ --status-registry-contract 0x... \
+ --settings-file ./settings.env
```
-With the blueprint created, we will navigate into the blueprint's directory.
+## Register as an Operator for a Blueprint
-```shell
- cd my-blueprint
-```
+Register your operator against the on-chain protocol contracts:
-2. Deploy the Blueprint:
-
-Now we will deploy the newly created Blueprint using the `deploy` command. We use the `--devnet` flag to start a local devnet in
-background for easy testing. We will leave this terminal running to keep the testnet running.
-
-```shell
- cargo tangle blueprint deploy tangle --devnet
+```bash
+cargo tangle blueprint register \
+ --http-rpc-url https://... \
+ --ws-rpc-url wss://... \
+ --keystore-path ./keystore \
+ --tangle-contract 0x... \
+ --restaking-contract 0x... \
+ --status-registry-contract 0x... \
+ --blueprint-id \
+ --rpc-endpoint "https://operator.example.com"
```
-3. List deployed Blueprints:
+## Service Lifecycle
-In a new terminal in the blueprint's directory, we can list the deployed Blueprints using the `list-blueprints` command. This gives us some important information, namely the Blueprint ID.
+The `cargo tangle blueprint service` namespace mirrors key service lifecycle actions:
-```shell
- cargo tangle blueprint list-blueprints
-```
+- `service request` (request/approve flow)
+- `service approve` / `service reject`
+- `service join` / `service leave` (dynamic services)
+- `service list` / `service requests`
-4. Register to the deployed blueprint:
+Examples and flags are subject to change; prefer `--help` output for your installed CLI build:
-Before we can interact with the Blueprint, we need to register to it.
-
-```shell
- cargo tangle blueprint register --blueprint-id 0 --keystore-uri ./test-keystore
+```bash
+cargo tangle blueprint service --help
+cargo tangle blueprint service request --help
```
-5. Request service with another account:
+Example (operator approval flow):
-With the account that owns the Blueprint, we request service from our Operator. The target
-operator is the account that will run the Blueprint and is given in the output of the deployment.
+```bash
+cargo tangle blueprint service requests \
+ --http-rpc-url "$RPC_URL" \
+ --tangle-contract "$TANGLE_CONTRACT"
-```shell
-cargo tangle blueprint request-service --blueprint-id 0 --target-operators 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY --value 0 --keystore-uri ./deploy-keystore
+cargo tangle blueprint service approve \
+ --http-rpc-url "$RPC_URL" \
+ --tangle-contract "$TANGLE_CONTRACT" \
+ --restaking-contract "$RESTAKING_CONTRACT" \
+ --status-registry-contract "$STATUS_REGISTRY_CONTRACT" \
+ --request-id 42
```
-6. List all service requests:
+## Run the Operator Runtime
-Now that we requested service, we must find that request and accept it. So we list the service
-requests to get some information, specifically the request ID.
+Run the blueprint manager/runner against a deployment:
-```shell
-cargo tangle blueprint list-requests
+```bash
+cargo tangle blueprint run \
+ --protocol tangle-evm \
+ --http-rpc-url https://... \
+ --ws-rpc-url wss://... \
+ --keystore-path ./keystore \
+ --settings-file ./settings.env
```
-7. Accept the service request:
-
-With the account that will run the Blueprint, we accept the service request.
+For local validation only, you can spawn a single service without on-chain transactions:
-```shell
-cargo tangle blueprint accept-request --request-id 0 --keystore-uri ./test-keystore
+```bash
+cargo tangle blueprint service spawn \
+ --http-rpc-url https://... \
+ --ws-rpc-url wss://... \
+ --tangle-contract 0x... \
+ --restaking-contract 0x... \
+ --status-registry-contract 0x... \
+ --blueprint-id \
+ --service-id \
+ --dry-run
```
-8. Run the Blueprint:
+## Jobs (Submit + Watch)
-We are now ready to start running the Blueprint, so that we are able to complete any submitted jobs.
-Once we start running the Blueprint, the process will continue running until we manually stop it.
-We will leave this terminal running so we can submit a job to be completed.
-
-```shell
-cargo tangle blueprint run --protocol tangle --keystore-path ./test-keystore
+```bash
+cargo tangle blueprint jobs --help
```
-9. Submit a job for the running Blueprint to process:
-
-In a third terminal in the blueprint's directory, we run the following command to submit a job and wait for the result.
-
-```shell
-cargo tangle blueprint submit --job 0 --blueprint-id 0 --service-id 0 --watcher --keystore-uri ./deploy-keystore
-```
+## Next Reading
-You should then see the result of the job in the terminal, meaning that demo was completed successfully!
+- [Build a Tangle Blueprint](/developers/tangle-avs)
+- [Endpoints and Integration](/developers/endpoints)
diff --git a/pages/developers/system-architecture/overview.mdx b/pages/developers/system-architecture/overview.mdx
new file mode 100644
index 0000000..4a25781
--- /dev/null
+++ b/pages/developers/system-architecture/overview.mdx
@@ -0,0 +1,65 @@
+---
+title: System Architecture
+description: A system-level map of Tangle’s on-chain protocol, off-chain runtime, and how each role engages.
+---
+
+import GithubFileReaderDisplay from "/components/GithubFileReaderDisplay";
+
+# System Architecture
+
+Tangle is an EVM protocol for instantiating and operating **services (“blueprints”)** secured by restaked capital. The system is intentionally split into:
+
+- **On-chain contracts** (service lifecycle, payments, restaking, incentives, slashing)
+- **Off-chain runtime** (operators running blueprint managers/runners that react to events and submit results)
+
+## Roles and How They Engage
+
+- **Blueprint developers** publish blueprint definitions and optionally run a service manager contract.
+- **Operators** register for blueprints, run the off-chain runtime, and submit results + heartbeats.
+- **Restakers / delegators** delegate assets to operators and (optionally) constrain delegation to specific blueprints.
+- **Customers** create services (by request/approve or by signed quotes) and submit jobs.
+
+## End-to-End Flow (High Level)
+
+1. Developer **creates a blueprint** (definition + schemas + execution sources).
+2. Operators **register** for that blueprint and advertise preferences.
+3. Customer creates a service via either:
+ - **Request/approve** (customer specifies operators + security requirements), or
+ - **RFQ/quotes** (operators sign quotes and the customer creates service from those quotes).
+4. Customers submit **jobs**; operators submit **results**.
+5. Protocol distributes **fees** (developer/protocol/operator/restakers) and tracks **metrics**.
+6. Operators submit **heartbeats**; authorized parties can propose **slashes** with a dispute window.
+
+## Code Map
+
+### On-Chain (tnt-core)
+
+| Component | Responsibility | Code |
+| ------------------------ | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `Tangle` | Facet router (dispatches calls by selector) | https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/Tangle.sol |
+| `Tangle*Facet` modules | Public protocol surface (blueprints/services/jobs/payments/quotes/…) | https://github.com/tangle-network/tnt-core/tree/feature/modular-protocol/src/v2/facets/tangle |
+| `core/*` modules | Shared implementations used by facets | https://github.com/tangle-network/tnt-core/tree/feature/modular-protocol/src/v2/core |
+| `MultiAssetDelegation` | Restaking + delegation + exits + slashing application | https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/restaking/MultiAssetDelegation.sol |
+| `ServiceFeeDistributor` | Restaker fee distribution (USD-weighted, per-asset commitments) | https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/rewards/ServiceFeeDistributor.sol |
+| `OperatorStatusRegistry` | Heartbeats, QoS signals, and optional metric forwarding | https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/restaking/OperatorStatusRegistry.sol |
+| `TangleMetrics` | Lightweight activity recorder used by incentives | https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/rewards/TangleMetrics.sol |
+| `TangleMigration` | TNT legacy-chain migration claim (Merkle + SP1/ZK) | https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/packages/migration-claim/src/TangleMigration.sol |
+
+### Off-Chain (Blueprint SDK)
+
+| Component | Responsibility | Code |
+| ---------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| Manager | Loads services from chain, selects runtime sources, runs blueprints | https://github.com/tangle-network/blueprint/tree/v2/crates/manager |
+| Tangle EVM contexts | Provides typed clients + operator identity + env | https://github.com/tangle-network/blueprint/blob/v2/crates/contexts/src/tangle_evm.rs |
+| Tangle EVM producer/consumer | EVM event ingestion + result submission helpers | https://github.com/tangle-network/blueprint/tree/v2/crates/tangle-evm-extra/src |
+
+## The Entrypoint Contract (Composition)
+
+The protocol is exposed as a set of **facets** registered on the `Tangle` router. The router maps function selectors to facet implementations and delegates calls.
+
+
diff --git a/pages/operators/manager/_meta.ts b/pages/operators/manager/_meta.ts
index bb01124..0253d06 100644
--- a/pages/operators/manager/_meta.ts
+++ b/pages/operators/manager/_meta.ts
@@ -3,6 +3,9 @@ import { Meta } from "nextra";
const meta: Meta = {
introduction: "Introduction",
requirements: "Requirements",
+ setup: "Setup",
+ sizing: "Sizing",
+ security: "Sandboxing and Security",
};
export default meta;
diff --git a/pages/operators/manager/introduction.mdx b/pages/operators/manager/introduction.mdx
index 101a5b3..787cc85 100644
--- a/pages/operators/manager/introduction.mdx
+++ b/pages/operators/manager/introduction.mdx
@@ -1,3 +1,22 @@
# Blueprint Manager
-TODO
+The Blueprint Manager is the operator-side runtime that turns on-chain services into running off-chain infrastructure.
+
+At a high level, the Blueprint Manager:
+
+- Watches the chain for service lifecycle events (service activation, job calls, service termination).
+- Fetches and verifies blueprint artifacts (native binaries, containers, WASM, etc.).
+- Runs service instances in the target execution environment.
+- Submits liveness heartbeats and optional QoS metrics on-chain.
+- Handles streamed fee drips (when services use streaming payments).
+
+This page focuses on the operational role of the Blueprint Manager. For integration details, see:
+
+- [Blueprint Manager (Developer View)](/developers/blueprints/manager)
+- [Quality of Service Monitoring](/operators/quality-of-service)
+
+For operator setup and runtime choices, continue with:
+
+- [Setup](/operators/manager/setup)
+- [Runtime Requirements](/operators/manager/requirements)
+- [Sizing](/operators/manager/sizing)
diff --git a/pages/operators/manager/requirements.mdx b/pages/operators/manager/requirements.mdx
index ff40a19..9ff140a 100644
--- a/pages/operators/manager/requirements.mdx
+++ b/pages/operators/manager/requirements.mdx
@@ -27,6 +27,8 @@ No extra dependencies, the blueprint will run as a normal host process.
- This can be done by running `setcap cap_net_admin+eip /path/to/blueprint-manager`
- **_or_** simply running the `blueprint-manager` as root (**not recommended**)
+For secure production deployments, see [Sandboxing and Security](/operators/manager/security).
+
## Container Sources
The requirements for running blueprints with [Container Sources](/developers/deployment/sources/container) are:
@@ -40,13 +42,15 @@ The requirements for running blueprints with [Container Sources](/developers/dep
The requirements for running blueprints with [TEE Sources](/developers/deployment/sources/tee) are:
- [dstack VMM]
-- TODO?
+- A compatible TEE environment (requirements vary by provider and hardware)
+- Container image build pipeline for your blueprint
## WASM Sources (WIP)
The requirements for running blueprints with [WASM Sources](/developers/deployment/sources/wasm) are:
-- TODO
+- A WASM runtime compatible with the blueprint source (e.g., [Wasmtime])
+- Any additional system dependencies required by your blueprint’s host bindings (if applicable)
[GitHub CLI]: https://cli.github.com/
[cloud-hypervisor]: https://www.cloudhypervisor.org/
@@ -54,3 +58,4 @@ The requirements for running blueprints with [WASM Sources](/developers/deployme
[Docker]: https://www.docker.com/get-started/
[Kata Containers]: https://katacontainers.io/
[dstack VMM]: https://github.com/Dstack-TEE/dstack/tree/master?tab=readme-ov-file#-getting-started
+[Wasmtime]: https://wasmtime.dev/
diff --git a/pages/operators/manager/security.mdx b/pages/operators/manager/security.mdx
new file mode 100644
index 0000000..a730458
--- /dev/null
+++ b/pages/operators/manager/security.mdx
@@ -0,0 +1,42 @@
+# Sandboxing and Security
+
+Running the Blueprint Manager in production should prioritize isolation and key safety. The recommendations below assume Tangle's EVM protocol.
+
+## Recommended: VM sandbox for native blueprints (Linux)
+
+The native VM sandbox uses `cloud-hypervisor` to isolate blueprint binaries.
+
+1. Install `cloud-hypervisor` and make sure it is in `PATH`.
+2. Grant the manager `CAP_NET_ADMIN` so it can manage VM networking:
+
+```bash
+sudo setcap cap_net_admin+eip /path/to/blueprint-manager
+```
+
+3. Run with VM preferences enabled:
+
+```bash
+cargo tangle blueprint run \
+ --protocol tangle-evm \
+ --http-rpc-url "$RPC_URL" \
+ --ws-rpc-url "$WS_RPC_URL" \
+ --keystore-path ./keystore \
+ --settings-file ./settings.env \
+ --spawn-method vm
+```
+
+The manager handles kernel and disk image downloads automatically.
+
+## Containers and Kata
+
+If you deploy container-based blueprints, use a hardened runtime such as Kata Containers and follow Kubernetes best practices for least privilege.
+
+## Key and data safety
+
+- Store keystores on encrypted storage.
+- Restrict filesystem permissions to the operator user.
+- Avoid running the manager as root unless required for sandboxing.
+
+## Dry-run safety
+
+For validation or benchmarking, `cargo tangle blueprint service spawn --dry-run` runs a service runtime without submitting default on-chain transactions (registration, results, heartbeats). Custom job logic can still submit transactions if it does so explicitly. This is not a production substitute for the manager.
diff --git a/pages/operators/manager/setup.mdx b/pages/operators/manager/setup.mdx
new file mode 100644
index 0000000..a4d188b
--- /dev/null
+++ b/pages/operators/manager/setup.mdx
@@ -0,0 +1,59 @@
+# Blueprint Manager Setup
+
+This page covers the operator flow for configuring and running the Blueprint Manager against Tangle's EVM protocol.
+
+## 1) Create a settings file
+
+The manager reads protocol addresses (and optional service scope) from `settings.env`:
+
+```bash
+cat > settings.env <<'EOF'
+BLUEPRINT_ID=123
+TANGLE_CONTRACT=0x...
+RESTAKING_CONTRACT=0x...
+STATUS_REGISTRY_CONTRACT=0x...
+# SERVICE_ID=456 # optional; omit to follow all activations
+EOF
+```
+
+## 2) Start the manager
+
+```bash
+cargo tangle blueprint run \
+ --protocol tangle-evm \
+ --http-rpc-url "$RPC_URL" \
+ --ws-rpc-url "$WS_RPC_URL" \
+ --keystore-path ./keystore \
+ --settings-file ./settings.env
+```
+
+This process should run continuously. Use a process supervisor (systemd, docker, or Kubernetes) for restarts and health checks.
+
+## 3) Choose runtime preferences
+
+You can control how services are executed:
+
+- `--spawn-method` selects the preferred runtime (`native`, `vm`, `container`).
+- `--vm` or `--no-vm` force or disable the VM sandbox.
+- `--preferred-source` lets you override the blueprint's preferred source type.
+- `--save-runtime-prefs` persists `PREFERRED_SOURCE` and `USE_VM` into `settings.env`.
+
+Example:
+
+```bash
+cargo tangle blueprint run \
+ --protocol tangle-evm \
+ --http-rpc-url "$RPC_URL" \
+ --ws-rpc-url "$WS_RPC_URL" \
+ --keystore-path ./keystore \
+ --settings-file ./settings.env \
+ --spawn-method vm \
+ --save-runtime-prefs
+```
+
+## 4) Data and cache directories
+
+- `--data-dir` controls the per-service working directory (defaults to `./data`).
+- The manager maintains a cache for downloaded artifacts (defaults to `./cache`).
+
+Plan capacity based on the number of services you expect to host. See [Sizing and Capacity](/operators/manager/sizing).
diff --git a/pages/operators/manager/sizing.mdx b/pages/operators/manager/sizing.mdx
new file mode 100644
index 0000000..95d2934
--- /dev/null
+++ b/pages/operators/manager/sizing.mdx
@@ -0,0 +1,29 @@
+# Sizing and Capacity Planning
+
+Blueprints vary widely in resource needs. Use the guidance below as a starting point and adjust based on the specific blueprint workloads you operate.
+
+## Suggested tiers
+
+| Tier | Use case | vCPU | RAM | Storage | Notes |
+| --- | --- | --- | --- | --- | --- |
+| Dev / Test | Local validation, dry runs | 2-4 | 8-16 GB | 50+ GB SSD | Single service, minimal load |
+| Standard | Single blueprint, steady traffic | 8 | 32 GB | 200+ GB SSD | Good baseline for production |
+| High Throughput | Multiple services or heavy workloads | 16+ | 64-128 GB | 500+ GB NVMe | Reserve headroom for spikes |
+
+## Storage planning
+
+- Allocate space for `data_dir` (per-service state) and the manager cache.
+- Prefer SSD or NVMe for fast artifact download and startup time.
+- Budget extra space for logs, metrics, and any blueprint-specific datasets.
+
+## Network planning
+
+- Stable HTTP and WebSocket RPC endpoints are required.
+- Low latency improves job pickup time and QoS reporting.
+- Ensure inbound connectivity for your `OPERATOR_RPC_ADDRESS`.
+
+## Scaling strategies
+
+- Start with one manager instance per host.
+- Scale horizontally by running multiple operators on separate hosts and keystores.
+- Prefer the VM sandbox for untrusted or high-risk blueprints (see [Sandboxing and Security](/operators/manager/security)).
diff --git a/pages/operators/onboarding.mdx b/pages/operators/onboarding.mdx
new file mode 100644
index 0000000..e4b37fa
--- /dev/null
+++ b/pages/operators/onboarding.mdx
@@ -0,0 +1,212 @@
+---
+title: Operator Onboarding
+description: "Do this now: register, opt into blueprints, and run the operator runtime on Tangle."
+---
+
+# Operator Onboarding
+
+This page is the shortest path to becoming an operator on Tangle: register in restaking, register for blueprints, and run the runtime that executes services.
+
+## What You Need
+
+- An **EVM wallet** funded for gas and the operator bond/self-stake.
+- A host that can run your target blueprint runtimes (native, containers, or VM sandbox).
+- `foundry` (`cast`) for on-chain calls.
+- The Blueprint SDK CLI (`cargo-tangle`) for heartbeats and operational helpers.
+
+## Deployment Inputs (Fill These In)
+
+You will need:
+
+- `RPC_URL` (HTTP) and optionally `WS_RPC_URL` (WebSocket)
+- `TANGLE_CONTRACT` (core protocol contract)
+- `RESTAKING_CONTRACT` (restaking / `MultiAssetDelegation`)
+- `STATUS_REGISTRY_CONTRACT` (heartbeats; optional but recommended)
+- One or more `BLUEPRINT_ID`s you plan to operate
+- A reachable `OPERATOR_RPC_ADDRESS` you will publish (used by customers for RFQ pricing and other out-of-band calls)
+
+See also:
+
+- [Endpoints and Integration](/developers/endpoints)
+- [Contract addresses](/developers/endpoints)
+
+## 1) Register in Restaking (Required)
+
+Operator status and stake live in the restaking contract (`MultiAssetDelegation`). You must be an **active operator** before registering for any blueprint.
+
+```bash
+export RPC_URL="https://..."
+export PRIVATE_KEY="0x..."
+export RESTAKING_CONTRACT="0x..." # MultiAssetDelegation
+
+# Read minimum operator stake (native asset)
+cast call "$RESTAKING_CONTRACT" "minOperatorStake()(uint256)" --rpc-url "$RPC_URL"
+
+# Register as an operator (send at least minOperatorStake as value)
+cast send "$RESTAKING_CONTRACT" "registerOperator()" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY" \
+ --value ""
+```
+
+## 2) Opt Into Blueprints for Delegation (Recommended)
+
+The restaking contract also tracks which blueprints you support for delegation/exposure.
+
+```bash
+export BLUEPRINT_ID="123"
+cast send "$RESTAKING_CONTRACT" "addBlueprint(uint64)" "$BLUEPRINT_ID" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY"
+```
+
+Repeat for each blueprint you plan to support.
+
+## 3) Register for Blueprints in the Core Protocol
+
+Blueprint registration publishes your **operator preferences** for a specific blueprint:
+
+- `ecdsaPublicKey`: gossip/network identity key (65 bytes, uncompressed)
+- `rpcAddress`: your operator endpoint string (used by customers/off-chain tooling)
+
+### Recommended: use `cargo-tangle` (handles key formatting + optional registration inputs)
+
+Install the CLI if you haven’t:
+
+```bash
+cargo install cargo-tangle --git https://github.com/tangle-network/blueprint --branch v2 --force
+```
+
+Import (or generate) an ECDSA key into the keystore used by operator tooling:
+
+```bash
+mkdir -p ./keystore
+# Secret is hex without 0x prefix
+cargo tangle key import --keystore-path ./keystore --key-type ecdsa --secret ""
+```
+
+Then register:
+
+```bash
+export OPERATOR_RPC_ADDRESS="https://operator.example.com"
+export TANGLE_CONTRACT="0x..."
+export STATUS_REGISTRY_CONTRACT="0x..."
+
+cargo tangle blueprint register \
+ --http-rpc-url "$RPC_URL" \
+ --tangle-contract "$TANGLE_CONTRACT" \
+ --restaking-contract "$RESTAKING_CONTRACT" \
+ --status-registry-contract "$STATUS_REGISTRY_CONTRACT" \
+ --keystore-path ./keystore \
+ --blueprint-id "$BLUEPRINT_ID" \
+ --rpc-endpoint "$OPERATOR_RPC_ADDRESS"
+```
+
+### Alternative: `cast` (manual pubkey formatting)
+
+`cast wallet public-key` returns `x||y` (64 bytes). The on-chain API expects an **uncompressed** key with a `0x04` prefix (65 bytes).
+
+```bash
+ECDSA_XY=$(cast wallet public-key --private-key "$PRIVATE_KEY")
+ECDSA_PUBKEY="0x04${ECDSA_XY#0x}"
+
+cast send "$TANGLE_CONTRACT" "registerOperator(uint64,bytes,string)" \
+ "$BLUEPRINT_ID" "$ECDSA_PUBKEY" "$OPERATOR_RPC_ADDRESS" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY"
+```
+
+## 4) Run the Blueprint Manager (Required)
+
+To actually serve jobs, run the long-lived Blueprint Manager. It listens for on-chain service events and spawns the right runtime when services activate.
+
+First, create a `settings.env` with your protocol addresses:
+
+```bash
+cat > settings.env <<'EOF'
+BLUEPRINT_ID=123
+TANGLE_CONTRACT=0x...
+RESTAKING_CONTRACT=0x...
+STATUS_REGISTRY_CONTRACT=0x...
+# SERVICE_ID=456 # optional; omit to follow on-chain activations
+EOF
+```
+
+Then start the manager:
+
+```bash
+cargo tangle blueprint run \
+ --protocol tangle-evm \
+ --http-rpc-url "$RPC_URL" \
+ --ws-rpc-url "${WS_RPC_URL:-ws://localhost:8546}" \
+ --keystore-path ./keystore \
+ --settings-file ./settings.env
+```
+
+### Optional: Dry-run a single service (local validation only)
+
+If you want to validate a single service locally without submitting any on-chain transactions, use the spawn helper with `--dry-run`. This is useful for smoke tests or benchmarking before you join a service.
+
+```bash
+export SERVICE_ID="456"
+cargo tangle blueprint service spawn \
+ --http-rpc-url "$RPC_URL" \
+ --ws-rpc-url "${WS_RPC_URL:-ws://localhost:8546}" \
+ --tangle-contract "$TANGLE_CONTRACT" \
+ --restaking-contract "$RESTAKING_CONTRACT" \
+ --status-registry-contract "$STATUS_REGISTRY_CONTRACT" \
+ --keystore-path ./keystore \
+ --blueprint-id "$BLUEPRINT_ID" \
+ --service-id "$SERVICE_ID" \
+ --dry-run
+```
+
+Dry run skips operator registration, result submission, and heartbeats from the runtime. If your blueprint code submits its own transactions, those are not blocked.
+
+For production operations, keep the Blueprint Manager running and configure your preferred execution runtime(s):
+
+- [Blueprint Manager](/operators/manager/introduction)
+- [Runtime Requirements](/operators/manager/requirements)
+- [Manager Setup](/operators/manager/setup)
+
+## 5) Keep Heartbeats Healthy
+
+Heartbeats are an on-chain liveness signal and can be used as evidence during slashing disputes. Ensure your runtime is emitting them.
+
+You can also submit a heartbeat manually:
+
+```bash
+cargo tangle operator heartbeat \
+ --http-rpc-url "$RPC_URL" \
+ --tangle-contract "$TANGLE_CONTRACT" \
+ --restaking-contract "$RESTAKING_CONTRACT" \
+ --status-registry-contract "$STATUS_REGISTRY_CONTRACT" \
+ --keystore-path ./keystore \
+ --blueprint-id "$BLUEPRINT_ID" \
+ --service-id "$SERVICE_ID" \
+ --status-code 0
+```
+
+If you launched a runtime with `--dry-run`, heartbeats and result submissions are skipped by design.
+
+## 6) Optional: Manage Service Requests (CLI)
+
+The manager will auto-spawn services after activation, but you can inspect and act on requests with the CLI:
+
+```bash
+# List pending requests
+cargo tangle blueprint service requests --http-rpc-url "$RPC_URL" --tangle-contract "$TANGLE_CONTRACT"
+
+# Approve a request (operator action)
+cargo tangle blueprint service approve \
+ --http-rpc-url "$RPC_URL" \
+ --tangle-contract "$TANGLE_CONTRACT" \
+ --restaking-contract "$RESTAKING_CONTRACT" \
+ --status-registry-contract "$STATUS_REGISTRY_CONTRACT" \
+ --request-id 42
+```
+
+## Next
+
+- Pricing server (RFQ): [Blueprint Pricing](/operators/pricing/overview)
+- QoS dashboards: [Quality of Service](/operators/quality-of-service)
diff --git a/pages/operators/operator/join_operator/join.mdx b/pages/operators/operator/join_operator/join.mdx
index 5a2bd4e..6041c42 100644
--- a/pages/operators/operator/join_operator/join.mdx
+++ b/pages/operators/operator/join_operator/join.mdx
@@ -1,41 +1,38 @@
## Operators
-Operators are noderunners that have tokens at stake and choose to restake them to enable participation in roles, which conduct the jobs produced by a blueprint instance. In esssence, Operators are service providers whose effectiveness and security is guarenteed by their restaked assets.
+Operators are service providers who restake assets to run blueprint services. Restaking gives customers and developers an enforceable security boundary (exposure + slashing) around off-chain work.
### Joining as an Operator
-To participate in restaking, a user can join as an operator by providing a bond amount through the ``join_operators function. This registers the user as an operator and locks their bond, which is necessary for participating in the network and receiving rewards.
+This page covers **restaking-layer** operator registration (becoming an active operator in `MultiAssetDelegation`). You must also register for each blueprint you want to operate in the core protocol.
-### Step 1: Access the PolkadotJS Interface
+- Full guide: [Operator Onboarding](/operators/onboarding)
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
+### Step 1: Prepare an EVM wallet
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
+- Use an EVM wallet (e.g., MetaMask/Rabby) and ensure you’re connected to the correct EVM chain where Tangle is deployed.
+- Ensure you have enough balance to cover the operator bond and gas.
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
+### Step 2: Register as an Operator
-### Step 2: Join as an Operator
+Operator registration is performed by calling the restaking contract’s `registerOperator()` function and sending the required bond amount.
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
+Use Foundry’s `cast`:
-
+```bash
+# Set these for your deployment
+export RPC_URL="https://..."
+export PRIVATE_KEY="0x..."
+export RESTAKING_CONTRACT="0x..." # MultiAssetDelegation contract
-- Under the **MultiAssetDelegation** section, select **Join Operators** and enter the bond amount.
+# Read the minimum operator bond (native asset)
+cast call "$RESTAKING_CONTRACT" "minOperatorStake()(uint256)" --rpc-url "$RPC_URL"
-
+# Register (send at least the minOperatorStake as value)
+cast send "$RESTAKING_CONTRACT" "registerOperator()" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY" \
+ --value ""
+```
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
-
-
-
-If successful, you should see the following confirmation toast notification:
-
-
-
-Lets break down the events, navigate to the **Network** tab, you should see the following events:
-
-
-
-- multi_asset_delegation.OperatorJoined : tells you that the operator has joined successfully.
+If successful, the transaction emits `OperatorRegistered(operator, stake)`.
diff --git a/pages/operators/operator/join_operator/leave.mdx b/pages/operators/operator/join_operator/leave.mdx
index b040a10..20e06af 100644
--- a/pages/operators/operator/join_operator/leave.mdx
+++ b/pages/operators/operator/join_operator/leave.mdx
@@ -1,88 +1,35 @@
## Leave as an Operator
-Operators can leave the operator role by unstaking their tokens. The leave process is similar to the unstake process, which means its a two step process, first you schedule a leave operation
-and then you execute the leave operation after the leave delay period has passed. You can cancel the leave operation before it is executed.
+Operators can leave the operator role by scheduling a leave and then completing it after the leave delay period has passed.
## Schedule Operator Leave
-### Step 1: Access the PolkadotJS Interface
+### Step 1: Schedule Operator Leave
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
+Ensure you have joined as an operator first, see [Join as an Operator](./join).
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
+```bash
+export RPC_URL="https://..."
+export PRIVATE_KEY="0x..."
+export RESTAKING_CONTRACT="0x..." # MultiAssetDelegation contract
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
-
-### Step 2: Schedule Operator Leave
-
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx).
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Schedule Operator Leave**
-
-
-
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
+cast send "$RESTAKING_CONTRACT" "startLeaving()" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY"
+```
If successful, your leave will be scheduled.
-## Cancel Operator Leave
-
-### Step 1: Access the PolkadotJS Interface
-
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
-
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
-
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
-
-### Step 2: Cancel Operator Unstake
-
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx) and have scheduled an leave.
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Cancel Operator Leave**
-
-
-
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
-
-If successful, your unstake will be canceled.
-
## Execute Operator Leave
-### Step 1: Access the PolkadotJS Interface
-
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
-
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
-
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
-
### Step 2: Execute Operator Leave
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx) and have scheduled a leave, also ensure the leave delay period has passed.
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Execute Operator Leave**
-
-
+Ensure you have scheduled a leave and the leave delay period has passed.
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
+```bash
+cast send "$RESTAKING_CONTRACT" "completeLeaving()" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY"
+```
If successful, you will no longer be an operator.
diff --git a/pages/operators/operator/join_operator/stake.mdx b/pages/operators/operator/join_operator/stake.mdx
index 675b509..5a2d734 100644
--- a/pages/operators/operator/join_operator/stake.mdx
+++ b/pages/operators/operator/join_operator/stake.mdx
@@ -1,125 +1,50 @@
## Staking as an Operator
-Operators can increase their stake to participate to increase their chances of being selected for roles or to signal their commitment to the network.
+Operators can increase their self-stake to increase capacity, qualify for higher minimums, or signal commitment to customers.
## Bond More
-### Step 1: Access the PolkadotJS Interface
+### Increase Operator Stake (Native)
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
+Operators can increase their self-stake by calling `increaseStake()` and sending value.
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
+```bash
+export RPC_URL="https://..."
+export PRIVATE_KEY="0x..."
+export RESTAKING_CONTRACT="0x..." # MultiAssetDelegation contract
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
+cast send "$RESTAKING_CONTRACT" "increaseStake()" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY" \
+ --value ""
+```
-### Step 2: Bond More as an Operator
-
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx).
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Operator Bond More** and enter the bond amount.
-
-
-
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
-
-
-
-If successful, you should see the following confirmation toast notification:
-
-
+If successful, the transaction emits `OperatorStakeIncreased(operator, amount)`.
## Schedule Operator Unstake
-### Step 1: Access the PolkadotJS Interface
-
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
-
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
+### Step 1: Schedule Operator Unstake
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
+Ensure you have joined as an operator first, see [Join as an Operator](./join).
-### Step 2: Schedule Operator Unstake
-
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx).
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Schedule Operator Unstake** and enter the amount to unstake.
-
-
-
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
-
-
+```bash
+cast send "$RESTAKING_CONTRACT" "scheduleOperatorUnstake(uint256)" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY"
+```
If successful, your tokens will be unlocked after the unstake delay period.
-## Cancel Operator Unstake
-
-### Step 1: Access the PolkadotJS Interface
-
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
-
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
-
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
-
-### Step 2: Cancel Operator Unstake
-
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx) and have scheduled an unstake.
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Cancel Operator Unstake** and enter the amount to cancel.
-
-
-
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
-
-
-
-If successful, your unstake will be canceled.
-
## Execute Operator Unstake
-### Step 1: Access the PolkadotJS Interface
-
-- Open [PolkadotJS Apps](https://polkadot.js.org/apps/).
-- Connect to the Tangle Network by selecting the appropriate network from the dropdown list.
-
-For convenience, here are the PolkadotJS direct links for Tangle Testnet and Mainnet:
-
-- Tangle Testnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet-rpc.tangle.tools#/explorer
-- Tangle Mainnet: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.tangle.tools#/explorer
-
### Step 2: Execute Operator Unstake
-Ensure you have joined as an operator first, see [Join as an Operator](./join.mdx) and have scheduled an unstake, also ensure the unstake delay period has passed.
-
-- Navigate to the **Developer** → **Extrinsics** tab on PolkadotJS.
-
-
-
-- Under the **MultiAssetDelegation** section, select **Execute Operator Unstake**
-
-
-
-Sign and submit the transaction. Make sure the account you are using has enough balance to cover the transaction fee and bond.
+Ensure you have scheduled an unstake and the delay period has passed.
-
+```bash
+cast send "$RESTAKING_CONTRACT" "executeOperatorUnstake()" \
+ --rpc-url "$RPC_URL" \
+ --private-key "$PRIVATE_KEY"
+```
If successful, all unstaked tokens will be unlocked and returned to the operator.
diff --git a/scripts/solidity-docgen/templates/helpers/index.cjs b/scripts/solidity-docgen/templates/helpers/index.cjs
new file mode 100644
index 0000000..e289438
--- /dev/null
+++ b/scripts/solidity-docgen/templates/helpers/index.cjs
@@ -0,0 +1,37 @@
+const path = require("path");
+
+function stripSol(value) {
+ if (typeof value !== "string") return value;
+ return value.replace(/\\.sol$/i, "");
+}
+
+function basenameNoExt(value) {
+ if (typeof value !== "string") return value;
+ const base = path.basename(value);
+ return base.replace(/\\.sol$/i, "");
+}
+
+function githubSourceUrl(absolutePath) {
+ if (typeof absolutePath !== "string") return "";
+ const repoRoot =
+ process.env.TNT_CORE_DIR && process.env.TNT_CORE_DIR.length > 0
+ ? path.resolve(process.env.TNT_CORE_DIR)
+ : path.resolve(process.cwd(), "../tnt-core");
+ const repo =
+ process.env.TNT_CORE_GITHUB_REPO && process.env.TNT_CORE_GITHUB_REPO.length > 0
+ ? process.env.TNT_CORE_GITHUB_REPO
+ : "https://github.com/tangle-network/tnt-core";
+
+ const ref =
+ process.env.TNT_CORE_GITHUB_REF && process.env.TNT_CORE_GITHUB_REF.length > 0
+ ? process.env.TNT_CORE_GITHUB_REF
+ : "feature/modular-protocol";
+ const rel = path.relative(repoRoot, absolutePath).split(path.sep).join("/");
+ return `${repo}/blob/${ref}/${rel}`;
+}
+
+module.exports = {
+ stripSol,
+ basenameNoExt,
+ githubSourceUrl,
+};
From 4b484da406558d96d050af641662132aa0e92ea2 Mon Sep 17 00:00:00 2001
From: Drew Stone
Date: Mon, 12 Jan 2026 14:14:26 -0600
Subject: [PATCH 02/14] docs: refresh rewards narrative and api reference for
v2
- document 20/20/40/20 fee split and updated restaker/operator/developer flows
- add claiming cheatsheet with batch claim guidance and multicall notes
- update reward system narrative, metrics/scoring, and tokenomics usage pages
- restore generated v2 API reference pages and add ITanglePaymentsInternal
---
.../api/reference/BlueprintHookBase.mdx | 143 ++++
.../api/reference/IBlueprintHook.mdx | 227 ++++++
.../reference/IBlueprintServiceManager.mdx | 656 ++++++++++++++++
pages/developers/api/reference/IERC7540.mdx | 15 +
.../api/reference/IERC7540Deposit.mdx | 91 +++
.../api/reference/IERC7540Operator.mdx | 67 ++
.../api/reference/IERC7540Redeem.mdx | 91 +++
.../api/reference/IFacetSelectors.mdx | 23 +
.../api/reference/IMBSMRegistry.mdx | 101 +++
.../IMasterBlueprintServiceManager.mdx | 31 +
.../api/reference/IMetricsRecorder.mdx | 211 +++++
.../api/reference/IMultiAssetDelegation.mdx | 740 ++++++++++++++++++
.../api/reference/IPaymentAdapterRegistry.mdx | 126 +++
pages/developers/api/reference/IRestaking.mdx | 307 ++++++++
.../api/reference/IRestakingAdmin.mdx | 59 ++
.../api/reference/IRewardsManager.mdx | 88 +++
.../api/reference/ISablierAdapter.mdx | 163 ++++
.../api/reference/IServiceFeeDistributor.mdx | 158 ++++
.../reference/IStreamingPaymentAdapter.mdx | 317 ++++++++
.../reference/IStreamingPaymentManager.mdx | 79 ++
.../api/reference/ISuperfluidAdapter.mdx | 130 +++
pages/developers/api/reference/ITangle.mdx | 16 +
.../developers/api/reference/ITangleAdmin.mdx | 249 ++++++
.../api/reference/ITangleBlueprints.mdx | 157 ++++
.../developers/api/reference/ITangleFull.mdx | 13 +
.../api/reference/ITangleGovernance.mdx | 272 +++++++
.../developers/api/reference/ITangleJobs.mdx | 23 +-
.../api/reference/ITangleOperators.mdx | 67 +-
.../api/reference/ITanglePaymentsInternal.mdx | 25 +
.../api/reference/ITangleRewards.mdx | 81 ++
.../api/reference/ITangleSecurityView.mdx | 45 ++
.../api/reference/ITangleServices.mdx | 27 +-
.../api/reference/ITangleSlashing.mdx | 108 +++
.../developers/api/reference/ITangleToken.mdx | 95 +++
.../reference/generated/BlueprintHookBase.mdx | 143 ++++
.../reference/generated/IBlueprintHook.mdx | 227 ++++++
.../generated/IBlueprintServiceManager.mdx | 656 ++++++++++++++++
.../api/reference/generated/IERC7540.mdx | 15 +
.../reference/generated/IERC7540Deposit.mdx | 91 +++
.../reference/generated/IERC7540Operator.mdx | 67 ++
.../reference/generated/IERC7540Redeem.mdx | 91 +++
.../reference/generated/IFacetSelectors.mdx | 23 +
.../api/reference/generated/IMBSMRegistry.mdx | 101 +++
.../IMasterBlueprintServiceManager.mdx | 31 +
.../reference/generated/IMetricsRecorder.mdx | 211 +++++
.../generated/IMultiAssetDelegation.mdx | 740 ++++++++++++++++++
.../generated/IPaymentAdapterRegistry.mdx | 126 +++
.../api/reference/generated/IRestaking.mdx | 307 ++++++++
.../reference/generated/IRestakingAdmin.mdx | 59 ++
.../reference/generated/IRewardsManager.mdx | 88 +++
.../reference/generated/ISablierAdapter.mdx | 163 ++++
.../generated/IServiceFeeDistributor.mdx | 158 ++++
.../generated/IStreamingPaymentAdapter.mdx | 317 ++++++++
.../generated/IStreamingPaymentManager.mdx | 79 ++
.../generated/ISuperfluidAdapter.mdx | 130 +++
.../api/reference/generated/ITangle.mdx | 16 +
.../api/reference/generated/ITangleAdmin.mdx | 249 ++++++
.../reference/generated/ITangleBlueprints.mdx | 157 ++++
.../api/reference/generated/ITangleFull.mdx | 13 +
.../reference/generated/ITangleGovernance.mdx | 272 +++++++
.../api/reference/generated/ITangleJobs.mdx | 23 +-
.../reference/generated/ITangleOperators.mdx | 67 +-
.../generated/ITanglePaymentsInternal.mdx | 25 +
.../reference/generated/ITangleRewards.mdx | 81 ++
.../generated/ITangleSecurityView.mdx | 45 ++
.../reference/generated/ITangleServices.mdx | 27 +-
.../reference/generated/ITangleSlashing.mdx | 108 +++
.../api/reference/generated/ITangleToken.mdx | 95 +++
pages/developers/protocol-architecture.mdx | 41 +
.../system-architecture/rewards.mdx | 86 ++
pages/network/incentives-developers.mdx | 49 +-
pages/network/incentives-overview.mdx | 45 +-
pages/network/incentives-restakers.mdx | 167 +---
pages/network/metrics-and-scoring.mdx | 49 ++
pages/network/tokenomics/usage.mdx | 30 +-
pages/operators/onboarding.mdx | 22 +-
.../operators/operator/join_operator/join.mdx | 8 +-
.../how_to_restake_tangle/delegate.mdx | 6 +-
.../how_to_restake_tangle/deposit.mdx | 2 +-
pages/restake/incentives/_meta.ts | 1 +
pages/restake/incentives/claiming.mdx | 107 +++
pages/restake/incentives/configs.mdx | 52 +-
pages/restake/incentives/how_rewards_work.mdx | 99 ++-
pages/restake/incentives/vaults.mdx | 60 +-
84 files changed, 10432 insertions(+), 394 deletions(-)
create mode 100644 pages/developers/api/reference/BlueprintHookBase.mdx
create mode 100644 pages/developers/api/reference/IBlueprintHook.mdx
create mode 100644 pages/developers/api/reference/IBlueprintServiceManager.mdx
create mode 100644 pages/developers/api/reference/IERC7540.mdx
create mode 100644 pages/developers/api/reference/IERC7540Deposit.mdx
create mode 100644 pages/developers/api/reference/IERC7540Operator.mdx
create mode 100644 pages/developers/api/reference/IERC7540Redeem.mdx
create mode 100644 pages/developers/api/reference/IFacetSelectors.mdx
create mode 100644 pages/developers/api/reference/IMBSMRegistry.mdx
create mode 100644 pages/developers/api/reference/IMasterBlueprintServiceManager.mdx
create mode 100644 pages/developers/api/reference/IMetricsRecorder.mdx
create mode 100644 pages/developers/api/reference/IMultiAssetDelegation.mdx
create mode 100644 pages/developers/api/reference/IPaymentAdapterRegistry.mdx
create mode 100644 pages/developers/api/reference/IRestaking.mdx
create mode 100644 pages/developers/api/reference/IRestakingAdmin.mdx
create mode 100644 pages/developers/api/reference/IRewardsManager.mdx
create mode 100644 pages/developers/api/reference/ISablierAdapter.mdx
create mode 100644 pages/developers/api/reference/IServiceFeeDistributor.mdx
create mode 100644 pages/developers/api/reference/IStreamingPaymentAdapter.mdx
create mode 100644 pages/developers/api/reference/IStreamingPaymentManager.mdx
create mode 100644 pages/developers/api/reference/ISuperfluidAdapter.mdx
create mode 100644 pages/developers/api/reference/ITangle.mdx
create mode 100644 pages/developers/api/reference/ITangleAdmin.mdx
create mode 100644 pages/developers/api/reference/ITangleBlueprints.mdx
create mode 100644 pages/developers/api/reference/ITangleFull.mdx
create mode 100644 pages/developers/api/reference/ITangleGovernance.mdx
create mode 100644 pages/developers/api/reference/ITanglePaymentsInternal.mdx
create mode 100644 pages/developers/api/reference/ITangleRewards.mdx
create mode 100644 pages/developers/api/reference/ITangleSecurityView.mdx
create mode 100644 pages/developers/api/reference/ITangleSlashing.mdx
create mode 100644 pages/developers/api/reference/ITangleToken.mdx
create mode 100644 pages/developers/api/reference/generated/BlueprintHookBase.mdx
create mode 100644 pages/developers/api/reference/generated/IBlueprintHook.mdx
create mode 100644 pages/developers/api/reference/generated/IBlueprintServiceManager.mdx
create mode 100644 pages/developers/api/reference/generated/IERC7540.mdx
create mode 100644 pages/developers/api/reference/generated/IERC7540Deposit.mdx
create mode 100644 pages/developers/api/reference/generated/IERC7540Operator.mdx
create mode 100644 pages/developers/api/reference/generated/IERC7540Redeem.mdx
create mode 100644 pages/developers/api/reference/generated/IFacetSelectors.mdx
create mode 100644 pages/developers/api/reference/generated/IMBSMRegistry.mdx
create mode 100644 pages/developers/api/reference/generated/IMasterBlueprintServiceManager.mdx
create mode 100644 pages/developers/api/reference/generated/IMetricsRecorder.mdx
create mode 100644 pages/developers/api/reference/generated/IMultiAssetDelegation.mdx
create mode 100644 pages/developers/api/reference/generated/IPaymentAdapterRegistry.mdx
create mode 100644 pages/developers/api/reference/generated/IRestaking.mdx
create mode 100644 pages/developers/api/reference/generated/IRestakingAdmin.mdx
create mode 100644 pages/developers/api/reference/generated/IRewardsManager.mdx
create mode 100644 pages/developers/api/reference/generated/ISablierAdapter.mdx
create mode 100644 pages/developers/api/reference/generated/IServiceFeeDistributor.mdx
create mode 100644 pages/developers/api/reference/generated/IStreamingPaymentAdapter.mdx
create mode 100644 pages/developers/api/reference/generated/IStreamingPaymentManager.mdx
create mode 100644 pages/developers/api/reference/generated/ISuperfluidAdapter.mdx
create mode 100644 pages/developers/api/reference/generated/ITangle.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleAdmin.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleBlueprints.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleFull.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleGovernance.mdx
create mode 100644 pages/developers/api/reference/generated/ITanglePaymentsInternal.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleRewards.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleSecurityView.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleSlashing.mdx
create mode 100644 pages/developers/api/reference/generated/ITangleToken.mdx
create mode 100644 pages/developers/protocol-architecture.mdx
create mode 100644 pages/developers/system-architecture/rewards.mdx
create mode 100644 pages/network/metrics-and-scoring.mdx
create mode 100644 pages/restake/incentives/claiming.mdx
diff --git a/pages/developers/api/reference/BlueprintHookBase.mdx b/pages/developers/api/reference/BlueprintHookBase.mdx
new file mode 100644
index 0000000..adca2a8
--- /dev/null
+++ b/pages/developers/api/reference/BlueprintHookBase.mdx
@@ -0,0 +1,143 @@
+---
+title: BlueprintHookBase
+description: Auto-generated Solidity API reference.
+---
+
+# BlueprintHookBase
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IBlueprintHook.sol
+
+### BlueprintHookBase
+
+Base implementation with sensible defaults
+
+_For full features, extend BlueprintServiceManagerBase instead_
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64, address) external virtual
+```
+
+#### onOperatorRegister
+
+```solidity
+function onOperatorRegister(uint64, address, bytes) external virtual returns (bool)
+```
+
+#### onOperatorUnregister
+
+```solidity
+function onOperatorUnregister(uint64, address) external virtual
+```
+
+#### onServiceRequest
+
+```solidity
+function onServiceRequest(uint64, uint64, address, address[], bytes) external payable virtual returns (bool)
+```
+
+#### onServiceApprove
+
+```solidity
+function onServiceApprove(uint64, address, uint8) external virtual
+```
+
+#### onServiceReject
+
+```solidity
+function onServiceReject(uint64, address) external virtual
+```
+
+#### onServiceActivated
+
+```solidity
+function onServiceActivated(uint64, uint64, address, address[]) external virtual
+```
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64, address) external virtual
+```
+
+#### canJoin
+
+```solidity
+function canJoin(uint64, address, uint16) external view virtual returns (bool)
+```
+
+#### canLeave
+
+```solidity
+function canLeave(uint64, address) external view virtual returns (bool)
+```
+
+#### onJobSubmitted
+
+```solidity
+function onJobSubmitted(uint64, uint64, uint8, address, bytes) external payable virtual returns (bool)
+```
+
+#### onJobResult
+
+```solidity
+function onJobResult(uint64, uint64, address, bytes) external virtual returns (bool)
+```
+
+#### onJobCompleted
+
+```solidity
+function onJobCompleted(uint64, uint64, uint32) external virtual
+```
+
+#### onSlashProposed
+
+```solidity
+function onSlashProposed(uint64, address, uint256, bytes32) external virtual returns (bool)
+```
+
+#### onSlashApplied
+
+```solidity
+function onSlashApplied(uint64, address, uint256) external virtual
+```
+
+#### getDeveloperPaymentAddress
+
+```solidity
+function getDeveloperPaymentAddress(uint64) external view virtual returns (address payable)
+```
+
+#### isPaymentTokenAllowed
+
+```solidity
+function isPaymentTokenAllowed(address) external view virtual returns (bool)
+```
+
+#### getRequiredResultCount
+
+```solidity
+function getRequiredResultCount(uint64, uint8) external view virtual returns (uint32)
+```
+
+#### requiresAggregation
+
+```solidity
+function requiresAggregation(uint64, uint8) external view virtual returns (bool)
+```
+
+#### getAggregationThreshold
+
+```solidity
+function getAggregationThreshold(uint64, uint8) external view virtual returns (uint16, uint8)
+```
+
+#### onAggregatedResult
+
+```solidity
+function onAggregatedResult(uint64, uint64, uint256, bytes) external virtual
+```
+
diff --git a/pages/developers/api/reference/IBlueprintHook.mdx b/pages/developers/api/reference/IBlueprintHook.mdx
new file mode 100644
index 0000000..f5ec487
--- /dev/null
+++ b/pages/developers/api/reference/IBlueprintHook.mdx
@@ -0,0 +1,227 @@
+---
+title: IBlueprintHook
+description: Auto-generated Solidity API reference.
+---
+
+# IBlueprintHook
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IBlueprintHook.sol
+
+### IBlueprintHook
+
+Simplified hook interface for basic blueprint customization
+
+_For full control, implement IBlueprintServiceManager directly.
+ This interface provides a simpler subset for common use cases.
+
+Migration path:
+- Simple blueprints: Use IBlueprintHook / BlueprintHookBase
+- Full-featured blueprints: Use IBlueprintServiceManager / BlueprintServiceManagerBase_
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64 blueprintId, address owner) external
+```
+
+Called when blueprint is created
+
+#### onOperatorRegister
+
+```solidity
+function onOperatorRegister(uint64 blueprintId, address operator, bytes data) external returns (bool accept)
+```
+
+Called when an operator registers
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept registration |
+
+#### onOperatorUnregister
+
+```solidity
+function onOperatorUnregister(uint64 blueprintId, address operator) external
+```
+
+Called when an operator unregisters
+
+#### onServiceRequest
+
+```solidity
+function onServiceRequest(uint64 requestId, uint64 blueprintId, address requester, address[] operators, bytes config) external payable returns (bool accept)
+```
+
+Called when a service is requested
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept request |
+
+#### onServiceApprove
+
+```solidity
+function onServiceApprove(uint64 requestId, address operator, uint8 restakingPercent) external
+```
+
+Called when an operator approves a service request
+
+#### onServiceReject
+
+```solidity
+function onServiceReject(uint64 requestId, address operator) external
+```
+
+Called when an operator rejects a service request
+
+#### onServiceActivated
+
+```solidity
+function onServiceActivated(uint64 serviceId, uint64 requestId, address owner, address[] operators) external
+```
+
+Called when service becomes active
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64 serviceId, address owner) external
+```
+
+Called when service is terminated
+
+#### canJoin
+
+```solidity
+function canJoin(uint64 serviceId, address operator, uint16 exposureBps) external view returns (bool)
+```
+
+Check if operator can join a dynamic service
+
+#### canLeave
+
+```solidity
+function canLeave(uint64 serviceId, address operator) external view returns (bool)
+```
+
+Check if operator can leave a dynamic service
+
+#### onJobSubmitted
+
+```solidity
+function onJobSubmitted(uint64 serviceId, uint64 callId, uint8 jobIndex, address caller, bytes inputs) external payable returns (bool accept)
+```
+
+Called when a job is submitted
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept job |
+
+#### onJobResult
+
+```solidity
+function onJobResult(uint64 serviceId, uint64 callId, address operator, bytes result) external returns (bool accept)
+```
+
+Called when an operator submits a result
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept result |
+
+#### onJobCompleted
+
+```solidity
+function onJobCompleted(uint64 serviceId, uint64 callId, uint32 resultCount) external
+```
+
+Called when a job is marked complete
+
+#### onSlashProposed
+
+```solidity
+function onSlashProposed(uint64 serviceId, address operator, uint256 amount, bytes32 evidence) external returns (bool approve)
+```
+
+Called before a slash is applied
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| approve | bool | True to approve slash |
+
+#### onSlashApplied
+
+```solidity
+function onSlashApplied(uint64 serviceId, address operator, uint256 amount) external
+```
+
+Called after a slash is applied
+
+#### getDeveloperPaymentAddress
+
+```solidity
+function getDeveloperPaymentAddress(uint64 serviceId) external view returns (address payable)
+```
+
+Get the developer payment address
+
+#### isPaymentTokenAllowed
+
+```solidity
+function isPaymentTokenAllowed(address token) external view returns (bool)
+```
+
+Check if a payment token is allowed
+
+#### getRequiredResultCount
+
+```solidity
+function getRequiredResultCount(uint64 serviceId, uint8 jobIndex) external view returns (uint32)
+```
+
+Get the number of results required for job completion
+
+#### requiresAggregation
+
+```solidity
+function requiresAggregation(uint64 serviceId, uint8 jobIndex) external view returns (bool)
+```
+
+Check if a job requires BLS aggregated results
+
+#### getAggregationThreshold
+
+```solidity
+function getAggregationThreshold(uint64 serviceId, uint8 jobIndex) external view returns (uint16 thresholdBps, uint8 thresholdType)
+```
+
+Get the aggregation threshold configuration for a job
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| thresholdBps | uint16 | Threshold in basis points (6700 = 67%) |
+| thresholdType | uint8 | 0 = CountBased (% of operators), 1 = StakeWeighted (% of total stake) |
+
+#### onAggregatedResult
+
+```solidity
+function onAggregatedResult(uint64 serviceId, uint64 callId, uint256 signerBitmap, bytes output) external
+```
+
+Called when an aggregated result is submitted
+
diff --git a/pages/developers/api/reference/IBlueprintServiceManager.mdx b/pages/developers/api/reference/IBlueprintServiceManager.mdx
new file mode 100644
index 0000000..ac1fc29
--- /dev/null
+++ b/pages/developers/api/reference/IBlueprintServiceManager.mdx
@@ -0,0 +1,656 @@
+---
+title: IBlueprintServiceManager
+description: Auto-generated Solidity API reference.
+---
+
+# IBlueprintServiceManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IBlueprintServiceManager.sol
+
+### IBlueprintServiceManager
+
+Full interface for blueprint-specific service managers
+
+_Blueprint developers implement this to customize all aspects of their blueprint.
+ This is the primary integration point for blueprint developers - implement the hooks
+ you need and leave others as default (via BlueprintServiceManagerBase).
+
+The lifecycle flow:
+1. Blueprint created → onBlueprintCreated
+2. Operators register → onRegister
+3. Service requested → onRequest
+4. Operators approve → onApprove
+5. Service activated → onServiceInitialized
+6. Jobs submitted → onJobCall
+7. Results submitted → onJobResult
+8. Service terminated → onServiceTermination_
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64 blueprintId, address owner, address tangleCore) external
+```
+
+Called when blueprint is created
+
+_Store the blueprintId and tangleCore address for future reference_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The new blueprint ID |
+| owner | address | The blueprint owner |
+| tangleCore | address | The address of the Tangle core contract |
+
+#### onRegister
+
+```solidity
+function onRegister(address operator, bytes registrationInputs) external payable
+```
+
+Called when an operator registers to this blueprint
+
+_Validate operator requirements here (stake, reputation, etc.)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator's address |
+| registrationInputs | bytes | Custom registration data (blueprint-specific encoding) |
+
+#### onUnregister
+
+```solidity
+function onUnregister(address operator) external
+```
+
+Called when an operator unregisters from this blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator's address |
+
+#### onUpdatePreferences
+
+```solidity
+function onUpdatePreferences(address operator, bytes newPreferences) external payable
+```
+
+Called when an operator updates their preferences (RPC address, etc.)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator's address |
+| newPreferences | bytes | Updated preferences data |
+
+#### getHeartbeatInterval
+
+```solidity
+function getHeartbeatInterval(uint64 serviceId) external view returns (bool useDefault, uint64 interval)
+```
+
+Get the heartbeat interval for a service
+
+_Operators must submit heartbeats within this interval_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default, false to use custom value |
+| interval | uint64 | Heartbeat interval in blocks (0 = disabled) |
+
+#### getHeartbeatThreshold
+
+```solidity
+function getHeartbeatThreshold(uint64 serviceId) external view returns (bool useDefault, uint8 threshold)
+```
+
+Get the heartbeat threshold for a service
+
+_Percentage of operators that must respond within interval_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default |
+| threshold | uint8 | Threshold percentage (0-100) |
+
+#### getSlashingWindow
+
+```solidity
+function getSlashingWindow(uint64 serviceId) external view returns (bool useDefault, uint64 window)
+```
+
+Get the slashing window for a service
+
+_Time window for disputes before slash is finalized_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default |
+| window | uint64 | Slashing window in blocks |
+
+#### getExitConfig
+
+```solidity
+function getExitConfig(uint64 serviceId) external view returns (bool useDefault, uint64 minCommitmentDuration, uint64 exitQueueDuration, bool forceExitAllowed)
+```
+
+Get the exit configuration for operator departures
+
+_Defines minimum commitment and exit queue timing_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default |
+| minCommitmentDuration | uint64 | Minimum time operator must stay after joining (seconds) |
+| exitQueueDuration | uint64 | Time between scheduling exit and completing it (seconds) |
+| forceExitAllowed | bool | Whether service owner can force-exit operators |
+
+#### onRequest
+
+```solidity
+function onRequest(uint64 requestId, address requester, address[] operators, bytes requestInputs, uint64 ttl, address paymentAsset, uint256 paymentAmount) external payable
+```
+
+Called when a service is requested
+
+_Validate service configuration, operator selection, payment amount_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint64 | The request ID |
+| requester | address | Who is requesting the service |
+| operators | address[] | Requested operators |
+| requestInputs | bytes | Service configuration (blueprint-specific encoding) |
+| ttl | uint64 | Time-to-live for the service |
+| paymentAsset | address | Payment token address (address(0) for native) |
+| paymentAmount | uint256 | Payment amount |
+
+#### onApprove
+
+```solidity
+function onApprove(address operator, uint64 requestId, uint8 restakingPercent) external payable
+```
+
+Called when an operator approves a service request
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The approving operator |
+| requestId | uint64 | The request ID |
+| restakingPercent | uint8 | Percentage of stake committed to this service (0-100) |
+
+#### onReject
+
+```solidity
+function onReject(address operator, uint64 requestId) external
+```
+
+Called when an operator rejects a service request
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The rejecting operator |
+| requestId | uint64 | The request ID |
+
+#### onServiceInitialized
+
+```solidity
+function onServiceInitialized(uint64 blueprintId, uint64 requestId, uint64 serviceId, address owner, address[] permittedCallers, uint64 ttl) external
+```
+
+Called when service becomes active (all operators approved)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| requestId | uint64 | The original request ID |
+| serviceId | uint64 | The new service ID |
+| owner | address | The service owner |
+| permittedCallers | address[] | Addresses allowed to submit jobs |
+| ttl | uint64 | Service time-to-live |
+
+#### onServiceTermination
+
+```solidity
+function onServiceTermination(uint64 serviceId, address owner) external
+```
+
+Called when service is terminated
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| owner | address | The service owner |
+
+#### canJoin
+
+```solidity
+function canJoin(uint64 serviceId, address operator) external view returns (bool allowed)
+```
+
+Check if an operator can join a dynamic service
+
+_Called before operator joins - return false to reject_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator wanting to join |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| allowed | bool | True if operator can join |
+
+#### onOperatorJoined
+
+```solidity
+function onOperatorJoined(uint64 serviceId, address operator, uint16 exposureBps) external
+```
+
+Called after an operator successfully joins a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator that joined |
+| exposureBps | uint16 | The operator's stake exposure in basis points |
+
+#### canLeave
+
+```solidity
+function canLeave(uint64 serviceId, address operator) external view returns (bool allowed)
+```
+
+Check if an operator can leave a dynamic service
+
+_Called before operator leaves - return false to reject
+ Note: This is called AFTER the exit queue check. Use getExitConfig to customize timing._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator wanting to leave |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| allowed | bool | True if operator can leave |
+
+#### onOperatorLeft
+
+```solidity
+function onOperatorLeft(uint64 serviceId, address operator) external
+```
+
+Called after an operator successfully leaves a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator that left |
+
+#### onExitScheduled
+
+```solidity
+function onExitScheduled(uint64 serviceId, address operator, uint64 executeAfter) external
+```
+
+Called when an operator schedules their exit from a service
+
+_Allows manager to track pending exits, notify other parties, etc._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator scheduling exit |
+| executeAfter | uint64 | Timestamp when exit can be executed |
+
+#### onExitCanceled
+
+```solidity
+function onExitCanceled(uint64 serviceId, address operator) external
+```
+
+Called when an operator cancels their scheduled exit
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator canceling exit |
+
+#### onJobCall
+
+```solidity
+function onJobCall(uint64 serviceId, uint8 job, uint64 jobCallId, bytes inputs) external payable
+```
+
+Called when a job is submitted
+
+_Validate job inputs, check caller permissions, etc._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| job | uint8 | The job index in the blueprint |
+| jobCallId | uint64 | Unique ID for this job call |
+| inputs | bytes | Job inputs (blueprint-specific encoding) |
+
+#### onJobResult
+
+```solidity
+function onJobResult(uint64 serviceId, uint8 job, uint64 jobCallId, address operator, bytes inputs, bytes outputs) external payable
+```
+
+Called when an operator submits a job result
+
+_Validate result format, check operator eligibility, aggregate results_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| job | uint8 | The job index |
+| jobCallId | uint64 | The job call ID |
+| operator | address | The operator submitting |
+| inputs | bytes | Original job inputs |
+| outputs | bytes | Result outputs (blueprint-specific encoding) |
+
+#### onUnappliedSlash
+
+```solidity
+function onUnappliedSlash(uint64 serviceId, bytes offender, uint8 slashPercent) external
+```
+
+Called when a slash is queued but not yet applied
+
+_This is the dispute window - gather evidence, notify parties_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| offender | bytes | The operator being slashed (encoded as bytes for flexibility) |
+| slashPercent | uint8 | Percentage of stake to slash |
+
+#### onSlash
+
+```solidity
+function onSlash(uint64 serviceId, bytes offender, uint8 slashPercent) external
+```
+
+Called when a slash is finalized and applied
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| offender | bytes | The slashed operator |
+| slashPercent | uint8 | Percentage slashed |
+
+#### querySlashingOrigin
+
+```solidity
+function querySlashingOrigin(uint64 serviceId) external view returns (address slashingOrigin)
+```
+
+Query the account authorized to propose slashes for a service
+
+_Override to allow custom slashing authorities (dispute contracts, etc.)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slashingOrigin | address | Address that can slash (default: this contract) |
+
+#### queryDisputeOrigin
+
+```solidity
+function queryDisputeOrigin(uint64 serviceId) external view returns (address disputeOrigin)
+```
+
+Query the account authorized to dispute slashes
+
+_Override to allow custom dispute resolution_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| disputeOrigin | address | Address that can dispute (default: this contract) |
+
+#### queryDeveloperPaymentAddress
+
+```solidity
+function queryDeveloperPaymentAddress(uint64 serviceId) external view returns (address payable developerPaymentAddress)
+```
+
+Get the developer payment address for a service
+
+_Override to route payments to different addresses per service_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| developerPaymentAddress | address payable | Address to receive developer share |
+
+#### queryIsPaymentAssetAllowed
+
+```solidity
+function queryIsPaymentAssetAllowed(uint64 serviceId, address asset) external view returns (bool isAllowed)
+```
+
+Check if a payment asset is allowed for this blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| asset | address | The payment asset address (address(0) for native) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| isAllowed | bool | True if the asset can be used for payment |
+
+#### getRequiredResultCount
+
+```solidity
+function getRequiredResultCount(uint64 serviceId, uint8 jobIndex) external view returns (uint32 required)
+```
+
+Get the number of results required to complete a job
+
+_Override for consensus requirements (e.g., 2/3 majority)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| jobIndex | uint8 | The job index |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| required | uint32 | Number of results needed (0 = service operator count) |
+
+#### requiresAggregation
+
+```solidity
+function requiresAggregation(uint64 serviceId, uint8 jobIndex) external view returns (bool required)
+```
+
+Check if a job requires BLS aggregated results
+
+_When true, operators must submit individual signatures that are aggregated
+ off-chain, then submitted via submitAggregatedResult instead of submitResult_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| jobIndex | uint8 | The job index |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| required | bool | True if BLS aggregation is required for this job |
+
+#### getAggregationThreshold
+
+```solidity
+function getAggregationThreshold(uint64 serviceId, uint8 jobIndex) external view returns (uint16 thresholdBps, uint8 thresholdType)
+```
+
+Get the aggregation threshold configuration for a job
+
+_Only relevant if requiresAggregation returns true_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| jobIndex | uint8 | The job index |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| thresholdBps | uint16 | Threshold in basis points (6700 = 67%) |
+| thresholdType | uint8 | 0 = CountBased (% of operators), 1 = StakeWeighted (% of total stake) |
+
+#### onAggregatedResult
+
+```solidity
+function onAggregatedResult(uint64 serviceId, uint8 job, uint64 jobCallId, bytes output, uint256 signerBitmap, uint256[2] aggregatedSignature, uint256[4] aggregatedPubkey) external
+```
+
+Called when an aggregated job result is submitted
+
+_Validate the aggregated result, verify BLS signature, check threshold_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| job | uint8 | The job index |
+| jobCallId | uint64 | The job call ID |
+| output | bytes | The aggregated output |
+| signerBitmap | uint256 | Bitmap of which operators signed |
+| aggregatedSignature | uint256[2] | The aggregated BLS signature (G1 point x, y) |
+| aggregatedPubkey | uint256[4] | The aggregated public key of signers (G2 point) |
+
+#### getMinOperatorStake
+
+```solidity
+function getMinOperatorStake() external view returns (bool useDefault, uint256 minStake)
+```
+
+Get the minimum stake required for operators to register for this blueprint
+
+_Called during operator registration to validate stake requirements_
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default from restaking module |
+| minStake | uint256 | Custom minimum stake amount (only used if useDefault=false) |
+
diff --git a/pages/developers/api/reference/IERC7540.mdx b/pages/developers/api/reference/IERC7540.mdx
new file mode 100644
index 0000000..9528dbd
--- /dev/null
+++ b/pages/developers/api/reference/IERC7540.mdx
@@ -0,0 +1,15 @@
+---
+title: IERC7540
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540
+
+Full ERC7540 interface combining deposit, redeem, and operator management
+
+_Extends ERC4626 with asynchronous request patterns_
+
diff --git a/pages/developers/api/reference/IERC7540Deposit.mdx b/pages/developers/api/reference/IERC7540Deposit.mdx
new file mode 100644
index 0000000..871833a
--- /dev/null
+++ b/pages/developers/api/reference/IERC7540Deposit.mdx
@@ -0,0 +1,91 @@
+---
+title: IERC7540Deposit
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540Deposit
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540Deposit
+
+Interface for asynchronous deposit requests
+
+_See https://eips.ethereum.org/EIPS/eip-7540_
+
+#### Functions
+
+#### requestDeposit
+
+```solidity
+function requestDeposit(uint256 assets, address controller, address owner) external returns (uint256 requestId)
+```
+
+Request an asynchronous deposit
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| assets | uint256 | Amount of assets to deposit |
+| controller | address | Address that controls the request |
+| owner | address | Address that owns the assets |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | Unique identifier for this request |
+
+#### pendingDepositRequest
+
+```solidity
+function pendingDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)
+```
+
+Get pending deposit request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| assets | uint256 | Amount of assets pending |
+
+#### claimableDepositRequest
+
+```solidity
+function claimableDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)
+```
+
+Get claimable deposit request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| assets | uint256 | Amount of assets claimable |
+
+#### Events
+
+#### DepositRequest
+
+```solidity
+event DepositRequest(address controller, address owner, uint256 requestId, address sender, uint256 assets)
+```
+
+Emitted when a deposit request is created
+
diff --git a/pages/developers/api/reference/IERC7540Operator.mdx b/pages/developers/api/reference/IERC7540Operator.mdx
new file mode 100644
index 0000000..e2de701
--- /dev/null
+++ b/pages/developers/api/reference/IERC7540Operator.mdx
@@ -0,0 +1,67 @@
+---
+title: IERC7540Operator
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540Operator
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540Operator
+
+Interface for operator management in ERC7540
+
+#### Functions
+
+#### isOperator
+
+```solidity
+function isOperator(address controller, address operator) external view returns (bool status)
+```
+
+Check if operator is approved for controller
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| controller | address | The controller address |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| status | bool | True if approved |
+
+#### setOperator
+
+```solidity
+function setOperator(address operator, bool approved) external returns (bool success)
+```
+
+Grant or revoke operator permissions
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| approved | bool | True to approve, false to revoke |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| success | bool | True if successful |
+
+#### Events
+
+#### OperatorSet
+
+```solidity
+event OperatorSet(address controller, address operator, bool approved)
+```
+
+Emitted when operator approval changes
+
diff --git a/pages/developers/api/reference/IERC7540Redeem.mdx b/pages/developers/api/reference/IERC7540Redeem.mdx
new file mode 100644
index 0000000..16e04a0
--- /dev/null
+++ b/pages/developers/api/reference/IERC7540Redeem.mdx
@@ -0,0 +1,91 @@
+---
+title: IERC7540Redeem
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540Redeem
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540Redeem
+
+Interface for asynchronous redemption requests
+
+_See https://eips.ethereum.org/EIPS/eip-7540_
+
+#### Functions
+
+#### requestRedeem
+
+```solidity
+function requestRedeem(uint256 shares, address controller, address owner) external returns (uint256 requestId)
+```
+
+Request an asynchronous redemption
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| shares | uint256 | Amount of shares to redeem |
+| controller | address | Address that controls the request |
+| owner | address | Address that owns the shares |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | Unique identifier for this request |
+
+#### pendingRedeemRequest
+
+```solidity
+function pendingRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)
+```
+
+Get pending redeem request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| shares | uint256 | Amount of shares pending |
+
+#### claimableRedeemRequest
+
+```solidity
+function claimableRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)
+```
+
+Get claimable redeem request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| shares | uint256 | Amount of shares claimable |
+
+#### Events
+
+#### RedeemRequest
+
+```solidity
+event RedeemRequest(address controller, address owner, uint256 requestId, address sender, uint256 shares)
+```
+
+Emitted when a redeem request is created
+
diff --git a/pages/developers/api/reference/IFacetSelectors.mdx b/pages/developers/api/reference/IFacetSelectors.mdx
new file mode 100644
index 0000000..0e6d31a
--- /dev/null
+++ b/pages/developers/api/reference/IFacetSelectors.mdx
@@ -0,0 +1,23 @@
+---
+title: IFacetSelectors
+description: Auto-generated Solidity API reference.
+---
+
+# IFacetSelectors
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IFacetSelectors.sol
+
+### IFacetSelectors
+
+Standard interface for facet selector discovery
+
+#### Functions
+
+#### selectors
+
+```solidity
+function selectors() external pure returns (bytes4[])
+```
+
+Return the selectors this facet wants registered
+
diff --git a/pages/developers/api/reference/IMBSMRegistry.mdx b/pages/developers/api/reference/IMBSMRegistry.mdx
new file mode 100644
index 0000000..db00cbf
--- /dev/null
+++ b/pages/developers/api/reference/IMBSMRegistry.mdx
@@ -0,0 +1,101 @@
+---
+title: IMBSMRegistry
+description: Auto-generated Solidity API reference.
+---
+
+# IMBSMRegistry
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMBSMRegistry.sol
+
+### IMBSMRegistry
+
+Minimal interface for the Master Blueprint Service Manager registry
+
+#### Functions
+
+#### getMBSM
+
+```solidity
+function getMBSM(uint64 blueprintId) external view returns (address mbsmAddress)
+```
+
+Get the MBSM address currently pinned for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint identifier |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| mbsmAddress | address | The pinned MBSM (or latest if not pinned) |
+
+#### getPinnedRevision
+
+```solidity
+function getPinnedRevision(uint64 blueprintId) external view returns (uint32 revision)
+```
+
+Get the revision pinned for a blueprint (0 = latest)
+
+#### getLatestMBSM
+
+```solidity
+function getLatestMBSM() external view returns (address mbsmAddress)
+```
+
+Get the latest registered MBSM address
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| mbsmAddress | address | The latest MBSM |
+
+#### getMBSMByRevision
+
+```solidity
+function getMBSMByRevision(uint32 revision) external view returns (address mbsmAddress)
+```
+
+Get an MBSM by explicit revision
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| revision | uint32 | The registry revision (1-indexed) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| mbsmAddress | address | The registered address for the revision |
+
+#### getLatestRevision
+
+```solidity
+function getLatestRevision() external view returns (uint32)
+```
+
+Get the latest revision number registered in the registry
+
+#### pinBlueprint
+
+```solidity
+function pinBlueprint(uint64 blueprintId, uint32 revision) external
+```
+
+Pin a blueprint to a specific revision (0 disallowed)
+
+#### unpinBlueprint
+
+```solidity
+function unpinBlueprint(uint64 blueprintId) external
+```
+
+Unpin a blueprint (reverting to latest)
+
diff --git a/pages/developers/api/reference/IMasterBlueprintServiceManager.mdx b/pages/developers/api/reference/IMasterBlueprintServiceManager.mdx
new file mode 100644
index 0000000..cae796c
--- /dev/null
+++ b/pages/developers/api/reference/IMasterBlueprintServiceManager.mdx
@@ -0,0 +1,31 @@
+---
+title: IMasterBlueprintServiceManager
+description: Auto-generated Solidity API reference.
+---
+
+# IMasterBlueprintServiceManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMasterBlueprintServiceManager.sol
+
+### IMasterBlueprintServiceManager
+
+Interface for the protocol-wide master blueprint service manager
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64 blueprintId, address owner, bytes encodedDefinition) external
+```
+
+Called when a new blueprint is created
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The newly assigned blueprint ID |
+| owner | address | The blueprint owner |
+| encodedDefinition | bytes | ABI-encoded blueprint definition data |
+
diff --git a/pages/developers/api/reference/IMetricsRecorder.mdx b/pages/developers/api/reference/IMetricsRecorder.mdx
new file mode 100644
index 0000000..dc8d73e
--- /dev/null
+++ b/pages/developers/api/reference/IMetricsRecorder.mdx
@@ -0,0 +1,211 @@
+---
+title: IMetricsRecorder
+description: Auto-generated Solidity API reference.
+---
+
+# IMetricsRecorder
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMetricsRecorder.sol
+
+### IMetricsRecorder
+
+Minimal interface for recording protocol activity metrics
+
+_Implemented by TangleMetrics, called by core contracts_
+
+#### Functions
+
+#### recordStake
+
+```solidity
+function recordStake(address delegator, address operator, address asset, uint256 amount) external
+```
+
+Record a stake/delegation event
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+| operator | address | The operator receiving delegation |
+| asset | address | The asset being staked (address(0) for native) |
+| amount | uint256 | The amount staked |
+
+#### recordUnstake
+
+```solidity
+function recordUnstake(address delegator, address operator, address asset, uint256 amount) external
+```
+
+Record an unstake event
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+| operator | address | The operator losing delegation |
+| asset | address | The asset being unstaked |
+| amount | uint256 | The amount unstaked |
+
+#### recordOperatorRegistered
+
+```solidity
+function recordOperatorRegistered(address operator, address asset, uint256 amount) external
+```
+
+Record operator registration
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| asset | address | The asset staked |
+| amount | uint256 | Initial stake amount |
+
+#### recordHeartbeat
+
+```solidity
+function recordHeartbeat(address operator, uint64 serviceId, uint64 timestamp) external
+```
+
+Record operator heartbeat (liveness proof)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| serviceId | uint64 | The service ID |
+| timestamp | uint64 | Block timestamp of heartbeat |
+
+#### recordJobCompletion
+
+```solidity
+function recordJobCompletion(address operator, uint64 serviceId, uint64 jobCallId, bool success) external
+```
+
+Record job completion by operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| serviceId | uint64 | The service ID |
+| jobCallId | uint64 | The job call ID |
+| success | bool | Whether the job succeeded |
+
+#### recordSlash
+
+```solidity
+function recordSlash(address operator, uint64 serviceId, uint256 amount) external
+```
+
+Record operator slashing (negative metric)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| serviceId | uint64 | The service ID |
+| amount | uint256 | Amount slashed |
+
+#### recordServiceCreated
+
+```solidity
+function recordServiceCreated(uint64 serviceId, uint64 blueprintId, address owner, uint256 operatorCount) external
+```
+
+Record service creation/activation
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| blueprintId | uint64 | The blueprint ID |
+| owner | address | The service owner |
+| operatorCount | uint256 | Number of operators |
+
+#### recordServiceTerminated
+
+```solidity
+function recordServiceTerminated(uint64 serviceId, uint256 duration) external
+```
+
+Record service termination
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| duration | uint256 | How long the service ran (seconds) |
+
+#### recordJobCall
+
+```solidity
+function recordJobCall(uint64 serviceId, address caller, uint64 jobCallId) external
+```
+
+Record a job call on a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| caller | address | Who initiated the job |
+| jobCallId | uint64 | The job call ID |
+
+#### recordPayment
+
+```solidity
+function recordPayment(address payer, uint64 serviceId, address token, uint256 amount) external
+```
+
+Record fee payment for a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| payer | address | Who paid the fee |
+| serviceId | uint64 | The service ID |
+| token | address | The payment token (address(0) for native) |
+| amount | uint256 | The amount paid |
+
+#### recordBlueprintCreated
+
+```solidity
+function recordBlueprintCreated(uint64 blueprintId, address developer) external
+```
+
+Record blueprint creation
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| developer | address | The developer address |
+
+#### recordBlueprintRegistration
+
+```solidity
+function recordBlueprintRegistration(uint64 blueprintId, address operator) external
+```
+
+Record operator registration to a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address |
+
diff --git a/pages/developers/api/reference/IMultiAssetDelegation.mdx b/pages/developers/api/reference/IMultiAssetDelegation.mdx
new file mode 100644
index 0000000..10d37dc
--- /dev/null
+++ b/pages/developers/api/reference/IMultiAssetDelegation.mdx
@@ -0,0 +1,740 @@
+---
+title: IMultiAssetDelegation
+description: Auto-generated Solidity API reference.
+---
+
+# IMultiAssetDelegation
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMultiAssetDelegation.sol
+
+### IMultiAssetDelegation
+
+Full interface for the multi-asset restaking contract
+
+#### Functions
+
+#### registerOperator
+
+```solidity
+function registerOperator() external payable
+```
+
+#### registerOperatorWithAsset
+
+```solidity
+function registerOperatorWithAsset(address token, uint256 amount) external
+```
+
+#### increaseStake
+
+```solidity
+function increaseStake() external payable
+```
+
+#### scheduleOperatorUnstake
+
+```solidity
+function scheduleOperatorUnstake(uint256 amount) external
+```
+
+#### executeOperatorUnstake
+
+```solidity
+function executeOperatorUnstake() external
+```
+
+#### addBlueprint
+
+```solidity
+function addBlueprint(uint64 blueprintId) external
+```
+
+#### removeBlueprint
+
+```solidity
+function removeBlueprint(uint64 blueprintId) external
+```
+
+#### startLeaving
+
+```solidity
+function startLeaving() external
+```
+
+#### completeLeaving
+
+```solidity
+function completeLeaving() external
+```
+
+#### deposit
+
+```solidity
+function deposit() external payable
+```
+
+#### depositWithLock
+
+```solidity
+function depositWithLock(enum Types.LockMultiplier lockMultiplier) external payable
+```
+
+#### depositERC20
+
+```solidity
+function depositERC20(address token, uint256 amount) external
+```
+
+#### depositERC20WithLock
+
+```solidity
+function depositERC20WithLock(address token, uint256 amount, enum Types.LockMultiplier lockMultiplier) external
+```
+
+#### scheduleWithdraw
+
+```solidity
+function scheduleWithdraw(address token, uint256 amount) external
+```
+
+#### executeWithdraw
+
+```solidity
+function executeWithdraw() external
+```
+
+#### depositAndDelegate
+
+```solidity
+function depositAndDelegate(address operator) external payable
+```
+
+#### depositAndDelegateWithOptions
+
+```solidity
+function depositAndDelegateWithOptions(address operator, address token, uint256 amount, enum Types.BlueprintSelectionMode selectionMode, uint64[] blueprintIds) external payable
+```
+
+#### delegate
+
+```solidity
+function delegate(address operator, uint256 amount) external
+```
+
+#### delegateWithOptions
+
+```solidity
+function delegateWithOptions(address operator, address token, uint256 amount, enum Types.BlueprintSelectionMode selectionMode, uint64[] blueprintIds) external
+```
+
+#### scheduleDelegatorUnstake
+
+```solidity
+function scheduleDelegatorUnstake(address operator, address token, uint256 amount) external
+```
+
+#### undelegate
+
+```solidity
+function undelegate(address operator, uint256 amount) external
+```
+
+#### executeDelegatorUnstake
+
+```solidity
+function executeDelegatorUnstake() external
+```
+
+#### executeDelegatorUnstakeAndWithdraw
+
+```solidity
+function executeDelegatorUnstakeAndWithdraw(address operator, address token, uint256 shares, uint64 requestedRound, address receiver) external returns (uint256 amount)
+```
+
+Execute a specific matured unstake request and withdraw the resulting assets to `receiver`.
+
+_Convenience helper for integrations (e.g. ERC7540 liquid delegation vaults) to avoid a separate
+ scheduleWithdraw/executeWithdraw flow after bond-less delay has already elapsed._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | Operator to unstake from |
+| token | address | Token address (address(0) for native) |
+| shares | uint256 | Shares to unstake (as stored in the underlying bond-less request) |
+| requestedRound | uint64 | Round in which the unstake was scheduled |
+| receiver | address | Recipient of the withdrawn assets |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| amount | uint256 | Actual amount returned (after exchange-rate + lazy-slash adjustments) |
+
+#### addBlueprintToDelegation
+
+```solidity
+function addBlueprintToDelegation(uint256 delegationIndex, uint64 blueprintId) external
+```
+
+#### removeBlueprintFromDelegation
+
+```solidity
+function removeBlueprintFromDelegation(uint256 delegationIndex, uint64 blueprintId) external
+```
+
+#### slashForBlueprint
+
+```solidity
+function slashForBlueprint(address operator, uint64 blueprintId, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+#### slashForService
+
+```solidity
+function slashForService(address operator, uint64 blueprintId, uint64 serviceId, struct Types.AssetSecurityCommitment[] commitments, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+#### slash
+
+```solidity
+function slash(address operator, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+#### advanceRound
+
+```solidity
+function advanceRound() external
+```
+
+#### snapshotOperator
+
+```solidity
+function snapshotOperator(address operator) external
+```
+
+#### enableAsset
+
+```solidity
+function enableAsset(address token, uint256 minOperatorStake, uint256 minDelegation, uint256 depositCap, uint16 rewardMultiplierBps) external
+```
+
+#### disableAsset
+
+```solidity
+function disableAsset(address token) external
+```
+
+#### getAssetConfig
+
+```solidity
+function getAssetConfig(address token) external view returns (struct Types.AssetConfig)
+```
+
+#### registerAdapter
+
+```solidity
+function registerAdapter(address token, address adapter) external
+```
+
+#### removeAdapter
+
+```solidity
+function removeAdapter(address token) external
+```
+
+#### setRequireAdapters
+
+```solidity
+function setRequireAdapters(bool required) external
+```
+
+#### enableAssetWithAdapter
+
+```solidity
+function enableAssetWithAdapter(address token, address adapter, uint256 minOperatorStake, uint256 minDelegation, uint256 depositCap, uint16 rewardMultiplierBps) external
+```
+
+#### isOperator
+
+```solidity
+function isOperator(address operator) external view returns (bool)
+```
+
+#### isOperatorActive
+
+```solidity
+function isOperatorActive(address operator) external view returns (bool)
+```
+
+#### getOperatorStake
+
+```solidity
+function getOperatorStake(address operator) external view returns (uint256)
+```
+
+#### getOperatorSelfStake
+
+```solidity
+function getOperatorSelfStake(address operator) external view returns (uint256)
+```
+
+#### getOperatorDelegatedStake
+
+```solidity
+function getOperatorDelegatedStake(address operator) external view returns (uint256)
+```
+
+#### getDelegation
+
+```solidity
+function getDelegation(address delegator, address operator) external view returns (uint256)
+```
+
+#### getTotalDelegation
+
+```solidity
+function getTotalDelegation(address delegator) external view returns (uint256 total)
+```
+
+#### minOperatorStake
+
+```solidity
+function minOperatorStake() external view returns (uint256)
+```
+
+#### meetsStakeRequirement
+
+```solidity
+function meetsStakeRequirement(address operator, uint256 required) external view returns (bool)
+```
+
+#### isSlasher
+
+```solidity
+function isSlasher(address account) external view returns (bool)
+```
+
+#### getOperatorMetadata
+
+```solidity
+function getOperatorMetadata(address operator) external view returns (struct Types.OperatorMetadata)
+```
+
+#### getOperatorBlueprints
+
+```solidity
+function getOperatorBlueprints(address operator) external view returns (uint256[])
+```
+
+#### operatorCount
+
+```solidity
+function operatorCount() external view returns (uint256)
+```
+
+#### operatorAt
+
+```solidity
+function operatorAt(uint256 index) external view returns (address)
+```
+
+#### getDeposit
+
+```solidity
+function getDeposit(address delegator, address token) external view returns (struct Types.Deposit)
+```
+
+#### getPendingWithdrawals
+
+```solidity
+function getPendingWithdrawals(address delegator) external view returns (struct Types.WithdrawRequest[])
+```
+
+#### getLocks
+
+```solidity
+function getLocks(address delegator, address token) external view returns (struct Types.LockInfo[])
+```
+
+#### getDelegations
+
+```solidity
+function getDelegations(address delegator) external view returns (struct Types.BondInfoDelegator[])
+```
+
+#### getDelegationBlueprints
+
+```solidity
+function getDelegationBlueprints(address delegator, uint256 idx) external view returns (uint64[])
+```
+
+#### getPendingUnstakes
+
+```solidity
+function getPendingUnstakes(address delegator) external view returns (struct Types.BondLessRequest[])
+```
+
+#### getOperatorRewardPool
+
+```solidity
+function getOperatorRewardPool(address operator) external view returns (struct Types.OperatorRewardPool)
+```
+
+#### getOperatorDelegators
+
+```solidity
+function getOperatorDelegators(address operator) external view returns (address[])
+```
+
+#### getOperatorDelegatorCount
+
+```solidity
+function getOperatorDelegatorCount(address operator) external view returns (uint256)
+```
+
+#### rewardsManager
+
+```solidity
+function rewardsManager() external view returns (address)
+```
+
+#### serviceFeeDistributor
+
+```solidity
+function serviceFeeDistributor() external view returns (address)
+```
+
+#### getSlashImpact
+
+```solidity
+function getSlashImpact(address operator, uint64 slashIndex, address delegator) external view returns (uint256)
+```
+
+#### getSlashCount
+
+```solidity
+function getSlashCount(address operator) external view returns (uint64)
+```
+
+#### getSlashRecord
+
+```solidity
+function getSlashRecord(address operator, uint64 slashIndex) external view returns (struct SlashingManager.SlashRecord)
+```
+
+#### getSlashCountForService
+
+```solidity
+function getSlashCountForService(uint64 serviceId, address operator) external view returns (uint64)
+```
+
+#### getSlashCountForBlueprint
+
+```solidity
+function getSlashCountForBlueprint(uint64 blueprintId, address operator) external view returns (uint64)
+```
+
+#### currentRound
+
+```solidity
+function currentRound() external view returns (uint64)
+```
+
+#### roundDuration
+
+```solidity
+function roundDuration() external view returns (uint64)
+```
+
+#### delegationBondLessDelay
+
+```solidity
+function delegationBondLessDelay() external view returns (uint64)
+```
+
+#### leaveDelegatorsDelay
+
+```solidity
+function leaveDelegatorsDelay() external view returns (uint64)
+```
+
+#### leaveOperatorsDelay
+
+```solidity
+function leaveOperatorsDelay() external view returns (uint64)
+```
+
+#### operatorCommissionBps
+
+```solidity
+function operatorCommissionBps() external view returns (uint16)
+```
+
+#### LOCK_ONE_MONTH
+
+```solidity
+function LOCK_ONE_MONTH() external view returns (uint64)
+```
+
+#### LOCK_TWO_MONTHS
+
+```solidity
+function LOCK_TWO_MONTHS() external view returns (uint64)
+```
+
+#### LOCK_THREE_MONTHS
+
+```solidity
+function LOCK_THREE_MONTHS() external view returns (uint64)
+```
+
+#### LOCK_SIX_MONTHS
+
+```solidity
+function LOCK_SIX_MONTHS() external view returns (uint64)
+```
+
+#### MULTIPLIER_NONE
+
+```solidity
+function MULTIPLIER_NONE() external view returns (uint16)
+```
+
+#### MULTIPLIER_ONE_MONTH
+
+```solidity
+function MULTIPLIER_ONE_MONTH() external view returns (uint16)
+```
+
+#### MULTIPLIER_TWO_MONTHS
+
+```solidity
+function MULTIPLIER_TWO_MONTHS() external view returns (uint16)
+```
+
+#### MULTIPLIER_THREE_MONTHS
+
+```solidity
+function MULTIPLIER_THREE_MONTHS() external view returns (uint16)
+```
+
+#### MULTIPLIER_SIX_MONTHS
+
+```solidity
+function MULTIPLIER_SIX_MONTHS() external view returns (uint16)
+```
+
+#### addSlasher
+
+```solidity
+function addSlasher(address slasher) external
+```
+
+#### removeSlasher
+
+```solidity
+function removeSlasher(address slasher) external
+```
+
+#### setOperatorCommission
+
+```solidity
+function setOperatorCommission(uint16 bps) external
+```
+
+#### setDelays
+
+```solidity
+function setDelays(uint64 delegationBondLessDelay, uint64 leaveDelegatorsDelay, uint64 leaveOperatorsDelay) external
+```
+
+#### setRewardsManager
+
+```solidity
+function setRewardsManager(address manager) external
+```
+
+#### setServiceFeeDistributor
+
+```solidity
+function setServiceFeeDistributor(address distributor) external
+```
+
+#### pause
+
+```solidity
+function pause() external
+```
+
+#### unpause
+
+```solidity
+function unpause() external
+```
+
+#### rescueTokens
+
+```solidity
+function rescueTokens(address token, address to, uint256 amount) external
+```
+
+#### Events
+
+#### AssetEnabled
+
+```solidity
+event AssetEnabled(address token, uint256 minOperatorStake, uint256 minDelegation)
+```
+
+#### AssetDisabled
+
+```solidity
+event AssetDisabled(address token)
+```
+
+#### RoundAdvanced
+
+```solidity
+event RoundAdvanced(uint64 round)
+```
+
+#### OperatorRegistered
+
+```solidity
+event OperatorRegistered(address operator, uint256 stake)
+```
+
+#### OperatorStakeIncreased
+
+```solidity
+event OperatorStakeIncreased(address operator, uint256 amount)
+```
+
+#### OperatorUnstakeScheduled
+
+```solidity
+event OperatorUnstakeScheduled(address operator, uint256 amount, uint64 readyRound)
+```
+
+#### OperatorUnstakeExecuted
+
+```solidity
+event OperatorUnstakeExecuted(address operator, uint256 amount)
+```
+
+#### OperatorLeavingScheduled
+
+```solidity
+event OperatorLeavingScheduled(address operator, uint64 readyRound)
+```
+
+#### OperatorLeft
+
+```solidity
+event OperatorLeft(address operator)
+```
+
+#### OperatorBlueprintAdded
+
+```solidity
+event OperatorBlueprintAdded(address operator, uint64 blueprintId)
+```
+
+#### OperatorBlueprintRemoved
+
+```solidity
+event OperatorBlueprintRemoved(address operator, uint64 blueprintId)
+```
+
+#### Deposited
+
+```solidity
+event Deposited(address delegator, address token, uint256 amount, enum Types.LockMultiplier lock)
+```
+
+#### WithdrawScheduled
+
+```solidity
+event WithdrawScheduled(address delegator, address token, uint256 amount, uint64 readyRound)
+```
+
+#### Withdrawn
+
+```solidity
+event Withdrawn(address delegator, address token, uint256 amount)
+```
+
+#### ExpiredLocksHarvested
+
+```solidity
+event ExpiredLocksHarvested(address delegator, address token, uint256 count, uint256 totalAmount)
+```
+
+#### Delegated
+
+```solidity
+event Delegated(address delegator, address operator, address token, uint256 amount, uint256 shares, enum Types.BlueprintSelectionMode selectionMode)
+```
+
+#### DelegatorUnstakeScheduled
+
+```solidity
+event DelegatorUnstakeScheduled(address delegator, address operator, address token, uint256 shares, uint256 estimatedAmount, uint64 readyRound)
+```
+
+#### DelegatorUnstakeExecuted
+
+```solidity
+event DelegatorUnstakeExecuted(address delegator, address operator, address token, uint256 shares, uint256 amount)
+```
+
+#### BlueprintAddedToDelegation
+
+```solidity
+event BlueprintAddedToDelegation(address delegator, uint256 delegationIndex, uint64 blueprintId)
+```
+
+#### BlueprintRemovedFromDelegation
+
+```solidity
+event BlueprintRemovedFromDelegation(address delegator, uint256 delegationIndex, uint64 blueprintId)
+```
+
+#### Slashed
+
+```solidity
+event Slashed(address operator, uint64 serviceId, uint256 operatorSlashed, uint256 delegatorsSlashed, uint256 newExchangeRate)
+```
+
+#### SlashedForService
+
+```solidity
+event SlashedForService(address operator, uint64 serviceId, uint64 blueprintId, uint256 totalSlashed, uint256 commitmentCount)
+```
+
+#### SlashRecorded
+
+```solidity
+event SlashRecorded(address operator, uint64 slashId, uint256 totalSlashed, uint256 exchangeRateBefore, uint256 exchangeRateAfter)
+```
+
+#### AdapterRegistered
+
+```solidity
+event AdapterRegistered(address token, address adapter)
+```
+
+#### AdapterRemoved
+
+```solidity
+event AdapterRemoved(address token)
+```
+
+#### RequireAdaptersUpdated
+
+```solidity
+event RequireAdaptersUpdated(bool required)
+```
+
diff --git a/pages/developers/api/reference/IPaymentAdapterRegistry.mdx b/pages/developers/api/reference/IPaymentAdapterRegistry.mdx
new file mode 100644
index 0000000..bb9902d
--- /dev/null
+++ b/pages/developers/api/reference/IPaymentAdapterRegistry.mdx
@@ -0,0 +1,126 @@
+---
+title: IPaymentAdapterRegistry
+description: Auto-generated Solidity API reference.
+---
+
+# IPaymentAdapterRegistry
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### IPaymentAdapterRegistry
+
+Registry for managing multiple payment adapters
+
+#### Functions
+
+#### registerAdapter
+
+```solidity
+function registerAdapter(string name, address adapter) external
+```
+
+Register a new payment adapter
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name |
+| adapter | address | Adapter address |
+
+#### removeAdapter
+
+```solidity
+function removeAdapter(string name) external
+```
+
+Remove a payment adapter
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name to remove |
+
+#### getAdapter
+
+```solidity
+function getAdapter(string name) external view returns (address adapter)
+```
+
+Get an adapter by name
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| adapter | address | Adapter address |
+
+#### getDefaultAdapter
+
+```solidity
+function getDefaultAdapter() external view returns (address adapter)
+```
+
+Get the default adapter
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| adapter | address | Default adapter address |
+
+#### setDefaultAdapter
+
+```solidity
+function setDefaultAdapter(string name) external
+```
+
+Set the default adapter
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Name of adapter to set as default |
+
+#### isRegistered
+
+```solidity
+function isRegistered(string name) external view returns (bool registered)
+```
+
+Check if an adapter is registered
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| registered | bool | True if adapter exists |
+
+#### getRegisteredAdapters
+
+```solidity
+function getRegisteredAdapters() external view returns (string[] names)
+```
+
+Get all registered adapter names
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| names | string[] | Array of adapter names |
+
diff --git a/pages/developers/api/reference/IRestaking.mdx b/pages/developers/api/reference/IRestaking.mdx
new file mode 100644
index 0000000..2e67d1f
--- /dev/null
+++ b/pages/developers/api/reference/IRestaking.mdx
@@ -0,0 +1,307 @@
+---
+title: IRestaking
+description: Auto-generated Solidity API reference.
+---
+
+# IRestaking
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IRestaking.sol
+
+### IRestaking
+
+Abstract interface for restaking/shared security protocols
+
+_Implement this to integrate with native staking, EigenLayer, Symbiotic, etc.
+
+Design principles:
+- Minimal interface - only what Tangle core needs
+- Read-heavy - most operations are queries
+- Write-light - only slash() modifies state
+- No assumptions about underlying implementation_
+
+#### Functions
+
+#### isOperator
+
+```solidity
+function isOperator(address operator) external view returns (bool)
+```
+
+Check if an address is a registered operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The address to check |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if registered as operator |
+
+#### isOperatorActive
+
+```solidity
+function isOperatorActive(address operator) external view returns (bool)
+```
+
+Check if an operator is currently active (not leaving, not slashed out)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The address to check |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if active |
+
+#### getOperatorStake
+
+```solidity
+function getOperatorStake(address operator) external view returns (uint256)
+```
+
+Get an operator's total stake (self-stake + delegations)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Total stake amount in native units |
+
+#### getOperatorSelfStake
+
+```solidity
+function getOperatorSelfStake(address operator) external view returns (uint256)
+```
+
+Get an operator's self-stake only
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Self-stake amount |
+
+#### getOperatorDelegatedStake
+
+```solidity
+function getOperatorDelegatedStake(address operator) external view returns (uint256)
+```
+
+Get total amount delegated to an operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Total delegated amount |
+
+#### getDelegation
+
+```solidity
+function getDelegation(address delegator, address operator) external view returns (uint256)
+```
+
+Get a delegator's delegation to a specific operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Delegation amount |
+
+#### getTotalDelegation
+
+```solidity
+function getTotalDelegation(address delegator) external view returns (uint256)
+```
+
+Get a delegator's total delegations across all operators
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Total delegated amount |
+
+#### minOperatorStake
+
+```solidity
+function minOperatorStake() external view returns (uint256)
+```
+
+Get minimum stake required to be an operator
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Minimum stake amount |
+
+#### meetsStakeRequirement
+
+```solidity
+function meetsStakeRequirement(address operator, uint256 required) external view returns (bool)
+```
+
+Check if operator meets a specific stake requirement
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| required | uint256 | The required stake amount |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if operator has sufficient stake |
+
+#### slashForBlueprint
+
+```solidity
+function slashForBlueprint(address operator, uint64 blueprintId, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+Slash an operator's stake for a specific blueprint
+
+_Only affects delegators exposed to this blueprint (All mode + Fixed mode who selected it)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator to slash |
+| blueprintId | uint64 | The blueprint where violation occurred |
+| serviceId | uint64 | The service where violation occurred |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash (IPFS or other reference) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| actualSlashed | uint256 | The actual amount slashed (may be less if insufficient stake) |
+
+#### slashForService
+
+```solidity
+function slashForService(address operator, uint64 blueprintId, uint64 serviceId, struct Types.AssetSecurityCommitment[] commitments, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+Slash an operator for a specific service, only slashing committed assets
+
+_Only slashes assets the operator committed to this service, proportionally_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator to slash |
+| blueprintId | uint64 | The blueprint where violation occurred |
+| serviceId | uint64 | The service where violation occurred |
+| commitments | struct Types.AssetSecurityCommitment[] | The operator's asset security commitments for this service |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash (IPFS or other reference) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| actualSlashed | uint256 | The actual amount slashed (may be less if insufficient committed stake) |
+
+#### slash
+
+```solidity
+function slash(address operator, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+Slash an operator's stake (legacy - slashes all delegators)
+
+_Only callable by authorized slashers (e.g., Tangle core contract)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator to slash |
+| serviceId | uint64 | The service where violation occurred |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash (IPFS or other reference) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| actualSlashed | uint256 | The actual amount slashed (may be less if insufficient stake) |
+
+#### isSlasher
+
+```solidity
+function isSlasher(address account) external view returns (bool)
+```
+
+Check if an address is authorized to call slash()
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The address to check |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if authorized |
+
+#### Events
+
+#### OperatorSlashed
+
+```solidity
+event OperatorSlashed(address operator, uint64 serviceId, uint256 amount, bytes32 evidence)
+```
+
+Emitted when an operator is slashed
+
diff --git a/pages/developers/api/reference/IRestakingAdmin.mdx b/pages/developers/api/reference/IRestakingAdmin.mdx
new file mode 100644
index 0000000..ea55384
--- /dev/null
+++ b/pages/developers/api/reference/IRestakingAdmin.mdx
@@ -0,0 +1,59 @@
+---
+title: IRestakingAdmin
+description: Auto-generated Solidity API reference.
+---
+
+# IRestakingAdmin
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IRestaking.sol
+
+### IRestakingAdmin
+
+Admin functions for restaking implementations
+
+_Separated to keep main interface clean_
+
+#### Functions
+
+#### addSlasher
+
+```solidity
+function addSlasher(address slasher) external
+```
+
+Add an authorized slasher
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slasher | address | Address to authorize |
+
+#### removeSlasher
+
+```solidity
+function removeSlasher(address slasher) external
+```
+
+Remove an authorized slasher
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slasher | address | Address to remove |
+
+#### setMinOperatorStake
+
+```solidity
+function setMinOperatorStake(uint256 amount) external
+```
+
+Update minimum operator stake
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| amount | uint256 | New minimum |
+
diff --git a/pages/developers/api/reference/IRewardsManager.mdx b/pages/developers/api/reference/IRewardsManager.mdx
new file mode 100644
index 0000000..59f0f5b
--- /dev/null
+++ b/pages/developers/api/reference/IRewardsManager.mdx
@@ -0,0 +1,88 @@
+---
+title: IRewardsManager
+description: Auto-generated Solidity API reference.
+---
+
+# IRewardsManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IRewardsManager.sol
+
+### IRewardsManager
+
+Interface for reward vault management - called by MultiAssetDelegation
+
+_Mirrors the Substrate RewardsManager trait pattern_
+
+#### Functions
+
+#### recordDelegate
+
+```solidity
+function recordDelegate(address delegator, address operator, address asset, uint256 amount, uint16 lockMultiplierBps) external
+```
+
+Records a delegation for reward tracking
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The account making the delegation |
+| operator | address | The operator being delegated to |
+| asset | address | The asset being delegated (address(0) for native) |
+| amount | uint256 | The amount being delegated |
+| lockMultiplierBps | uint16 | Lock multiplier in basis points (10000 = 1x, 0 = no lock) |
+
+#### recordUndelegate
+
+```solidity
+function recordUndelegate(address delegator, address operator, address asset, uint256 amount) external
+```
+
+Records an undelegation
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The account making the undelegation |
+| operator | address | The operator being undelegated from |
+| asset | address | The asset being undelegated |
+| amount | uint256 | The amount being undelegated |
+
+#### recordServiceReward
+
+```solidity
+function recordServiceReward(address operator, address asset, uint256 amount) external
+```
+
+Records a service reward for an operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator receiving the reward |
+| asset | address | The reward asset |
+| amount | uint256 | The reward amount |
+
+#### getAssetDepositCapRemaining
+
+```solidity
+function getAssetDepositCapRemaining(address asset) external view returns (uint256 remaining)
+```
+
+Get remaining deposit capacity for an asset vault
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| asset | address | The asset to query |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| remaining | uint256 | The remaining deposit capacity |
+
diff --git a/pages/developers/api/reference/ISablierAdapter.mdx b/pages/developers/api/reference/ISablierAdapter.mdx
new file mode 100644
index 0000000..29219f8
--- /dev/null
+++ b/pages/developers/api/reference/ISablierAdapter.mdx
@@ -0,0 +1,163 @@
+---
+title: ISablierAdapter
+description: Auto-generated Solidity API reference.
+---
+
+# ISablierAdapter
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### ISablierAdapter
+
+Extended interface for Sablier-specific features
+
+#### Types
+
+#### StreamType
+
+Stream type for Sablier
+
+```solidity
+enum StreamType {
+ Linear,
+ Dynamic,
+ Tranched
+}
+```
+
+#### Segment
+
+Segment for dynamic streams
+
+```solidity
+struct Segment {
+ uint128 amount;
+ uint64 exponent;
+ uint40 timestamp;
+}
+```
+
+#### Functions
+
+#### createLinearStream
+
+```solidity
+function createLinearStream(uint64 serviceId, address token, uint128 totalAmount, uint40 durationSeconds, uint40 cliffSeconds) external returns (uint256 streamId)
+```
+
+Create a linear stream (constant rate)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+| token | address | The ERC-20 token |
+| totalAmount | uint128 | Total amount to stream |
+| durationSeconds | uint40 | Total duration |
+| cliffSeconds | uint40 | Cliff period |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The created stream ID |
+
+#### createDynamicStream
+
+```solidity
+function createDynamicStream(uint64 serviceId, address token, uint128 totalAmount, struct ISablierAdapter.Segment[] segments) external returns (uint256 streamId)
+```
+
+Create a dynamic stream with custom curve
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+| token | address | The ERC-20 token |
+| totalAmount | uint128 | Total amount to stream |
+| segments | struct ISablierAdapter.Segment[] | Array of segments defining the curve |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The created stream ID |
+
+#### isCancelable
+
+```solidity
+function isCancelable(uint256 streamId) external view returns (bool cancelable)
+```
+
+Check if a stream is cancelable
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| cancelable | bool | True if stream can be cancelled |
+
+#### wasCancelled
+
+```solidity
+function wasCancelled(uint256 streamId) external view returns (bool cancelled)
+```
+
+Check if a stream was cancelled
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| cancelled | bool | True if stream was cancelled |
+
+#### getStreamNFT
+
+```solidity
+function getStreamNFT(uint256 streamId) external view returns (uint256 tokenId)
+```
+
+Get the NFT token ID for a stream (Sablier streams are NFTs)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| tokenId | uint256 | The ERC-721 token ID |
+
+#### transferStream
+
+```solidity
+function transferStream(uint256 streamId, address newRecipient) external
+```
+
+Transfer stream ownership (NFT transfer)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+| newRecipient | address | New recipient address |
+
diff --git a/pages/developers/api/reference/IServiceFeeDistributor.mdx b/pages/developers/api/reference/IServiceFeeDistributor.mdx
new file mode 100644
index 0000000..8b4c320
--- /dev/null
+++ b/pages/developers/api/reference/IServiceFeeDistributor.mdx
@@ -0,0 +1,158 @@
+---
+title: IServiceFeeDistributor
+description: Auto-generated Solidity API reference.
+---
+
+# IServiceFeeDistributor
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IServiceFeeDistributor.sol
+
+### IServiceFeeDistributor
+
+Tracks service-fee payouts to restakers across payment tokens
+
+_Receives delegation-change hooks from MultiAssetDelegation and fee-distribution calls from Tangle._
+
+#### Functions
+
+#### distributeServiceFee
+
+```solidity
+function distributeServiceFee(uint64 serviceId, uint64 blueprintId, address operator, address paymentToken, uint256 amount) external payable
+```
+
+#### distributeInflationReward
+
+```solidity
+function distributeInflationReward(uint64 serviceId, uint64 blueprintId, address operator, address paymentToken, uint256 amount) external payable
+```
+
+Distribute inflation-funded restaker rewards using service exposure weights
+
+_Intended for InflationPool; rewards are paid in the provided token (TNT)._
+
+#### claimFor
+
+```solidity
+function claimFor(address token, address operator, struct Types.Asset asset) external returns (uint256 amount)
+```
+
+Claim rewards for a specific delegator position and token
+
+#### claimAll
+
+```solidity
+function claimAll(address token) external returns (uint256 totalAmount)
+```
+
+Claim all pending rewards across all positions for a token
+
+#### claimAllBatch
+
+```solidity
+function claimAllBatch(address[] tokens) external returns (uint256[] amounts)
+```
+
+Claim all pending rewards for multiple tokens
+
+#### pendingRewards
+
+```solidity
+function pendingRewards(address delegator, address token) external view returns (uint256 pending)
+```
+
+Preview pending rewards for a delegator across all positions for a token
+
+#### delegatorOperators
+
+```solidity
+function delegatorOperators(address delegator) external view returns (address[] operators)
+```
+
+Return all operators a delegator has positions with
+
+#### delegatorAssets
+
+```solidity
+function delegatorAssets(address delegator, address operator) external view returns (bytes32[] assetHashes)
+```
+
+Return all asset hashes a delegator has positions for with an operator
+
+#### getPosition
+
+```solidity
+function getPosition(address delegator, address operator, bytes32 assetHash) external view returns (uint8 mode, uint256 principal, uint256 score)
+```
+
+Return a delegator's position details
+
+#### operatorRewardTokens
+
+```solidity
+function operatorRewardTokens(address operator) external view returns (address[] tokens)
+```
+
+Return reward tokens ever distributed for an operator
+
+#### onDelegationChanged
+
+```solidity
+function onDelegationChanged(address delegator, address operator, struct Types.Asset asset, uint256 amount, bool isIncrease, enum Types.BlueprintSelectionMode selectionMode, uint64[] blueprintIds, uint16 lockMultiplierBps) external
+```
+
+#### onBlueprintAdded
+
+```solidity
+function onBlueprintAdded(address delegator, address operator, struct Types.Asset asset, uint64 blueprintId) external
+```
+
+#### onBlueprintRemoved
+
+```solidity
+function onBlueprintRemoved(address delegator, address operator, struct Types.Asset asset, uint64 blueprintId) external
+```
+
+#### getPoolScore
+
+```solidity
+function getPoolScore(address operator, uint64 blueprintId, struct Types.Asset asset) external view returns (uint256 allScore, uint256 fixedScore)
+```
+
+#### getOperatorServiceUsdExposure
+
+```solidity
+function getOperatorServiceUsdExposure(uint64 serviceId, uint64 blueprintId, address operator) external view returns (uint256 totalUsdExposure)
+```
+
+Get USD-weighted exposure for an operator/service
+
+_Returns total USD exposure across All+Fixed pools for the service._
+
+#### onOperatorLeaving
+
+```solidity
+function onOperatorLeaving(uint64 serviceId, address operator) external
+```
+
+Called when an operator is about to leave a service
+
+_Drips all active streams for the operator BEFORE they're removed_
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64 serviceId, address refundRecipient) external
+```
+
+Called when a service is terminated early
+
+_Cancels streaming payments and refunds remaining amounts to the service owner_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The terminated service ID |
+| refundRecipient | address | Where to send the remaining payment (typically service owner) |
+
diff --git a/pages/developers/api/reference/IStreamingPaymentAdapter.mdx b/pages/developers/api/reference/IStreamingPaymentAdapter.mdx
new file mode 100644
index 0000000..0400092
--- /dev/null
+++ b/pages/developers/api/reference/IStreamingPaymentAdapter.mdx
@@ -0,0 +1,317 @@
+---
+title: IStreamingPaymentAdapter
+description: Auto-generated Solidity API reference.
+---
+
+# IStreamingPaymentAdapter
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### IStreamingPaymentAdapter
+
+Common interface for streaming payment adapters (Superfluid, Sablier, etc.)
+
+_Adapters implement this interface to provide streaming payment capabilities
+ to Tangle services without tight coupling to specific protocols._
+
+#### Functions
+
+#### createStream
+
+```solidity
+function createStream(uint64 serviceId, address token, uint256 totalAmount, uint64 durationSeconds, uint64 cliffSeconds) external payable returns (uint256 streamId)
+```
+
+Create a streaming payment for a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+| token | address | The ERC-20 token to stream (address(0) for native) |
+| totalAmount | uint256 | Total amount to stream |
+| durationSeconds | uint64 | Stream duration in seconds |
+| cliffSeconds | uint64 | Optional cliff period (0 for no cliff) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The created stream ID |
+
+#### updateStreamRate
+
+```solidity
+function updateStreamRate(uint256 streamId, uint256 newRatePerSecond) external
+```
+
+Update the rate of an existing stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID to update |
+| newRatePerSecond | uint256 | New streaming rate |
+
+#### cancelStream
+
+```solidity
+function cancelStream(uint256 streamId) external returns (uint256 refundedAmount)
+```
+
+Cancel a stream and refund remaining balance
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID to cancel |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| refundedAmount | uint256 | Amount refunded to the payer |
+
+#### withdrawFromStream
+
+```solidity
+function withdrawFromStream(uint256 streamId) external returns (uint256 withdrawnAmount)
+```
+
+Withdraw available funds from a stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| withdrawnAmount | uint256 | Amount withdrawn |
+
+#### settleAndDistribute
+
+```solidity
+function settleAndDistribute(uint256 streamId) external
+```
+
+Settle a stream's accumulated funds and distribute to operators
+
+_This triggers distribution through Tangle's payment system_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID to settle |
+
+#### getWithdrawableAmount
+
+```solidity
+function getWithdrawableAmount(uint256 streamId) external view returns (uint256 amount)
+```
+
+Get the current withdrawable amount for a stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| amount | uint256 | Amount available to withdraw |
+
+#### getStreamRate
+
+```solidity
+function getStreamRate(uint256 streamId) external view returns (uint256 ratePerSecond)
+```
+
+Get the current streaming rate
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| ratePerSecond | uint256 | Tokens per second being streamed |
+
+#### getStreamInfo
+
+```solidity
+function getStreamInfo(uint256 streamId) external view returns (uint64 serviceId, address payer, address token, uint256 totalAmount, uint256 withdrawnAmount, uint256 startTime, uint256 endTime, uint256 cliffTime, bool active)
+```
+
+Get full stream information
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | Associated Tangle service |
+| payer | address | Address funding the stream |
+| token | address | Token being streamed |
+| totalAmount | uint256 | Total stream amount |
+| withdrawnAmount | uint256 | Amount already withdrawn |
+| startTime | uint256 | Stream start timestamp |
+| endTime | uint256 | Stream end timestamp |
+| cliffTime | uint256 | Cliff timestamp (0 if no cliff) |
+| active | bool | Whether stream is active |
+
+#### getStreamServiceId
+
+```solidity
+function getStreamServiceId(uint256 streamId) external view returns (uint64 serviceId)
+```
+
+Get the service ID associated with a stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+
+#### getServiceStreams
+
+```solidity
+function getServiceStreams(uint64 serviceId) external view returns (uint256[] streamIds)
+```
+
+Get all active streams for a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamIds | uint256[] | Array of active stream IDs |
+
+#### getAccruedAmount
+
+```solidity
+function getAccruedAmount(uint256 streamId) external view returns (uint256 accruedAmount)
+```
+
+Calculate real-time accrued amount (not yet settled)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accruedAmount | uint256 | Amount accrued since last settlement |
+
+#### protocolName
+
+```solidity
+function protocolName() external view returns (string name)
+```
+
+Get the name of the underlying protocol
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Protocol name (e.g., "Superfluid", "Sablier") |
+
+#### isTokenSupported
+
+```solidity
+function isTokenSupported(address token) external view returns (bool supported)
+```
+
+Check if a token is supported for streaming
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The token address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| supported | bool | True if token can be streamed |
+
+#### Events
+
+#### StreamCreated
+
+```solidity
+event StreamCreated(uint64 serviceId, uint256 streamId, address payer, address token, uint256 ratePerSecond, uint256 totalAmount)
+```
+
+Emitted when a stream is created for a service
+
+#### StreamUpdated
+
+```solidity
+event StreamUpdated(uint64 serviceId, uint256 streamId, uint256 newRatePerSecond)
+```
+
+Emitted when a stream is updated
+
+#### StreamCancelled
+
+```solidity
+event StreamCancelled(uint64 serviceId, uint256 streamId, uint256 refundedAmount)
+```
+
+Emitted when a stream is cancelled
+
+#### StreamWithdrawn
+
+```solidity
+event StreamWithdrawn(uint64 serviceId, uint256 streamId, uint256 amount, address recipient)
+```
+
+Emitted when funds are withdrawn from a stream
+
+#### StreamSettled
+
+```solidity
+event StreamSettled(uint64 serviceId, uint256 streamId, uint256 amount)
+```
+
+Emitted when a stream is settled and distributed
+
diff --git a/pages/developers/api/reference/IStreamingPaymentManager.mdx b/pages/developers/api/reference/IStreamingPaymentManager.mdx
new file mode 100644
index 0000000..d1dcc07
--- /dev/null
+++ b/pages/developers/api/reference/IStreamingPaymentManager.mdx
@@ -0,0 +1,79 @@
+---
+title: IStreamingPaymentManager
+description: Auto-generated Solidity API reference.
+---
+
+# IStreamingPaymentManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentManager.sol
+
+### IStreamingPaymentManager
+
+Interface for streaming payment management
+
+#### Functions
+
+#### createStream
+
+```solidity
+function createStream(uint64 serviceId, uint64 blueprintId, address operator, address paymentToken, uint256 amount, uint64 startTime, uint64 endTime) external payable
+```
+
+Create a streaming payment for a service
+
+#### dripAndGetChunk
+
+```solidity
+function dripAndGetChunk(uint64 serviceId, address operator) external returns (uint256 amount, uint256 durationSeconds, uint64 blueprintId, address paymentToken)
+```
+
+Drip a specific stream and return chunk info
+
+#### dripOperatorStreams
+
+```solidity
+function dripOperatorStreams(address operator) external returns (uint64[] serviceIds, uint64[] blueprintIds, address[] paymentTokens, uint256[] amounts, uint256[] durations)
+```
+
+Drip all active streams for an operator
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64 serviceId, address refundRecipient) external
+```
+
+Called when service is terminated
+
+#### onOperatorLeaving
+
+```solidity
+function onOperatorLeaving(uint64 serviceId, address operator) external
+```
+
+Called when operator is leaving
+
+#### getOperatorActiveStreams
+
+```solidity
+function getOperatorActiveStreams(address operator) external view returns (uint64[])
+```
+
+Get active stream IDs for an operator
+
+#### getStreamingPayment
+
+```solidity
+function getStreamingPayment(uint64 serviceId, address operator) external view returns (uint64 _serviceId, uint64 blueprintId, address _operator, address paymentToken, uint256 totalAmount, uint256 distributed, uint64 startTime, uint64 endTime, uint64 lastDripTime)
+```
+
+Get streaming payment details
+
+#### pendingDrip
+
+```solidity
+function pendingDrip(uint64 serviceId, address operator) external view returns (uint256)
+```
+
+Calculate pending drip amount
+
diff --git a/pages/developers/api/reference/ISuperfluidAdapter.mdx b/pages/developers/api/reference/ISuperfluidAdapter.mdx
new file mode 100644
index 0000000..dfbb8db
--- /dev/null
+++ b/pages/developers/api/reference/ISuperfluidAdapter.mdx
@@ -0,0 +1,130 @@
+---
+title: ISuperfluidAdapter
+description: Auto-generated Solidity API reference.
+---
+
+# ISuperfluidAdapter
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### ISuperfluidAdapter
+
+Extended interface for Superfluid-specific features
+
+#### Functions
+
+#### getNetFlowRate
+
+```solidity
+function getNetFlowRate(address account, address token) external view returns (int96 netFlowRate)
+```
+
+Get the net flow rate for an account (incoming - outgoing)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The account address |
+| token | address | The super token |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| netFlowRate | int96 | Net flow rate (can be negative) |
+
+#### getRealtimeBalance
+
+```solidity
+function getRealtimeBalance(address account, address token) external view returns (int256 availableBalance, uint256 deposit)
+```
+
+Get the real-time balance of an account
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The account address |
+| token | address | The super token |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| availableBalance | int256 | Current available balance |
+| deposit | uint256 | Required deposit/buffer |
+
+#### isSolvent
+
+```solidity
+function isSolvent(address account, address token) external view returns (bool solvent)
+```
+
+Check if an account is solvent (positive balance)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The account address |
+| token | address | The super token |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| solvent | bool | True if account has positive balance |
+
+#### getRequiredBuffer
+
+```solidity
+function getRequiredBuffer(address token, int96 flowRate) external view returns (uint256 bufferAmount)
+```
+
+Get the required buffer/deposit for a flow rate
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The super token |
+| flowRate | int96 | Flow rate in wei/second |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| bufferAmount | uint256 | Required buffer deposit |
+
+#### wrapTokens
+
+```solidity
+function wrapTokens(address token, uint256 amount) external
+```
+
+Wrap underlying tokens to super tokens
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The underlying token |
+| amount | uint256 | Amount to wrap |
+
+#### unwrapTokens
+
+```solidity
+function unwrapTokens(address token, uint256 amount) external
+```
+
+Unwrap super tokens to underlying
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The super token |
+| amount | uint256 | Amount to unwrap |
+
diff --git a/pages/developers/api/reference/ITangle.mdx b/pages/developers/api/reference/ITangle.mdx
new file mode 100644
index 0000000..bf01264
--- /dev/null
+++ b/pages/developers/api/reference/ITangle.mdx
@@ -0,0 +1,16 @@
+---
+title: ITangle
+description: Auto-generated Solidity API reference.
+---
+
+# ITangle
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangle.sol
+
+### ITangle
+
+Core interface for Tangle Protocol
+
+_Consolidates all sub-interfaces into a single entry point.
+ Inherits from focused sub-interfaces for modularity._
+
diff --git a/pages/developers/api/reference/ITangleAdmin.mdx b/pages/developers/api/reference/ITangleAdmin.mdx
new file mode 100644
index 0000000..dd1d282
--- /dev/null
+++ b/pages/developers/api/reference/ITangleAdmin.mdx
@@ -0,0 +1,249 @@
+---
+title: ITangleAdmin
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleAdmin
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangle.sol
+
+### ITangleAdmin
+
+Admin functions for Tangle protocol
+
+#### Functions
+
+#### setRestaking
+
+```solidity
+function setRestaking(address restaking) external
+```
+
+Set the restaking module
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| restaking | address | The IRestaking implementation |
+
+#### setTreasury
+
+```solidity
+function setTreasury(address treasury) external
+```
+
+Set the protocol treasury
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| treasury | address | The treasury address |
+
+#### setPaymentSplit
+
+```solidity
+function setPaymentSplit(struct Types.PaymentSplit split) external
+```
+
+Set the payment split configuration
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| split | struct Types.PaymentSplit | The new split configuration |
+
+#### paymentSplit
+
+```solidity
+function paymentSplit() external view returns (uint16 developerBps, uint16 protocolBps, uint16 operatorBps, uint16 restakerBps)
+```
+
+Get the current payment split
+
+#### pause
+
+```solidity
+function pause() external
+```
+
+Pause the protocol
+
+#### unpause
+
+```solidity
+function unpause() external
+```
+
+Unpause the protocol
+
+#### treasury
+
+```solidity
+function treasury() external view returns (address payable)
+```
+
+Get the configured treasury
+
+#### setMetricsRecorder
+
+```solidity
+function setMetricsRecorder(address recorder) external
+```
+
+Set the metrics recorder (optional)
+
+#### metricsRecorder
+
+```solidity
+function metricsRecorder() external view returns (address)
+```
+
+Get the metrics recorder address
+
+#### setOperatorStatusRegistry
+
+```solidity
+function setOperatorStatusRegistry(address registry) external
+```
+
+Set operator status registry
+
+#### operatorStatusRegistry
+
+```solidity
+function operatorStatusRegistry() external view returns (address)
+```
+
+Get operator status registry
+
+#### setServiceFeeDistributor
+
+```solidity
+function setServiceFeeDistributor(address distributor) external
+```
+
+Configure service fee distributor
+
+#### serviceFeeDistributor
+
+```solidity
+function serviceFeeDistributor() external view returns (address)
+```
+
+Get service fee distributor
+
+#### setPriceOracle
+
+```solidity
+function setPriceOracle(address oracle) external
+```
+
+Configure price oracle
+
+#### priceOracle
+
+```solidity
+function priceOracle() external view returns (address)
+```
+
+Get price oracle
+
+#### setMBSMRegistry
+
+```solidity
+function setMBSMRegistry(address registry) external
+```
+
+Configure Master Blueprint Service Manager registry
+
+#### mbsmRegistry
+
+```solidity
+function mbsmRegistry() external view returns (address)
+```
+
+Get Master Blueprint Service Manager registry
+
+#### maxBlueprintsPerOperator
+
+```solidity
+function maxBlueprintsPerOperator() external view returns (uint32)
+```
+
+Get max blueprints per operator
+
+#### setMaxBlueprintsPerOperator
+
+```solidity
+function setMaxBlueprintsPerOperator(uint32 newMax) external
+```
+
+Set max blueprints per operator
+
+#### tntToken
+
+```solidity
+function tntToken() external view returns (address)
+```
+
+Get TNT token address
+
+#### setTntToken
+
+```solidity
+function setTntToken(address token) external
+```
+
+Set TNT token address
+
+#### rewardVaults
+
+```solidity
+function rewardVaults() external view returns (address)
+```
+
+Get reward vaults address
+
+#### setRewardVaults
+
+```solidity
+function setRewardVaults(address vaults) external
+```
+
+Set reward vaults address
+
+#### defaultTntMinExposureBps
+
+```solidity
+function defaultTntMinExposureBps() external view returns (uint16)
+```
+
+Get default TNT min exposure bps
+
+#### setDefaultTntMinExposureBps
+
+```solidity
+function setDefaultTntMinExposureBps(uint16 minExposureBps) external
+```
+
+Set default TNT min exposure bps
+
+#### tntPaymentDiscountBps
+
+```solidity
+function tntPaymentDiscountBps() external view returns (uint16)
+```
+
+Get TNT payment discount bps
+
+#### setTntPaymentDiscountBps
+
+```solidity
+function setTntPaymentDiscountBps(uint16 discountBps) external
+```
+
+Set TNT payment discount bps
+
diff --git a/pages/developers/api/reference/ITangleBlueprints.mdx b/pages/developers/api/reference/ITangleBlueprints.mdx
new file mode 100644
index 0000000..6593a39
--- /dev/null
+++ b/pages/developers/api/reference/ITangleBlueprints.mdx
@@ -0,0 +1,157 @@
+---
+title: ITangleBlueprints
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleBlueprints
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleBlueprints.sol
+
+### ITangleBlueprints
+
+Blueprint management interface
+
+#### Functions
+
+#### createBlueprint
+
+```solidity
+function createBlueprint(struct Types.BlueprintDefinition definition) external returns (uint64 blueprintId)
+```
+
+Create a blueprint from an encoded definition that includes schemas and job metadata
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| definition | struct Types.BlueprintDefinition | Fully populated blueprint definition struct |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The new blueprint ID |
+
+#### updateBlueprint
+
+```solidity
+function updateBlueprint(uint64 blueprintId, string metadataUri) external
+```
+
+Update blueprint metadata
+
+#### transferBlueprint
+
+```solidity
+function transferBlueprint(uint64 blueprintId, address newOwner) external
+```
+
+Transfer blueprint ownership
+
+#### deactivateBlueprint
+
+```solidity
+function deactivateBlueprint(uint64 blueprintId) external
+```
+
+Deactivate a blueprint
+
+#### getBlueprint
+
+```solidity
+function getBlueprint(uint64 blueprintId) external view returns (struct Types.Blueprint)
+```
+
+Get blueprint info
+
+#### getBlueprintConfig
+
+```solidity
+function getBlueprintConfig(uint64 blueprintId) external view returns (struct Types.BlueprintConfig)
+```
+
+Get blueprint configuration
+
+#### blueprintOperatorCount
+
+```solidity
+function blueprintOperatorCount(uint64 blueprintId) external view returns (uint256)
+```
+
+Get number of operators for a blueprint
+
+#### blueprintCount
+
+```solidity
+function blueprintCount() external view returns (uint64)
+```
+
+Get current blueprint count
+
+#### getBlueprintDefinition
+
+```solidity
+function getBlueprintDefinition(uint64 blueprintId) external view returns (struct Types.BlueprintDefinition definition)
+```
+
+Get the original blueprint definition
+
+#### blueprintMetadata
+
+```solidity
+function blueprintMetadata(uint64 blueprintId) external view returns (struct Types.BlueprintMetadata metadata, string metadataUri)
+```
+
+Get blueprint metadata and URI
+
+#### blueprintSources
+
+```solidity
+function blueprintSources(uint64 blueprintId) external view returns (struct Types.BlueprintSource[] sources)
+```
+
+Get blueprint sources
+
+#### blueprintSupportedMemberships
+
+```solidity
+function blueprintSupportedMemberships(uint64 blueprintId) external view returns (enum Types.MembershipModel[] memberships)
+```
+
+Get blueprint supported membership models
+
+#### blueprintMasterRevision
+
+```solidity
+function blueprintMasterRevision(uint64 blueprintId) external view returns (uint32)
+```
+
+Get master blueprint revision
+
+#### Events
+
+#### BlueprintCreated
+
+```solidity
+event BlueprintCreated(uint64 blueprintId, address owner, address manager, string metadataUri)
+```
+
+#### BlueprintUpdated
+
+```solidity
+event BlueprintUpdated(uint64 blueprintId, string metadataUri)
+```
+
+#### BlueprintTransferred
+
+```solidity
+event BlueprintTransferred(uint64 blueprintId, address from, address to)
+```
+
+#### BlueprintDeactivated
+
+```solidity
+event BlueprintDeactivated(uint64 blueprintId)
+```
+
diff --git a/pages/developers/api/reference/ITangleFull.mdx b/pages/developers/api/reference/ITangleFull.mdx
new file mode 100644
index 0000000..0232a16
--- /dev/null
+++ b/pages/developers/api/reference/ITangleFull.mdx
@@ -0,0 +1,13 @@
+---
+title: ITangleFull
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleFull
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangle.sol
+
+### ITangleFull
+
+Complete Tangle interface including admin and slashing
+
diff --git a/pages/developers/api/reference/ITangleGovernance.mdx b/pages/developers/api/reference/ITangleGovernance.mdx
new file mode 100644
index 0000000..de77f99
--- /dev/null
+++ b/pages/developers/api/reference/ITangleGovernance.mdx
@@ -0,0 +1,272 @@
+---
+title: ITangleGovernance
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleGovernance
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleGovernance.sol
+
+### ITangleGovernance
+
+Interface for Tangle governance components
+
+#### Types
+
+#### ProposalState
+
+Proposal states
+
+```solidity
+enum ProposalState {
+ Pending,
+ Active,
+ Canceled,
+ Defeated,
+ Succeeded,
+ Queued,
+ Expired,
+ Executed
+}
+```
+
+#### Functions
+
+#### propose
+
+```solidity
+function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) external returns (uint256 proposalId)
+```
+
+Create a new proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| description | string | Human-readable description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The unique proposal identifier |
+
+#### queue
+
+```solidity
+function queue(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) external returns (uint256 proposalId)
+```
+
+Queue a successful proposal for execution
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| descriptionHash | bytes32 | Hash of the proposal description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal identifier |
+
+#### execute
+
+```solidity
+function execute(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) external payable returns (uint256 proposalId)
+```
+
+Execute a queued proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| descriptionHash | bytes32 | Hash of the proposal description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal identifier |
+
+#### cancel
+
+```solidity
+function cancel(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) external returns (uint256 proposalId)
+```
+
+Cancel a proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| descriptionHash | bytes32 | Hash of the proposal description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal identifier |
+
+#### castVote
+
+```solidity
+function castVote(uint256 proposalId, uint8 support) external returns (uint256 weight)
+```
+
+Cast a vote on a proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal to vote on |
+| support | uint8 | 0=Against, 1=For, 2=Abstain |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| weight | uint256 | The voting weight used |
+
+#### castVoteWithReason
+
+```solidity
+function castVoteWithReason(uint256 proposalId, uint8 support, string reason) external returns (uint256 weight)
+```
+
+Cast a vote with reason
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal to vote on |
+| support | uint8 | 0=Against, 1=For, 2=Abstain |
+| reason | string | Explanation for the vote |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| weight | uint256 | The voting weight used |
+
+#### castVoteBySig
+
+```solidity
+function castVoteBySig(uint256 proposalId, uint8 support, address voter, bytes signature) external returns (uint256 weight)
+```
+
+Cast a vote using EIP-712 signature
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal to vote on |
+| support | uint8 | 0=Against, 1=For, 2=Abstain |
+| voter | address | The voter address |
+| signature | bytes | The EIP-712 signature |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| weight | uint256 | The voting weight used |
+
+#### state
+
+```solidity
+function state(uint256 proposalId) external view returns (enum ITangleGovernance.ProposalState)
+```
+
+Get the current state of a proposal
+
+#### proposalSnapshot
+
+```solidity
+function proposalSnapshot(uint256 proposalId) external view returns (uint256)
+```
+
+Get the block number when voting starts
+
+#### proposalDeadline
+
+```solidity
+function proposalDeadline(uint256 proposalId) external view returns (uint256)
+```
+
+Get the block number when voting ends
+
+#### proposalProposer
+
+```solidity
+function proposalProposer(uint256 proposalId) external view returns (address)
+```
+
+Get the proposer of a proposal
+
+#### hasVoted
+
+```solidity
+function hasVoted(uint256 proposalId, address account) external view returns (bool)
+```
+
+Check if an account has voted on a proposal
+
+#### getVotes
+
+```solidity
+function getVotes(address account, uint256 blockNumber) external view returns (uint256)
+```
+
+Get voting power of an account at a specific block
+
+#### quorum
+
+```solidity
+function quorum(uint256 blockNumber) external view returns (uint256)
+```
+
+Get the required quorum at a specific block
+
+#### votingDelay
+
+```solidity
+function votingDelay() external view returns (uint256)
+```
+
+Get the voting delay (blocks before voting starts)
+
+#### votingPeriod
+
+```solidity
+function votingPeriod() external view returns (uint256)
+```
+
+Get the voting period (blocks for voting)
+
+#### proposalThreshold
+
+```solidity
+function proposalThreshold() external view returns (uint256)
+```
+
+Get the proposal threshold (tokens needed to propose)
+
diff --git a/pages/developers/api/reference/ITangleJobs.mdx b/pages/developers/api/reference/ITangleJobs.mdx
index 4c317e0..2f0ee20 100644
--- a/pages/developers/api/reference/ITangleJobs.mdx
+++ b/pages/developers/api/reference/ITangleJobs.mdx
@@ -5,7 +5,7 @@ description: Auto-generated Solidity API reference.
# ITangleJobs
-Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleJobs.sol
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleJobs.sol
### ITangleJobs
@@ -49,14 +49,14 @@ _Only valid for jobs where requiresAggregation returns true_
##### Parameters
-| Name | Type | Description |
-| ------------------- | ---------- | ------------------------------------------------------------------------ |
-| serviceId | uint64 | The service ID |
-| callId | uint64 | The job call ID |
-| output | bytes | The aggregated output data |
-| signerBitmap | uint256 | Bitmap indicating which operators signed (bit i = operator i in service) |
-| aggregatedSignature | uint256[2] | The aggregated BLS signature [x, y] |
-| aggregatedPubkey | uint256[4] | The aggregated public key [x0, x1, y0, y1] |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| callId | uint64 | The job call ID |
+| output | bytes | The aggregated output data |
+| signerBitmap | uint256 | Bitmap indicating which operators signed (bit i = operator i in service) |
+| aggregatedSignature | uint256[2] | The aggregated BLS signature [x, y] |
+| aggregatedPubkey | uint256[4] | The aggregated public key [x0, x1, y0, y1] |
#### getJobCall
@@ -85,3 +85,8 @@ event JobResultSubmitted(uint64 serviceId, uint64 callId, address operator, byte
```solidity
event JobCompleted(uint64 serviceId, uint64 callId)
```
+
+Emitted when a job reaches its required result threshold
+
+_Derive resultCount from getJobCall(serviceId, callId).resultCount_
+
diff --git a/pages/developers/api/reference/ITangleOperators.mdx b/pages/developers/api/reference/ITangleOperators.mdx
index c643d5f..ecc97b3 100644
--- a/pages/developers/api/reference/ITangleOperators.mdx
+++ b/pages/developers/api/reference/ITangleOperators.mdx
@@ -5,12 +5,16 @@ description: Auto-generated Solidity API reference.
# ITangleOperators
-Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleOperators.sol
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleOperators.sol
### ITangleOperators
Operator registration and management interface
+_Operator liveness is tracked via OperatorStatusRegistry heartbeats,
+ not a setOperatorOnline call. Use submitHeartbeat/isOnline/getOperatorStatus
+ on the registry for liveness signals._
+
#### Functions
#### preRegister
@@ -24,35 +28,35 @@ Signal intent to register for a blueprint
#### registerOperator
```solidity
-function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external payable
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external
```
Register as operator for a blueprint
##### Parameters
-| Name | Type | Description |
-| -------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| blueprintId | uint64 | The blueprint to register for |
-| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity This key is used for signing/verifying messages in the P2P gossip network and may differ from the wallet key (msg.sender) |
-| rpcAddress | string | The operator's RPC endpoint URL |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint to register for |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity This key is used for signing/verifying messages in the P2P gossip network and may differ from the wallet key (msg.sender) |
+| rpcAddress | string | The operator's RPC endpoint URL |
#### registerOperator
```solidity
-function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress, bytes registrationInputs) external payable
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress, bytes registrationInputs) external
```
Register as operator providing blueprint-specific registration inputs
##### Parameters
-| Name | Type | Description |
-| ------------------ | ------ | ----------------------------------------------- |
-| blueprintId | uint64 | |
-| ecdsaPublicKey | bytes | |
-| rpcAddress | string | |
-| registrationInputs | bytes | Encoded payload validated by blueprint's schema |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | |
+| ecdsaPublicKey | bytes | |
+| rpcAddress | string | |
+| registrationInputs | bytes | Encoded payload validated by blueprint's schema |
#### unregisterOperator
@@ -72,11 +76,11 @@ Update operator preferences for a blueprint
##### Parameters
-| Name | Type | Description |
-| -------------- | ------ | --------------------------------------------------------- |
-| blueprintId | uint64 | The blueprint to update preferences for |
-| ecdsaPublicKey | bytes | New ECDSA public key (pass empty bytes to keep unchanged) |
-| rpcAddress | string | New RPC endpoint (pass empty string to keep unchanged) |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint to update preferences for |
+| ecdsaPublicKey | bytes | New ECDSA public key (pass empty bytes to keep unchanged) |
+| rpcAddress | string | New RPC endpoint (pass empty string to keep unchanged) |
#### getOperatorRegistration
@@ -124,12 +128,12 @@ Emitted when an operator registers for a blueprint
##### Parameters
-| Name | Type | Description |
-| -------------- | ------- | ------------------------------------------------ |
-| blueprintId | uint64 | The blueprint ID |
-| operator | address | The operator address (wallet) |
-| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity |
-| rpcAddress | string | The operator's RPC endpoint |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address (wallet) |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity |
+| rpcAddress | string | The operator's RPC endpoint |
#### OperatorUnregistered
@@ -147,9 +151,10 @@ Emitted when an operator updates their preferences
##### Parameters
-| Name | Type | Description |
-| -------------- | ------- | -------------------------------------------------------- |
-| blueprintId | uint64 | The blueprint ID |
-| operator | address | The operator address |
-| ecdsaPublicKey | bytes | The updated ECDSA public key (may be empty if unchanged) |
-| rpcAddress | string | The updated RPC endpoint (may be empty if unchanged) |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address |
+| ecdsaPublicKey | bytes | The updated ECDSA public key (may be empty if unchanged) |
+| rpcAddress | string | The updated RPC endpoint (may be empty if unchanged) |
+
diff --git a/pages/developers/api/reference/ITanglePaymentsInternal.mdx b/pages/developers/api/reference/ITanglePaymentsInternal.mdx
new file mode 100644
index 0000000..9ca2413
--- /dev/null
+++ b/pages/developers/api/reference/ITanglePaymentsInternal.mdx
@@ -0,0 +1,25 @@
+---
+title: ITanglePaymentsInternal
+description: Auto-generated Solidity API reference.
+---
+
+# ITanglePaymentsInternal
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITanglePaymentsInternal.sol
+
+### ITanglePaymentsInternal
+
+#### Functions
+
+#### distributePayment
+
+```solidity
+function distributePayment(uint64 serviceId, uint64 blueprintId, address token, uint256 amount, address[] operators, uint16[] exposures, uint256 totalExposure) external
+```
+
+#### depositToEscrow
+
+```solidity
+function depositToEscrow(uint64 serviceId, address token, uint256 amount) external
+```
+
diff --git a/pages/developers/api/reference/ITangleRewards.mdx b/pages/developers/api/reference/ITangleRewards.mdx
new file mode 100644
index 0000000..50c94c7
--- /dev/null
+++ b/pages/developers/api/reference/ITangleRewards.mdx
@@ -0,0 +1,81 @@
+---
+title: ITangleRewards
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleRewards
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleRewards.sol
+
+### ITangleRewards
+
+Reward distribution and claiming interface
+
+#### Functions
+
+#### claimRewards
+
+```solidity
+function claimRewards() external
+```
+
+Claim accumulated rewards (native token)
+
+#### claimRewards
+
+```solidity
+function claimRewards(address token) external
+```
+
+Claim accumulated rewards for a specific token
+
+#### claimRewardsBatch
+
+```solidity
+function claimRewardsBatch(address[] tokens) external
+```
+
+Claim accumulated rewards for multiple tokens
+
+#### claimRewardsAll
+
+```solidity
+function claimRewardsAll() external
+```
+
+Claim accumulated rewards for all pending tokens
+
+#### pendingRewards
+
+```solidity
+function pendingRewards(address account) external view returns (uint256)
+```
+
+Get pending rewards for an account (native token)
+
+#### pendingRewards
+
+```solidity
+function pendingRewards(address account, address token) external view returns (uint256)
+```
+
+Get pending rewards for an account and token
+
+#### rewardTokens
+
+```solidity
+function rewardTokens(address account) external view returns (address[])
+```
+
+List tokens with non-zero pending rewards for an account
+
+_Convenience view; mappings are not enumerable._
+
+#### Events
+
+#### RewardsClaimed
+
+```solidity
+event RewardsClaimed(address account, address token, uint256 amount)
+```
+
diff --git a/pages/developers/api/reference/ITangleSecurityView.mdx b/pages/developers/api/reference/ITangleSecurityView.mdx
new file mode 100644
index 0000000..7252462
--- /dev/null
+++ b/pages/developers/api/reference/ITangleSecurityView.mdx
@@ -0,0 +1,45 @@
+---
+title: ITangleSecurityView
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleSecurityView
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleSecurityView.sol
+
+### ITangleSecurityView
+
+Minimal view interface for reading service security requirements + operator commitments.
+
+#### Functions
+
+#### getServiceSecurityRequirements
+
+```solidity
+function getServiceSecurityRequirements(uint64 serviceId) external view returns (struct Types.AssetSecurityRequirement[])
+```
+
+#### getServiceSecurityCommitmentBps
+
+```solidity
+function getServiceSecurityCommitmentBps(uint64 serviceId, address operator, enum Types.AssetKind kind, address token) external view returns (uint16)
+```
+
+#### treasury
+
+```solidity
+function treasury() external view returns (address payable)
+```
+
+#### getService
+
+```solidity
+function getService(uint64 serviceId) external view returns (struct Types.Service)
+```
+
+#### getServiceOperators
+
+```solidity
+function getServiceOperators(uint64 serviceId) external view returns (address[])
+```
+
diff --git a/pages/developers/api/reference/ITangleServices.mdx b/pages/developers/api/reference/ITangleServices.mdx
index d92a263..f7f88bc 100644
--- a/pages/developers/api/reference/ITangleServices.mdx
+++ b/pages/developers/api/reference/ITangleServices.mdx
@@ -5,7 +5,7 @@ description: Auto-generated Solidity API reference.
# ITangleServices
-Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleServices.sol
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleServices.sol
### ITangleServices
@@ -77,13 +77,13 @@ _No approval flow needed - operators have pre-committed via signatures_
##### Parameters
-| Name | Type | Description |
-| ---------------- | -------------------------- | ---------------------------------------- |
-| blueprintId | uint64 | The blueprint to use |
-| quotes | struct Types.SignedQuote[] | Array of signed quotes from operators |
-| config | bytes | Service configuration |
-| permittedCallers | address[] | Addresses allowed to call jobs |
-| ttl | uint64 | Service time-to-live (must match quotes) |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint to use |
+| quotes | struct Types.SignedQuote[] | Array of signed quotes from operators |
+| config | bytes | Service configuration |
+| permittedCallers | address[] | Addresses allowed to call jobs |
+| ttl | uint64 | Service time-to-live (must match quotes) |
#### extendServiceFromQuotes
@@ -183,10 +183,10 @@ Force remove an operator from a service (blueprint manager only)
##### Parameters
-| Name | Type | Description |
-| --------- | ------- | ---------------------- |
-| serviceId | uint64 | The service ID |
-| operator | address | The operator to remove |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator to remove |
#### billSubscription
@@ -367,7 +367,7 @@ event ServiceRequested(uint64 requestId, uint64 blueprintId, address requester)
#### ServiceRequestedWithSecurity
```solidity
-event ServiceRequestedWithSecurity(uint64 requestId, uint64 blueprintId, address requester, address[] operators, struct Types.AssetSecurityRequirement[] securityRequirements)
+event ServiceRequestedWithSecurity(uint64 requestId, uint64 blueprintId, address requester)
```
#### ServiceApproved
@@ -411,3 +411,4 @@ event OperatorLeftService(uint64 serviceId, address operator)
```solidity
event SubscriptionBilled(uint64 serviceId, uint256 amount, uint64 period)
```
+
diff --git a/pages/developers/api/reference/ITangleSlashing.mdx b/pages/developers/api/reference/ITangleSlashing.mdx
new file mode 100644
index 0000000..ef5063c
--- /dev/null
+++ b/pages/developers/api/reference/ITangleSlashing.mdx
@@ -0,0 +1,108 @@
+---
+title: ITangleSlashing
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleSlashing
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleSlashing.sol
+
+### ITangleSlashing
+
+Slashing interface for Tangle protocol
+
+#### Functions
+
+#### proposeSlash
+
+```solidity
+function proposeSlash(uint64 serviceId, address operator, uint256 amount, bytes32 evidence) external returns (uint64 slashId)
+```
+
+Propose a slash against an operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service where violation occurred |
+| operator | address | The operator to slash |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slashId | uint64 | The ID of the created slash proposal |
+
+#### disputeSlash
+
+```solidity
+function disputeSlash(uint64 slashId, string reason) external
+```
+
+Dispute a slash proposal
+
+#### executeSlash
+
+```solidity
+function executeSlash(uint64 slashId) external returns (uint256 actualSlashed)
+```
+
+Execute a slash proposal
+
+#### executeSlashBatch
+
+```solidity
+function executeSlashBatch(uint64[] slashIds) external returns (uint256 totalSlashed, uint256 executedCount)
+```
+
+Execute a batch of slashes
+
+#### getExecutableSlashes
+
+```solidity
+function getExecutableSlashes(uint64 fromId, uint64 toId) external view returns (uint64[] ids)
+```
+
+Get list of executable slash IDs in a range
+
+#### cancelSlash
+
+```solidity
+function cancelSlash(uint64 slashId, string reason) external
+```
+
+Cancel a slash proposal
+
+#### setSlashConfig
+
+```solidity
+function setSlashConfig(uint64 disputeWindow, bool instantSlashEnabled, uint16 maxSlashBps) external
+```
+
+Update slashing configuration
+
+#### getSlashProposal
+
+```solidity
+function getSlashProposal(uint64 slashId) external view returns (struct SlashingLib.SlashProposal)
+```
+
+Get slash proposal details
+
+#### Events
+
+#### SlashProposed
+
+```solidity
+event SlashProposed(uint64 serviceId, address operator, uint256 amount, bytes32 evidence)
+```
+
+#### SlashExecuted
+
+```solidity
+event SlashExecuted(uint64 serviceId, address operator, uint256 amount)
+```
+
diff --git a/pages/developers/api/reference/ITangleToken.mdx b/pages/developers/api/reference/ITangleToken.mdx
new file mode 100644
index 0000000..2f0d436
--- /dev/null
+++ b/pages/developers/api/reference/ITangleToken.mdx
@@ -0,0 +1,95 @@
+---
+title: ITangleToken
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleToken
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleGovernance.sol
+
+### ITangleToken
+
+Interface for the TNT governance token
+
+#### Functions
+
+#### getVotes
+
+```solidity
+function getVotes(address account) external view returns (uint256)
+```
+
+Get the current voting power of an account
+
+#### getPastVotes
+
+```solidity
+function getPastVotes(address account, uint256 blockNumber) external view returns (uint256)
+```
+
+Get historical voting power at a past block
+
+#### getPastTotalSupply
+
+```solidity
+function getPastTotalSupply(uint256 blockNumber) external view returns (uint256)
+```
+
+Get the total supply at a past block
+
+#### delegates
+
+```solidity
+function delegates(address account) external view returns (address)
+```
+
+Get the delegate of an account
+
+#### delegate
+
+```solidity
+function delegate(address delegatee) external
+```
+
+Delegate voting power to another address
+
+#### delegateBySig
+
+```solidity
+function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external
+```
+
+Delegate using EIP-712 signature
+
+#### totalSupply
+
+```solidity
+function totalSupply() external view returns (uint256)
+```
+
+Standard ERC20 functions
+
+#### balanceOf
+
+```solidity
+function balanceOf(address account) external view returns (uint256)
+```
+
+#### transfer
+
+```solidity
+function transfer(address to, uint256 amount) external returns (bool)
+```
+
+#### approve
+
+```solidity
+function approve(address spender, uint256 amount) external returns (bool)
+```
+
+#### transferFrom
+
+```solidity
+function transferFrom(address from, address to, uint256 amount) external returns (bool)
+```
+
diff --git a/pages/developers/api/reference/generated/BlueprintHookBase.mdx b/pages/developers/api/reference/generated/BlueprintHookBase.mdx
new file mode 100644
index 0000000..adca2a8
--- /dev/null
+++ b/pages/developers/api/reference/generated/BlueprintHookBase.mdx
@@ -0,0 +1,143 @@
+---
+title: BlueprintHookBase
+description: Auto-generated Solidity API reference.
+---
+
+# BlueprintHookBase
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IBlueprintHook.sol
+
+### BlueprintHookBase
+
+Base implementation with sensible defaults
+
+_For full features, extend BlueprintServiceManagerBase instead_
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64, address) external virtual
+```
+
+#### onOperatorRegister
+
+```solidity
+function onOperatorRegister(uint64, address, bytes) external virtual returns (bool)
+```
+
+#### onOperatorUnregister
+
+```solidity
+function onOperatorUnregister(uint64, address) external virtual
+```
+
+#### onServiceRequest
+
+```solidity
+function onServiceRequest(uint64, uint64, address, address[], bytes) external payable virtual returns (bool)
+```
+
+#### onServiceApprove
+
+```solidity
+function onServiceApprove(uint64, address, uint8) external virtual
+```
+
+#### onServiceReject
+
+```solidity
+function onServiceReject(uint64, address) external virtual
+```
+
+#### onServiceActivated
+
+```solidity
+function onServiceActivated(uint64, uint64, address, address[]) external virtual
+```
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64, address) external virtual
+```
+
+#### canJoin
+
+```solidity
+function canJoin(uint64, address, uint16) external view virtual returns (bool)
+```
+
+#### canLeave
+
+```solidity
+function canLeave(uint64, address) external view virtual returns (bool)
+```
+
+#### onJobSubmitted
+
+```solidity
+function onJobSubmitted(uint64, uint64, uint8, address, bytes) external payable virtual returns (bool)
+```
+
+#### onJobResult
+
+```solidity
+function onJobResult(uint64, uint64, address, bytes) external virtual returns (bool)
+```
+
+#### onJobCompleted
+
+```solidity
+function onJobCompleted(uint64, uint64, uint32) external virtual
+```
+
+#### onSlashProposed
+
+```solidity
+function onSlashProposed(uint64, address, uint256, bytes32) external virtual returns (bool)
+```
+
+#### onSlashApplied
+
+```solidity
+function onSlashApplied(uint64, address, uint256) external virtual
+```
+
+#### getDeveloperPaymentAddress
+
+```solidity
+function getDeveloperPaymentAddress(uint64) external view virtual returns (address payable)
+```
+
+#### isPaymentTokenAllowed
+
+```solidity
+function isPaymentTokenAllowed(address) external view virtual returns (bool)
+```
+
+#### getRequiredResultCount
+
+```solidity
+function getRequiredResultCount(uint64, uint8) external view virtual returns (uint32)
+```
+
+#### requiresAggregation
+
+```solidity
+function requiresAggregation(uint64, uint8) external view virtual returns (bool)
+```
+
+#### getAggregationThreshold
+
+```solidity
+function getAggregationThreshold(uint64, uint8) external view virtual returns (uint16, uint8)
+```
+
+#### onAggregatedResult
+
+```solidity
+function onAggregatedResult(uint64, uint64, uint256, bytes) external virtual
+```
+
diff --git a/pages/developers/api/reference/generated/IBlueprintHook.mdx b/pages/developers/api/reference/generated/IBlueprintHook.mdx
new file mode 100644
index 0000000..f5ec487
--- /dev/null
+++ b/pages/developers/api/reference/generated/IBlueprintHook.mdx
@@ -0,0 +1,227 @@
+---
+title: IBlueprintHook
+description: Auto-generated Solidity API reference.
+---
+
+# IBlueprintHook
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IBlueprintHook.sol
+
+### IBlueprintHook
+
+Simplified hook interface for basic blueprint customization
+
+_For full control, implement IBlueprintServiceManager directly.
+ This interface provides a simpler subset for common use cases.
+
+Migration path:
+- Simple blueprints: Use IBlueprintHook / BlueprintHookBase
+- Full-featured blueprints: Use IBlueprintServiceManager / BlueprintServiceManagerBase_
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64 blueprintId, address owner) external
+```
+
+Called when blueprint is created
+
+#### onOperatorRegister
+
+```solidity
+function onOperatorRegister(uint64 blueprintId, address operator, bytes data) external returns (bool accept)
+```
+
+Called when an operator registers
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept registration |
+
+#### onOperatorUnregister
+
+```solidity
+function onOperatorUnregister(uint64 blueprintId, address operator) external
+```
+
+Called when an operator unregisters
+
+#### onServiceRequest
+
+```solidity
+function onServiceRequest(uint64 requestId, uint64 blueprintId, address requester, address[] operators, bytes config) external payable returns (bool accept)
+```
+
+Called when a service is requested
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept request |
+
+#### onServiceApprove
+
+```solidity
+function onServiceApprove(uint64 requestId, address operator, uint8 restakingPercent) external
+```
+
+Called when an operator approves a service request
+
+#### onServiceReject
+
+```solidity
+function onServiceReject(uint64 requestId, address operator) external
+```
+
+Called when an operator rejects a service request
+
+#### onServiceActivated
+
+```solidity
+function onServiceActivated(uint64 serviceId, uint64 requestId, address owner, address[] operators) external
+```
+
+Called when service becomes active
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64 serviceId, address owner) external
+```
+
+Called when service is terminated
+
+#### canJoin
+
+```solidity
+function canJoin(uint64 serviceId, address operator, uint16 exposureBps) external view returns (bool)
+```
+
+Check if operator can join a dynamic service
+
+#### canLeave
+
+```solidity
+function canLeave(uint64 serviceId, address operator) external view returns (bool)
+```
+
+Check if operator can leave a dynamic service
+
+#### onJobSubmitted
+
+```solidity
+function onJobSubmitted(uint64 serviceId, uint64 callId, uint8 jobIndex, address caller, bytes inputs) external payable returns (bool accept)
+```
+
+Called when a job is submitted
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept job |
+
+#### onJobResult
+
+```solidity
+function onJobResult(uint64 serviceId, uint64 callId, address operator, bytes result) external returns (bool accept)
+```
+
+Called when an operator submits a result
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accept | bool | True to accept result |
+
+#### onJobCompleted
+
+```solidity
+function onJobCompleted(uint64 serviceId, uint64 callId, uint32 resultCount) external
+```
+
+Called when a job is marked complete
+
+#### onSlashProposed
+
+```solidity
+function onSlashProposed(uint64 serviceId, address operator, uint256 amount, bytes32 evidence) external returns (bool approve)
+```
+
+Called before a slash is applied
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| approve | bool | True to approve slash |
+
+#### onSlashApplied
+
+```solidity
+function onSlashApplied(uint64 serviceId, address operator, uint256 amount) external
+```
+
+Called after a slash is applied
+
+#### getDeveloperPaymentAddress
+
+```solidity
+function getDeveloperPaymentAddress(uint64 serviceId) external view returns (address payable)
+```
+
+Get the developer payment address
+
+#### isPaymentTokenAllowed
+
+```solidity
+function isPaymentTokenAllowed(address token) external view returns (bool)
+```
+
+Check if a payment token is allowed
+
+#### getRequiredResultCount
+
+```solidity
+function getRequiredResultCount(uint64 serviceId, uint8 jobIndex) external view returns (uint32)
+```
+
+Get the number of results required for job completion
+
+#### requiresAggregation
+
+```solidity
+function requiresAggregation(uint64 serviceId, uint8 jobIndex) external view returns (bool)
+```
+
+Check if a job requires BLS aggregated results
+
+#### getAggregationThreshold
+
+```solidity
+function getAggregationThreshold(uint64 serviceId, uint8 jobIndex) external view returns (uint16 thresholdBps, uint8 thresholdType)
+```
+
+Get the aggregation threshold configuration for a job
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| thresholdBps | uint16 | Threshold in basis points (6700 = 67%) |
+| thresholdType | uint8 | 0 = CountBased (% of operators), 1 = StakeWeighted (% of total stake) |
+
+#### onAggregatedResult
+
+```solidity
+function onAggregatedResult(uint64 serviceId, uint64 callId, uint256 signerBitmap, bytes output) external
+```
+
+Called when an aggregated result is submitted
+
diff --git a/pages/developers/api/reference/generated/IBlueprintServiceManager.mdx b/pages/developers/api/reference/generated/IBlueprintServiceManager.mdx
new file mode 100644
index 0000000..ac1fc29
--- /dev/null
+++ b/pages/developers/api/reference/generated/IBlueprintServiceManager.mdx
@@ -0,0 +1,656 @@
+---
+title: IBlueprintServiceManager
+description: Auto-generated Solidity API reference.
+---
+
+# IBlueprintServiceManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IBlueprintServiceManager.sol
+
+### IBlueprintServiceManager
+
+Full interface for blueprint-specific service managers
+
+_Blueprint developers implement this to customize all aspects of their blueprint.
+ This is the primary integration point for blueprint developers - implement the hooks
+ you need and leave others as default (via BlueprintServiceManagerBase).
+
+The lifecycle flow:
+1. Blueprint created → onBlueprintCreated
+2. Operators register → onRegister
+3. Service requested → onRequest
+4. Operators approve → onApprove
+5. Service activated → onServiceInitialized
+6. Jobs submitted → onJobCall
+7. Results submitted → onJobResult
+8. Service terminated → onServiceTermination_
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64 blueprintId, address owner, address tangleCore) external
+```
+
+Called when blueprint is created
+
+_Store the blueprintId and tangleCore address for future reference_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The new blueprint ID |
+| owner | address | The blueprint owner |
+| tangleCore | address | The address of the Tangle core contract |
+
+#### onRegister
+
+```solidity
+function onRegister(address operator, bytes registrationInputs) external payable
+```
+
+Called when an operator registers to this blueprint
+
+_Validate operator requirements here (stake, reputation, etc.)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator's address |
+| registrationInputs | bytes | Custom registration data (blueprint-specific encoding) |
+
+#### onUnregister
+
+```solidity
+function onUnregister(address operator) external
+```
+
+Called when an operator unregisters from this blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator's address |
+
+#### onUpdatePreferences
+
+```solidity
+function onUpdatePreferences(address operator, bytes newPreferences) external payable
+```
+
+Called when an operator updates their preferences (RPC address, etc.)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator's address |
+| newPreferences | bytes | Updated preferences data |
+
+#### getHeartbeatInterval
+
+```solidity
+function getHeartbeatInterval(uint64 serviceId) external view returns (bool useDefault, uint64 interval)
+```
+
+Get the heartbeat interval for a service
+
+_Operators must submit heartbeats within this interval_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default, false to use custom value |
+| interval | uint64 | Heartbeat interval in blocks (0 = disabled) |
+
+#### getHeartbeatThreshold
+
+```solidity
+function getHeartbeatThreshold(uint64 serviceId) external view returns (bool useDefault, uint8 threshold)
+```
+
+Get the heartbeat threshold for a service
+
+_Percentage of operators that must respond within interval_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default |
+| threshold | uint8 | Threshold percentage (0-100) |
+
+#### getSlashingWindow
+
+```solidity
+function getSlashingWindow(uint64 serviceId) external view returns (bool useDefault, uint64 window)
+```
+
+Get the slashing window for a service
+
+_Time window for disputes before slash is finalized_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default |
+| window | uint64 | Slashing window in blocks |
+
+#### getExitConfig
+
+```solidity
+function getExitConfig(uint64 serviceId) external view returns (bool useDefault, uint64 minCommitmentDuration, uint64 exitQueueDuration, bool forceExitAllowed)
+```
+
+Get the exit configuration for operator departures
+
+_Defines minimum commitment and exit queue timing_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default |
+| minCommitmentDuration | uint64 | Minimum time operator must stay after joining (seconds) |
+| exitQueueDuration | uint64 | Time between scheduling exit and completing it (seconds) |
+| forceExitAllowed | bool | Whether service owner can force-exit operators |
+
+#### onRequest
+
+```solidity
+function onRequest(uint64 requestId, address requester, address[] operators, bytes requestInputs, uint64 ttl, address paymentAsset, uint256 paymentAmount) external payable
+```
+
+Called when a service is requested
+
+_Validate service configuration, operator selection, payment amount_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint64 | The request ID |
+| requester | address | Who is requesting the service |
+| operators | address[] | Requested operators |
+| requestInputs | bytes | Service configuration (blueprint-specific encoding) |
+| ttl | uint64 | Time-to-live for the service |
+| paymentAsset | address | Payment token address (address(0) for native) |
+| paymentAmount | uint256 | Payment amount |
+
+#### onApprove
+
+```solidity
+function onApprove(address operator, uint64 requestId, uint8 restakingPercent) external payable
+```
+
+Called when an operator approves a service request
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The approving operator |
+| requestId | uint64 | The request ID |
+| restakingPercent | uint8 | Percentage of stake committed to this service (0-100) |
+
+#### onReject
+
+```solidity
+function onReject(address operator, uint64 requestId) external
+```
+
+Called when an operator rejects a service request
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The rejecting operator |
+| requestId | uint64 | The request ID |
+
+#### onServiceInitialized
+
+```solidity
+function onServiceInitialized(uint64 blueprintId, uint64 requestId, uint64 serviceId, address owner, address[] permittedCallers, uint64 ttl) external
+```
+
+Called when service becomes active (all operators approved)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| requestId | uint64 | The original request ID |
+| serviceId | uint64 | The new service ID |
+| owner | address | The service owner |
+| permittedCallers | address[] | Addresses allowed to submit jobs |
+| ttl | uint64 | Service time-to-live |
+
+#### onServiceTermination
+
+```solidity
+function onServiceTermination(uint64 serviceId, address owner) external
+```
+
+Called when service is terminated
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| owner | address | The service owner |
+
+#### canJoin
+
+```solidity
+function canJoin(uint64 serviceId, address operator) external view returns (bool allowed)
+```
+
+Check if an operator can join a dynamic service
+
+_Called before operator joins - return false to reject_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator wanting to join |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| allowed | bool | True if operator can join |
+
+#### onOperatorJoined
+
+```solidity
+function onOperatorJoined(uint64 serviceId, address operator, uint16 exposureBps) external
+```
+
+Called after an operator successfully joins a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator that joined |
+| exposureBps | uint16 | The operator's stake exposure in basis points |
+
+#### canLeave
+
+```solidity
+function canLeave(uint64 serviceId, address operator) external view returns (bool allowed)
+```
+
+Check if an operator can leave a dynamic service
+
+_Called before operator leaves - return false to reject
+ Note: This is called AFTER the exit queue check. Use getExitConfig to customize timing._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator wanting to leave |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| allowed | bool | True if operator can leave |
+
+#### onOperatorLeft
+
+```solidity
+function onOperatorLeft(uint64 serviceId, address operator) external
+```
+
+Called after an operator successfully leaves a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator that left |
+
+#### onExitScheduled
+
+```solidity
+function onExitScheduled(uint64 serviceId, address operator, uint64 executeAfter) external
+```
+
+Called when an operator schedules their exit from a service
+
+_Allows manager to track pending exits, notify other parties, etc._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator scheduling exit |
+| executeAfter | uint64 | Timestamp when exit can be executed |
+
+#### onExitCanceled
+
+```solidity
+function onExitCanceled(uint64 serviceId, address operator) external
+```
+
+Called when an operator cancels their scheduled exit
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator canceling exit |
+
+#### onJobCall
+
+```solidity
+function onJobCall(uint64 serviceId, uint8 job, uint64 jobCallId, bytes inputs) external payable
+```
+
+Called when a job is submitted
+
+_Validate job inputs, check caller permissions, etc._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| job | uint8 | The job index in the blueprint |
+| jobCallId | uint64 | Unique ID for this job call |
+| inputs | bytes | Job inputs (blueprint-specific encoding) |
+
+#### onJobResult
+
+```solidity
+function onJobResult(uint64 serviceId, uint8 job, uint64 jobCallId, address operator, bytes inputs, bytes outputs) external payable
+```
+
+Called when an operator submits a job result
+
+_Validate result format, check operator eligibility, aggregate results_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| job | uint8 | The job index |
+| jobCallId | uint64 | The job call ID |
+| operator | address | The operator submitting |
+| inputs | bytes | Original job inputs |
+| outputs | bytes | Result outputs (blueprint-specific encoding) |
+
+#### onUnappliedSlash
+
+```solidity
+function onUnappliedSlash(uint64 serviceId, bytes offender, uint8 slashPercent) external
+```
+
+Called when a slash is queued but not yet applied
+
+_This is the dispute window - gather evidence, notify parties_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| offender | bytes | The operator being slashed (encoded as bytes for flexibility) |
+| slashPercent | uint8 | Percentage of stake to slash |
+
+#### onSlash
+
+```solidity
+function onSlash(uint64 serviceId, bytes offender, uint8 slashPercent) external
+```
+
+Called when a slash is finalized and applied
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| offender | bytes | The slashed operator |
+| slashPercent | uint8 | Percentage slashed |
+
+#### querySlashingOrigin
+
+```solidity
+function querySlashingOrigin(uint64 serviceId) external view returns (address slashingOrigin)
+```
+
+Query the account authorized to propose slashes for a service
+
+_Override to allow custom slashing authorities (dispute contracts, etc.)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slashingOrigin | address | Address that can slash (default: this contract) |
+
+#### queryDisputeOrigin
+
+```solidity
+function queryDisputeOrigin(uint64 serviceId) external view returns (address disputeOrigin)
+```
+
+Query the account authorized to dispute slashes
+
+_Override to allow custom dispute resolution_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| disputeOrigin | address | Address that can dispute (default: this contract) |
+
+#### queryDeveloperPaymentAddress
+
+```solidity
+function queryDeveloperPaymentAddress(uint64 serviceId) external view returns (address payable developerPaymentAddress)
+```
+
+Get the developer payment address for a service
+
+_Override to route payments to different addresses per service_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| developerPaymentAddress | address payable | Address to receive developer share |
+
+#### queryIsPaymentAssetAllowed
+
+```solidity
+function queryIsPaymentAssetAllowed(uint64 serviceId, address asset) external view returns (bool isAllowed)
+```
+
+Check if a payment asset is allowed for this blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| asset | address | The payment asset address (address(0) for native) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| isAllowed | bool | True if the asset can be used for payment |
+
+#### getRequiredResultCount
+
+```solidity
+function getRequiredResultCount(uint64 serviceId, uint8 jobIndex) external view returns (uint32 required)
+```
+
+Get the number of results required to complete a job
+
+_Override for consensus requirements (e.g., 2/3 majority)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| jobIndex | uint8 | The job index |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| required | uint32 | Number of results needed (0 = service operator count) |
+
+#### requiresAggregation
+
+```solidity
+function requiresAggregation(uint64 serviceId, uint8 jobIndex) external view returns (bool required)
+```
+
+Check if a job requires BLS aggregated results
+
+_When true, operators must submit individual signatures that are aggregated
+ off-chain, then submitted via submitAggregatedResult instead of submitResult_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| jobIndex | uint8 | The job index |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| required | bool | True if BLS aggregation is required for this job |
+
+#### getAggregationThreshold
+
+```solidity
+function getAggregationThreshold(uint64 serviceId, uint8 jobIndex) external view returns (uint16 thresholdBps, uint8 thresholdType)
+```
+
+Get the aggregation threshold configuration for a job
+
+_Only relevant if requiresAggregation returns true_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| jobIndex | uint8 | The job index |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| thresholdBps | uint16 | Threshold in basis points (6700 = 67%) |
+| thresholdType | uint8 | 0 = CountBased (% of operators), 1 = StakeWeighted (% of total stake) |
+
+#### onAggregatedResult
+
+```solidity
+function onAggregatedResult(uint64 serviceId, uint8 job, uint64 jobCallId, bytes output, uint256 signerBitmap, uint256[2] aggregatedSignature, uint256[4] aggregatedPubkey) external
+```
+
+Called when an aggregated job result is submitted
+
+_Validate the aggregated result, verify BLS signature, check threshold_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| job | uint8 | The job index |
+| jobCallId | uint64 | The job call ID |
+| output | bytes | The aggregated output |
+| signerBitmap | uint256 | Bitmap of which operators signed |
+| aggregatedSignature | uint256[2] | The aggregated BLS signature (G1 point x, y) |
+| aggregatedPubkey | uint256[4] | The aggregated public key of signers (G2 point) |
+
+#### getMinOperatorStake
+
+```solidity
+function getMinOperatorStake() external view returns (bool useDefault, uint256 minStake)
+```
+
+Get the minimum stake required for operators to register for this blueprint
+
+_Called during operator registration to validate stake requirements_
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| useDefault | bool | True to use protocol default from restaking module |
+| minStake | uint256 | Custom minimum stake amount (only used if useDefault=false) |
+
diff --git a/pages/developers/api/reference/generated/IERC7540.mdx b/pages/developers/api/reference/generated/IERC7540.mdx
new file mode 100644
index 0000000..9528dbd
--- /dev/null
+++ b/pages/developers/api/reference/generated/IERC7540.mdx
@@ -0,0 +1,15 @@
+---
+title: IERC7540
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540
+
+Full ERC7540 interface combining deposit, redeem, and operator management
+
+_Extends ERC4626 with asynchronous request patterns_
+
diff --git a/pages/developers/api/reference/generated/IERC7540Deposit.mdx b/pages/developers/api/reference/generated/IERC7540Deposit.mdx
new file mode 100644
index 0000000..871833a
--- /dev/null
+++ b/pages/developers/api/reference/generated/IERC7540Deposit.mdx
@@ -0,0 +1,91 @@
+---
+title: IERC7540Deposit
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540Deposit
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540Deposit
+
+Interface for asynchronous deposit requests
+
+_See https://eips.ethereum.org/EIPS/eip-7540_
+
+#### Functions
+
+#### requestDeposit
+
+```solidity
+function requestDeposit(uint256 assets, address controller, address owner) external returns (uint256 requestId)
+```
+
+Request an asynchronous deposit
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| assets | uint256 | Amount of assets to deposit |
+| controller | address | Address that controls the request |
+| owner | address | Address that owns the assets |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | Unique identifier for this request |
+
+#### pendingDepositRequest
+
+```solidity
+function pendingDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)
+```
+
+Get pending deposit request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| assets | uint256 | Amount of assets pending |
+
+#### claimableDepositRequest
+
+```solidity
+function claimableDepositRequest(uint256 requestId, address controller) external view returns (uint256 assets)
+```
+
+Get claimable deposit request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| assets | uint256 | Amount of assets claimable |
+
+#### Events
+
+#### DepositRequest
+
+```solidity
+event DepositRequest(address controller, address owner, uint256 requestId, address sender, uint256 assets)
+```
+
+Emitted when a deposit request is created
+
diff --git a/pages/developers/api/reference/generated/IERC7540Operator.mdx b/pages/developers/api/reference/generated/IERC7540Operator.mdx
new file mode 100644
index 0000000..e2de701
--- /dev/null
+++ b/pages/developers/api/reference/generated/IERC7540Operator.mdx
@@ -0,0 +1,67 @@
+---
+title: IERC7540Operator
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540Operator
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540Operator
+
+Interface for operator management in ERC7540
+
+#### Functions
+
+#### isOperator
+
+```solidity
+function isOperator(address controller, address operator) external view returns (bool status)
+```
+
+Check if operator is approved for controller
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| controller | address | The controller address |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| status | bool | True if approved |
+
+#### setOperator
+
+```solidity
+function setOperator(address operator, bool approved) external returns (bool success)
+```
+
+Grant or revoke operator permissions
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| approved | bool | True to approve, false to revoke |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| success | bool | True if successful |
+
+#### Events
+
+#### OperatorSet
+
+```solidity
+event OperatorSet(address controller, address operator, bool approved)
+```
+
+Emitted when operator approval changes
+
diff --git a/pages/developers/api/reference/generated/IERC7540Redeem.mdx b/pages/developers/api/reference/generated/IERC7540Redeem.mdx
new file mode 100644
index 0000000..16e04a0
--- /dev/null
+++ b/pages/developers/api/reference/generated/IERC7540Redeem.mdx
@@ -0,0 +1,91 @@
+---
+title: IERC7540Redeem
+description: Auto-generated Solidity API reference.
+---
+
+# IERC7540Redeem
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IERC7540.sol
+
+### IERC7540Redeem
+
+Interface for asynchronous redemption requests
+
+_See https://eips.ethereum.org/EIPS/eip-7540_
+
+#### Functions
+
+#### requestRedeem
+
+```solidity
+function requestRedeem(uint256 shares, address controller, address owner) external returns (uint256 requestId)
+```
+
+Request an asynchronous redemption
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| shares | uint256 | Amount of shares to redeem |
+| controller | address | Address that controls the request |
+| owner | address | Address that owns the shares |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | Unique identifier for this request |
+
+#### pendingRedeemRequest
+
+```solidity
+function pendingRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)
+```
+
+Get pending redeem request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| shares | uint256 | Amount of shares pending |
+
+#### claimableRedeemRequest
+
+```solidity
+function claimableRedeemRequest(uint256 requestId, address controller) external view returns (uint256 shares)
+```
+
+Get claimable redeem request amount
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| requestId | uint256 | The request identifier |
+| controller | address | The controller address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| shares | uint256 | Amount of shares claimable |
+
+#### Events
+
+#### RedeemRequest
+
+```solidity
+event RedeemRequest(address controller, address owner, uint256 requestId, address sender, uint256 shares)
+```
+
+Emitted when a redeem request is created
+
diff --git a/pages/developers/api/reference/generated/IFacetSelectors.mdx b/pages/developers/api/reference/generated/IFacetSelectors.mdx
new file mode 100644
index 0000000..0e6d31a
--- /dev/null
+++ b/pages/developers/api/reference/generated/IFacetSelectors.mdx
@@ -0,0 +1,23 @@
+---
+title: IFacetSelectors
+description: Auto-generated Solidity API reference.
+---
+
+# IFacetSelectors
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IFacetSelectors.sol
+
+### IFacetSelectors
+
+Standard interface for facet selector discovery
+
+#### Functions
+
+#### selectors
+
+```solidity
+function selectors() external pure returns (bytes4[])
+```
+
+Return the selectors this facet wants registered
+
diff --git a/pages/developers/api/reference/generated/IMBSMRegistry.mdx b/pages/developers/api/reference/generated/IMBSMRegistry.mdx
new file mode 100644
index 0000000..db00cbf
--- /dev/null
+++ b/pages/developers/api/reference/generated/IMBSMRegistry.mdx
@@ -0,0 +1,101 @@
+---
+title: IMBSMRegistry
+description: Auto-generated Solidity API reference.
+---
+
+# IMBSMRegistry
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMBSMRegistry.sol
+
+### IMBSMRegistry
+
+Minimal interface for the Master Blueprint Service Manager registry
+
+#### Functions
+
+#### getMBSM
+
+```solidity
+function getMBSM(uint64 blueprintId) external view returns (address mbsmAddress)
+```
+
+Get the MBSM address currently pinned for a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint identifier |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| mbsmAddress | address | The pinned MBSM (or latest if not pinned) |
+
+#### getPinnedRevision
+
+```solidity
+function getPinnedRevision(uint64 blueprintId) external view returns (uint32 revision)
+```
+
+Get the revision pinned for a blueprint (0 = latest)
+
+#### getLatestMBSM
+
+```solidity
+function getLatestMBSM() external view returns (address mbsmAddress)
+```
+
+Get the latest registered MBSM address
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| mbsmAddress | address | The latest MBSM |
+
+#### getMBSMByRevision
+
+```solidity
+function getMBSMByRevision(uint32 revision) external view returns (address mbsmAddress)
+```
+
+Get an MBSM by explicit revision
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| revision | uint32 | The registry revision (1-indexed) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| mbsmAddress | address | The registered address for the revision |
+
+#### getLatestRevision
+
+```solidity
+function getLatestRevision() external view returns (uint32)
+```
+
+Get the latest revision number registered in the registry
+
+#### pinBlueprint
+
+```solidity
+function pinBlueprint(uint64 blueprintId, uint32 revision) external
+```
+
+Pin a blueprint to a specific revision (0 disallowed)
+
+#### unpinBlueprint
+
+```solidity
+function unpinBlueprint(uint64 blueprintId) external
+```
+
+Unpin a blueprint (reverting to latest)
+
diff --git a/pages/developers/api/reference/generated/IMasterBlueprintServiceManager.mdx b/pages/developers/api/reference/generated/IMasterBlueprintServiceManager.mdx
new file mode 100644
index 0000000..cae796c
--- /dev/null
+++ b/pages/developers/api/reference/generated/IMasterBlueprintServiceManager.mdx
@@ -0,0 +1,31 @@
+---
+title: IMasterBlueprintServiceManager
+description: Auto-generated Solidity API reference.
+---
+
+# IMasterBlueprintServiceManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMasterBlueprintServiceManager.sol
+
+### IMasterBlueprintServiceManager
+
+Interface for the protocol-wide master blueprint service manager
+
+#### Functions
+
+#### onBlueprintCreated
+
+```solidity
+function onBlueprintCreated(uint64 blueprintId, address owner, bytes encodedDefinition) external
+```
+
+Called when a new blueprint is created
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The newly assigned blueprint ID |
+| owner | address | The blueprint owner |
+| encodedDefinition | bytes | ABI-encoded blueprint definition data |
+
diff --git a/pages/developers/api/reference/generated/IMetricsRecorder.mdx b/pages/developers/api/reference/generated/IMetricsRecorder.mdx
new file mode 100644
index 0000000..dc8d73e
--- /dev/null
+++ b/pages/developers/api/reference/generated/IMetricsRecorder.mdx
@@ -0,0 +1,211 @@
+---
+title: IMetricsRecorder
+description: Auto-generated Solidity API reference.
+---
+
+# IMetricsRecorder
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMetricsRecorder.sol
+
+### IMetricsRecorder
+
+Minimal interface for recording protocol activity metrics
+
+_Implemented by TangleMetrics, called by core contracts_
+
+#### Functions
+
+#### recordStake
+
+```solidity
+function recordStake(address delegator, address operator, address asset, uint256 amount) external
+```
+
+Record a stake/delegation event
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+| operator | address | The operator receiving delegation |
+| asset | address | The asset being staked (address(0) for native) |
+| amount | uint256 | The amount staked |
+
+#### recordUnstake
+
+```solidity
+function recordUnstake(address delegator, address operator, address asset, uint256 amount) external
+```
+
+Record an unstake event
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+| operator | address | The operator losing delegation |
+| asset | address | The asset being unstaked |
+| amount | uint256 | The amount unstaked |
+
+#### recordOperatorRegistered
+
+```solidity
+function recordOperatorRegistered(address operator, address asset, uint256 amount) external
+```
+
+Record operator registration
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| asset | address | The asset staked |
+| amount | uint256 | Initial stake amount |
+
+#### recordHeartbeat
+
+```solidity
+function recordHeartbeat(address operator, uint64 serviceId, uint64 timestamp) external
+```
+
+Record operator heartbeat (liveness proof)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| serviceId | uint64 | The service ID |
+| timestamp | uint64 | Block timestamp of heartbeat |
+
+#### recordJobCompletion
+
+```solidity
+function recordJobCompletion(address operator, uint64 serviceId, uint64 jobCallId, bool success) external
+```
+
+Record job completion by operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| serviceId | uint64 | The service ID |
+| jobCallId | uint64 | The job call ID |
+| success | bool | Whether the job succeeded |
+
+#### recordSlash
+
+```solidity
+function recordSlash(address operator, uint64 serviceId, uint256 amount) external
+```
+
+Record operator slashing (negative metric)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| serviceId | uint64 | The service ID |
+| amount | uint256 | Amount slashed |
+
+#### recordServiceCreated
+
+```solidity
+function recordServiceCreated(uint64 serviceId, uint64 blueprintId, address owner, uint256 operatorCount) external
+```
+
+Record service creation/activation
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| blueprintId | uint64 | The blueprint ID |
+| owner | address | The service owner |
+| operatorCount | uint256 | Number of operators |
+
+#### recordServiceTerminated
+
+```solidity
+function recordServiceTerminated(uint64 serviceId, uint256 duration) external
+```
+
+Record service termination
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| duration | uint256 | How long the service ran (seconds) |
+
+#### recordJobCall
+
+```solidity
+function recordJobCall(uint64 serviceId, address caller, uint64 jobCallId) external
+```
+
+Record a job call on a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| caller | address | Who initiated the job |
+| jobCallId | uint64 | The job call ID |
+
+#### recordPayment
+
+```solidity
+function recordPayment(address payer, uint64 serviceId, address token, uint256 amount) external
+```
+
+Record fee payment for a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| payer | address | Who paid the fee |
+| serviceId | uint64 | The service ID |
+| token | address | The payment token (address(0) for native) |
+| amount | uint256 | The amount paid |
+
+#### recordBlueprintCreated
+
+```solidity
+function recordBlueprintCreated(uint64 blueprintId, address developer) external
+```
+
+Record blueprint creation
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| developer | address | The developer address |
+
+#### recordBlueprintRegistration
+
+```solidity
+function recordBlueprintRegistration(uint64 blueprintId, address operator) external
+```
+
+Record operator registration to a blueprint
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address |
+
diff --git a/pages/developers/api/reference/generated/IMultiAssetDelegation.mdx b/pages/developers/api/reference/generated/IMultiAssetDelegation.mdx
new file mode 100644
index 0000000..10d37dc
--- /dev/null
+++ b/pages/developers/api/reference/generated/IMultiAssetDelegation.mdx
@@ -0,0 +1,740 @@
+---
+title: IMultiAssetDelegation
+description: Auto-generated Solidity API reference.
+---
+
+# IMultiAssetDelegation
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IMultiAssetDelegation.sol
+
+### IMultiAssetDelegation
+
+Full interface for the multi-asset restaking contract
+
+#### Functions
+
+#### registerOperator
+
+```solidity
+function registerOperator() external payable
+```
+
+#### registerOperatorWithAsset
+
+```solidity
+function registerOperatorWithAsset(address token, uint256 amount) external
+```
+
+#### increaseStake
+
+```solidity
+function increaseStake() external payable
+```
+
+#### scheduleOperatorUnstake
+
+```solidity
+function scheduleOperatorUnstake(uint256 amount) external
+```
+
+#### executeOperatorUnstake
+
+```solidity
+function executeOperatorUnstake() external
+```
+
+#### addBlueprint
+
+```solidity
+function addBlueprint(uint64 blueprintId) external
+```
+
+#### removeBlueprint
+
+```solidity
+function removeBlueprint(uint64 blueprintId) external
+```
+
+#### startLeaving
+
+```solidity
+function startLeaving() external
+```
+
+#### completeLeaving
+
+```solidity
+function completeLeaving() external
+```
+
+#### deposit
+
+```solidity
+function deposit() external payable
+```
+
+#### depositWithLock
+
+```solidity
+function depositWithLock(enum Types.LockMultiplier lockMultiplier) external payable
+```
+
+#### depositERC20
+
+```solidity
+function depositERC20(address token, uint256 amount) external
+```
+
+#### depositERC20WithLock
+
+```solidity
+function depositERC20WithLock(address token, uint256 amount, enum Types.LockMultiplier lockMultiplier) external
+```
+
+#### scheduleWithdraw
+
+```solidity
+function scheduleWithdraw(address token, uint256 amount) external
+```
+
+#### executeWithdraw
+
+```solidity
+function executeWithdraw() external
+```
+
+#### depositAndDelegate
+
+```solidity
+function depositAndDelegate(address operator) external payable
+```
+
+#### depositAndDelegateWithOptions
+
+```solidity
+function depositAndDelegateWithOptions(address operator, address token, uint256 amount, enum Types.BlueprintSelectionMode selectionMode, uint64[] blueprintIds) external payable
+```
+
+#### delegate
+
+```solidity
+function delegate(address operator, uint256 amount) external
+```
+
+#### delegateWithOptions
+
+```solidity
+function delegateWithOptions(address operator, address token, uint256 amount, enum Types.BlueprintSelectionMode selectionMode, uint64[] blueprintIds) external
+```
+
+#### scheduleDelegatorUnstake
+
+```solidity
+function scheduleDelegatorUnstake(address operator, address token, uint256 amount) external
+```
+
+#### undelegate
+
+```solidity
+function undelegate(address operator, uint256 amount) external
+```
+
+#### executeDelegatorUnstake
+
+```solidity
+function executeDelegatorUnstake() external
+```
+
+#### executeDelegatorUnstakeAndWithdraw
+
+```solidity
+function executeDelegatorUnstakeAndWithdraw(address operator, address token, uint256 shares, uint64 requestedRound, address receiver) external returns (uint256 amount)
+```
+
+Execute a specific matured unstake request and withdraw the resulting assets to `receiver`.
+
+_Convenience helper for integrations (e.g. ERC7540 liquid delegation vaults) to avoid a separate
+ scheduleWithdraw/executeWithdraw flow after bond-less delay has already elapsed._
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | Operator to unstake from |
+| token | address | Token address (address(0) for native) |
+| shares | uint256 | Shares to unstake (as stored in the underlying bond-less request) |
+| requestedRound | uint64 | Round in which the unstake was scheduled |
+| receiver | address | Recipient of the withdrawn assets |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| amount | uint256 | Actual amount returned (after exchange-rate + lazy-slash adjustments) |
+
+#### addBlueprintToDelegation
+
+```solidity
+function addBlueprintToDelegation(uint256 delegationIndex, uint64 blueprintId) external
+```
+
+#### removeBlueprintFromDelegation
+
+```solidity
+function removeBlueprintFromDelegation(uint256 delegationIndex, uint64 blueprintId) external
+```
+
+#### slashForBlueprint
+
+```solidity
+function slashForBlueprint(address operator, uint64 blueprintId, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+#### slashForService
+
+```solidity
+function slashForService(address operator, uint64 blueprintId, uint64 serviceId, struct Types.AssetSecurityCommitment[] commitments, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+#### slash
+
+```solidity
+function slash(address operator, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+#### advanceRound
+
+```solidity
+function advanceRound() external
+```
+
+#### snapshotOperator
+
+```solidity
+function snapshotOperator(address operator) external
+```
+
+#### enableAsset
+
+```solidity
+function enableAsset(address token, uint256 minOperatorStake, uint256 minDelegation, uint256 depositCap, uint16 rewardMultiplierBps) external
+```
+
+#### disableAsset
+
+```solidity
+function disableAsset(address token) external
+```
+
+#### getAssetConfig
+
+```solidity
+function getAssetConfig(address token) external view returns (struct Types.AssetConfig)
+```
+
+#### registerAdapter
+
+```solidity
+function registerAdapter(address token, address adapter) external
+```
+
+#### removeAdapter
+
+```solidity
+function removeAdapter(address token) external
+```
+
+#### setRequireAdapters
+
+```solidity
+function setRequireAdapters(bool required) external
+```
+
+#### enableAssetWithAdapter
+
+```solidity
+function enableAssetWithAdapter(address token, address adapter, uint256 minOperatorStake, uint256 minDelegation, uint256 depositCap, uint16 rewardMultiplierBps) external
+```
+
+#### isOperator
+
+```solidity
+function isOperator(address operator) external view returns (bool)
+```
+
+#### isOperatorActive
+
+```solidity
+function isOperatorActive(address operator) external view returns (bool)
+```
+
+#### getOperatorStake
+
+```solidity
+function getOperatorStake(address operator) external view returns (uint256)
+```
+
+#### getOperatorSelfStake
+
+```solidity
+function getOperatorSelfStake(address operator) external view returns (uint256)
+```
+
+#### getOperatorDelegatedStake
+
+```solidity
+function getOperatorDelegatedStake(address operator) external view returns (uint256)
+```
+
+#### getDelegation
+
+```solidity
+function getDelegation(address delegator, address operator) external view returns (uint256)
+```
+
+#### getTotalDelegation
+
+```solidity
+function getTotalDelegation(address delegator) external view returns (uint256 total)
+```
+
+#### minOperatorStake
+
+```solidity
+function minOperatorStake() external view returns (uint256)
+```
+
+#### meetsStakeRequirement
+
+```solidity
+function meetsStakeRequirement(address operator, uint256 required) external view returns (bool)
+```
+
+#### isSlasher
+
+```solidity
+function isSlasher(address account) external view returns (bool)
+```
+
+#### getOperatorMetadata
+
+```solidity
+function getOperatorMetadata(address operator) external view returns (struct Types.OperatorMetadata)
+```
+
+#### getOperatorBlueprints
+
+```solidity
+function getOperatorBlueprints(address operator) external view returns (uint256[])
+```
+
+#### operatorCount
+
+```solidity
+function operatorCount() external view returns (uint256)
+```
+
+#### operatorAt
+
+```solidity
+function operatorAt(uint256 index) external view returns (address)
+```
+
+#### getDeposit
+
+```solidity
+function getDeposit(address delegator, address token) external view returns (struct Types.Deposit)
+```
+
+#### getPendingWithdrawals
+
+```solidity
+function getPendingWithdrawals(address delegator) external view returns (struct Types.WithdrawRequest[])
+```
+
+#### getLocks
+
+```solidity
+function getLocks(address delegator, address token) external view returns (struct Types.LockInfo[])
+```
+
+#### getDelegations
+
+```solidity
+function getDelegations(address delegator) external view returns (struct Types.BondInfoDelegator[])
+```
+
+#### getDelegationBlueprints
+
+```solidity
+function getDelegationBlueprints(address delegator, uint256 idx) external view returns (uint64[])
+```
+
+#### getPendingUnstakes
+
+```solidity
+function getPendingUnstakes(address delegator) external view returns (struct Types.BondLessRequest[])
+```
+
+#### getOperatorRewardPool
+
+```solidity
+function getOperatorRewardPool(address operator) external view returns (struct Types.OperatorRewardPool)
+```
+
+#### getOperatorDelegators
+
+```solidity
+function getOperatorDelegators(address operator) external view returns (address[])
+```
+
+#### getOperatorDelegatorCount
+
+```solidity
+function getOperatorDelegatorCount(address operator) external view returns (uint256)
+```
+
+#### rewardsManager
+
+```solidity
+function rewardsManager() external view returns (address)
+```
+
+#### serviceFeeDistributor
+
+```solidity
+function serviceFeeDistributor() external view returns (address)
+```
+
+#### getSlashImpact
+
+```solidity
+function getSlashImpact(address operator, uint64 slashIndex, address delegator) external view returns (uint256)
+```
+
+#### getSlashCount
+
+```solidity
+function getSlashCount(address operator) external view returns (uint64)
+```
+
+#### getSlashRecord
+
+```solidity
+function getSlashRecord(address operator, uint64 slashIndex) external view returns (struct SlashingManager.SlashRecord)
+```
+
+#### getSlashCountForService
+
+```solidity
+function getSlashCountForService(uint64 serviceId, address operator) external view returns (uint64)
+```
+
+#### getSlashCountForBlueprint
+
+```solidity
+function getSlashCountForBlueprint(uint64 blueprintId, address operator) external view returns (uint64)
+```
+
+#### currentRound
+
+```solidity
+function currentRound() external view returns (uint64)
+```
+
+#### roundDuration
+
+```solidity
+function roundDuration() external view returns (uint64)
+```
+
+#### delegationBondLessDelay
+
+```solidity
+function delegationBondLessDelay() external view returns (uint64)
+```
+
+#### leaveDelegatorsDelay
+
+```solidity
+function leaveDelegatorsDelay() external view returns (uint64)
+```
+
+#### leaveOperatorsDelay
+
+```solidity
+function leaveOperatorsDelay() external view returns (uint64)
+```
+
+#### operatorCommissionBps
+
+```solidity
+function operatorCommissionBps() external view returns (uint16)
+```
+
+#### LOCK_ONE_MONTH
+
+```solidity
+function LOCK_ONE_MONTH() external view returns (uint64)
+```
+
+#### LOCK_TWO_MONTHS
+
+```solidity
+function LOCK_TWO_MONTHS() external view returns (uint64)
+```
+
+#### LOCK_THREE_MONTHS
+
+```solidity
+function LOCK_THREE_MONTHS() external view returns (uint64)
+```
+
+#### LOCK_SIX_MONTHS
+
+```solidity
+function LOCK_SIX_MONTHS() external view returns (uint64)
+```
+
+#### MULTIPLIER_NONE
+
+```solidity
+function MULTIPLIER_NONE() external view returns (uint16)
+```
+
+#### MULTIPLIER_ONE_MONTH
+
+```solidity
+function MULTIPLIER_ONE_MONTH() external view returns (uint16)
+```
+
+#### MULTIPLIER_TWO_MONTHS
+
+```solidity
+function MULTIPLIER_TWO_MONTHS() external view returns (uint16)
+```
+
+#### MULTIPLIER_THREE_MONTHS
+
+```solidity
+function MULTIPLIER_THREE_MONTHS() external view returns (uint16)
+```
+
+#### MULTIPLIER_SIX_MONTHS
+
+```solidity
+function MULTIPLIER_SIX_MONTHS() external view returns (uint16)
+```
+
+#### addSlasher
+
+```solidity
+function addSlasher(address slasher) external
+```
+
+#### removeSlasher
+
+```solidity
+function removeSlasher(address slasher) external
+```
+
+#### setOperatorCommission
+
+```solidity
+function setOperatorCommission(uint16 bps) external
+```
+
+#### setDelays
+
+```solidity
+function setDelays(uint64 delegationBondLessDelay, uint64 leaveDelegatorsDelay, uint64 leaveOperatorsDelay) external
+```
+
+#### setRewardsManager
+
+```solidity
+function setRewardsManager(address manager) external
+```
+
+#### setServiceFeeDistributor
+
+```solidity
+function setServiceFeeDistributor(address distributor) external
+```
+
+#### pause
+
+```solidity
+function pause() external
+```
+
+#### unpause
+
+```solidity
+function unpause() external
+```
+
+#### rescueTokens
+
+```solidity
+function rescueTokens(address token, address to, uint256 amount) external
+```
+
+#### Events
+
+#### AssetEnabled
+
+```solidity
+event AssetEnabled(address token, uint256 minOperatorStake, uint256 minDelegation)
+```
+
+#### AssetDisabled
+
+```solidity
+event AssetDisabled(address token)
+```
+
+#### RoundAdvanced
+
+```solidity
+event RoundAdvanced(uint64 round)
+```
+
+#### OperatorRegistered
+
+```solidity
+event OperatorRegistered(address operator, uint256 stake)
+```
+
+#### OperatorStakeIncreased
+
+```solidity
+event OperatorStakeIncreased(address operator, uint256 amount)
+```
+
+#### OperatorUnstakeScheduled
+
+```solidity
+event OperatorUnstakeScheduled(address operator, uint256 amount, uint64 readyRound)
+```
+
+#### OperatorUnstakeExecuted
+
+```solidity
+event OperatorUnstakeExecuted(address operator, uint256 amount)
+```
+
+#### OperatorLeavingScheduled
+
+```solidity
+event OperatorLeavingScheduled(address operator, uint64 readyRound)
+```
+
+#### OperatorLeft
+
+```solidity
+event OperatorLeft(address operator)
+```
+
+#### OperatorBlueprintAdded
+
+```solidity
+event OperatorBlueprintAdded(address operator, uint64 blueprintId)
+```
+
+#### OperatorBlueprintRemoved
+
+```solidity
+event OperatorBlueprintRemoved(address operator, uint64 blueprintId)
+```
+
+#### Deposited
+
+```solidity
+event Deposited(address delegator, address token, uint256 amount, enum Types.LockMultiplier lock)
+```
+
+#### WithdrawScheduled
+
+```solidity
+event WithdrawScheduled(address delegator, address token, uint256 amount, uint64 readyRound)
+```
+
+#### Withdrawn
+
+```solidity
+event Withdrawn(address delegator, address token, uint256 amount)
+```
+
+#### ExpiredLocksHarvested
+
+```solidity
+event ExpiredLocksHarvested(address delegator, address token, uint256 count, uint256 totalAmount)
+```
+
+#### Delegated
+
+```solidity
+event Delegated(address delegator, address operator, address token, uint256 amount, uint256 shares, enum Types.BlueprintSelectionMode selectionMode)
+```
+
+#### DelegatorUnstakeScheduled
+
+```solidity
+event DelegatorUnstakeScheduled(address delegator, address operator, address token, uint256 shares, uint256 estimatedAmount, uint64 readyRound)
+```
+
+#### DelegatorUnstakeExecuted
+
+```solidity
+event DelegatorUnstakeExecuted(address delegator, address operator, address token, uint256 shares, uint256 amount)
+```
+
+#### BlueprintAddedToDelegation
+
+```solidity
+event BlueprintAddedToDelegation(address delegator, uint256 delegationIndex, uint64 blueprintId)
+```
+
+#### BlueprintRemovedFromDelegation
+
+```solidity
+event BlueprintRemovedFromDelegation(address delegator, uint256 delegationIndex, uint64 blueprintId)
+```
+
+#### Slashed
+
+```solidity
+event Slashed(address operator, uint64 serviceId, uint256 operatorSlashed, uint256 delegatorsSlashed, uint256 newExchangeRate)
+```
+
+#### SlashedForService
+
+```solidity
+event SlashedForService(address operator, uint64 serviceId, uint64 blueprintId, uint256 totalSlashed, uint256 commitmentCount)
+```
+
+#### SlashRecorded
+
+```solidity
+event SlashRecorded(address operator, uint64 slashId, uint256 totalSlashed, uint256 exchangeRateBefore, uint256 exchangeRateAfter)
+```
+
+#### AdapterRegistered
+
+```solidity
+event AdapterRegistered(address token, address adapter)
+```
+
+#### AdapterRemoved
+
+```solidity
+event AdapterRemoved(address token)
+```
+
+#### RequireAdaptersUpdated
+
+```solidity
+event RequireAdaptersUpdated(bool required)
+```
+
diff --git a/pages/developers/api/reference/generated/IPaymentAdapterRegistry.mdx b/pages/developers/api/reference/generated/IPaymentAdapterRegistry.mdx
new file mode 100644
index 0000000..bb9902d
--- /dev/null
+++ b/pages/developers/api/reference/generated/IPaymentAdapterRegistry.mdx
@@ -0,0 +1,126 @@
+---
+title: IPaymentAdapterRegistry
+description: Auto-generated Solidity API reference.
+---
+
+# IPaymentAdapterRegistry
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### IPaymentAdapterRegistry
+
+Registry for managing multiple payment adapters
+
+#### Functions
+
+#### registerAdapter
+
+```solidity
+function registerAdapter(string name, address adapter) external
+```
+
+Register a new payment adapter
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name |
+| adapter | address | Adapter address |
+
+#### removeAdapter
+
+```solidity
+function removeAdapter(string name) external
+```
+
+Remove a payment adapter
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name to remove |
+
+#### getAdapter
+
+```solidity
+function getAdapter(string name) external view returns (address adapter)
+```
+
+Get an adapter by name
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| adapter | address | Adapter address |
+
+#### getDefaultAdapter
+
+```solidity
+function getDefaultAdapter() external view returns (address adapter)
+```
+
+Get the default adapter
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| adapter | address | Default adapter address |
+
+#### setDefaultAdapter
+
+```solidity
+function setDefaultAdapter(string name) external
+```
+
+Set the default adapter
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Name of adapter to set as default |
+
+#### isRegistered
+
+```solidity
+function isRegistered(string name) external view returns (bool registered)
+```
+
+Check if an adapter is registered
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Adapter name |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| registered | bool | True if adapter exists |
+
+#### getRegisteredAdapters
+
+```solidity
+function getRegisteredAdapters() external view returns (string[] names)
+```
+
+Get all registered adapter names
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| names | string[] | Array of adapter names |
+
diff --git a/pages/developers/api/reference/generated/IRestaking.mdx b/pages/developers/api/reference/generated/IRestaking.mdx
new file mode 100644
index 0000000..2e67d1f
--- /dev/null
+++ b/pages/developers/api/reference/generated/IRestaking.mdx
@@ -0,0 +1,307 @@
+---
+title: IRestaking
+description: Auto-generated Solidity API reference.
+---
+
+# IRestaking
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IRestaking.sol
+
+### IRestaking
+
+Abstract interface for restaking/shared security protocols
+
+_Implement this to integrate with native staking, EigenLayer, Symbiotic, etc.
+
+Design principles:
+- Minimal interface - only what Tangle core needs
+- Read-heavy - most operations are queries
+- Write-light - only slash() modifies state
+- No assumptions about underlying implementation_
+
+#### Functions
+
+#### isOperator
+
+```solidity
+function isOperator(address operator) external view returns (bool)
+```
+
+Check if an address is a registered operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The address to check |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if registered as operator |
+
+#### isOperatorActive
+
+```solidity
+function isOperatorActive(address operator) external view returns (bool)
+```
+
+Check if an operator is currently active (not leaving, not slashed out)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The address to check |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if active |
+
+#### getOperatorStake
+
+```solidity
+function getOperatorStake(address operator) external view returns (uint256)
+```
+
+Get an operator's total stake (self-stake + delegations)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Total stake amount in native units |
+
+#### getOperatorSelfStake
+
+```solidity
+function getOperatorSelfStake(address operator) external view returns (uint256)
+```
+
+Get an operator's self-stake only
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Self-stake amount |
+
+#### getOperatorDelegatedStake
+
+```solidity
+function getOperatorDelegatedStake(address operator) external view returns (uint256)
+```
+
+Get total amount delegated to an operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Total delegated amount |
+
+#### getDelegation
+
+```solidity
+function getDelegation(address delegator, address operator) external view returns (uint256)
+```
+
+Get a delegator's delegation to a specific operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+| operator | address | The operator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Delegation amount |
+
+#### getTotalDelegation
+
+```solidity
+function getTotalDelegation(address delegator) external view returns (uint256)
+```
+
+Get a delegator's total delegations across all operators
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The delegator address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Total delegated amount |
+
+#### minOperatorStake
+
+```solidity
+function minOperatorStake() external view returns (uint256)
+```
+
+Get minimum stake required to be an operator
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | uint256 | Minimum stake amount |
+
+#### meetsStakeRequirement
+
+```solidity
+function meetsStakeRequirement(address operator, uint256 required) external view returns (bool)
+```
+
+Check if operator meets a specific stake requirement
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator address |
+| required | uint256 | The required stake amount |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if operator has sufficient stake |
+
+#### slashForBlueprint
+
+```solidity
+function slashForBlueprint(address operator, uint64 blueprintId, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+Slash an operator's stake for a specific blueprint
+
+_Only affects delegators exposed to this blueprint (All mode + Fixed mode who selected it)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator to slash |
+| blueprintId | uint64 | The blueprint where violation occurred |
+| serviceId | uint64 | The service where violation occurred |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash (IPFS or other reference) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| actualSlashed | uint256 | The actual amount slashed (may be less if insufficient stake) |
+
+#### slashForService
+
+```solidity
+function slashForService(address operator, uint64 blueprintId, uint64 serviceId, struct Types.AssetSecurityCommitment[] commitments, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+Slash an operator for a specific service, only slashing committed assets
+
+_Only slashes assets the operator committed to this service, proportionally_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator to slash |
+| blueprintId | uint64 | The blueprint where violation occurred |
+| serviceId | uint64 | The service where violation occurred |
+| commitments | struct Types.AssetSecurityCommitment[] | The operator's asset security commitments for this service |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash (IPFS or other reference) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| actualSlashed | uint256 | The actual amount slashed (may be less if insufficient committed stake) |
+
+#### slash
+
+```solidity
+function slash(address operator, uint64 serviceId, uint256 amount, bytes32 evidence) external returns (uint256 actualSlashed)
+```
+
+Slash an operator's stake (legacy - slashes all delegators)
+
+_Only callable by authorized slashers (e.g., Tangle core contract)_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator to slash |
+| serviceId | uint64 | The service where violation occurred |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash (IPFS or other reference) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| actualSlashed | uint256 | The actual amount slashed (may be less if insufficient stake) |
+
+#### isSlasher
+
+```solidity
+function isSlasher(address account) external view returns (bool)
+```
+
+Check if an address is authorized to call slash()
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The address to check |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| [0] | bool | True if authorized |
+
+#### Events
+
+#### OperatorSlashed
+
+```solidity
+event OperatorSlashed(address operator, uint64 serviceId, uint256 amount, bytes32 evidence)
+```
+
+Emitted when an operator is slashed
+
diff --git a/pages/developers/api/reference/generated/IRestakingAdmin.mdx b/pages/developers/api/reference/generated/IRestakingAdmin.mdx
new file mode 100644
index 0000000..ea55384
--- /dev/null
+++ b/pages/developers/api/reference/generated/IRestakingAdmin.mdx
@@ -0,0 +1,59 @@
+---
+title: IRestakingAdmin
+description: Auto-generated Solidity API reference.
+---
+
+# IRestakingAdmin
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IRestaking.sol
+
+### IRestakingAdmin
+
+Admin functions for restaking implementations
+
+_Separated to keep main interface clean_
+
+#### Functions
+
+#### addSlasher
+
+```solidity
+function addSlasher(address slasher) external
+```
+
+Add an authorized slasher
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slasher | address | Address to authorize |
+
+#### removeSlasher
+
+```solidity
+function removeSlasher(address slasher) external
+```
+
+Remove an authorized slasher
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slasher | address | Address to remove |
+
+#### setMinOperatorStake
+
+```solidity
+function setMinOperatorStake(uint256 amount) external
+```
+
+Update minimum operator stake
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| amount | uint256 | New minimum |
+
diff --git a/pages/developers/api/reference/generated/IRewardsManager.mdx b/pages/developers/api/reference/generated/IRewardsManager.mdx
new file mode 100644
index 0000000..59f0f5b
--- /dev/null
+++ b/pages/developers/api/reference/generated/IRewardsManager.mdx
@@ -0,0 +1,88 @@
+---
+title: IRewardsManager
+description: Auto-generated Solidity API reference.
+---
+
+# IRewardsManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IRewardsManager.sol
+
+### IRewardsManager
+
+Interface for reward vault management - called by MultiAssetDelegation
+
+_Mirrors the Substrate RewardsManager trait pattern_
+
+#### Functions
+
+#### recordDelegate
+
+```solidity
+function recordDelegate(address delegator, address operator, address asset, uint256 amount, uint16 lockMultiplierBps) external
+```
+
+Records a delegation for reward tracking
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The account making the delegation |
+| operator | address | The operator being delegated to |
+| asset | address | The asset being delegated (address(0) for native) |
+| amount | uint256 | The amount being delegated |
+| lockMultiplierBps | uint16 | Lock multiplier in basis points (10000 = 1x, 0 = no lock) |
+
+#### recordUndelegate
+
+```solidity
+function recordUndelegate(address delegator, address operator, address asset, uint256 amount) external
+```
+
+Records an undelegation
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| delegator | address | The account making the undelegation |
+| operator | address | The operator being undelegated from |
+| asset | address | The asset being undelegated |
+| amount | uint256 | The amount being undelegated |
+
+#### recordServiceReward
+
+```solidity
+function recordServiceReward(address operator, address asset, uint256 amount) external
+```
+
+Records a service reward for an operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| operator | address | The operator receiving the reward |
+| asset | address | The reward asset |
+| amount | uint256 | The reward amount |
+
+#### getAssetDepositCapRemaining
+
+```solidity
+function getAssetDepositCapRemaining(address asset) external view returns (uint256 remaining)
+```
+
+Get remaining deposit capacity for an asset vault
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| asset | address | The asset to query |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| remaining | uint256 | The remaining deposit capacity |
+
diff --git a/pages/developers/api/reference/generated/ISablierAdapter.mdx b/pages/developers/api/reference/generated/ISablierAdapter.mdx
new file mode 100644
index 0000000..29219f8
--- /dev/null
+++ b/pages/developers/api/reference/generated/ISablierAdapter.mdx
@@ -0,0 +1,163 @@
+---
+title: ISablierAdapter
+description: Auto-generated Solidity API reference.
+---
+
+# ISablierAdapter
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### ISablierAdapter
+
+Extended interface for Sablier-specific features
+
+#### Types
+
+#### StreamType
+
+Stream type for Sablier
+
+```solidity
+enum StreamType {
+ Linear,
+ Dynamic,
+ Tranched
+}
+```
+
+#### Segment
+
+Segment for dynamic streams
+
+```solidity
+struct Segment {
+ uint128 amount;
+ uint64 exponent;
+ uint40 timestamp;
+}
+```
+
+#### Functions
+
+#### createLinearStream
+
+```solidity
+function createLinearStream(uint64 serviceId, address token, uint128 totalAmount, uint40 durationSeconds, uint40 cliffSeconds) external returns (uint256 streamId)
+```
+
+Create a linear stream (constant rate)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+| token | address | The ERC-20 token |
+| totalAmount | uint128 | Total amount to stream |
+| durationSeconds | uint40 | Total duration |
+| cliffSeconds | uint40 | Cliff period |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The created stream ID |
+
+#### createDynamicStream
+
+```solidity
+function createDynamicStream(uint64 serviceId, address token, uint128 totalAmount, struct ISablierAdapter.Segment[] segments) external returns (uint256 streamId)
+```
+
+Create a dynamic stream with custom curve
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+| token | address | The ERC-20 token |
+| totalAmount | uint128 | Total amount to stream |
+| segments | struct ISablierAdapter.Segment[] | Array of segments defining the curve |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The created stream ID |
+
+#### isCancelable
+
+```solidity
+function isCancelable(uint256 streamId) external view returns (bool cancelable)
+```
+
+Check if a stream is cancelable
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| cancelable | bool | True if stream can be cancelled |
+
+#### wasCancelled
+
+```solidity
+function wasCancelled(uint256 streamId) external view returns (bool cancelled)
+```
+
+Check if a stream was cancelled
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| cancelled | bool | True if stream was cancelled |
+
+#### getStreamNFT
+
+```solidity
+function getStreamNFT(uint256 streamId) external view returns (uint256 tokenId)
+```
+
+Get the NFT token ID for a stream (Sablier streams are NFTs)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| tokenId | uint256 | The ERC-721 token ID |
+
+#### transferStream
+
+```solidity
+function transferStream(uint256 streamId, address newRecipient) external
+```
+
+Transfer stream ownership (NFT transfer)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+| newRecipient | address | New recipient address |
+
diff --git a/pages/developers/api/reference/generated/IServiceFeeDistributor.mdx b/pages/developers/api/reference/generated/IServiceFeeDistributor.mdx
new file mode 100644
index 0000000..8b4c320
--- /dev/null
+++ b/pages/developers/api/reference/generated/IServiceFeeDistributor.mdx
@@ -0,0 +1,158 @@
+---
+title: IServiceFeeDistributor
+description: Auto-generated Solidity API reference.
+---
+
+# IServiceFeeDistributor
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IServiceFeeDistributor.sol
+
+### IServiceFeeDistributor
+
+Tracks service-fee payouts to restakers across payment tokens
+
+_Receives delegation-change hooks from MultiAssetDelegation and fee-distribution calls from Tangle._
+
+#### Functions
+
+#### distributeServiceFee
+
+```solidity
+function distributeServiceFee(uint64 serviceId, uint64 blueprintId, address operator, address paymentToken, uint256 amount) external payable
+```
+
+#### distributeInflationReward
+
+```solidity
+function distributeInflationReward(uint64 serviceId, uint64 blueprintId, address operator, address paymentToken, uint256 amount) external payable
+```
+
+Distribute inflation-funded restaker rewards using service exposure weights
+
+_Intended for InflationPool; rewards are paid in the provided token (TNT)._
+
+#### claimFor
+
+```solidity
+function claimFor(address token, address operator, struct Types.Asset asset) external returns (uint256 amount)
+```
+
+Claim rewards for a specific delegator position and token
+
+#### claimAll
+
+```solidity
+function claimAll(address token) external returns (uint256 totalAmount)
+```
+
+Claim all pending rewards across all positions for a token
+
+#### claimAllBatch
+
+```solidity
+function claimAllBatch(address[] tokens) external returns (uint256[] amounts)
+```
+
+Claim all pending rewards for multiple tokens
+
+#### pendingRewards
+
+```solidity
+function pendingRewards(address delegator, address token) external view returns (uint256 pending)
+```
+
+Preview pending rewards for a delegator across all positions for a token
+
+#### delegatorOperators
+
+```solidity
+function delegatorOperators(address delegator) external view returns (address[] operators)
+```
+
+Return all operators a delegator has positions with
+
+#### delegatorAssets
+
+```solidity
+function delegatorAssets(address delegator, address operator) external view returns (bytes32[] assetHashes)
+```
+
+Return all asset hashes a delegator has positions for with an operator
+
+#### getPosition
+
+```solidity
+function getPosition(address delegator, address operator, bytes32 assetHash) external view returns (uint8 mode, uint256 principal, uint256 score)
+```
+
+Return a delegator's position details
+
+#### operatorRewardTokens
+
+```solidity
+function operatorRewardTokens(address operator) external view returns (address[] tokens)
+```
+
+Return reward tokens ever distributed for an operator
+
+#### onDelegationChanged
+
+```solidity
+function onDelegationChanged(address delegator, address operator, struct Types.Asset asset, uint256 amount, bool isIncrease, enum Types.BlueprintSelectionMode selectionMode, uint64[] blueprintIds, uint16 lockMultiplierBps) external
+```
+
+#### onBlueprintAdded
+
+```solidity
+function onBlueprintAdded(address delegator, address operator, struct Types.Asset asset, uint64 blueprintId) external
+```
+
+#### onBlueprintRemoved
+
+```solidity
+function onBlueprintRemoved(address delegator, address operator, struct Types.Asset asset, uint64 blueprintId) external
+```
+
+#### getPoolScore
+
+```solidity
+function getPoolScore(address operator, uint64 blueprintId, struct Types.Asset asset) external view returns (uint256 allScore, uint256 fixedScore)
+```
+
+#### getOperatorServiceUsdExposure
+
+```solidity
+function getOperatorServiceUsdExposure(uint64 serviceId, uint64 blueprintId, address operator) external view returns (uint256 totalUsdExposure)
+```
+
+Get USD-weighted exposure for an operator/service
+
+_Returns total USD exposure across All+Fixed pools for the service._
+
+#### onOperatorLeaving
+
+```solidity
+function onOperatorLeaving(uint64 serviceId, address operator) external
+```
+
+Called when an operator is about to leave a service
+
+_Drips all active streams for the operator BEFORE they're removed_
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64 serviceId, address refundRecipient) external
+```
+
+Called when a service is terminated early
+
+_Cancels streaming payments and refunds remaining amounts to the service owner_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The terminated service ID |
+| refundRecipient | address | Where to send the remaining payment (typically service owner) |
+
diff --git a/pages/developers/api/reference/generated/IStreamingPaymentAdapter.mdx b/pages/developers/api/reference/generated/IStreamingPaymentAdapter.mdx
new file mode 100644
index 0000000..0400092
--- /dev/null
+++ b/pages/developers/api/reference/generated/IStreamingPaymentAdapter.mdx
@@ -0,0 +1,317 @@
+---
+title: IStreamingPaymentAdapter
+description: Auto-generated Solidity API reference.
+---
+
+# IStreamingPaymentAdapter
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### IStreamingPaymentAdapter
+
+Common interface for streaming payment adapters (Superfluid, Sablier, etc.)
+
+_Adapters implement this interface to provide streaming payment capabilities
+ to Tangle services without tight coupling to specific protocols._
+
+#### Functions
+
+#### createStream
+
+```solidity
+function createStream(uint64 serviceId, address token, uint256 totalAmount, uint64 durationSeconds, uint64 cliffSeconds) external payable returns (uint256 streamId)
+```
+
+Create a streaming payment for a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+| token | address | The ERC-20 token to stream (address(0) for native) |
+| totalAmount | uint256 | Total amount to stream |
+| durationSeconds | uint64 | Stream duration in seconds |
+| cliffSeconds | uint64 | Optional cliff period (0 for no cliff) |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The created stream ID |
+
+#### updateStreamRate
+
+```solidity
+function updateStreamRate(uint256 streamId, uint256 newRatePerSecond) external
+```
+
+Update the rate of an existing stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID to update |
+| newRatePerSecond | uint256 | New streaming rate |
+
+#### cancelStream
+
+```solidity
+function cancelStream(uint256 streamId) external returns (uint256 refundedAmount)
+```
+
+Cancel a stream and refund remaining balance
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID to cancel |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| refundedAmount | uint256 | Amount refunded to the payer |
+
+#### withdrawFromStream
+
+```solidity
+function withdrawFromStream(uint256 streamId) external returns (uint256 withdrawnAmount)
+```
+
+Withdraw available funds from a stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| withdrawnAmount | uint256 | Amount withdrawn |
+
+#### settleAndDistribute
+
+```solidity
+function settleAndDistribute(uint256 streamId) external
+```
+
+Settle a stream's accumulated funds and distribute to operators
+
+_This triggers distribution through Tangle's payment system_
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID to settle |
+
+#### getWithdrawableAmount
+
+```solidity
+function getWithdrawableAmount(uint256 streamId) external view returns (uint256 amount)
+```
+
+Get the current withdrawable amount for a stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| amount | uint256 | Amount available to withdraw |
+
+#### getStreamRate
+
+```solidity
+function getStreamRate(uint256 streamId) external view returns (uint256 ratePerSecond)
+```
+
+Get the current streaming rate
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| ratePerSecond | uint256 | Tokens per second being streamed |
+
+#### getStreamInfo
+
+```solidity
+function getStreamInfo(uint256 streamId) external view returns (uint64 serviceId, address payer, address token, uint256 totalAmount, uint256 withdrawnAmount, uint256 startTime, uint256 endTime, uint256 cliffTime, bool active)
+```
+
+Get full stream information
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | Associated Tangle service |
+| payer | address | Address funding the stream |
+| token | address | Token being streamed |
+| totalAmount | uint256 | Total stream amount |
+| withdrawnAmount | uint256 | Amount already withdrawn |
+| startTime | uint256 | Stream start timestamp |
+| endTime | uint256 | Stream end timestamp |
+| cliffTime | uint256 | Cliff timestamp (0 if no cliff) |
+| active | bool | Whether stream is active |
+
+#### getStreamServiceId
+
+```solidity
+function getStreamServiceId(uint256 streamId) external view returns (uint64 serviceId)
+```
+
+Get the service ID associated with a stream
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+
+#### getServiceStreams
+
+```solidity
+function getServiceStreams(uint64 serviceId) external view returns (uint256[] streamIds)
+```
+
+Get all active streams for a service
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The Tangle service ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamIds | uint256[] | Array of active stream IDs |
+
+#### getAccruedAmount
+
+```solidity
+function getAccruedAmount(uint256 streamId) external view returns (uint256 accruedAmount)
+```
+
+Calculate real-time accrued amount (not yet settled)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| streamId | uint256 | The stream ID |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| accruedAmount | uint256 | Amount accrued since last settlement |
+
+#### protocolName
+
+```solidity
+function protocolName() external view returns (string name)
+```
+
+Get the name of the underlying protocol
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| name | string | Protocol name (e.g., "Superfluid", "Sablier") |
+
+#### isTokenSupported
+
+```solidity
+function isTokenSupported(address token) external view returns (bool supported)
+```
+
+Check if a token is supported for streaming
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The token address |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| supported | bool | True if token can be streamed |
+
+#### Events
+
+#### StreamCreated
+
+```solidity
+event StreamCreated(uint64 serviceId, uint256 streamId, address payer, address token, uint256 ratePerSecond, uint256 totalAmount)
+```
+
+Emitted when a stream is created for a service
+
+#### StreamUpdated
+
+```solidity
+event StreamUpdated(uint64 serviceId, uint256 streamId, uint256 newRatePerSecond)
+```
+
+Emitted when a stream is updated
+
+#### StreamCancelled
+
+```solidity
+event StreamCancelled(uint64 serviceId, uint256 streamId, uint256 refundedAmount)
+```
+
+Emitted when a stream is cancelled
+
+#### StreamWithdrawn
+
+```solidity
+event StreamWithdrawn(uint64 serviceId, uint256 streamId, uint256 amount, address recipient)
+```
+
+Emitted when funds are withdrawn from a stream
+
+#### StreamSettled
+
+```solidity
+event StreamSettled(uint64 serviceId, uint256 streamId, uint256 amount)
+```
+
+Emitted when a stream is settled and distributed
+
diff --git a/pages/developers/api/reference/generated/IStreamingPaymentManager.mdx b/pages/developers/api/reference/generated/IStreamingPaymentManager.mdx
new file mode 100644
index 0000000..d1dcc07
--- /dev/null
+++ b/pages/developers/api/reference/generated/IStreamingPaymentManager.mdx
@@ -0,0 +1,79 @@
+---
+title: IStreamingPaymentManager
+description: Auto-generated Solidity API reference.
+---
+
+# IStreamingPaymentManager
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentManager.sol
+
+### IStreamingPaymentManager
+
+Interface for streaming payment management
+
+#### Functions
+
+#### createStream
+
+```solidity
+function createStream(uint64 serviceId, uint64 blueprintId, address operator, address paymentToken, uint256 amount, uint64 startTime, uint64 endTime) external payable
+```
+
+Create a streaming payment for a service
+
+#### dripAndGetChunk
+
+```solidity
+function dripAndGetChunk(uint64 serviceId, address operator) external returns (uint256 amount, uint256 durationSeconds, uint64 blueprintId, address paymentToken)
+```
+
+Drip a specific stream and return chunk info
+
+#### dripOperatorStreams
+
+```solidity
+function dripOperatorStreams(address operator) external returns (uint64[] serviceIds, uint64[] blueprintIds, address[] paymentTokens, uint256[] amounts, uint256[] durations)
+```
+
+Drip all active streams for an operator
+
+#### onServiceTerminated
+
+```solidity
+function onServiceTerminated(uint64 serviceId, address refundRecipient) external
+```
+
+Called when service is terminated
+
+#### onOperatorLeaving
+
+```solidity
+function onOperatorLeaving(uint64 serviceId, address operator) external
+```
+
+Called when operator is leaving
+
+#### getOperatorActiveStreams
+
+```solidity
+function getOperatorActiveStreams(address operator) external view returns (uint64[])
+```
+
+Get active stream IDs for an operator
+
+#### getStreamingPayment
+
+```solidity
+function getStreamingPayment(uint64 serviceId, address operator) external view returns (uint64 _serviceId, uint64 blueprintId, address _operator, address paymentToken, uint256 totalAmount, uint256 distributed, uint64 startTime, uint64 endTime, uint64 lastDripTime)
+```
+
+Get streaming payment details
+
+#### pendingDrip
+
+```solidity
+function pendingDrip(uint64 serviceId, address operator) external view returns (uint256)
+```
+
+Calculate pending drip amount
+
diff --git a/pages/developers/api/reference/generated/ISuperfluidAdapter.mdx b/pages/developers/api/reference/generated/ISuperfluidAdapter.mdx
new file mode 100644
index 0000000..dfbb8db
--- /dev/null
+++ b/pages/developers/api/reference/generated/ISuperfluidAdapter.mdx
@@ -0,0 +1,130 @@
+---
+title: ISuperfluidAdapter
+description: Auto-generated Solidity API reference.
+---
+
+# ISuperfluidAdapter
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/IStreamingPaymentAdapter.sol
+
+### ISuperfluidAdapter
+
+Extended interface for Superfluid-specific features
+
+#### Functions
+
+#### getNetFlowRate
+
+```solidity
+function getNetFlowRate(address account, address token) external view returns (int96 netFlowRate)
+```
+
+Get the net flow rate for an account (incoming - outgoing)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The account address |
+| token | address | The super token |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| netFlowRate | int96 | Net flow rate (can be negative) |
+
+#### getRealtimeBalance
+
+```solidity
+function getRealtimeBalance(address account, address token) external view returns (int256 availableBalance, uint256 deposit)
+```
+
+Get the real-time balance of an account
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The account address |
+| token | address | The super token |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| availableBalance | int256 | Current available balance |
+| deposit | uint256 | Required deposit/buffer |
+
+#### isSolvent
+
+```solidity
+function isSolvent(address account, address token) external view returns (bool solvent)
+```
+
+Check if an account is solvent (positive balance)
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| account | address | The account address |
+| token | address | The super token |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| solvent | bool | True if account has positive balance |
+
+#### getRequiredBuffer
+
+```solidity
+function getRequiredBuffer(address token, int96 flowRate) external view returns (uint256 bufferAmount)
+```
+
+Get the required buffer/deposit for a flow rate
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The super token |
+| flowRate | int96 | Flow rate in wei/second |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| bufferAmount | uint256 | Required buffer deposit |
+
+#### wrapTokens
+
+```solidity
+function wrapTokens(address token, uint256 amount) external
+```
+
+Wrap underlying tokens to super tokens
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The underlying token |
+| amount | uint256 | Amount to wrap |
+
+#### unwrapTokens
+
+```solidity
+function unwrapTokens(address token, uint256 amount) external
+```
+
+Unwrap super tokens to underlying
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| token | address | The super token |
+| amount | uint256 | Amount to unwrap |
+
diff --git a/pages/developers/api/reference/generated/ITangle.mdx b/pages/developers/api/reference/generated/ITangle.mdx
new file mode 100644
index 0000000..bf01264
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangle.mdx
@@ -0,0 +1,16 @@
+---
+title: ITangle
+description: Auto-generated Solidity API reference.
+---
+
+# ITangle
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangle.sol
+
+### ITangle
+
+Core interface for Tangle Protocol
+
+_Consolidates all sub-interfaces into a single entry point.
+ Inherits from focused sub-interfaces for modularity._
+
diff --git a/pages/developers/api/reference/generated/ITangleAdmin.mdx b/pages/developers/api/reference/generated/ITangleAdmin.mdx
new file mode 100644
index 0000000..dd1d282
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleAdmin.mdx
@@ -0,0 +1,249 @@
+---
+title: ITangleAdmin
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleAdmin
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangle.sol
+
+### ITangleAdmin
+
+Admin functions for Tangle protocol
+
+#### Functions
+
+#### setRestaking
+
+```solidity
+function setRestaking(address restaking) external
+```
+
+Set the restaking module
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| restaking | address | The IRestaking implementation |
+
+#### setTreasury
+
+```solidity
+function setTreasury(address treasury) external
+```
+
+Set the protocol treasury
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| treasury | address | The treasury address |
+
+#### setPaymentSplit
+
+```solidity
+function setPaymentSplit(struct Types.PaymentSplit split) external
+```
+
+Set the payment split configuration
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| split | struct Types.PaymentSplit | The new split configuration |
+
+#### paymentSplit
+
+```solidity
+function paymentSplit() external view returns (uint16 developerBps, uint16 protocolBps, uint16 operatorBps, uint16 restakerBps)
+```
+
+Get the current payment split
+
+#### pause
+
+```solidity
+function pause() external
+```
+
+Pause the protocol
+
+#### unpause
+
+```solidity
+function unpause() external
+```
+
+Unpause the protocol
+
+#### treasury
+
+```solidity
+function treasury() external view returns (address payable)
+```
+
+Get the configured treasury
+
+#### setMetricsRecorder
+
+```solidity
+function setMetricsRecorder(address recorder) external
+```
+
+Set the metrics recorder (optional)
+
+#### metricsRecorder
+
+```solidity
+function metricsRecorder() external view returns (address)
+```
+
+Get the metrics recorder address
+
+#### setOperatorStatusRegistry
+
+```solidity
+function setOperatorStatusRegistry(address registry) external
+```
+
+Set operator status registry
+
+#### operatorStatusRegistry
+
+```solidity
+function operatorStatusRegistry() external view returns (address)
+```
+
+Get operator status registry
+
+#### setServiceFeeDistributor
+
+```solidity
+function setServiceFeeDistributor(address distributor) external
+```
+
+Configure service fee distributor
+
+#### serviceFeeDistributor
+
+```solidity
+function serviceFeeDistributor() external view returns (address)
+```
+
+Get service fee distributor
+
+#### setPriceOracle
+
+```solidity
+function setPriceOracle(address oracle) external
+```
+
+Configure price oracle
+
+#### priceOracle
+
+```solidity
+function priceOracle() external view returns (address)
+```
+
+Get price oracle
+
+#### setMBSMRegistry
+
+```solidity
+function setMBSMRegistry(address registry) external
+```
+
+Configure Master Blueprint Service Manager registry
+
+#### mbsmRegistry
+
+```solidity
+function mbsmRegistry() external view returns (address)
+```
+
+Get Master Blueprint Service Manager registry
+
+#### maxBlueprintsPerOperator
+
+```solidity
+function maxBlueprintsPerOperator() external view returns (uint32)
+```
+
+Get max blueprints per operator
+
+#### setMaxBlueprintsPerOperator
+
+```solidity
+function setMaxBlueprintsPerOperator(uint32 newMax) external
+```
+
+Set max blueprints per operator
+
+#### tntToken
+
+```solidity
+function tntToken() external view returns (address)
+```
+
+Get TNT token address
+
+#### setTntToken
+
+```solidity
+function setTntToken(address token) external
+```
+
+Set TNT token address
+
+#### rewardVaults
+
+```solidity
+function rewardVaults() external view returns (address)
+```
+
+Get reward vaults address
+
+#### setRewardVaults
+
+```solidity
+function setRewardVaults(address vaults) external
+```
+
+Set reward vaults address
+
+#### defaultTntMinExposureBps
+
+```solidity
+function defaultTntMinExposureBps() external view returns (uint16)
+```
+
+Get default TNT min exposure bps
+
+#### setDefaultTntMinExposureBps
+
+```solidity
+function setDefaultTntMinExposureBps(uint16 minExposureBps) external
+```
+
+Set default TNT min exposure bps
+
+#### tntPaymentDiscountBps
+
+```solidity
+function tntPaymentDiscountBps() external view returns (uint16)
+```
+
+Get TNT payment discount bps
+
+#### setTntPaymentDiscountBps
+
+```solidity
+function setTntPaymentDiscountBps(uint16 discountBps) external
+```
+
+Set TNT payment discount bps
+
diff --git a/pages/developers/api/reference/generated/ITangleBlueprints.mdx b/pages/developers/api/reference/generated/ITangleBlueprints.mdx
new file mode 100644
index 0000000..6593a39
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleBlueprints.mdx
@@ -0,0 +1,157 @@
+---
+title: ITangleBlueprints
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleBlueprints
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleBlueprints.sol
+
+### ITangleBlueprints
+
+Blueprint management interface
+
+#### Functions
+
+#### createBlueprint
+
+```solidity
+function createBlueprint(struct Types.BlueprintDefinition definition) external returns (uint64 blueprintId)
+```
+
+Create a blueprint from an encoded definition that includes schemas and job metadata
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| definition | struct Types.BlueprintDefinition | Fully populated blueprint definition struct |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The new blueprint ID |
+
+#### updateBlueprint
+
+```solidity
+function updateBlueprint(uint64 blueprintId, string metadataUri) external
+```
+
+Update blueprint metadata
+
+#### transferBlueprint
+
+```solidity
+function transferBlueprint(uint64 blueprintId, address newOwner) external
+```
+
+Transfer blueprint ownership
+
+#### deactivateBlueprint
+
+```solidity
+function deactivateBlueprint(uint64 blueprintId) external
+```
+
+Deactivate a blueprint
+
+#### getBlueprint
+
+```solidity
+function getBlueprint(uint64 blueprintId) external view returns (struct Types.Blueprint)
+```
+
+Get blueprint info
+
+#### getBlueprintConfig
+
+```solidity
+function getBlueprintConfig(uint64 blueprintId) external view returns (struct Types.BlueprintConfig)
+```
+
+Get blueprint configuration
+
+#### blueprintOperatorCount
+
+```solidity
+function blueprintOperatorCount(uint64 blueprintId) external view returns (uint256)
+```
+
+Get number of operators for a blueprint
+
+#### blueprintCount
+
+```solidity
+function blueprintCount() external view returns (uint64)
+```
+
+Get current blueprint count
+
+#### getBlueprintDefinition
+
+```solidity
+function getBlueprintDefinition(uint64 blueprintId) external view returns (struct Types.BlueprintDefinition definition)
+```
+
+Get the original blueprint definition
+
+#### blueprintMetadata
+
+```solidity
+function blueprintMetadata(uint64 blueprintId) external view returns (struct Types.BlueprintMetadata metadata, string metadataUri)
+```
+
+Get blueprint metadata and URI
+
+#### blueprintSources
+
+```solidity
+function blueprintSources(uint64 blueprintId) external view returns (struct Types.BlueprintSource[] sources)
+```
+
+Get blueprint sources
+
+#### blueprintSupportedMemberships
+
+```solidity
+function blueprintSupportedMemberships(uint64 blueprintId) external view returns (enum Types.MembershipModel[] memberships)
+```
+
+Get blueprint supported membership models
+
+#### blueprintMasterRevision
+
+```solidity
+function blueprintMasterRevision(uint64 blueprintId) external view returns (uint32)
+```
+
+Get master blueprint revision
+
+#### Events
+
+#### BlueprintCreated
+
+```solidity
+event BlueprintCreated(uint64 blueprintId, address owner, address manager, string metadataUri)
+```
+
+#### BlueprintUpdated
+
+```solidity
+event BlueprintUpdated(uint64 blueprintId, string metadataUri)
+```
+
+#### BlueprintTransferred
+
+```solidity
+event BlueprintTransferred(uint64 blueprintId, address from, address to)
+```
+
+#### BlueprintDeactivated
+
+```solidity
+event BlueprintDeactivated(uint64 blueprintId)
+```
+
diff --git a/pages/developers/api/reference/generated/ITangleFull.mdx b/pages/developers/api/reference/generated/ITangleFull.mdx
new file mode 100644
index 0000000..0232a16
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleFull.mdx
@@ -0,0 +1,13 @@
+---
+title: ITangleFull
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleFull
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangle.sol
+
+### ITangleFull
+
+Complete Tangle interface including admin and slashing
+
diff --git a/pages/developers/api/reference/generated/ITangleGovernance.mdx b/pages/developers/api/reference/generated/ITangleGovernance.mdx
new file mode 100644
index 0000000..de77f99
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleGovernance.mdx
@@ -0,0 +1,272 @@
+---
+title: ITangleGovernance
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleGovernance
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleGovernance.sol
+
+### ITangleGovernance
+
+Interface for Tangle governance components
+
+#### Types
+
+#### ProposalState
+
+Proposal states
+
+```solidity
+enum ProposalState {
+ Pending,
+ Active,
+ Canceled,
+ Defeated,
+ Succeeded,
+ Queued,
+ Expired,
+ Executed
+}
+```
+
+#### Functions
+
+#### propose
+
+```solidity
+function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) external returns (uint256 proposalId)
+```
+
+Create a new proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| description | string | Human-readable description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The unique proposal identifier |
+
+#### queue
+
+```solidity
+function queue(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) external returns (uint256 proposalId)
+```
+
+Queue a successful proposal for execution
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| descriptionHash | bytes32 | Hash of the proposal description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal identifier |
+
+#### execute
+
+```solidity
+function execute(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) external payable returns (uint256 proposalId)
+```
+
+Execute a queued proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| descriptionHash | bytes32 | Hash of the proposal description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal identifier |
+
+#### cancel
+
+```solidity
+function cancel(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) external returns (uint256 proposalId)
+```
+
+Cancel a proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| targets | address[] | Contract addresses to call |
+| values | uint256[] | ETH values to send |
+| calldatas | bytes[] | Encoded function calls |
+| descriptionHash | bytes32 | Hash of the proposal description |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal identifier |
+
+#### castVote
+
+```solidity
+function castVote(uint256 proposalId, uint8 support) external returns (uint256 weight)
+```
+
+Cast a vote on a proposal
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal to vote on |
+| support | uint8 | 0=Against, 1=For, 2=Abstain |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| weight | uint256 | The voting weight used |
+
+#### castVoteWithReason
+
+```solidity
+function castVoteWithReason(uint256 proposalId, uint8 support, string reason) external returns (uint256 weight)
+```
+
+Cast a vote with reason
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal to vote on |
+| support | uint8 | 0=Against, 1=For, 2=Abstain |
+| reason | string | Explanation for the vote |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| weight | uint256 | The voting weight used |
+
+#### castVoteBySig
+
+```solidity
+function castVoteBySig(uint256 proposalId, uint8 support, address voter, bytes signature) external returns (uint256 weight)
+```
+
+Cast a vote using EIP-712 signature
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| proposalId | uint256 | The proposal to vote on |
+| support | uint8 | 0=Against, 1=For, 2=Abstain |
+| voter | address | The voter address |
+| signature | bytes | The EIP-712 signature |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| weight | uint256 | The voting weight used |
+
+#### state
+
+```solidity
+function state(uint256 proposalId) external view returns (enum ITangleGovernance.ProposalState)
+```
+
+Get the current state of a proposal
+
+#### proposalSnapshot
+
+```solidity
+function proposalSnapshot(uint256 proposalId) external view returns (uint256)
+```
+
+Get the block number when voting starts
+
+#### proposalDeadline
+
+```solidity
+function proposalDeadline(uint256 proposalId) external view returns (uint256)
+```
+
+Get the block number when voting ends
+
+#### proposalProposer
+
+```solidity
+function proposalProposer(uint256 proposalId) external view returns (address)
+```
+
+Get the proposer of a proposal
+
+#### hasVoted
+
+```solidity
+function hasVoted(uint256 proposalId, address account) external view returns (bool)
+```
+
+Check if an account has voted on a proposal
+
+#### getVotes
+
+```solidity
+function getVotes(address account, uint256 blockNumber) external view returns (uint256)
+```
+
+Get voting power of an account at a specific block
+
+#### quorum
+
+```solidity
+function quorum(uint256 blockNumber) external view returns (uint256)
+```
+
+Get the required quorum at a specific block
+
+#### votingDelay
+
+```solidity
+function votingDelay() external view returns (uint256)
+```
+
+Get the voting delay (blocks before voting starts)
+
+#### votingPeriod
+
+```solidity
+function votingPeriod() external view returns (uint256)
+```
+
+Get the voting period (blocks for voting)
+
+#### proposalThreshold
+
+```solidity
+function proposalThreshold() external view returns (uint256)
+```
+
+Get the proposal threshold (tokens needed to propose)
+
diff --git a/pages/developers/api/reference/generated/ITangleJobs.mdx b/pages/developers/api/reference/generated/ITangleJobs.mdx
index 4c317e0..2f0ee20 100644
--- a/pages/developers/api/reference/generated/ITangleJobs.mdx
+++ b/pages/developers/api/reference/generated/ITangleJobs.mdx
@@ -5,7 +5,7 @@ description: Auto-generated Solidity API reference.
# ITangleJobs
-Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleJobs.sol
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleJobs.sol
### ITangleJobs
@@ -49,14 +49,14 @@ _Only valid for jobs where requiresAggregation returns true_
##### Parameters
-| Name | Type | Description |
-| ------------------- | ---------- | ------------------------------------------------------------------------ |
-| serviceId | uint64 | The service ID |
-| callId | uint64 | The job call ID |
-| output | bytes | The aggregated output data |
-| signerBitmap | uint256 | Bitmap indicating which operators signed (bit i = operator i in service) |
-| aggregatedSignature | uint256[2] | The aggregated BLS signature [x, y] |
-| aggregatedPubkey | uint256[4] | The aggregated public key [x0, x1, y0, y1] |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| callId | uint64 | The job call ID |
+| output | bytes | The aggregated output data |
+| signerBitmap | uint256 | Bitmap indicating which operators signed (bit i = operator i in service) |
+| aggregatedSignature | uint256[2] | The aggregated BLS signature [x, y] |
+| aggregatedPubkey | uint256[4] | The aggregated public key [x0, x1, y0, y1] |
#### getJobCall
@@ -85,3 +85,8 @@ event JobResultSubmitted(uint64 serviceId, uint64 callId, address operator, byte
```solidity
event JobCompleted(uint64 serviceId, uint64 callId)
```
+
+Emitted when a job reaches its required result threshold
+
+_Derive resultCount from getJobCall(serviceId, callId).resultCount_
+
diff --git a/pages/developers/api/reference/generated/ITangleOperators.mdx b/pages/developers/api/reference/generated/ITangleOperators.mdx
index c643d5f..ecc97b3 100644
--- a/pages/developers/api/reference/generated/ITangleOperators.mdx
+++ b/pages/developers/api/reference/generated/ITangleOperators.mdx
@@ -5,12 +5,16 @@ description: Auto-generated Solidity API reference.
# ITangleOperators
-Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleOperators.sol
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleOperators.sol
### ITangleOperators
Operator registration and management interface
+_Operator liveness is tracked via OperatorStatusRegistry heartbeats,
+ not a setOperatorOnline call. Use submitHeartbeat/isOnline/getOperatorStatus
+ on the registry for liveness signals._
+
#### Functions
#### preRegister
@@ -24,35 +28,35 @@ Signal intent to register for a blueprint
#### registerOperator
```solidity
-function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external payable
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress) external
```
Register as operator for a blueprint
##### Parameters
-| Name | Type | Description |
-| -------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| blueprintId | uint64 | The blueprint to register for |
-| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity This key is used for signing/verifying messages in the P2P gossip network and may differ from the wallet key (msg.sender) |
-| rpcAddress | string | The operator's RPC endpoint URL |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint to register for |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity This key is used for signing/verifying messages in the P2P gossip network and may differ from the wallet key (msg.sender) |
+| rpcAddress | string | The operator's RPC endpoint URL |
#### registerOperator
```solidity
-function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress, bytes registrationInputs) external payable
+function registerOperator(uint64 blueprintId, bytes ecdsaPublicKey, string rpcAddress, bytes registrationInputs) external
```
Register as operator providing blueprint-specific registration inputs
##### Parameters
-| Name | Type | Description |
-| ------------------ | ------ | ----------------------------------------------- |
-| blueprintId | uint64 | |
-| ecdsaPublicKey | bytes | |
-| rpcAddress | string | |
-| registrationInputs | bytes | Encoded payload validated by blueprint's schema |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | |
+| ecdsaPublicKey | bytes | |
+| rpcAddress | string | |
+| registrationInputs | bytes | Encoded payload validated by blueprint's schema |
#### unregisterOperator
@@ -72,11 +76,11 @@ Update operator preferences for a blueprint
##### Parameters
-| Name | Type | Description |
-| -------------- | ------ | --------------------------------------------------------- |
-| blueprintId | uint64 | The blueprint to update preferences for |
-| ecdsaPublicKey | bytes | New ECDSA public key (pass empty bytes to keep unchanged) |
-| rpcAddress | string | New RPC endpoint (pass empty string to keep unchanged) |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint to update preferences for |
+| ecdsaPublicKey | bytes | New ECDSA public key (pass empty bytes to keep unchanged) |
+| rpcAddress | string | New RPC endpoint (pass empty string to keep unchanged) |
#### getOperatorRegistration
@@ -124,12 +128,12 @@ Emitted when an operator registers for a blueprint
##### Parameters
-| Name | Type | Description |
-| -------------- | ------- | ------------------------------------------------ |
-| blueprintId | uint64 | The blueprint ID |
-| operator | address | The operator address (wallet) |
-| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity |
-| rpcAddress | string | The operator's RPC endpoint |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address (wallet) |
+| ecdsaPublicKey | bytes | The ECDSA public key for gossip network identity |
+| rpcAddress | string | The operator's RPC endpoint |
#### OperatorUnregistered
@@ -147,9 +151,10 @@ Emitted when an operator updates their preferences
##### Parameters
-| Name | Type | Description |
-| -------------- | ------- | -------------------------------------------------------- |
-| blueprintId | uint64 | The blueprint ID |
-| operator | address | The operator address |
-| ecdsaPublicKey | bytes | The updated ECDSA public key (may be empty if unchanged) |
-| rpcAddress | string | The updated RPC endpoint (may be empty if unchanged) |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint ID |
+| operator | address | The operator address |
+| ecdsaPublicKey | bytes | The updated ECDSA public key (may be empty if unchanged) |
+| rpcAddress | string | The updated RPC endpoint (may be empty if unchanged) |
+
diff --git a/pages/developers/api/reference/generated/ITanglePaymentsInternal.mdx b/pages/developers/api/reference/generated/ITanglePaymentsInternal.mdx
new file mode 100644
index 0000000..9ca2413
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITanglePaymentsInternal.mdx
@@ -0,0 +1,25 @@
+---
+title: ITanglePaymentsInternal
+description: Auto-generated Solidity API reference.
+---
+
+# ITanglePaymentsInternal
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITanglePaymentsInternal.sol
+
+### ITanglePaymentsInternal
+
+#### Functions
+
+#### distributePayment
+
+```solidity
+function distributePayment(uint64 serviceId, uint64 blueprintId, address token, uint256 amount, address[] operators, uint16[] exposures, uint256 totalExposure) external
+```
+
+#### depositToEscrow
+
+```solidity
+function depositToEscrow(uint64 serviceId, address token, uint256 amount) external
+```
+
diff --git a/pages/developers/api/reference/generated/ITangleRewards.mdx b/pages/developers/api/reference/generated/ITangleRewards.mdx
new file mode 100644
index 0000000..50c94c7
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleRewards.mdx
@@ -0,0 +1,81 @@
+---
+title: ITangleRewards
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleRewards
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleRewards.sol
+
+### ITangleRewards
+
+Reward distribution and claiming interface
+
+#### Functions
+
+#### claimRewards
+
+```solidity
+function claimRewards() external
+```
+
+Claim accumulated rewards (native token)
+
+#### claimRewards
+
+```solidity
+function claimRewards(address token) external
+```
+
+Claim accumulated rewards for a specific token
+
+#### claimRewardsBatch
+
+```solidity
+function claimRewardsBatch(address[] tokens) external
+```
+
+Claim accumulated rewards for multiple tokens
+
+#### claimRewardsAll
+
+```solidity
+function claimRewardsAll() external
+```
+
+Claim accumulated rewards for all pending tokens
+
+#### pendingRewards
+
+```solidity
+function pendingRewards(address account) external view returns (uint256)
+```
+
+Get pending rewards for an account (native token)
+
+#### pendingRewards
+
+```solidity
+function pendingRewards(address account, address token) external view returns (uint256)
+```
+
+Get pending rewards for an account and token
+
+#### rewardTokens
+
+```solidity
+function rewardTokens(address account) external view returns (address[])
+```
+
+List tokens with non-zero pending rewards for an account
+
+_Convenience view; mappings are not enumerable._
+
+#### Events
+
+#### RewardsClaimed
+
+```solidity
+event RewardsClaimed(address account, address token, uint256 amount)
+```
+
diff --git a/pages/developers/api/reference/generated/ITangleSecurityView.mdx b/pages/developers/api/reference/generated/ITangleSecurityView.mdx
new file mode 100644
index 0000000..7252462
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleSecurityView.mdx
@@ -0,0 +1,45 @@
+---
+title: ITangleSecurityView
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleSecurityView
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleSecurityView.sol
+
+### ITangleSecurityView
+
+Minimal view interface for reading service security requirements + operator commitments.
+
+#### Functions
+
+#### getServiceSecurityRequirements
+
+```solidity
+function getServiceSecurityRequirements(uint64 serviceId) external view returns (struct Types.AssetSecurityRequirement[])
+```
+
+#### getServiceSecurityCommitmentBps
+
+```solidity
+function getServiceSecurityCommitmentBps(uint64 serviceId, address operator, enum Types.AssetKind kind, address token) external view returns (uint16)
+```
+
+#### treasury
+
+```solidity
+function treasury() external view returns (address payable)
+```
+
+#### getService
+
+```solidity
+function getService(uint64 serviceId) external view returns (struct Types.Service)
+```
+
+#### getServiceOperators
+
+```solidity
+function getServiceOperators(uint64 serviceId) external view returns (address[])
+```
+
diff --git a/pages/developers/api/reference/generated/ITangleServices.mdx b/pages/developers/api/reference/generated/ITangleServices.mdx
index d92a263..f7f88bc 100644
--- a/pages/developers/api/reference/generated/ITangleServices.mdx
+++ b/pages/developers/api/reference/generated/ITangleServices.mdx
@@ -5,7 +5,7 @@ description: Auto-generated Solidity API reference.
# ITangleServices
-Source: https://github.com/tangle-network/tnt-core/blob/feature/modular-protocol/src/v2/interfaces/ITangleServices.sol
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleServices.sol
### ITangleServices
@@ -77,13 +77,13 @@ _No approval flow needed - operators have pre-committed via signatures_
##### Parameters
-| Name | Type | Description |
-| ---------------- | -------------------------- | ---------------------------------------- |
-| blueprintId | uint64 | The blueprint to use |
-| quotes | struct Types.SignedQuote[] | Array of signed quotes from operators |
-| config | bytes | Service configuration |
-| permittedCallers | address[] | Addresses allowed to call jobs |
-| ttl | uint64 | Service time-to-live (must match quotes) |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| blueprintId | uint64 | The blueprint to use |
+| quotes | struct Types.SignedQuote[] | Array of signed quotes from operators |
+| config | bytes | Service configuration |
+| permittedCallers | address[] | Addresses allowed to call jobs |
+| ttl | uint64 | Service time-to-live (must match quotes) |
#### extendServiceFromQuotes
@@ -183,10 +183,10 @@ Force remove an operator from a service (blueprint manager only)
##### Parameters
-| Name | Type | Description |
-| --------- | ------- | ---------------------- |
-| serviceId | uint64 | The service ID |
-| operator | address | The operator to remove |
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service ID |
+| operator | address | The operator to remove |
#### billSubscription
@@ -367,7 +367,7 @@ event ServiceRequested(uint64 requestId, uint64 blueprintId, address requester)
#### ServiceRequestedWithSecurity
```solidity
-event ServiceRequestedWithSecurity(uint64 requestId, uint64 blueprintId, address requester, address[] operators, struct Types.AssetSecurityRequirement[] securityRequirements)
+event ServiceRequestedWithSecurity(uint64 requestId, uint64 blueprintId, address requester)
```
#### ServiceApproved
@@ -411,3 +411,4 @@ event OperatorLeftService(uint64 serviceId, address operator)
```solidity
event SubscriptionBilled(uint64 serviceId, uint256 amount, uint64 period)
```
+
diff --git a/pages/developers/api/reference/generated/ITangleSlashing.mdx b/pages/developers/api/reference/generated/ITangleSlashing.mdx
new file mode 100644
index 0000000..ef5063c
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleSlashing.mdx
@@ -0,0 +1,108 @@
+---
+title: ITangleSlashing
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleSlashing
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleSlashing.sol
+
+### ITangleSlashing
+
+Slashing interface for Tangle protocol
+
+#### Functions
+
+#### proposeSlash
+
+```solidity
+function proposeSlash(uint64 serviceId, address operator, uint256 amount, bytes32 evidence) external returns (uint64 slashId)
+```
+
+Propose a slash against an operator
+
+##### Parameters
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| serviceId | uint64 | The service where violation occurred |
+| operator | address | The operator to slash |
+| amount | uint256 | Amount to slash |
+| evidence | bytes32 | Evidence hash |
+
+##### Return Values
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| slashId | uint64 | The ID of the created slash proposal |
+
+#### disputeSlash
+
+```solidity
+function disputeSlash(uint64 slashId, string reason) external
+```
+
+Dispute a slash proposal
+
+#### executeSlash
+
+```solidity
+function executeSlash(uint64 slashId) external returns (uint256 actualSlashed)
+```
+
+Execute a slash proposal
+
+#### executeSlashBatch
+
+```solidity
+function executeSlashBatch(uint64[] slashIds) external returns (uint256 totalSlashed, uint256 executedCount)
+```
+
+Execute a batch of slashes
+
+#### getExecutableSlashes
+
+```solidity
+function getExecutableSlashes(uint64 fromId, uint64 toId) external view returns (uint64[] ids)
+```
+
+Get list of executable slash IDs in a range
+
+#### cancelSlash
+
+```solidity
+function cancelSlash(uint64 slashId, string reason) external
+```
+
+Cancel a slash proposal
+
+#### setSlashConfig
+
+```solidity
+function setSlashConfig(uint64 disputeWindow, bool instantSlashEnabled, uint16 maxSlashBps) external
+```
+
+Update slashing configuration
+
+#### getSlashProposal
+
+```solidity
+function getSlashProposal(uint64 slashId) external view returns (struct SlashingLib.SlashProposal)
+```
+
+Get slash proposal details
+
+#### Events
+
+#### SlashProposed
+
+```solidity
+event SlashProposed(uint64 serviceId, address operator, uint256 amount, bytes32 evidence)
+```
+
+#### SlashExecuted
+
+```solidity
+event SlashExecuted(uint64 serviceId, address operator, uint256 amount)
+```
+
diff --git a/pages/developers/api/reference/generated/ITangleToken.mdx b/pages/developers/api/reference/generated/ITangleToken.mdx
new file mode 100644
index 0000000..2f0d436
--- /dev/null
+++ b/pages/developers/api/reference/generated/ITangleToken.mdx
@@ -0,0 +1,95 @@
+---
+title: ITangleToken
+description: Auto-generated Solidity API reference.
+---
+
+# ITangleToken
+
+Source: https://github.com/tangle-network/tnt-core/blob/v2/src/v2/interfaces/ITangleGovernance.sol
+
+### ITangleToken
+
+Interface for the TNT governance token
+
+#### Functions
+
+#### getVotes
+
+```solidity
+function getVotes(address account) external view returns (uint256)
+```
+
+Get the current voting power of an account
+
+#### getPastVotes
+
+```solidity
+function getPastVotes(address account, uint256 blockNumber) external view returns (uint256)
+```
+
+Get historical voting power at a past block
+
+#### getPastTotalSupply
+
+```solidity
+function getPastTotalSupply(uint256 blockNumber) external view returns (uint256)
+```
+
+Get the total supply at a past block
+
+#### delegates
+
+```solidity
+function delegates(address account) external view returns (address)
+```
+
+Get the delegate of an account
+
+#### delegate
+
+```solidity
+function delegate(address delegatee) external
+```
+
+Delegate voting power to another address
+
+#### delegateBySig
+
+```solidity
+function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external
+```
+
+Delegate using EIP-712 signature
+
+#### totalSupply
+
+```solidity
+function totalSupply() external view returns (uint256)
+```
+
+Standard ERC20 functions
+
+#### balanceOf
+
+```solidity
+function balanceOf(address account) external view returns (uint256)
+```
+
+#### transfer
+
+```solidity
+function transfer(address to, uint256 amount) external returns (bool)
+```
+
+#### approve
+
+```solidity
+function approve(address spender, uint256 amount) external returns (bool)
+```
+
+#### transferFrom
+
+```solidity
+function transferFrom(address from, address to, uint256 amount) external returns (bool)
+```
+
diff --git a/pages/developers/protocol-architecture.mdx b/pages/developers/protocol-architecture.mdx
new file mode 100644
index 0000000..32d1865
--- /dev/null
+++ b/pages/developers/protocol-architecture.mdx
@@ -0,0 +1,41 @@
+---
+title: Protocol Architecture
+---
+
+# Protocol Architecture
+
+For a system-level view (roles, flows, and code maps), start here:
+
+- [System Architecture](/developers/system-architecture/overview)
+- [API Reference](/developers/api/overview)
+
+Tangle is the current protocol (EVM-based; legacy: Tangle Substrate) composed of a small set of core contracts:
+
+## Core Contracts
+
+- `Tangle`: protocol entrypoint for blueprints, operator registration, service lifecycle, jobs, payments, and slashing coordination.
+- `MultiAssetDelegation`: restaking and delegation system (operator self-stake, deposits, delegation, exits, and slashing application).
+- `ServiceFeeDistributor` + `StreamingPaymentManager`: distributes the restaker share of service fees (including streamed payments).
+- `TangleMetrics` + `InflationPool`: optional metrics-driven TNT incentive budgeting (pre-funded; no minting).
+- `RewardVaults`: optional TNT incentives per delegated asset with a deposit cap (funded by `InflationPool`).
+- `OperatorStatusRegistry`: heartbeat-based liveness tracking for services (often driven by the operator’s blueprint manager).
+- `LiquidDelegationVault` + `LiquidDelegationFactory`: liquid restaking via transferable vault shares over delegated positions.
+
+## Migration (TNT)
+
+TNT distribution at protocol launch is handled via:
+
+- `TangleMigration`: Merkle + SP1/ZK-gated claim contract for legacy-chain (SS58) allocations.
+- Deploy-time carveouts to prevent non-claimable balances being stuck (treasury module accounts; foundation allocation).
+
+## How To Integrate
+
+Contract addresses are deployment-dependent. Use the published addresses and RPC for your environment:
+
+- [Endpoints and Integration](/developers/endpoints)
+
+For mechanics:
+
+- [Incentives](/network/incentives-overview)
+- [Metrics and Scoring](/network/metrics-and-scoring)
+- [Slashing](/network/slashing)
diff --git a/pages/developers/system-architecture/rewards.mdx b/pages/developers/system-architecture/rewards.mdx
new file mode 100644
index 0000000..0c738e1
--- /dev/null
+++ b/pages/developers/system-architecture/rewards.mdx
@@ -0,0 +1,86 @@
+---
+title: Rewards & Incentives
+description: How service fees are split, how restakers earn, and how optional TNT incentives are budgeted.
+---
+
+import GithubFileReaderDisplay from "/components/GithubFileReaderDisplay";
+
+# Rewards & Incentives
+
+Tangle separates **service fees** (paid by customers) from **incentives** (TNT budgets funded explicitly).
+
+## Service Fee Split (Developer / Protocol / Operator / Restakers)
+
+When a service pays a fee, `Payments.sol` calculates and routes the split:
+
+- Developer payment (blueprint owner or manager override)
+- Protocol payment (treasury)
+- Operator rewards (pending claims)
+- Restaker share (via `ServiceFeeDistributor`, when configured)
+
+
+
+## Restaker Distribution (USD-weighted)
+
+`ServiceFeeDistributor` accounts for:
+
+- Delegation score (principal × lock multiplier)
+- Optional USD weighting (oracle-enabled)
+- Blueprint selection mode (All vs Fixed)
+
+## Inflation-Funded Incentives (TNT)
+
+`InflationPool` is a budgeted, pre-funded source of TNT incentives:
+
+- **Staking portion** is distributed to `RewardVaults` and paid to delegators (with operator commission).
+- **Operator / Customer / Developer portions** accrue as pending TNT balances and are claimed from `InflationPool`.
+- **Restaker portion** (if `restakersBps > 0`) is distributed by service exposure and routed through `ServiceFeeDistributor`.
+
+This keeps incentives explicit and avoids hidden inflation.
+
+## How To Integrate
+
+If you are building on top of this system, the safe default flows are:
+
+- Use `Tangle` for service payments and let `Payments.sol` route splits.
+- Read restaker fee rewards from `ServiceFeeDistributor` (or let users claim directly).
+- Read TNT incentives from `RewardVaults`, and optional restaker inflation from `ServiceFeeDistributor`.
+
+## Example: Fee Split And Restaker Payout
+
+Service pays 10 ETH with a 20/20/40/20 split:
+
+- 2 ETH to developer, 2 ETH to treasury, 4 ETH to operators, 2 ETH to restakers.
+- Restaker share goes to `ServiceFeeDistributor`, where delegators earn by score and blueprint selection.
+
+## Code + Tests
+
+- Split logic: `src/v2/core/Payments.sol`
+- Restaker distribution: `src/v2/rewards/ServiceFeeDistributor.sol`
+- Inflation budgets: `src/v2/rewards/InflationPool.sol`
+- Staking incentives: `src/v2/rewards/RewardVaults.sol`
+- Tests:
+ - `test/v2/tangle/Payments.t.sol`
+ - `test/v2/rewards/ServiceFeeDistributor.t.sol`
+ - `test/v2/rewards/ServiceFeeDistributorStreaming.t.sol`
+ - `test/v2/Rewards.t.sol`
+ - `test/v2/InflationPool.t.sol`
+
+
+
+## Optional TNT Incentives
+
+The “inflation” surface is intentionally **budget-driven**: TNT incentives are funded by explicit budgets rather than assuming continuous minting.
+
+- [Incentives Overview](/network/incentives-overview)
+- [Tokenomics: Incentive Budgets](/network/tokenomics/inflation)
diff --git a/pages/network/incentives-developers.mdx b/pages/network/incentives-developers.mdx
index f2c7e9f..78b68cf 100644
--- a/pages/network/incentives-developers.mdx
+++ b/pages/network/incentives-developers.mdx
@@ -1,47 +1,24 @@
# Developer Incentives
-Tangle Network provides developers with automated revenue streams through blueprint deployment and usage. When users instance your blueprints, smart contracts automatically distribute fees according to a fixed model: 50% to you as the developer, 30% to operators and restakers via Boosted TNT, and 20% to the protocol treasury.
+Blueprint developers earn revenue when customers instance and run their services. Incentives come from:
-## Core Revenue Mechanisms
+1. **Service fee revenue share** on every instance of your blueprint.
+2. **Protocol developer rewards** (paid in TNT from a pre-funded pool, if enabled).
-### Direct Blueprint Revenue
+## Service Fees
-- Earn 50% of all instance fees automatically
-- Control your revenue share through EVM-based distribution logic
-- Implement custom tokenization and revenue-sharing models
-- Configure automated payment collection and distribution
+For each service payment, the protocol sends the **developer portion** to the blueprint owner by default. A blueprint’s service manager can optionally return a different payout address (for example, to route revenue into a multisig, splitter, or DAO treasury).
-### Whitelisting Benefits
+The default protocol split is **20% developer / 20% protocol / 40% operators / 20% restakers** (governance configurable).
-Blueprints demonstrating high utility can access additional revenue through whitelisting:
+## Protocol Developer Rewards (TNT)
-- Receive protocol inflation rewards
-- Gain enhanced network visibility
-- Qualification based on metrics like active instances, transaction volume, and security capital
+If the protocol is running `InflationPool` incentives, developers can earn additional TNT based on on-chain activity metrics (e.g., blueprints created, services created, jobs executed, and fees generated). These rewards are claimable from `InflationPool`.
-## Technical Integration
+## Design Tips
-Your blueprint automatically inherits Tangle's security infrastructure:
+- Be explicit about slashing conditions and the evidence you expect to be submitted on-chain.
+- Use security requirements and operator commitments to express what “secure enough” means for your service.
+- Provide observability where possible (heartbeats and optional QoS metrics) to help operators and customers assess performance.
-- TNT-based restaking mechanism
-- Native LST support
-- Configurable security parameters
-- Smart contract-based revenue distribution
-
-## Economic Dynamics
-
-Successful blueprints benefit from natural market forces:
-
-- Higher usage → increased instance fees
-- Utility drives restaking capital allocation
-- Operator registration follows valuable blueprints
-- Self-reinforcing cycle of adoption and security
-
-## Implementation
-
-1. Deploy your blueprint (open or closed source)
-2. Set revenue distribution parameters
-3. Monitor usage and metrics
-4. Optionally pursue whitelisting for additional benefits
-
-The system is designed to let you focus on building valuable software while the network handles monetization, security, and distribution infrastructure.
+See [Metrics and Scoring](/network/metrics-and-scoring) and [Slashing](/network/slashing).
diff --git a/pages/network/incentives-overview.mdx b/pages/network/incentives-overview.mdx
index c83199a..b7ea7e0 100644
--- a/pages/network/incentives-overview.mdx
+++ b/pages/network/incentives-overview.mdx
@@ -1,33 +1,44 @@
# Incentives Overview
-## Platform Overview
+Tangle’s incentives come from two sources:
-Tangle Network is a platform designed for software monetization where developers can deploy software and benefit from its long-term utility. The platform operates as a marketplace where developers create Blueprints that customers can instance, generating ongoing revenue streams through usage fees and rewards.
+1. **Service fees** paid by customers when they create and run blueprint services.
+2. **TNT incentive budgets** funded to the protocol (no automatic minting).
-When a Blueprint is instanced, the generated fees are automatically distributed between the Blueprint developer (50%), the Tangle protocol (20%), and the operators and restakers securing the service (30%). This distribution model ensures all participants are properly incentivized while maintaining platform sustainability.
+## Service Fees
-## Core Economic Mechanisms
+Customers pay for blueprint services using the chain’s native token or an ERC-20 payment token (including TNT). Fees are split between:
-The network's economic model is built on three primary mechanisms: transaction fees, proof of stake rewards, and restaking incentives.
+- **Developer** (blueprint owner, or a payout address returned by the blueprint’s service manager)
+- **Protocol treasury**
+- **Operators** (weighted by that service’s per-operator exposure)
+- **Restakers** (delegators who restaked with the chosen operators)
-### Transaction Fees
+The default split is **20% developer / 20% protocol / 40% operators / 20% restakers**, and can be updated by governance.
-TNT serves as the base asset for all network transactions, including EVM execution, Blueprint creation, and instance deployment. While transaction fees are required for network operation, the protocol may subsidize certain activities during initial phases to encourage adoption.
+Restaker shares are routed per-operator to the on-chain `ServiceFeeDistributor`, which distributes fees to delegators based on:
-### Proof of Stake Security
+- Delegated amount (and optional lock multiplier)
+- Blueprint selection (`All` vs `Fixed`)
+- Optional per-asset security requirements and operator commitments (and optional USD normalization via a price oracle)
-The network operates on a nominated proof-of-stake consensus mechanism where validators and nominators work together to secure the network. Validators earn native rewards for block production and consensus tasks, while setting their own commission rates. Nominators can stake TNT to support validators and receive pro-rated rewards, with the current network providing approximately 4-5% APY combined.
+## TNT Incentives (Pre-Funded)
-### Restaking Infrastructure
+TNT incentives are distributed from a pre-funded on-chain pool:
-Tangle's restaking system creates an efficient marketplace between developers, operators, and restakers. Restakers can earn base rewards by depositing TNT and boost their earnings through longer lock periods. Operators run Blueprint instances and earn fees from service execution, while maintaining high performance standards. Blueprint developers benefit from custom reward distributions and long-term adoption of their services.
+- `InflationPool` holds TNT allocated by governance/treasury and distributes it in epochs.
+- The staking portion funds `RewardVaults`, which pays TNT incentives for delegated assets (with a deposit cap per asset).
+- Other portions become claimable TNT balances for operators, customers, and developers.
+- If `restakersBps > 0`, a restaker TNT budget is distributed by service exposure and routed through `ServiceFeeDistributor`.
-### Blueprint Economics
+## Metrics and Scoring
-The protocol enforces a transparent fee distribution model between developers, operators, restakers, and the underlying Tangle protocol.
+The protocol can optionally record activity into a metrics contract (`TangleMetrics`) using best-effort hooks (failures do not block core protocol actions). Those metrics drive merit-based distributions in `InflationPool`.
-- **50%** goes directly to you as the blueprint developer
-- **30%** is allocated to operators and restakers through the Boosted TNT restaking mechanism
-- **20%** flows to the protocol treasury for ecosystem development
+- See [Metrics and Scoring](/network/metrics-and-scoring) for details.
-TNT remains the primary restaking asset required for all Blueprint instances. Developers can incorporate additional approved assets for enhanced security. Through programmable distribution mechanisms, developers can customize fee allocations while maintaining protocol alignment.
+## Why This Layout Works
+
+- **One restaker fee path**: Service fees always flow through `ServiceFeeDistributor`, so payout math is consistent across tokens and services.
+- **Budget clarity**: Incentives only exist if governance funds them; there is no hidden inflation.
+- **Predictable integration**: Developers can reason about exactly where funds go and how to claim them.
diff --git a/pages/network/incentives-restakers.mdx b/pages/network/incentives-restakers.mdx
index 7bbd4ac..2839b69 100644
--- a/pages/network/incentives-restakers.mdx
+++ b/pages/network/incentives-restakers.mdx
@@ -1,150 +1,57 @@
# Restaking Incentives for Restakers
-## Overview
+Restakers (delegators) earn two types of rewards on Tangle:
-Tangle Network incentivizes restakers through TNT rewards for depositing specific assets as well as with service revenue and fee rewards. Deposit rewards are distributed in an ongoing manner and are immediately claimable. Service revenue is distributed in fixed time intervals according to governance.
+1. **Service fee revenue** from blueprint services they help secure (paid in the service’s payment token).
+2. **Optional TNT incentives** for delegating assets (pre-funded by governance).
-The protocol determines which assets are incentivized for deposits and their maximum deposit capacities through governance decisions. Non-incentivized assets are still valid for deposits and can be leveraged to instance Tangle Blueprints.
+## How You Participate
-### Score vs Points
+- Deposit supported assets into the on-chain `MultiAssetDelegation` restaking contract.
+- Delegate to an operator and choose a blueprint selection mode:
+ - **`All`**: you are exposed to all blueprints the operator participates in.
+ - **`Fixed`**: you choose which blueprint IDs you accept exposure to.
+- Optionally apply a lock multiplier (1–6 months) to boost reward share.
-For the purposes of avoiding confusion we use the terms points and score independently. Points refer to any future airdrop and scores refer to onchain values that we leverage for distributing onchain rewards, whether from deposits or services. Points are NOT equal to score values! Hopefully we don't mistake them in the docs.
+## TNT Deposit Incentives (`RewardVaults`)
-## Deposit Mechanics
+TNT incentives are paid from `RewardVaults`:
-Depositing incentivized assets on Tangle earns your TNT tokens and points in upcoming airdrops. There are a list of assets onchain that are incentivized. For these assets, there exists a **vault** for them specifying the capacity and APY for deposits.
+- One vault per staking asset (native, TNT, etc.).
+- Governance sets a **deposit cap** and whether the vault is active.
+- Rewards are paid in **TNT** from a pre-funded `InflationPool` (no minting).
+- Delegator share is based on principal × lock multiplier and the operator’s commission setting.
-### Deposit Capacity
+## Service Fee Revenue (`ServiceFeeDistributor`)
-The restaking system implements maximum deposit capacities for each incentivized asset to ensure secure and controlled TVL growth. Key aspects:
+When customers pay for a service, the protocol splits fees and routes the **restaker portion** per operator to `ServiceFeeDistributor`. From there, fees are distributed to delegators who restaked with that operator based on:
-- Fixed maximum amount per asset
-- APY distributed proportionally to deposits/capacity ratio
-- Unallocated APY is never minted
-- APY defines reward allocation at full capacity
+- Delegated amount (and optional lock multiplier)
+- Blueprint selection (`All` vs `Fixed`)
+- Optional per-asset commitments and USD weighting (if a price oracle is configured)
+- Optional streaming over a service’s TTL (for streamed payments)
-### Protocol Implementation
+## Exposure-Based Protocol Rewards (`InflationPool`)
-The `pallet-multi-asset-delegation` system manages:
+If enabled, `InflationPool` can allocate a restaker budget in TNT based on **service exposure**. Exposure is computed at distribution time using `ServiceFeeDistributor` and optional USD pricing.
-- Deposit and withdrawal logic
-- Delegation to operators
-- Asset staking mechanisms
-- APY and capacity configurations
-- System upgrades via governance
+- The keeper calls `InflationPool.distributeEpochWithServices(serviceIds)`.
+- TNT is routed into `ServiceFeeDistributor` and claimed there (same flow as service fees).
-Users can view available assets and their parameters through the Tangle Restaking dApp.
+## Risks
-### Withdrawal Process
+- Slashing reduces the withdrawable value of operator positions using share/exchange-rate accounting.
+- Use `Fixed` blueprint selection if you want to scope exposure to specific blueprints.
-- Standard withdrawal delay: ~7 days (W sessions)
-- Deposits continue earning incentives during withdrawal period
-- Assets must be unstaked before withdrawal
+See [Slashing](/network/slashing) and [Restaker Risks](/restake/risks).
-## Scoring and Rewards
+## User Stories
-When Tangle Blueprints are instanced, a new service is created. Customers instance Tangle Blueprints by selecting the operators and types of restaked assets they desire for security. They pay for the service in advance and throughout operation for task based services.
+**Maya the restaker**
+- She delegates 1,000 wstETH to a trusted operator in `Fixed` mode for two blueprints she understands.
+- She earns USDC fees from services on those blueprints and optional TNT incentives from the staking vault.
+- When the operator stops serving a blueprint, she removes it from her fixed list to reduce exposure.
-The payments and fees are distributed according to a scoring mechanism that is normalized against the USD value of the service instance's assets.
-
-TNT is the default restaking asset and must be included as restaked security collateral for all service instances. We treat TNT as a special asset when scoring. TNT earns a score of 1 value per 1 TNT allocated to secure the service, whereas other assets earn a score of 1 value per $1 allocated to secure the service.
-
-### Lock Multipliers
-
-Users can enhance their score through time-locks. This locks their deposited assets for additional months, preventing any withdrawals or unstaking until the lock has ended:
-
-- Longer locks lead to higher score multipliers
-- Locked tokens cannot be withdrawn until expiry
-- Multiplier directly impacts deposit reward share
-
-### Reward Calculation for Deposits
-
-The reward formula $R$ for a user at any point is:
-
-$R = APY \times \frac{S_u}{S_t} \times \frac{D_t}{C}$
-
-Where:
-
-- $APY$ = Asset's annual percentage yield
-- $S_u$ = User's score (including lock multipliers)
-- $S_t$ = Total score across all users
-- $D_t$ = Total deposits for the asset
-- $C$ = Maximum deposit capacity
-
-### Reward Calculation for Service Rewards
-
-The protocol allocates service revenue and fee rewards using a dual-tier scoring mechanism:
-
-For TNT (Native Token):
-
-- Each TNT restaked earns 1 base point
-
-For Other Approved Assets:
-
-- Each $1 USD value restaked earns 1 base point
-
-The reward formula $R$ for a restaker securing a service instance is calculated as:
-
-$R = Rewards \times \frac{S_u}{S_t}$
-
-Where:
-
-- $Rewards$ = Rewards and fees of the service instance
-- $A_u$ = User's restaking score for the exposed assets
-- $A_t$ = Total score across all exposed assets of the service instance
-
-## Example Scenario: Calculating Restaking Rewards
-
-Let's walk through practical examples to understand how both deposit rewards and service revenue rewards are calculated.
-
-### Deposit Rewards Example
-
-Let's say Alice deposits 1000 TNT with a 12-month lock:
-
-Initial Parameters:
-
-- Base APY: 5%
-- Lock multiplier: 2x for 2 months
-- Total deposits: 100,000 TNT
-- Maximum capacity: 1,000,000 TNT
-
-Her rewards calculation:
-
-1. Score calculation:
-
- - Base score: 1000 (from 1000 TNT)
- - With 2x multiplier: 2000 score
- - Total system score: 150,000
-
-2. Annual deposit rewards:
- ```
- 5% × (2000/150,000) × (100,000/1,000,000) × 1000 TNT = 0.67 TNT
- ```
-
-### Service Revenue Example
-
-Now let's calculate Alice's service revenue rewards:
-
-Initial Parameters:
-
-- Service instance monthly fees: 1000 USDC
-- Service revenue allocation: 30% to restakers
-- Alice's restaked assets:
- - 1000 TNT (1000 points)
- - 2000 USDC (2000 points)
-- Total service restaking points: 10000 (5000 TNT + 5000 USDC worth)
-
-Her service revenue calculation:
-
-1. Monthly revenue share:
-
- ```
- 1000 USDC × 30% = 300 USDC to restakers
- ```
-
-2. Alice's share:
- ```
- 300 USDC × (3000/10000) = 90 USDC per month
- ```
-
-Alice would earn approximately 90 USDC per month from service revenue, in addition to her deposit rewards of 0.67 TNT annually. Her service revenue share is calculated based on her total restaking score (3000 points from 1000 TNT + 2000 USDC) divided by the total service restaking score of 10000 points. Note that while lock period multipliers affect deposit rewards, they do not impact service revenue calculations. The service revenue is paid out in whatever token the customers use to pay for the service - in this example USDC.
+**Lee the integrator**
+- He builds a dashboard that shows restakers their estimated service-fee rewards.
+- He reads scores and pending rewards from `ServiceFeeDistributor`, and vault info from `RewardVaults`.
diff --git a/pages/network/metrics-and-scoring.mdx b/pages/network/metrics-and-scoring.mdx
new file mode 100644
index 0000000..24bbc4d
--- /dev/null
+++ b/pages/network/metrics-and-scoring.mdx
@@ -0,0 +1,49 @@
+---
+title: Metrics and Scoring
+description: How Tangle records protocol activity and uses it for incentive distribution.
+---
+
+# Metrics and Scoring
+
+Tangle’s incentive programs can be driven by on-chain activity metrics. Metrics are optional: the protocol is designed so that core actions still work even if metrics recording is disabled or temporarily unavailable.
+
+## Core Components
+
+- **`TangleMetrics`**: an on-chain activity recorder implementing `IMetricsRecorder`.
+- **Metrics hooks**: best-effort calls from core contracts (wrapped in `try/catch`) that emit or aggregate activity data.
+- **`InflationPool`**: a pre-funded TNT budget that can distribute TNT based on recorded metrics.
+- **`ServiceFeeDistributor`**: distributes the restaker share of service fees and exposes USD-weighted exposure views for restaker inflation.
+
+## What Gets Recorded
+
+Depending on what is configured on-chain, the protocol can record:
+
+- **Blueprint activity**: blueprint creation and operator registrations.
+- **Service activity**: service creation/termination, job calls, job completion success rates.
+- **Payments**: total fees paid by customers.
+- **Operator liveness**: heartbeats for active services.
+- **Slashing**: executed slash events (and the slashed amount).
+
+## Restaker “Exposure” Scoring
+
+For restaker rewards funded by `InflationPool`, exposure is **computed at distribution time**:
+
+- `InflationPool.distributeEpochWithServices` queries `ServiceFeeDistributor.getOperatorServiceUsdExposure`.
+- Exposure uses the same security requirements and commitments that gate service-fee payouts.
+- If a price oracle is configured, the exposure is normalized in USD terms; otherwise it falls back to raw amounts.
+
+This avoids storing per-delegator exposure metrics on-chain and keeps restaker inflation aligned with the same exposure model used for fees.
+
+## Heartbeats and QoS
+
+Operators (often via their blueprint manager) can submit service heartbeats to `OperatorStatusRegistry`. Heartbeats:
+
+- Provide an on-chain signal of liveness for a given `(serviceId, operator)`.
+- Can mark operators offline for a service when heartbeats are missed.
+- Are often used as part of off-chain monitoring, and may be referenced when proposing a slash.
+
+Heartbeats do not automatically slash an operator by themselves; slashing requires an authorized on-chain proposal and execution.
+
+## Important Note on Budgets
+
+Merit-based rewards only exist if `InflationPool` is funded with TNT. If it has a zero balance, there is nothing to distribute—even if metrics are recorded.
diff --git a/pages/network/tokenomics/usage.mdx b/pages/network/tokenomics/usage.mdx
index b33a8e6..bc2cba2 100644
--- a/pages/network/tokenomics/usage.mdx
+++ b/pages/network/tokenomics/usage.mdx
@@ -1,34 +1,32 @@
# TNT Token Information and Utility
-The Tangle Network's native token is TNT, used as the gas token, payment token, and base restaking asset for Tangle Blueprints and restaked services.
+TNT is Tangle’s **governance token** (an ERC‑20 on EVM chains).
-| Network | Network Type | Native Asset Symbol | Native Asset Decimals |
-| -------------- | ------------ | ------------------- | --------------------- |
-| Tangle Network | Mainnet | TNT | 18 |
-| Tangle Testnet | Testnet | tTNT | 18 |
+TNT is **not** the gas token. Gas fees are paid in the underlying chain’s native asset (e.g., ETH on Base).
+
+| Network | Network Type | Native Asset Symbol | Native Asset Decimals |
+| ------------ | ------------ | ------------------- | --------------------- |
+| Tangle (EVM) | Mainnet | TNT | 18 |
+| Tangle (EVM) | Testnet | TNT | 18 |
## Usage Cases
-### Consensus Mechanism and nPoS:
+### Governance
-The Tangle Network's nominated proof-of-stake (nPoS) consensus mechanism requires TNT to be staked by validators to participate in validating blocks. Additionally, nominators can nominate their TNT to individual validators to participate in the rewards to that validator and increase that validator's tokens-at-stake.
+TNT holders participate in protocol governance (e.g., parameter updates, treasury actions, upgrades) using on-chain voting.
-### Network Economics
+### Protocol Alignment
-Tangle Network dynamically mints or burns TNT tokens to reward consensus protocol participants like validators and nominators, partially fund its treasury, manage inflation, and ensure the network's economic stability.
+TNT is the unit of alignment for the Tangle protocol: it is used to coordinate incentives across restakers, operators, blueprint developers, and users of services.
### Restaking Economics
-TNT serves as the currency for transactions between job submitters and validators within the Tangle Network's restaking infrastructure. This facilitates seamless, secure, and efficient execution of complex and on-demand computational services.
+TNT can be used within the restaking ecosystem as an operator **self-stake** asset and as a delegatable restaking asset (and may also be accepted for service payments depending on the deployed configuration).
-### Slashing Mechanisms:
+### Slashing Mechanisms
To safeguard against malicious activities, TNT tokens are integral to Tangle's slashing protocols across consensus and the restaking system. These measures are designed to deter attacks and incentivize adherence to network protocols.
-### Governance Empowerment:
-
-TNT holders wield governance power, enabling them to partake in pivotal network decisions through referenda. This democratic approach ensures that the Tangle Network evolves in alignment with its community's interests.
-
---
-A considerable portion of TNT will be actively engaged in the network, either staked by validators and nominators for network security or utilized in the execution of Tangle Blueprints. This not only ensures the network's resilience and security but also drives engagement and utility within the Tangle ecosystem.
+A considerable portion of TNT will be actively engaged in the protocol (e.g., governance, operator self-stake, incentives), and in the execution of Tangle Blueprints. This helps align economic security with real usage of services.
diff --git a/pages/operators/onboarding.mdx b/pages/operators/onboarding.mdx
index e4b37fa..ce39a11 100644
--- a/pages/operators/onboarding.mdx
+++ b/pages/operators/onboarding.mdx
@@ -5,18 +5,19 @@ description: "Do this now: register, opt into blueprints, and run the operator r
# Operator Onboarding
-This page is the shortest path to becoming an operator on Tangle: register in restaking, register for blueprints, and run the runtime that executes services.
+This page is the shortest path to becoming an operator on Tangle: register in restaking, register for blueprints, and run the Blueprint Manager that executes services.
## What You Need
-- An **EVM wallet** funded for gas and the operator bond/self-stake.
+- An **EVM wallet** funded for gas and the operator self-stake.
- A host that can run your target blueprint runtimes (native, containers, or VM sandbox).
- `foundry` (`cast`) for on-chain calls.
- The Blueprint SDK CLI (`cargo-tangle`) for heartbeats and operational helpers.
+- Review [Runtime Requirements](/operators/manager/requirements), [Sandbox Provisioning](/operators/manager/sandbox-provisioning), [Sizing and Capacity](/operators/manager/sizing), and [Sandboxing and Security](/operators/manager/security).
## Deployment Inputs (Fill These In)
-You will need:
+You will need (Tangle, legacy: Tangle Substrate):
- `RPC_URL` (HTTP) and optionally `WS_RPC_URL` (WebSocket)
- `TANGLE_CONTRACT` (core protocol contract)
@@ -46,7 +47,7 @@ cast call "$RESTAKING_CONTRACT" "minOperatorStake()(uint256)" --rpc-url "$RPC_UR
cast send "$RESTAKING_CONTRACT" "registerOperator()" \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY" \
- --value ""
+ --value ""
```
## 2) Opt Into Blueprints for Delegation (Recommended)
@@ -118,7 +119,14 @@ cast send "$TANGLE_CONTRACT" "registerOperator(uint64,bytes,string)" \
## 4) Run the Blueprint Manager (Required)
-To actually serve jobs, run the long-lived Blueprint Manager. It listens for on-chain service events and spawns the right runtime when services activate.
+To actually serve jobs, run the long-lived Blueprint Manager. It listens for on-chain service requests/activations and spawns the right runtime when services activate. This is the production path; operators should not manually spawn services during onboarding.
+
+**Sandbox choice (production vs quick test)**
+
+- **Production (recommended):** use the systemd setup with `AmbientCapabilities=CAP_NET_ADMIN` so the manager can run the VM sandbox safely.
+- **Quick local test:** use `setcap cap_net_admin+eip` on the binary you run (e.g., `cargo-tangle`).
+
+See [Sandbox Provisioning](/operators/manager/sandbox-provisioning) for the exact commands.
First, create a `settings.env` with your protocol addresses:
@@ -145,7 +153,7 @@ cargo tangle blueprint run \
### Optional: Dry-run a single service (local validation only)
-If you want to validate a single service locally without submitting any on-chain transactions, use the spawn helper with `--dry-run`. This is useful for smoke tests or benchmarking before you join a service.
+If you want to validate a single service locally without submitting any on-chain transactions, use the spawn helper with `--dry-run`. This bypasses the service-request flow and is meant for smoke tests or benchmarking before you join a service.
```bash
export SERVICE_ID="456"
@@ -161,7 +169,7 @@ cargo tangle blueprint service spawn \
--dry-run
```
-Dry run skips operator registration, result submission, and heartbeats from the runtime. If your blueprint code submits its own transactions, those are not blocked.
+Dry run skips operator registration, result submission, and heartbeats from the runtime. If your blueprint code submits its own transactions, those are not blocked. Do not use this path for production traffic; use the Blueprint Manager.
For production operations, keep the Blueprint Manager running and configure your preferred execution runtime(s):
diff --git a/pages/operators/operator/join_operator/join.mdx b/pages/operators/operator/join_operator/join.mdx
index 6041c42..86b3bc8 100644
--- a/pages/operators/operator/join_operator/join.mdx
+++ b/pages/operators/operator/join_operator/join.mdx
@@ -11,11 +11,11 @@ This page covers **restaking-layer** operator registration (becoming an active o
### Step 1: Prepare an EVM wallet
- Use an EVM wallet (e.g., MetaMask/Rabby) and ensure you’re connected to the correct EVM chain where Tangle is deployed.
-- Ensure you have enough balance to cover the operator bond and gas.
+- Ensure you have enough balance to cover the operator self-stake and gas.
### Step 2: Register as an Operator
-Operator registration is performed by calling the restaking contract’s `registerOperator()` function and sending the required bond amount.
+Operator registration is performed by calling the restaking contract’s `registerOperator()` function and sending at least the required **self-stake**.
Use Foundry’s `cast`:
@@ -25,14 +25,14 @@ export RPC_URL="https://..."
export PRIVATE_KEY="0x..."
export RESTAKING_CONTRACT="0x..." # MultiAssetDelegation contract
-# Read the minimum operator bond (native asset)
+# Read the minimum operator self-stake (native asset)
cast call "$RESTAKING_CONTRACT" "minOperatorStake()(uint256)" --rpc-url "$RPC_URL"
# Register (send at least the minOperatorStake as value)
cast send "$RESTAKING_CONTRACT" "registerOperator()" \
--rpc-url "$RPC_URL" \
--private-key "$PRIVATE_KEY" \
- --value ""
+ --value ""
```
If successful, the transaction emits `OperatorRegistered(operator, stake)`.
diff --git a/pages/restake/how_to_restake/how_to_restake_tangle/delegate.mdx b/pages/restake/how_to_restake/how_to_restake_tangle/delegate.mdx
index 4abd6a1..9a1fc38 100644
--- a/pages/restake/how_to_restake/how_to_restake_tangle/delegate.mdx
+++ b/pages/restake/how_to_restake/how_to_restake_tangle/delegate.mdx
@@ -3,10 +3,10 @@ import Callout from "/components/Callout";
## Delegate Using Tangle DApp
-You should have deposited your tokens to the multiasset delegation vault before you can delegate. See the [Deposit Using Tangle DApp page](./deposit-tangle.mdx) for more information. If you have already deposited **and** delegated your assets under the **Deposit** tab, you can skip this step.
+You should have deposited your tokens before you can delegate. See the [Deposit Using Tangle DApp page](./deposit.mdx) for more information. If you have already deposited **and** delegated your assets under the **Deposit** tab, you can skip this step.
-Delegators are similar to stakers in a consensus system like nominated proof of stake (NPoS), but they delegate their tokens to an operator, and participate in the rewards and risks similar to staking on a validator.
+Delegators delegate assets to an operator and participate in rewards (and risks, including slashing) based on that operator’s performance and the blueprint’s rules.
### Step 1: Access Tangle DApp & Connect Wallet
@@ -20,7 +20,7 @@ Delegators are similar to stakers in a consensus system like nominated proof of
3. Click on the **Asset** dropdown, and select an asset from the modal. If the asset that you're looking for is not listed, ensure that you have correctly performed the deposit operation for that asset. Please note that your asset balance might be lower than expected or not available if you have already deposited and delegated at once under the **Deposit** tab.
4. Click on the **Select Operator** dropdown, and choose an operator from the list. You can also search for specific operators by entering their address in the search bar.
5. Enter the amount of assets that you'd like to delegate to the operator.
-6. Review fees, unstake period, and bond less delay before proceeding.
+6. Review fees, unstake period, and any unstake delay before proceeding.
7. If all the information is correct, the **Delegate** button should be enabled. Click on it to initiate the transaction.

diff --git a/pages/restake/how_to_restake/how_to_restake_tangle/deposit.mdx b/pages/restake/how_to_restake/how_to_restake_tangle/deposit.mdx
index 1ce4b56..06ed336 100644
--- a/pages/restake/how_to_restake/how_to_restake_tangle/deposit.mdx
+++ b/pages/restake/how_to_restake/how_to_restake_tangle/deposit.mdx
@@ -16,7 +16,7 @@ Users can deposit LST assets to the multiasset delegation vault.
3. Select an asset from the modal.
4. Enter the desired amount to deposit.
5. (Optional) If you'd like to also delegate your deposit right away: Click on the **Select Operator** dropdown, and choose an operator from the list. If you'd like to delegate later, skip this step. [Learn how to delegate later](./delegate.mdx).
-6. Review any fees, APY, and other key information before proceeding.
+6. Review any fees, incentive estimates, and other key information before proceeding.
7. If all the information is correct, the **Deposit + Delegate** (or **Deposit** if just depositing) button should be enabled. Click on it to initiate the transaction.

diff --git a/pages/restake/incentives/_meta.ts b/pages/restake/incentives/_meta.ts
index 64998d1..13a3ee5 100644
--- a/pages/restake/incentives/_meta.ts
+++ b/pages/restake/incentives/_meta.ts
@@ -2,6 +2,7 @@ import { Meta } from "nextra";
const meta: Meta = {
how_rewards_work: "Overview",
+ claiming: "Claiming",
vaults: "Vaults",
configs: "Vault Configs",
};
diff --git a/pages/restake/incentives/claiming.mdx b/pages/restake/incentives/claiming.mdx
new file mode 100644
index 0000000..5f02505
--- /dev/null
+++ b/pages/restake/incentives/claiming.mdx
@@ -0,0 +1,107 @@
+---
+title: Claiming Cheatsheet
+description: One place to see where rewards accrue, how to visualize them, and how to claim efficiently.
+---
+
+# Claiming Cheatsheet
+
+This page answers three common questions:
+
+1. **Where do my rewards accrue?**
+2. **How do I visualize them by source?**
+3. **How do I claim with the fewest transactions?**
+
+## Quick Map (By Contract)
+
+- **Core protocol service fees (operators):** `Tangle` (`claimRewards`, `claimRewardsBatch`, `claimRewardsAll`).
+- **Restaker service fees + restaker inflation:** `ServiceFeeDistributor` (`claimAll`, `claimAllBatch`, `claimFor`).
+- **Staking incentives (TNT):** `RewardVaults` (`claimDelegatorRewards`, `claimDelegatorRewardsBatch`).
+- **InflationPool merit rewards:** `InflationPool` (`claimOperatorRewards`, `claimCustomerRewards`, `claimDeveloperRewards`).
+
+## Delegator (Restaker)
+
+**Where rewards accrue**
+- **Service fees + restaker inflation:** `ServiceFeeDistributor` (per payment token).
+- **TNT incentives:** `RewardVaults` (per staking asset).
+
+**How to visualize**
+- `ServiceFeeDistributor.pendingRewards(delegator, token)`
+- `ServiceFeeDistributor.delegatorOperators(delegator)` and `delegatorAssets(delegator, operator)`
+- `RewardVaults.pendingDelegatorRewards(asset, delegator, operator)`
+- `RewardVaults.pendingDelegatorRewardsAll(asset, delegator)`
+- `RewardVaults.getDelegatorPositions(asset, delegator)`
+
+**How to claim**
+- **Per token:** `ServiceFeeDistributor.claimAll(token)`
+- **Multiple tokens in one tx:** `ServiceFeeDistributor.claimAllBatch(tokens)`
+- **TNT incentives:** `RewardVaults.claimDelegatorRewardsBatch(asset, operators)`
+
+**Tx count expectation**
+- 1 tx per token in `ServiceFeeDistributor`, plus 1 tx per asset in `RewardVaults` (or use multicall).
+
+## Operator
+
+**Where rewards accrue**
+- **Service fee operator share:** `Tangle` pending rewards per payment token.
+- **TNT operator incentives:** `InflationPool` pending operator rewards.
+- **Optional TNT commission (from delegators):** `RewardVaults` pending commission per asset.
+
+**How to visualize**
+- `Tangle.rewardTokens(operator)` + `Tangle.pendingRewards(operator, token)`
+- `InflationPool.pendingOperatorRewards(operator)`
+- `RewardVaults.pendingOperatorCommission(asset, operator)`
+
+**How to claim**
+- **All tokens:** `Tangle.claimRewardsAll()`
+- **Specific tokens:** `Tangle.claimRewardsBatch(tokens)`
+- **Inflation incentives:** `InflationPool.claimOperatorRewards()`
+- **Vault commission:** `RewardVaults.claimOperatorCommission(asset)`
+
+**Tx count expectation**
+- 1 tx for all operator service-fee tokens + 1 tx for InflationPool + 1 tx per reward-vault asset.
+
+## Customer
+
+**Where rewards accrue**
+- **Optional TNT incentives:** `InflationPool` pending customer rewards (only if weights allocate customer incentives).
+
+**How to visualize**
+- `InflationPool.pendingCustomerRewards(customer)`
+
+**How to claim**
+- `InflationPool.claimCustomerRewards()` (single tx)
+
+## Developer
+
+**Where rewards accrue**
+- **Service fees:** paid directly to the developer address at payment time (no claim).
+- **Optional TNT incentives:** `InflationPool` pending developer rewards.
+
+**How to visualize**
+- `InflationPool.pendingDeveloperRewards(developer)`
+
+**How to claim**
+- `InflationPool.claimDeveloperRewards()` (single tx)
+
+## When To Use Multicall
+
+If you want a **single transaction** across multiple contracts (e.g., claim service fees + vault incentives + inflation rewards together), use a multicall.
+
+A typical call bundle for a restaker might include:
+
+- `ServiceFeeDistributor.claimAllBatch(tokens)`
+- `RewardVaults.claimDelegatorRewardsBatch(asset, operators)` (per asset)
+
+## Code References
+
+- `src/v2/core/Payments.sol` (operator service-fee claims)
+- `src/v2/rewards/ServiceFeeDistributor.sol` (restaker fee + restaker inflation claims)
+- `src/v2/rewards/RewardVaults.sol` (TNT vault incentives + operator commissions)
+- `src/v2/rewards/InflationPool.sol` (operator/customer/developer inflation rewards)
+
+## Tests Worth Reading
+
+- `test/v2/tangle/Payments.t.sol`
+- `test/v2/rewards/ServiceFeeDistributor.t.sol`
+- `test/v2/Rewards.t.sol`
+- `test/v2/InflationPool.t.sol`
diff --git a/pages/restake/incentives/configs.mdx b/pages/restake/incentives/configs.mdx
index a387bf8..b216c79 100644
--- a/pages/restake/incentives/configs.mdx
+++ b/pages/restake/incentives/configs.mdx
@@ -1,26 +1,46 @@
---
-title: Restaking Incentives
-description: Learn about the restaking system in the Tangle Network, which encourages operators to execute multi-party computation (MPC) service roles, and understand the reward mechanisms and benefits for operators and delegators.
+title: Reward Configs
+description: Key on-chain knobs for incentive programs and fee splits.
---
-# Restaking Rewards Configs
+# Reward Configs
-## Setting Incentive APY and Cap
+This page summarizes the main on-chain configuration points for restaking incentives. Exact addresses are deployment-dependent.
-The `set_incentive_apy_and_cap` function allows the network (democracy) to configure the APY and cap for a specific asset Vault, ensuring that stakers know the potential rewards and the upper limits of participation for rewards.
+## `RewardVaults` (Asset Incentives)
-- **Function:** `set_incentive_apy_and_cap`
-- **Description:** Sets the APY (Annual Percentage Yield) and cap for a specific asset Vault.
-- **Inputs:**
- - `Vault_id`: The ID of the Vault for which the APY and cap are being set.
- - `apy`: The APY (percent) to be applied to the Vault.
- - `cap`: The maximum amount of staked assets eligible for rewards in this Vault.
+Governance configures per-asset incentive vaults:
-Once set, the APY and cap are used to calculate the total rewards distributed among operators and delegators based on their staked amounts.
+- `createVault(asset, depositCap)`
+- `updateVaultConfig(asset, depositCap)`
+- `deactivateVault(asset)`
+- `setOperatorCommission(newBps)`
+- `setLockDurations(oneMonth, twoMonths, threeMonths, sixMonths)`
-## Whitelisting Blueprints for Rewards
+## `InflationPool` (Funding and Distribution)
-The network allows developers to create blueprints for restaking services. These blueprints can be whitelisted for rewards, meaning services built using these blueprints can attract incentivized staking.
+`InflationPool` is pre-funded with TNT and distributes it in epochs:
-- **Function:** `whitelist_blueprint_for_rewards`
-- **Description:** Whitelists a blueprint, allowing services using this blueprint to be eligible for reward distribution.
+- `fund(amount)` (requires funder role)
+- `distributeEpoch()` (anyone can call when ready)
+- `distributeEpochWithServices(serviceIds)` (DISTRIBUTOR_ROLE; required for restaker inflation)
+- `setWeights(stakingBps, operatorsBps, customersBps, developersBps, restakersBps)`
+- `setEpochLength(seconds)`
+- `setRestakerInflationConfig(tangle, serviceFeeDistributor)`
+
+The staking portion of each epoch is transferred to `RewardVaults`.
+
+## Service Fee Splits
+
+Service payments are split between developer / protocol / operators / restakers:
+
+- `Tangle.setPaymentSplit({ developerBps, protocolBps, operatorBps, restakerBps })`
+
+If restaker fee distribution is enabled, the protocol routes restaker shares to `ServiceFeeDistributor`.
+
+## Wiring Checklist (One-Time Deployment Setup)
+
+- `Tangle.setServiceFeeDistributor(distributor)`
+- `MultiAssetDelegation.setServiceFeeDistributor(distributor)`
+- `ServiceFeeDistributor.setInflationPool(inflationPool)`
+- `InflationPool.setRestakerInflationConfig(tangle, distributor)`
diff --git a/pages/restake/incentives/how_rewards_work.mdx b/pages/restake/incentives/how_rewards_work.mdx
index e892213..0f219d2 100644
--- a/pages/restake/incentives/how_rewards_work.mdx
+++ b/pages/restake/incentives/how_rewards_work.mdx
@@ -1,39 +1,90 @@
---
-title: Restaking Incentives
-description: Learn about the restaking system in the Tangle Network, which encourages operators to execute multi-party computation (MPC) service roles, and understand the reward mechanisms and benefits for operators and delegators.
+title: How Rewards Work
+description: Learn how restaking incentives work on Tangle and how operators and restakers earn.
---
-# Restaking Rewards Overview
+# How Rewards Work
-Restaking rewards in the Tangle Network are designed to incentivize both operators and delegators through a structured system of rewards, which are distributed based on staked assets and specific reward configurations. Below is a detailed explanation of how the restaking rewards mechanism works, including setting APY and caps, distributing rewards, and managing assets within reward Vaults.
+Restaking incentives on Tangle come from two sources:
-## Key Concepts
+1. **Service fee revenue** paid by customers (in the service’s payment token).
+2. **TNT incentives** funded by governance (pre-funded, no minting).
-1. **APY (Annual Percentage Yield):** A percentage that determines the rewards distributed to stakers based on their contribution to the Vault.
-2. **Cap:** The maximum amount of staked assets that can earn rewards within a given Vault.
-3. **Reward Vaults:** Asset Vaults to which restaked tokens are assigned for reward distribution.
-4. **Delegators:** Users who delegate their tokens to operators, sharing in the rewards generated by the operators' activities.
-5. **Operators:** Validators who restake their tokens and provide services, earning rewards through their participation in the restaking protocol.
-6. **Lock Duration Multipliers:** Enhanced rewards for longer lock periods (1.1x to 1.6x multipliers).
-7. **Service-Specific Rewards:** Rewards tied to specific service blueprints and instances.
+## ELI5
-## Whitelisting Blueprints for Rewards
+If you delegate to an operator that runs useful services, you earn:
-The network allows developers to create blueprints for restaking services. These blueprints can be whitelisted for rewards, meaning services built using these blueprints can attract incentivized staking.
+- **A share of the fees** those services pay (in the same token the customer used).
+- **Optional TNT incentives** when the protocol has funded an incentives budget — *“I also earn TNT from RewardVaults plus optional restaker inflation.”*
-- **Function:** `whitelist_blueprint_for_rewards`
-- **Description:** Whitelists a blueprint, allowing services using this blueprint to be eligible for reward distribution.
+You choose your exposure scope (All vs Fixed), and your share is calculated from your delegated amount and lock multiplier.
-## Distributing Rewards
+## How The Money Moves On-Chain
-Rewards are distributed to delegators based on the total amount staked in a reward Vault and the Vault's APY and cap configuration. The `distribute_rewards` function handles the distribution process, ensuring that all delegators receive their fair share of rewards based on the assets they have staked.
+1. **A service is paid** (one-time or subscription).
+2. `Payments.sol` splits the payment into developer, protocol, operator, and restaker shares.
+3. Operator shares accrue as pending rewards in the core protocol.
+4. Restaker shares are forwarded **per operator** to `ServiceFeeDistributor` (or to treasury if no distributor is configured).
+5. `ServiceFeeDistributor` allocates those fees to delegators by score:
+ - Score = principal × lock multiplier (per asset, per operator).
+ - All vs Fixed blueprint selection gates which pools you participate in.
+ - Optional USD weighting and security commitments can scale the effective exposure.
+6. **Optional TNT incentives** are distributed from `InflationPool` in epochs:
+ - The staking portion funds `RewardVaults` (TNT incentives by asset deposit and lock).
+ - If `restakersBps > 0`, a restaker TNT budget is distributed by **service exposure** and routed through `ServiceFeeDistributor`.
-### Reward Calculation
+## Why This Design
-- **Total Reward Calculation:** The total reward is calculated by multiplying the APY by the total staked amount, capped at the Vault's limit.
-- **Individual Reward Calculation:** Each delegator's reward is calculated as a percentage of the total reward based on the delegator’s stake in relation to the cap.
+- **Single fee distributor**: All restaker service-fee payouts use `ServiceFeeDistributor`, so the math is consistent across tokens.
+- **Explicit budgets**: TNT incentives only exist if governance funds `InflationPool`. There is no hidden minting.
+- **Exposure fairness without per-user loops**: Exposure is computed at distribution time (USD-weighted where possible), avoiding per-delegator loops in inflation logic.
-### Example:
+## How To Get Rewarded (Practical Steps)
-- If a Vault has a cap of 1000 tokens and an APY of 10%, the total reward distributed will be 100 tokens (10% of 1000).
-- If a delegator staked 100 tokens, they will receive 10 tokens as a reward (10% of the total reward).
+**As a restaker**
+- Deposit and delegate in `MultiAssetDelegation`.
+- Choose `All` or `Fixed` blueprint selection.
+- Optional: add a lock multiplier for a higher reward score.
+- Claim:
+ - TNT incentives from `RewardVaults`.
+ - Service-fee + restaker-inflation rewards from `ServiceFeeDistributor`.
+
+**As an operator**
+- Self-stake `minOperatorStake` to register.
+- Join services and set exposure and commitments responsibly.
+- Claim operator service fees from the core protocol.
+- Claim TNT commission from `RewardVaults` if you opt into commission.
+
+**As a blueprint developer**
+- Publish a blueprint and manage services.
+- Earn the developer split from each service payment.
+
+## Examples
+
+**Example 1: Service fees (USDC)**
+Alice delegates 100 wstETH to Operator O, All mode, no lock.
+Bob delegates 200 wstETH to Operator O, All mode, 3-month lock (1.3x).
+A service pays 10 USDC and the restaker share is 2 USDC.
+Alice score = 100, Bob score = 260, total = 360.
+Alice earns ~0.56 USDC, Bob earns ~1.44 USDC.
+
+**Example 2: Inflation restaker budget (TNT)**
+An epoch has 1,000 TNT with restakersBps = 20%.
+The keeper calls `distributeEpochWithServices` with active services.
+InflationPool allocates 200 TNT by USD exposure per service/operator and
+routes those TNT to `ServiceFeeDistributor`, where delegators claim as usual.
+
+## Where To Look In Code And Tests
+
+- Payment split and restaker routing: `src/v2/core/Payments.sol`
+- Restaker fee distribution and claims: `src/v2/rewards/ServiceFeeDistributor.sol`
+- Inflation budgets and restaker exposure allocation: `src/v2/rewards/InflationPool.sol`
+- TNT staking incentives: `src/v2/rewards/RewardVaults.sol`
+- Tests:
+ - `test/v2/tangle/Payments.t.sol`
+ - `test/v2/rewards/ServiceFeeDistributor.t.sol`
+ - `test/v2/rewards/ServiceFeeDistributorStreaming.t.sol`
+ - `test/v2/Rewards.t.sol`
+ - `test/v2/InflationPool.t.sol`
+
+See [Claiming Cheatsheet](/restake/incentives/claiming) for one-tx claim options and multicall tips.
diff --git a/pages/restake/incentives/vaults.mdx b/pages/restake/incentives/vaults.mdx
index a58aaaa..1227082 100644
--- a/pages/restake/incentives/vaults.mdx
+++ b/pages/restake/incentives/vaults.mdx
@@ -1,49 +1,41 @@
---
-title: Restaking Incentives
-description: Learn about the restaking system in the Tangle Network, which encourages operators to execute multi-party computation (MPC) service roles, and understand the reward mechanisms and benefits for operators and delegators.
+title: Vaults (Terminology)
+description: Clarify the different “vault” concepts used in restaking and incentives.
---
-# What are Vaults?
+# Vaults (Terminology)
-Vaults are used to store and whitelist restaked tokens in the Tangle Network. They are used to distribute rewards to operators and delegators.
+In Tangle documentation, “vault” can refer to different on-chain components. This page clarifies the terminology.
-## Whitelisting Blueprints for Rewards
+## `RewardVaults` (TNT Incentives Per Asset)
-The network allows developers to create blueprints for restaking services. These blueprints can be whitelisted for rewards, meaning services built using these blueprints can attract incentivized staking.
+- `RewardVaults` is an on-chain system that pays **TNT incentives** for delegated assets.
+- It maintains **one vault per asset** (native, TNT, etc.).
+- Vaults are configured by governance (deposit cap + active status).
+- Rewards are funded from `InflationPool` (pre-funded, no minting).
+- Rewards are split across delegators by score (principal × lock multiplier), and operators can take a commission.
+ - Deposit caps are hard limits: deposits above the cap are rejected until capacity is freed.
-- **Function:** `whitelist_blueprint_for_rewards`
-- **Description:** Whitelists a blueprint, allowing services using this blueprint to be eligible for reward distribution.
+Why this exists:
-### Reward Calculation
+- Keeps incentive budgets explicit (only distributed if funded).
+- Keeps per-asset incentives simple and measurable (deposit cap is the only throttle).
+- Lets integrators estimate reward capacity without guessing “hidden” emission math.
-- **Total Reward Calculation:** The total reward is calculated by multiplying the APY by the total staked amount, capped at the Vault's limit.
-- **Individual Reward Calculation:** Each delegator's reward is calculated as a percentage of the total reward based on the delegator’s stake in relation to the cap.
+## `LiquidDelegationVault` (Liquid Restaking Shares)
-### Example:
+Liquid restaking uses a different vault concept:
-- If a Vault has a cap of 1000 tokens and an APY of 10%, the total reward distributed will be 100 tokens (10% of 1000).
-- If a delegator staked 100 tokens, they will receive 10 tokens as a reward (10% of the total reward).
+- `LiquidDelegationVault` is an ERC-7540-style wrapper around a delegated position.
+- It mints transferable shares representing a vault’s delegation to a specific `(operator, asset, blueprint selection)` tuple.
+- Redemptions are asynchronous and follow the underlying unstake delay.
-## Managing Assets in Vaults
+See [Liquid Delegation Vaults](/restake/lrt-concepts).
-Assets can be added or removed from reward Vaults using the following functions:
+## `ServiceFeeDistributor` (Service Fee Revenue)
-### Adding an Asset to a Vault
+Service-fee revenue share to restakers is handled by `ServiceFeeDistributor`:
-- **Function:** `add_asset_to_Vault`
-- **Description:** Adds a new asset to an existing reward Vault.
-- **Inputs:**
- - `Vault_id`: The ID of the Vault to which the asset is being added.
- - `asset_id`: The ID of the asset being added to the Vault.
-
-This function ensures that the asset is not already associated with a Vault before adding it.
-
-### Removing an Asset from a Vault
-
-- **Function:** `remove_asset_from_Vault`
-- **Description:** Removes an asset from a reward Vault.
-- **Inputs:**
- - `Vault_id`: The ID of the Vault from which the asset is being removed.
- - `asset_id`: The ID of the asset being removed.
-
-This function ensures that the asset is part of the specified Vault before removing it.
+- It receives the restaker portion of service payments, per operator.
+- It accounts for `All` vs `Fixed` blueprint selection and optional per-asset security commitments.
+- Delegators claim rewards from the distributor (or through the protocol UI).
From 0dfe285504623419f81ec7386bece4cabb613321 Mon Sep 17 00:00:00 2001
From: Drew Stone
Date: Mon, 19 Jan 2026 16:50:01 -0700
Subject: [PATCH 03/14] Revamp docs IA, staking, and incentives
---
CONTENT_AUDIT.md | 68 +++
PROJECT_CHECKLIST.md | 37 ++
PROJECT_SPEC.md | 62 +++
components/CommonActions.tsx | 127 -----
components/EvmToSubstrateConverter.tsx | 122 -----
components/LandingPage.tsx | 150 +++---
components/MainnetConfig.tsx | 120 -----
components/Navigation.tsx | 6 +-
components/NetworkConfig.module.css | 154 -------
components/NetworkResources.tsx | 132 ++----
components/OperatorIntro.tsx | 22 +-
components/RepoArea.tsx | 44 +-
components/Social.tsx | 4 +-
components/WalletTable.tsx | 37 +-
globals.css | 16 +
pages/_meta.ts | 52 ++-
pages/ai/_meta.ts | 43 ++
pages/ai/index.mdx | 49 ++
pages/developers/_meta.ts | 36 +-
.../api/reference/IBlueprintHook.mdx | 2 +-
.../reference/IBlueprintServiceManager.mdx | 7 +-
.../api/reference/IMultiAssetDelegation.mdx | 2 +-
pages/developers/api/reference/IRestaking.mdx | 13 +-
.../api/reference/IRestakingAdmin.mdx | 10 +-
.../api/reference/IRewardsManager.mdx | 2 -
.../api/reference/IServiceFeeDistributor.mdx | 4 +-
.../developers/api/reference/ITangleAdmin.mdx | 10 +-
.../api/reference/ITangleServices.mdx | 2 +-
.../reference/generated/IBlueprintHook.mdx | 2 +-
.../generated/IBlueprintServiceManager.mdx | 7 +-
.../generated/IMultiAssetDelegation.mdx | 2 +-
.../api/reference/generated/IRestaking.mdx | 13 +-
.../reference/generated/IRestakingAdmin.mdx | 10 +-
.../reference/generated/IRewardsManager.mdx | 2 -
.../generated/IServiceFeeDistributor.mdx | 4 +-
.../api/reference/generated/ITangleAdmin.mdx | 10 +-
.../reference/generated/ITangleServices.mdx | 2 +-
pages/developers/blueprint-contexts/_meta.ts | 2 -
.../blueprint-contexts/eigenlayer-context.mdx | 86 ----
.../evm-provider-context.mdx | 11 +-
.../blueprint-contexts/introduction.mdx | 4 +-
.../blueprint-contexts/keystore-context.mdx | 11 +-
.../blueprint-contexts/services-context.mdx | 49 --
.../tangle-client-context.mdx | 41 +-
pages/developers/blueprint-qos.mdx | 13 +-
.../blueprint-runner/background-services.mdx | 9 +-
.../developers/blueprint-runner/building.mdx | 70 +--
.../developers/blueprint-runner/consumers.mdx | 42 +-
.../blueprint-runner/introduction.mdx | 7 +-
pages/developers/blueprint-runner/jobs.mdx | 21 +-
.../developers/blueprint-runner/producers.mdx | 29 +-
pages/developers/blueprint-runner/routers.mdx | 18 +-
pages/developers/blueprint-sdk.mdx | 23 +-
pages/developers/blueprints/introduction.mdx | 71 +--
pages/developers/blueprints/manager.mdx | 22 +-
.../developers/blueprints/pricing-engine.mdx | 210 ++-------
pages/developers/blueprints/use-cases.mdx | 11 +-
pages/developers/cli/_meta.ts | 1 -
pages/developers/cli/debugging.mdx | 11 +-
pages/developers/cli/eigenlayer.mdx | 118 -----
pages/developers/cli/installation.mdx | 3 +
pages/developers/cli/keys.mdx | 14 +-
pages/developers/cli/quickstart.mdx | 8 +-
pages/developers/cli/tangle.mdx | 13 +-
pages/developers/contribute.mdx | 6 +-
pages/developers/deployment/introduction.mdx | 2 +-
pages/developers/deployment/sources/_meta.ts | 1 -
pages/developers/deployment/sources/tee.mdx | 31 --
pages/developers/eigenlayer-avs/_meta.ts | 11 -
.../developers/eigenlayer-avs/bls-example.mdx | 70 ---
.../eigenlayer-avs/bls-template.mdx | 177 -------
.../eigenlayer-avs/ecdsa-template.mdx | 172 -------
.../incredible-squaring-avs.mdx | 153 ------
pages/developers/eigenlayer-avs/overview.mdx | 25 -
pages/developers/p2p-networking/_meta.ts | 2 +-
.../p2p-networking/extensions/round-based.mdx | 6 +
pages/developers/p2p-networking/overview.mdx | 9 +-
pages/developers/p2p-networking/testing.mdx | 191 ++------
pages/developers/p2p-networking/usage.mdx | 238 ++++------
pages/developers/precompiles/_meta.ts | 10 -
.../features/governance/preimage.mdx | 122 -----
.../features/multi-asset-delegation.mdx | 145 ------
.../precompiles/features/staking.mdx | 91 ----
pages/developers/precompiles/overview.mdx | 90 ----
.../precompiles/utility/non-specific.mdx | 168 -------
.../precompiles/utility/registry.mdx | 43 --
pages/developers/precompiles/ux/batch.mdx | 224 ---------
.../developers/precompiles/ux/call-permit.mdx | 238 ----------
pages/developers/protocol-architecture.mdx | 8 +-
.../system-architecture/overview.mdx | 28 +-
.../system-architecture/rewards.mdx | 39 +-
pages/developers/tangle-avs.mdx | 125 -----
pages/developers/technicals/_meta.ts | 11 -
pages/developers/technicals/addresses.mdx | 29 --
.../technicals/deploy-using-hardhat.mdx | 123 -----
.../technicals/evm-substrate-transfers.mdx | 129 ------
.../technicals/json-rpc-endpoints.mdx | 45 --
.../technicals/transaction-fees.mdx | 53 ---
pages/developers/testing-with-tangle.mdx | 98 ++--
pages/developers/troubleshooting.mdx | 14 +-
pages/index.mdx | 4 +-
pages/infrastructure/_meta.ts | 10 +
pages/infrastructure/architecture.mdx | 21 +
pages/infrastructure/introduction.mdx | 26 ++
pages/infrastructure/orchestration.mdx | 21 +
pages/infrastructure/sandboxing.mdx | 12 +
pages/network/_meta.ts | 42 +-
pages/network/claim-airdrop.mdx | 73 ++-
pages/network/differences.mdx | 51 --
pages/network/governance/_meta.ts | 23 -
pages/network/governance/democracy-voting.mdx | 39 --
.../governance/governance-parameters.mdx | 20 -
.../governance/governance-procedures.mdx | 45 --
pages/network/governance/overview.mdx | 70 ---
.../network/governance/proposal-creation.mdx | 33 --
pages/network/incentives-developers.mdx | 20 +-
pages/network/incentives-operators.mdx | 45 +-
pages/network/incentives-overview.mdx | 33 +-
...s-restakers.mdx => incentives-stakers.mdx} | 23 +-
pages/network/launch.mdx | 64 +--
pages/network/metrics-and-scoring.mdx | 15 +-
pages/network/network-parameters.mdx | 88 +++-
pages/network/overview.mdx | 43 +-
pages/network/points-mechanics.mdx | 75 +--
pages/network/slashing.mdx | 39 --
pages/network/tokenomics/_meta.ts | 2 +-
pages/network/tokenomics/allocation.mdx | 149 ++----
pages/network/tokenomics/inflation.mdx | 62 +--
pages/network/tokenomics/usage.mdx | 15 +-
pages/operators/_meta.ts | 12 +-
pages/operators/benchmarking.mdx | 50 +-
pages/operators/introduction.mdx | 6 +
pages/operators/manager/introduction.mdx | 3 +
pages/operators/manager/requirements.mdx | 12 +-
pages/operators/manager/security.mdx | 3 +
pages/operators/manager/setup.mdx | 5 +-
pages/operators/manager/sizing.mdx | 3 +
pages/operators/monitoring/_meta.ts | 11 -
pages/operators/monitoring/alert-manager.mdx | 342 --------------
pages/operators/monitoring/grafana.mdx | 193 --------
pages/operators/monitoring/loki.mdx | 334 --------------
pages/operators/monitoring/prometheus.mdx | 435 ------------------
pages/operators/monitoring/quickstart.mdx | 60 ---
pages/operators/node-basics/_meta.ts | 14 -
pages/operators/node-basics/docker-node.mdx | 274 -----------
pages/operators/node-basics/faq.mdx | 101 ----
pages/operators/node-basics/flags.mdx | 94 ----
pages/operators/node-basics/hardware.mdx | 37 --
pages/operators/node-basics/node-software.mdx | 63 ---
pages/operators/node-basics/quickstart.mdx | 63 ---
pages/operators/node-basics/systemd.mdx | 413 -----------------
.../operators/node-basics/troubleshooting.mdx | 83 ----
pages/operators/onboarding.mdx | 220 ---------
.../operators/operator/join_operator/join.mdx | 73 ++-
.../operator/join_operator/leave.mdx | 31 +-
.../operator/join_operator/stake.mdx | 48 +-
pages/operators/pricing/_meta.ts | 2 +-
pages/operators/pricing/overview.mdx | 15 +-
pages/operators/tangle-avs/_meta.ts | 8 -
pages/operators/tangle-avs/cross-chain.mdx | 47 --
pages/operators/tangle-avs/quickstart.mdx | 47 --
pages/operators/validator/_meta.ts | 11 -
pages/operators/validator/introduction.mdx | 218 ---------
pages/operators/validator/npos.mdx | 50 --
pages/operators/validator/proxyaccount.mdx | 74 ---
pages/operators/validator/upgrade-node.mdx | 54 ---
.../operators/validator/validator-rewards.mdx | 125 -----
pages/resources/_meta.ts | 30 --
pages/resources/account-manage.mdx | 99 ----
pages/resources/biconomy.mdx | 0
pages/resources/bridge.mdx | 53 ---
pages/resources/chainport.mdx | 0
pages/resources/glacis.mdx | 12 -
pages/resources/hyperlane.mdx | 61 ---
pages/resources/resources.mdx | 6 -
pages/resources/router.mdx | 14 -
pages/resources/sablier.mdx | 21 -
pages/resources/safe.mdx | 14 -
pages/resources/set-identity.mdx | 65 ---
pages/resources/useful-contracts.mdx | 131 ------
pages/restake/_meta.ts | 41 --
pages/restake/create_a_pool/_meta.ts | 10 -
.../create_a_pool/benefits-and-risks.mdx | 28 --
.../create_a_pool/lst-pool-create-tangle.mdx | 29 --
.../restake/create_a_pool/lst-pool-create.mdx | 60 ---
pages/restake/create_a_pool/pool-roles.mdx | 27 --
pages/restake/credits/_meta.ts | 9 -
pages/restake/credits/claiming.mdx | 82 ----
pages/restake/credits/index.mdx | 39 --
pages/restake/credits/precompile.mdx | 99 ----
pages/restake/how_to_restake/_meta.ts | 8 -
.../how_to_restake_polkadotjs/delegate.mdx | 39 --
.../how_to_restake_polkadotjs/deposit.mdx | 33 --
.../how_to_restake_polkadotjs/unstake.mdx | 89 ----
.../how_to_restake_polkadotjs/withdraw.mdx | 53 ---
.../how_to_restake_tangle/_meta.ts | 10 -
pages/restake/introduction.mdx | 53 ---
pages/restake/join_a_pool/_meta.ts | 8 -
pages/restake/join_a_pool/polkadotjs.mdx | 52 ---
pages/restake/join_a_pool/tangle.mdx | 32 --
pages/restake/lrt-concepts.mdx | 53 ---
pages/restake/lrt-vs-lst.mdx | 8 -
pages/restake/lrt_developers/_meta.ts | 8 -
pages/restake/lrt_developers/intro.mdx | 11 -
pages/restake/lrt_developers/lrt-vault.mdx | 230 ---------
pages/restake/lst-assets.mdx | 21 -
pages/restake/lst-concepts.mdx | 57 ---
pages/restake/lst-rewards.mdx | 11 -
pages/restake/lst-working.mdx | 51 --
pages/restake/lst_developers/_meta.ts | 8 -
pages/restake/lst_developers/intro.mdx | 25 -
.../restake/lst_developers/lst_precompile.mdx | 190 --------
pages/restake/nominator.mdx | 66 ---
pages/restake/restake-concepts.mdx | 76 ---
pages/restake/restake-introduction.mdx | 35 --
pages/restake/restake_developers/_meta.ts | 9 -
.../restake_developers/integration.mdx | 29 --
.../restake_developers/restake_precompile.mdx | 121 -----
.../services_precompile.mdx | 1 -
pages/restake/staking-intro.mdx | 148 ------
pages/staking/_meta.ts | 24 +
pages/staking/how-staking-works.mdx | 30 ++
.../how_to_stake}/_meta.ts | 2 +-
.../how_to_stake_tangle}/_meta.ts | 0
.../how_to_stake_tangle}/delegate.mdx | 8 +-
.../how_to_stake_tangle}/deposit.mdx | 12 +-
.../how_to_stake_tangle}/unstake.mdx | 10 +-
.../how_to_stake_tangle}/withdraw.mdx | 10 +-
.../{restake => staking}/incentives/_meta.ts | 2 +-
.../incentives/claiming.mdx | 10 +-
.../incentives/configs.mdx | 16 +-
.../incentives/how_rewards_work.mdx | 32 +-
.../incentives/vaults.mdx | 16 +-
pages/staking/introduction.mdx | 28 ++
pages/staking/liquid-staking/_meta.ts | 11 +
.../liquid-staking/factory-and-discovery.mdx | 27 ++
pages/staking/liquid-staking/introduction.mdx | 56 +++
.../liquid-staking/risks-and-limitations.mdx | 31 ++
pages/staking/liquid-staking/staking-flow.mdx | 61 +++
.../liquid-staking/vaults-and-shares.mdx | 33 ++
pages/staking/staking-concepts.mdx | 37 ++
pages/vibe/_meta.ts | 16 +
pages/vibe/integrations.mdx | 20 +
pages/vibe/introduction.mdx | 35 ++
pages/vibe/profile-schema.mdx | 106 +++++
pages/vibe/profiles.mdx | 68 +++
pages/vibe/simulations.mdx | 19 +
pages/vibe/workflows.mdx | 21 +
pages/vision/_meta.ts | 10 +
pages/vision/architecture.mdx | 47 ++
pages/vision/core-concepts.mdx | 17 +
pages/vision/introduction.mdx | 50 ++
pages/vision/use-cases.mdx | 39 ++
.../architecture/autonomous-work-loop.svg | 27 ++
.../images/architecture/incentives-flow.svg | 79 ++++
.../architecture/liquid-delegation-flow.svg | 46 ++
public/images/claim-assets.png | Bin 248963 -> 0 bytes
public/images/claim.png | Bin 213239 -> 0 bytes
public/images/extrinsic.png | Bin 189666 -> 0 bytes
.../check-min-create-bond.png | Bin 87230 -> 0 bytes
.../create-pool-polkadotjs/commission.png | Bin 83667 -> 0 bytes
.../create-pool-polkadotjs/create.png | Bin 129033 -> 0 bytes
.../create-pool-polkadotjs/events.png | Bin 46602 -> 0 bytes
.../create-pool-polkadotjs/extrinsic.png | Bin 54592 -> 0 bytes
.../create-pool-polkadotjs/inblock.png | Bin 28773 -> 0 bytes
.../create-pool-polkadotjs/sign.png | Bin 74731 -> 0 bytes
.../create-pool-tangle/create-pool-btn.png | Bin 232620 -> 0 bytes
.../create-pool-tangle/create-pool-form.png | Bin 67957 -> 0 bytes
.../input-amount-select-tab.png | Bin 271479 -> 0 bytes
.../join-pool-polkadotjs/bondedpools.png | Bin 81164 -> 0 bytes
.../join-pool-polkadotjs/events.png | Bin 43916 -> 0 bytes
.../join-pool-polkadotjs/join.png | Bin 31735 -> 0 bytes
.../join-pool-polkadotjs/lst-join.png | Bin 63060 -> 0 bytes
.../join-pool-polkadotjs/sign.png | Bin 93192 -> 0 bytes
.../join-pool-polkadotjs/success.png | Bin 19862 -> 0 bytes
public/images/liquid-staking/lst-intro.png | Bin 260763 -> 0 bytes
public/images/liquid-staking/lst-workflow.png | Bin 497408 -> 0 bytes
public/images/liquid-staking/my-pools.png | Bin 152746 -> 0 bytes
.../liquid-staking/select-ls-network.png | Bin 322421 -> 0 bytes
.../select-pool-and-click-stake.png | Bin 300021 -> 0 bytes
public/images/restake-workflow.png | Bin 2187834 -> 0 bytes
.../delegate/canceldelegatorunstake.png | Bin 66423 -> 0 bytes
public/images/restake/delegate/delegate.png | Bin 62408 -> 0 bytes
.../restake/delegate/delegateinblock.png | Bin 18073 -> 0 bytes
.../images/restake/delegate/delegatesign.png | Bin 91472 -> 0 bytes
.../delegate/executedelegatorUnstake.png | Bin 39466 -> 0 bytes
.../restake/delegate/scheduleunstake.png | Bin 71490 -> 0 bytes
public/images/restake/deposit/deposit.png | Bin 47985 -> 0 bytes
.../images/restake/deposit/depositinblock.png | Bin 16927 -> 0 bytes
public/images/restake/deposit/depositsign.png | Bin 63595 -> 0 bytes
.../executewithdraw.png | Bin 39211 -> 0 bytes
.../schedulewithdraw.png | Bin 50789 -> 0 bytes
.../bridge/confirmation.png | Bin
.../{restake => staking}/bridge/form.png | Bin
.../bridge/metamask-tx-1.png | Bin
.../bridge/metamask-tx-2.png | Bin
.../bridge/select-networks.png | Bin
.../bridge/tx-status-toast.png | Bin
.../delegate/dapp-steps.png | Bin
.../delegate/delegate-tx-confirmation.png | Bin
.../deposit/dapp-steps.png | Bin
.../deposit/deposit-tx-confirmation.png | Bin
.../unstake/cancel-unstake.png | Bin
.../{restake => staking}/unstake/steps.png | Bin
.../unstake/unstake-requests-table.png | Bin
.../unstake/unstake-tx-confirmation.png | Bin
.../withdraw/cancel-withdraw.png | Bin
.../{restake => staking}/withdraw/steps.png | Bin
.../withdraw/withdraw-tx-confirmation.png | Bin
theme.config.tsx | 7 +-
310 files changed, 2638 insertions(+), 10917 deletions(-)
create mode 100644 CONTENT_AUDIT.md
create mode 100644 PROJECT_CHECKLIST.md
create mode 100644 PROJECT_SPEC.md
delete mode 100644 components/CommonActions.tsx
delete mode 100644 components/EvmToSubstrateConverter.tsx
delete mode 100644 components/MainnetConfig.tsx
delete mode 100644 components/NetworkConfig.module.css
create mode 100644 pages/ai/_meta.ts
create mode 100644 pages/ai/index.mdx
delete mode 100644 pages/developers/blueprint-contexts/eigenlayer-context.mdx
delete mode 100644 pages/developers/blueprint-contexts/services-context.mdx
delete mode 100644 pages/developers/cli/eigenlayer.mdx
delete mode 100644 pages/developers/deployment/sources/tee.mdx
delete mode 100644 pages/developers/eigenlayer-avs/_meta.ts
delete mode 100644 pages/developers/eigenlayer-avs/bls-example.mdx
delete mode 100644 pages/developers/eigenlayer-avs/bls-template.mdx
delete mode 100644 pages/developers/eigenlayer-avs/ecdsa-template.mdx
delete mode 100644 pages/developers/eigenlayer-avs/incredible-squaring-avs.mdx
delete mode 100644 pages/developers/eigenlayer-avs/overview.mdx
delete mode 100644 pages/developers/precompiles/_meta.ts
delete mode 100644 pages/developers/precompiles/features/governance/preimage.mdx
delete mode 100644 pages/developers/precompiles/features/multi-asset-delegation.mdx
delete mode 100644 pages/developers/precompiles/features/staking.mdx
delete mode 100644 pages/developers/precompiles/overview.mdx
delete mode 100644 pages/developers/precompiles/utility/non-specific.mdx
delete mode 100644 pages/developers/precompiles/utility/registry.mdx
delete mode 100644 pages/developers/precompiles/ux/batch.mdx
delete mode 100644 pages/developers/precompiles/ux/call-permit.mdx
delete mode 100644 pages/developers/tangle-avs.mdx
delete mode 100644 pages/developers/technicals/_meta.ts
delete mode 100644 pages/developers/technicals/addresses.mdx
delete mode 100644 pages/developers/technicals/deploy-using-hardhat.mdx
delete mode 100644 pages/developers/technicals/evm-substrate-transfers.mdx
delete mode 100644 pages/developers/technicals/json-rpc-endpoints.mdx
delete mode 100644 pages/developers/technicals/transaction-fees.mdx
create mode 100644 pages/infrastructure/_meta.ts
create mode 100644 pages/infrastructure/architecture.mdx
create mode 100644 pages/infrastructure/introduction.mdx
create mode 100644 pages/infrastructure/orchestration.mdx
create mode 100644 pages/infrastructure/sandboxing.mdx
delete mode 100644 pages/network/differences.mdx
delete mode 100644 pages/network/governance/_meta.ts
delete mode 100644 pages/network/governance/democracy-voting.mdx
delete mode 100644 pages/network/governance/governance-parameters.mdx
delete mode 100644 pages/network/governance/governance-procedures.mdx
delete mode 100644 pages/network/governance/overview.mdx
delete mode 100644 pages/network/governance/proposal-creation.mdx
rename pages/network/{incentives-restakers.mdx => incentives-stakers.mdx} (66%)
delete mode 100644 pages/network/slashing.mdx
delete mode 100644 pages/operators/monitoring/_meta.ts
delete mode 100644 pages/operators/monitoring/alert-manager.mdx
delete mode 100644 pages/operators/monitoring/grafana.mdx
delete mode 100644 pages/operators/monitoring/loki.mdx
delete mode 100644 pages/operators/monitoring/prometheus.mdx
delete mode 100644 pages/operators/monitoring/quickstart.mdx
delete mode 100644 pages/operators/node-basics/_meta.ts
delete mode 100644 pages/operators/node-basics/docker-node.mdx
delete mode 100644 pages/operators/node-basics/faq.mdx
delete mode 100644 pages/operators/node-basics/flags.mdx
delete mode 100644 pages/operators/node-basics/hardware.mdx
delete mode 100644 pages/operators/node-basics/node-software.mdx
delete mode 100644 pages/operators/node-basics/quickstart.mdx
delete mode 100644 pages/operators/node-basics/systemd.mdx
delete mode 100644 pages/operators/node-basics/troubleshooting.mdx
delete mode 100644 pages/operators/onboarding.mdx
delete mode 100644 pages/operators/tangle-avs/_meta.ts
delete mode 100644 pages/operators/tangle-avs/cross-chain.mdx
delete mode 100644 pages/operators/tangle-avs/quickstart.mdx
delete mode 100644 pages/operators/validator/_meta.ts
delete mode 100644 pages/operators/validator/introduction.mdx
delete mode 100644 pages/operators/validator/npos.mdx
delete mode 100644 pages/operators/validator/proxyaccount.mdx
delete mode 100644 pages/operators/validator/upgrade-node.mdx
delete mode 100644 pages/operators/validator/validator-rewards.mdx
delete mode 100644 pages/resources/_meta.ts
delete mode 100644 pages/resources/account-manage.mdx
delete mode 100644 pages/resources/biconomy.mdx
delete mode 100644 pages/resources/bridge.mdx
delete mode 100644 pages/resources/chainport.mdx
delete mode 100644 pages/resources/glacis.mdx
delete mode 100644 pages/resources/hyperlane.mdx
delete mode 100644 pages/resources/resources.mdx
delete mode 100644 pages/resources/router.mdx
delete mode 100644 pages/resources/sablier.mdx
delete mode 100644 pages/resources/safe.mdx
delete mode 100644 pages/resources/set-identity.mdx
delete mode 100644 pages/resources/useful-contracts.mdx
delete mode 100644 pages/restake/_meta.ts
delete mode 100644 pages/restake/create_a_pool/_meta.ts
delete mode 100644 pages/restake/create_a_pool/benefits-and-risks.mdx
delete mode 100644 pages/restake/create_a_pool/lst-pool-create-tangle.mdx
delete mode 100644 pages/restake/create_a_pool/lst-pool-create.mdx
delete mode 100644 pages/restake/create_a_pool/pool-roles.mdx
delete mode 100644 pages/restake/credits/_meta.ts
delete mode 100644 pages/restake/credits/claiming.mdx
delete mode 100644 pages/restake/credits/index.mdx
delete mode 100644 pages/restake/credits/precompile.mdx
delete mode 100644 pages/restake/how_to_restake/_meta.ts
delete mode 100644 pages/restake/how_to_restake/how_to_restake_polkadotjs/delegate.mdx
delete mode 100644 pages/restake/how_to_restake/how_to_restake_polkadotjs/deposit.mdx
delete mode 100644 pages/restake/how_to_restake/how_to_restake_polkadotjs/unstake.mdx
delete mode 100644 pages/restake/how_to_restake/how_to_restake_polkadotjs/withdraw.mdx
delete mode 100644 pages/restake/how_to_restake/how_to_restake_tangle/_meta.ts
delete mode 100644 pages/restake/introduction.mdx
delete mode 100644 pages/restake/join_a_pool/_meta.ts
delete mode 100644 pages/restake/join_a_pool/polkadotjs.mdx
delete mode 100644 pages/restake/join_a_pool/tangle.mdx
delete mode 100644 pages/restake/lrt-concepts.mdx
delete mode 100644 pages/restake/lrt-vs-lst.mdx
delete mode 100644 pages/restake/lrt_developers/_meta.ts
delete mode 100644 pages/restake/lrt_developers/intro.mdx
delete mode 100644 pages/restake/lrt_developers/lrt-vault.mdx
delete mode 100644 pages/restake/lst-assets.mdx
delete mode 100644 pages/restake/lst-concepts.mdx
delete mode 100644 pages/restake/lst-rewards.mdx
delete mode 100644 pages/restake/lst-working.mdx
delete mode 100644 pages/restake/lst_developers/_meta.ts
delete mode 100644 pages/restake/lst_developers/intro.mdx
delete mode 100644 pages/restake/lst_developers/lst_precompile.mdx
delete mode 100644 pages/restake/nominator.mdx
delete mode 100644 pages/restake/restake-concepts.mdx
delete mode 100644 pages/restake/restake-introduction.mdx
delete mode 100644 pages/restake/restake_developers/_meta.ts
delete mode 100644 pages/restake/restake_developers/integration.mdx
delete mode 100644 pages/restake/restake_developers/restake_precompile.mdx
delete mode 100644 pages/restake/restake_developers/services_precompile.mdx
delete mode 100644 pages/restake/staking-intro.mdx
create mode 100644 pages/staking/_meta.ts
create mode 100644 pages/staking/how-staking-works.mdx
rename pages/{developers/precompiles/features => staking/how_to_stake}/_meta.ts (60%)
rename pages/{restake/how_to_restake/how_to_restake_polkadotjs => staking/how_to_stake/how_to_stake_tangle}/_meta.ts (100%)
rename pages/{restake/how_to_restake/how_to_restake_tangle => staking/how_to_stake/how_to_stake_tangle}/delegate.mdx (88%)
rename pages/{restake/how_to_restake/how_to_restake_tangle => staking/how_to_stake/how_to_stake_tangle}/deposit.mdx (74%)
rename pages/{restake/how_to_restake/how_to_restake_tangle => staking/how_to_stake/how_to_stake_tangle}/unstake.mdx (88%)
rename pages/{restake/how_to_restake/how_to_restake_tangle => staking/how_to_stake/how_to_stake_tangle}/withdraw.mdx (89%)
rename pages/{restake => staking}/incentives/_meta.ts (78%)
rename pages/{restake => staking}/incentives/claiming.mdx (91%)
rename pages/{restake => staking}/incentives/configs.mdx (76%)
rename pages/{restake => staking}/incentives/how_rewards_work.mdx (72%)
rename pages/{restake => staking}/incentives/vaults.mdx (67%)
create mode 100644 pages/staking/introduction.mdx
create mode 100644 pages/staking/liquid-staking/_meta.ts
create mode 100644 pages/staking/liquid-staking/factory-and-discovery.mdx
create mode 100644 pages/staking/liquid-staking/introduction.mdx
create mode 100644 pages/staking/liquid-staking/risks-and-limitations.mdx
create mode 100644 pages/staking/liquid-staking/staking-flow.mdx
create mode 100644 pages/staking/liquid-staking/vaults-and-shares.mdx
create mode 100644 pages/staking/staking-concepts.mdx
create mode 100644 pages/vibe/_meta.ts
create mode 100644 pages/vibe/integrations.mdx
create mode 100644 pages/vibe/introduction.mdx
create mode 100644 pages/vibe/profile-schema.mdx
create mode 100644 pages/vibe/profiles.mdx
create mode 100644 pages/vibe/simulations.mdx
create mode 100644 pages/vibe/workflows.mdx
create mode 100644 pages/vision/_meta.ts
create mode 100644 pages/vision/architecture.mdx
create mode 100644 pages/vision/core-concepts.mdx
create mode 100644 pages/vision/introduction.mdx
create mode 100644 pages/vision/use-cases.mdx
create mode 100644 public/images/architecture/autonomous-work-loop.svg
create mode 100644 public/images/architecture/incentives-flow.svg
create mode 100644 public/images/architecture/liquid-delegation-flow.svg
delete mode 100644 public/images/claim-assets.png
delete mode 100644 public/images/claim.png
delete mode 100644 public/images/extrinsic.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/check-min-create-bond.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/commission.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/create.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/events.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/extrinsic.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/inblock.png
delete mode 100644 public/images/liquid-staking/create-pool-polkadotjs/sign.png
delete mode 100644 public/images/liquid-staking/create-pool-tangle/create-pool-btn.png
delete mode 100644 public/images/liquid-staking/create-pool-tangle/create-pool-form.png
delete mode 100644 public/images/liquid-staking/input-amount-select-tab.png
delete mode 100644 public/images/liquid-staking/join-pool-polkadotjs/bondedpools.png
delete mode 100644 public/images/liquid-staking/join-pool-polkadotjs/events.png
delete mode 100644 public/images/liquid-staking/join-pool-polkadotjs/join.png
delete mode 100644 public/images/liquid-staking/join-pool-polkadotjs/lst-join.png
delete mode 100644 public/images/liquid-staking/join-pool-polkadotjs/sign.png
delete mode 100644 public/images/liquid-staking/join-pool-polkadotjs/success.png
delete mode 100644 public/images/liquid-staking/lst-intro.png
delete mode 100644 public/images/liquid-staking/lst-workflow.png
delete mode 100644 public/images/liquid-staking/my-pools.png
delete mode 100644 public/images/liquid-staking/select-ls-network.png
delete mode 100644 public/images/liquid-staking/select-pool-and-click-stake.png
delete mode 100644 public/images/restake-workflow.png
delete mode 100644 public/images/restake/delegate/canceldelegatorunstake.png
delete mode 100644 public/images/restake/delegate/delegate.png
delete mode 100644 public/images/restake/delegate/delegateinblock.png
delete mode 100644 public/images/restake/delegate/delegatesign.png
delete mode 100644 public/images/restake/delegate/executedelegatorUnstake.png
delete mode 100644 public/images/restake/delegate/scheduleunstake.png
delete mode 100644 public/images/restake/deposit/deposit.png
delete mode 100644 public/images/restake/deposit/depositinblock.png
delete mode 100644 public/images/restake/deposit/depositsign.png
delete mode 100644 public/images/restake/how-to-restake-polkadotjs/executewithdraw.png
delete mode 100644 public/images/restake/how-to-restake-polkadotjs/schedulewithdraw.png
rename public/images/{restake => staking}/bridge/confirmation.png (100%)
rename public/images/{restake => staking}/bridge/form.png (100%)
rename public/images/{restake => staking}/bridge/metamask-tx-1.png (100%)
rename public/images/{restake => staking}/bridge/metamask-tx-2.png (100%)
rename public/images/{restake => staking}/bridge/select-networks.png (100%)
rename public/images/{restake => staking}/bridge/tx-status-toast.png (100%)
rename public/images/{restake => staking}/delegate/dapp-steps.png (100%)
rename public/images/{restake => staking}/delegate/delegate-tx-confirmation.png (100%)
rename public/images/{restake => staking}/deposit/dapp-steps.png (100%)
rename public/images/{restake => staking}/deposit/deposit-tx-confirmation.png (100%)
rename public/images/{restake => staking}/unstake/cancel-unstake.png (100%)
rename public/images/{restake => staking}/unstake/steps.png (100%)
rename public/images/{restake => staking}/unstake/unstake-requests-table.png (100%)
rename public/images/{restake => staking}/unstake/unstake-tx-confirmation.png (100%)
rename public/images/{restake => staking}/withdraw/cancel-withdraw.png (100%)
rename public/images/{restake => staking}/withdraw/steps.png (100%)
rename public/images/{restake => staking}/withdraw/withdraw-tx-confirmation.png (100%)
diff --git a/CONTENT_AUDIT.md b/CONTENT_AUDIT.md
new file mode 100644
index 0000000..d8c82c4
--- /dev/null
+++ b/CONTENT_AUDIT.md
@@ -0,0 +1,68 @@
+# Documentation Audit (v2 Migration)
+
+Last updated: 2026-01-19
+
+## High-Priority Fixes
+
+| Area | File | Status | Notes / Needed Inputs |
+| ---- | ---- | ------ | --------------------- |
+| Network parameters | `pages/network/network-parameters.mdx` | Updated (testnet + sources) | Mainnet/local addresses still needed. |
+| Token allocation | `pages/network/tokenomics/allocation.mdx` | Updated (tnt-core values) | Need distribution contract addresses by environment. |
+| Inflation model | `pages/network/tokenomics/inflation.mdx` | Updated | Reflects v2 budgeted incentives; verify against current policy. |
+| Operator incentives | `pages/network/incentives-operators.mdx` | Updated | Confirm default fee split and operator commission rules. |
+| Developer incentives | `pages/network/incentives-developers.mdx` | Updated | Confirm metric weights and eligibility rules. |
+| Participation credits | `pages/network/points-mechanics.mdx` | Updated (testnet) | Mainnet/local addresses still needed. |
+| Launch page | `pages/network/launch.mdx` | Needs investigation | Reported runtime error; content updated with v2 links. |
+| Governance docs | `pages/network/governance.mdx` | Removed | Replace with new governance system when ready. |
+| Differences doc | `pages/network/overview.mdx` | Updated | Content merged; old doc removed. |
+| Use cases | `pages/vision/use-cases.mdx` | Updated | Review for AI alignment and add any missing product references. |
+
+## Follow-Up Candidates
+
+| Area | File | Status | Notes |
+| ---- | ---- | ------ | ----- |
+| Token usage + gas model | `pages/network/tokenomics/usage.mdx` | Updated | TNT is not the gas token; usage text cleaned up. |
+
+## Operator Section Cleanup (v2)
+
+| Task | Files | Status | Notes |
+| ---- | ----- | ------ | ----- |
+| Remove v1 node docs | `pages/operators/node-basics/*` | Done | Deleted (dirs removed). |
+| Remove node monitoring docs | `pages/operators/monitoring/*` | Done | Deleted (dirs removed). |
+| Remove operator onboarding page | `pages/operators/onboarding.mdx` | Done | Deleted. |
+| Remove operator Tangle AVS docs | `pages/operators/tangle-avs/*` | Done | Deleted (dirs removed). |
+| Update operator entry points | `pages/operators/_meta.ts`, `components/OperatorIntro.tsx` | Done | Now points to Blueprint Manager + operator registration. |
+| Align operator docs to Blueprint Manager | `pages/operators/benchmarking.mdx`, `pages/operators/operator/join_operator/*` | Done | Updated to CLI + pricing-engine workflow. |
+| Audit Blueprint Manager setup details | `pages/operators/manager/*` | Pending | Verify RPC/WSS endpoints, chain IDs, and runtime commands are v2. |
+| Review remaining operator pages | `pages/operators/quality-of-service.mdx`, `pages/operators/pricing/overview.mdx` | Pending | Ensure no stale commands or v1 references. |
+
+## Economic Security Cleanup (Stake)
+
+| Task | Files | Status | Notes |
+| ---- | ----- | ------ | ----- |
+| Remove liquid staking docs | `pages/staking/lrt-*`, `pages/staking/lrt_developers/*` | Done | Deleted. |
+| Remove liquid staking docs | `pages/staking/lst-*`, `pages/staking/join_a_pool/*`, `pages/staking/create_a_pool/*`, `pages/staking/lst_developers/*` | Done | Deleted. |
+| Remove PolkadotJS stake docs | `pages/staking/how_to_stake/how_to_stake_polkadotjs/*`, `pages/staking/credits/claiming.mdx`, `pages/staking/nominator.mdx` | Done | Deleted. |
+| Remove outdated diagrams | `public/images/liquid-staking/*`, `public/images/staking/how-to-stake-polkadotjs/*`, `public/images/staking-workflow.png` | Done | Deleted. |
+| Update stake intro + concepts | `pages/staking/introduction.mdx`, `pages/staking/how-staking-works.mdx`, `pages/staking/staking-concepts.mdx` | Done | Updated for v2 staking. |
+| Add liquid staking placeholder | `pages/staking/liquid-staking.mdx`, `pages/staking/_meta.ts` | Removed | Placeholder removed and replaced by v2 liquid staking docs. |
+| Add liquid staking docs (v2) | `pages/staking/liquid-staking/*` | Done | Based on LiquidDelegationVault + LiquidDelegationFactory. |
+
+## Blueprint + SDK Alignment (v2)
+
+| Task | Files | Status | Notes |
+| ---- | ----- | ------ | ----- |
+| Update local testing guide to Anvil harness | `pages/developers/testing-with-tangle.mdx` | Done | Uses Blueprint SDK harness + tnt-core fixtures. |
+| Update blueprint introduction for v2 terminology + payments | `pages/developers/blueprints/introduction.mdx` | Done | Aligns with tnt-core payment flow and service terminology. |
+
+## Legacy Substrate References (Needs Review)
+
+| Area | File | Status | Notes |
+| ---- | ---- | ------ | ----- |
+| Blueprint Manager doc | `pages/developers/blueprints/manager.mdx` | Done | Updated to tnt-core contract terminology. |
+| Blueprint pricing engine | `pages/developers/blueprints/pricing-engine.mdx` | Done | Rewritten to match blueprint-sdk pricing engine. |
+| Address formats | `pages/developers/technicals/addresses.mdx` | Done | Deleted. |
+| Transaction fees | `pages/developers/technicals/transaction-fees.mdx` | Done | Deleted. |
+| Precompile docs | `pages/developers/precompiles/*` | Done | Deleted. |
+| Slashing flow | `pages/network/slashing.mdx` | Done | Deleted. |
+| Hardhat deployment guide | `pages/developers/technicals/deploy-using-hardhat.mdx` | Done | Deleted. |
diff --git a/PROJECT_CHECKLIST.md b/PROJECT_CHECKLIST.md
new file mode 100644
index 0000000..42c3d70
--- /dev/null
+++ b/PROJECT_CHECKLIST.md
@@ -0,0 +1,37 @@
+# Tangle Docs Cohesion + IA Checklist
+
+Last updated: 2026-01-19
+
+Status legend: [ ] Not started, [~] In progress, [x] Done
+
+## Navigation + IA
+- [x] Top nav limited to Vision, Workbench, Runtime, Protocol.
+- [x] Protocol dropdown includes Protocol Foundation, Build, Operate, Economic Security.
+- [x] Sidebar shows only children for the active section and hides the section label.
+- [x] Remove AI top-level tab and split into Workbench + Runtime.
+
+## Content Cohesion
+- [x] Apply canonical framing across Overview pages.
+- [x] Replace "Vibe" with "workbench" across docs.
+- [x] Add explicit "Today vs Future" callout in Overview and Protocol.
+- [x] Add trust/execution safety narrative (policies, audit logs, approvals, evaluation loop).
+- [x] Add role-based "Start here" blocks for each persona.
+- [x] Add minimal glossary and enforce term consistency.
+- [x] Replace "staking" terminology with "staking" in human-facing docs.
+- [x] Add liquid staking docs aligned with v2 contracts.
+
+## Accuracy (Against Internal Codebases)
+- [x] Audit workbench codebase and summarize key capabilities.
+- [x] Audit runtime orchestration codebase and summarize key capabilities.
+- [x] Align runtime docs with orchestration + sidecar responsibilities.
+- [x] Surface autoscaling/observability capabilities in operator docs.
+
+## Visuals
+- [x] Use autonomous-work-loop diagram as primary system visual.
+- [x] Remove SaaS-to-marketplace diagram.
+- [x] Add captions and labels where the system diagram appears.
+
+## Cleanup + QA
+- [x] Scan for outdated validator references and remove.
+- [x] Verify no closed-source repo names appear in published docs.
+- [x] Run terminology scan for "Vibe" and replace.
diff --git a/PROJECT_SPEC.md b/PROJECT_SPEC.md
new file mode 100644
index 0000000..5c4c64a
--- /dev/null
+++ b/PROJECT_SPEC.md
@@ -0,0 +1,62 @@
+# Tangle Docs Cohesion + IA Spec
+
+Last updated: 2026-01-19
+
+## Problem Statement
+The docs feel fragmented across product, runtime, and protocol. Roles blur, the story mixes present and future, and navigation makes it hard to understand where to start. The result is weak cohesion and low trust for new readers.
+
+## Goals
+- Present a single, consistent mission and system model across all sections.
+- Make roles and journeys obvious: workbench user, runtime operator, protocol builder, partner/investor.
+- Separate "what exists today" from "what evolves over time."
+- Keep top navigation minimal while ensuring section sidebars are deep and focused.
+- Emphasize AI-native value (autonomous work) without over-indexing on staking.
+- Ensure trust: sandbox safety, auditability, approvals, and evaluation loops are explicit.
+
+## Non-Goals
+- Full product roadmap, pricing, or competitive positioning beyond brief comparisons.
+- Detailed protocol economics documentation (kept in protocol docs only).
+- Marketing site rewrite (this spec is for docs).
+
+## Canonical Framing (Use Everywhere)
+Tangle is the shared operating layer for autonomous work. Teams and agents collaborate in shared workbenches or separate ones, work runs in secure sandboxes, and the protocol pays the operators who host the runtime. Workflows improve through agent and task evaluations collected from each run.
+
+## System Model
+- **Workbench (Experience Layer)**: Multiplayer workspaces where humans and agents collaborate.
+- **Sandbox Runtime (Execution Layer)**: Secure, isolated sandboxes that execute tasks with policies and limits.
+- **Protocol (Coordination Layer)**: Operator coordination, payment routing, and economic security.
+- **Evaluation Loop**: Each run produces task and agent evaluations that improve workflows over time.
+
+## Information Architecture
+Top nav (minimal):
+- Vision
+- Workbench
+- Runtime
+- Protocol (dropdown: Protocol Foundation, Build, Operate, Economic Security)
+
+Sidebar behavior:
+- Show only the active section's children.
+- Do not show the section label in the sidebar.
+
+Section mapping:
+- Vision: mission, use cases, architecture, core concepts, glossary.
+- Workbench: intro, workflows, simulations, profiles, integrations.
+- Runtime: intro, orchestration, security model, observability, scaling.
+- Protocol: foundation, build, operate, economic security (staking + liquid staking).
+
+## Content Guidelines
+- Avoid naming closed-source repositories or internal codebases.
+- Use "workbench" and "sandbox runtime" consistently; avoid "Vibe".
+- Keep EigenLayer mentions out of primary navigation and framing.
+- Always state what is live today vs what is planned.
+- ELI5 clarity on "who does what" for each page.
+
+## Diagram Standards
+- Primary system diagram: autonomous work loop (workbench -> sandbox -> protocol -> evaluation).
+- Use one diagram consistently across hero + architecture pages.
+- Diagrams must label the three layers clearly and show the evaluation loop.
+
+## Open Questions
+- What is the smallest viable glossary for launch?
+- Which operator trust signals should be surfaced early (logs, receipts, approvals)?
+- Where should "today vs future" live: Overview or Protocol?
diff --git a/components/CommonActions.tsx b/components/CommonActions.tsx
deleted file mode 100644
index 8b975ec..0000000
--- a/components/CommonActions.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-import { cn } from "@/lib/utils";
-import Link from "next/link";
-import React from "react";
-import { FaGithub } from "react-icons/fa";
-import {
- HiOutlineBookOpen as BookOpenIcon,
- HiOutlineServerStack as ServerIcon,
-} from "react-icons/hi2";
-
-const features = [
- {
- Icon: ServerIcon,
- title: "Node Deployment",
- description: `Want to spin up a full node on the Tangle Network? We've made it easier than ever!`,
- href: "/node/docker-node",
- action: "Deploy a Docker Node",
- },
- {
- Icon: ServerIcon,
- title: "Validators",
- description: `Start your journey on Tangle Network. This guide will walk you through the steps to become a validator, ensuring network security and integrity.`,
- href: "/node/quickstart/",
- action: "Launch a Quick Validator Node",
- },
- {
- Icon: FaGithub,
- title: "Tangle Open Source",
- description: `Multy-party threshold ECDSA (GG20) Substrate node`,
- href: "https://github.com/tangle-network/tangle",
- action: "View the Repo",
- },
- {
- Icon: ServerIcon,
- title: "Accounts",
- description: `Tangle uses Polkadot Apps to manage Accounts.`,
- href: "https://polkadot.js.org/apps/?rpc=wss://testnet-rpc.tangle.tools#/explorer",
- action: "Go to Polkadot Apps",
- },
- {
- Icon: BookOpenIcon,
- title: "Staking",
- description: `Through Polkadot Apps you can create `,
- href: "https://polkadot.js.org/apps/?rpc=wss://testnet-rpc.tangle.tools#/democracy",
- action: "Manage Staking",
- },
- {
- Icon: BookOpenIcon,
- title: "Governance",
- description: `Through governance, you can create proposals for updating cross-chain applications.`,
- href: "https://polkadot.js.org/apps/?rpc=wss://testnet-rpc.tangle.tools#/democracy",
- action: "Interact with Governance",
- },
- // {
- // Icon: BeakerIcon,
- // title: "Faucet",
- // description: `Our easy-to-use testnet faucet allows you to claim test tokens with just a few clicks. Start experimenting with Hubble Bridge today.`,
- // href: "https://faucet.tangle.tools",
- // action: "Go to Faucet",
- // },
-];
-
-type CardProps = {
- Icon: React.ElementType;
- title: string;
- description: string;
- href: string;
- action: string;
-};
-
-const Card = ({ Icon, title, href, action }: CardProps) => (
-
-
- {title}
-
-
- {/*}
{description}
- {/* Wrap the entire footer content with Link */}
-
-
-
- {action}
-
- {/* Arrow */}
-
→
-
-
-);
-
-// CommonActions component that renders a grid of Cards
-export const CommonActions = () => {
- return (
-
- {features.map((feature, index) => (
-
- ))}
-
- );
-};
-
-export default CommonActions;
diff --git a/components/EvmToSubstrateConverter.tsx b/components/EvmToSubstrateConverter.tsx
deleted file mode 100644
index 7264c7c..0000000
--- a/components/EvmToSubstrateConverter.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import { hexToU8a, stringToU8a, u8aConcat } from "@polkadot/util";
-import { blake2AsU8a, encodeAddress } from "@polkadot/util-crypto";
-import Link from "next/link";
-import { Callout } from "nextra/components";
-import { useState } from "react";
-import { BlockCopyButton } from "./ui/block-copy-button";
-import { Button } from "./ui/button";
-import {
- Card,
- CardContent,
- CardDescription,
- CardFooter,
- CardHeader,
- CardTitle,
-} from "./ui/card";
-
-const TANGLE_PREFIX = 5845;
-
-const evmToTangle = (evmAddress: string) => {
- const addr = hexToU8a(evmAddress);
- const data = stringToU8a("evm:");
- const res = blake2AsU8a(u8aConcat(data, addr));
- const tangleAddress = encodeAddress(res, TANGLE_PREFIX);
- return tangleAddress;
-};
-
-const AddressConverter = () => {
- const [evmAddress, setEvmAddress] = useState("");
- const [tangleAddress, setTangleAddress] = useState("");
-
- const convertAddress = () => {
- if (!evmAddress) {
- setTangleAddress("Please enter an EVM address.");
- return;
- }
-
- try {
- const convertedAddress = evmToTangle(evmAddress);
- setTangleAddress(convertedAddress);
- } catch {
- setTangleAddress("Invalid EVM address.");
- }
- };
-
- return (
-
-
-
- EVM to Tangle Address Converter
-
- Enter an EVM address to convert it to the prefixed form unique to
- Tangle Network. To convert an SS58 address to a public key or other
- networks, you can use{" "}
-
- SS58.org
-
-
-
-
-
-
-
- EVM Address:
-
- setEvmAddress(e.target.value)}
- placeholder="Enter EVM address"
- />
-
-
-
- Tangle Address:
-
-
- {tangleAddress || "Waiting..."}
-
-
-
-
-
-
-
-
-
- Convert
-
-
-
- Please note that the conversion from an EVM address to a Tangle
- address using the provided tool is a one-way operation, and you cannot
- derive the original EVM address from a Tangle address.
-
-
- Learn more about Addresses on Tangle.
-
-
-
-
- );
-};
-
-export default AddressConverter;
diff --git a/components/LandingPage.tsx b/components/LandingPage.tsx
index 8f39d96..f48b144 100644
--- a/components/LandingPage.tsx
+++ b/components/LandingPage.tsx
@@ -1,68 +1,37 @@
import Image from "next/image";
-import { FaWallet } from "react-icons/fa";
import { GiPlatform, GiToken } from "react-icons/gi";
import { GrNodes } from "react-icons/gr";
-import { MdApps, MdAppShortcut } from "react-icons/md";
-import { RiToolsLine } from "react-icons/ri";
import { SiBlueprint } from "react-icons/si";
import CallToActionCard from "./CallToActionCard";
const getStartedCards = [
{
- icon: ,
- title: "Get started building Blueprints",
- description:
- "Tangle Network is a decentralized cloud infrastructure that allows users to deploy and monetize Blueprints across any blockchain ecosystem.",
- link: "../developers/blueprints/introduction",
- },
- {
- icon: ,
- title: "Restake TNT or other assets",
+ icon: ,
+ title: "Start in the agentic workbench",
description:
- "Restaking secures the actively validated services on Tangle, and earns rewards.",
- link: "../restake/introduction",
+ "Create autonomous work with teammates and agents in a shared workspace.",
+ link: "/vibe/introduction",
},
{
icon: ,
- title: "Run a Node, Validator, or Service Operator",
+ title: "Run work in secure sandboxes",
description:
- "Noderunners can earn staking rewards, secure the network, and operators earn income from services.",
- link: "../operators/introduction",
+ "Work executes in isolated runtimes with policies and limits.",
+ link: "/infrastructure/introduction",
},
{
- icon: ,
- title: "Learn more about the network and platform",
+ icon: ,
+ title: "Operate the runtime",
description:
- "Discover Tangle network's unique decentralized cloud infrastructure.",
- link: "../network/overview",
+ "Host secure sandboxes and get paid through the protocol.",
+ link: "/operators/introduction",
},
-];
-
-const resourcesCards = [
{
- icon: ,
- title: "TNT, Wallets and More",
- description: "Your source for Wallets, apps, staking and more.",
- link: "/resources/resources",
- },
- {
- icon: ,
- title: "Developer Tools",
- description: "RPCs, faucets, and block explorers.",
- link: "/developers/endpoints",
- },
- {
- icon: ,
- title: "Tangle DApp",
- description: "Nominate your TNT at Tangle DApp",
- link: "http://app.tangle.tools/",
- },
- {
- icon: ,
- title: "Polkadot Apps",
+ icon: ,
+ title: "Build and publish Blueprints",
description:
- "For advanced interactions, Polkadot Apps supports Tangle Network.",
- link: "https://polkadot.js.org/apps/?rpc=wss://rpc.tangle.tools#/explorer",
+ "Package services and workflows to run on the protocol.",
+ link: "/developers/blueprints/introduction",
},
];
@@ -77,15 +46,17 @@ const LandingPage = () => {
TANGLE DOCUMENTATION
- Your Guide to Tangle's{" "}
+ Tangle is the{" "}
- Decentralized Cloud Infrastructure
-
+ shared operating layer
+ {" "}
+ for autonomous work
- Create and monetize Blueprints that deploy securely across any
- blockchain ecosystem. Instance services on-demand using crypto
- rails.
+ Teams and agents collaborate in shared workbenches or separate
+ ones, work runs in secure sandboxes, and the protocol pays the
+ operators who host the runtime. Workflows improve through agent
+ and task evaluations collected from each run.
@@ -104,34 +75,73 @@ const LandingPage = () => {
{/* Horizontal Line */}
- {/* Call-to-Action Cards Row */}
-