Skip to main content



Factory contract to create and register new instances of perpetual contracts. Responsible for constraining the parameters used to construct a new perpetual. This creator contains a number of constraints that are applied to newly created contract. These constraints can evolve over time and are initially constrained to conservative values in this first iteration. Technically there is nothing in the Perpetual contract requiring these constraints. However, because createPerpetual() is intended to be the only way to create valid financial contracts that are registered with the DVM (via _registerContract), we can enforce deployment configurations here.


constructor(address _finderAddress, address _tokenFactoryAddress, address _timerAddress) (public)

Constructs the Perpetual contract.


  • _finderAddress: UMA protocol Finder used to discover other protocol contracts.
  • _tokenFactoryAddress: ERC20 token factory used to deploy synthetic token instances.
  • _timerAddress: Contract that stores the current time in a testing environment.
createPerpetual(struct PerpetualCreator.Params params, struct ConfigStoreInterface.ConfigSettings configSettings) → address (public)

Creates an instance of perpetual and registers it within the registry.


  • params: is a ConstructorParams object from Perpetual.
_getSyntheticDecimals(address _collateralAddress) → uint8 decimals (public)
_preEntranceCheck() (internal)
_preEntranceSet() (internal)
_postEntranceReset() (internal)
_startReentrantGuardDisabled() (internal)
_endReentrantGuardDisabled() (internal)
setCurrentTime(uint256 time) (external)

Sets the current time.

Will revert if not running in test mode.


  • time: timestamp to set current Testable time to.
getCurrentTime() → uint256 (public)

Gets the current time. Will return the last time set in setCurrentTime if running in test mode. Otherwise, it will return the block timestamp.

_requireWhitelistedCollateral(address collateralAddress) (internal)
_registerContract(address[] parties, address contractToRegister) (internal)


CreatedPerpetual(address perpetualAddress, address deployerAddress)
CreatedConfigStore(address configStoreAddress, address ownerAddress)



Prevents a contract from calling itself, directly or indirectly. Calling a nonReentrant function from another nonReentrant function is not supported. It is possible to prevent this from happening by making the nonReentrant function external, and making it call a private function that does the actual state modification.


Designed to prevent a view-only method from being re-entered during a call to a nonReentrant() state-changing method.


Reverts if not running in test mode.