Tokens · Minted holdings

Stacking, splitting & merging · states gallery

The front-end for the finalized minted-holding interaction model — how a holder or a team works with a Stack (a fungible bucket with a quantity) versus a Single (an individualized unit). One consolidated reference for every surface where you can meet a stackable holding: the wallet, collection minted-token inventory, vendor inventory, the launchpad, claiming, and the marketplace. Backend is built; these are the FE locations that drive it.

Source: Design Documentation/token-system-design.md → Inventory Stack Interaction Model + Holding Operation Matrix; wallet.md. Related: My Tokens · Manage minted · Vendor claim · Marketplace listing · Variants.
01The rules every surface obeysDeveloper reference — not a screen. The same canonical checks gate every stack operation, everywhere; the UI just exposes them per surface. These four hold across the wallet, inventory, launchpad, claim and marketplace.
Canonical rules
Merge identity = account + token + variant + frozen split

Two holdings only stack when all match. token_id is the family, variant is the class, the frozen resale split rides along — different-split copies of the same token coexist as separate stacks, never silently merge.

Variant is identity everywhere

Every variant is its own line — never a mixed-variant stack. Combine and Merge scope to a single variant; holdings of other variants are greyed out as ineligible, and copy names the variant (“2 Red stacks”), not just “identical copies”.

Listed or locked blocks every mutation

A holding that is listed for sale, mid-claim, or in an in-flight operation is action-locked: Split, Unstack, Merge, Combine, Compact and Transfer are all blocked until the listing is cancelled or the lock clears.

No rollback → seams are benign

On the IC a failed step never reverses a committed one. Two-step flows (split-then-open, split-then-transfer) are designed so a half-finished sequence loses nothing — the split Single simply stays, ready to retry.

Which operations live on which surface
OperationWalletCollection inventoryVendor inventoryClaim / LaunchpadMarketplace
Split stack (N)✓✓✓——
Merge (drag / fold)✓✓✓——
Combine (multi-select)✓✓✓——
Compact all✓✓✓——
Unstack (1 / all)✓opt.opt.——
Transfer amount (partial)✓✓✓——
Claim / buy partial quantity———✓✓

Unstack is a wallet convenience (break a stack into individually transferable/burnable Singles); it may be omitted on creator/vendor surfaces where per-unit individualization isn’t needed. Claim and marketplace never mutate a stack’s structure — they draw units off it at a per-unit price (R41). On the vendor surface these tools run through Select while the vendor is Paused; returning stock is “Remove from vendor” (it returns to the collection), never a “transfer back”.

02Wallet · the stack holding & its actionsMy Tokens is the wallet home — a grid of the canonical token card. A stack shows a ×N badge on its artwork; a single shows its edition. The grid card carries no buttons: opening a holding reveals its actions, and Stack actions (Split / Unstack / Merge) is one of them. Everything is scoped to the holding’s (token, variant) and blocked while it is listed.
My Tokens
k1m9…7uvw
Wallet

My Tokens.

Everything owned by your connected principal. Stacks show a quantity; singles show their own state.

Swampie×12

Swampie

Open edition
Swampie×4

Swampie

Open edition
Staff

Ember Staff

#007
Single · Durability 60%

Open a holding to reach its actions — Transfer, List for sale, Burn, and for a stack, Stack actions. A single has no stack tools.

Stack actions · Swampie · Green

✕
Swampie · ×12
Stackable · Green · 12 in this stack

Split peels an amount into a new stack · Unstack turns copies into individual Singles · Merge folds two same-variant stacks into one. (Frame 03 shows each tab.)

03Wallet · Split · Unstack · Merge — the three tabs of one modalThese are not separate screens or floating panels: they are the three tabs of the Stack actions modal opened in frame 02. Each acts on a single stack. Split peels N (1 ≤ N < quantity) into a new stack of the same identity (12 → 8 + 4). Unstack materializes Singles (one, or all). Merge folds two same-variant stacks you hold into one.

Stack actions · Swampie · Green

✕
Swampie · ×12
Stackable · Green
8
This stack
+
4
New stack

Creates a new stack of 4; this one keeps 8. Same token & variant — they can be re-merged later.

Stack actions · Swampie · Green

✕
Swampie · ×12
Stackable · Green
11
This stack
+
×1
New single

Unstack all on ×12 creates 12 Singles (large counts run as a chunked job).

Stack actions · Swampie · Green

✕
Swampie · ×12
Stackable · Green

You hold 2 Green stacks of Swampie — fold them into one.

12
Stack A
+
8
Stack B
→
20
Merged

Dragging one stack directly onto another performs the same merge.

04Wallet · Combine & Compact — a Select mode over My TokensThere is no separate “Combine” section. Combine is a Select mode on the My Tokens grid: turn it on and corner checkboxes appear. Tick identical, unlocked holdings of one token+variant to Combine into a stack, or Compact stacks to fold every eligible stack of that token at once. Other variants and listed copies are ineligible — the golden rule, enforced visually.
My Tokens
k1m9…7uvw
Wallet · select

My Tokens.

Combine identical copies (same variant, same resale terms) into a stack, or compact all eligible stacks of a token.

2 selectedSwampie · Green · identical & unlocked
Swampie×12

Swampie

Open edition
Swampie×4

Swampie

Open edition
Swampie×4

Swampie

Open edition
Other variant — can’t combine
Swampie×3

Swampie

Open edition
Listed — cancel first
Only identical, unlocked copies of the same token and variant — carrying the same resale terms — can be combined. A copy that is listed for sale must have its listing cancelled first. Greyed cards here are ineligible.
05Wallet · Transfer & the listed lockTransfer aligns with the wallet’s existing Transfer modal — recipient principal, the “no undo” warning, Confirm transfer. For a stack it adds exactly one field: an amount (a split immediately followed by a transfer, in one atomic step; variant is always preserved). A listed stack is the locked state: the wallet disables its stack tools with one route out — cancel the listing.

Transfer token

✕
Swampie · ×12
Marsh Run · Green · Stack
of 12
Ownership moves immediately on confirm. There’s no undo.
They receive×5 Green
You keep×7 Green
Listed stack — sale-locked
Swampie · ×6
Marsh Run · Green · listed at 0.8 ICP each
Listed · selling in parts
4 of 6 sold · 2 left. While listed, Transfer, Burn and Stack actions are sale-locked — cancel the listing to edit the stack.

Buyers still take partial quantity off the listing (frame 09) — the lock is only on the owner’s structural edits.

06Collection minted-token inventory — grid & listThe team surface is the collection’s Minted page (manage-minted). It shows minted copies the collection itself holds, in grid or list view via the same toggle. A stack shows a ×N badge and reads “stack ×N”. The stack tools are a minor addition: Select → Compact stacks in the bulk bar, and Split / Merge on one stack via its Stack actions (the same modal as the wallet). These act on minted holdings only, never on token definitions.
Studio/Project: Marsh Run/Collections/Marsh Run/Minted
Collection · Minted

Minted.

Minted copies currently held by this collection. Moving to a vendor, selling, or transferring out removes it from this list.

Live
Minted
1,000 of 1,000
Held here
620
In vendors
180
Held externally
200
Burned
0
Swampie
Held×220
Swampie
stack ×220 · GreenCommon
Swampie
Held×64
Swampie
stack ×64 · RedCommon
Staff
Held
Ember Staff
copy 3 / 50Uncommon
06List view — same holdings, same toggle
×220
Swampie
Green · Stack · Common · tok_swmp
Held
×64
Swampie
Red · Stack · Common · tok_swmp
Held
Ember Staff
Copy 3 / 50 · Single · Uncommon · tok_staf
Held
Where the stack tools live here

Turn on Select → the bulk bar exposes Compact stacks (fold every eligible stack of a token). Split and Merge on one stack open its Stack actions — the same modal as frames 02–03.

Minor addition, not a redesign

Everything above is the existing Minted page. Stacks simply carry a ×N badge and gain the same Compact / Split / Merge already available in the wallet.

07Vendor inventory (staged for claim)Vendor inventory is the vendor’s Inventory tab — staged stock as token cards with a ×N stack badge. Editing is gated on Pause (a collector could be claiming while it is Running). The real return path is Select → Remove from vendor, which returns those copies to the collection — there is no “Transfer back to project”. Stack tools (Split / Merge / Compact) run through the same Select → bulk actions, only while Paused. What is staged here is exactly what claimants draw from on the launchpad (frame 08).
Studio/Project: Marsh Run/Vendors/Corner Shop/Inventory
Vendor · Inventory

Staged stock.

Minted stacks staged to this vendor. Pause to edit; removing returns copies to their collection.

LivePausedEditable · paused
1 selectedSwampie · Green · staged
Swampie
×80
Swampie
stack ×80 · GreenCommon
Swampie
×3
Swampie
stack ×3 · RedCommon

Per-unit claim price for staged stock is set on the Costs & rules tab, per tier — not on the inventory card. Low stock (×3) surfaces to claimants as “×3 left”.

08Launchpad & claiming · draw units off a stackDiscovery and claim never restructure a stack — they draw units off it at a per-unit price (R41). The storefront card shows the stack as availability (×N left) + a per-unit price; the claim modal is a “How many?” quantity picker (1 … remaining) with a running total. If someone claims first, it fails cleanly with the remaining count and a one-tap “claim the remaining N”.
Launchpad · claimable stack card
Swampie×80 left
Corner Shop · Marsh Run

Swampie

0.5 ICP eachAvailable

The card shows availability + a per-unit price — no split/merge tools on a discovery surface. (Vendors carry no rarity colour, so the frame is neutral.)

Claim Swampie · Green

✕
Swampie · Green
×80 available · 0.5 ICP each
of 80 remaining
Cost per unit0.5 ICP
Total (6 × 0.5 ICP)3.0 ICP

Only 2 left

✕
Someone beat you to it! There are still 2 available, do you want to claim them?
New total (2 × 0.5 ICP)1.0 ICP

Quantity is race-protected by an atomic check-and-decrement — first call wins; remaining 0 falls through to sold-out. A single Single can be peeled straight off a stack too (the “open one” pattern from variants); if the open half fails, the split Single stays, ready to retry.

09Marketplace · list a stack, buy in partsSecondary listings price a stack per unit with partial buys allowed (R41). The browse card reads “each · ×N left”; the seller sets a per-unit price; the buy modal is the same “How many?” picker with the same take-the-remainder race handling. Listing a stack is what sale-locks it from the owner’s stack tools (frame 05).
Marketplace · browse card
Swampie×6 left
Marsh Run · Green

Swampie

0.8 ICP each · ×6 leftBuy

“each · ×N left” tells a buyer it is a divisible stack, not a single item.

List a stack · priced per unit
Swampie · ×6
Green · your stack

Per unit — buyers choose how many to take. Full stack total: 4.8 ICP.

Buyers can take any amount. Someone might buy all 6, or just 1 — each pays quantity × your unit price, and whatever is left stays listed until it sells out or the listing ends.
Once listed, this stack is sale-locked from Split, Merge and Combine until you cancel the listing.
Buy · pick a quantity
Swampie · Green
Marsh Run · ×6 remaining · seller k1m9…7uvw
of 6 remaining
Price per unit0.8 ICP
You pay (3 × 0.8)2.4 ICP

Only 1 left

✕
Someone beat you to it! There is still 1 available, do you want to buy that?
New total (1 × 0.8 ICP)0.8 ICP