History – Why a transaction failed

Back
v1.11.1 · currentEvery message on the page checked against the contract source on 22 October 2026 (113 of 113 present; the source is unchanged since the 20 October upgrade) and the registry's current_main re-read. The Verified-against row carries the re-read; a sentence in the 20 October changelog row is joined. Stamped verified.–
1 block modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…src/lib.rs) on 20 October 2026 and again on 22 October 2026, unchanged between the two, the logic the Stokenet upgrade of that day20 October deployed behind the current … with Proposal already tallied.; the old settle_proposal refus…i/foundations/what-is-a-caper)

v1.11.0Outcome-only per VOICE.md §4 Caper overlay (owner decision, 20 Oct 2026): Caper's own fees, splits, thresholds, constants and share math removed; mechanics re-read against the contract at HEAD.–
12 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every assertionbort message a caller can reach on…platform contract, grouped by the call that raises itwhat you were doing – trading · migrating · creating a caper · migration · proposals · voting · the tally crankcounting votes · trigger and resolve · exec…d the founder withdrawal. The sourcecontract also carries invariants thechecks its two packages assertmake on each other across the cross-package boundary (negative token slice, Accumulators are additive-only, the Newton solver's own guards); those, which fire only on a contract bug, and which no manifest reaches them, and; they are not listed. Nor are the arguments one package computes for the other – a ballot's own circulation figure, an exit percentage, a trigger's window end – which a caller never supplies and so cannot get wrong Verified against The contrac…src/caper_dao.rs, contracts/coremmon/src/caper_registry.rs) as of 0a1903d, the source the full redeploy of 11 October 2026 published, and the live CaperMain on Stokenet ( component_tdx_2_1cqhh5rec… (https://dashboard.radixscan.io/component/component_tdx_2_1cqhh5recxpf2yaaphwynxhu6jjcfz5u77zegd297f8c9jxd72l54qd) , the logic the CaperRegistry (https://dashboard.radixscan.io/component/component_tdx_2_1cp56mwqp27edhj9hw0unrjlz7vgd8g4jjt9j2flxu9rj3a4n5qjax0) has resolved to since that redeploy). Every message was re-read on 25 September 2026; the messages that changed on 6 and 11 October were found by diffing the source each deployment published and confirmed in the package code the Gateway serves for bothlib.rs) on 20 October 2026, the logic the Stokenet upgrade of that day deployed behind the current CaperRegistry (https://dashboard.radixscan.io/component/component_tdx_2_1cp56mwqp27edhj9hw0unrjlz7vgd8g4jjt9j2flxu9rj3a4n5qjax0) . A message that exists in the… wallet can show you, so none would beis listed here Changed on 11 September 2026 The redeploy retired Invalid governance tokens and $XRD caper has no curve — the optimistic phase needs a market signal, made Invalid vote tokens unreachable, and added Execution window closed, capers are minted only by the registry, Pending upgrade was proposed by the other path and Pending upgrade is another candidate. It replaced the registry as well as the logic, and the superseded pair still exists and still answers, so a message read off either describes the platform before that date Changed on 15 September 2026 The next full redeploy add20 October 2026 A logic upgrade made the chunk that finishes counting the votes record the verdict itself. A count chunk that lands after it now aborts with Proposal already tallied. two messages a caller can reach, both on the $XRD caper's proposals: Reference basket holds no curve reserve and Basket member's history no longer reaches the window end. It also changed what a sell's circulation check measures, because the skim now takes a slice of the tokens sold. It replaced the registry and the logic again, and the pair that was live from 11 to 15 September, component_tdx_2_1cq64v5tw… with component_tdx_2_1cr7l4u…, still answers too Changed on 18 September 2026 A full redeploy removed the root $XRD caper, the curve-less caper whose token was native XRD, and the reference basket that judged its proposals. Every message that named it is retired: the six $XRD caper has no bonding curve refusals on buy, sell, swap, collateral and DIVEST, $XRD caper cannot have an origin token, $XRD caper holds native XRD, Reference basket holds no curve reserve and Basket member's history no longer reaches the window end. One message was added: XRD is the network's native token, not a cashtag. A sell also stopped paying the trade fee, which was charged on buys only from then until 25 September. It replaced the registry and the logic again, and the superseded pair still answers Changed on 19 September 2026 A logic upgrade changed how the collateralization skim is priced – along the curve rather than as a share of a trade's gross, at a rate that halves with every tenth of the supply sold rather than stopping – and a single logic upgrade put it on every caper at once, with nothing for a founder to opt into. No message on this page changed. Every message quoted below was re-read out of aaad522 on 20 September and still exists verbatim, and none became unreachable. The one assertion the upgrade touched is Fee and skim exceed payout, renamed Skim exceeds payohe old settle_proposal refusal beginning Crystallization incomplete, which told callers to crank first, is retired, and settle_proposal on a proposal with too many ballots left now aborts with Too many ballots to fold inline – crank crystallize_ballots Earlier changes 11 October 2026: Cannot swap a cashtag for itself became Cannot swap a caper for itself, and not a caper and caper of another registry were added. 6 October: Execution fee needs to be XRD, Insufficient executionce a sell stopped carrying a fee; it is an invariant the two packages assert on each other, which no manifest reaches and which this page does not list (see Covers). A redeploy is not by itself a reason to distrust this list – but th fee and Proposer-pays trigger requires the execution fee were retired when the trigger became free, window and Tratde figures quoted below do move, so read those off the component Changed on 21 September 2026 A full redeploy replaced the core, the registry and the logic, and made an exit two calls: thleaves the curve reserve below the curve, No pending upgrade, Pending upgrade is not this proposal's candidate manifest calls exit_open, withdraws both legs itself, and hands them to exit as buckets. It addedd Activation window closed were added. 21 September: Call exit_open for this membe…st all come from the recipient, and made Invalid vote tokens reachable again. No other message changed. Changed on 25 September 2026 A full redeploy replaced the core, the registry and the logic, and removed the 0.5% trade fee: a trade now pays only the skim, and 49.5% of the skim goes to the traded caper’s own treasury. No message a caller can reach changed. The superseded pair still answers Changed on 30 September 2026 A logic upgrade, activated at 16:41:33Z, changed how the collateralization skim is priced once more: one rate per trade – a buy’s read where it starts, a sell’s at the bottom it would reach if every token handed in retired – in place of the integral along the curve, on every caper at once. No message a caller can reach changed, and no assertion moved: the sell path still asserts Skim exceeds payout, which a rate under one on the payout cannot trip. Changed on 1 October 2026 A logic upgrade, activated at 12:21:12Z, slowed the collateralization skim's fall by half: the rate is now half the peak by 1.99% of the supply sold and 1% by 21.4%, and halves every 20% sold after that. Only the rate changed. No message a caller can reach changed, and no assertion moved. Changed on 6 October 2026 A full redeploy replaced the core, the registry and the logic. The proposer now pays one fee at c were added. 18 September: the root $XRD caper was removed, which retired every $XRD caper … message and the two reference-basket messages, and added XRD is the network's native token, not a cashtag. 11 September: Invalid governance tokens was reation and the trigger is free, which retired Execution fee needs to be XRD, Insufficient execution fee and Proposer-pays trigger requires the execution fee. Four messages were added: Trade leaves the curve reserve below the curve on every buy and sell (Buying, selling and swapping), and No pending upgrade,red, and Execution window closed, capers are minted only by the registry, Pending upgrade was proposed by the other path and Pending upgrade is anot this proposal's candidate and Activation window closed on the UPGRADE activate leg (Executing). The superseded pair still answers Changed on 11 October 2026 A full redeploy replaced the core, the registry and the logic. buy_token, sell_token and swap now name the caper by its component address instead of its cashtag, which renamed Cannot swap a cashtag for itself to Cannot swap a caper for itself and added not a caper and caper of another registry (Buying, selling and swapping). The superseded pair still answerher candidate were added. Every registry the platform has retired still answers, so a message read off one of them describes the platform as it was Related FAQ (/wiki/help/fa…i/foundations/what-is-a-caper)

  • Modified – Text at Block 2

    How to read a failure A Radix transaction is atomic: when an assertion check inside the contract fails, th…t would have moved moves. The one thing that is not refunded is the transaction fee, which the manifest locks up front andtwork fee is the one cost that stays spent, because the network keeps it whether the transaction commits or aborts. So aA failed buy costs you the networkat fee and nothing else –: no tokens minted, no $XRD taken, no vote tokens. What theYour wallet shows you is the literal string the failed assertion carries. Every message on this page is one of those strings, copied out ofthe exact text of the check that failed. Every message on this page is copied verbatim from the contract, source rather than paraphrased, so the fastest way to use this page is to search it search the page for the exact text you were shown. They are copied from the commit that is deployed rather than from the tip of the repository, which is not the same thing: a platform upgrade (/wiki/governance/execution) changes every caper at once, so until one lands, the branch's messages are not messages anyone can be shownA platform upgrade (/wiki/governance/execution) changes every caper at once, so the messages listed are the ones the deployed contract carries, not whatever sits in the repository. Two kinds of failure do not …ur account as an argument and tchen re-assert that account's own owner rule, so a manifest naming an account you cannot sign for fails on the rule rather than on a named assertion, and the message you get is the engine's, notck that you can sign for it, so a manifest naming an account your keys do not control fails with the engine's own message rather than the contract's. The second is a failure that never reaches the contract at all –: a rejected manifest, an insufficienttoo small a fee lock, or a wallet that declined to sign. Neither meansays anything about the caper you were transacting with. The fee, window and rate figures quoted below areis page quotes no fees. The Caper app shows each one before you sign: the Cashtag fields on the deployed component with no setters of their own; the FAQ (/wiki/help/faq) explains why that is, and reading them off the ledger yourself is still the right way to check this pagelaunch form shows the registration cost, the Proposal fee line on the create-proposal form shows the proposal fee, and the CAST BALLOT button on a proposal page shows the vote fee. Your wallet then shows the amount leaving your account in the transaction summary.

  • Modified – Text at Block 3

    Buying, selling and swapping M…um 0.001 XRD) A buy below the floor the curve enforces. Raise the payment to at least 0.001 XRD. There is no upper limit other than the curve's own cap. Invalid Payment Token. Needed XRDminimum the message names. Pay more. buy_apply requires XRD payment The bucket handed to the calla buy is not $XRD. Every payment leg on the platform –is $XRD: buys, fees, and donations – is XRD. Rebuild the manifest to withdraw $XRD. Curve Cap Exceeded The buy would push circulation past the curve's cap of 100,000,000,000 tokens. Buy a smaller amount. The cap is a property of thethe caper's supply past the fixed cap on its curve (/wiki/markets/bonding-curve) and. Buy a smaller amount. The cap cannot be raised. Curve full…y would mint zero tokens The portion of the payment that advances the curve solves to zero tokens at the current circulationayment would buy no tokens at the caper's current supply. Buy more. A payment large enough tothat mints a positive amountny tokens at all clears it. Invalid DAO Tokens The sell bucket holds some resourcething other than this caper's own g…e token. Withdraw the caper's own token. The resource is checkedcontract checks the token before the amount is, so this fires ahead of the three rows below it. Invalid DAO To… more than in circulation The tokens the sell retires are more than the caper's own recorded circulation. Since 15 September 2026 that is the amount sold less the skim's token leg, which changes hands instead of going back to the curvesell would retire more tokens than the caper has in circulation. This is a ceiling on the caper, not on your balance. Sell no more than the circulating supplyless. Insufficient Curve Liquidity The curveaper's reserve holds less $XRD than the sellale would pay out. The same check… sells your governance tokens through the curveback, and inside a DIVEST executio…rather than launched, because migrators escrow origin tokens and theits reserve starts at zeroempty. Anyone can top it up permissionlesslythe reserve up by calling donate_collateral, which adds $XRD to the reserve without minting anything or acquiringgiving the donor any claim on it. Trade leave…curve reserve below the curve Core checks, after every buy and every sell, that the curve reserve sits no further below the curve's own integral at the new circulationThe trade would leave the caper's reserve less able to pay sellers than it didwas before the trade. It runs. It runs on every buy and sell, inside an exit, and inside INVEST and DIVEST executions too, because each of them trades on a curve. Nothing in your manifest causes it: the price comes from the live logic, which computes the curve the same way, so. Nothing in your manifest causes it, and an honest trade passes exactlyalways passes. The check sits in the core, which no upgrade replaces, so that every holder can always sell back along the curve whatever a future logic prices. On aupgrade changes. A migrated (/wiki/markets/raising-funds) caper the reserve may sit below the curve by the shortfall its migrations created, and a trade is held to that, not to zerois held to the reserve it already had, not to a full one. Cannot swap a caper for its…component that is not a caper created byof the current core packagedeployment: a token, a treasury, an acco…, sell or swap naming a caper built from the current core packagecreated by a different registry. Trad… the current registry created. This check stops a second registry's capers trading through this CaperMain. Curve collateral must be XRD…eral call whose bucket is not $XRD. The reserve is denominated in holds $XRD and holds nothing else. Donation must b…ufficient Curve Liquidity row above sends you to, so they are worth reading together.

  • Modified – Text at Block 4

    Migrating into a vampire caper… existing token: holders of theat origin token escrow it and re…w caper's governance token at thea ratioe fixed when the caper was created. The escrow is one-way – there is no matching take –, and it is the one pathway onto a caper's supply that is not a buy, which is why the reserve of a migrated caper's reserve starts at zeroempty and the Insufficient Curve Li…ion A migrate against a caper that was not launched without an origin token. Nothing – aAn ordinary caper has no migration path. Buy on the curve instead. Must escrow the orig…ted against. Each caper names exactly one origin token at creation. Withdraw that resourcetoken, not a similar one. Migratio…re caper, or zero amount) The escrowed amount multiplied by the caper's stored ratio roundamount escrowed converts to zero tokens. Escrow more. The ratio is derived from the origin token's tracked total supplyconversion rate is fixed at creation and is cannot adjustable afterwardschange. Migration exceeds curve cap The migration would push circulation past the 100,000,000,000-token cap. Escrow a smaller amount. The cap counts migrated tokens and bought tokens alikethe caper's supply past its cap. Escrow less. Migrated tokens count against the cap the same as bought ones, so a heavily-migrated caper has less curve left than a fresh oneroom left.

  • Modified – Text at Block 5

    Creating a caper The cregistration fee is not flat: it is 10(7 − characters) XRD, so a six-characcost depends on the cashtag: shorter cashtags costs 10 XRD, a four-character one 1,000 XRD, and a three-character one 10,000 XRD. The call assert more. The Cashtag field on the launch form shows the cost of the cashtag you type, and the contract requires theat exact figureamount, so paying more fails as sure…essage What fired What to do Cashtag Char Count needs to be between 0 and 6 A cashtag longer than six characters, or empty. Shorten it. One to six characters inclusiveInvalid Payment Token. Needed XRD The registration payment is not $XRD. Pay in $XRD. Cashtag Char Count needs to be between 0 and 6 A cashtag that is empty or longer than the platform allows. Shorten it. The launch form accepts only lengths the contract allows. Cashtag must be uppercase l… or a leading $ in the cashtag argument. Pass the bare uppercase cashtag –: ACME, not $acme. Invalid Payment Amount The payment doeis not equal the pricexactly the registration cost for theat cashtag's length implies. Recompute the price from the length and pay exactly that. Pay the amount the Cashtag field shows, no more and no less. Origin token must expose a …launch naming an origin token whose resource managerthat does not track its total supply. Pick a token with athat trackeds its supply, or launch without one. The migratconversion ratioe is derivedset from that figuresupply at creation, so a resourcetoken that reports nothingne gives the caper no ratiothing to convert at – and $XRD itself is one such resource. Origin token must have positive supply The named origin token tracks its supply and that supply is zero. NThere is nothing to migrate from. The ratio would divide by it. Cashtag already exists A cre…aming a cashtag another caper already holds. Pick another cashtag. … Migrate into the existing one instead. capers are minted only by t…tember 2026 both constructors assert they are runningrefuse to run anywhere but inside the registry's own frame, so nobody else can strikemint a token or badge carrying a caper's locked identity metadata (contracts/PENTEST.md, L-3). XRD is the network's native…htag. Choose another cashtag. $XRD is the currency every cape…dge does not lift the refusal.

  • Modified – Text at Block 6

    Opening a proposal Everything about a proposal's shape is frozenixed and checked at creation, whic… many of these fire before anyone vote happens. The governing rule is that …ate must be votable both ways: between two and five options, at least one no-op and at lea… Payment needs to be XRD The creationproposal fee bucket is not $XRD. Every fee on the platform is Pay in $XRD. The vote call raises the … needs to be XRD; the trigger takes no paymentis free, so it has no such check. Ti…1024 bytes) A text field over its capthe limit the message names. The limits are incount bytes, not characters, so any non-ASCII text reaches ccented letters, othemr sooner than its length suggests. Shorten the field the message names. The two proposal-level caps are looser than the per-option ones because options are stored structured in the immortal core, where an unbounded field would be a griefing lever on every read that touches their substates; the proposal's own meta blob sits in a cold entry of its own and gets the looser capcripts and emoji reach them sooner than their length suggests. Shorten the field the message names. Must have at least 1 DAO To… create_proposal carries less than one of thate caper's governance token. Buy any meaningful amount on the curve than the message names. Buy the caper's token first. Insufficient proposal…ment is below the proposal fee: 1% of the largest o for this slate. Option's XRD-equivalent value, with a floor of 500 XRD. A token amount converts at the issuing curve's trailing time-weighted average price, not at spot. Pthat move more value pay at least the fee. A slate whose largest option is under 50,000 XRD, or whose options carry no amountarger fee, and a slate that moves nothing (DEBATE, UPGRADE, METADATA), pays the 500 XRD floor. Unlike the vote fee, the excess is returned – the call takes exactly the fee and hands the change back, so headroom over a fee priced off a token costs nothingminimum. Pay at least the amount the Proposal fee line on the create-proposal form shows. The contract takes the fee and returns any excess, so paying a margin over it costs nothing. The form marks the figure as an estimate when an option is paid in a caper's token, whose price can move before the transaction lands. Must have at least 2 options /· Must have at most 5 options A slate outside withe two-to-five range. Resize the slate. The threshold the tally applies scales with the width, so a wider ballot is not a softer onoo few or too many options. Resize the slate. Options must include a no-…ed as the no-op. Add the no-op. Its absence would make a rejection unvotable, which is the reason for the rule; the Caper app appends one for you. Without it nobody could vote to reject. Options must include an ans… are retired) An option whose discriminant is not one of 0, 1, 3, 4, 5 or 6. Kind 2 was VOTE and was retired with the escrow voting system; the number was left unused rather than recyclaction kind the contract does not recognize. The VOTE kind was retired, so a proposal built against the old ABIinterface aborts here. Rebuild it against the current kinds. DE…ecution fields A debate option (kind 6) carrying a currency, amount, …ource or candidate component. StripRemove the execution fields. A debat…the ballot and goes no further, and the contract enforces the emptiness rather than trusting the form. Only the $CAPER caper may p… any caper other than $CAPER. IndividualEach capers govern theirs its own treasuriesy; they do not each run their own version of the protocol platform itself is governed by $CAPER. Take it to $CAPERhere. new_main is not a CaperMain…ing a candidate that is not a globalizdeployed CaperMain. Name a deployed …ssage prints the blueprint it actually founfound instead. METADATA must target this …on pointed at another caper's resourcetoken. A caper may rewrite only its own token's mutable metadata. Payout needs recipient / currency /· Payout needs currency · Payout needs amount A PAYOUT option missin…all three. Every argument is frozenixed at creation, so none can be supplied lateradded at execution. Invest amount …NVEST option smaller than the curve's own buy floorminimum buy. Raise the amount – the. An INVEST executes as an ordinary buy and inherits itshas the same minimum. Payout amount must …zero or less. Name a positive figure. INVEST needs no check of its own here because the buy floor in the row above is stricter than zeroamount. Invest needs target_resourc…ion missing a required field. Both trade kinds need the resourceSupply the token and the amount at creation, for the same frozen-action reason as PAYOUT does. UPGRADE action missing new_…eeds a MetadataUpdate blob in `extra` · METADATA must set at least …named, a METADATA whose extra field does not decode, or one that decodes to an update changinges nothing. Supply the missing part. The METADATA payload is decodchecked at creation rather than at execution, so a malformed blobone fails while the proposal iscan still free tobe fixed. Non-XRD amounts need target…with no cashtag naming which curve pricaper issues it. Name the issuing cashtag. T: the proposal fee for a token amount is priced off that caper's curve – at its trailing time-weighted average, not at spot – so creation has no basis without it. One sibling check guards the same pricing:market. A sibling check, target_cashtag does not issue this currency, fires if the named caper does not issue the currencytoken the payout moves. Proposal i…aper. Choose another. Ids are per-caper and never recyclused, so a retried creation that reuses the id of a proposal thawhose first attempt already landed fails here rather than overwriting it.

  • Modified – Text at Block 7

    Voting A ballot is a full ranked permutation, and the vote fee is asserted for equality rather than as a floor – 100 XRD exactly,ranks every option. The vote fee must be paid exactly: the call gives no change given. Message What fired What to d… is not exactly the vote fee. Send exactly 100 XRD. Overpaying fails here, which is the difference between this call andPay the amount the CAST BALLOT button on the proposal page shows, no more and no less; your wallet shows it before you sign. Overpaying fails here, unlike create_proposal. Voting window closed TheA ballot cast is before the voting start or at or after the voting endopens or after it closes. NVothing to do – phase one is over. If the proposal passed its tally, the way to oppose it now is to sell into theduring its market window. Ballot must rank every option The sequence is shorter or longer than the option countranking has more or fewer entries than the slate has options. Rank all of them. A partial …ot ranks an unknown option An option index past the end of the slate. Indices are zero-based and bounded by the option countstart at zero and stop at the last option. Ballot ranks an option twice A repeated index. Submit a permutation –option. Rank every option exactly once. M…ken to vote The voting account's live balance holds less of the caper's governance token is below onethan the message names. The balance is read live at the cast, not from a snapshot taken earliermoment you vote, so buying in the same transa…eady voted The voting account ihas already icast a ballot on theis proposal's participant list. One account, one ballot. The list is keyed by the account the vote names, and there is no amend or withdraw path – a ballot is final for the window. A second account you control is a different member, and carries that account's own live balance as its weightA ballot cannot be amended or withdrawn. Vote fee needs to be XRD The vote fee bucket is not $XRD. CPay in $XRD. This is checked before the amount is, so ithis fires ahead of Invalid vote f… Proposal already tallied The proposal has been settled. Also raised by the two tally cranks below when they are called after settlementvotes on this proposal have already been counted. Nothing to do. Counting calls sent after the count raise it too: since 20 October 2026 the chunk that finishes the count records the verdict, so any chunk that lands after it ends here.

  • Modified – Text at Block 8

    TallyCounting: the two cranks Closing phase one takes one or two permissionless calls. settle_proposal freezes the verdict, and it folds up to SINGLE_PASS_MAX_votes Votes are counted by permissionless calls that anyone can send once voting closes, and whoever sends one pays its network fee. The COUNT VOTERS = 60 unfolded ballbutton on a proposal page, and Count votes itself, so a proposal with 60 or fewer ballots needs only that call; above that, crystallize_ballots folds the excess in chunks first. Neither is reimbursed: whoever sends one pays that transaction's network fee. Until the redeploy of 11 September 2026 the treasury refunded up to 5 XRD a call out of a per-proposal allowance, and the pen-test fixes removed that allowance outright (contracts/PENTEST.md, L-2)on the home feed, send them from your wallet: a small electorate is counted in one settle_proposal, a larger one in a set of crystallize_ballots chunks sent together, and the chunk that finishes the count records the verdict. Until 11 September 2026 the treasury refunded whoever sent these calls; that refund was removed. Message What fired What to d… Voting window still open A crank calledounting call sent before the voting period has elapsed. Wait. The voting period is readable off the component as voting_period_in_secondcloses. Wait until voting closes. Nothing left to crystallize TheA crystallize cursor has already reached the ballot count. Not an error in substance – the folding is done. Call settle_proposal next. Crystallization incomplet_ballots call on a proposal that has no ballots left to count and no verdict yet, such as one nobody voted on. Call settle_proposal, which records the verdict. Too many ballots to fold inline —– crank crystallize_ballots first settle_proposal called while more than 60 ballots remain unfolded. Crank crystallize_ballots until 60 or fewer are left, then settle – the settle folds that remaindon a proposal with more ballots left than one call counts. Send crystallize_ballots chunks instead; the COUNT VOTES button does this. The chunk that finishes the count records the verdict, so nothing needs sending after itself.

  • Modified – Text at Block 9

    Trigger and resolve A legislativevote that passes executes nothing by itself. trigger_proposal, which takes no paymentis free and is open to any account, locks the trailing-average baseline and opens the market window; resolve_proposal compares the window's own average against that baseline once the window closesopens a market window on the caper's token; once it closes, resolve_proposal checks whether the market held up against where it stood at the trigger. The shape is the optimistic governance (/wiki/dao-governance/concepts…voting/optimistic-governance) one applied to a market rather than to, with the market in place of a veto window. Message What f…uired A trigger on a proposal thatwhose votes hasve not been tallicounted, or was talliere counted and failed. Settle phase one first. A Borda leader passes only if its share of cast weight clears 1.5 / option_count andCount the votes first. The leading option passes only with a supermajority, and never when it is not the no-op. Proposal already t…al. The window is already open; w. Wait for it to close and call resolve_proposal. DE…lled before the market window has elapcloseds. Wait. T for the window is readable off the component as proposal_window_in_secondsto close. Proposal not triggered A re…cond resolve. The verdict is frozeninal. If it passed, the next step … matching execute call, which has to land within seven days of the resolvemust land before the execution window closes.

  • Modified – Text at Block 10

    Executing There are six execute methods for five executable kinds, becauseEach executable kind has its own execute method, and UPGRADE executes in twohas two, one per legs. Each one binds the frozen action and checks itmethod checks that the winning action is the kind ithat method handles, so calling the wrong one is a named failure rather than a silent no-opfails by name rather than doing nothing. Every argument was frozenixed at creation, which is why a stale amount aborts instead of quietly executing a smaller trade –: see execution (/wiki/governa…has run. Resolve first. Settlementd here means the market phasewindow has been resolved, not that the ballot was tallivotes were counted. Proposal did not pass — nothing to execute The market window's average came in below the baseline locked at the trigger. The proposal was vetoed by the marketvetoed the proposal during its window. Nothing to do. Doing nothing ratifies a pro…vate leg is the one call that reads an already-executing proposal back deliberately. Execution window closed An execute more than seven days afterdeliberately acts on a proposal already executing. Execution window closed An execute after the execution window that opens at resolve_proposal ran. Nothing – thas closed. The passed action has lapsed. The resolve stamps a deadline of EXECUTION_WINDOW_SECONDS (7 days) and every execute path refuses a call after it, so a payout the treasury could not fund when it passed lapses rather thandoes not staying armed until the treasury fills (contracts/PENTEST.md, H-2). To do the same thing, put it…Winning option is a no-op The Borda leaderleading option was the “Do nothing” option. A leader that is the no-op fails by rule even when it clears the threshold. A no-op leader fails by rule even with a supermajority, which is what makes ranking …oposal action is not a PAYOUT / an INVEST / a DIVEST / an UPGRADE /· Proposal action is not an INVEST · Proposal action is not a DIVEST · Proposal action is not an UPGRADE · Proposal action is not a METADATA The execute method… the method for the kind that actually won. PAYOUT must execute via e…cute_payout is the same check seen from the other side. Invest m…get caper's tokens The INVEST legbuy returned a resourcetoken other than the target caper's token. The target resource is frozentoken is fixed at creation; check it still m…ush the target caper past its 100,000,000,000-token cap. TheAn INVEST runs as an ordinary buy on the target's curve, so it meets the tradingbuy checks at execution as well as the buy floor at creation. Nothing to fix at execution: the amount was frozenixed at creation and the target's circulationsupply was not. Put up a smaller INV…new proposal. The buy's other guardcheck, Curve fully uncollateralized…— buy would mint zero tokens, is checkedruns at the same point, and the last check on the path, Invest must deposit a positive token amount, is a backstop that guard reaches first backs it up. target_cashtag does not mat…htag from the one the option frozeixed. Pass the frozenixed cashtag. Executing a different trade from the one that passed would break the frozen-action rule. Where the frozen option carries no cashtag at all, the same two calls fail first aswith Invest needs target_cashtag o…whose sale the target caper's curve reserve cannot pay for. TheA DIVEST runs as an ordinary sell on the target's curve, so it meets the sell checks at execution, the way an INVEST meets the buy checks. Nothing to fix in the call: the amount was frozenixed at creation and the target's …rve up with donate_collateral insidbefore the seven-day windowexecution window closes, or the caper can put up a smaller DIVEST as a new proposal. If the treasury now holds less of the token than the frozenixed amount, the withdrawal fails before the sell,first with the engine's own vault error rather than a contract message. Metadata needs target_resou…ad A METADATA execution whose frozen option carries no resourcetoken, or whose payload does not de…either is fixable at execution – both were frozen at creation, where the same checks ru; the same checks run at creation under their own names. A proposal that reachinges here with either missing was built against a different ABIn older interface. Only the $CAPER caper may u… caper other than $CAPER. The propose side raises the near-identicalexecution-side half of Only the $CAPER caper may propose a platform upgrade; this is the execution-side half of the same rule, assert, checked again rather than inferred from itassumed. Proposal not in execution p…e UPGRADE activate leg called on a proposal whosbefore the first leg has not run. Run the first leg. This is the one message whose precondition is that the proposal is already executing, which is why it reads backwards next to the rows above it. Pending upgrade is another candidate The UPGRADE activate leg called while the …ivate leg only ever activates the candidate its own proposal voted for's candidate. Pending upgrade was propose…ut there by the protocol admin badge, and the activate leg is the …overnance path (or the reverse, on the admin's own activate call). Since 11 September 2026 the…date. No pending upgrade The UPGRADE activate leg called while the registry's pending slot is empty. Run the…ts the candidate in the slot. Since 6 October 2026 the logic reads the slot itself before the registry does, so oOn the governance path this fir… upgrade is another candidate belowabove, caught by the logic before it reads the deadlineearlier. A later proposal or the prot…losed The activate leg called more than seven days after the candidate became activatable. Nothing – the upgrade has lapsed. Until 6 October the activate leg had no deadline of its own (contracts/PENTEST.md, H-4)after its activation window closed. The upgrade has lapsed. To install the same logic, p… before the registry's upgrade_delay_seconds has run. ORun this deployment the delay reads 0, so only the firse first leg before the second, and wait out can fire in practice. Run the first leg before the secondy delay the registry sets.

  • Modified – Text at Block 11

    Exiting, and the founder's wit…our fair share of the treasury, and i. It needs both amounts positive: your governance tokens and your vote tokens, and a member earns vote tokens only by casting a ranked ballot, so a holder who has nonly ever vottraded has no exit. Since the redeploy of 21 September 2026 an exit is t…anifest first calls exit_open, which records the member's vote-token balance; it then withdraws both legtokens from the member's account and passehands them to exit as buckets. exit checks that the account it pays signed the transaction. exit pays only the account that signed, and accepts only vote tokens that account's own balance has lostgave up since exit_open, so one accou…th another's governance tokens (contracts/PENTEST.md, M-3). Governance tokens are not bound the same way, because they transfer. From 11 to 21 September exit withdrew both amounts itself, which failed for any account controlled by a key: a contract cannot withdraw from such an account on its owner's behalf. The exit the Caper app builds does all of this. An exit sells theyour governance tokens through the curveback, so besides the rows below it…sufficient Curve Liquidity and, since 6 October 2026, Trade leaves the curve reserve below the curve. Message What fired What to do Exit requires vote tokens The vote-token amount is zero. Cast a ballot. Since the redeploy of 11 September 2026 a ranked ballot is the only way a member earns vote tokens – each mints VOTE_MINT = 1 – and buying, selling, swapping and transfers all mint none, so a holder who has only ever traded cannot exitThe founder withdrawal pays out the founder share, which goes to whoever holds the caper's founder badge. The Founder fees cell in your position on the caper's page shows what is available. Message What fired What to do Exit requires vote tokens The exit carries no vote tokens. Cast a ballot. Buying, selling, swapping and transfers earn no vote tokens. Older material saying a sing… opens the exit describes the deployment before that dateplatform before 11 September 2026. Exit requires governance tokens The exit carries no governance-token amount is zeros. Redeem a positive amount of …unt and caper. Call exit_open with the member'sfor your account and the caper's vote-token address before withdrawing the vote tokens. The exit manifest the Caper app builds does this. Vote tokens must all come fr…the recipient The vote tokens passhanded in differ from what the paid account's own balance lostgave up since exit_open. Withdraw the…ng paid, after exit_open, and passhand in exactly that amount. Invalid…token bucket holds some other resource. Passtoken. Hand in this caper's own vote tokens. Must presentInvalid founder badge for this caper A founder withdrawal with no badge, or a badge from a different caper. The mismatch case names itself separately as Invalid founder badge for this caperpresenting a badge that is not this caper's founder badge. Present this caper's founder badge. Must present founder badge A founder withdrawal whose badge bucket is empty. Withdraw the founder badge into the manifest and present it. Nothing to withdraw A founder withdrawal asking for zero XRD and zero tokens. Namenothing on either the $XRD or the token side. Ask for a positive amount on at least one leg. A zside. Zero on one legside alone is fine –; that legside is skipped. Withdrawal excee…ceeds founder token balance A legwithdrawal asking for more than the founder has bankedbalance holds. Withdraw no more than the accrued balance. The two legs accrue separately – the XRD leg as a share of the curve XRD each trade moves, the token leg as a share of the tokens it moves – so one can be exhausted whilFounder fees cell shows. The $XRD and token balances build up separately, so one can run out before the other is not, and each message names itself side.

  • Modified – Text at Block 12

    When the message is not on thi…l or cashtag fails on a lookup rather than an assertion, so the message reads Unknown proposal or comes back as a missingUnknown cashtag, or the call finds no entity –at all; check the identifier rather t…the manifest named an account whose owner rule the signingyour keys do cannot satisfy. And aign for. A message that contradicts this…the platform logic has moved: a singlone UPGRADE proposal on $CAPER swapchanges the logic for every caper at once, with nothing for a founder to opt into, so what the deployed componen… page rather than trust it. Resolvead current_main onff the CaperRegistry (https://d…/component/component_tdx_2_1cpndqmgr5n6fsf6kausxlyllm4rpuc2zwhn94adws7zegkenqsad8z) , then read the fields and the ABI off56mwqp27edhj9hw0unrjlz7vgd8g4jjt9j2flxu9rj3a4n5qjax0) and read the component it names (https://dashboard.radixscan.io/component/component_tdx_2_1cqma5fhxglr6z6s6ym9y73zm4r9lnuzq474ent08xtsplmdufn8npm) . Resolve it each time rather than copying thean address written here: the component a, because every logic upgrade activates isa new every time, and nine different ones have been current since 11 September 2026component. Check the registry's address as well as its answer –: every registry the platform has retired still answers, and each still resolves a current_main of its own, which will be whatever was current the day it was replaced. The FAQ (/wiki/help/faq) sets out the same discipline for the fees and the windowswith the current_main it had the day it was replaced.

v1.10.4Vote-weight formula replaced with outcome-only wording (VOICE.md §4 Caper overlay)–
1 block modified
  • Modified – Text at Block 11

    Exiting, and the founder's wit…ons/what-is-a-caper) redeems a slicyour fair share of the treasury equal to (t·v)/(V·T), and it needs both amounts positive because that expression has your vote tokens in the numerator: your governance tokens and your vote tokens, so a holder who has never voted has no exit. Since the redeploy of 21 Sep…is not, and each names itself.

v1.10.3Em dashes become spaced en dashes (VOICE.md); dashes inside quotes and source titles kept–
5 blocks modified
  • Modified – Text at Block 1 → Block 1
  • Modified – Text at Block 3
  • Modified – Text at Block 8
  • Modified – Text at Block 9
  • Modified – Text at Block 10
v1.10.2Split paragraphs over 150 words at sentence boundaries; wording unchanged.–
1 block modified
  • Modified – Text at Block 11

    Exiting, and the founder's wit… two calls in one transaction.The manifest first calls exit_…is not, and each names itself.

v1.10.1Moved to the 11 Oct 2026 full redeploy (registry cp56mwqp, main cqhh5rec, source 0a1903d, read on-ledger 11 Oct): a trade now names its caper by component address, so 'Cannot swap a cashtag for itself' became 'Cannot swap a caper for itself' and 'not a caper' and 'caper of another registry' were added, each confirmed in the logic package code the Gateway serves.–
2 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…/src/caper_registry.rs) as of 1827a720a1903d, the source the full redeploy of 611 October 2026 published, and t… Stokenet ( component_tdx_2_1czfxjq3qhh5rec… (https://dashboard.radixscan…o/component/component_tdx_2_1czfxjq3pf4klke3y83fxq0e4kzu6s25grkfz8rw9w76vhp67850eheqhh5recxpf2yaaphwynxhu6jjcfz5u77zegd297f8c9jxd72l54qd) , the logic the CaperRegist…o/component/component_tdx_2_1czf2tnh8zvdqcxmv43xq6200l3vnh9ujz3us69mdz9xw8jmgdqgj84p56mwqp27edhj9hw0unrjlz7vgd8g4jjt9j2flxu9rj3a4n5qjax0) has resolved to since that …he messages that changed on 6 and 11 October were found by diffing …uperseded pair still answers Changed on 11 October 2026 A full redeploy replaced the core, the registry and the logic. buy_token, sell_token and swap now name the caper by its component address instead of its cashtag, which renamed Cannot swap a cashtag for itself to Cannot swap a caper for itself and added not a caper and caper of another registry (Buying, selling and swapping). The superseded pair still answers Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

  • Modified – Text at Block 3

    Buying, selling and swapping M…not to zero. Cannot swap a cashtagper for itself Both legs of the s…e caper. Name two different cashtagspers. not a caper A buy, sell or swap naming a component that is not a caper created by the current core package: a token, a treasury, an account, or a caper from a deployment before 11 October 2026. Pass the caper's own component address, read from the current registry. caper of another registry A buy, sell or swap naming a caper built from the current core package by a different registry. Trade only capers the current registry created. This check stops a second registry's capers trading through this CaperMain. Curve collateral must be XR…ey are worth reading together.

v1.10.0Follows the 6 Oct 2026 full redeploy (source 1827a72): Verified-against points at the new CaperMain and registry; a 'Changed on 6 October 2026' row records the three retired execution-fee messages and the four added ones; 'Trade leaves the curve reserve below the curve' (core assert_reserve, every buy and sell, so exit/INVEST/DIVEST too) added to Buying and noted under Exiting; the H-4 activate-leg messages No pending upgrade / Pending upgrade is not this proposal's candidate / Activation window closed added to Executing. Diff read from source and confirmed in the deployed WASM via the Stokenet Gateway.–
4 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…/src/caper_registry.rs) as of 4b539571827a72, the source the full redeploy of 6 October 2026 published, and the live CaperMain on Stokenet ( component_tdx_2_1cpltlrzzfxjq3… (https://dashboard.radixscan…o/component/component_tdx_2_1cpltlrzfnvky7ekmtvlzr55fa8hzwddt7tmmdn2q3jrqc8pske3jk5zfxjq3pf4klke3y83fxq0e4kzu6s25grkfz8rw9w76vhp67850ehe) , the logic the CaperRegist…o/component/component_tdx_2_1cpndqmgr5n6fsf6kausxlyllm4rpuc2zwhn94adws7zegkenqsad8z) has resolved to since 1 October 2026), re-read 25 September 2026; the logic upgrades of 30 September 2026 (67a9fb1) and 1 October 2026 (b6fbb0f) changed no message (see Changed on 30 September 2026 and Czf2tnh8zvdqcxmv43xq6200l3vnh9ujz3us69mdz9xw8jmgdqgj84) has resolved to since that redeploy). Every message was re-read on 25 September 2026; the messages that changed on 16 October 2026). 4b53957 is the source the full redeploy of 21 September 2026 published. Two contracts commits sit on top of it, df108e5 and 012387e, and the full redeploy of 25 September 2026 published both (below)were found by diffing the source each deployment published and confirmed in the package code the Gateway serves for both. A message that exists in the…ged, and no assertion moved. Changed on 6 October 2026 A full redeploy replaced the core, the registry and the logic. The proposer now pays one fee at creation and the trigger is free, which retired Execution fee needs to be XRD, Insufficient execution fee and Proposer-pays trigger requires the execution fee. Four messages were added: Trade leaves the curve reserve below the curve on every buy and sell (Buying, selling and swapping), and No pending upgrade, Pending upgrade is not this proposal's candidate and Activation window closed on the UPGRADE activate leg (Executing). The superseded pair still answers Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

  • Modified – Text at Block 3

    Buying, selling and swapping M…r acquiring any claim on it. Trade leaves the curve reserve below the curve Core checks, after every buy and every sell, that the curve reserve sits no further below the curve's own integral at the new circulation than it did before the trade. It runs inside an exit and inside INVEST and DIVEST executions too, because each of them trades on a curve. Nothing in your manifest causes it: the price comes from the live logic, which computes the curve the same way, so an honest trade passes exactly. The check sits in the core, which no upgrade replaces, so that every holder can sell back along the curve whatever a future logic prices. On a migrated (/wiki/markets/raising-funds) caper the reserve may sit below the curve by the shortfall its migrations created, and a trade is held to that, not to zero. Cannot swap a cashtag for itse…ey are worth reading together.

  • Modified – Text at Block 10

    Executing There are six execut…ivate the other's candidate. No pending upgrade The UPGRADE activate leg called while the registry's pending slot is empty. Run the first leg, which puts the candidate in the slot. Since 6 October 2026 the logic reads the slot itself before the registry does, so on the governance path this fires ahead of the registry's own No main proposed (below). Pending upgrade is not this proposal's candidate The activate leg called while the slot holds a different candidate from the one this proposal voted for. The same case as Pending upgrade is another candidate below, caught by the logic before it reads the deadline. A later proposal or the protocol admin has replaced this one. Activation window closed The activate leg called more than seven days after the candidate became activatable. Nothing – the upgrade has lapsed. Until 6 October the activate leg had no deadline of its own (contracts/PENTEST.md, H-4). To install the same logic, put it up again as a new proposal. No main proposed · Upgrade tim…e first leg before the second.

  • Modified – Text at Block 11

    Exiting, and the founder's wit…ccount on its owner's behalf. An exit sells the governance tokens through the curve, so besides the rows below it meets the sell checks in Buying, selling and swapping: Insufficient Curve Liquidity and, since 6 October 2026, Trade leaves the curve reserve below the curve. Message What fired What to do …is not, and each names itself.

v1.9.0Proposal fee moved to creation: max(500 XRD, 1% of the largest option); trigger free; ballot fee question removed–
2 blocks modified
  • Modified – Text at Block 6

    Opening a proposal Everything …the platform is XRD. The vote and trigger calls raises the same check under theirits own names, Vote fee needs to be XRD and Execution fee needs to be XRD; the trigger takes no payment, so it has no such check. Title too long (max 512 byt… fee The payment is below the 500 XRD creation fee. Pay at least 500 XRDproposal fee: 1% of the largest option's XRD-equivalent value, with a floor of 500 XRD. A token amount converts at the issuing curve's trailing time-weighted average price, not at spot. Pay at least the fee. A slate whose largest option is under 50,000 XRD, or whose options carry no amount (DEBATE, UPGRADE, METADATA), pays the 500 XRD floor. Unlike the vote fee, the exc… fee and hands the change back, so headroom over a fee priced off a token costs nothing. Must have at least 2 option…Name the issuing cashtag. The 10% executionproposal fee is priced off that caper'…railing time-weighted average, the same read that locks the pass baseline, not at spot – so the triggercreation has no basis without it. One …re rather than overwriting it.

  • Modified – Text at Block 9

    Trigger and resolve A legislat…ng by itself. trigger_proposal prices the execution fee, which takes no payment and is open to any account, locks the trailing-average b…debate position. Nothing to do, and nothing owed: a debate never reaches a trigger, so it never incurs the 10% execution fee. Proposer-pays trigger requires the execution fee The ballot voted proposer-pays and the trigger carried no payment. Attach the fee. Who pays is the ballot's second question, settled by plain weight majority, and a tie is a treasury waiver – a treasury-pays trigger is free and stays permissionless. Execution fee needs to be XRD The trigger payment is not XRD. The fee is priced in XRD even when the winning action moves a caper token, which is why a non-XRD action needs a cashtag to price against. Insufficient execution fee The payment is below 10% of the winning action's XRD-equivalent value, priced at the trailing time-weighted average of the curve that prices it – the same read that locks the baseline – rather than at spot. Pay at least the fee; the excess is returned. UPGRADE and METADATA name no amount, so their basis is zero and the trigger is free either way: a debate is settled by the ballot and opens no market window. Proposal window still open …hin seven days of the resolve.

v1.8.0The skim halves every 20% of the supply sold since the logic upgrade of 1 October 2026–
1 block modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a… Stokenet ( component_tdx_2_1cqma5fhpltlrz… (https://dashboard.radixscan…o/component/component_tdx_2_1cqma5fhxglr6z6s6ym9y73zm4r9lnuzq474ent08xtsplmdufn8npmpltlrzfnvky7ekmtvlzr55fa8hzwddt7tmmdn2q3jrqc8pske3jk5) , the logic the CaperRegist…sad8z) has resolved to since 30 Septem1 October 2026), re-read 25 September 2026; the logic upgrades of 30 September 2026 (67a9fb1) and 1 October 2026 (b6fbb0f) changed no message (see Changed on 30 September 2026 and Changed on 1 October 2026). 4b53957 is the source t…e on the payout cannot trip. Changed on 1 October 2026 A logic upgrade, activated at 12:21:12Z, slowed the collateralization skim's fall by half: the rate is now half the peak by 1.99% of the supply sold and 1% by 21.4%, and halves every 20% sold after that. Only the rate changed. No message a caller can reach changed, and no assertion moved. Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

v1.7.1The registry resolves to CaperMain cqma5fh since the logic upgrade of 30 September 2026–
2 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a… Stokenet ( component_tdx_2_1cr40xf3qma5fh… (https://dashboard.radixscan…o/component/component_tdx_2_1cr40xf3hk3wauqz7pjnvvm067a5hu9ss52wwawdzuz8uxqlj0szvu9) , resolved fromqma5fhxglr6z6s6ym9y73zm4r9lnuzq474ent08xtsplmdufn8npm) , the logic the CaperRegistry (https://d…rpuc2zwhn94adws7zegkenqsad8z) ), re-read 25 September 2026 has resolved to since 30 September 2026), re-read 25 September 2026; the logic upgrade of 30 September 2026 (67a9fb1) changed no message (see Changed on 30 September 2026). 4b53957 is the source the fu…i/foundations/what-is-a-caper)

  • Modified – Text at Block 12

    When the message is not on thi…o/component/component_tdx_2_1cr40xf3hk3wauqz7pjnvvm067a5hu9ss52wwawdzuz8uxqlj0szvu9qma5fhxglr6z6s6ym9y73zm4r9lnuzq474ent08xtsplmdufn8npm) . Resolve it rather than cop…ivates is new every time, and eightnine different ones have been curr… for the fees and the windows.

v1.7.0Logic upgrade of 30 September 2026: the skim reads one rate per trade; CaperMain cqma5fh–
1 block modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…uperseded pair still answers Changed on 30 September 2026 A logic upgrade, activated at 16:41:33Z, changed how the collateralization skim is priced once more: one rate per trade – a buy’s read where it starts, a sell’s at the bottom it would reach if every token handed in retired – in place of the integral along the curve, on every caper at once. No message a caller can reach changed, and no assertion moved: the sell path still asserts Skim exceeds payout, which a rate under one on the payout cannot trip. Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

v1.6.2Cite the CaperMain and registry of the 25 September 2026 redeploy–
2 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a… Stokenet ( component_tdx_2_1czmc8h0r40xf3… (https://dashboard.radixscan…o/component/component_tdx_2_1czmc8h097upkzdpptzjz7k00fh8msjtq7m634zd74g7qxyhuxrck0ur40xf3hk3wauqz7pjnvvm067a5hu9ss52wwawdzuz8uxqlj0szvu9) , resolved from the CaperRe…o/component/component_tdx_2_1czpmphaq634vp8t6vuqhujgcx056gseprzejluktgnexleczmt0jdapndqmgr5n6fsf6kausxlyllm4rpuc2zwhn94adws7zegkenqsad8z) ), re-read 235 September 2026. 4b53957 is th…i/foundations/what-is-a-caper)

  • Modified – Text at Block 12

    When the message is not on thi…o/component/component_tdx_2_1czpmphaq634vp8t6vuqhujgcx056gseprzejluktgnexleczmt0jdapndqmgr5n6fsf6kausxlyllm4rpuc2zwhn94adws7zegkenqsad8z) , then read the fields and t…o/component/component_tdx_2_1czmc8h097upkzdpptzjz7k00fh8msjtq7m634zd74g7qxyhuxrck0ur40xf3hk3wauqz7pjnvvm067a5hu9ss52wwawdzuz8uxqlj0szvu9) . Resolve it rather than cop… for the fees and the windows.

v1.6.1The trade fee is gone: the skim now splits 49.5% to the caper's treasury, 50% to the founder and 0.5% to the $CAPER treasury–
1 block modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a… 21 September 2026 published. OneTwo contracts commits sits on top of it:, df108e5 charges the trade fee on a sell as well as a buy, and because it changes the core it takes effect only with another redeployand 012387e, and the full redeploy of 25 September 2026 published both (below). A message that exists in the…d paying the trade fee, which is nowwas charged on buys only from then until 25 September. It replaced the registry and…n. No other message changed. Changed on 25 September 2026 A full redeploy replaced the core, the registry and the logic, and removed the 0.5% trade fee: a trade now pays only the skim, and 49.5% of the skim goes to the traded caper’s own treasury. No message a caller can reach changed. The superseded pair still answers Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

v1.6.0Exit is two calls since the full redeploy of 21 September 2026 (exit_open, then exit with buckets): added its two new messages and the reachable Invalid vote tokens row, a Changed on 21 September row, and repointed the provenance row and the check-this-page links from the retired czqsy8n/crf8dl0 pair to the live czmc8h0/czpmphaq pair, source 4b53957. Verified on-ledger and in source 23 September 2026. wiki-sweep #457.–
3 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…/src/caper_registry.rs) as of aaad5224b53957, and the live CaperMain on Stokenet ( component_tdx_2_1czqsy8nmc8h0… (https://dashboard.radixscan…/component/component_tdx_2_1czqsy8ncz6mcfp43mmnus39kk2l73f8x7wrxjwnzmth93aruhv43pmmc8h097upkzdpptzjz7k00fh8msjtq7m634zd74g7qxyhuxrck0u) , resolved from the CaperRe…o/component/component_tdx_2_1crf8dl07k744cd0ekefyxf450r93jjwe9ewl6shl4zqr8vngjmnnxgzpmphaq634vp8t6vuqhujgcx056gseprzejluktgnexleczmt0jda) ), re-read 203 September 2026. aaad5224b53957 is the source the logic upgradefull redeploy of 219 September 2026 published, and on 20 September no contracts commit sat on top of it. One contracts commit sits on top of it: df108e5 charges the trade fee on a sell as well as a buy, and because it changes the core it takes effect only with another redeploy. A message that exists in the…read those off the component Changed on 21 September 2026 A full redeploy replaced the core, the registry and the logic, and made an exit two calls: the manifest calls exit_open, withdraws both legs itself, and hands them to exit as buckets. It added Call exit_open for this member and caper first and Vote tokens must all come from the recipient, and made Invalid vote tokens reachable again. No other message changed. Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

  • Modified – Text at Block 11

    Exiting, and the founder's wit…okens in the numerator. Since 1the redeploy of 21 September 2026 an exit takes the two amounts rather than two buckets andis two calls in one transaction. The manifest first calls exit_open, which records the member's vote-token balance; it then withdraws both legs from the account it pays, under that account's own authoritymember's account and passes them to exit as buckets. exit checks that the account it pays signed the transaction, and accepts only vote tokens that account's balance has lost since exit_open, so one account's vote tokens canno longert be paired with another's gove…ns (contracts/PENTEST.md, M-3) – and a foreign resource can no longer be handed in, which is why the old Invalid vote tokens and Invalid governance token. Governance tokens are not bound the same way, because they transfer. From 11 to 21 September exit withdrew both amounts itself, which failed for any account controlled by a key: a contract cannot withdraw from such an account on its rows are gonener's behalf. Message What fired What to d…n alongside the vote tokens. Call exit_open for this member and caper first exit ran without an exit_open earlier in the same transaction for the same account and caper. Call exit_open with the member's account and the caper's vote-token address before withdrawing the vote tokens. The exit manifest the Caper app builds does this. Vote tokens must all come from the recipient The vote tokens passed in differ from what the paid account's own balance lost since exit_open. Withdraw the vote tokens from the account being paid, after exit_open, and pass exactly that amount. Invalid vote tokens The vote-token bucket holds some other resource. Pass this caper's own vote tokens. Must present founder badge A f…is not, and each names itself.

  • Modified – Text at Block 12

    When the message is not on thi…o/component/component_tdx_2_1crf8dl07k744cd0ekefyxf450r93jjwe9ewl6shl4zqr8vngjmnnxgzpmphaq634vp8t6vuqhujgcx056gseprzejluktgnexleczmt0jda) , then read the fields and t…/component/component_tdx_2_1czqsy8ncz6mcfp43mmnus39kk2l73f8x7wrxjwnzmth93aruhv43pmmc8h097upkzdpptzjz7k00fh8msjtq7m634zd74g7qxyhuxrck0u) . Resolve it rather than cop…ivates is new every time, and seveneight different ones have been curr… for the fees and the windows.

v1.5.0Point the reader at the live registry and CaperMain, and stop quoting a component address that a logic upgrade replaces every few days–
2 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…26. aaad522 is the source the redeploylogic upgrade of 19 September 2026 publishe…ld rather than stopping – and the platform was redeployed onto ita single logic upgrade put it on every caper at once, with nothing for a founder to opt into. No message on this page chan…i/foundations/what-is-a-caper)

  • Modified – Text at Block 12

    When the message is not on thi…/component/component_tdx_2_1cr65qc2r33ky36j49lp3mdee7x45pzewr8dp0q6z2ya57mkajmtch9f8dl07k744cd0ekefyxf450r93jjwe9ewl6shl4zqr8vngjmnnxg) , then read the fields and t…o/component/component_tdx_2_1cq6jcm9hd6uakguta74dvv63qa2p4seap47htt0px8rftecq2wd3na) zqsy8ncz6mcfp43mmnus39kk2l73f8x7wrxjwnzmth93aruhv43pm) . Resolve it rather than copying the address written here: the component a logic upgrade activates is new every time, and seven different ones have been current since 11 September 2026. Check the registry's address as well as its answer: the two – every registriesy the platform used before 15 September 2026has retired still answer toos, and each still resolves a current_main of its own, which will be whatever was current the day it was replaced. The FAQ (/wiki/help/faq) s… for the fees and the windows.

v1.4.0Re-verify every message against aaad522 and the live CaperMain czqsy8n; record that the 19 Sep upgrade retired none of them–
2 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…/src/caper_registry.rs) as of 890e2a7aaad522, and the live CaperMain on Stokenet ( component_tdx_2_1cq6jcm9zqsy8n… (https://dashboard.radixscan…o/component/component_tdx_2_1cq6jcm9hd6uakguta74dvv63qa2p4seap47htt0px8rftecq2wd3nazqsy8ncz6mcfp43mmnus39kk2l73f8x7wrxjwnzmth93aruhv43pm) , resolved from the CaperRe…/component/component_tdx_2_1cr65qc2r33ky36j49lp3mdee7x45pzewr8dp0q6z2ya57mkajmtch9f8dl07k744cd0ekefyxf450r93jjwe9ewl6shl4zqr8vngjmnnxg) ), re-read 1720 September 2026. 890e2a7aaad522 is the source the full redeploy of 159 September 2026 published, and on 1720 September no contracts commit…uperseded pair still answers Changed on 19 September 2026 A logic upgrade changed how the collateralization skim is priced – along the curve rather than as a share of a trade's gross, at a rate that halves with every tenth of the supply sold rather than stopping – and the platform was redeployed onto it. No message on this page changed. Every message quoted below was re-read out of aaad522 on 20 September and still exists verbatim, and none became unreachable. The one assertion the upgrade touched is Fee and skim exceed payout, renamed Skim exceeds payout once a sell stopped carrying a fee; it is an invariant the two packages assert on each other, which no manifest reaches and which this page does not list (see Covers). A redeploy is not by itself a reason to distrust this list – but the fee, window and rate figures quoted below do move, so read those off the component Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

  • Modified – Text at Block 11

    Exiting, and the founder's wit…crue separately – the XRD leg off the gross of each buy and sellas a share of the curve XRD each trade moves, the token leg as a slichare of the tokens each tradeit moves – so one can be exhaust…is not, and each names itself.

v1.3.1Remove the $XRD caper and its reference basket, and say a sell pays no trade fee. Both follow the 18 September 2026 redeploy.–
7 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…_1cr7l4u…, still answers too Changed on 18 September 2026 A full redeploy removed the root $XRD caper, the curve-less caper whose token was native XRD, and the reference basket that judged its proposals. Every message that named it is retired: the six $XRD caper has no bonding curve refusals on buy, sell, swap, collateral and DIVEST, $XRD caper cannot have an origin token, $XRD caper holds native XRD, Reference basket holds no curve reserve and Basket member's history no longer reaches the window end. One message was added: XRD is the network's native token, not a cashtag. A sell also stopped paying the trade fee, which is now charged on buys only. It replaced the registry and the logic again, and the superseded pair still answers Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

  • Modified – Text at Block 3

    Buying, selling and swapping M…Name two different cashtags. $XRD caper has no bonding curve — use migrate() instead A buy against the root $XRD caper. $XRD has no curve, so there is nothing to buy it on – but the message's own advice does not apply to the caper that raises it. migrate aborts on $XRD with This caper does not support migration, because the $XRD caper is constructed with no origin token at all. Nothing acquires $XRD-caper governance tokens through the platform, because native XRD is that caper's governance token: the constructor binds the token manager straight to the XRD resource instead of minting a supply, so anyone already holding XRD holds the membership this buy was trying to buy. $XRD caper has no bonding curve — governance tokens are non-salable A sell against the root $XRD caper. There is no sell side. The same shape appears as cannot swap from XRD, cannot swap into XRD and nothing to collateralize on the other curve calls. Curve collateral must be XRD A…ey are worth reading together.

  • Modified – Text at Block 4

    Migrating into a vampire caper…ry caper has no migration path, and neither does the root $XRD caper. Buy on the curve instead. M…s curve left than a fresh one.

  • Modified – Text at Block 5

    Creating a caper The creation …(contracts/PENTEST.md, L-3). $XRD caper cannot have an origin token — native XRD IS the governance token, no migration step is needed A launch of the root $XRD caper naming an origin token. This one is historical rather than something to fix: $XRD was created at genesis, andis the network's native token, not a cashtag A launch naming XRD as its cashtag. Choose another cashtag. XRD is the currency every caper its constructor binds the token manager straight to the XRD resource. The trading table above and the migration section below carry the rest of the $XRD caper's special casespriced in, so no caper may take its name, and the protocol admin's badge does not lift the refusal.

  • Modified – Text at Block 6

    Opening a proposal Everything …gger has no basis without it. TwoOne sibling checks guards the same pricing: target_cash… the currency the payout moves, and $XRD caper holds native XRD — pass XRD as the currency if the cashtag names $XRD, whose token is XRD and needs no curve to price it. Proposal id already exists …re rather than overwriting it.

  • Modified – Text at Block 9

    Trigger and resolve A legislat…seline once the window closes. The root $XRD caper has no curve, so its proposals read a reference basket of other capers' curves instead – the component's xrd_basket, which lists CAPER alone – and pass if the basket's window average is at or below the baseline. The shape is the optimistic …call trigger_proposal first. Reference basket holds no curve reserve A trigger on an $XRD proposal while no caper in the basket holds any XRD in its curve reserve. Wait until the basket's curves hold XRD. A basket with no reserve has no price, so both averages would read zero and the tie would pass; the trigger refuses to open a window nobody could lose. Basket member's history no longer reaches the window end A resolve on an $XRD proposal after so much trading on a basket caper since the window closed that its retained price checkpoints no longer reach back to the window end. Nothing fixes it afterwards. The proposal stays unsettled and cannot execute, which is the safe side. Resolve $XRD proposals soon after the window closes. Proposal already settled A sec…hin seven days of the resolve.

  • Modified – Text at Block 10

    Executing There are six execut…baseline locked at the trigger (above it, on the $XRD caper). The proposal was vetoed by t…Divest needs target_cashtag. $XRD caper has no bonding curve — its tokens are non-salable A DIVEST whose target is the root $XRD caper. A divest executes as a sell, and $XRD has no sell side. This is checked before the proposal is read at all, so it fires on a proposal that otherwise passed cleanly. Insufficient Curve Liquidity A…e first leg before the second.

v1.3.0Help rotation #433: re-verified against the 15 Sep 2026 redeploy (890e2a7): two new $XRD basket messages, sell-check wording, DIVEST execution liquidity row, founder legs on both trades, live addresses–
6 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…/core/src/caper_registry.rs) at bd589s of 890e2a7, and the live CaperMain on Stokenet ( component_tdx_2_1cq64v5twjcm9… (https://dashboard.radixscan…component/component_tdx_2_1cq64v5twlsaverknjplmh92cv3cdmnazs9q72mnz056u2tujjflhcrjcm9hd6uakguta74dvv63qa2p4seap47htt0px8rftecq2wd3na) , resolved from the CaperRe…/component/component_tdx_2_1cr7l4u0c6rwktxk89k2g5fsdexdjftnurllnxenz0kpzfasmndvzzv65qc2r33ky36j49lp3mdee7x45pzewr8dp0q6z2ya57mkajmtch9) ), re-read 157 September 2026. bd5890e2a7 is the source the genesisfull redeploy of 115 September 2026 published. Contracts commits have landed in the repository since and none of them is deployed – the registry still resolved current_main to the component above on 15 September 2026 – so a message only those commits carry, and on 17 September no contracts commit sat on top of it. A message that exists in the repository but not on the deployed component is not one a wallet can show you, andso none iswould be listed here Changed on 11 Se…he platform before that date Changed on 15 September 2026 The next full redeploy added two messages a caller can reach, both on the $XRD caper's proposals: Reference basket holds no curve reserve and Basket member's history no longer reaches the window end. It also changed what a sell's circulation check measures, because the skim now takes a slice of the tokens sold. It replaced the registry and the logic again, and the pair that was live from 11 to 15 September, component_tdx_2_1cq64v5tw… with component_tdx_2_1cr7l4u…, still answers too Related FAQ (/wiki/help/faq) …i/foundations/what-is-a-caper)

  • Modified – Text at Block 3

    Buying, selling and swapping M… more than in circulation The sell itokens the sell retires largere more than the caper's own recorded circulation. Since 15 September 2026 that is the amount sold less the skim's token leg, which changes hands instead of going back to the curve. This is a ceiling on the cape…D than the sell would pay out. The same check runs inside an exit, which sells your governance tokens through the curve, and inside a DIVEST execution (below). It is the standing state of a…ey are worth reading together.

  • Modified – Text at Block 9

    Trigger and resolve A legislat…seline once the window closes. The root $XRD caper has no curve, so its proposals read a reference basket of other capers' curves instead – the component's xrd_basket, which lists CAPER alone – and pass if the basket's window average is at or below the baseline. The shape is the optimistic …call trigger_proposal first. Reference basket holds no curve reserve A trigger on an $XRD proposal while no caper in the basket holds any XRD in its curve reserve. Wait until the basket's curves hold XRD. A basket with no reserve has no price, so both averages would read zero and the tie would pass; the trigger refuses to open a window nobody could lose. Basket member's history no longer reaches the window end A resolve on an $XRD proposal after so much trading on a basket caper since the window closed that its retained price checkpoints no longer reach back to the window end. Nothing fixes it afterwards. The proposal stays unsettled and cannot execute, which is the safe side. Resolve $XRD proposals soon after the window closes. Proposal already settled A sec…hin seven days of the resolve.

  • Modified – Text at Block 10

    Executing There are six execut…baseline locked at the trigger (above it, on the $XRD caper). The proposal was vetoed by t…at otherwise passed cleanly. Insufficient Curve Liquidity A DIVEST execution whose sale the target caper's curve reserve cannot pay for. The DIVEST runs as an ordinary sell on the target's curve, so it meets the sell checks at execution, the way an INVEST meets the buy checks. Nothing to fix in the call: the amount was frozen at creation and the target's reserve was not. Anyone can top the reserve up with donate_collateral inside the seven-day window, or the caper can put up a smaller DIVEST as a new proposal. If the treasury now holds less of the token than the frozen amount, the withdrawal fails before the sell, with the engine's own vault error rather than a contract message. Metadata needs target_resource…e first leg before the second.

  • Modified – Text at Block 11

    Exiting, and the founder's wit… separately – the XRD leg off each buy's fee slicethe gross of each buy and sell, the token leg as a slice of each mintthe tokens each trade moves – so one can be exhausted whi…is not, and each names itself.

  • Modified – Text at Block 12

    When the message is not on thi…/component/component_tdx_2_1cr7l4u0c6rwktxk89k2g5fsdexdjftnurllnxenz0kpzfasmndvzzv65qc2r33ky36j49lp3mdee7x45pzewr8dp0q6z2ya57mkajmtch9) , then read the fields and t…component/component_tdx_2_1cq64v5twlsaverknjplmh92cv3cdmnazs9q72mnz056u2tujjflhcrjcm9hd6uakguta74dvv63qa2p4seap47htt0px8rftecq2wd3na) . Check the registry's address as well as its answer: the two registryies the platform used before 115 September 2026 still answers too, and each still resolves a current_main … for the fees and the windows.

v1.2.1wiki-sweep #421: the provenance row said the one contracts commit since bd5892a changes no message; later contracts commits now add messages, none of them deployed (current_main unchanged on 15 September 2026), so the row says that instead of a count. Added Invest must deposit a positive token amount, present in the deployed source and missing from the execution table.–
2 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…nz0kpzfasmndvzzv) ), re-read 135 September 2026. bd5892a is th…of 11 September 2026 published; the one c. Contracts commit since adds a report and tests ands have landed in the repository since and none of them is deployed – the registry still resolved current_main to the component above on 15 September 2026 – so a message only those commits carry is not one a wallet changes no messag show you, and none is listed here Changed on 11 September 202…i/foundations/what-is-a-caper)

  • Modified – Text at Block 10

    Executing There are six execut…ches the caper being bought. Curve Cap Exceeded An INVEST execution whose buy would push the target caper past its 100,000,000,000-token cap. The INVEST runs as an ordinary buy on the target's curve, so it meets the trading checks at execution as well as the buy floor at creation. Nothing to fix at execution: the amount was frozen at creation and the target's circulation was not. Put up a smaller INVEST as a new proposal. The buy's other guard, Curve fully uncollateralized — buy would mint zero tokens, is checked at the same point, and the last check on the path, Invest must deposit a positive token amount, is a backstop that guard reaches first. target_cashtag does not match …e first leg before the second.

v1.2.0Sweep #409 (help): re-pinned to the 11 Sep 2026 genesis redeploy (bd5892a; CaperMain cq64v5tw, registry cr7l4u0c) and folded the 'Not yet live' row in. Removed the retired $XRD-no-proposals and Invalid vote/governance tokens rows; added Execution window closed (H-2), capers are minted only by the registry (L-3), the two L-4 pending-upgrade messages, No main proposed / Upgrade timelock, Cashtag already exists and the duplicate vampire origin. Corrected crank reimbursement (L-2 removed it), single-pass settle up to 60 ballots (L-1), TWAP-priced execution fee (M-2), exit taking amounts (M-3), and the exit row's trade-mint claim (a ballot is the only source of v). Footer links re-pointed to the live registry and main.–
8 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a…ontracts/core/src/caper_dao.rs) at 3180b5b, contracts/core/src/caper_registry.rs) at bd5892a, and the live CaperMain on Stokenet ( component_tdx_2_1cr8psn5q64v5tw… (https://dashboard.radixscan…o/component/component_tdx_2_1cr8psn5gl7sf8dyx57yj3xtytv8gsfjd45h8dayqt77vqqg4603psxq64v5twlsaverknjplmh92cv3cdmnazs9q72mnz056u2tujjflhcr) , resolved from the CaperRe…o/component/component_tdx_2_1cqtsx3p6kxwc7lc0av6x7k6rasf2lqwhcxhlr3zf2t32jff3hfv2ttr7l4u0c6rwktxk89k2g5fsdexdjftnurllnxenz0kpzfasmndvzzv) ), re-read 113 September 2026. 3180b5bbd5892a is the commit that source the genesis redeploy of 11 September 2026 published; the one contract sources have since moved four commits that are not live Not yet live The commits after 3180b5bs commit since adds a report and tests and changes no message Changed on 11 September 2026 The redeploy retired Invalid governance tokens and…c phase needs a market signal, made Invalid vote tokens unreachable, and added Execution window closed, execute_by must be in the future and capers are minted only by the registry. None of those are reachable today, because the registry still resolves the same component. This page tracks , Pending upgrade was proposed by the other path and Pending upgrade is another candidate. It replaced the registry as well as the logic, and the superseded pair still exists and still answers, so a message read off either deployment, not the branchscribes the platform before that date Related FAQ (/wiki/help/faq…i/foundations/what-is-a-caper)

  • Modified – Text at Block 5

    Creating a caper The creation …he ratio would divide by it. Cashtag already exists A create_caper naming a cashtag another caper already holds. Pick another cashtag. A vampire caper already exists for this origin token A vampire launch naming an origin token another caper was already launched against. The registry allows one vampire caper per origin token. Migrate into the existing one instead. capers are minted only by the registry A manifest calling the CaperDao or DaoTreasury constructor directly instead of create_caper. Use create_caper. Since 11 September 2026 both constructors assert they are running inside the registry's own frame, so nobody else can strike a token or badge carrying a caper's locked identity metadata (contracts/PENTEST.md, L-3). $XRD caper cannot have an orig…he $XRD caper's special cases.

  • Modified – Text at Block 6

    Opening a proposal Everything …e 10% execution fee is priced atoff that caper's spot,curve – at its trailing time-weighted average, the same read that locks the pass baseline, not at spot – so the trigger has no basis w…re rather than overwriting it. $XRD caper has no curve — the optimistic phase needs a market signal A proposal on the root $XRD caper. $XRD cannot take proposals: with no curve there is no price for the second phase to resolve against.

  • Modified – Text at Block 8

    Tallying: the two cranks Closing phase one takes one or two permissionless calls in order – crystallize_ballots folds the ballots in chunks, then settle_proposal freezes the verdict. Both are reimbursed out of the proposal's own creation fee,. settle_proposal freezes the verdict, and it folds up to SINGLE_PASS_MAX_VOTERS = 60 unfolded ballots itself, so a proposal with 60 or fewer ballots needs only that call; above that, crystallize_ballots folds the excess in chunks first. Neither is reimbursed: whoever sends one pays that transaction's network fee. Until the redeploy of 11 September 2026 the treasury refunded up to 5 XRD pera call and 500 XRDout of a per-proposal, so calling them costs the caller nothing beyond the network fee allowance, and the pen-test fixes removed that allowance outright (contracts/PENTEST.md, L-2). Message What fired What to d… settle_proposal called while more than 60 ballots remain unfolded. Keep cCranking crystallize_ballots until it reports nothing left,60 or fewer are left, then settle – then settle folds that remainder itself.

  • Modified – Text at Block 9

    Trigger and resolve A legislat… action's XRD-equivalent value at that moment's, priced at the trailing time-weighted average of the curve that prices it – the same read that locks the baseline – rather than at spot. Pay at least the fee; t…p is the matching execute call, which has to land within seven days of the resolve.

  • Modified – Text at Block 10

    Executing There are six execut… proposal back deliberately. Execution window closed An execute more than seven days after resolve_proposal ran. Nothing – the passed action has lapsed. The resolve stamps a deadline of EXECUTION_WINDOW_SECONDS (7 days) and every execute path refuses a call after it, so a payout the treasury could not fund when it passed lapses rather than staying armed until the treasury fills (contracts/PENTEST.md, H-2). To do the same thing, put it up again as a new proposal. Winning option is a no-op The …rds next to the rows above it. Pending upgrade is another candidate The UPGRADE activate leg called while the registry's pending slot holds a different candidate from the one this proposal voted for. The slot holds one candidate and either path may overwrite it, so a later proposal or the protocol admin has replaced this one. The activate leg only ever activates the candidate its own proposal voted for. Pending upgrade was proposed by the other path The pending candidate was put there by the protocol admin badge, and the activate leg is the governance path (or the reverse, on the admin's own activate call). Since 11 September 2026 the slot records which path proposed it, and neither may activate the other's candidate. No main proposed · Upgrade timelock has not elapsed The activate leg called with the registry's pending slot empty, or before the registry's upgrade_delay_seconds has run. On this deployment the delay reads 0, so only the first can fire in practice. Run the first leg before the second.

  • Modified – Text at Block 11

    Exiting, and the founder's wit…t·v)/(V·T), and it needs both buckets non-emptyamounts positive because that expression has your vote-token balances in the numerator. Message What fired What to do Exit requires vote tokens The vote-token bucket is empty. Vote tokens mint on three surfaces at one rate – one per ranked ballot cast, and 0.01 per XRD of gross value on a buy and on a sell. The holder who cannot exit is the one whose tokens arrived by transfer, because a transfer mints nothing. A single buy opens the exit in the same transaction that opens the position. Since 11 September 2026 exit takes the two amounts rather than two buckets and withdraws both from the account it pays, under that account's own authority, so one account's vote tokens can no longer be paired with another's governance tokens (contracts/PENTEST.md, M-3) – and a foreign resource can no longer be handed in, which is why the old Invalid vote tokens and Invalid governance tokens rows are gone. Message What fired What to do Exit requires governancvote tokens The governance-token bucket is empty. Redeem a positive amount of the caper's own token alongside the vote tokens. Invalid vote tokens / Invalid governance tokens A bucket holding some other resource. Both buckets are checked against this caper's own resources before any payout is computed, so a foreign resource cannot be used to set your own payout percentagevote-token amount is zero. Cast a ballot. Since the redeploy of 11 September 2026 a ranked ballot is the only way a member earns vote tokens – each mints VOTE_MINT = 1 – and buying, selling, swapping and transfers all mint none, so a holder who has only ever traded cannot exit. Older material saying a single buy opens the exit describes the deployment before that date. Exit requires governance tokens The governance-token amount is zero. Redeem a positive amount of the caper's own token alongside the vote tokens. Must present founder badge …is not, and each names itself.

  • Modified – Text at Block 12

    When the message is not on thi…o/component/component_tdx_2_1cqtsx3p6kxwc7lc0av6x7k6rasf2lqwhcxhlr3zf2t32jff3hfv2ttr7l4u0c6rwktxk89k2g5fsdexdjftnurllnxenz0kpzfasmndvzzv) , then read the fields and t…o/component/component_tdx_2_1cr8psn5gl7sf8dyx57yj3xtytv8gsfjd45h8dayqt77vqqg4603psx) q64v5twlsaverknjplmh92cv3cdmnazs9q72mnz056u2tujjflhcr) . Check the registry's address as well as its answer: the registry the platform used before 11 September 2026 still answers too, and still resolves a current_main of its own. The FAQ (/wiki/help/faq) s… for the fees and the windows.

v1.1.1Complete the caller-reachable set the previous revision's rescoped claim promises. Adds the three origin-token checks on create_caper (origin_token is a caller argument, so a vampire launch reaches all three), 'Proposal id already exists', and the two sibling checks on a non-XRD payout's pricing cashtag. The infobox exclusion now names the second excluded class as well: arguments one package computes for the other, which no caller supplies.–
3 blocks modified
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every a… them, and they are not listed. Nor are the arguments one package computes for the other – a ballot's own circulation figure, an exit percentage, a trigger's window end – which a caller never supplies and so cannot get wrong Verified against The contrac…i/foundations/what-is-a-caper)

  • Modified – Text at Block 5

    Creating a caper The creation …e length and pay exactly that. Origin token must expose a tracked total supply A vampire launch naming an origin token whose resource manager does not track supply. Pick a token with a tracked supply, or launch without one. The migration ratio is derived from that figure at creation, so a resource that reports nothing gives the caper no ratio to convert at – and $XRD itself is one such resource. Origin token must have positive supply The named origin token tracks its supply and that supply is zero. Nothing to migrate from. The ratio would divide by it. $XRD caper cannot have an origin token — native XRD IS the governance token, no migration step is needed A launch of the root $XRD caper naming an origin token. This one is historical rather than something to fix: $XRD was created at genesis, and its constructor binds the token manager straight to the XRD resource. The trading table above and the migration section below carry the rest of the $XRD caper's special cases.

  • Modified – Text at Block 6

    Opening a proposal Everything …igger has no basis without it. Two sibling checks guard the same pricing: target_cashtag does not issue this currency if the named caper does not issue the currency the payout moves, and $XRD caper holds native XRD — pass XRD as the currency if the cashtag names $XRD, whose token is XRD and needs no curve to price it. Proposal id already exists The id handed to create_proposal is already taken on this caper. Choose another. Ids are per-caper and never recycled, so a retried creation that reuses the id of a proposal that already landed fails here rather than overwriting it. $XRD caper has no curve — th…cond phase to resolve against.

v1.1.0Close the catalogue's completeness gap and fix the $XRD remedy. The page advertised every assertion message the contract can abort on and carried 63 of the 150 non-test messages in the deployed source (3180b5b). Fixed: the $XRD buy row repeated the contract's own advice to 'use migrate() instead', and migrate() aborts on the $XRD caper with 'This caper does not support migration' because it is constructed with no origin token — native XRD is that caper's governance token. Added: a migration section (4 messages), the five proposal size limits, 'Participant has already voted', 'Invalid DAO Tokens', donate_collateral's own two, the three fee-resource checks, the INVEST/DIVEST/METADATA/UPGRADE field asserts, five execution-side rows and the two founder balance ceilings. Infobox now scopes the claim to caller-reachable messages, pins 3180b5b as the deployed commit, and records the five messages the four unshipped contracts commits add or retire.–
1 block added, 8 blocks modified, 8 blocks reordered
  • Modified – Text at Block 1 → Block 1

    Type Reference Covers Every assertion message the platform contract can abort a transaction witha caller can reach on the platform contract, grouped by the call that rai…– trading · creating a caper · migration · proposals · voting · the tall…and resolve · execution · exit and the founder withdrawal. The source also carries invariants the two packages assert on each other across the cross-package boundary (negative token slice, Accumulators are additive-only, the Newton solver's own guards); those fire only on a contract bug, no manifest reaches them, and they are not listed Verified against The contrac…qwhcxhlr3zf2t32jff3hfv2tt) ), 9re-read 11 September 2026. 3180b5b is the commit that is deployed; the contract sources have since moved four commits that are not live Not yet live The commits after 3180b5b retire Invalid governance tokens and $XRD caper has no curve — the optimistic phase needs a market signal, and add Execution window closed, execute_by must be in the future and capers are minted only by the registry. None of those are reachable today, because the registry still resolves the same component. This page tracks the deployment, not the branch Related FAQ (/wiki/help/faq…i/foundations/what-is-a-caper)

  • Modified – Text at Block 2

    How to read a failure A Radix …the exact text you were shown. They are copied from the commit that is deployed rather than from the tip of the repository, which is not the same thing: a platform upgrade (/wiki/governance/execution) changes every caper at once, so until one lands, the branch's messages are not messages anyone can be shown. Two kinds of failure do not a… right way to check this page.

  • Modified – Text at Block 3

    Buying, selling and swapping M…a positive amount clears it. Invalid DAO Tokens The sell bucket holds some resource other than this caper's own governance token. Withdraw the caper's token. The resource is checked before the amount is, so this fires ahead of the three rows below it. Invalid DAO Token Amount A sel… there is nothing to buy it on. It is reached through migrate, not buy_token. $XRD caper has no bonding curve — governance tokens are non-salable A sell against the root $XRD caper. There is no sell side. The same shape appears as cannot swap from XRD, cannot swap into XRD and nothing to collateralize on the other curve calls – but the message's own advice does not apply to the caper that raises it. migrate aborts on $XRD with This caper does not support migration, because the $XRD caper is constructed with no origin token at all. Nothing acquires $XRD-caper governance tokens through the platform, because native XRD is that caper's governance token: the constructor binds the token manager straight to the XRD resource instead of minting a supply, so anyone already holding XRD holds the membership this buy was trying to buy. $XRD caper has no bonding curve — governance tokens are non-salable A sell against the root $XRD caper. There is no sell side. The same shape appears as cannot swap from XRD, cannot swap into XRD and nothing to collateralize on the other curve calls. Curve collateral must be XRD A donate_collateral call whose bucket is not XRD. The reserve is denominated in XRD and holds nothing else. Donation must be positive A donation of zero. Donate a positive amount. Both of these fire on the call the Insufficient Curve Liquidity row above sends you to, so they are worth reading together.

  • Moved – Text at Block 5
  • Moved – Text at Block 6
  • Modified – Text at Block 6

    Opening a proposal Everything …essage What fired What to do Payment needs to be XRD The creation fee bucket is not XRD. Every fee on the platform is XRD. The vote and trigger calls raise the same check under their own names, Vote fee needs to be XRD and Execution fee needs to be XRD. Title too long (max 512 bytes) · Description too long (max 16384 bytes) · Option title too long (max 256 bytes) · Option description too long (max 4096 bytes) · Option extra too long (max 1024 bytes) A text field over its cap. The limits are in bytes, not characters, so any non-ASCII text reaches them sooner than its length suggests. Shorten the field the message names. The two proposal-level caps are looser than the per-option ones because options are stored structured in the immortal core, where an unbounded field would be a griefing lever on every read that touches their substates; the proposal's own meta blob sits in a cold entry of its own and gets the looser cap. Must have at least 1 DAO Token…uy and inherits its minimum. Payout amount must be positive · Divest amount must be positive A PAYOUT or DIVEST naming zero or less. Name a positive figure. INVEST needs no check of its own here because the buy floor in the row above is stricter than zero. Invest needs target_resource · Invest needs amount · Divest needs target_resource · Divest needs amount An INVEST or DIVEST option missing a required field. Both trade kinds need the resource and the amount at creation, for the same frozen-action reason PAYOUT does. UPGRADE action missing new_main · METADATA needs a MetadataUpdate blob in extra · METADATA must set at least one field An UPGRADE with no candidate named, a METADATA whose extra does not decode, or one that decodes to an update changing nothing. Supply the missing part. The METADATA payload is decoded at creation rather than at execution, so a malformed blob fails while the proposal is still free to fix. Non-XRD amounts need target_ca…cond phase to resolve against.

  • Moved – Text at Block 7
  • Modified – Text at Block 7

    Voting A ballot is a full rank… the same transaction works. Participant has already voted The voting account is already in the proposal's participant list. One account, one ballot. The list is keyed by the account the vote names, and there is no amend or withdraw path – a ballot is final for the window. A second account you control is a different member, and carries that account's own live balance as its weight. Vote fee needs to be XRD The vote fee bucket is not XRD. Checked before the amount is, so this fires ahead of Invalid vote fee. Proposal already tallied The p…y are called after settlement.

  • Moved – Text at Block 8
  • Moved – Text at Block 9
  • Modified – Text at Block 9

    Trigger and resolve A legislat…ee and stays permissionless. Execution fee needs to be XRD The trigger payment is not XRD. The fee is priced in XRD even when the winning action moves a caper token, which is why a non-XRD action needs a cashtag to price against. Insufficient execution fee The… is the matching execute call.

  • Moved – Text at Block 10
  • Modified – Text at Block 10

    Executing There are six execut… break the frozen-action rule. Where the frozen option carries no cashtag at all, the same two calls fail first as Invest needs target_cashtag or Divest needs target_cashtag. $XRD caper has no bonding curve — its tokens are non-salable A DIVEST whose target is the root $XRD caper. A divest executes as a sell, and $XRD has no sell side. This is checked before the proposal is read at all, so it fires on a proposal that otherwise passed cleanly. Metadata needs target_resource · Malformed METADATA payload A METADATA execution whose frozen option carries no resource, or whose payload does not decode. Neither is fixable at execution – both were frozen at creation, where the same checks run under their own names. A proposal reaching here with either missing was built against a different ABI. Only the $CAPER caper may upgrade the platform An UPGRADE execution on any caper other than $CAPER. The propose side raises the near-identical Only the $CAPER caper may propose a platform upgrade; this is the execution-side half of the same rule, asserted again rather than inferred from it. Proposal not in execution phase The UPGRADE activate leg called on a proposal whose first leg has not run. Run the first leg. This is the one message whose precondition is that the proposal is already executing, which is why it reads backwards next to the rows above it.

  • Moved – Text at Block 11
  • Modified – Text at Block 11

    Exiting, and the founder's wit…ve amount on at least one leg. A zero on one leg alone is fine – that leg is skipped. Withdrawal exceeds founder balance · Withdrawal exceeds founder token balance A leg asking for more than the founder has banked. Withdraw no more than the accrued balance. The two legs accrue separately – the XRD leg off each buy's fee slice, the token leg as a slice of each mint – so one can be exhausted while the other is not, and each names itself.

  • Moved – Text at Block 12
  • Added – Text at Block 4

    Migrating into a vampire caper A vampire caper (/wiki/markets/raising-funds) is launched against an existing token: holders of the origin token escrow it and receive the new caper's governance token at the ratio fixed when the caper was created. The escrow is one-way – there is no matching take – and it is the one path onto a caper's supply that is not a buy, which is why the reserve of a migrated caper starts at zero and the Insufficient Curve Liquidity row above is its standing state. Message What fired What to do This caper does not support migration A migrate against a caper that was not launched with an origin token. Nothing – an ordinary caper has no migration path, and neither does the root $XRD caper. Buy on the curve instead. Must escrow the origin token The escrowed bucket is not the origin token this caper was created against. Each caper names exactly one origin token at creation. Withdraw that resource, not a similar one. Migration yields zero tokens (not a vampire caper, or zero amount) The escrowed amount multiplied by the caper's stored ratio rounds to zero. Escrow more. The ratio is derived from the origin token's tracked total supply at creation and is not adjustable afterwards. Migration exceeds curve cap The migration would push circulation past the 100,000,000,000-token cap. Escrow a smaller amount. The cap counts migrated tokens and bought tokens alike, so a heavily-migrated caper has less curve left than a fresh one.

v1.0.0New page: the abort messages the deployed contract raises, by call, with cause and remedy. Every message is a literal assertion string read out of contracts/logic/src/lib.rs and contracts/core/src/caper_dao.rs at 3180b5b; the fee, window and delay figures are read off the live CaperMain resolved from the registry.–
11 blocks added
  • Added – Text at Block 1 → Block 1

    Type Reference Covers Every assertion message the platform contract can abort a transaction with, grouped by the call that raises it – trading · creating a caper · proposals · voting · the tally cranks · trigger and resolve · execution · exit Verified against The contract source (contracts/logic/src/lib.rs, contracts/core/src/caper_dao.rs) at 3180b5b, and the live CaperMain on Stokenet ( component_tdx_2_1cr8psn5… (https://dashboard.radixscan.io/component/component_tdx_2_1cr8psn5gl7sf8dyx57yj3xtytv8gsfjd45h8dayqt77vqqg4603psx) , resolved from the CaperRegistry (https://dashboard.radixscan.io/component/component_tdx_2_1cqtsx3p6kxwc7lc0av6x7k6rasf2lqwhcxhlr3zf2t32jff3hfv2tt) ), 9 September 2026 Related FAQ (/wiki/help/faq) , Trading (/wiki/markets/trading) , Proposals (/wiki/governance/proposals) , Execution (/wiki/governance/execution) , What is a caper (/wiki/foundations/what-is-a-caper)

  • Added – Text at Block 2

    How to read a failure A Radix transaction is atomic: when an assertion inside the contract fails, the whole transaction is rejected and nothing it would have moved moves. The one thing that is not refunded is the transaction fee, which the manifest locks up front and the network keeps whether the transaction commits or aborts. So a failed buy costs you the network fee and nothing else – no tokens minted, no XRD taken, no vote tokens. What the wallet shows you is the literal string the failed assertion carries. Every message on this page is one of those strings, copied out of the contract source rather than paraphrased, so the fastest way to use this page is to search it for the exact text you were shown. Two kinds of failure do not appear below. The first is an access-rule failure: several calls take your account as an argument and then re-assert that account's own owner rule, so a manifest naming an account you cannot sign for fails on the rule rather than on a named assertion, and the message you get is the engine's, not the contract's. The second is a failure that never reaches the contract at all – a rejected manifest, an insufficient fee lock, or a wallet that declined to sign. Neither means anything about the caper you were transacting with. The fee, window and rate figures quoted below are fields on the deployed component with no setters of their own; the FAQ (/wiki/help/faq) explains why that is, and reading them off the ledger yourself is still the right way to check this page.

  • Added – Text at Block 3

    Buying, selling and swapping Message What fired What to do Buy too small (minimum 0.001 XRD) A buy below the floor the curve enforces. Raise the payment to at least 0.001 XRD. There is no upper limit other than the curve's own cap. Invalid Payment Token. Needed XRD The bucket handed to the call is not XRD. Every payment leg on the platform – buys, fees, donations – is XRD. Rebuild the manifest to withdraw XRD. Curve Cap Exceeded The buy would push circulation past the curve's cap of 100,000,000,000 tokens. Buy a smaller amount. The cap is a property of the curve (/wiki/markets/bonding-curve) and cannot be raised. Curve fully uncollateralized — buy would mint zero tokens The portion of the payment that advances the curve solves to zero tokens at the current circulation. Buy more. A payment large enough to mint a positive amount clears it. Invalid DAO Token Amount A sell of zero tokens. Sell a positive amount. Can't sell more than in circulation The sell is larger than the caper's own recorded circulation. This is a ceiling on the caper, not on your balance. Sell no more than the circulating supply. Insufficient Curve Liquidity The curve reserve holds less XRD than the sell would pay out. It is the standing state of a caper that migrated (/wiki/markets/raising-funds) rather than launched, because migrators escrow origin tokens and the reserve starts at zero. Anyone can top it up permissionlessly by calling donate_collateral, which adds XRD to the reserve without minting anything or acquiring any claim on it. Cannot swap a cashtag for itself Both legs of the swap name the same caper. Name two different cashtags. $XRD caper has no bonding curve — use migrate() instead A buy against the root $XRD caper. $XRD has no curve, so there is nothing to buy it on. It is reached through migrate, not buy_token. $XRD caper has no bonding curve — governance tokens are non-salable A sell against the root $XRD caper. There is no sell side. The same shape appears as cannot swap from XRD, cannot swap into XRD and nothing to collateralize on the other curve calls.

  • Added – Text at Block 4

    Creating a caper The creation fee is not flat: it is 10(7 − characters) XRD, so a six-character cashtag costs 10 XRD, a four-character one 1,000 XRD, and a three-character one 10,000 XRD. The call asserts the exact figure, so paying more fails as surely as paying less. Message What fired What to do Cashtag Char Count needs to be between 0 and 6 A cashtag longer than six characters, or empty. Shorten it. One to six characters inclusive. Cashtag must be uppercase letters A-Z or digits 0-9 only Lower case, punctuation, spaces or a leading $ in the cashtag argument. Pass the bare uppercase cashtag – ACME, not $acme. Invalid Payment Amount The payment does not equal the price the cashtag's length implies. Recompute the price from the length and pay exactly that.

  • Added – Text at Block 5

    Opening a proposal Everything about a proposal's shape is frozen and checked at creation, which is why so many of these fire before any vote happens. The governing rule is that the slate must be votable both ways: between two and five options, at least one no-op and at least one answer that is not. Message What fired What to do Must have at least 1 DAO Token The proof handed to create_proposal carries less than one of that caper's governance token. Buy any meaningful amount on the curve first. Insufficient proposal fee The payment is below the 500 XRD creation fee. Pay at least 500 XRD. Unlike the vote fee, the excess is returned – the call takes exactly the fee and hands the change back. Must have at least 2 options / Must have at most 5 options A slate outside the two-to-five range. Resize the slate. The threshold the tally applies scales with the width, so a wider ballot is not a softer one. Options must include a no-op ("Do nothing") No option is marked as the no-op. Add the no-op. Its absence would make a rejection unvotable, which is the reason for the rule. Options must include an answer other than "Do nothing" Every option is a no-op. Add an executable action or a debate position. Unknown action kind (VOTE actions are retired) An option whose discriminant is not one of 0, 1, 3, 4, 5 or 6. Kind 2 was VOTE and was retired with the escrow voting system; the number was left unused rather than recycled, so a proposal built against the old ABI aborts here. Rebuild against the current kinds. DEBATE options carry no execution fields A debate option (kind 6) carrying a currency, amount, recipient, target cashtag, target resource or candidate component. Strip the execution fields. A debate is settled by the ballot and goes no further, and the contract enforces the emptiness rather than trusting the form. Only the $CAPER caper may propose a platform upgrade An UPGRADE option on any caper other than $CAPER. Individual capers govern their own treasuries; they do not each run their own version of the protocol. Take it to $CAPER. new_main is not a CaperMain component (blueprint: {}) An UPGRADE naming a candidate that is not a globalized CaperMain. Name a deployed CaperMain. The message prints the blueprint it actually found. METADATA must target this caper's own token A METADATA option pointed at another caper's resource. A caper may rewrite only its own token's mutable metadata. Payout needs recipient / currency / amount A PAYOUT option missing one of its three required fields. Fill all three. Every argument is frozen at creation, so none can be supplied later at execution. Invest amount below the 0.001 XRD buy minimum An INVEST option smaller than the curve's own buy floor. Raise the amount – the INVEST executes as an ordinary buy and inherits its minimum. Non-XRD amounts need target_cashtag to price the fee A PAYOUT in a caper token with no cashtag naming which curve prices it. Name the issuing cashtag. The 10% execution fee is priced at that caper's spot, so the trigger has no basis without it. $XRD caper has no curve — the optimistic phase needs a market signal A proposal on the root $XRD caper. $XRD cannot take proposals: with no curve there is no price for the second phase to resolve against.

  • Added – Text at Block 6

    Voting A ballot is a full ranked permutation, and the vote fee is asserted for equality rather than as a floor – 100 XRD exactly, no change given. Message What fired What to do Invalid vote fee The payment is not exactly the vote fee. Send exactly 100 XRD. Overpaying fails here, which is the difference between this call and create_proposal. Voting window closed The cast is before the voting start or at or after the voting end. Nothing to do – phase one is over. If the proposal passed its tally, the way to oppose it now is to sell into the market window. Ballot must rank every option The sequence is shorter or longer than the option count. Rank all of them. A partial ranking is not a valid ballot. Ballot ranks an unknown option An index past the end of the slate. Indices are zero-based and bounded by the option count. Ballot ranks an option twice A repeated index. Submit a permutation – every option exactly once. Must hold at least 1 DAO Token to vote The voting account's live balance of the caper's governance token is below one. The balance is read live at the cast, not from a snapshot taken earlier, so buying in the same transaction works. Proposal already tallied The proposal has been settled. Also raised by the two tally cranks below when they are called after settlement.

  • Added – Text at Block 7

    Tallying: the two cranks Closing phase one takes two permissionless calls in order – crystallize_ballots folds the ballots in chunks, then settle_proposal freezes the verdict. Both are reimbursed out of the proposal's own creation fee, up to 5 XRD per call and 500 XRD per proposal, so calling them costs the caller nothing beyond the network fee. Message What fired What to do Voting window still open A crank called before the voting period has elapsed. Wait. The voting period is readable off the component as voting_period_in_seconds. Nothing left to crystallize The crystallize cursor has already reached the ballot count. Not an error in substance – the folding is done. Call settle_proposal next. Crystallization incomplete — crank crystallize_ballots first settle_proposal called while ballots remain unfolded. Keep cranking crystallize_ballots until it reports nothing left, then settle.

  • Added – Text at Block 8

    Trigger and resolve A legislative pass executes nothing by itself. trigger_proposal prices the execution fee, locks the trailing-average baseline and opens the market window; resolve_proposal compares the window's own average against that baseline once the window closes. The shape is the optimistic (/wiki/dao-governance/concepts/voting/optimistic-governance) one applied to a market rather than to a veto window. Message What fired What to do Legislative pass required A trigger on a proposal that has not been tallied, or was tallied and failed. Settle phase one first. A Borda leader passes only if its share of cast weight clears 1.5 / option_count and it is not the no-op. Proposal already triggered A second trigger on the same proposal. The window is already open; wait for it and call resolve_proposal. DEBATE options are terminal at the tally — nothing to trigger The winning option is a debate position. Nothing to do, and nothing owed: a debate never reaches a trigger, so it never incurs the 10% execution fee. Proposer-pays trigger requires the execution fee The ballot voted proposer-pays and the trigger carried no payment. Attach the fee. Who pays is the ballot's second question, settled by plain weight majority, and a tie is a treasury waiver – a treasury-pays trigger is free and stays permissionless. Insufficient execution fee The payment is below 10% of the winning action's XRD-equivalent value at that moment's spot. Pay at least the fee; the excess is returned. UPGRADE and METADATA name no amount, so their basis is zero and the trigger is free either way. Proposal window still open resolve_proposal called before the market window has elapsed. Wait. The window is readable off the component as proposal_window_in_seconds. Proposal not triggered A resolve on a proposal with no open window. Someone must call trigger_proposal first. Proposal already settled A second resolve. The verdict is frozen. If it passed, the next step is the matching execute call.

  • Added – Text at Block 9

    Executing There are six execute methods for five executable kinds, because an UPGRADE executes in two legs. Each one binds the frozen action and checks it is the kind that method handles, so calling the wrong one is a named failure rather than a silent no-op. Every argument was frozen at creation, which is why a stale amount aborts instead of quietly executing a smaller trade – see execution (/wiki/governance/execution) . Message What fired What to do Proposal not settled An execute before resolve_proposal has run. Resolve first. Settlement here means the market phase has been resolved, not that the ballot was tallied. Proposal did not pass — nothing to execute The market window's average came in below the baseline locked at the trigger. The proposal was vetoed by the market. Doing nothing ratifies a proposal; defeating one takes selling. Proposal already executed A repeat execution. Nothing to do. The UPGRADE activate leg is the one call that reads an already-executing proposal back deliberately. Winning option is a no-op The Borda leader was the “Do nothing” option. A leader that is the no-op fails by rule even when it clears the threshold, which is what makes ranking it first a real vote against. Proposal action is not a PAYOUT / an INVEST / a DIVEST / an UPGRADE / a METADATA The execute method does not match the winning kind. Call the method for the kind that actually won. PAYOUT must execute via execute_payout is the same check seen from the other side. Invest must deposit the target caper's tokens The INVEST leg returned a resource other than the target caper's token. The target resource is frozen at creation; check it still matches the caper being bought. target_cashtag does not match the proposed action The execute call names a different cashtag from the one the option froze. Pass the frozen cashtag. Executing a different trade from the one that passed would break the frozen-action rule.

  • Added – Text at Block 10

    Exiting, and the founder's withdrawal The exit right (/wiki/foundations/what-is-a-caper) redeems a slice of the treasury equal to (t·v)/(V·T), and it needs both buckets non-empty because that expression has your vote-token balance in the numerator. Message What fired What to do Exit requires vote tokens The vote-token bucket is empty. Vote tokens mint on three surfaces at one rate – one per ranked ballot cast, and 0.01 per XRD of gross value on a buy and on a sell. The holder who cannot exit is the one whose tokens arrived by transfer, because a transfer mints nothing. A single buy opens the exit in the same transaction that opens the position. Exit requires governance tokens The governance-token bucket is empty. Redeem a positive amount of the caper's own token alongside the vote tokens. Invalid vote tokens / Invalid governance tokens A bucket holding some other resource. Both buckets are checked against this caper's own resources before any payout is computed, so a foreign resource cannot be used to set your own payout percentage. Must present founder badge A founder withdrawal with no badge, or a badge from a different caper. The mismatch case names itself separately as Invalid founder badge for this caper. Nothing to withdraw A founder withdrawal asking for zero XRD and zero tokens. Name a positive amount on at least one leg.

  • Added – Text at Block 11

    When the message is not on this page Three cases. An unknown proposal or cashtag fails on a lookup rather than an assertion, so the message reads Unknown proposal or comes back as a missing entity – check the identifier rather than the state. An access-rule failure means the manifest named an account whose owner rule the signing keys do not satisfy. And a message that contradicts this page means the platform logic has moved: a single UPGRADE proposal on $CAPER swaps the logic for every caper at once, with nothing for a founder to opt into, so what the deployed component says today is what every caper does today. That is also how to check this page rather than trust it. Resolve current_main on the CaperRegistry (https://dashboard.radixscan.io/component/component_tdx_2_1cqtsx3p6kxwc7lc0av6x7k6rasf2lqwhcxhlr3zf2t32jff3hfv2tt) , then read the fields and the ABI off the component it names (https://dashboard.radixscan.io/component/component_tdx_2_1cr8psn5gl7sf8dyx57yj3xtytv8gsfjd45h8dayqt77vqqg4603psx) . The FAQ (/wiki/help/faq) sets out the same discipline for the fees and the windows.