Repository navigation
Conversation
pepebndc
marked this pull request as ready for review
October 20, 2026 10:59
pepebndc
requested review from
0xNeshi,
ericnordelo and
igingu
as code owners
October 20, 2026 10:59
Base automatically changed from
cip112-default-accounts
to
cip112-apache-alignment
October 20, 2026 13:53
Base automatically changed from
cip112-apache-alignment
to
igingu-cip112-simplification-and-rad
October 20, 2026 14:02
0xNeshi
force-pushed
the
cip112-one-step-mint
branch
from
October 21, 2026 07:26
e44d4e6 to
9ff73de
Compare
0xNeshi
approved these changes
Oct 21, 2026
0xNeshi
force-pushed
the
cip112-one-step-mint
branch
from
October 21, 2026 14:02
9ff73de to
8ac6bb9
Compare
0xNeshi
added a commit
that referenced
this pull request
Oct 21, 2026
A transfer from the CIP-0112 mint account is a mint. The admin alone creates a mint offer. The admin and the receiver's account parties together mint in one step. TokenRules_OfferMint and offerMintImpl are removed.
0xNeshi
force-pushed
the
cip112-one-step-mint
branch
from
October 23, 2026 11:08
2709e9c to
e9aa7da
Compare
0xNeshi
added a commit
to OpenZeppelin/canton-specs
that referenced
this pull request
Oct 23, 2026
**Proposal** - **Refunds:** A no-mint refund needs a closed nonce, and a close never overwrites a mint. - **`E`:** The epoch size lives on the nonce registry, which refuses nonces from other epochs. - **Lock record:** The nonce registry records each lock's amount and recipient. A re-offer checks both and runs at most once, and a refund checks the amount. - **Trust in `br`:** Section 4.2 says `br` alone can close a live lock or hold a returned credit. - **Disclosure:** `br` discloses the nonce registry versions and claims it witnesses. `ba`'s backend serves everything else, including the pause state to `pa`. - **Consistency:** - `ba` "submits nothing" now applies only to the payment path. - New failure rows for a downed backend and a downed wTOK admin participant. - Renames: "no-mint statement", "redemption claim", "request id". - Answer to Curtis's partial-release question, and a definition of the split field `s`. - Reward split updated to 65.1/20.6/14.3%. **Prototype** - **Registry and gateways:** `E` is on `NonceRegistry` with its own epoch check, and a `LockRecord` is carried in the minted and returned states. Re-offer, refund and hold enforce it, and the gateways no longer carry `E`. - **Tests and `README.md`:** New and updated tests cover these checks, and `README.md` matches. - **Latest OZ CIP112 Deps:** Use the latest OpenZeppelin/canton-contracts CIP112 packages that include [one-step mints](OpenZeppelin/canton-contracts#64) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A transfer from the CIP-0112 mint account (
cip-112/mint) is a mint.TransferFactory_Transferhandles it with the same actor rule as transfers and burns. The mint takes no input holdings and locks nothing.TokenRules_OfferMintandofferMintImplare removed, so every mint goes through a standard factory.[admin][admin]+ receiver account partiesTests:
testMintOneStep: holding created, no instruction, no lock, one event that names the mint account.testOfferMintAuthorityAndBounds: a mint without the admin, or with extra actors, fails. Amount and TTL bounds apply.testMintRefusesSpecialReceiverAndInputs: a mint to a special account or with input holdings fails.testMintStepsFollowReceiverAccount:[admin]completes a mint to the admin's own account. A mint to a second account of alice needs alice for one step.testMintToProviderAccount: a mint to an account with a provider needs the owner and the provider, in one step or on acceptance.testMintRefusesOutOfWindow: a mint outside its requestedAt and executeBefore bounds fails, in both flows.testTransferEventReason: a mint with no reason gets "tokens minted".testPauseBlocksFactoriescovers the one-step mint, andtestMintPaysNoFeeshows that a mint pays no fee.Stacked on #63.