Skip to content

Feat/legion conditions#114

Merged
merisman merged 5 commits into
feat/legionfrom
feat/legion-conditions
Jul 6, 2026
Merged

Feat/legion conditions#114
merisman merged 5 commits into
feat/legionfrom
feat/legion-conditions

Conversation

@Detoo

@Detoo Detoo commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

No description provided.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d1f72ee0c8

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +66 to +73
FundInterestData memory data = abi.decode(extensionData, (FundInterestData));
uint64 anchor = data.acquisitionDate;
if (data.tackedFromAcquisitionDate != 0 && data.tackedFromAcquisitionDate < anchor) {
anchor = data.tackedFromAcquisitionDate;
}
if (anchor == 0) return false;

return block.timestamp >= uint256(anchor) + holdingPeriod;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Reset buyer acquisition dates before enforcing holds

When a buyer later resells units acquired through the secondary path, this check reads the certificate extensionData that executeSecondaryTransfer currently copies from the seller onto the buyer token (src/storage/IssuanceManagerStorage.sol:811-823, and existing-token consolidation does not update extension data either). In that scenario the buyer inherits the seller's original acquisitionDate, so a seasoned seller can transfer to a new buyer who immediately satisfies the Rule 144 holding period (and the same stale field feeds the Reg S condition). The settlement path needs to stamp the buyer lot's acquisition/tacking data instead of reusing the seller's unchanged FundInterestData.

Useful? React with 👍 / 👎.

Comment on lines +120 to +122
uint256 currentCount = usResidentOnlyCount
? _usResidentHolderCount(printer)
: printer.holderCount();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Count legal owners instead of custodians for holder caps

In non-usResidentOnlyCount mode this uses holderCount(), but that count is maintained from ERC-721 custody transfers (recordHolderChange in CyberCertPrinterStorage) rather than the certificate legal owner. For administered secondary deliveries, the NFT is minted to adminMultisig while the buyer is recorded separately as legal owner (IssuanceManagerStorage.sol:815 and _mintAssignedCert's to, owner parameters), so many distinct legal investors behind one admin multisig are counted as one and the ICA holder cap can be exceeded. Use the legal-owner enumeration here, as the U.S.-resident branch already does via legalOwnerOf.

Useful? React with 👍 / 👎.

@Detoo Detoo marked this pull request as draft July 4, 2026 04:53
@merisman merisman marked this pull request as ready for review July 6, 2026 03:52
@merisman merisman merged commit 7094f3a into feat/legion Jul 6, 2026
6 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants