To summarize this post, I'm describing a system where we use "Accounts as Objects" to store metadata about Assets, to show a hierarchy of links between Assets, to track "service records" for real objects, and otherwise announce and distribute public information generally and encrypted information privately between parties regarding assets they have a shared interest in.
This does not require much, if any, software change, it's mostly a convention for how to use passphrases.
An Asset Holding entry in an account is typically representative of some other thing. Shares of IBM for example represent some portion of distributions from the company IBM; and an Index Fund/Mutual Fund represents holding some percentage of a "collection" of other things.
I'm proposing/have begun to use accounts to describe what's in the collection for that Asset.
For example, "The Vanguard Group" issues their "Vanguard 500 Index Fund" (NASDAQ ticker VFIAX).
Assuming I owned some of that, I'd look in my wallet and I'd see a balance, say 50 units, on a line with, most likely, its ISIN based on current practices as the asset identifier (even though ISIN isn't globally unique enough to represent the same share class from a company, nor is it technically legal to distribute through public channels (because of the SEDOL/CUSIP that are embedded within it); but that's a different discussion entirely ;) ).
But the question is what's actually in that Mutual Fund? What does that mutual fund asset actually hold?
In other words: http://www.marketwatch.com/investing/fund/VFIAX/holdings
Here's a WIP (work in progress) proposal:
Concatenate "/ + [issuer id] + "/" + [Asset identifier] + ":Asset" and hash that to get a keypair.
Use that keypair to access an account, controlled by the issuer, representing the holdings for that asset.
Each asset balance record (including XLM) has an issuer and an asset identifier. This is using only that information (plus the keyword ":Asset") to look up that "Asset Object" in the ledger database. (It's just called an "Account" at the moment.)
To look up the Asset Object for XLM (because the issuer is null) would be the passphrase "//XLM:Asset"
The passphrase for the Vanguard example above "/[somepublicaccountid]/US9229087104:Asset"
By retrieving the balances from that account I can see what that account holds. By looking at the KVP store I can see the set of issued metadata about the Asset Object.
If that account holds another mutual fund (like 401ks do); then I can recursively look that up again. A wallet can navigate my entire tree of holdings this way (and yes it needs to look out for cycles, which it can do by keeping a hash table of the asset passphrases it's processed so far).
Let's look at a derivative, like a group of mortgages; it's notoriously difficult to figure out exactly who owns your bank loan if you have a mortgage (sure your bank is collecting the checks, but they sold the loan off and are now just "servicing the account" for the actual owner(s)).
Each mortgage loan would be identified on the system by its own asset id issued by the original issuer, a collection of those assets would get bundled into another asset and sold as a group, those groups can even be bundled again and sold off as an investment fund or outright ownership transfer.
Using this scheme, the system could store metadata about, and the contents of, each asset and asset collection. Through the derived public account address, it's a well-known location every interested party can look.
Again it'd just be hashing the passphrase: "/[assetissueraddress]/[assetidentifier]:Asset"
Your wallet could dig through the derivatives and, at least to the degree public information has been populated/updated by the issuer, see what's in there (and hopefully derive better info).
I could easily see "automated services" which collect monthly/quarterly published information and files and then associate it with an asset object using the KVPs; using some appropriate key_name, and then some IPFS (or similar) address as the value. Assuming the Stellar node was also running IPFS, it could even retrieve the data if requested/required.
Lastly, let's look at real world objects; specifically manufactured ones with a Serial Number and a Product Code.
Imagine a laptop manufacturer creates a new Account to hold metadata about their new Product.
passphrase: "/" + [manufacturersaccountid] + "/Laptops/" + [ProductCode] + ":Asset"
It now has a shiny new account at address: [ManufacturersProductAccount]
Further, everytime a new laptop rolls off the production line it makes another asset account
passphrase: "/" + [ManufacturersProductAccount] + "/" + [LaptopSerialNumber] + ":Asset"
The manufacturer now controls another account: [SpecificLaptopInstanceAccount]
Inside that account are holdings of all the specific serial numbers for each part that went into making that laptop. This specific laptop instance can now be sold, bundled into a pallet account with a bunch of other laptops for shipping, and theoretically tracked from manufacturer all the way to third hand owner.
This same concept can be applied to cars and VIN numbers, books and ISBN numbers, and UPC codes.
Stellar has the framework for globally and publicly creating and tracking each "instance" of an asset or the asset as a total collection.
A manufacturer can make an "Announcement" about the product line, like a recall, a product manual or product manual update, upcoming press release, software updates, or communicate about the product line in general by attaching new KVP entries to the Product Line issuer account. The "value" of the KVP in these cases would be a pointer to where the actual data can be retrieved (limit of 64 bytes) presumably something like an IPFS address (or other suitable OOB address) .
Now let's say I bought one and registered that specific laptop in one of my Asset Accounts.
I could have some local software that periodically checked the Product Line account and SpecificLaptopAccount for any updates posted by the manufacturer and let me know.
Finally, using the "encrypted data" proposal from issue #26, when I take my laptop in to Best Buy to get serviced; they have a mechanism for creating an account with the combined "BestBuy" + "MikeFair" +"SpecificLaptopSerialNumber" accounts passphrase.
Now BestBuy and I have a "Service Record Account" where we can share information about services performed, problems encountered, replacement parts used, and in general any other useful information about our combined interest in this latop (perhaps even using the account to track an invoice request and a payment txn?). Further because the [SpecificLaptopSerialNumber] account is also part of the trio, there's potential there for directly looping in the manufacturer on the case if required (like perhaps tracking a ticket number or something similar).