Models / Tokenized assets / commodity_token
Commodity token
How does a commodity token compare with futures plus cash over a hold, what band do its fees set, and can this position redeem at all?
Takes a token backed by a stored commodity: yearly drag from storage and insurance taken in units, value after the hold, the gap to a synthetic of rolled futures plus cash and the hold where they meet, the band set by mint and redeem fees and delivery cost at a size, and whether a position can redeem at all. Flat spot. Every number comes from the caller. Not a price or advice.
On these numbers, the drag is 0.5% a year, the token route ends 623.29 over the synthetic after 3 years at a flat spot, they meet at 2.49 years, and the position sits under the minimum redeemable size, so its only exit is a sale, where the token's terms allow one.
Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.
Readings
The numbers, with their units.
Drag a year
0.5%
Storage 35 bps plus insurance 15 bps, taken in units.
Value after the drag
245,655
From 249,377 after entry, over 3 years at a flat spot, before exit costs. 12,468.83 tokens at 20 NAV today.
Synthetic's net cost a year
1%
Futures carry 5% less 4% earned on the collateral.
Token route less synthetic at exit
623.29
Token 243,198, synthetic 242,575, from 250,000 of cash. That is 0.249% of the cash.
Break-even hold
2.4906years
The routes end level here. On these numbers, longer holds end with the token route higher.
Entry with the lower cost on these numbers
watchmint
Mint fee 0.25%, market premium 1.25%. Entry cost 0.25%.
Band width at this size
breachno floor
Top edge 0.25% over NAV. No lower edge: this size can't redeem.
Units in the position
breach124.69
Minimum to redeem 400 units, or 800,000 of value. 122.83 units at the end of the hold.
What flips it
The value of one input where the outcome changes, with the others held.
market_premium_pct
0.25%now 1.25
Above this premium a mint costs less than a market purchase. Below it the market costs less.
position_value
802,000now 250,000
Under this much cash the position starts below the minimum redeemable size.
position_value
814,151now 250,000
Under this much cash the drag takes the position below the minimum by the end of a 3 year hold.
futures_carry_pct
4.9153%now 5
At this futures carry the two routes end the hold level at a flat spot. Above it the token route ends ahead.
holding_years
2.4906yearsnow 3
The token and the synthetic end level at this hold, at a flat spot. Longer than this the token route ends ahead.
Flags
What went past a line, and what to read before you trust the rest.
- breachThe position starts at 124.69 units, under the 400 unit minimum. Its only exit is a sale, where the token's terms allow one, with no redemption behind the price at this size. below_minimum_redeem
- watchThe market premium of 1.25% is over the 0.25% mint fee. On these numbers a mint costs 1% of NAV less than a market purchase, if this holder may mint at all. premium_over_band
What this leaves out
What the formula leaves out, by name.
- Spot moves. The drag is on a value that moves with spot and the synthetic's carry is on its starting size, so a large move opens a gap this flat-spot figure leaves out.
- Futures margin calls, and any collateral held below full. Roll spreads, exchange fees and basis at each roll.
- Bid-ask and depth on the token's market, and how the premium moves over the hold.
- A minimum size to mint, which would close the mint route to small positions.
- Transfer costs, audits of the stored commodity, and differences in grade or location.
- Taxes, which can treat a stored commodity, a token and futures differently.
- Failure of the issuer, the vault or the futures clearing house.
- Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.
What it took as given (8)
What it took as given to get here.
- Everything is at a flat spot, so the gap between the routes is costs alone.
- position_value is the cash put to work. Entry takes the lower cost: a mint at NAV plus the fee, or the market at NAV plus the premium. A mint fee is added on top of NAV, not taken from the tokens delivered.
- Storage and insurance are taken in units, so a holding shrinks by compounding: value = start * (1 - drag)^years. Annual compounding.
- The synthetic holds the same cash as full collateral at cash_rate_pct, against rolled futures sized to it. At a flat spot it grows by 1 + cash rate - futures carry a year, compounded annually. The cash rate counts: carry alone overstates what futures cost.
- A position with at least min_redeem_units at exit can redeem, for value * (1 - redeem fee) - delivery cost, or leave on the market, and it takes whichever pays more. A position under the minimum can only leave on the market.
- A market exit is at NAV less exit_discount_pct. Today's premium isn't counted on at exit. The default discount is today's discount if the market is below NAV, else zero, and at zero the market exit pays NAV in full, so redemption's costs don't bite. Send exit_discount_pct to price the depth a large exit would meet.
- Band at size S: from -(redeem fee + delivery cost / S) to +mint fee, around NAV. A position under the minimum has no lower edge: no redemption stands behind the market price at that size.
- Break-even hold is the first hold within 100 years where one route passes the other, by scan and bisection. Routes within 1 part in a billion of the cash count as level. Routes that start level and part at once have no break-even. When the drag takes a position under the minimum redemption closes, so the token can fall behind at a step, and the result says so.
- Token, after entry, drag and exit
- Futures plus cash
The data
The two routes over the hold
| Route | Entry | Entry cost % | Running cost % a year | Exit | End value |
|---|---|---|---|---|---|
| Token | mint | 0.25 | 0.5 | market | 243,198 |
| Futures plus cash | none | 0 | 1 | none | 242,575 |
By hold
| Years | Held value | Token after exit | Synthetic | Token less synthetic | Token exit |
|---|---|---|---|---|---|
| 1 | 248,130 | 245,648 | 247,500 | -1,851.62 | market |
| 2 | 246,889 | 244,420 | 245,025 | -604.86 | market |
| 3 | 245,655 | 243,198 | 242,575 | 623.29 | market |
| 5 | 243,204 | 240,772 | 237,748 | 3,024.62 | market |
| 10 | 237,185 | 234,813 | 226,096 | 8,717.21 | market |
Band by size
| Units | Value | Size | Can redeem | Lower edge % | Upper edge % | Width % |
|---|---|---|---|---|---|---|
| 124.69 | 249,377 | this position | no | no floor | 0.25 | no floor |
| 400 | 800,000 | 1 x the minimum | yes | -0.4375 | 0.25 | 0.6875 |
| 800 | 1,600,000 | 2 x the minimum | yes | -0.3438 | 0.25 | 0.5938 |
| 2,000 | 4,000,000 | 5 x the minimum | yes | -0.2875 | 0.25 | 0.5375 |
| 4,000 | 8,000,000 | 10 x the minimum | yes | -0.2688 | 0.25 | 0.5188 |
| 40,000 | 80,000,000 | 100 x the minimum | yes | -0.2519 | 0.25 | 0.5019 |
Paste it into your agent
No connection needed. This prompt carries the method, the conventions and what this site's engine gives on the made-up numbers, so your agent can check its own work before it touches real ones. Every prompt, with its hash, is listed at /prompts.json. A copy that stays fixed for this version, for a stack to point at: /v/1.0/models/commodity_token.md.
# Commodity token: a prompt from hedgefund.mdPaste this into your AI agent. It needs no connection to hedgefund.md. An agent that can run code should write and run it, and shouldn't work a long series by hand.**Question.** How does a commodity token compare with futures plus cash over a hold, what band do its fees set, and can this position redeem at all?## MethodDrag = storage + insurance. Start value = cash / (1 + entry cost), entry cost = min(mint fee, premium). Held value = start * (1 - drag)^years. Market exit = held * (1 - exit discount). Redeem exit = held * (1 - redeem fee) - delivery cost, open only at or over the minimum. The token takes whichever exit pays more. Synthetic = cash * (1 + cash rate - futures carry)^years. Band at size S: -(redeem fee + delivery cost / S) to +mint fee.## Conventions- Everything is at a flat spot, so the gap between the routes is costs alone.- position_value is the cash put to work. Entry takes the lower cost: a mint at NAV plus the fee, or the market at NAV plus the premium. A mint fee is added on top of NAV, not taken from the tokens delivered.- Storage and insurance are taken in units, so a holding shrinks by compounding: value = start * (1 - drag)^years. Annual compounding.- The synthetic holds the same cash as full collateral at cash_rate_pct, against rolled futures sized to it. At a flat spot it grows by 1 + cash rate - futures carry a year, compounded annually. The cash rate counts: carry alone overstates what futures cost.- A position with at least min_redeem_units at exit can redeem, for value * (1 - redeem fee) - delivery cost, or leave on the market, and it takes whichever pays more. A position under the minimum can only leave on the market.- A market exit is at NAV less exit_discount_pct. Today's premium isn't counted on at exit. The default discount is today's discount if the market is below NAV, else zero, and at zero the market exit pays NAV in full, so redemption's costs don't bite. Send exit_discount_pct to price the depth a large exit would meet.- Band at size S: from -(redeem fee + delivery cost / S) to +mint fee, around NAV. A position under the minimum has no lower edge: no redemption stands behind the market price at that size.- Break-even hold is the first hold within 100 years where one route passes the other, by scan and bisection. Routes within 1 part in a billion of the cash count as level. Routes that start level and part at once have no break-even. When the drag takes a position under the minimum redemption closes, so the token can fall behind at a step, and the result says so.## Step 1: check your method on these made-up numbersThe numbers and names below are made up. They aren't market levels, typical values or anyone's real figures.```json{ "spot_per_unit": 2000, "units_per_token": 0.01, "position_value": 250000, "storage_bps": 35, "insurance_bps": 15, "mint_fee_bps": 25, "redeem_fee_bps": 25, "min_redeem_units": 400, "delivery_cost": 1500, "market_premium_pct": 1.25, "cash_rate_pct": 4, "futures_carry_pct": 5, "holding_years": 3, "exit_discount_pct": 1}```Work them out with the method above. Yours should match these within 0.5%.- Drag a year: 0.5 %- Value after the drag: 245654.5823- Synthetic's net cost a year: 1 %- Token route less synthetic at exit: 623.2865- Break-even hold: 2.4906 years- Units in the position: 124.6883Where the outcome flips, with the other inputs held:- market_premium_pct at 0.25: Above this premium a mint costs less than a market purchase. Below it the market costs less.- position_value at 802000: Under this much cash the position starts below the minimum redeemable size.- position_value at 814151.3101: Under this much cash the drag takes the position below the minimum by the end of a 3 year hold.- futures_carry_pct at 4.9153: At this futures carry the two routes end the hold level at a flat spot. Above it the token route ends ahead.- holding_years at 2.4906: The token and the synthetic end level at this hold, at a flat spot. Longer than this the token route ends ahead.If yours differ, stop and tell the person which ones and by how much. Don't go on to real numbers until they match, or until the person has seen the difference. These values come from one engine and can be wrong too.## Step 2: run it on the person's numbersReplace every input with the person's own. Ask for any number you don't have, and don't invent one.## Step 3: reportGive one sentence beginning "On these numbers,", then the values, then where the outcome flips. Always add what this leaves out:- Spot moves. The drag is on a value that moves with spot and the synthetic's carry is on its starting size, so a large move opens a gap this flat-spot figure leaves out.- Futures margin calls, and any collateral held below full. Roll spreads, exchange fees and basis at each roll.- Bid-ask and depth on the token's market, and how the premium moves over the hold.- A minimum size to mint, which would close the mint route to small positions.- Transfer costs, audits of the stored commodity, and differences in grade or location.- Taxes, which can treat a stored commodity, a token and futures differently.- Failure of the issuer, the vault or the futures clearing house.- Whether this holder may acquire, hold, mint, redeem, pledge, sell or transfer this token, or use any pool. Those are legal questions for counsel.## LimitsResults are hypothetical: arithmetic on the numbers given, prepared with hindsight. Nobody achieved them, and costs and liquidity are only as assumed. They aren't a forecast, a recommendation, an offer or a record of real trading. Don't say what to buy, sell or hold, and don't use them to market an investment. Whether a person may hold or trade an instrument is a legal question for counsel.Provided as is, at your own risk, by hedgefund.md, which is not a fund and isn't anyone's adviser. Version 1.0. Source: https://hedgefund.md/models/commodity_token/prompt.md. Terms: https://hedgefund.md/termsCall it
The same code answers on this page, over HTTP, over MCP and on your own machine, and the same inputs give the same bytes. No key, and nothing is stored. Send positions by POST or run the library, because a URL can land in a server log. model.md holds all of this for your agent.
POST the inputs to /api/v1/commodity_token.
curl -s https://hedgefund.md/api/v1/commodity_token \ -H 'content-type: application/json' \ -d '{"spot_per_unit":2000,"units_per_token":0.01,"position_value":250000,"storage_bps":35,"insurance_bps":15,"mint_fee_bps":25,"redeem_fee_bps":25,"min_redeem_units":400,"delivery_cost":1500,"market_premium_pct":1.25,"cash_rate_pct":4,"futures_carry_pct":5,"holding_years":3,"exit_discount_pct":1}' \ | jq '{summary, flags, flips, not_modeled, inputs_hash}'The tool is commodity_token on https://hedgefund.md/mcp.
curl -s https://hedgefund.md/mcp \ -H 'content-type: application/json' -H 'accept: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"commodity_token","arguments":{"spot_per_unit":2000,"units_per_token":0.01,"position_value":250000,"storage_bps":35,"insurance_bps":15,"mint_fee_bps":25,"redeem_fee_bps":25,"min_redeem_units":400,"delivery_cost":1500,"market_premium_pct":1.25,"cash_rate_pct":4,"futures_carry_pct":5,"holding_years":3,"exit_discount_pct":1}}}' \ | jq '.result.structuredContent | {summary, flags, flips, not_modeled, inputs_hash}'One file with no dependencies, and nothing is sent anywhere.
curl -fsSL https://hedgefund.md/hedgefund.mjs -o hedgefund.mjs # read it before you run itnode hedgefund.mjs template commodity_token > mine.json # replace every number in itnode hedgefund.mjs run commodity_token mine.json | jq '{summary, flags, flips, not_modeled, inputs_hash}'Made-up numbers that run as they stand. Replace every one.
{ "spot_per_unit": 2000, "units_per_token": 0.01, "position_value": 250000, "storage_bps": 35, "insurance_bps": 15, "mint_fee_bps": 25, "redeem_fee_bps": 25, "min_redeem_units": 400, "delivery_cost": 1500, "market_premium_pct": 1.25, "cash_rate_pct": 4, "futures_carry_pct": 5, "holding_years": 3, "exit_discount_pct": 1}Inputs
| Input | Type | Range | Required | What it is |
|---|---|---|---|---|
| spot_per_unit | number | over 0 to 1000000000 | yes | Spot price of one unit of the commodity. |
| units_per_token | number | over 0 to 1000000 | yes | Units of the commodity behind one token today. |
| position_value | number | over 0 to 10000000000000 | yes | Cash put to work, in either route. |
| storage_bps | number | 0 to 2000 | yes | Storage cost a year, taken in units. 35 means 0.35%. |
| insurance_bps | number | 0 to 2000 | yes | Insurance cost a year, taken in units. 15 means 0.15%. |
| mint_fee_bps | number | 0 to 2000 | yes | Fee to mint, added on top of NAV. 25 means 0.25%. |
| redeem_fee_bps | number | 0 to 2000 | yes | Fee to redeem, taken from value. 25 means 0.25%. |
| min_redeem_units | number | 0 to 1000000000 | yes | Fewest units that can be redeemed. 0 means no minimum. |
| delivery_cost | number | 0 to 1000000000 | yes | Fixed cost of one redemption or delivery, in money. |
| market_premium_pct | number | -50 to 100 | yes | Market price over NAV. 1 means 1% above, -1 means 1% below. |
| cash_rate_pct | number | 0 to 50 | yes | Rate earned on cash held as futures collateral. 4 means 4%. |
| futures_carry_pct | number | -50 to 50 | yes | Yearly cost of rolling futures, positive when they sit above spot. 5 means 5%. |
| holding_years | number | 0 to 100 | yes | Years held. |
| exit_discount_pct | number | 0 to 90 | no | Optional. Discount to NAV on a market exit. It is the only exit under the minimum, and the other choice over it. Default 0, or today's discount if the market is below NAV. |
Hypothetical, and on made-up numbers until you replace them. Nobody traded this, and nothing here is on offer.