DRS
Book entry = wallet balances
Settlement = smart contracts, atomic
Netting = not needed, RTGS
Custody = wallets
Corporate actions = smart contracts
PROBLEM

FIS Investor Services LLC /TA CIK#: 0001630490 (see all company filings)
SOLUTION
Bitstream blockchain book-entry. TransferAgentModule_V5.sol
TECHNICAL IMPLEMENTATION
tokenized new issue = DTC book entry
wallets = DTC participant acc
smart contracts = DTC settlement
distributeDividends (0xbce049b7)
Distributes dividends to the account if it has holdings. The amount of shares to distribute in the form of divideds are calculated as follows: Share dividends = (account's balance * rate) / price This operation will mint or burn shares according to the rate provided. If rate > 0 it will mint shares If rate < 0 it will burn shares
accounts (address[]) date (uint256): The date of the request as a UNIX timestamp rate (int256): The rate for the given shareholder price (uint256): The NAV price per share
distributeDividends (0xd2920e5f)
Distributes full or proportional dividends to the account if it has holdings. The amount of shares to distribute in the form of divideds are calculated as follows: If the adjusted shares for the account are greather than zero, Share dividends = (adjusted shares * rate) / price Otherwise, Share dividends = (account's balance * rate) / price This operation will mint or burn shares according to the rate provided. If rate > 0 it will mint shares If rate < 0 it will burn shares
accounts (address[]) adjustedShares (uint256[]) date (uint256): The date of the request as a UNIX timestamp rate (int256): The rate for the given shareholder price (uint256): The NAV price per share
endOfDay (0x72cfff36)
Distributes dividends and settles existing requests prior to the specified date for the given account.
accounts (address[]) txIds (bytes32[]) date (uint256): The date of the request as a UNIX timestamp rate (int256): The rate price (uint256): The NAV price per share
endOfDay (0xa4152129)
Distributes full or partial dividends and settles existing requests prior to the specified date for the given account.
accounts (address[]) adjustedShares (uint256[]) txIds (bytes32[]) rate (int256): The rate price (uint256): The NAV price per share
settleTransactions (0xfd059319)
Settles existing requests prior to the specified date for the given account. This operation will mint or burn shares according to the request type.
accounts (address[]) txIds (bytes32[]) rate (int256): The rate price (uint256): The NAV price per share
settleCXTransaction (0xda9d15b6)
Settles the given cross-chain request prior to the specified date for the given account. This operation will mint or burn shares according to the request type.
account (address) the address of the shareholders' account requestId (bytes32) the id of the request to process date (uint256) the maximum date to process the request represented as a UNIX timestamp price (uint256) The NAV price per share
settleCXTransactions (0x23b2a067)
Settles all the account's request given as an array of id's prior to the specified date.
account (address) the address of the shareholders' account requestIds (bytes32[]) date (uint256) the maximum date to finish processing request from represented as a UNIX timestamp price (uint256) the NAV price per share
USER / DATA FLOWS
INVESTOR BUYS SHARES
Investor submits purchase request via Transactional Module.
Transactional Module checks Authorization Module for investor whitelist status.
Transactional Module stores pending transaction.
Admin calls Transfer Agent Module with NAV price at end of day.
Transfer Agent Module reads pending transactions from Transactional Module.
Transfer Agent Module calculates shares = (cash amount × scale factor) / price.
Transfer Agent Module calls Fund Token to mint shares to investor.
Fund Token checks Authorization Module to verify recipient is authorized.
Fund Token mints shares to investor balance.
Transfer Agent Module clears transaction from Transactional Module.
DAILY DIVIDEND DISTRIBUTION
Admin calls Transfer Agent Module with rate and price.
Transfer Agent Module checks Authorization Module to verify caller is admin.
Transfer Agent Module reads investor balance from Fund Token.
Transfer Agent Module calculates dividend shares = (balance × rate) / price.
Transfer Agent Module calls Fund Token to mint dividend shares.
Fund Token updates investor balance.
Transfer Agent Module emits DividendDistributed event.
INVESTOR REDEEMS SHARES
Investor submits liquidation request via Transactional Module.
Transactional Module stores pending redemption.
Admin calls Transfer Agent Module at end of day.
Transfer Agent Module reads pending liquidation from Transactional Module.
Transfer Agent Module calls Fund Token to burn shares.
Fund Token reduces investor balance.
Transfer Agent Module clears transaction from Transactional Module.
Off chain system triggers USD wire to investor.
ACCOUNT RECOVERY (LOST KEYS)
Admin calls Transfer Agent Module recoverAccount function.
Transfer Agent Module checks Transactional Module for pending transactions.
Transfer Agent Module calls Fund Token to transfer full balance to new address.
Transfer Agent Module calls Authorization Module to deauthorize old address.
Authorization Module updates whitelist.
CROSS CHAIN TRANSFER OUT
Investor requests CXFER_OUT via Transactional Module.
Admin calls Transfer Agent Module settleCXTransaction.
Transfer Agent Module burns shares from Fund Token.
Bridge system mints equivalent on destination chain.
CROSS CHAIN TRANSFER IN
Bridge system records CXFER_IN in Transactional Module.
Admin calls Transfer Agent Module settleCXTransaction.
Transfer Agent Module mints shares on Fund Token.
Investor receives shares on this chain.

RESOURCES
https://www.ici.org/viewpoints/view_18_interval_funds
https://www.ici.org/system/files/attachments/20_ppr_interval_funds.pdf
https://www.dtcc.com/itp-hub/dist/downloads/Impact_of_fails_Infographic_2020.pdf
Last updated