Glossary
A reference for the terms used across these docs and in the contract code.
Auction
A single sealed-bid lot for licensing one IP. Created by a seller, accepting bids from anyone until a fixed deadline.
auctionId
A uint256 identifier assigned by the SealedAuction contract when an
auction is created. Monotonically increasing from 1.
AuctionRevealCondition
A SealedIP contract that gates CDR validator share publishing. Returns true
for a uuid only when both conditions are true simultaneously:
block.timestamp >= auction.deadlineSealedAuction.isTriggered(auctionId) == true
This replaced the earlier time-only approach. Both bid vaults and the seller's
reserveUuid vault are registered on this contract. CDR validators call
checkReadCondition(uint32 uuid, bytes, bytes, address) view returns (bool)
before contributing a decryption share.
Bid
A commitment to pay a specific amount in WIP for the license terms attached to an IP. Submitted as an encrypted payload during the auction's open phase.
bidIndex
A uint256 index within an auction identifying a specific bid slot. Ranges
from 0 to bidCount - 1.
BidPayload
A 149-byte plaintext structure committed inside each TDH2 ciphertext:
address bidder (20 bytes) || uint256 amount (32) || bytes32 nonce (32) || bytes65 signature.
The inner digest is keccak256(abi.encode(auctionId, signer, amount, nonce));
the signed hash uses the Ethereum personal-sign prefix. The same structure is
used for both bids (signer = bidder) and the seller's sealed reserve (signer =
seller).
BidReveal
A struct passed to settle() representing one decrypted bid:
{ uint256 bidIndex; uint256 amount; bytes32 nonce; bytes signature }.
bidSlot
The contract's escrow record for one bid: the bidder's address, deposit amount, ciphertext uuid, and whether ciphertext has been written.
CDR
Confidential Data Rails — the threshold-decryption network operated by
piplabs. The on-chain contract is at
0xCCCcCC0000000000000000000000000000000005.
Ciphertext
The TDH2-encrypted bytes representing a payload (bid or reserve). Stored on-chain in the CDR contract; decryptable only by a quorum of CDR validators after the AuctionRevealCondition passes.
ciphertextUuid
A unique identifier issued by CDR for each ciphertext. Bound to the
auction's AuctionRevealCondition so it can only be decrypted after both
the deadline passes and the auction is triggered.
Deadline
A unix timestamp past which the auction stops accepting bids and can be
triggered. Immutable after createAuction.
Deposit
The amount of WIP a bidder escrows when allocating a slot. Acts as the
upper bound on the bid: the contract enforces bid.amount ≤ deposit at
settle.
ERC-6551
The token-bound-account standard. Story Protocol's IP accounts are ERC-6551 accounts owned by their bound NFT.
IP
Intellectual property registered on Story Protocol. Represented on-chain as an ERC-6551 account address.
ipId
The address of an IP account. Sometimes called "IP id" in documentation.
License terms
A bundle of PIL fields (commercial use, derivatives, royalty, transferability, etc.) that grant specific rights to the holder of a license token.
licenseTermsId
A uint256 identifier for a registered PIL terms struct. Story's
PILicenseTemplate assigns these.
License token
An ERC-721 NFT representing one grant of license terms over one IP. Minted to the auction winner at settlement.
LicenseRegistry
Story Protocol contract storing the (IP → attached terms) mapping. Source of truth for "which terms are attached to which IP".
LicensingModule
Story Protocol contract that performs term attachment and license token minting. Called by SealedAuction at settle.
Orchestrator
The off-chain service that reads CDR plaintext after a trigger and submits
the BidReveal[] array and ReserveReveal to SealedAuction.settle. The
SealedIP-operated orchestrator is the default but anyone can run one.
PIL
Programmable IP License — Story Protocol's standard for expressing IP license terms as on-chain data.
PILicenseTemplate
The Story Protocol contract that registers PIL terms structs and mints license tokens.
Reserve price
See Sealed reserve. The term "reserve price" in the SealedIP contract
refers to the amount revealed at settle. There is no plaintext reservePrice
field in the auction struct.
ReserveReveal
A struct passed to settle() representing the decrypted seller reserve:
{ uint256 amount; bytes32 nonce; bytes signature }. The contract recovers
the signer from the signature and verifies it matches the auction's seller
address. Reverts with InvalidReserveReveal if the signer doesn't match. If
no reserve was sealed, the orchestrator passes a zero-amount reveal.
reserveUuid
The CDR ciphertext uuid allocated for the seller's encrypted reserve. Assigned
by CDR.allocate during createAuction and registered on
AuctionRevealCondition alongside the bid vaults. Stored in the auction struct
alongside the reserveHasCiphertext flag.
Reveal
A decrypted payload. Constructed off-chain by the orchestrator from CDR
plaintext and passed to SealedAuction.settle. See also BidReveal and
ReserveReveal.
Royalty policy
A Story Protocol contract that routes commercial revenue from a derivative
back to its upstream IPs. SealedIP's commercial presets use RoyaltyPolicyLAP.
Sealed bid
A bid whose amount is encrypted under the CDR threshold key and committed on-chain. Sealed bids are unreadable until the auction deadline passes, the auction is triggered, and validators publish their decryption shares.
Sealed reserve
The seller's minimum acceptable bid amount, encrypted into its own CDR vault
(identified by reserveUuid). The reserve is not visible to bidders before
settlement — it shows as "Sealed" in the UI. The reserve is revealed alongside
all bids in the settle() transaction. This is the other half of
two-sided sealing.
SealedAuction
The core SealedIP contract. The state machine that tracks every auction, every bid slot, and every settlement.
Settle / settlement
The atomic close-out transaction. License mints, payment goes to the seller, overpayment is refunded to the winner, and every losing deposit is refunded. All of this happens in one transaction or not at all.
SPGNFT
A Story Periphery (SPG) NFT collection. SealedIP mints new IPs into the shared SPGNFT collection.
State
The on-chain enum value of an auction: Open (0), Triggered (1),
Settled (2), ExpiredNoWinner (3), or ExpiredEmpty (4). See
State machine.
Story Protocol
The IP registration and licensing protocol SealedIP builds on. Deployed on Aeneid testnet at chain id 1315. See docs.story.foundation.
Story Periphery (SPG)
Story Protocol's set of helper contracts that bundle multi-step operations (mint NFT + register IP, attach terms, etc.) into single calls. SealedIP uses SPG in the mint-and-list flow.
TDH2
Threshold Cramer-Shoup, a threshold variant of public-key encryption. The cryptographic scheme CDR uses for bid and reserve encryption.
Threshold cryptography
A cryptographic primitive where the decryption key is split across n
parties, with at least t of them required to decrypt anything. SealedIP
uses TDH2 via CDR for both bids and the seller reserve.
Trigger
The transition from Open to Triggered. Anyone can call
SealedAuction.trigger(auctionId) after the deadline. Triggering is the
second gate (alongside the deadline) that opens the AuctionRevealCondition
and allows CDR validators to start publishing shares.
Two-sided sealing
The property that BOTH the bidder's bid amount AND the seller's reserve price are encrypted before the auction runs and only revealed at settle. Bidders don't see the floor; the seller doesn't see the bids. This prevents strategic anchoring from either direction.
Validator
A node in the CDR threshold network. Holds one share of the threshold decryption key. Publishes partial decryptions when a read condition is satisfied.
WIP
Wrapped IP — the ERC-20 wrapping Story Aeneid's native IP token. Used for
all SealedIP deposits and payouts. Address: 0x1514000000000000000000000000000000000000.
uuid (in CDR context)
A unique identifier issued by CDR for each ciphertext, bound to a read
condition. See ciphertextUuid and reserveUuid above.