Simple ERC20
Does not know who buys.
Does not validate KYC.
Does not block transfers.
Does not distribute dividends.
Technical reference
USDPROP is an ERC-3643-based issuance and investor operations platform built on Polygon using ONCHAINID, IdentityRegistry, ClaimIssuer, compliance modules, USDC settlement and multisig treasury controls.
Technical comparison
A simple ERC20 transfer model does not include investor identity, eligibility, transfer restrictions, treasury controls or servicing logic. USDPROP combines ERC-3643 issuance with ONCHAINID, issuer-backed claims, compliance modules and operational controls.
Does not know who buys.
Does not validate KYC.
Does not block transfers.
Does not distribute dividends.
Identity through ONCHAINID.
KYC and AML claims.
Compliance on transfers.
Safe multisig and separated agents.
Technical reference
Core deployment assumptions, upgrade model and operational role notes for technical review. Values are sourced from current deployment documentation and public Polygon addresses where available.
14 deployed contract components on Polygon mainnet (chainId 137) are covered by the deployment pack. Upgradeable core contracts follow the UUPS upgrade model; upgrade execution is intended to be controlled through the Safe multisig.
Topology counts use different scopes. Core Operational Contracts refers to the primary contracts directly involved in issuance, compliance, identity, NAV, distributions and treasury operations. Full Production Topology includes supporting ERC-3643 and ONCHAINID infrastructure contracts required for production operation. Total Deployed Components reflects the complete deployment package, including supporting deployed components, infrastructure dependencies and operational contract references.
The Smart Contract Structure & Deployment Report contains the complete contract inventory, deployment topology and interaction model.
Download Smart Contract Structure ReportOperational agents are separated across deployer, execution, admin, KYC issuer and NAV roles. NAV authority and administrative authority are assigned to separate operational roles. Role separation reduces administrative concentration risk and supports independent operational controls.
Initial deployment configuration: administrative and NAV authority were recorded together, and Safe governance used a 2 of 3 threshold. Current governance configuration: operational scripts separated NAV authority from administrative authority and updated governance to Safe multisig (5/7). Agent wallet addresses are intentionally not published in this reference.
| Parameter | Current value |
|---|---|
| Network | Polygon mainnet, chainId 137 |
| Token standard | ERC-3643 (T-REX protocol) |
| Identity | ONCHAINID, ERC-734 / ERC-735 identity and claim model |
| Proxy pattern | UUPS, OpenZeppelin upgradeable pattern for core upgradeable contracts |
| Payment token | USDC native Polygon, 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
| Treasury | Safe multisig (5/7), current governance configuration |
| Compliance | Reg D 506(c), Reg S and EU MiFID II operational support model |
| Tooling | Hardhat, ethers.js, OpenZeppelin |
CORE STANDARDS & DEPENDENCIES
Core protocols, identity standards, settlement components and dependencies used by the USDPROP architecture.
Permissioned Security Token Standard
Identity & Claims Framework
Settlement Network
Settlement Asset
Treasury Governance
01 / System architecture
USDPROP separates investor onboarding and legal review from token transfer enforcement. Off-chain systems collect documents and KYC payloads. On-chain registries store identities, issuers and claim references used by the token compliance layer.
Identity registration, claim verification, transfer eligibility, issuance, burn, NAV reads, dividend accounting and event emission.
Document intake, KYC/AML review, accreditation evidence, API validation, user interface state, operational monitoring and administrative workflows.
Contract inventory
This inventory lists the 9 Core Operational Contracts directly used by issuance, compliance, identity, NAV, distributions and treasury operations. Address cells include Polygonscan and source links for direct review.
| Contract | Category | Standard | Upgradeable | Address |
|---|---|---|---|---|
| USDPROP Token | Issuance / ownership record | ERC-3643 | Yes | 0x6F6c...5826PolygonscanSource |
| IdentityRegistry | Identity registry | ONCHAINID / ERC-734 / ERC-735 | No | 0x82e0...6bacPolygonscanSource |
| ModularCompliance | Transfer compliance engine | T-REX ModularCompliance | Proxy / review upgrade path | 0x42a1...1294PolygonscanSource |
| USDPROPComplianceModule | Custom compliance module | Compliance module | Yes | 0x6A78...bDccPolygonscanSource |
| ClaimIssuer | Claim attestation issuer | ONCHAINID ClaimIssuer | No | 0x656B...a61aPolygonscanSource |
| InvestmentManager | Subscription execution | EIP-712 + USDC settlement | Yes | 0xe901...949fPolygonscanSource |
| NAVOracle | NAV reference | Oracle adapter | Yes | 0x356B...F9a9PolygonscanSource |
| DividendDistributor | Distribution accounting | Distribution module | Yes | 0x26Fa...D1D1PolygonscanSource |
| Safe Treasury | Treasury control | Custom SafeMultisig | No; owners/threshold configurable | 0xe1f7...f92cPolygonscanSource |
Upgradeable status distinguishes UUPS-controlled contracts from proxy-based or governance-configurable components. ModularCompliance uses an ERC-1967 proxy deployment and its upgrade path should be reviewed against the deployed implementation and ownership records. Safe Treasury is not upgradeable; its signer set and threshold are governance-configurable.
02 / Smart contract suite
This section describes what each core contract does and what it depends on. Address links live in Contract Inventory and Deployment Records; upgrade status lives in the Upgradeability Matrix.
ERC-3643 restricted token representing the ownership record governed by identity and compliance checks.
Registry that links investor wallets to ONCHAINID identities and eligible claim topics.
Compliance orchestration contract used by token transfers to validate module-level restrictions.
Issuer contract used to sign and publish claim attestations accepted by the IdentityRegistry.
Execution contract for subscription flows, consent checks, USDC transfer and token issuance.
NAV source used by investment and distribution operations to reference pricing state.
Distribution accounting contract for dividend lifecycle and investor settlement claims.
Custom SafeMultisig treasury contract used for controlled assets, approvals and operational funding.
Roles and permissions
Operational authority boundaries and control responsibilities. Role separation reduces single-key blast radius; formal review should confirm current assignees, signer custody and authority boundaries.
| Role | Controls | Criticality |
|---|---|---|
| Owner | Contract ownership, role assignment, upgrade/admin handoff and emergency authority depending on the contract. | Critical |
| ClaimIssuer | Signs, updates and revokes investor claim topics for KYC, AML, accreditation and jurisdiction status. | Critical |
| AdminAgent | Operational configuration, parameter changes and administrative workflows authorized by ownership policy. | High |
| NAVAgent | NAV and accounting references consumed by investment, redemption and distribution workflows. | High |
| DistributionAgent | Distribution lifecycle preparation, entitlement accounting and settlement operation support. | High |
| SafeSigner | Approves treasury movements and upgrade execution through the Safe threshold model. | Critical |
| IdentityAgent | Registers ONCHAINID mappings and wallet-to-identity relationships used by transfer checks. | High |
| ComplianceAgent | Configures claim topics, trusted issuers, transfer modules, lockups and eligibility restrictions. | Critical |
Upgradeability matrix
What can be upgraded. Pattern labels reflect current deployment documentation and should be confirmed against Polygonscan proxy records during formal review.
| Contract | Upgradeable | Pattern |
|---|---|---|
| USDPROP Token | Yes | UUPS |
| IdentityRegistry | No | Immutable direct deployment |
| ModularCompliance | Proxy / review upgrade path | ERC-1967 proxy deployment; review deployed implementation and ownership records |
| USDPROPComplianceModule | Yes | UUPS |
| ClaimIssuer | No | Immutable |
| InvestmentManager | Yes | UUPS |
| NAVOracle | Yes | UUPS |
| DividendDistributor | Yes | UUPS |
| Safe Treasury | No; owners/threshold configurable | Custom SafeMultisig governance configuration |
03 / Upgrade path
Core upgradeable contracts follow the UUPS pattern. Upgrades should require Safe multisig (5/7) approval, and no single key should be able to upgrade unilaterally after ownership transfer.
upgradeToAndCall(newImpl, data) on the proxy.Storage layout must be preserved across upgrades. New variables are appended only. Existing slots must not be reordered, removed or type-mutated.
04 / Investment flow
investWithConsent() execution path.The investment path uses investor consent, backend verification and on-chain settlement. Exact ABI parameters must be confirmed against the deployed contract before production integration.
Consent messages must be single use. Backend and contract state should reject replayed nonces.
Signed intent includes an expiry. Expired execution requests must fail before value movement.
Minimum token output or equivalent acceptance condition protects the investor from stale NAV assumptions.
EIP-712 domain separation, chain ID, contract address and nonce are required to prevent cross-context reuse.
05 / Redemption flow
redeemWithConsent() control path.The redemption path mirrors investment consent patterns and adds validation around burn, settlement availability and redemption policy.
Investor consent is explicit and scoped to the intended redemption parameters. The same signing policy should be used by the UI, backend and contract verification path.
Controls can include eligibility review, redemption windows, NAV freshness, liquidity availability, lockups and manual approval gates.
06 / Identity and claims
Investor eligibility is represented through identity registration and claim attestations. Legal and KYC evidence remains outside the token contract. The token reads registry and compliance state before transfers.
Identity layer for associating wallet addresses with investor identity contracts and verifiable claims.
Canonical registry used by the token to determine whether sender and recipient identities satisfy the required state.
Authorized issuer that creates, updates or revokes claims used by compliance checks.
07 / Compliance engine
ERC-3643 transfer validation routes through registry and compliance checks before token balances move. Compliance modules encode restrictions that are external to standard ERC20 behavior.
canTransfer()Pre-transfer check used to test whether sender, recipient and amount satisfy registry and module requirements.
moduleCheck()Module-level validation for country restrictions, limits, lockups or custom policy constraints.
Transfer permissions can depend on KYC, AML, accreditation, Reg D and Reg S claims.
| Control | Input | Enforcement point |
|---|---|---|
| Investor eligibility | Identity and claims | IdentityRegistry and token transfer path |
| Country restrictions | Jurisdiction claim or registry metadata | Compliance module |
| Lockups | Investor or issuance timestamp | Compliance module |
| Transfer restrictions | Sender, recipient, amount | canTransfer() and module checks |
Operational modules
08 / Treasury governance
The current governance configuration uses a Safe multisig (5/7). Formal diligence should review owners, signer custody, threshold policy, recovery procedures and signer rotation controls.
Treasury operations require threshold approval before asset movement or operational funding.
Rotation should be documented with an approval trail, owner replacement procedure and incident escalation path.
Threshold must balance liveness and compromise risk. Current governance configuration records Threshold: 5 of 7.
09 / Dividend distribution
The distribution layer uses NAV/accounting inputs and token ownership state to calculate investor entitlement and settlement workflow.
10 / Security model
This section documents known security assumptions. It does not replace a formal audit, threat model workshop or deployment-specific key ceremony.
| Risk | Mitigation | Residual risk |
|---|---|---|
| Admin key risk | Use multisig, role separation, least privilege and monitored admin actions. | Compromised quorum or poorly scoped roles can still affect system state. |
| Oracle manipulation | Restrict NAV writer role, require review process and monitor NAV changes. | Incorrect NAV input can affect issuance, redemption or distribution calculations. |
| Signer compromise | Safe threshold, hardware wallets, signer rotation and incident runbook. | Threshold compromise remains a critical custody event. |
| Claim issuer compromise | Dedicated issuer keys, issuer monitoring, claim revocation and registry controls. | Invalid claims can create improper eligibility until detected and revoked. |
| Replay attacks | EIP-712 domain separation, nonce tracking, deadlines and chain ID binding. | Implementation defects in nonce or domain handling can reintroduce replay paths. |
| Upgrade risk | Publish upgrade policy, require review, use timelocks where applicable and monitor bytecode changes. | Upgrade authority remains a governance trust assumption unless fully removed. |
11 / Network perimeter & application security
Infrastructure controls for backend execution, API exposure, Doppler-managed runtime secrets and operational key blast-radius review.
| Layer | Configuration | Status |
|---|---|---|
| DNS / Edge | Cloudflare with Full Strict SSL mode | Active |
| TLS | End-to-end encryption with origin certificate installed | Active |
| Firewall | DigitalOcean UFW firewall, deny incoming by default | Active |
| Application surface | 443 HTTPS through Cloudflare | Active |
| Administrative access | 22 SSH, private-key authentication only, password login disabled, root login disabled | Active |
| HTTP edge path | Port 80 accepted only from Cloudflare for redirect and ACME challenge flow | Active |
| Internal runtime | Node.js Express on port 3002, blocked externally by UFW and proxied by nginx | Active |
| Runtime secrets | Doppler-managed backend secrets injected through a scoped service token; no execution-agent private key is stored in the project .env | Active |
Internet → Cloudflare → nginx → Express :3002
The Node.js process on port 3002 is not reachable from the public internet. Application traffic passes through Cloudflare and nginx before reaching the backend application layer.
| Parameter | Value |
|---|---|
| Provider | DigitalOcean |
| Type | Dedicated Droplet |
| SSH authentication | Private key only, password authentication disabled |
| Root login | Disabled |
| Process manager | systemd service running Node.js / Express on port 3002 |
| Reverse proxy | nginx |
| Control | Implementation | Status |
|---|---|---|
| Security headers | Helmet.js in the Express backend plus nginx security headers | Active |
| CORS policy | Restricted origin allowlist, no wildcard origin | Active |
| Rate limiting | Per-IP limiter on critical backend routes | Active |
/api/invest/executeInvestment execution path using investWithConsent.
/api/invest/waitlistInvestor operations demo and lead capture path.
investWithConsent transactions with a valid investor EIP-712 signature.The backend cannot mint arbitrary tokens, execute redemptions without valid investor consent, move treasury funds, update NAV, modify compliance, upgrade contracts or bypass investor consent.
If the execution agent key is compromised, the attacker can only submit scoped investment execution transactions using valid intercepted investor signatures within their deadline window and consume the POL balance held by the execution agent for gas. The attacker cannot drain treasury funds, mint arbitrary tokens, modify NAV, alter compliance rules, upgrade contracts or change governance state. The blast radius is operationally contained by contract-level permissions and by the limited gas balance policy.
The execution agent wallet maintains a minimal POL balance sufficient for current operational needs only. This limits exposure in a compromise scenario to gas funds only.
Operational exposure is bounded by EIP-712 consent requirements, nonce and deadline enforcement, contract-level permissions, backend rate limiting, treasury segregation and governance controls.
Current state: the execution agent key is managed in Doppler and injected into the backend at runtime through a scoped service token. The production backend .env file no longer stores execution-agent private keys or RPC credentials.
Future production hardening may migrate execution agent signing to a dedicated signer-service, KMS-backed signer or relay model with rotation procedures and operational monitoring.
| Finding | Report reference | Status |
|---|---|---|
| Server-side private key exposure | Final Critique, Critical B | Mitigated by Doppler-managed backend and execution agent scope |
execution agent scope limited to investWithConsent | Investment Flows validation | Confirmed by contract access control tests |
The Critical B finding models a high-risk server-side key exposure scenario. The Doppler-managed backend materially reduces residual risk by removing static secret handling from local environment files, while the execution agent key retains a constrained operational scope.
| Item | Priority | Notes |
|---|---|---|
| SSH restricted to VPN only | High | Tailscale or equivalent; closes public SSH exposure |
| Role separation monitoring | Medium | Confirm NAV, administrative and execution authority remain separated during future role changes |
| Edge WAF rules | Medium | Cloudflare WAF and challenge rules for sensitive routes |
| Signer-service / KMS migration | Medium | Optional future migration from Doppler-injected runtime secrets to a dedicated signer-service or KMS-backed signer model |
| Monitoring and alerting | Medium | Alerts for failed executions, replay attempts, NAV updates, Safe transactions and unusual backend activity |
12 / Deployment records
This section is the address and verification reference. Contract purpose is summarized in Contract Inventory; full topology is covered in the Smart Contract Structure Report.
| Component | Address | Verification Status | Record |
|---|---|---|---|
| USDPROP Token | 0x6F6c5Ab2865E028beDFEbabD86E046D73EAC5826 | Verified | Polygonscan |
| IdentityRegistry | 0x82e04Ac5abC1c6979781aeB2ACa5133B59f86bac | Verified | Polygonscan |
| ModularCompliance | 0x42a133b07c53FEb1043Ac84481993ceec72D1294 | Verified | Polygonscan |
| USDPROPComplianceModule | 0x6A7863dF05D06956bfE8B7650f2c2983e214bDcc | Verified | Polygonscan |
| ClaimIssuer | 0x656B7DDFf86ce7aBE9E86A8bf97642d55B95a61a | Verified | Polygonscan |
| NAVOracle | 0x356B60F2600D0454871F9492a4B90cE750b0F9a9 | Verified | Polygonscan |
| InvestmentManager | 0xe901ef0395850A217b19F2cc0819527ae4D2949f | Verified | Polygonscan |
| DividendDistributor | 0x26FaD8d74c2Eb3461c94e5CeAC8e8AEb48e6D1D1 | Verified | Polygonscan |
| Safe Treasury | 0xe1f7615962BcFEE1C9992A2c501702130835f92c | Verified | Polygonscan |
| USDC | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | Verified | Polygonscan |
13 / ABI and integration
ABI and address bundles are maintained with the externally owned investor runtime and deployment artifacts. A clean mainnet deployment is estimated at 4 to 6 hours including Safe setup and ClaimIssuer configuration.
Reference layout used for contracts, deployment records, testing, operations and investor runtime.
contracts/Solidity contracts and interfaces, including UUPS upgradeable core contracts.scripts/Deployment, verification, upgrade, NAV, KYC, dividend and operational helpers.deployment.jsonCurrent deployment record consumed through DEPLOYMENT_PATH and scripts/deployment-loader.js.test/Unit, integration, regression, deployment-loader, gas and UUPS upgradeability tests.docs/Architecture, validation, deployment and due diligence documents.external investor appInvestor-facing runtime application maintained in a separate repository.external investor backendExecution-agent API maintained in a separate repository.frontend/Legacy/admin-facing frontend assets and synchronized contract references where applicable.backend/Legacy/admin API and internal integration services where applicable.Production and Polygon staging deployments are resolved through DEPLOYMENT_PATH and DEPLOYMENT_ENV. Formal mainnet deployment requires separated NAV agent, 7 external Safe owners and Safe threshold 5 of 7.
External protocols, libraries and infrastructure components relied upon by the deployment.
const manager = new ethers.Contract(
INVESTMENT_MANAGER,
investmentManagerAbi,
signer
);
// Pseudocode. Confirm exact ABI before execution.
await manager.investWithConsent({
amountUSDC,
minTokensOut,
deadline,
nonce,
signature
});
| Event category | Operational use | Consumer |
|---|---|---|
| Investment execution | Subscription audit trail and investor app state | Backend, investor app, operations logs |
| Transfer validation | Restricted ownership movement evidence | Compliance review, operations |
| Claim update | KYC/eligibility change trail | KYC panel, compliance review |
| Distribution | Dividend lifecycle and settlement state | Investor app, fund operations |
14 / Gas and operations
Gas values are generated from the local Hardhat test suite using gas reporter. They are benchmark results from the local test environment, not actual Polygon mainnet transaction receipts.
REPORT_GAS=true npx hardhat test completed with 256 passing tests in 6s. Compiler settings: Solc 0.8.22, optimizer enabled, 200 runs, block limit 60,000,000 gas.
Method-level gas reported by the local Hardhat gas reporter suite. Max values are shown only where reported by the benchmark output.
| Contract | Method | Average gas | Max gas | Primary drivers |
|---|---|---|---|---|
| InvestmentManager | invest | 666,596 gas | 1,023,888 gas | Legacy investment path, USDC transfer, compliance checks and token issuance |
| InvestmentManager | investWithConsent | 721,289 gas | Not reported | EIP-712 consent validation, nonce/deadline checks, USDC transfer, compliance checks and token issuance |
| InvestmentManager | redeem | 197,701 gas | Not reported | Legacy redemption path, lock-up checks, token burn and USDC settlement |
| InvestmentManager | redeemWithConsent | 223,722 gas | Not reported | EIP-712 redemption consent, lock-up checks, token burn and USDC settlement |
| InvestmentManager | permanentlyDisableLegacyPaths | 35,854 gas | Not reported | Governance hardening action for legacy execution paths |
| NAVOracle | setNAV | 105,700 gas | Not reported | Authorized NAV update, cooldown and delta-limit enforcement |
| NAVOracle | setNAVEmergency | 101,330 gas | Not reported | Emergency NAV override path controlled by ownership authority |
| NAVOracle | setOracleLimits | 56,623 gas | Not reported | Oracle limit configuration |
| DividendDistributor | depositAndDistribute | 252,212 gas | Not reported | USDC deposit, distribution accounting and settlement record update |
| DividendDistributor | claimDividends | 107,965 gas | Not reported | Investor dividend claim and accounting update |
| DividendDistributor | emergencyWithdraw | 49,135 gas | Not reported | Emergency withdrawal of uncommitted excess balance |
| DividendDistributor | settleInvestorWithBalance | 52,266 gas | Not reported | Investor settlement state update using balance input |
| USDPROPComplianceModule | migratePurchaseTimestamps | 121,858 gas | Not reported | Lock-up timestamp migration support |
| USDPROPComplianceModule | finalizeLockupMigration | 52,199 gas | Not reported | Migration finalization control |
| USDPROPComplianceModule | initializeOfac | 206,097 gas | Not reported | OFAC configuration initialization |
| USDPROPComplianceModule | blockCountry | 55,085 gas | Not reported | Country restriction activation |
| USDPROPComplianceModule | unblockCountry | 32,079 gas | Not reported | Country restriction removal |
| SafeMultisig | proposeTransaction | 264,993 gas | Not reported | Generic proposal creation and calldata storage |
| SafeMultisig | confirmTransaction | 167,598 gas | Not reported | Signer confirmation and possible execution when threshold is reached |
| SafeMultisig | proposeApproveUSDC | 380,960 gas | Not reported | USDC approval proposal helper |
| SafeMultisig | proposeDistributeDividends | 367,914 gas | Not reported | Dividend distribution proposal helper |
| SafeMultisig | proposeAddOwner | 337,266 gas | Not reported | Owner addition proposal helper |
| SafeMultisig | proposeRemoveOwner | 339,722 gas | Not reported | Owner removal proposal helper |
| SafeMultisig | proposeChangeThreshold | 270,109 gas | Not reported | Threshold change proposal helper |
Contract deployment gas from the same local Hardhat gas reporter run.
| Deployment component | Average gas | Primary drivers |
|---|---|---|
| USDPROPComplianceModule | 4,780,743 gas | Compliance rule deployment, OFAC controls, lock-up logic and investor limits |
| InvestmentManager | 3,443,935 gas | Subscription execution, redemption flow, consent validation and USDC settlement |
| Token | 3,304,160 gas | ERC-3643 token logic, agent controls and transfer hooks |
| SafeMultisig | 2,443,993 gas | Custom treasury governance, signer set and threshold configuration |
| DividendDistributor | 2,420,162 gas | Distribution accounting, deposit and settlement logic |
| NAVOracle | 1,848,464 gas | NAV storage, update limits and updater permissions |
| Identity | 2,452,051 gas | ONCHAINID identity contract deployment |
| ClaimIssuer | 2,714,490 gas | Claim issuer identity and claim signer permissions |
| IdentityRegistry | 1,378,514 gas | Investor registry, country mapping and identity lookups |
| ModularCompliance | 1,260,357 gas | Module registry and transfer validation dispatcher |
| TrustedIssuersRegistry | 1,042,863 gas | Trusted issuer list and claim-topic authorization |
| IdentityRegistryStorage | 956,786 gas | Registry storage and binding permissions |
| MockUSDC | 664,328 gas | Local test settlement asset deployment |
| ClaimTopicsRegistry | 478,595 gas | Required claim-topic setup |
| ERC1967Proxy | 266,718 gas | Proxy deployment and implementation pointer |
These benchmarks are useful for relative comparison across methods and deployment components. Actual Polygon costs depend on live gas pricing, calldata, state access, contract state, RPC conditions and transaction inclusion behavior.
Regression Validation Report
The USDPROP validation suite covers deployment, hardening, identity, claims, compliance, investments, redemptions, treasury operations, governance controls, security protections and historical vulnerability regressions.
All tests are documented in the dedicated Validation Report.
15 / Audit and review status
Do not treat this page as an audit report. It is a technical architecture reference for review preparation.
No external audit report is published in this repository at this time.
Deployment records and public addresses are available. Formal verification, source matching and role review must be performed per deployment.
Recommended review areas include monitoring, admin runbooks, signer continuity, KYC provider adapters, gas reporting and source verification pack.
Regression coverage, pass rate and evidence mapping are centralized in the Regression Validation Report.
See Validation Report for detailed coverage and evidence mapping.
The following checklist summarizes completed diligence items and remaining actions before formal production sign-off.
Off-chain layer
Base legal document templates used as operational references for private placement structuring, investor subscription, regulatory notice workflow and tax documentation. Templates are reference material, not legal advice.
Common legal documents used in private placement and investor onboarding workflows.
16 / Documentation
Review architecture, validation evidence, infrastructure security, deployment records and source references before conducting independent verification.