Cross-chain economic security is the practice of using financial incentives and disincentives to ensure honest behavior across multiple blockchains. Unlike traditional consensus security, which is confined to a single chain, this framework must account for asynchronous communication, varying validator sets, and the bridging of economic value. The core principle is that the cost of attacking the system should always exceed the potential profit, a concept known as strict economic dominance. For example, a cross-chain messaging protocol like Axelar secures its network by requiring its validators to stake the native AXL token, which can be slashed for malicious behavior, creating a financial barrier to attacks.
Setting Up a Cross-Chain Economic Security Framework
Setting Up a Cross-Chain Economic Security Framework
A practical guide to implementing a robust economic security framework for cross-chain applications, focusing on risk assessment, slashing mechanisms, and protocol design.
The first step in building this framework is a comprehensive risk assessment. You must identify and quantify the value at risk across all connected chains. This includes the total value locked (TVL) in smart contracts, the daily volume of cross-chain messages, and the maximum extractable value (MEV) from delayed settlements. Tools like Chainlink's Cross-Chain Interoperability Protocol (CCIP) provide risk management networks that monitor for anomalies. A practical assessment should model scenarios like a 51% attack on a connected Proof-of-Work chain or a malicious majority in a bridge's multi-sig, estimating the potential financial loss and the required collateral to cover it.
Next, design the slashing and incentive mechanism. This is the enforcement layer of your economic security. The slashing conditions must be cryptographically verifiable and trigger automatically upon proof submission. For instance, in a optimistic rollup bridge, a challenge period allows anyone to submit fraud proofs; a successful challenge results in the slashing of the sequencer's bond. Your smart contract code must define these conditions clearly. Consider a simplified Solidity example for a slashing condition based on a verified fraudulent message:
solidityfunction slashValidator(address validator, bytes32 fraudulentProof) external { require(verifyFraudProof(fraudulentProof), "Invalid proof"); uint256 bond = validatorBonds[validator]; validatorBonds[validator] = 0; // Slashed funds can be burned or sent to a treasury emit ValidatorSlashed(validator, bond); }
The final architectural component is the security budget and collateralization. The total staked economic value (the security budget) must be dynamically adjusted to always exceed the value it secures. Protocols like EigenLayer introduce restaking, allowing ETH stakers to allocate their stake to secure additional services, thereby increasing the economic security budget. Your framework should include oracles or governance mechanisms to re-collateralize in response to TVL growth. A common model is to require bridge validators to stake collateral worth 2-3x the 7-day average transfer volume, creating a substantial economic disincentive against stealing a single large transfer.
Implementation requires continuous monitoring and response. You cannot "set and forget" an economic security model. Integrate monitoring tools that track key metrics: the health of validator sets, the ratio of staked value to secured value, and latency in fraud proof submission. Services like Chainscore provide real-time analytics for cross-chain security posture. Furthermore, establish a clear governance process for parameter adjustment—such as slashing percentages or minimum stake—in response to network growth or emerging attack vectors, ensuring the framework remains resilient over time.
Prerequisites and Core Assumptions
Before implementing a cross-chain security framework, you must establish a solid technical and conceptual foundation. This section outlines the essential knowledge, tools, and assumptions required for the subsequent guide.
A cross-chain economic security framework extends the concept of cryptoeconomic security—where a network's integrity is secured by financial incentives and penalties—across multiple, heterogeneous blockchains. The core assumption is that no single chain is a security silo; value and risk are interconnected. You must be familiar with foundational blockchain concepts: consensus mechanisms (Proof-of-Work, Proof-of-Stake), smart contract execution, and the role of validators or miners. Understanding how assets are natively secured on their home chain (e.g., Ethereum's 32 ETH validator stake, Bitcoin's hash power) is the baseline for analyzing cross-chain vulnerabilities.
From a technical standpoint, proficiency with developer tooling is non-negotiable. You will need: a code editor (VS Code), Node.js/npm installed, and familiarity with a command-line interface. The guide uses TypeScript for type-safe examples and interacts with real protocols via their SDKs and APIs. We assume you can set up a basic project, manage dependencies, and understand asynchronous operations (async/await). You should also have testnet ETH (e.g., on Sepolia) and testnet tokens for other chains (like AVAX on Fuji) available via faucets, as we will be deploying and interacting with example contracts and bridges.
The architectural model we build upon assumes a hub-and-spoke or arbitrary message passing design, common in protocols like Axelar, LayerZero, and Wormhole. A critical assumption is the existence of a verification layer—a set of off-chain relayers or an on-chain light client—that attests to the validity of state transitions on a source chain for consumption on a destination chain. We will treat these verification mechanisms as abstract modules with defined interfaces, focusing on how to instrument them for security monitoring rather than building them from scratch.
Finally, we operate under the economic assumption that staked capital or bonded assets are at risk to disincentivize malicious behavior by relayers, validators, or watchtowers in the system. Your framework must quantify this slashable stake and model scenarios like correlated failures across chains. This requires a working knowledge of basic economic modeling and risk assessment frameworks. All code and analysis will be chain-agnostic where possible, applying principles to both EVM chains (Ethereum, Arbitrum, Polygon) and non-EVM chains (Solana, Cosmos) through their respective interfaces.
Setting Up a Cross-Chain Economic Security Framework
A practical guide to implementing the foundational security models that protect value and enforce trust across blockchain networks.
A cross-chain economic security framework is the set of mechanisms that financially incentivize honest behavior and penalize malicious actions across interconnected blockchains. Unlike a single-chain model, it must account for asynchronous execution and sovereign governance across multiple domains. The core objective is to create a system where the cost of attacking the bridge or application exceeds the potential profit, a principle known as cryptoeconomic security. This involves carefully designing stake slashing, fraud proofs, and liquidity backing to ensure that operators and validators are economically aligned with the system's health, regardless of which chain they operate on.
The first step is defining the security model. The three primary models are: - Optimistic verification, which assumes validity but allows challenges (used by Arbitrum, Optimism). - Zero-knowledge (ZK) proofs, which cryptographically verify state correctness (used by zkSync, Polygon zkEVM). - External validator sets, which rely on a separate, bonded group of signers (used by Axelar, LayerZero). Your choice dictates the technical stack, latency (from challenge periods or proof generation), and the capital efficiency of locked collateral. For a new framework, auditing existing implementations like the IBC protocol's light client model or Connext's Amarok upgrade provides concrete architectural patterns.
Implementation requires integrating with chain-specific security primitives. On Ethereum, this means deploying smart contracts for staking, slashing, and message verification, often using upgrade patterns like Transparent or UUPS proxies for future improvements. For Cosmos SDK chains, you would implement the IBC module and define your packet-forwarding logic. A critical code example is the verification function. For an optimistic rollup bridge, your Ethereum contract must verify fraud proofs, which involves replaying disputed transactions. A simplified skeleton in Solidity might look like:
solidityfunction verifyFraudProof(bytes calldata _preState, bytes calldata _proof) public { require(msg.sender == challenger, "Not authorized"); // Reconstruct state transition from _preState using _proof if (transitionIsInvalid) { slashOperator(operatorAddress); rewardChallenger(msg.sender); } }
Economic parameters must be calibrated to real-world values. The total value secured (TVS) must be continuously monitored against the total value bonded (TVB). A standard security threshold is a TVB:TVS ratio of at least 1:1, but for high-value bridges, a 2:1 or 3:1 overcollateralization is safer. Tools like Chainlink Data Feeds can be used to price bonded assets in real-time and trigger alerts if ratios fall below a threshold. Furthermore, you must plan for liveness failures and governance attacks. Solutions include having a diverse, geographically distributed validator set, implementing decentralized sequencer selection, and establishing a clear, multi-sig governed emergency shutdown procedure to freeze operations if a critical vulnerability is discovered.
Finally, the framework is not static. It requires active risk monitoring and parameter adjustment. This involves setting up dashboards to track metrics like cross-chain message volume, validator health, and collateralization ratios. Governance proposals should be used to adjust slashing penalties or stake requirements in response to network growth or changes in asset volatility. By treating economic security as a continuous, data-driven process, developers can create cross-chain systems that are both resilient and adaptable, forming the trusted backbone for the multi-chain ecosystem.
Cross-Chain Bridge Security Models Comparison
A comparison of the core security models used by major cross-chain bridges, detailing their trust assumptions and failure modes.
| Security Model | External Validators | Optimistic | Native Verification |
|---|---|---|---|
Trust Assumption | Trust in 3rd-party committee | Trust in economic bond & fraud window | Trust in underlying blockchain consensus |
Finality Time | ~1-5 minutes | 7-30 days (challenge period) | ~12 sec (Ethereum) to ~2 sec (Solana) |
Capital Efficiency | Low (locked in bridge) | High (bond can be slashed) | High (native asset) |
Primary Risk | Validator collusion (>51%) | Insufficient bond value | Underlying chain 51% attack |
Example Protocols | Multichain, Wormhole | Nomad, Across | LayerZero, IBC |
Gas Cost for Verification | Low | High (fraud proof execution) | Variable (light client cost) |
Settlement Guarantee | Probabilistic | Economic (bond-backed) | Deterministic (consensus-final) |
Step 1: Designing Bridge Validator Incentives
A cross-chain bridge's security is only as strong as the economic incentives that bind its validators. This step outlines how to structure a robust incentive framework to ensure honest behavior and network liveness.
The core challenge in bridge design is aligning validator incentives with protocol security. A validator set, whether permissioned or permissionless, must be economically motivated to perform its duties correctly—relaying messages, signing attestations, and finalizing transactions. The primary mechanism is a bonding and slashing model, inspired by Proof-of-Stake consensus. Validators must lock a security deposit, or "stake," in the form of the native token or a bonded asset like ETH or stETH. Malicious actions, such as signing conflicting states, trigger slashing, where a portion of this stake is burned, creating a direct financial penalty for attacks.
Incentive design must balance rewards for honest participation with penalties for malfeasance. A common structure includes: - Relay fees: Validators earn fees for processing user transactions, similar to gas fees in block production. - Protocol rewards: The bridge protocol mints and distributes new tokens to active validators, ensuring participation even during low usage periods. - Slashing conditions: Clearly defined, automatically executable rules for penalizing provably malicious actions, such as double-signing. The Inter-Blockchain Communication (IBC) protocol employs a sophisticated slashing mechanism for misbehavior, which is a key reference.
The economic security of the bridge is quantified by its Total Value Secured (TVS) versus its Total Value Locked (TVL) in validator bonds. A critical metric is the cost-to-corrupt, which estimates the capital required to bribe or compromise enough validators to execute an attack. For example, if 10 validators each bond $1M, an attacker might need to compromise 7 validators (assuming a 2/3+1 threshold), making the attack cost at least $7M. The protocol should be designed so that the cost-to-corrupt always exceeds the potential profit from stealing the bridge's TVL.
Implementing this requires smart contracts for staking, reward distribution, and slashing. Below is a simplified Solidity structure for a staking manager. The slash function would be called by a verifier contract upon proof of fraud.
solidity// Simplified Staking Contract for Bridge Validators contract BridgeStaking { mapping(address => uint256) public bonds; uint256 public totalBonded; address[] public validators; function stake() external payable { require(msg.value >= 1 ether, "Minimum bond not met"); bonds[msg.sender] += msg.value; totalBonded += msg.value; validators.push(msg.sender); } function slash(address validator, uint256 penalty) external onlyVerifier { uint256 bonded = bonds[validator]; require(penalty <= bonded, "Penalty exceeds bond"); bonds[validator] -= penalty; totalBonded -= penalty; // Burn or redistribute the slashed funds (bool sent, ) = address(0).call{value: penalty}(""); require(sent, "Slash failed"); } function distributeRewards() external onlyBridge { // Logic to distribute fees/protocol rewards pro-rata based on bond size } }
Finally, the framework must account for liveness incentives. Validators should be penalized for prolonged downtime to ensure transaction finality. This is often done through a gradual "leaking" of their bonded stake. The goal is a Nash equilibrium where the most profitable strategy for a rational validator is to follow the protocol honestly. Regularly stress-testing the economic model against attack vectors like bribe attacks, described in Flash Boys 2.0 research, is essential before mainnet deployment.
Step 2: Designing Secure Cross-Chain Liquidity Pools
A robust economic security framework is the foundation of a resilient cross-chain liquidity pool, protecting user funds from exploits and ensuring protocol solvency.
The core challenge for a cross-chain liquidity pool is securing assets across multiple, independent blockchains. Unlike a single-chain pool, you cannot rely on one network's native consensus for finality. Instead, you must design an economic security model where the cost to attack the system vastly exceeds the potential profit. This model typically involves a bonded validator or guardian set, often using a proof-of-stake mechanism, that is economically incentivized to act honestly. Their stake acts as a slashable bond, which is forfeited if malicious behavior is proven.
To implement this, you must define clear slashing conditions. Common conditions include signing conflicting messages (e.g., approving a withdrawal on two different chains for the same deposit), failing to relay messages within a specified timeframe, or colluding to censor transactions. The slashing logic is encoded in smart contracts on each connected chain. For example, a contract on Ethereum would hold the staked tokens and execute slashing based on cryptographic proofs of misbehavior submitted by watchers or other validators.
The size of the required bond is a critical parameter. It must be calibrated to the Total Value Locked (TVL) the pool is designed to secure. A common heuristic is to require the total bonded value to be a significant multiple (e.g., 2-3x) of the maximum instantaneous liquidity that could be bridged in a short window. This ensures that even if all bonded actors collude, their loss would be greater than their gain from stealing funds. Protocols like Axelar and LayerZero employ variations of this bonded security model.
You must also design the reward mechanism for honest validators. Rewards are typically generated from bridge fees paid by users. The fee structure should incentivize liveness and correct message relaying. A portion of slashed funds can also be redistributed to honest actors or used to compensate users in the event of a proven exploit, creating a self-healing treasury. This aligns the economic interests of the validators with the long-term health of the protocol.
Finally, the security framework must be upgradable to respond to new threats, but upgrades should be governed carefully to avoid centralization risks. Using a decentralized autonomous organization (DAO) with a time-locked multi-sig or a governance token voting mechanism allows the community to approve security parameter adjustments, such as changing the validator set, modifying bond sizes, or updating slashing conditions, without introducing a single point of failure.
Step 3: Mitigating Reorganization Risks
This guide details the implementation of a cross-chain economic security framework to protect against chain reorganizations, focusing on practical strategies for developers and validators.
A cross-chain economic security framework is a set of economic incentives and slashing conditions designed to disincentivize malicious behavior that could lead to chain reorganizations. Unlike single-chain security, which relies on a native token's stake, cross-chain security must account for the economic value at risk across multiple ecosystems. The core principle is to make the cost of attacking the system (e.g., attempting a reorg to double-spend a bridged asset) vastly exceed any potential profit. This is achieved by requiring validators or relayers to post substantial bonds in the form of liquid-staked tokens or other high-value collateral that can be slashed if they sign conflicting states.
Implementing this framework requires defining clear, on-chain slashing conditions. For a optimistic rollup bridge, this might involve slashing the bond of a challenger who submits a fraudulent fraud proof, or the bond of a validator who attests to an invalid state root. For a zkBridge, slashing can occur if a prover submits a false validity proof that is successfully challenged. The slashing logic must be cryptographically verifiable and executable via smart contracts on the destination chain. A common pattern is to use a multi-sig or a decentralized oracle network like Chainlink to verify the slashing condition and execute the bond confiscation, distributing a portion as a reward to the honest reporter.
The size of the required economic bond is a critical parameter. It must be calibrated based on the Maximum Extractable Value (MEV) or potential profit from a successful attack on the bridged assets. For example, if a bridge regularly facilitates transfers of $100M in assets, the total bonded value across all validators should be a significant multiple of that—often aiming for a 1.5x to 3x safety ratio. Tools like the ChainSecurity economic security calculator can help model these requirements. Bonds are typically dynamic and can be adjusted via governance based on the total value locked (TVL) in the bridge and the historical volatility of the underlying collateral assets.
From a developer's perspective, integrating this involves deploying a BondManager smart contract. Validators deposit collateral (e.g., stETH, rETH, or the native chain's token) into this contract to register. The contract holds the logic for evaluating slashing proofs submitted by watchers. A simplified interface in Solidity might look like this:
solidityfunction submitSlashingProof( uint256 validatorId, bytes calldata proofData ) external { require(verifyProof(validatorId, proofData), "Invalid proof"); Bond storage bond = bonds[validatorId]; uint256 slashAmount = bond.amount; delete bonds[validatorId]; // Reward reporter and burn or redistribute the rest emit ValidatorSlashed(validatorId, slashAmount, msg.sender); }
This contract must be rigorously audited, as it becomes a central point of failure for the system's economic security.
Operational security for validators is paramount. They must run highly available and monitored nodes for all connected chains to avoid accidental slashing due to downtime or misconfigured software. Using sentry nodes, geographic distribution, and automated alerting for missed attestations is standard practice. Furthermore, the economic framework should include grace periods and appeal processes to protect against false slashing claims, ensuring the system is robust against griefing attacks. The goal is to create a Nash equilibrium where acting honestly is the most economically rational strategy for all participants, thereby securing the bridge's state finality across chains.
Cross-Chain Economic Attack Vector Risk Matrix
A comparative analysis of economic security risks across common cross-chain bridge designs.
| Attack Vector | Liquidity Network (e.g., Chainlink CCIP) | Mint/Burn Bridge (e.g., Wormhole) | Lock/Mint Bridge (e.g., Polygon PoS) |
|---|---|---|---|
Liquidity Drain / Bank Run | Medium (Limited by liquidity pool depth) | Low (No canonical asset liquidity) | High (Requires backing asset reserves) |
Validator/Minter Collusion | Low (Decentralized oracle network) | High (Governance-controlled multisig) | High (Federated/MPC signers) |
Oracle Manipulation | Medium (Targets price feeds) | Low (Relies on message attestation) | |
Inflation Attack (Mint Without Backing) | |||
Withdrawal Delay Risk | < 10 minutes | ~15 minutes (Finality + attestation) | ~1-3 hours (Checkpoint period) |
Economic Finality Assumption | High (Depends on underlying chains) | Low (Uses light client/SPV proofs) | Medium (Relies on root chain finality) |
Slashing Mechanism for Faults | |||
Maximum Extractable Value (MEV) Risk | Low (Off-chain reporting) | Medium (On-chain message verification) | High (Centralized sequencer potential) |
Step 4: Implementing Monitoring and Emergency Response
Proactive monitoring and a pre-defined emergency response plan are the final, critical components of a cross-chain economic security framework. This guide covers setting up real-time alerting and executing coordinated defensive actions.
Effective monitoring begins with defining the key risk indicators (KRIs) for your cross-chain application. These are specific, measurable metrics that signal potential security or economic health issues. Common KRIs include: - Total Value Locked (TVL) volatility - Bridge transaction volume anomalies - Validator/node health status - Oracle price feed deviations - Liquidity pool imbalance ratios. Tools like Chainlink Functions for custom data feeds, Tenderly for smart contract monitoring, and The Graph for indexing protocol-specific events are essential for tracking these metrics in real-time.
Once KRIs are defined, you must establish alerting thresholds and channels. For example, you might configure a PagerDuty integration to trigger a high-priority incident when the TVL on a specific chain drops by more than 15% in one hour, or when a critical sequencer node goes offline. The alert should include actionable context: the affected contract address, the deviating metric value, and a link to the relevant dashboard. Setting up alerts directly from blockchain explorers like Etherscan or block native data platforms ensures you receive notifications based on on-chain state, not just your own infrastructure.
An emergency response plan (ERP) documents the precise steps to take when a critical alert is triggered. This is not ad-hoc; it's a rehearsed playbook. A typical ERP for a cross-chain bridge might include: 1. Immediate Isolation: Pausing deposits via a pause() function in the bridge contract. 2. Diagnosis: The security team analyzes transaction logs and mempool data using tools like Blocknative Mempool Explorer to identify the attack vector. 3. Communication: A pre-written template is used to notify users via Twitter, Discord, and project blog within 30 minutes. 4. Remediation: Executing a governance-approved upgrade or invoking a multi-sig to deploy a fix.
For technical implementation, your monitoring system should be able to interact with your smart contracts' administrative functions. Here is a simplified example of a script that monitors TVL and pauses a bridge contract if a threshold is breached, using ethers.js and a hypothetical Bridge contract interface:
javascriptconst ethers = require('ethers'); const BRIDGE_ADDRESS = '0x...'; const PAUSE_THRESHOLD_ETH = ethers.utils.parseEther('1000'); // Pause if TVL < 1000 ETH async function monitorTVL() { const provider = new ethers.providers.JsonRpcProvider(RPC_URL); const bridgeContract = new ethers.Contract(BRIDGE_ADDRESS, BridgeABI, provider); const currentTVL = await bridgeContract.totalLocked(); if (currentTVL.lt(PAUSE_THRESHOLD_ETH)) { // Trigger emergency response: execute pause transaction via admin wallet const adminWallet = new ethers.Wallet(PRIVATE_KEY, provider); const bridgeWithSigner = bridgeContract.connect(adminWallet); const tx = await bridgeWithSigner.pause(); await tx.wait(); console.log(`Emergency pause executed. TX Hash: ${tx.hash}`); // Trigger external alert (e.g., send to PagerDuty/Slack) } } // Run this function on a scheduled cron job
Finally, regular war-gaming and post-mortem analysis are non-negotiable. Conduct quarterly simulations where your team responds to a fabricated incident based on real historical exploits, like a liquidity drain or oracle manipulation. After any real alert or simulation, document a post-mortem. Public post-mortems, following the template used by projects like Compound or Aave, build trust by transparently detailing what happened, the root cause, the response timeline, and the specific changes implemented to prevent recurrence. This cycle of monitor, alert, respond, and improve creates a resilient security posture for your cross-chain ecosystem.
Tools and Resources
These tools and frameworks help teams design, validate, and operate cross-chain economic security models. Each resource focuses on a concrete layer such as shared security, slashing, messaging guarantees, or validator coordination.
Cross-Chain Slashing and Dispute Design
Slashing is the core enforcement mechanism in most cross-chain economic security frameworks. Poorly designed slashing can create griefing vectors or under-punish profitable attacks.
Best practices:
- Define objective, cryptographically provable faults such as invalid signatures or conflicting state roots.
- Use time-delayed slashing with challenge windows to reduce false positives.
- Ensure slashed value exceeds the maximum extractable value from a single cross-chain exploit.
Many teams implement slashing logic in a dedicated settlement chain or hub contract, with proofs submitted via light clients or zk verification. Formal modeling of attack payoffs is strongly recommended before deployment.
Economic Security Modeling and Simulation
Before deploying cross-chain security mechanisms, teams should model validator incentives and attacker payoffs under realistic assumptions.
Practical approaches:
- Build agent-based simulations to test bribery, cartel formation, and validator churn.
- Stress-test parameters such as unbonding periods, slash ratios, and quorum thresholds.
- Compare the cost of attack against historical bridge exploit sizes to validate assumptions.
Open-source tooling is often combined with custom Python or Rust simulations. While models cannot capture all real-world behavior, they help surface brittle assumptions early and guide parameter selection.
Frequently Asked Questions
Common questions and troubleshooting for developers implementing economic security frameworks for cross-chain applications.
A cross-chain economic security framework is a system of cryptoeconomic incentives and disincentives designed to secure the transfer of assets and data between independent blockchains. Unlike a single-chain model, it must account for the distinct security assumptions of each connected chain. The core mechanism is typically a bonding and slashing system, where validators or relayers post a financial stake (bond) that can be destroyed (slashed) for malicious behavior like attesting to invalid state transitions. This creates a financial cost to attack that exceeds the potential profit, aligning participant incentives with network security. Frameworks like Chainlink CCIP, LayerZero, and Axelar implement variations of this model to secure cross-chain messaging.
Conclusion and Next Steps
This guide has outlined the core components for establishing a cross-chain economic security framework. The next steps involve operationalizing these concepts.
To implement this framework, begin by instrumenting your protocol with the monitoring tools discussed. For a live deployment, integrate a service like Chainscore's Security API to track real-time economic security metrics across all supported chains. Start with the foundational metrics: total value secured (TVS), slashable capital, and validator decentralization scores. This data forms the baseline for your security dashboard and informs initial risk parameters.
Next, establish your governance and response procedures. Define clear thresholds for automated alerts (e.g., TVS dropping 20% on a primary chain) and create a runbook for manual interventions. This should include steps for pausing bridges, communicating with stakeholders via forums like the Commonwealth or Snapshot, and executing governance votes to adjust parameters like slashing penalties or rebalancing incentives. Practice these procedures in a testnet environment.
Finally, engage in continuous optimization. Economic security is not a set-and-forget system. Regularly review cross-chain flow patterns using analytics from Dune Analytics or Flipside Crypto to identify new concentration risks. Propose and test adjustments to your staking incentives or slashing conditions. The goal is to create a feedback loop where security data directly informs protocol economics, creating a more resilient and adaptable system over time.