Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion OpenCapTable-v34/daml.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
sdk-version: 3.4.10
name: OpenCapTable-v34
source: daml
version: 0.0.16
version: 0.0.17
build-options:
- -Wno-crypto-text-is-alpha
- --typecheck-upgrades=no
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Fairmint.OpenCapTable.Types.Core (Context)
import Fairmint.OpenCapTable.Types.Validation (validateNonEmptyStringsArray)
import Fairmint.OpenCapTable.Types.Monetary (OcfMonetary, validateOcfMonetary)
import Fairmint.OpenCapTable.Types.Stock (OcfSecurityExemption, validateOcfSecurityExemption)
import Fairmint.OpenCapTable.Types.Vesting (OcfTerminationWindow, OcfCompensationType(..), OcfVesting, validateOcfTerminationWindow, validateOcfVesting)
import Fairmint.OpenCapTable.Types.Vesting (OcfTerminationWindow, OcfCompensationType(..), OcfVesting, validateOcfTerminationWindow, validateOcfVesting, validateOcfVestingsWithinQuantity)
import Fairmint.Shared.TypeHelpers (validateOptionalText)


Expand Down Expand Up @@ -96,6 +96,7 @@ validateEquityCompensationIssuanceOcfData d =
all validateOcfSecurityExemption d.security_law_exemptions &&
validateNonEmptyStringsArray d.comments &&
all validateOcfVesting d.vestings &&
validateOcfVestingsWithinQuantity d.quantity d.vestings &&
all validateOcfTerminationWindow d.termination_exercise_windows &&
-- Optional Text values, if present, must be non-empty
validateOptionalText d.consideration_text &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Fairmint.OpenCapTable.Types.Core (Context)
import Fairmint.OpenCapTable.Types.Validation (validateNonEmptyStringsArray)
import Fairmint.OpenCapTable.Types.Monetary (OcfMonetary, validateOcfMonetary)
import Fairmint.OpenCapTable.Types.Stock (OcfSecurityExemption, OcfShareNumberRange, validateOcfSecurityExemption, validateOcfShareNumberRangesForQuantity)
import Fairmint.OpenCapTable.Types.Vesting (OcfVesting, validateOcfVesting)
import Fairmint.OpenCapTable.Types.Vesting (OcfVesting, validateOcfVesting, validateOcfVestingsWithinQuantity)
import Fairmint.Shared.TypeHelpers (validateOptionalText)


Expand Down Expand Up @@ -92,6 +92,7 @@ validateOcfStockIssuanceData d =
all validateOcfSecurityExemption d.security_law_exemptions &&
validateOcfShareNumberRangesForQuantity d.quantity d.share_numbers_issued &&
all validateOcfVesting d.vestings &&
validateOcfVestingsWithinQuantity d.quantity d.vestings &&
validateNonEmptyStringsArray d.comments &&
-- Arrays per schema: schema requires at least 1 legend, but we allow empty
validateNonEmptyStringsArray d.stock_legend_ids &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ module Fairmint.OpenCapTable.OCF.WarrantIssuance where
import Fairmint.OpenCapTable.Types.Core (Context)
import Fairmint.OpenCapTable.Types.Validation (validateNonEmptyStringsArray)
import Fairmint.OpenCapTable.Types.Monetary (OcfMonetary, validateOcfMonetary)
import Fairmint.OpenCapTable.Types.Stock (OcfQuantitySourceType, OcfSecurityExemption, validateOcfSecurityExemption)
import Fairmint.OpenCapTable.Types.Vesting (OcfVesting, validateOcfVesting)
import Fairmint.OpenCapTable.Types.Stock (OcfQuantitySourceType, OcfSecurityExemption, ocfQuantityUpperBound, validateOcfSecurityExemption)
import Fairmint.OpenCapTable.Types.Vesting (OcfVesting, validateOcfVesting, validateOcfVestingsWithinQuantity)
import Fairmint.OpenCapTable.Types.Conversion (OcfConversionTrigger, validateOcfConversionTrigger)
import Fairmint.Shared.TypeHelpers (validateOptionalText)
import DA.List (unique)
Expand Down Expand Up @@ -102,4 +102,7 @@ validateOcfWarrantIssuanceDataTx d =
-- If vestings array present, enforce items are valid and minItems >= 1
(case d.vestings of
[] -> True
xs -> all validateOcfVesting xs)
xs -> all validateOcfVesting xs) &&
(case ocfQuantityUpperBound d.quantity d.quantity_source of
Some quantity -> validateOcfVestingsWithinQuantity quantity d.vestings
None -> True)
7 changes: 7 additions & 0 deletions OpenCapTable-v34/daml/Fairmint/OpenCapTable/Types/Stock.daml
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,13 @@ data OcfQuantitySourceType =
| OcfQuantityInstrumentMin
deriving (Eq, Show)

ocfQuantityUpperBound : Optional Decimal -> Optional OcfQuantitySourceType -> Optional Decimal
ocfQuantityUpperBound quantity quantitySource =
case quantitySource of
Some OcfQuantityInstrumentFixed -> quantity
Some OcfQuantityInstrumentMax -> quantity
_ -> None

-- Enum - File Type
-- File types within an OCF manifest
-- OCF: https://raw.githubusercontent.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/main/schema/enums/FileType.schema.json
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,13 @@ data OcfVesting = OcfVesting
validateOcfVesting : OcfVesting -> Bool
validateOcfVesting v = v.amount > (0.0)

ocfVestingAmountTotal : [OcfVesting] -> Decimal
ocfVestingAmountTotal = foldl (\total vesting -> total + vesting.amount) 0.0

validateOcfVestingsWithinQuantity : Decimal -> [OcfVesting] -> Bool
validateOcfVestingsWithinQuantity quantity vestings =
null vestings || ocfVestingAmountTotal vestings <= quantity

-- Enum - Compensation Type
-- Equity compensation instrument type
-- OCF: https://raw.githubusercontent.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/main/schema/enums/CompensationType.schema.json
Expand Down
2 changes: 1 addition & 1 deletion Test/daml.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ dependencies:
- daml-stdlib
- daml-script
data-dependencies:
- ../OpenCapTable-v34/.daml/dist/OpenCapTable-v34-0.0.16.dar
- ../OpenCapTable-v34/.daml/dist/OpenCapTable-v34-0.0.17.dar
build-options:
- -Wno-template-interface-depends-on-daml-script
6 changes: 4 additions & 2 deletions Test/daml/OpenCapTable/TestVestingAcceleration.daml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module OpenCapTable.TestVestingAcceleration where
import Fairmint.OpenCapTable.OCF.EquityCompensationIssuance
import Fairmint.OpenCapTable.OCF.VestingAcceleration
import Fairmint.OpenCapTable.Types.Monetary (OcfMonetary(..))
import Fairmint.OpenCapTable.Types.Vesting (OcfCompensationType(..))
import Fairmint.OpenCapTable.Types.Vesting (OcfCompensationType(..), OcfVesting(..))
import qualified Fairmint.OpenCapTable.CapTable as CT
import OpenCapTable.Setup
import OpenCapTable.TestHelpers (addDefaultStakeholder)
Expand Down Expand Up @@ -35,7 +35,9 @@ createEquityCompensationIssuance issuer capTableCid securityId quantity =
exercise_price = Some (OcfMonetary with amount = 1.25, currency = "USD")
expiration_date = Some (DT.time (DA.date 2034 Jan 01) 0 0 0)
termination_exercise_windows = []
vestings = []
vestings = [OcfVesting with
date = DT.time (DA.date 2030 Jan 01) 0 0 0
amount = quantity]
vesting_terms_id = None
comments = []]
edits = []
Expand Down
Loading
Loading