Nyvora / Product & contract design

A name.
A holder.
A change.

A project-local namespace with clear replacement rules.
Not a domain. Not a verified identity.

3–24 charactersa–z · 0–9 · _Not deployed

Replacement, illustrated — not live data

One name at a time.

Your current nameorbit_7Illustrative wallet A
setNicknamenew_orbitThe caller chooses an available string
After successnew_orbit → wallet Aorbit_7 is released.
NicknameSet(account, value) is emitted.

Purpose

A readable nickname.
A bounded namespace.

Nyvora gives a wallet one current nickname inside the NyvoraNames contract. A string can be held by one wallet at a time. The product is a compact nickname registry, not an internet name service, asset collection, social graph or identity platform.

The current Demo has no publicly deployed contract. Its local practice does not share data with anyone and is not a preview of other users' records.

Name format

Exact characters.
No hidden translation.

setNickname(string value) accepts 3 through 24 ASCII characters: lowercase letters a–z, digits 0–9 and underscore. Uppercase, whitespace, accented letters, emoji and other symbols are rejected, not silently normalized.

The holder key is keccak256(bytes(value)). Since all allowed characters are single-byte ASCII, byte length and character count agree in this exact restricted format.

Replacement

The new string is held.
The previous one is free.

The contract checks that the requested name has no holder or is already held by the caller. It rejects the caller's unchanged current name. If the caller has an old name, its holder mapping is deleted before assigning the new string.

There is no separate release-only call, expiry, permanent reservation or transfer-to-another-wallet function. Another wallet may claim a released name. Availability checks are not reservations: the contract decides against actual state when the transaction executes.

Public records

Two lookups.
One exact event.

nickname(account)
The wallet's current string, or empty if it has none in this contract.
holder(nameHash)
The current wallet holder, or the zero address if unheld. A frontend must hash the exact valid string.
NicknameSet(account, value)
Emitted for a successful change, with indexed caller and exact new string. It is not identity verification.

Replacing a name changes current state but does not erase prior public events. There is no global search index, user count or community history service in this Demo. A receipt confirms its own change, not permanent availability elsewhere.

Authority & fees

Your caller.
No custodian.

The contract derives the account from msg.sender. No function accepts a substitute owner. It has no administrator, proxy, fee collector, token approval, deposit, purchase price or reward. Its change function is nonpayable.

A future configured user pays network gas only. Review must bind exact name and previous state, wallet, network, deployed code hash, gas limit and fee cap. It expires after 60 seconds; context changes invalidate it. Final submit rechecks name holder, current name, account/network/code, gas fee, balance and expiry, then checks the actual receipt and exact event.

Deployment

Prepared locally.
Not silently live.

Nyvora includes its dedicated immutable contract, pinned compilation, actual ephemeral-chain tests and an unsigned deployment preview. No target network, public address or explorer is selected. Connect Wallet requests account access only; it cannot enable a write.

Public deployment requires a separate explicit authorization and controlled local CLI signer with network/account/balance/gas preflight. Keys never belong in the website. A future changed contract needs a new reviewed address and migration plan; this contract has no upgrade proxy.

Public names are not private identities.

Never put sensitive personal information into a nickname. Public events cannot be removed by updating a website.

Try the local practice