Repository navigation
Releases: RustCoreMassa/rust-core-launchpad
Release list
RustCore Launchpad v1.4.0
Works with the Launchpad contract v1.4.0 (new: the holder discount). On older contracts
the app shows the fees as before, without any discount.
Added
- Holder discount: whoever holds at least one NFT of the collection named by the admin pays the
platform fees less a percentage (10% planned for the RustCore collection; the contract caps it
at 50%) — token and collection launches, imports, and the presale and marketplace fees, fixed
with the discount when a presale or a listing is created. Holding is read from the
collection's standard MRC721 balance when the fee is charged; deposits and storage are never
discounted. Contract:setHolderDiscount(admin),holderDiscount,getHolderDiscount. - The launch, import, presale and listing forms show the discounted fee next to the full one,
and how to get the discount; the discount collection's page says what its NFTs give. /admin: a Holder discount card (collection address and percentage, empty address = off) and
the discount in the status.- Home page: the RustCore membership collection — live mint progress (re-read every 30 s),
price, NFTs left, the limit per wallet, a mint button, and what holding one gives (the
discount with the fees it lowers, support for development, resale on the marketplace). It
shows the collection the holder discount names, or the one announced for the network before
that (membershipCollectionin networks.ts) — on mainnet, Core Keepers
(AS125HSzXL9sphoniiqezuYKX3mGNuuS19yLQKvaJUGyEkfALpVTB). - RustCore Wallet in the Connect dialog (its browser extension, through wallet-provider's new
RustCore provider, not yet in wallet-provider 3.3.1: until that update it shows its install
link). Disconnecting the site in the wallet disconnects the app too; an account without a name
shows its short address in the wallet menu.
Fixed
- Token and collection banners now span the whole width of the page's header card (they stopped
48 px short of the right edge) and are taller (260 px, 160 px on phones); the banner field
suggests a 4:1 image. - Right after a launch, the new token's or collection's page failed with "Not found: Account …"
until the transaction was final (~45 s): the app read the contract's code and storage from the
final state, which doesn't hold it yet. Every read now uses the same (candidate) state as the
contract calls, so a page shows what a transaction did as soon as it executed.
Launchpad contract: v1.4.0 (check it on-chain with npm run verify, see docs/RELEASING.md).
RustCore Launchpad v1.3.2
Works with the Launchpad contract v1.3.1 (unchanged), live on mainnet since 2026-10-17: the
upgrade from v1.0.0 ran after the 72-hour public delay. From this release on, the app and the
contracts package share one version number; the contract's on-chain VERSION changes only with
its code, so the contracts of 1.3.2 build to the same bytecode as v1.3.1.
Changed
- Massa libraries updated:
@massalabs/massa-web35.4.0 (support for the MAIN.5.1 node API,
operation status no longer stuck on "in pool", operations above the maximum size refused
before signing) and@massalabs/wallet-provider3.3.1 (Bearby: paginated storage reads and the
same operation status fix). The contracts are built from the same sources and libraries:
their bytecode is unchanged. - The README says the Launchpad contract v1.3.1 is live on mainnet.
Added
npm run upgrade -- cancel(insmart-contract/) withdraws a pending upgrade of the
Launchpad;docs/RELEASING.mddescribes it, and the snapshot to retake right before running
an upgrade.
Launchpad contract: v1.3.1 (check it on-chain with npm run verify, see docs/RELEASING.md).
RustCore Launchpad v1.3.1
Works with the Launchpad contract v1.3.1 (mainnet: upgrade from v1.0.0 through the 72-hour
delay; the v1.2.0 upgrade proposed on 2026-10-12 is replaced, never executed). It brings the
fixes of the security audit of 2026-10-11 on top of 1.2.0. On older contracts the app reads
listings without their royalty, as before.
Added
- Listings tab on the dashboard: every NFT you listed, active or inactive, with Cancel for
the inactive ones.
Changed
- The royalty is fixed when an NFT is listed, like the marketplace fee: a collection owner
who raises the royalty or changes its receiver afterwards no longer reduces what the seller
of an existing listing gets. Listings made before v1.3.1 still pay the collection's current
royalty, and show it. The NFT page shows the listing's own royalty. - A listing that can't be bought now (the NFT left the seller, the approval was withdrawn, it
expired…) shows as Inactive, with the reason, on the NFT page. Its seller is told when it
would turn buyable again by itself at its old price, for example if the NFT comes back to
their wallet, and can cancel it. The NFT's new holder sees the sell form instead of the old
listing (listing removes it). - Public mint is offered only for collections whose current code is a RustCore template, and
not on RC-Collection v1. Other code could keep the MAS sent. - Imported projects: the Imported badge is a warning, "Original code" reads Unchanged
since import, and a Look-alike symbol badge flags a well-known token's symbol or unusual
characters. An imported token's page says when a token launched here, or a reserved symbol,
has its symbol. - Presales of imported tokens, or of tokens with mutable code, warn contributors (and the
creator, in the wizard) that a code change could stop their claims.
Security
- Launchpad contract v1.3.1:
createPresalerefuses a rate for which hard cap × rate
doesn't fit in 256 bits. The multiplication wrapped around silently, so an absurd rate could
pass the escrow check with tokens owed to an earlier presale of the same token. The presale
form checks it too. - Bidi controls and invisible characters (U+202A–U+202E, U+2066–U+2069, U+200B, U+200E, U+200F,
U+061C, U+FEFF) are removed from names, symbols, descriptions and NFT metadata before they're
shown, so an imported name can't read as another one.
Launchpad contract: v1.3.1 (check it on-chain with npm run verify, see docs/RELEASING.md).
RustCore Launchpad v1.2.0
Works with the Launchpad contract v1.2.0 (mainnet: upgrade from v1.0.0 through the 72-hour
delay). On older contracts the app hides tokenomics and removals (tokenomics alone work from
v1.1.0). The app's version now follows the contract's.
Added
- Tokenomics on token pages: the token's owner declares how the supply is split — up to 30
parts, each with a purpose, a percentage or an amount, an optional one-line description
(vesting, lock…) and an optional address holding it. The parts must add up to 100% of the
supply (the max supply for mintable tokens), checked by the contract. The token page shows them
as a donut chart with the list of parts and the live balance of each address named, and a note
when the supply changed since the declaration. Declared at launch (an optional "Distribution"
section in the wizard, with quick-start templates) or anytime from the token page; only the
storage is paid, no Launchpad fee. The Launchpad doesn't enforce the locks or vesting the
parts describe. - Removal by the admin, for offensive tokens and collections: on the Admin page, next to
Hide, Remove deletes a project from the registry for good, after typing its symbol. Its
address can never be imported again and a launched token's symbol becomes free; its contract
stays on-chain, untouched. A token with an open presale can't be removed (cancel it first);
a removed collection's listings become invalid and anyone can clean them up, the storage
going back to the sellers. Its page says it was removed; a removed token's presale page still
lets contributors claim or refund. - Launchpad contract v1.2.0 (from v1.0.0):
setTokenomics,getTokenomics, an optional
last argument ofcreateToken,removeProjectandisRemoved.getProjectspages count ids
(removed projects leave gaps); existing records and calls are unchanged.
Fixed
- Some refusals reached the app as "VM instance error: error: …" and were shown as raw
technical text instead of the contract's reason.
Security
- RC-Collection v2. In v1 (and in the MRC721 of
@massalabs/sc-standards1.3.0 it builds
on), anyone could make themselves approved for NFTs not minted yet and take each one right
after its mint. v2 accepts only valid addresses as operators and approved addresses, approves
only existing tokens, and clears any approval left on an id when it's minted. No collection
had been launched on mainnet with v1. - The app launches only from the newest template of each kind, so collection launches stay
paused until the Launchpad's admin adds RC-Collection v2 (setTemplate). "Download original
code" finds a template's source by its hash, whatever version number the Launchpad gave it.
Launchpad contract: v1.2.0 (check it on-chain with npm run verify, see docs/RELEASING.md).
RustCore Launchpad v1.0.1
Works with the Launchpad contract v1.0.0 (unchanged).
Changed
- The Launchpad is live on DeWeb at
lrustcore.massa, its only official address, served by
Massa's official gateway (https://lrustcore.massa.network); the README lists it. The footer's
links to the RustCore site and RustCore Wallet point to that gateway too.
Launchpad contract: v1.0.0 (check it on-chain with npm run verify, see docs/RELEASING.md).
RustCore Launchpad v1.0.0
The first release, on Massa mainnet (buildnet only in development builds). It works with the Launchpad
contract v1.0.0 at AS1LbJFfhZpq8DehV7Uw5XQxCyfXtwgUUoiZSTsHcyhEGB7RPWyP (mainnet). Fees on
mainnet: token launch 100 MAS, collection launch 200 MAS, import 50 MAS, presale 2% of the MAS
raised, marketplace 1% of each sale. Not independently audited yet.
Added
- Token launch: an MRC20 token (RC-Token template v1) in one transaction — name, symbol,
decimals, supply, optional minting up to a cap, optional burning, mutable or immutable code.
The creator owns the contract and the whole supply. Symbols are unique across launches;
well-known ones (MAS, USDC, WETH…) are reserved. - Collection launch: an MRC721 collection (RC-Collection template v1) with metadata in one
IPFS folder or a link per NFT, owner mint, optional public mint at the creator's price with a
per-wallet limit, metadata freeze and a royalty. A guide in the wizard shows how to prepare
the metadata (folder layout, an example1.json), and the app shows what it read from
1.jsonbefore the launch. - Import of tokens and collections already deployed, by their owner.
- Explore tokens and collections with filters, categories and search, read straight from
the Launchpad contract — no backend. - NFT marketplace: list, change the price, cancel, buy. No custody. Each sale pays the
creator's royalty and a marketplace fee (1%, capped at 5%), fixed when the NFT is
listed; the seller sees what they'll receive before listing. Stale listings can be cleaned up by anyone, their
storage going back to the seller. A purchase carries the price the buyer saw. - Token presales: soft and hard cap, per-wallet limits, start and end; contributions held in
escrow by the contract; claims on success, refunds on failure or cancel. The presale fee is
fixed when the presale is created. - Dashboard: your tokens, collections, NFTs and presale contributions; edit a project's
description, logo and links; download the original contract code as a zip that rebuilds to
the bytecode on-chain. - Admin page, only for the admin wallet (or the one offered the role): version, fees,
balance, templates and any pending upgrade. A pending upgrade is announced to everyone on
every page. The admin can pause, set fees (presale fee at most 10%, marketplace fee at most
5%), withdraw the fees collected (only those), verify or hide projects, reserve symbols, add
template versions, upgrade the Launchpad through a 72-hour public delay, and hand the role
over in two steps. - Wallets: Bearby, Massa Station and MetaMask (Massa Snap). Nothing connects until you click
Connect wallet. - Every write is simulated before your wallet signs it; costs are shown first and unused
storage MAS are refunded by the contract. - Development mode (
npm start): links to this machine over http and a local IPFS node. npm run verify(insmart-contract/) checks the contracts on-chain against the source,
read-only.- Release workflow: tests, production build, boot check, contract build and tests, then a
GitHub Release with the app and the compiled contracts and their checksums.
Security
- Internal security review of the Launchpad and the templates. Fixed before release: a
reentrancy path through imported contracts into the payment accounting, a presale fee the
admin could change after contributions, a price a seller could raise under a buyer, a
one-step admin transfer, and upgrade storage paid from escrow. The app launches only from
templates whose source it ships, checked by hash.
Launchpad contract: v1.0.0 (check it on-chain with npm run verify, see docs/RELEASING.md).