Search

Search for projects by name or address

Term Structure logo
Term Structure

Badges

About

Term Structure introduces a distinct ZK Rollup solution democratizing fixed-rate and fixed-term borrowing and lending as well as fixed income trading by offering low transaction fees and enabling forced withdrawals.



Badges

About

Term Structure introduces a distinct ZK Rollup solution democratizing fixed-rate and fixed-term borrowing and lending as well as fixed income trading by offering low transaction fees and enabling forced withdrawals.


Total
Canonically BridgedCanonically Bridged ValueCanonical
Natively MintedNatively Minted TokensNative
Externally BridgedExternally Bridged ValueExternal

ETH & derivatives
Stablecoins
BTC & derivatives
Other

The section shows the operating costs that L2s pay to Ethereum.



Total cost
Avg cost per L2 UOP
Avg cost per day

This section shows how "live" the project's operators are by displaying how frequently they submit transactions of the selected type. It also highlights anomalies - significant deviations from their typical schedule.


Avg. proof subs. interval
Avg. state updates interval
Sequencer failureState validationData availabilityExit windowProposer failure
Sequencer failure
Force via L1

Users can force the sequencerA party responsible for ordering and executing transactions on the rollup. The sequencer verifies transactions, compresses the data into a block, and submits the data related to it to enable state reconstruction to Ethereum L1 as a single transaction. The data can be either transaction data or state diffs. to include a transaction by submitting a request through L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development.. If the sequencer censors or is down for for more than 14d, users can use the exit hatch to withdraw their funds.

State validation
Validity proofs (SN)

SNARKs are succinct zero knowledge proofs that ensure state correctness, but require trusted setupGeneration of a piece of data that must then be used for some cryptographic protocol to run. Generating this data requires some secret information. The "trust" comes from the fact the secret must be destroyed after the ceremony, otherwise cryptographic properties of the protocol could be broken. Once the data is generated, and the secrets are forgotten, no further participation from the creators of the ceremony is required. There are two types of trusted setups for SNARKs: (i) trusted setup per circuit where it is generated from scratch for each circuit, (ii) trusted universal setup per proving system where it can be used for several circuits..

Data availability
Onchain

All of the data needed for proof construction is published on Ethereum L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development..

Exit window
None

There is no window for users to exit in case of an unwanted upgrade since contracts are instantly upgradable.

Proposer failure
Use escape hatch

Users are able to trustlessly exit by submitting a zero knowledge proof of funds.

Term Structure
Term Structure is a
Stage 0
Appchain
ZK Rollup.

Rollup operators cannot compromise the system, but being application-specific might bring additional risk.

Term Structure provides the infrastructure for fixed-rate leverage, lending and borrowing. Arbitrary contracts are not supported.

Note:
We're still in the process of formalizing how to properly integrate appchains in the Stages framework.
The requirement for available nodeA software client that participates in the network. software is under review

Learn more about Stages
Please keep in mind that these stages do not reflect project security, this is an opinionated assessment of project maturity based on subjective criteria, created with a goal of incentivizing projects to push toward better decentralization. Each team may have taken different paths to achieve this goal.

All data required for proofs is published onchain

All the data that is used to construct the system state is published onchain in the form of cheap calldata. This ensures that it will always be available when needed.

  1. RollupFacet.sol - Etherscan source code, _commitOneBlock function
Learn more about the DA layer here: Ethereum logoEthereum
Validity proofs

Each update to the system state must be accompanied by a ZK proof that ensures that the new state was derived by correctly applying a series of valid user transactions to the previous state. These proofs are then verified on Ethereum by a smart contract.

  1. RollupFacet.sol - Etherscan source code, verifyOneBlock function
2025 July 14, 12:46 UTC
11changes

Discovery rerun on the same block number with only config-related changes.

New and verified contracts

+ Status: CREATED
contract ZkTrueUp (0x09E01425780094a9754B2bd8A3298f73ce837CF9)
+++ description: None
+ Status: CREATED
contract Verifier (0x23369A60E5A8f422E38d799eD55e7AD8Ed4A86cE)
+++ description: None
+ Status: CREATED
contract TermStructure Multisig 2 (0x23bCad9BFB1378cd45b32525B835F037b673f529)
+++ description: None
+ Status: CREATED
contract TermStructure Multisig 3 (0x2df3e912aeDe36ea5EaB06232ca3b239a40A8165)
+++ description: None
+ Status: CREATED
contract (0x3B1D7E06a1bFfD89ECd8026CF287C11F6Ec34f0D)
+++ description: None
+ Status: CREATED
contract EvacuationFacet (0x882aBFb2F6A67d36350499991638044e8Bd83a72)
+++ description: None
+ Status: CREATED
contract AccountFacet (0x8D0fc76595E42f38c771ecEE627DA5654Ca2E75A)
+++ description: None
+ Status: CREATED
contract RollupFacet (0x955cdD2E56Ca2776a101a552A318d28fe311398D)
+++ description: None
+ Status: CREATED
contract EvacuVerifier (0x9c7Df3981A89eD04588907843fe2a6c1BcCc4467)
+++ description: None
+ Status: CREATED
contract TermStructure Multisig 1 (0xa00d50A40B1635D293c87BA36503bD2504b5D818)
+++ description: None
+ Status: CREATED
contract TermStructure Multisig 4 (0xB7ef7117FfCa1956249B666D9fdBe182cFbbF5ca)
+++ description: None
2024 August 06, 11:51 UTC
6changes

Thresholds of the MS clones are increased to 4 of 6.

contract VaultMultisig (0x23bCad9BFB1378cd45b32525B835F037b673f529) {
+++ description: None
values.$multisigThreshold:
- "3 of 6 (50%)"
+ "4 of 6 (67%)"
values.getThreshold:
- 3
+ 4
}
contract InsuranceMultisig (0x2df3e912aeDe36ea5EaB06232ca3b239a40A8165) {
+++ description: None
values.$multisigThreshold:
- "3 of 6 (50%)"
+ "4 of 6 (67%)"
values.getThreshold:
- 3
+ 4
}
contract TreasuryMultisig (0xB7ef7117FfCa1956249B666D9fdBe182cFbbF5ca) {
+++ description: None
values.$multisigThreshold:
- "3 of 6 (50%)"
+ "4 of 6 (67%)"
values.getThreshold:
- 3
+ 4
}
2024 August 05, 07:56 UTC
35changes

EOA admin role and owner changed to the Multisig.

contract ZkTrueUp (0x09E01425780094a9754B2bd8A3298f73ce837CF9) {
+++ description: None
values.accessControl.ADMIN_ROLE.members.1:
- "0xa00d50A40B1635D293c87BA36503bD2504b5D818"
values.accessControl.ADMIN_ROLE.members.0:
- "0x944a0Af591E2C23a2E81fe4c10Bd9c47Cf866F4b"
+ "0xa00d50A40B1635D293c87BA36503bD2504b5D818"
values.owner:
- "0x944a0Af591E2C23a2E81fe4c10Bd9c47Cf866F4b"
+ "0xa00d50A40B1635D293c87BA36503bD2504b5D818"
}
contract VaultMultisig (0x23bCad9BFB1378cd45b32525B835F037b673f529) {
+++ description: None
values.$multisigThreshold:
- "1 of 2 (50%)"
+ "3 of 6 (50%)"
values.getOwners.5:
+ "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
values.getOwners.4:
+ "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
values.getOwners.3:
+ "0x85e500dF81F10B539E16Dd717e24C41465D10D82"
values.getOwners.2:
+ "0x50E6298795C412B26e54FdD87825Bc6ffa94B80d"
values.getOwners.1:
- "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
+ "0x83d4814307088732528A53D8DF75fd6F2f5be398"
values.getOwners.0:
- "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
+ "0x6Ed505e36B8ae1eC730d8b3F4E0125f0F1F78C44"
values.getThreshold:
- 1
+ 3
}
contract InsuranceMultisig (0x2df3e912aeDe36ea5EaB06232ca3b239a40A8165) {
+++ description: None
values.$multisigThreshold:
- "1 of 2 (50%)"
+ "3 of 6 (50%)"
values.getOwners.5:
+ "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
values.getOwners.4:
+ "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
values.getOwners.3:
+ "0x85e500dF81F10B539E16Dd717e24C41465D10D82"
values.getOwners.2:
+ "0x50E6298795C412B26e54FdD87825Bc6ffa94B80d"
values.getOwners.1:
- "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
+ "0x83d4814307088732528A53D8DF75fd6F2f5be398"
values.getOwners.0:
- "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
+ "0x6Ed505e36B8ae1eC730d8b3F4E0125f0F1F78C44"
values.getThreshold:
- 1
+ 3
}
contract TermStructureMultisig (0xa00d50A40B1635D293c87BA36503bD2504b5D818) {
+++ description: None
values.$multisigThreshold:
- "1 of 2 (50%)"
+ "4 of 6 (67%)"
values.getOwners.5:
+ "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
values.getOwners.4:
+ "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
values.getOwners.3:
+ "0x85e500dF81F10B539E16Dd717e24C41465D10D82"
values.getOwners.2:
+ "0x50E6298795C412B26e54FdD87825Bc6ffa94B80d"
values.getOwners.1:
- "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
+ "0x83d4814307088732528A53D8DF75fd6F2f5be398"
values.getOwners.0:
- "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
+ "0x6Ed505e36B8ae1eC730d8b3F4E0125f0F1F78C44"
values.getThreshold:
- 1
+ 4
}
contract TreasuryMultisig (0xB7ef7117FfCa1956249B666D9fdBe182cFbbF5ca) {
+++ description: None
values.$multisigThreshold:
- "1 of 2 (50%)"
+ "3 of 6 (50%)"
values.getOwners.5:
+ "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
values.getOwners.4:
+ "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
values.getOwners.3:
+ "0x85e500dF81F10B539E16Dd717e24C41465D10D82"
values.getOwners.2:
+ "0x50E6298795C412B26e54FdD87825Bc6ffa94B80d"
values.getOwners.1:
- "0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"
+ "0x83d4814307088732528A53D8DF75fd6F2f5be398"
values.getOwners.0:
- "0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348"
+ "0x6Ed505e36B8ae1eC730d8b3F4E0125f0F1F78C44"
values.getThreshold:
- 1
+ 3
}
2024 July 15, 09:45 UTC
1change

The roller (a function of the escrow that allows rolling loans from native termstructure to aave) is deactivated.

contract ZkTrueUp (0x09E01425780094a9754B2bd8A3298f73ce837CF9) {
+++ description: None
values.isActivatedRoller:
- true
+ false
}
2024 June 21, 06:55 UTC
21changes

Config related!

contract GnosisSafeProxy (0x23bCad9BFB1378cd45b32525B835F037b673f529) {
+++ description: None
name:
- "GnosisSafeProxy"
+ "GnosisSafe"
upgradeability.type:
- "immutable"
+ "gnosis safe"
upgradeability.masterCopy:
+ "0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552"
upgradeability.modules:
+ []
upgradeability.threshold:
+ "1 of 2 (50%)"
implementations:
+ ["0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552"]
values:
+ {"domainSeparator":"0xcbdbe6506e1cb79232f4c965204bb95931a2e6dbfe5aaf5dd3b10f93d06d404a","getChainId":1,"getOwners":["0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348","0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"],"getThreshold":1,"nonce":0,"VERSION":"1.3.0"}
}
contract GnosisSafeProxy (0x2df3e912aeDe36ea5EaB06232ca3b239a40A8165) {
+++ description: None
name:
- "GnosisSafeProxy"
+ "GnosisSafe"
upgradeability.type:
- "immutable"
+ "gnosis safe"
upgradeability.masterCopy:
+ "0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552"
upgradeability.modules:
+ []
upgradeability.threshold:
+ "1 of 2 (50%)"
implementations:
+ ["0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552"]
values:
+ {"domainSeparator":"0xa8d496ef58694c5b643be9bfdef2a52066c56fe63e93ee7b0d35bfd3c7385cd5","getChainId":1,"getOwners":["0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348","0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"],"getThreshold":1,"nonce":0,"VERSION":"1.3.0"}
}
contract GnosisSafeProxy (0xB7ef7117FfCa1956249B666D9fdBe182cFbbF5ca) {
+++ description: None
name:
- "GnosisSafeProxy"
+ "GnosisSafe"
upgradeability.type:
- "immutable"
+ "gnosis safe"
upgradeability.masterCopy:
+ "0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552"
upgradeability.modules:
+ []
upgradeability.threshold:
+ "1 of 2 (50%)"
implementations:
+ ["0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552"]
values:
+ {"domainSeparator":"0x06a4de0d5b7b1171090ba38e2dc6ef3c5e2c8219915ef5a272fad0d29f2a9c06","getChainId":1,"getOwners":["0x871679A28adDdaB762a8C6Ff010d2D9Ffa38d348","0xa7197E776F2abFCDe1Fa662aBa5A4B86a02f0F93"],"getThreshold":1,"nonce":0,"VERSION":"1.3.0"}
}

The system has a centralized operator

The operatorAn operator is the entity charged with managing a rollup and progressing its state. A rollup operator can be a centralized sequencer, proposer, prover, challenger, pauser of admin that is able to perform upgrades. is the only entity that can propose blocksAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over.. A live and trustworthy operator is vital to the health of the system.

  • MEV can be extracted if the operator exploits their centralized position and frontruns user transactions.

  1. RollupFacet.sol - Etherscan source code, onlyRole in commit, verify, execute functions

Users can force exit the system

Force exit allows the users to escape censorship by withdrawing their funds. The system allows users to force the withdrawal of funds by submitting a request directly to the contract onchain. The request must be served within a defined time period. If this does not happen, the system will halt regular operation and permit trustless withdrawal of funds.

  • Users can be censored if the operator refuses to include their transactions. However, there exists a mechanism to independently exit the system.

  1. AccountFacet.sol - Etherscan source code, forceWithdraw function
  2. Force Withdrawal and Evacuation Mode - Term Structure documentation

Regular exit

The user initiates the withdrawal by submitting a regular transaction on this chain. When the blockAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. containing that transaction is settled the funds become available for withdrawal on L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development.. ZK proofs are required to settle blocks. Finally the user submits an L1 transaction to claim the funds.

  1. AccountFacet.sol - Etherscan source code, withdraw function
  2. Withdraw - Term Structure documentation

Forced exit

If the user experiences censorship from the operatorAn operator is the entity charged with managing a rollup and progressing its state. A rollup operator can be a centralized sequencer, proposer, prover, challenger, pauser of admin that is able to perform upgrades. with regular exit they can submit their withdrawal requests directly on L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development.. The system is then obliged to service this request. Once the force operation is submitted and if the request is serviced, the operation follows the flow of a regular exit.

  1. AccountFacet.sol - Etherscan source code, forceWithdraw function
  2. Forced Withdrawal - Term Structure documentation

Emergency exit

If the enough time deadline passes and the forced exit is still ignored the user can put the system into Evacuation Mode, disallowing further state updates. In that case everybody can withdraw by submitting a zero knowledge proof of their funds with their L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development. transaction.

  • Funds can be lost if the user is unable to generate the non-trivial ZK proof for exodus withdraw.

  1. Evacuation Mode - Term Structure documentation

Flashloans on escrowed funds

Note: This section requires more research and might not present accurate information.

The protocol allows flashloans with the funds locked with the bridgeA message-passing protocol between two blockchains. At its most basic, a token bridge consists of a smart contract which can escrow funds on one side of the bridge, and instruct the release or minting of corresponding assets on the other side, but bridges could also support arbitrary messages. How these instructions are validated is a critical factor in assessing the trust assumptions of a bridge., for a fee.

  • Funds can be lost if the flashloan mechanism is implemented incorrectly.

  1. FlashloanFacet.sol - Etherscan source code, flashLoan function
A dashboard to explore contracts and permissions
Go to Disco
Disco UI Banner

Ethereum

Actors:

Can update the main verifierAn entity in a ZK-Rollup, often a smart contract, that verifies zero-knowledge proofs submitted by a prover., the evacuation verifier, can set the flash loan premium, set the half liquidation threshold, the liquidation factor, the borrow rate, the rollover fee, the withdraw protocol fee, the price feed, the stablecoin used, the minimum deposit amount and it can pause the system.

TermStructure Multisig 10xa00d…D818

A Multisig with 4/6 threshold. Owner of the protocol, meaning it can upgrade the project implementation potentially gaining access to all funds.

Operators0xeBec…14F8

Can add tokens to the system.

Committers0x0A4a…De12

Can commit blocksAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. on L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development. and revert pending (i.e. not yet executed) blocks.

Verifiers0x0A4a…De12

Can verify blocksAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. on L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development..

Executers0x0A4a…De12

Can execute blocksAn ordered list of transactions and chain-related metadata that gets bundled together and published to the L1/DA layer. Nodes execute the transactions contained within blocks to change the rollup chain’s state. Protocol rules dictate what constitutes a valid block, and invalid blocks are skipped over. on L1Layer 1 (L1) is a blockchain that is self-reliant on its validator set for its security and consensus properties. Ethereum is an example of a layer 1. Blockchains started receiving the moniker of layer 1 once layer 2 became a meaningful area of development..

TermStructure Multisig 20x23bC…f529

A Multisig with 4/6 threshold. Address collecting a portion of protocol fees. Currently set to 100% of the fees.

TermStructure Multisig 30x2df3…8165

A Multisig with 4/6 threshold. Address collecting a portion of protocol fees. Currently set to 0% of the fees.

TermStructure Multisig 40xB7ef…F5ca

A Multisig with 4/6 threshold. Address collecting a portion of protocol fees. Currently set to 0% of the fees.

A dashboard to explore contracts and permissions
Go to Disco
Disco UI Banner

Ethereum

VerifierAn entity in a ZK-Rollup, often a smart contract, that verifies zero-knowledge proofs submitted by a prover. contract used to verify the SNARKShort for "succinct non-interactive argument of knowledge", a SNARK is a widely used type of zero-knowledge proof that is short and fast to verify. Different kinds of SNARKs are usually systematized by proof size, verification time, and type of setup. The most famous SNARKs are Groth16, PLONK/Marlin, Bulletproofs, and STARKs. proofs.

The current deployment carries some associated risks:

  • Funds can be stolen if a contract receives a malicious code upgrade. There is no delay on code upgrades (CRITICAL).