A native, on-chain atomic-exchange protocol for identities, currencies, NFTs, rights, and other Verus assets. There is no marketplace operator holding funds: offers and acceptances are assembled and signed by the participants' own wallets.
The Verus Marketplace is a native, on-chain atomic exchange. An offer states what its maker will deliver and what they want in return; the buyer's wallet constructs the matching transaction locally. Nothing is held by a marketplace operator: when the transaction is confirmed, payment and the asset move together or neither moves.
tip@This is the complete mainnet purchase made on 21 July 2026. It is a record to help you recognise each value and output; do not run the acceptance command below now because this offer is already closed. Start new purchases at Scan Verus Offers ↗, then replace every value with a current local getoffers result.
First resolve the name. The identity address is the stable identifier to use with getoffers.
{
"fullyqualifiedname": "tip.VRSC@",
"identity": {
"primaryaddresses": ["RJmcYhAATaiNLseh6KKB9aBnZvqLAjDJfo"],
"name": "tip",
"identityaddress": "iGte6ebLtER1wui2wwon3fLYKpknuLGCwD"
},
"status": "active"
}
At the time, this command returned offer transaction 3173d45e…f334610 and a price of 21 VRSC. Those are the two values copied into the acceptance request.
# Relevant values returned at the time offer transaction: 3173d45e1edd0a064e7dd4bc85090b5fbced72ee5ce6940c54cbb6744f334610 asset received: tip@ payment requested: 21 VRSC
The address must be controlled by your local wallet and have enough VRSC for the price and transaction fee.
{
"balance": 39.00000000,
"currencybalance": { "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV": 39.00000000 }
}
The final true asks the wallet to return a transaction for review. It does not send it. This exact example assigns tip@'s primary address to the buyer's address.
{
"tx": "0400008085202f89…"
}
Save the draft result, then decode its tx field. The important outputs in this purchase were:
{
"vout": [
{ "value": 21.00000000, "addresses": ["RNW1mZKsWS2vhznzc2Z3DzBYKmgXY9MHPQ"] },
{ "identityprimary": { "name": "tip", "primaryaddresses": ["RJmcYhAATaiNLseh6KKB9aBnZvqLAjDJfo"] } },
{ "value": 29.00000000, "addresses": ["RJmcYhAATaiNLseh6KKB9aBnZvqLAjDJfo"] }
]
}
That reads as: 21 VRSC to the seller, the identity to the buyer, and 29 VRSC change back to the buyer. Stop if any recipient, amount, identity authority, or change address is not what you expect.
Only after the decoded outputs are correct, run the same command with its final word changed from true to false. The returned ID is the transaction you can inspect locally and on Scan.
81d60eafce677f3c916b0c7b370331023182c7feb2c4056a6b34e0c116b8a07c # Confirmed result height: 4160183 primary address: RJmcYhAATaiNLseh6KKB9aBnZvqLAjDJfo
This is a local draft made after buying tip@. It offers the identity for 21 VRSC and uses true, so it is only a reviewable transaction and was not posted. The important field that is easy to miss is for.address: it is where you want to receive payment.
{
"signstatus": "complete",
"hex": "0400008085202f89…"
}
To make your own offer, replace the funding address, change address, identity, payment address, and amount. Decode the returned hex before posting it:
makeoffer request with false instead of true and without > offer-draft.json. That publishes a live on-chain offer.closeoffers closes offers that belong to your wallet. Calling it with no parameters closes expired offers; pass a list of offer transaction IDs when you want to close specific live offers.