Reviewing offerings
The review queue and every action on it — approve, reject, flag, pause, feature, edit, add and delete phases, delete an offering, and the Super Admin emergency cancel that refunds a live sale.
Every offering — whether a creator submitted it or you created it from the admin
form — arrives as PENDING and stays invisible to investors until you act. This
is the gate. Nothing behind it is automatic.
The queue lives at Admin → ICO → Offers (/admin/ico/offer), with per-status
views at /admin/ico/offer/status/<status> and a detail page per offering. All
of them need access.ico.offer and view.ico.offer.
What to check before approving
You are the only thing standing between your users and a project that takes their money. The platform does not verify a single claim on an offering. It does not check the whitepaper, resolve the website, look up the token contract or confirm the team exists.
Work through at least these:
- The blockchain and token type are real for this project, and the blockchain's stored value is one the platform validates addresses against. A mis-valued chain means buyers' addresses are barely checked.
- The phases multiply out to the target. Sum
allocation × tokenPriceacross every phase and compare it withtargetAmount. A mismatch stops the sale early in one direction or the other — see Phases and pricing. - The end date is what the creator thinks it is. It is the start date plus the sum of the phase durations, not a field they chose.
- The vesting shape is one they can actually service. Multiply tranches by expected buyers. A twelve-month linear schedule is a monthly obligation for a year, executed by hand.
- The links resolve — whitepaper, GitHub, Twitter, Telegram and website are all mandatory at submission, but only their format is checked.
- The soft cap is survivable. At the platform default of 30%, a sale that raises a third of its target succeeds and the creator is paid. Decide whether that is acceptable for this project's target.
The actions
All six moderation actions are the same endpoint with a different action, and
all need edit.ico.offer.
| Action | Allowed when | Effect |
|---|---|---|
approve |
Status is PENDING |
Status becomes ACTIVE, approvedAt stamped |
reject |
Status is PENDING |
Status becomes REJECTED, rejectedAt stamped, notes stored as reviewNotes |
pause |
Status is ACTIVE |
isPaused set; contributions refused |
resume |
Status is ACTIVE and paused |
isPaused cleared |
flag |
Not already flagged | isFlagged set |
unflag |
Currently flagged | isFlagged cleared |
Each action emails the project owner and raises an in-app notification. Rejection requires notes — the request is refused without them — and the text is included in both the email and the notification, so write something the creator can act on.
There is no scheduled-activation state in practice. An approved offering is
ACTIVE the instant you click, appears in the Active list, and refuses
contributions with "Offering has not started yet" until its start date arrives.
If you want an offering to appear only when it opens, hold the approval.
pause is what you use when a project is under suspicion but you are not yet
ready to cancel. It is enforced on the money path: a paused offering refuses
every contribution.
flag is not. Flagging marks the offering for internal attention and notifies
the creator; it does not stop a single sale. If you need the money to stop, use
pause.
Editing an offering
Editable: name, symbol, icon, website, target amount, token price, start and end dates, description, blockchain, total supply and the featured flag.
Not editable anywhere: the purchase currency and wallet type, the launch plan, and the vesting terms of contributions already made.
featured is what puts an offering in the featured strip on /ico. Only
ACTIVE offerings with the flag appear there.
targetAmount is both the hard cap on contributions and the basis for the soft
cap. Lowering it on a live offering can put a sale instantly over its cap — no
further contributions are accepted — and raising it can turn a sale that would
have succeeded into one that fails, because the soft cap is a percentage of
whatever the target is at settlement time.
Managing phases
Adding a phase appends it after the last one and pushes the offering's end date
out by its duration. It is refused when the offering is not ACTIVE, PENDING
or UPCOMING, when the name duplicates an existing phase, and when the total
allocation would exceed the token's total supply.
Deleting a phase is refused the moment a single token has been sold from it. The end date is recalculated from the phases that survive.
Because a new phase always lands last, you cannot use it to reprice the round currently selling. It becomes live only once everything before it is empty.
Deleting an offering
Use this for spam and duplicates. It is not a way to stop a sale that has taken money — deleting an offering does not refund anybody. For that, use the emergency cancel below.
The foreign keys from ico_token_offering to ico_launch_plan and
ico_token_type cascade on delete. Removing a plan or a type takes every
offering that points at it with it, including live ones with contributors.
Disable them instead — both carry a status flag that hides them from the pickers without touching anything already using them.
Emergency cancel and refund
This is the scam-response lever. It is restricted to accounts on the Super Admin role — the check is on the role name itself, so no permission grant substitutes for it — and it requires a reason of at least ten characters, which is written to the audit trail.
It sets the offering to CANCELLED, records who cancelled it and why, and
refunds every outstanding contribution: escrow is debited, buyers are credited,
phase supply is restored, vesting schedules behind the refunded contributions are
cancelled, and the participant count is recomputed.
Contributors whose tokens were already delivered on-chain get their money back and keep the tokens. That is unavoidable — the platform has no custody of the token and no ability to reverse a transfer.
Cancel early, or not at all. The longer a fraudulent sale runs, the more of it you are simply writing off.
What you can see per offering
The offering detail page pulls together everything the addon knows:
- Funding over time, computed from live contributions.
- The full contribution list for that offering, with the same actions as the transaction desk.
- Every vesting schedule created under it, with a summary of what is delivered and what is outstanding.
- The phases, the launch plan, the token detail and its token type.
- The roadmap and the creator's update posts.
- The addon's own activity log for that offering.
That log is ico_admin_activity, and it records more than admin actions despite
the name: offering creation, every investment, token release submissions,
vesting tranche releases, settings changes and emergency cancellations, each
with the acting user and a JSON detail blob. It is separate from the platform's
own audit trail. Settings changes are filed against a placeholder offering id of
all zeroes, so they will not appear under any real offering — query the table
directly for those.
Statistics
The dashboard at /admin/ico needs access.ico for the page and
access.ico.stat for its figures. An operator holding only the first gets a
dashboard with no numbers on it.