Skip to content

Smart Contracts

DPX is deployed on Base mainnet (chainId 8453). All contracts are verified on Basescan. The settlement router enforces all fees on-chain — agents cannot submit settlements at rates different from what the oracle quoted.

Contract addresses are also returned by the /manifest endpoint and are always canonical.


ContractAddressRole
DPX Token (V3)0x7A62dEcF6936675480F0991A2EF4a0d6f1023891Upgradeable ERC-20 (DOVPAXBRANCHUpgradeableV3) · 0.01% license fee on every transfer
StabilityFeeController0xda8aA06cDa9D06001554d948dA473EBe5282Ea17PID-controlled stability mechanism
BasketPegManager0xB5071fA48B92e3652701053eEd8826ab94014AaAMulti-currency basket · USD / EUR / GBP / JPY / CNY
ESGOracle0x7717e89bC45cBD5199b44595f6E874ac62d79786On-chain ESG score storage · 6 providers · per-company scoring
ESGRedistribution0x4F3741252847E4F07730c4CEC3018b201Ac6ce87Bad-actor fee redistribution · 10 industry buckets
PolicyManager0x741f3179786d9f72e134BdC699D6604eaB250D6EGovernance · basket and fee policy control
DPXSettlementRouter0x7d2b0Cea5A2d19369548F59C6B8EEe9Fe3495c97Single settlement entry point · enforces all fees on-chain

Basescan: basescan.org → search any address above to verify deployment and inspect transactions.


Address: 0x7A62dEcF6936675480F0991A2EF4a0d6f1023891

Upgradeable ERC-20 (DOVPAXBRANCHUpgradeableV3) with a protocol license fee enforced on every transfer. The license fee (1 bps / 0.01%) is immutable and cannot be disabled — it funds protocol development and is separate from settlement fees.

FunctionDescription
transfer(to, amount)Standard ERC-20 transfer — license fee applied automatically
approve(spender, amount)Standard ERC-20 approval
balanceOf(address)Token balance query

Address: 0xda8aA06cDa9D06001554d948dA473EBe5282Ea17

PID (Proportional-Integral-Derivative) controlled stability mechanism. Monitors peg deviation and adjusts fee parameters in response to real-time stability signals from the oracle. Works in conjunction with the PolicyManager — the PolicyManager sets governance bounds; the StabilityFeeController operates within them.

FunctionDescription
computeFee(sender, recipient, amount)Returns (feeAmount, licenseFeeAmount) for a transfer
ParameterValue
coreFeeBps85
fxFeeBps40
esgDivisor200
ESG_MAX_BPS50
License fee1 bps (enforced in DPX Token)

Address: 0x7d2b0Cea5A2d19369548F59C6B8EEe9Fe3495c97

The single entry point for all DPX settlements. Enforces the full fee structure (core + FX + ESG + license) before executing the token transfer. Agents and TMS integrations call settle() — never the token contract directly.

FunctionDescription
settle(recipient, grossAmount, isCrossCurrency, quoteId)Execute a settlement — enforces all fees on-chain
previewFees(grossAmount, isCrossCurrency)Off-chain fee preview — call before submitting settlement
setFeeRates(coreFeeBps, fxFeeBps)Admin: update fee rates
setFeeCollector(address)Admin: update treasury address
setESGRedistribution(address)Admin: update redistribution contract address
uint256 coreFee = (grossAmount * coreFeeBps) / 10_000; // 0.85%
uint256 fxFee = isCrossCurrency ? (grossAmount * fxFeeBps) / 10_000 : 0; // 0.40%
uint256 esgBps = (100 - avgEsgScore) * ESG_MAX_BPS / 100; // 0.00–0.50%
uint256 esgFee = (grossAmount * esgBps) / 10_000;
uint256 net = grossAmount - coreFee - fxFee - esgFee;

The /verify-fees endpoint calls previewFees() to confirm on-chain fees match the oracle quote before settlement execution.


Address: 0xB5071fA48B92e3652701053eEd8826ab94014AaA

Manages the multi-currency basket backing DPX. Tracks weights across USD, EUR, GBP, JPY, and CNY. Computes the on-chain basket value and compares to oracle-reported value — if divergence exceeds peg tolerance, a peg alert is raised.

Basket adjustments are proposed by the Stability Oracle’s recommendation engine and executed only after PolicyManager governance approval.

Currency weights are modelled on IMF SDR pool recommendations.

CurrencyRole
USDPrimary reserve anchor
EUREuropean exposure
GBPUK exposure
JPYAsia-Pacific exposure
CNYEmerging market exposure

Address: 0x7717e89bC45cBD5199b44595f6E874ac62d79786

On-chain storage and verification of ESG scores. The ESG Oracle service posts scores here after each evaluation cycle. Scores are stored per-company, per-provider — enabling weighted aggregation across multiple authoritative sources.

Current configuration:

SettingValue
Oracle updater0x4fb89aC30e70f041CebaF814C08a1A2cf3f808C1
Registered providersWorldBank · UN · ClimateMonitor · IMF · OECD · SEC
FunctionDescription
getESGScore(provider, company)Score for a specific company from a specific provider (0–100)
listProviders()All registered data providers
getAllScores(company)All provider scores for a company
setESGScore(provider, company, score)Oracle updater: post a new score
batchSetScores(provider, companies[], scores[])Oracle updater: bulk score update

Address: 0x4F3741252847E4F07730c4CEC3018b201Ac6ce87

Redistributes fees from bad actors (companies with aggregated ESG score ≤ threshold) to a consolidated on-chain impact wallet. Weighted score is computed across all enabled providers — a company must score ≤ 40 across WorldBank, UN, ClimateMonitor, IMF, OECD, and SEC before redistribution is triggered.

Registered providers (weights):

ProviderWeightStatus
WorldBank40Active
UN30Active
ClimateMonitor30Active
IMF20Active
OECD20Active
SEC20Active

Industry buckets (all route to consolidated impact wallet):

FossilFuels · Energy · Manufacturing · Agriculture · Technology · Finance · Consumer · Healthcare · RealEstate · Transportation

FunctionDescription
aggregatedScore(company)Weighted average ESG score for a company (0–100)
isBelowThreshold(company)Returns true if company qualifies for redistribution
redistributeERC20(token, company, amount)Redistribute ERC20 fees from a bad actor
setCompanyIndustry(company, industry)Map a company address to an industry bucket
registerProvider(name, weight, enabled)Add or update a scoring provider

Every redistribution is recorded on-chain via RedistributionExecuted event — auditable by any counterparty, regulator, or auditor.


Address: 0x741f3179786d9f72e134BdC699D6604eaB250D6E

On-chain governance for basket and fee policy. The Stability Oracle’s recommendation engine proposes adjustments — the PolicyManager enforces hard constraints on those proposals:

  • Maximum adjustment magnitude per cycle
  • Cooling periods between successive changes
  • Circuit breaker: halts all adjustments under extreme instability conditions
  • Quorum requirements for program address changes

The PolicyManager is the only contract authorised to update ESGRedistribution program addresses or BasketPegManager currency weights.


DPX uses a hybrid fee enforcement model:

  • License fee (0.01%) — enforced in the DPX Token contract on every transfer
  • Core, FX, and ESG fees — enforced in DPXSettlementRouter
  • ESG scoring — stored in ESGOracle, aggregated in ESGRedistribution
  • Bad-actor redistribution — enforced in ESGRedistribution (not discretionary)
  • Basket integrity — enforced in BasketPegManager
  • Governance bounds — enforced in PolicyManager

This separation allows settlement router fees to be updated via PolicyManager governance without touching the token contract. Integrators interact with the router only — never the token contract directly.


dpx-protocol/dpx-deploy/contracts/DPXToken.sol
dpx-protocol/dpx-deploy/contracts/StabilityFeeController.sol
dpx-protocol/dpx-deploy/contracts/BasketPegManager.sol
dpx-protocol/dpx-deploy/contracts/ESGOracle.sol
dpx-protocol/dpx-deploy/contracts/ESGRedistribution.sol
dpx-protocol/dpx-deploy/contracts/PolicyManager.sol
dpx-protocol/dpx-deploy/contracts/DPXSettlementRouter.sol
Stability-Oracle/stability-oracle/routes/settlerClient.js