Skip to content

Commit

Permalink
Switch back to exerciseTimestamp
Browse files Browse the repository at this point in the history
  • Loading branch information
neodaoist committed Nov 16, 2022
1 parent d15ad9a commit a37dfb2
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 108 deletions.
99 changes: 51 additions & 48 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,53 +1,56 @@
OptionSettlementTest:testAddOptionsToExistingClaim() (gas: 452822)
OptionSettlementTest:testDecodeTokenId() (gas: 487864)
OptionSettlementTest:testEncodeTokenId() (gas: 487487)
OptionSettlementTest:testEventExercise() (gas: 339756)
OptionSettlementTest:testEventNewOptionType() (gas: 121967)
OptionSettlementTest:testEventRedeem() (gas: 297455)
OptionSettlementTest:testEventSweepFeesWhenFeesAccruedForExercise() (gas: 1198061)
OptionSettlementTest:testEventSweepFeesWhenFeesAccruedForWrite() (gas: 1171855)
OptionSettlementTest:testEventWriteWhenExistingClaim() (gas: 322271)
OptionSettlementTest:testEventWriteWhenNewClaim() (gas: 300610)
OptionSettlementTest:testExerciseBeforeExpiry() (gas: 332455)
OptionSettlementTest:testExerciseIncompleteExercise() (gas: 352606)
OptionSettlementTest:testExerciseMultipleWriteSameChain() (gas: 464301)
OptionSettlementTest:testExerciseWithDifferentDecimals() (gas: 442918)
OptionSettlementTest:testFailAssignMultipleBuckets() (gas: 734756)
OptionSettlementTest:testAddOptionsToExistingClaim() (gas: 452638)
OptionSettlementTest:testDecodeTokenId() (gas: 487512)
OptionSettlementTest:testEncodeTokenId() (gas: 487113)
OptionSettlementTest:testEventExercise() (gas: 340796)
OptionSettlementTest:testEventNewOptionType() (gas: 124307)
OptionSettlementTest:testEventRedeem() (gas: 299522)
OptionSettlementTest:testEventSweepFeesWhenFeesAccruedForExercise() (gas: 1206709)
OptionSettlementTest:testEventSweepFeesWhenFeesAccruedForWrite() (gas: 1175972)
OptionSettlementTest:testEventWriteWhenExistingClaim() (gas: 322146)
OptionSettlementTest:testEventWriteWhenNewClaim() (gas: 300701)
OptionSettlementTest:testExerciseBeforeExpiry() (gas: 333473)
OptionSettlementTest:testExerciseIncompleteExercise() (gas: 354620)
OptionSettlementTest:testExerciseMultipleWriteSameChain() (gas: 467341)
OptionSettlementTest:testExerciseWithDifferentDecimals() (gas: 405077)
OptionSettlementTest:testFailAssignMultipleBuckets() (gas: 738993)
OptionSettlementTest:testFailGetClaimForTokenId() (gas: 392082)
OptionSettlementTest:testFailRandomAssignment() (gas: 1198722)
OptionSettlementTest:testFailRandomAssignment() (gas: 1204419)
OptionSettlementTest:testFuzzDecodeTokenId(uint256,uint256) (runs: 256, μ: 10844, ~: 10844)
OptionSettlementTest:testFuzzEncodeTokenId(uint256,uint256) (runs: 256, μ: 10792, ~: 10792)
OptionSettlementTest:testFuzzExercise(uint112,uint112) (runs: 256, μ: 399750, ~: 403120)
OptionSettlementTest:testFuzzNewOptionType(uint96,uint96,uint40,uint40) (runs: 256, μ: 123624, ~: 123624)
OptionSettlementTest:testFuzzRedeem(uint112,uint112) (runs: 256, μ: 390496, ~: 394080)
OptionSettlementTest:testFuzzEncodeTokenId(uint256,uint256) (runs: 256, μ: 10770, ~: 10770)
OptionSettlementTest:testFuzzExercise(uint112,uint112) (runs: 256, μ: 402658, ~: 406028)
OptionSettlementTest:testFuzzNewOptionType(uint96,uint96,uint40,uint40) (runs: 256, μ: 124702, ~: 124702)
OptionSettlementTest:testFuzzRedeem(uint112,uint112) (runs: 256, μ: 393471, ~: 397055)
OptionSettlementTest:testFuzzWrite(uint112) (runs: 256, μ: 318375, ~: 318375)
OptionSettlementTest:testFuzzWriteExerciseRedeem(uint32) (runs: 256, μ: 11606381, ~: 11653036)
OptionSettlementTest:testGetOptionForTokenId() (gas: 124564)
OptionSettlementTest:testIsOptionInitialized() (gas: 125250)
OptionSettlementTest:testRedeemNotExercised() (gas: 300939)
OptionSettlementTest:testRevertExerciseWhenAfterExpiry() (gas: 308496)
OptionSettlementTest:testRevertExerciseWhenAtExpiry() (gas: 308437)
OptionSettlementTest:testRevertExerciseWhenBeforeExerciseTimestamp() (gas: 307999)
OptionSettlementTest:testRevertExerciseWhenInvalidOptionId() (gas: 294480)
OptionSettlementTest:testRevertNewOptionTypeWhenAssetsAreTheSame() (gas: 17709)
OptionSettlementTest:testRevertNewOptionTypeWhenExerciseWindowTooShort() (gas: 16888)
OptionSettlementTest:testRevertNewOptionTypeWhenExpiryTooSoon() (gas: 18816)
OptionSettlementTest:testRevertNewOptionTypeWhenOptionsTypeExists() (gas: 120738)
OptionSettlementTest:testRevertNewOptionTypeWhenTotalSuppliesAreTooLowToExercise() (gas: 44586)
OptionSettlementTest:testRevertRedeemClaimTooSoon() (gas: 298684)
OptionSettlementTest:testRevertRedeemWhenBalanceTooLow() (gas: 318713)
OptionSettlementTest:testRevertRedeemWhenInvalidClaim() (gas: 10625)
OptionSettlementTest:testFuzzWriteExerciseRedeem(uint32) (runs: 256, μ: 11635799, ~: 11692076)
OptionSettlementTest:testGetOptionForTokenId() (gas: 124631)
OptionSettlementTest:testIsOptionInitialized() (gas: 124854)
OptionSettlementTest:testRedeemNotExercised() (gas: 302961)
OptionSettlementTest:testRevertExerciseBeforeExcercise() (gas: 401588)
OptionSettlementTest:testRevertExerciseWhenCallerHoldsInsufficientOptions() (gas: 306381)
OptionSettlementTest:testRevertExerciseWhenExerciseTooEarly() (gas: 308003)
OptionSettlementTest:testRevertExerciseWhenExpiredOption() (gas: 427764)
OptionSettlementTest:testRevertExerciseWhenInvalidOption() (gas: 294499)
OptionSettlementTest:testRevertNewOptionTypeWhenExerciseWindowTooShort() (gas: 19267)
OptionSettlementTest:testRevertNewOptionTypeWhenExpiryTooSoon() (gas: 20652)
OptionSettlementTest:testRevertNewOptionTypeWhenInvalidAssets() (gas: 20857)
OptionSettlementTest:testRevertNewOptionTypeWhenOptionsTypeExists() (gas: 22574)
OptionSettlementTest:testRevertNewOptionTypeWhenTotalSuppliesAreTooLowToExercise() (gas: 48813)
OptionSettlementTest:testRevertRedeemWhenCallerDoesNotOwnClaimId() (gas: 318703)
OptionSettlementTest:testRevertRedeemWhenClaimTooSoon() (gas: 298702)
OptionSettlementTest:testRevertRedeemWhenInvalidClaim() (gas: 10603)
OptionSettlementTest:testRevertSetFeeToWhenNotCurrentFeeTo() (gas: 11831)
OptionSettlementTest:testRevertSetFeeToWhenZeroAddress() (gas: 11600)
OptionSettlementTest:testRevertUnderlyingWhenNoOptionIsInitialized() (gas: 11735)
OptionSettlementTest:testRevertWriteExpiredOption() (gas: 16607)
OptionSettlementTest:testRevertWriteWhenAmountWrittenIsZero() (gas: 10924)
OptionSettlementTest:testRevertWriteWhenClaimIdDoesNotEncodeOptionId() (gas: 11691)
OptionSettlementTest:testRevertWriteWhenInvalidOption() (gas: 11428)
OptionSettlementTest:testRevertWriteWhenWriterDoesNotOwnClaim() (gas: 302872)
OptionSettlementTest:testSetFeeTo() (gas: 15777)
OptionSettlementTest:testRevertSetFeeToWhenZeroAddress() (gas: 11689)
OptionSettlementTest:testRevertUnderlyingWhenTokenNotFound() (gas: 11757)
OptionSettlementTest:testRevertUriWhenTokenNotFound() (gas: 18617)
OptionSettlementTest:testRevertWriteExpiredOption() (gas: 16631)
OptionSettlementTest:testRevertWriteWhenAmountWrittenCannotBeZero() (gas: 10926)
OptionSettlementTest:testRevertWriteWhenCallerDoesNotOwnClaimId() (gas: 302895)
OptionSettlementTest:testRevertWriteWhenEncodedOptionIdInClaimIdDoesNotMatchProvidedOptionId() (gas: 11624)
OptionSettlementTest:testRevertWriteWhenExpiredOption() (gas: 295661)
OptionSettlementTest:testRevertWriteWhenInvalidOption() (gas: 13628)
OptionSettlementTest:testSetFeeTo() (gas: 15841)
OptionSettlementTest:testTokenURI() (gas: 480902)
OptionSettlementTest:testUnderlyingAfterExercise() (gas: 371364)
OptionSettlementTest:testUnderlyingWhenNotExercised() (gas: 302719)
OptionSettlementTest:testUriFailsWithTokenIdEncodingNonexistantOptionType() (gas: 18574)
OptionSettlementTest:testWriteMultipleWriteSameOptionType() (gas: 431176)
OptionSettlementTest:testUnderlyingAfterExercise() (gas: 375491)
OptionSettlementTest:testUnderlyingForFungibleOptionToken() (gas: 31130)
OptionSettlementTest:testUnderlyingWhenNotExercised() (gas: 304697)
OptionSettlementTest:testWriteMultipleWriteSameOptionType() (gas: 431154)
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ event NewOptionType(
address indexed underlyingAsset,
uint96 exerciseAmount,
uint96 underlyingAmount,
uint40 earliestExerciseTimestamp,
uint40 exerciseTimestamp,
uint40 expiryTimestamp
);
```
Expand Down Expand Up @@ -314,7 +314,7 @@ unique hash `keccak256(abi.encode(Option memory))` where `settlementSeed` is set
```solidity
struct Option {
address underlyingAsset;
uint40 earliestExerciseTimestamp;
uint40 exerciseTimestamp;
uint40 expiryTimestamp;
address exerciseAsset;
uint96 underlyingAmount;
Expand Down
19 changes: 9 additions & 10 deletions src/OptionSettlementEngine.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import "solmate/utils/SafeTransferLib.sol";
import "solmate/utils/FixedPointMathLib.sol";
import "./TokenURIGenerator.sol";

// TODO decide on exerciseTimestamp earliestExerciseTimestamp
// TODO fix 2 broken bucketing-related tests -- testFailAssignMultipleBuckets and testFailRandomAssignment
// TODO fix broken accessor-related test -- testFailGetClaimForTokenId

Expand Down Expand Up @@ -180,7 +179,7 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
underlyingSymbol: ERC20(optionInfo.underlyingAsset).symbol(),
exerciseAsset: optionInfo.exerciseAsset,
exerciseSymbol: ERC20(optionInfo.exerciseAsset).symbol(),
earliestExerciseTimestamp: optionInfo.earliestExerciseTimestamp,
exerciseTimestamp: optionInfo.exerciseTimestamp,
expiryTimestamp: optionInfo.expiryTimestamp,
underlyingAmount: optionInfo.underlyingAmount,
exerciseAmount: optionInfo.exerciseAmount,
Expand Down Expand Up @@ -259,7 +258,7 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
uint96 underlyingAmount,
address exerciseAsset,
uint96 exerciseAmount,
uint40 earliestExerciseTimestamp,
uint40 exerciseTimestamp,
uint40 expiryTimestamp
) external returns (uint256 optionId) {
// Check that a duplicate option type doesn't exist
Expand All @@ -271,7 +270,7 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
underlyingAmount,
exerciseAsset,
exerciseAmount,
earliestExerciseTimestamp,
exerciseTimestamp,
expiryTimestamp,
uint160(0),
uint96(0)
Expand All @@ -292,8 +291,8 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
}

// Ensure the exercise window is at least 24 hours
if (expiryTimestamp < (earliestExerciseTimestamp + 1 days)) {
revert ExerciseWindowTooShort(earliestExerciseTimestamp);
if (expiryTimestamp < (exerciseTimestamp + 1 days)) {
revert ExerciseWindowTooShort(exerciseTimestamp);
}

// The exercise and underlying assets can't be the same
Expand All @@ -315,7 +314,7 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
underlyingAmount: underlyingAmount,
exerciseAsset: exerciseAsset,
exerciseAmount: exerciseAmount,
earliestExerciseTimestamp: earliestExerciseTimestamp,
exerciseTimestamp: exerciseTimestamp,
expiryTimestamp: expiryTimestamp,
settlementSeed: optionKey,
nextClaimNum: 1
Expand All @@ -327,7 +326,7 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
underlyingAsset,
exerciseAmount,
underlyingAmount,
earliestExerciseTimestamp,
exerciseTimestamp,
expiryTimestamp,
1
);
Expand Down Expand Up @@ -442,8 +441,8 @@ contract OptionSettlementEngine is ERC1155, IOptionSettlementEngine {
revert ExpiredOption(optionId, optionRecord.expiryTimestamp);
}
// Require that we have reached the exercise timestamp
if (optionRecord.earliestExerciseTimestamp >= block.timestamp) {
revert ExerciseTooEarly(optionId, optionRecord.earliestExerciseTimestamp);
if (optionRecord.exerciseTimestamp >= block.timestamp) {
revert ExerciseTooEarly(optionId, optionRecord.exerciseTimestamp);
}

if (this.balanceOf(msg.sender, optionId) < amount) {
Expand Down
4 changes: 2 additions & 2 deletions src/TokenURIGenerator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ library TokenURIGenerator {
// The symbol of the underlying asset
string exerciseSymbol;
// The timestamp after which this option may be exercised
uint40 earliestExerciseTimestamp;
uint40 exerciseTimestamp;
// The timestamp before which this option must be exercised
uint40 expiryTimestamp;
// The amount of the underlying asset contained within an option contract of this type
Expand Down Expand Up @@ -160,7 +160,7 @@ library TokenURIGenerator {
return string(
abi.encodePacked(
"<text x='16px' y='236px' font-size='14' letter-spacing='0.01em' fill='#fff' font-family='Helvetica'>EXERCISE DATE</text>",
_generateTimestampString(params.earliestExerciseTimestamp, 16, 260),
_generateTimestampString(params.exerciseTimestamp, 16, 260),
"<text x='200px' y='236px' font-size='14' letter-spacing='0.01em' fill='#fff' font-family='Helvetica'>EXPIRY DATE</text>",
_generateTimestampString(params.expiryTimestamp, 200, 260)
)
Expand Down
12 changes: 5 additions & 7 deletions src/interfaces/IOptionSettlementEngine.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ interface IOptionSettlementEngine {
* @param underlyingAsset The contract address of the underlying asset.
* @param exerciseAmount The amount of the exercise asset to be exercised.
* @param underlyingAmount The amount of the underlying asset in the option.
* @param earliestExerciseTimestamp The timestamp for exercising the option.
* @param exerciseTimestamp The timestamp for exercising the option.
* @param expiryTimestamp The expiry timestamp of the option.
* @param nextClaimNum The next claim ID.
*/
Expand All @@ -40,7 +40,7 @@ interface IOptionSettlementEngine {
address indexed underlyingAsset,
uint96 exerciseAmount,
uint96 underlyingAmount,
uint40 earliestExerciseTimestamp,
uint40 exerciseTimestamp,
uint40 expiryTimestamp,
uint96 nextClaimNum
);
Expand Down Expand Up @@ -233,8 +233,8 @@ interface IOptionSettlementEngine {
address exerciseAsset;
/// @param exerciseAmount The amount of the exercise asset required to exercise this option
uint96 exerciseAmount;
/// @param earliestExerciseTimestamp The timestamp after which this option may be exercised
uint40 earliestExerciseTimestamp;
/// @param exerciseTimestamp The timestamp after which this option may be exercised
uint40 exerciseTimestamp;
/// @param expiryTimestamp The timestamp before which this option must be exercised
uint40 expiryTimestamp;
/// @param settlementSeed Random seed created at the time of option type creation
Expand Down Expand Up @@ -300,8 +300,6 @@ interface IOptionSettlementEngine {
*/
function option(uint256 tokenId) external view returns (Option memory optionInfo);

// TODO review and clarify

/**
* @notice Returns OptionLotClaim struct details about a given tokenId if that token is a
* claim NFT.
Expand Down Expand Up @@ -348,7 +346,7 @@ interface IOptionSettlementEngine {
uint96 underlyingAmount,
address exerciseAsset,
uint96 exerciseAmount,
uint40 earliestExerciseTimestamp,
uint40 exerciseTimestamp,
uint40 expiryTimestamp
) external returns (uint256 optionId);

Expand Down
Loading

0 comments on commit a37dfb2

Please sign in to comment.