Wildcat Protocol Documentation
  • The Wildcat Protocol
  • Overview
    • The Elevator Pitch
    • Whitepaper
    • FAQs
  • Using Wildcat
    • Terminology
    • Onboarding
    • Day-To-Day Usage
      • Borrowers
      • Lenders
      • Market Access Via Policies/Hooks
      • The Sentinel
    • Protocol Usage Fees
    • Delinquency
  • Technical Overview
    • Security/Developer Dives
      • The Scale Factor
      • Core Behaviour
      • V1 -> V2 Changelog
      • Known Issues
      • Hooks
        • How Hooks Work
        • Access Control Hooks
        • Fixed Term Loan Hooks
    • Function/Event Signatures
      • /access
        • AccessControlHooks.sol
        • IRoleProvider.sol
        • MarketConstraintHooks.sol
      • /interfaces
        • IHooks.sol
        • IMarketEventsAndErrors.sol
        • IWildcatArchController.sol
        • IWildcatSanctionsEscrow.sol
        • IWildcatSanctionsSentinel.sol
      • /market
        • WildcatMarketConfig.sol
        • WildcatMarketToken.sol
        • WildcatMarketWithdrawals.sol
        • WildcatMarketBase.sol
      • /spherex
        • ISphereXEngine.sol
        • ISphereXProtectedRegisteredBase.sol
        • SphereXConfig.sol
      • HooksFactory.sol
      • IHooksFactory.sol
      • WildcatArchController.sol
      • WildcatSanctionsEscrow.sol
      • WildcatSanctionsSentinel.sol
    • Protocol Structs
    • Contract Deployments
  • Security Measures
    • Code Security Reviews
    • SphereX Protection
    • Bug Bounty Program
  • Legal
    • Wildcat Terms Of Use
    • Risk Disclosure Statement
    • Template MLA
    • Privacy Policy
Powered by GitBook
On this page
  • Lens
  • Market Deployment
  • CREATE2 Restrictions
  • Name/Symbol Length
  • Markets
  • Accounts
  • Handling Of Sanctioned Accounts
  • Withdrawal Batch Rounding
  • Token Rescue Function
  • Market Closure
  • ReentrancyGuard
  • APR/Reserve Ratio Setters
  • Miscellaneous
  • Market Control
  1. Technical Overview
  2. Security/Developer Dives

V1 -> V2 Changelog

If you have previously reviewed the Wildcat V1 codebase, these are the major changes made for V2.

Lens

Removed the lens contracts from the core protocol repository.

Market Deployment

CREATE2 Restrictions

Borrowers are no longer restricted to deploying one market per combination of (asset, name, symbol), which was an issue when a borrower needed to close and recreate an existing market.

When deploying a market, the borrower can now provide an arbitrary salt in the style of 0age's ImmutableCreate2Factory, where the first 20 bytes must either be zero or match the borrower's address, and the remaining 12 bytes can be any value so long as the full salt has not already been used.

Name/Symbol Length

Increased maximum supported name/symbol length for underlying contract from 32 to 63 - prefix.length. The name/symbol queries now support arbitrary length strings; once combined with their prefixes, each must fit into two slots, with one byte reserved for the string length.

Markets

Accounts

  • Accounts no longer have a role field, their ability to access various functions (other than borrower-only ones) is not restricted within the market itself, this is delegated to the market's hooks.

Handling Of Sanctioned Accounts

  • Removed stunningReversal because accounts no longer have roles marking them as sanctioned.

  • Market tokens are forced into a withdrawal batch rather than being transferred to an escrow when an account is marked as sanctioned. Withdrawal execution on a sanctioned account still transfers the underlying assets to the corresponding escrow.

  • Functions which are not accessible to sanctioned entities no longer fail gracefully (in V1 they would block the account rather than revert). They now revert with an AccountBlocked error when the account is sanctioned.

Withdrawal Batch Rounding

Normalised values for withdrawal batch payments are now rounded down rather than up to prevent a bug where closed markets could have their last withdrawal batch become uncloseable due to underpayment by a few wei.

Token Rescue Function

For assets other than the market token itself or the underlying asset, ERC20 tokens sent to the contract can be recovered by the borrower.

Market Closure

  • When a borrower closes a market that has pending withdrawals or unpaid withdrawal batches, rather than reverting, the market now steps through the list of unpaid batches and closes them after transferring all remaining debt from the borrower.

  • closeMarket now callable by borrower rather than controller.

ReentrancyGuard

The ReentrancyGuard now uses transient storage, using a modified version of 0age's ReentrancyGuard from Seaport.

APR/Reserve Ratio Setters

  • Removed setAnnualInterestBips and setReserveRatioBips

  • Added setAnnualInterestAndReserveRatioBips

  • Now callable by borrower rather than controller

Miscellaneous

Replaced most of the remaining ABI decoders/encoders for calls and large structs with manual assembly coder functions.

  • Custom encoder for writing MarketState to storage.

  • Custom decoder for constructor parameters and factory call.

  • Custom encoders for all sentinel calls in market.

  • Custom name/symbol query functions

  • Custom state initialisation in constructor, only touching slots that are actually initialised.

Market Control

Market controllers have been removed in favour of borrower-controlled markets with hooks that can impose their own restrictions. By default, the market itself does not restrict basic access to the market.

PreviousCore BehaviourNextKnown Issues

Last updated 8 months ago