Skip to content
Open
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.17
version: 0.0.18
build-options:
- -Wno-crypto-text-is-alpha
- --typecheck-upgrades=no
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.17.dar
- ../OpenCapTable-v34/.daml/dist/OpenCapTable-v34-0.0.18.dar
build-options:
- -Wno-template-interface-depends-on-daml-script
77 changes: 60 additions & 17 deletions Test/daml/OpenCapTable/TestIssuerAuthorizedShares.daml
Original file line number Diff line number Diff line change
Expand Up @@ -133,44 +133,87 @@ testIssuerAuthorizedSharesAdjustmentCannotDropBelowStockClasses = script do
edits = []
deletes = []

testSameDateLowerIssuerAuthorizedSharesAdjustmentWins = script do
testConflictingSameOcfDateIssuerAuthorizedSharesAdjustmentsFail = script do
TestOcp{issuer, cap_table} <- setupTestOcp
capTableLimited <- setIssuerAuthorizedShares issuer cap_table 100.0
(capTableWithClass, _) <- setupStockClassWith issuer capTableLimited (limitedStockClass "SC_ISSUER_SAME_DATE" 100.0)
result <- submit issuer do
exerciseCmd capTableWithClass CT.UpdateCapTable with
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0

submitMustFail issuer do
exerciseCmd cap_table CT.UpdateCapTable with
creates =
[ CT.OcfCreateIssuerAuthorizedSharesAdjustment (issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_LOW" 100.0)
, CT.OcfCreateIssuerAuthorizedSharesAdjustment (issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_HIGH" 150.0)
[ CT.OcfCreateIssuerAuthorizedSharesAdjustment ((issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_LOW" 100.0) with date = morning)
, CT.OcfCreateIssuerAuthorizedSharesAdjustment ((issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_HIGH" 150.0) with date = evening)
]
edits = []
deletes = []

submitMustFail issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateStockClass (limitedStockClass "SC_ISSUER_SAME_DATE_EXTRA" 50.0)]
testIdenticalSameOcfDateIssuerAuthorizedSharesAdjustmentsSucceed = script do
TestOcp{issuer, cap_table} <- setupTestOcp
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0

_ <- submit issuer do
exerciseCmd cap_table CT.UpdateCapTable with
creates =
[ CT.OcfCreateIssuerAuthorizedSharesAdjustment ((issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_FIRST" 150.0) with date = morning)
, CT.OcfCreateIssuerAuthorizedSharesAdjustment ((issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_SECOND" 150.0) with date = evening)
]
edits = []
deletes = []
pure ()

testSameDateLowerIssuerAuthorizedSharesAdjustmentWinsWithReversedCreateOrder = script do
testIssuerAuthorizedAdjustmentAppliesForEntireOcfDate = script do
TestOcp{issuer, cap_table} <- setupTestOcp
capTableLimited <- setIssuerAuthorizedShares issuer cap_table 100.0
(capTableWithClass, _) <- setupStockClassWith issuer capTableLimited (limitedStockClass "SC_ISSUER_SAME_DATE_REVERSED" 100.0)
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0
let stockClass = (limitedStockClass "SC_ISSUER_SAME_OCF_DATE" 150.0) with
board_approval_date = Some morning
let adjustment = (issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_OCF_DATE" 150.0) with
date = evening

_ <- submit issuer do
exerciseCmd capTableLimited CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClass stockClass
, CT.OcfCreateIssuerAuthorizedSharesAdjustment adjustment
]
edits = []
deletes = []
pure ()

testIssuerAdjustmentConflictValidationUsesFinalState = script do
TestOcp{issuer, cap_table} <- setupTestOcp
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0
let firstId = "TX_ISSUER_FINAL_STATE_FIRST"
let secondId = "TX_ISSUER_FINAL_STATE_SECOND"
let first = (issuerAuthorizedSharesAdjustment firstId 150.0) with date = morning
let second = (issuerAuthorizedSharesAdjustment secondId 150.0) with date = evening
let conflictingEdit = second with new_shares_authorized = 200.0

result <- submit issuer do
exerciseCmd capTableWithClass CT.UpdateCapTable with
exerciseCmd cap_table CT.UpdateCapTable with
creates =
[ CT.OcfCreateIssuerAuthorizedSharesAdjustment (issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_HIGH_FIRST" 150.0)
, CT.OcfCreateIssuerAuthorizedSharesAdjustment (issuerAuthorizedSharesAdjustment "TX_ISSUER_SAME_DATE_LOW_SECOND" 100.0)
[ CT.OcfCreateIssuerAuthorizedSharesAdjustment first
, CT.OcfCreateIssuerAuthorizedSharesAdjustment second
]
edits = []
deletes = []

submitMustFail issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateStockClass (limitedStockClass "SC_ISSUER_SAME_DATE_REVERSED_EXTRA" 50.0)]
edits = []
creates = []
edits = [CT.OcfEditIssuerAuthorizedSharesAdjustment conflictingEdit]
deletes = []

_ <- submit issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = []
edits = [CT.OcfEditIssuerAuthorizedSharesAdjustment conflictingEdit]
deletes = [CT.OcfDeleteIssuerAuthorizedSharesAdjustment firstId]
pure ()

testIssuerEditCannotDropBelowStockClasses = script do
TestOcp{issuer, cap_table} <- setupTestOcp
capTableLimited <- setIssuerAuthorizedShares issuer cap_table 100.0
Expand Down
122 changes: 92 additions & 30 deletions Test/daml/OpenCapTable/TestStockClassAuthorizedShares.daml
Original file line number Diff line number Diff line change
Expand Up @@ -472,45 +472,58 @@ testStockClassDeleteWithAuthorizedSharesAdjustmentFailsForCeiling = script do
edits = []
deletes = [CT.OcfDeleteStockClass stockClassId]

testSameDateLowerStockClassAuthorizedSharesAdjustmentWins = script do
testConflictingSameOcfDateStockClassAuthorizedSharesAdjustmentsFail = script do
TestOcp{issuer, cap_table} <- setupTestOcp

(capTableWithClass, stockClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_SAME_DATE" 100.0)
(capTableReady, stakeholderId) <- setupStakeholderWithId issuer capTableWithClass "SH_SAME_DATE" "Same Date Holder"
result <- submit issuer do
exerciseCmd capTableReady CT.UpdateCapTable with
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0

submitMustFail issuer do
exerciseCmd capTableWithClass CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClassAuthorizedSharesAdjustment (stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_HIGH" stockClassId 200.0)
, CT.OcfCreateStockClassAuthorizedSharesAdjustment (stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_LOW" stockClassId 100.0)
[ CT.OcfCreateStockClassAuthorizedSharesAdjustment ((stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_HIGH" stockClassId 200.0) with date = morning)
, CT.OcfCreateStockClassAuthorizedSharesAdjustment ((stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_LOW" stockClassId 100.0) with date = evening)
]
edits = []
deletes = []

submitMustFail issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateStockIssuance ((defaultStockIssuance "TX_SAME_DATE_ISSUED" "SEC_SAME_DATE_ISSUED" stakeholderId stockClassId) with quantity = 150.0)]
testIdenticalSameOcfDateStockClassAuthorizedSharesAdjustmentsSucceed = script do
TestOcp{issuer, cap_table} <- setupTestOcp
(capTableWithClass, stockClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_SAME_DATE_REVERSED" 100.0)
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0

_ <- submit issuer do
exerciseCmd capTableWithClass CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClassAuthorizedSharesAdjustment ((stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_FIRST" stockClassId 200.0) with date = morning)
, CT.OcfCreateStockClassAuthorizedSharesAdjustment ((stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_SECOND" stockClassId 200.0) with date = evening)
]
edits = []
deletes = []
pure ()

testSameDateLowerStockClassAuthorizedSharesAdjustmentWinsWithReversedCreateOrder = script do
testStockClassAuthorizedAdjustmentAppliesForEntireOcfDate = script do
TestOcp{issuer, cap_table} <- setupTestOcp
(capTableWithClass, stockClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_AUTH_SAME_OCF_DATE" 100.0)
(capTableReady, stakeholderId) <- setupStakeholderWithId issuer capTableWithClass "SH_AUTH_SAME_OCF_DATE" "Same OCF Date Holder"
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0
let adjustment = (stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_OCF_DATE" stockClassId 200.0) with
date = evening
let issuance = (defaultStockIssuance "TX_ISSUANCE_SAME_OCF_DATE" "SEC_ISSUANCE_SAME_OCF_DATE" stakeholderId stockClassId) with
date = morning
quantity = 150.0

(capTableWithClass, stockClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_SAME_DATE_REVERSED" 100.0)
(capTableReady, stakeholderId) <- setupStakeholderWithId issuer capTableWithClass "SH_SAME_DATE_REVERSED" "Same Date Reversed Holder"
result <- submit issuer do
_ <- submit issuer do
exerciseCmd capTableReady CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClassAuthorizedSharesAdjustment (stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_LOW_FIRST" stockClassId 100.0)
, CT.OcfCreateStockClassAuthorizedSharesAdjustment (stockClassAuthorizedSharesAdjustment "TX_AUTH_SAME_DATE_HIGH_SECOND" stockClassId 200.0)
[ CT.OcfCreateStockClassAuthorizedSharesAdjustment adjustment
, CT.OcfCreateStockIssuance issuance
]
edits = []
deletes = []

submitMustFail issuer do
exerciseCmd result.updatedCapTableCid CT.UpdateCapTable with
creates = [CT.OcfCreateStockIssuance ((defaultStockIssuance "TX_SAME_DATE_REVERSED_ISSUED" "SEC_SAME_DATE_REVERSED_ISSUED" stakeholderId stockClassId) with quantity = 150.0)]
edits = []
deletes = []
pure ()

testStockClassSplitCannotLeaveIssuedSharesAboveAuthorizedShares = script do
TestOcp{issuer, cap_table} <- setupTestOcp
Expand Down Expand Up @@ -1190,28 +1203,77 @@ testStockConversionUsesRatioAdjustmentForDestinationCeiling = script do
edits = []
deletes = []

testSameDateHigherStockConversionRatioAdjustmentWinsForCeiling = script do
testStockConversionRatioAdjustmentAppliesForEntireOcfDate = script do
TestOcp{issuer, cap_table} <- setupTestOcp
(capTableWithCommon, commonClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_CONVERSION_RATIO_SAME_DATE_COMMON" 200.0)
let preferredClassId = "SC_CONVERSION_RATIO_SAME_DATE_SOURCE"
let preferredClass = (limitedStockClass preferredClassId 200.0) with
conversion_rights = [successorStockClassConversionRightTo commonClassId]
(capTableWithPreferred, _) <- setupStockClassWith issuer capTableWithCommon preferredClass
(capTableReady, stakeholderId) <- setupStakeholderWithId issuer capTableWithPreferred "SH_CONVERSION_RATIO_SAME_DATE" "Same OCF Date Conversion Holder"
capTableIssued <- createStockIssuanceWith issuer capTableReady
((defaultStockIssuance "TX_CONVERSION_RATIO_SAME_DATE_ISSUED" "SEC_CONVERSION_RATIO_SAME_DATE" stakeholderId preferredClassId) with quantity = 75.0)
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0
let conversionId = "TX_CONVERSION_RATIO_SAME_DATE"

_ <- submit issuer do
exerciseCmd capTableIssued CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClassConversionRatioAdjustment
((stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_SAME_DATE_ADJUSTMENT" preferredClassId 2.0) with date = evening)
, stockSuccessorIssuance
"TX_CONVERSION_RATIO_SAME_DATE_OUTPUT"
(conversionId <> "_RESULT")
stakeholderId
commonClassId
morning
150.0
, CT.OcfCreateStockConversion ((stockConversion conversionId "SEC_CONVERSION_RATIO_SAME_DATE" 75.0) with date = morning)
]
edits = []
deletes = []
pure ()

testConflictingSameOcfDateStockClassConversionRatioAdjustmentsFail = script do
TestOcp{issuer, cap_table} <- setupTestOcp
(capTableWithCommon, commonClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_CONVERSION_RATIO_TIE_COMMON" 100.0)
let preferredClassId = "SC_CONVERSION_RATIO_TIE_SOURCE"
let preferredClass = (limitedStockClass preferredClassId 200.0) with
conversion_rights = [successorStockClassConversionRightTo commonClassId]
(capTableWithPreferred, _) <- setupStockClassWith issuer capTableWithCommon preferredClass
(capTableReady, stakeholderId) <- setupStakeholderWithId issuer capTableWithPreferred "SH_CONVERSION_RATIO_TIE" "Conversion Ratio Tie Holder"
capTableIssued <- createStockIssuanceWith issuer capTableReady ((defaultStockIssuance "TX_CONVERSION_RATIO_TIE_ISSUED" "SEC_CONVERSION_RATIO_TIE" stakeholderId preferredClassId) with quantity = 75.0)
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0

submitMustFail issuer do
exerciseCmd capTableIssued CT.UpdateCapTable with
exerciseCmd capTableWithPreferred CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClassConversionRatioAdjustment (stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_TIE_LOW" preferredClassId 1.0)
, CT.OcfCreateStockClassConversionRatioAdjustment (stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_TIE_HIGH" preferredClassId 2.0)
, stockSuccessorIssuance "TX_CONVERSION_RATIO_TIE_OUTPUT" "TX_CONVERSION_RATIO_TIE_RESULT" stakeholderId commonClassId defaultTestDate 150.0
, CT.OcfCreateStockConversion (stockConversion "TX_CONVERSION_RATIO_TIE" "SEC_CONVERSION_RATIO_TIE" 75.0)
[ CT.OcfCreateStockClassConversionRatioAdjustment ((stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_TIE_LOW" preferredClassId 1.0) with date = morning)
, CT.OcfCreateStockClassConversionRatioAdjustment ((stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_TIE_HIGH" preferredClassId 2.0) with date = evening)
]
edits = []
deletes = []

testIdenticalSameOcfDateStockClassConversionRatioAdjustmentsSucceed = script do
TestOcp{issuer, cap_table} <- setupTestOcp
(capTableWithCommon, commonClassId) <- setupStockClassWith issuer cap_table (limitedStockClass "SC_CONVERSION_RATIO_IDENTICAL_COMMON" 100.0)
let preferredClassId = "SC_CONVERSION_RATIO_IDENTICAL_SOURCE"
let preferredClass = (limitedStockClass preferredClassId 200.0) with
conversion_rights = [successorStockClassConversionRightTo commonClassId]
(capTableWithPreferred, _) <- setupStockClassWith issuer capTableWithCommon preferredClass
let morning = DT.time (DA.date 2024 Jan 01) 9 0 0
let evening = DT.time (DA.date 2024 Jan 01) 17 0 0

_ <- submit issuer do
exerciseCmd capTableWithPreferred CT.UpdateCapTable with
creates =
[ CT.OcfCreateStockClassConversionRatioAdjustment ((stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_IDENTICAL_FIRST" preferredClassId 2.0) with date = morning)
, CT.OcfCreateStockClassConversionRatioAdjustment ((stockClassConversionRatioAdjustment "TX_CONVERSION_RATIO_IDENTICAL_SECOND" preferredClassId 2.0) with date = evening)
]
edits = []
deletes = []
pure ()

testStockClassWithNonRatioConversionRightRejected = script do
TestOcp{issuer, cap_table} <- setupTestOcp

Expand Down
Loading
Loading