Open-Cap-Table-Coalition / Open-Cap-Format-OCF

Open Cap Format (OCF) - The Open Source Company Capitalization Data Standard. OCF can be used to structure and track the complex data structures necessary to build and maintain accurate capitalization (cap) tables.
https://opencaptablecoalition.com
Other
143 stars 29 forks source link

Model a Consolidation Transaction for Inclusion to OCF #449

Open victormimo opened 1 year ago

victormimo commented 1 year ago

Discussed in https://github.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/discussions/444

Originally posted by **victormimo** August 7, 2023 Let's assume the scenario below. ![Screenshot 2023-08-07 at 5 37 48 PM](https://github.com/Open-Cap-Table-Coalition/Open-Cap-Format-OCF/assets/16212757/1170053d-cbb2-463b-83a4-724812da8210) Let's also assume the issuance objects for Bob are the same outside of quantity. I understand that if Bob wants to transfer Alice 1100 shares, then we need to create 2 separate transfers (because transfers only have one security_id field corresponding to Bobs). One for 1000 shares and one for 100 shares, this also means that Alice will have two new Issuance events, one for 1000 and one for 100. am I right on this logic? Could there be a way to unify Alice's position into one for 1100 shares? If we take a scenario where an issuer issues 1,000,000 shares to a stakeholder, it's likely that a new buyer purchases less than a million shares. This means overtime that issuance of a million shares will result in many smaller issuances since there's no way to unify positions on transfers. Even if someone buys one million shares for the exact `stock_class_id`, they will have to carry however many issuance objects there were to sum to a million. One potential solution could be to change the transfer's `security_id` field to be an array, like `resulting_security_ids` Something like. ``` { "object_type": "TX_STOCK_TRANSFER", "id": "bob-transfer-to-alice", "security_ids": ["bob-stock-1", "bob-stock-2"], "date": "2023-02-01", "resulting_security_ids": [ "alice-stock-1" ], "quantity": "1100" } ``` Let me know if I'm missing something
victormimo commented 1 year ago

Wanted to follow up here since this is relevant to us from a gas savings perspective of writing to a blockchain. @JSv4 when we meet over zoom you proposed a work around using issuances I believe. Would you be able to provide a simple example of how that would look?

Much appreciated!

JSv4 commented 7 months ago

Hey @victormimo, I believe we discussed this live at some point on a call before the last summit on how you could do this. You could transfer the split issuances to a new, consolidated issuance. There may be other implications to worry about there, but that should work. I'm going to close this for now, but please re-open if you have more questions / thoughts.

victormimo commented 6 months ago

Perfect, thank you.

JSv4 commented 6 months ago

Notes from the TWG:

jarrettq commented 6 months ago

Additional examples where we have encountered other real world many-to-one security scenarios (where we have the documents and stock certs as data points to run off of):

  1. Multiple stockholders participating in a secondary sale to a single purchaser, which all consolidate in a single resulting security and multiple balance securities (~one per seller).
  2. Multiple holdings for a single stockholder in one share class that are converted to another share class, and consolidated to a single certificate in the process.
  3. Multiple option exercises being consolidated to a single stock certificate.
JSv4 commented 6 months ago

Further discussion on this point - we do need something to consolidate transactions as the only way to do this ATM is to cancel and re-issue, which breaks any structured link between the securities.

Also, as flagged by @arthur-clara, this transaction type will simplify and clarify the validation work. Some of the proposed rules for resulting_security_id and balance_security_id fields in Arthur's proposal rely on a Transfer always have the resulting_security_id point to an issuance with a new stakeholder_id.