RWAGMI

Create And Manage
Base B20 Tokens.

Paste any token address to instantly view its details, permissions, and available actions. Connect your wallet to mint tokens, manage access, update settings, pause activity, or launch a brand-new B20 token.

Paste a token.
See what matters.

RWAGMI turns a raw B20 address into a readable control surface: token basics, roles, supported actions, policy settings, and wallet-ready transactions.

Token details, clearly

Supply, caps, decimals, pauses, and B20 support show up in one readable place.

Roles without guessing

Check admins, minters, pausers, policy roles, and connected-wallet permissions fast.

Actions stay tidy

RWAGMI only shows the panels a token actually supports, so the workspace stays calm.

LAUNCH DESK

Create a B20 token.

Pick a variant, set roles, and review one prepared wallet call before signing.

GETTING STARTED

New to B20?

A practical walkthrough for token lookup, roles, actions, and the checks worth making before you sign.

Read guide ›
OFFICIAL REFERENCE

Base B20 spec.

Keep the canonical behavior close when exact permissions, policy ids, and token mechanics matter.

Open spec ↗
FROM THE SAME BUILDERS

Other cool stuff we build.

RWAGMI comes from a team that likes shipping careful, useful onchain things. Here is what else we make.

ONCHAIN ENTERTAINMENT

The entertainment layer of the new internet.

An onchain gaming and entertainment ecosystem on Base, where players truly own their games, creators earn instant royalties, and GameFi rewards flow back to the community through $BAES.

EVM TOOLING

EVM errors don't have to stay vague.

Paste a revert, RPC error, wallet failure, trace, AA code, or x402 payload and get the likely meaning, the evidence, and what to do next — backed by an open catalog of 25k+ entries.

Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.

---
name: rwagmi-token-operator
description: Launch, inspect, and manage RWAGMI/Base B20 tokens from this repo. Use when an agent needs to create B20 tokens, launch RWAGMI liquid B20 Asset tokens, manage token roles/policies/supply/metadata, collect or claim launch LP rewards, or prepare owner/emergency launcher operations. Live writes must use Base MCP wallet approval, while calldata and safety checks must come from this repo's SDK, ABIs, runbooks, and deployment records.
---

RWAGMI Token Operator

Use this skill to operate RWAGMI without guessing contract calls. RWAGMI is a wallet-facing operator console for Base B20 tokens; it never custodies keys.

First Rules

  1. Read AGENTS.md, then read the source files for the task.
  2. Use @b20/sdk builders and ABIs for calldata. Do not hand-roll selectors when an SDK builder exists.
  3. Use Base MCP for live wallet writes. Do not ask for, store, or use private keys for live transactions.
  4. Simulate before sending. Decode failures with decodeB20Error.
  5. Keep /create and /launch separate:
    • /create is generic B20Factory token creation.
    • /launch is the RWAGMI liquid B20 Asset launcher path.
  6. Do not imply RWAGMI charges an extra swap fee. RWAGMI's 10% is a share of launch LP fees.

Base MCP Integration

Base MCP is a remote MCP server at:

https://mcp.base.org/

For Codex, install/connect it with:

codex mcp add base-mcp --url https://mcp.base.org/

For contract writes, use Base MCP send_calls with approvalMode: "url" when available, then the agent polls get_request_status until the request is signed, executed, rejected, or expired.

Use these chain names for Base MCP calls:

base -> Base mainnet, chainId 8453 base-sepolia -> Base Sepolia, chainId 84532

If Base MCP tools are not available, stop before live writes and tell the user to connect Base MCP. Read-only work may continue through repo SDK reads or RPC.

Source Of Truth

Load current facts from these files before building transactions:

  • contracts/deployments/base-sepolia.json
  • contracts/deployments/base-mainnet.json
  • apps/web/lib/launcher-config.ts
  • packages/b20-sdk/src/create.ts
  • packages/b20-sdk/src/writes.ts
  • packages/b20-sdk/src/launch/config.ts
  • packages/b20-sdk/src/launch/addresses.ts
  • packages/b20-sdk/src/uniswap-v4.ts
  • docs/runbooks/operator-usage.md
  • docs/runbooks/operator-launcher.md
  • docs/runbooks/b20-method-coverage.md

Do not copy deployed addresses from memory. Resolve them from the deployment JSON or public env mapping, then verify the target chain.

Prepared Write To Base MCP Call

Most RWAGMI actions produce a PreparedB20Write. Convert it to the raw call shape expected by Base MCP with viem.encodeFunctionData.

import { encodeFunctionData, type Hex } from 'viem' import { PreparedB20Write } from '@b20/sdk' export function planToBaseMcpCall(plan: PreparedB20Write): { to: string data: Hex } { return { to: plan.to, value: plan.value === undefined ? '0x0' : `0x${plan.value.toString(16)}`, data: encodeFunctionData({ abi: plan.abi, functionName: plan.functionName, args: plan.args, }), } }

Before sending, show the user:

  • plan.label
  • plan.chainId
  • plan.to
  • plan.functionName
  • plan.value, if present
  • plan.requiredRole, if present
  • every plan.warnings entry

For plan.requiresExplicitConfirm, get an explicit confirmation before calling Base MCP.

Standard Send Flow

  1. Build the plan with repo code.
  2. Simulate it with the chain public client and the user's account.
  3. If simulation fails, call decodeB20Error(error).message and stop.
  4. Convert the plan with planToBaseMcpCall.
  5. Call Base MCP send_calls:
{ "chain": "base-sepolia", "calls": [ { "to": "0x...", "value": "0x0", "data": "0x..." } ], "approvalMode": "url" }
  1. Give the approval URL to the user if Base MCP returns one.
  2. Poll get_request_status.
  3. After confirmation, fetch the receipt and report the tx hash plus BaseScan URL.

Never fall back to cast send --private-key for a live write.

Inspect Or Manage An Existing B20

  1. Create a viem public client for Base Sepolia or Base mainnet.
  2. Read token state with SDK functions from packages/b20-sdk/src/reads.ts and detect support with packages/b20-sdk/src/token-detect.ts.
  3. Resolve available actions through packages/ui-domain/src/action-registry.ts.
  4. Check the connected account's roles with readKnownRolesForAccount.
  5. Build the action with packages/b20-sdk/src/writes.ts:
    • prepareMint
    • prepareBurn
    • prepareBurnBlocked
    • preparePause
    • prepareUnpause
    • prepareUpdateSupplyCap
    • prepareUpdateName
    • prepareUpdateSymbol
    • prepareUpdateContractURI
    • prepareUpdatePolicy
    • prepareUpdateMultiplier
    • prepareGrantRole
    • prepareRevokeRole
  6. Use the standard send flow.

Never expose a B20 write just because a method name sounds plausible. The token must support the feature and the SDK must know the ABI.

Create A Generic B20 Token

Use this for /create-style token deployment only.

  1. Build CreateTokenInput and CreateOptions with packages/b20-sdk/src/create.ts.
  2. Preview the deterministic token address with predictB20Address. For generic creation, the deployer is the user's account.
  3. Build the transaction with prepareCreateB20.
  4. Simulate and send through Base MCP.

Important creation constraints:

  • Asset decimals are 6 to 18.
  • Stablecoin decimals are fixed at 6.
  • initialAdmin = address(0) means adminless. Do not invent a dead-address admin strategy.
  • bootstrap initCalls are ordered by the SDK. Do not reorder them.
  • If setting policy IDs, verify the policy semantics first.

Launch A Liquid RWAGMI B20 Asset

Use this for /launch-style RWAGMI launches only.

  1. Resolve the launcher stack from deployment JSON or apps/web/lib/launcher-config.ts.
  2. Resolve RWAGMI fee recipient/admin with resolveRwagmiFeeConfig.
  3. Prepare a launchDraft from the user inputs with packages/b20-sdk/src/launch/config.ts.
  4. Predict a launchB20Address with packages/b20-sdk/src/launch/config.ts. For RWAGMI launches, the deployer is the launcher contract address, not the user's account.
  5. Build the plan with prepareLaunchB20.
  6. Simulate and send through Base MCP.
  7. After confirmation, parse the receipt with parseLaunchReceipt.
  8. If the web app is reachable, POST the tx hash to /api/launches/index-transaction; otherwise rely on the normal indexer.

Launch invariants:

  • v2 launches only new B20 Asset tokens.
  • Owner A must be launcher-owner allowlisted, current scope is WETH.
  • Hook must be RwagmiHookV2, not the old static hook.
  • WEV module is mandatory.
  • Extensions must be allowlisted and msg.value must equal extension value.
  • Immutable mode uses initialAdmin = address(0).
  • Admin mode leaves live admin powers, say that plainly.
  • Launch liquidity is one-sided B20, up to 7 positions, bps sum 10000.

Launch LP Rewards

For launched tokens, read reward info from the locker with readLaunchRewardInfo and use these builders:

  • prepareCollectLaunchRewards: anyone may harvest accrued v4 LP fees into locker accounting.
  • prepareClaimLaunchRewards: each recipient self-claims credited currency.
  • prepareUpdateLaunchRewardRecipient: reward slot admin rotates recipient.
  • prepareUpdateLaunchRewardAdmin: reward slot admin transfers slot admin.

Reward bps are immutable after launch. Slot 0 is creator 90%; slot 1 is RWAGMI 10% unless deployment records prove otherwise.

Owner And Emergency Operations

Owner operations are sensitive. Read the owner first. On Base mainnet, the deployment owner may be a Safe. If the owner is a Safe, do not send an owner-only call from a normal EOA. Prepare calldata and route it through the Safe owner flow the user requests.

Owner-only launcher/locker operations include:

  • RwagmiB20Launcher.setDeprecated(bool)
  • RwagmiB20Launcher.setHook(address,bool)
  • RwagmiB20Launcher.setLocker(address,address,bool)
  • RwagmiB20Launcher.setMevModule(address,bool)
  • RwagmiB20Launcher.setExtension(address,bool)
  • RwagmiB20Launcher.setPairedToken(address,bool)
  • RwagmiLockerMultiple.setFeeSource(address,bool)

When no prepared SDK builder exists, use the ABI from packages/b20-sdk/src/abi, encode with viem.encodeFunctionData, simulate, and send through Base MCP only after explicit user confirmation.

Swaps

RWAGMI swap is not an arbitrary aggregator. It trades indexed RWAGMI launch pools directly through Uniswap v4 Universal Router. Use packages/b20-sdk/src/uniswap-v4.ts and the /api/swap/quote route. Quote reads must not trigger indexer writes.

Native ETH swaps route through WETH-backed pools and Universal Router value. Do not require ERC20 Permit2 approval for native input mode.

Failure Handling

  • Wrong chain: ask the user to switch to Base Sepolia or Base mainnet.
  • Missing role: stop and report the required role.
  • Unsupported token feature: stop, do not guess a fallback method.
  • Simulation revert: decode with decodeB20Error and report the decoded reason.
  • Auction window revert such as NotAuctionBlock: wait for the valid block or tell the user swaps are not yet available.
  • Missing launch config: do not launch. Fix deployment/env config first.
  • Base MCP request rejected or expired: stop and report that no transaction was executed.

Verification Commands

Use the smallest check that proves the change:

pnpm --filter @b20/sdk test pnpm --filter @b20/sdk typecheck pnpm --filter web typecheck pnpm --filter web test pnpm build pnpm smoke:base-sepolia

Use pnpm smoke:base-sepolia only when RPC, wallet funding, and live launch intent are intentionally available.

RWAGMI · Agent Skill · rwagmi-token-operator
X/@Rwagmi_B20 B20 spec ↗

Connect Wallet

Rainbow
Rainbow
Base
Base
MetaMask
MetaMask
WalletConnect
WalletConnect
What is a Wallet?
A wallet is used to send, receive, store, and display digital assets. It's also a new way to log in, without needing to create a new account and password on every website.
EN中文
LIQUID B20 LAUNCH
Launch a Liquid B20 Token
Create the asset token, set its WETH price, and seed launch liquidity through one reviewable transaction.
Browse Tokens
Read Guide

One pool, one locker, one review.

The launch path stays intentionally narrow: Asset B20, WETH pair, shared locker, mandatory auction module.

1
Token profile and supply.
2
WETH price and launch curve.
3
Fee split and wallet confirmation.
LAUNCH DRAFT
Symbol Unset
Supply 100000000000
Price 0.000000000025 WETH
Token powers Immutable
Set launch terms
1 / 2
Name the asset, choose how much enters the launch pool, and set the first WETH price before review.
Token details
This is what people will see first for the token.
Use the ticker traders will see in pool interfaces.
Shown on RWAGMI and compatible token pages.
Optional website, app, or social link for this token.
Asset tokens support 6 to 18 decimals.
🖼️
Profile image
Launch profile
Add the image, description, and project link people will see when the token launches.
Required
Pool economics
The launcher creates a WETH pair and seeds token-side liquidity.
Prepared as token-side liquidity for the launch pool.
Starting market cap: $10,000 @ $4,000/ETH.
%
Trading fee paid to the Uniswap v4 LP position. 1.00% remains the default.
All launch liquidity sits in one price range. The simple, common choice.
Pair
WETH (0x4200...0006)
Fixed paired token for this launch path.
Creator and token powers
Creator fee rights live in the LP locker. Token admin powers are separate.
Immutable
No B20 admin after launch.
Admin powers
Creator can later grant roles, including rebase operator.
Fee split & confirm
2 / 2
Review the LP fee distribution and launch configuration before sending to your wallet.
LP fee split
How trading fees from the pool are distributed.
Fee distribution
Creator (you) 70%
Protocol 20%
Auction module 10%
%
Protocol takes 20%, auction module takes 10%. Max creator share: 90%.
Launch summary
Final check before your wallet opens.
LAUNCH CONFIGURATION
Token name
Symbol
Decimals 18
Launch supply 100,000,000,000
Initial price 0.000000000025 WETH
LP fee 1.00%
Liquidity shape Concentrated (single band)
Pair WETH (0x4200...0006)
Token powers Immutable
Network Base Mainnet
🔒 One transaction will be prepared for your wallet to review. Nothing is sent until you confirm inside your wallet app.
Step 2 of 2
Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.

B20 mainnet activation has been delayed due to an unrelated stability incident. A revised date will be announced shortly. Check activation status
Beryl B20 Native Token Standard

B20 Native Token Standard

B20 is a native token interface built into Base. It extends ERC-20 with supply controls, role-based access, pause mechanics, policy hooks, and optional Asset or Stablecoin capabilities.

Core Interface

B20 tokens are ERC-20 compatible. Standard methods (transfer, approve, transferFrom, balanceOf, totalSupply, allowance) behave as specified in EIP-20.

MethodDescription
name()Token name string.
symbol()Token symbol string.
decimals()Decimal precision. Fixed to 6 for Stablecoin; configurable for Asset (6–18).
totalSupply()Current circulating supply.
balanceOf(account)Balance held by account.
transfer(to, amount)Move tokens from caller to to.
approve(spender, amount)Set spender allowance.
transferFrom(from, to, amount)Move tokens using an allowance.
allowance(owner, spender)Remaining allowance.

Supply management

Minting and burning are gated by roles. A cap is optional and immutable once set.

MethodDescription
mint(to, amount)Create new tokens. Gated by MINTER_ROLE. Respects cap() if set.
burn(amount)Destroy tokens from the caller's balance.
burnFrom(from, amount)Destroy tokens from an approved balance. Gated by BURNER_ROLE.
cap()Max supply. Returns 0 if uncapped. Immutable after creation.

Pause

MethodDescription
pause()Halt all transfers, mints, and burns. Gated by PAUSE_ROLE.
unpause()Restore activity. Gated by UNPAUSE_ROLE.
paused()Returns true if currently paused.

A paused token blocks all activity. Pause and unpause are separate roles so they can be held by different addresses.

Access control

B20 uses OpenZeppelin AccessControl. Each role is a bytes32 slot. The DEFAULT_ADMIN_ROLE can grant or revoke any role.

RolePurpose
DEFAULT_ADMIN_ROLEGrant or revoke any role. Keep on a hardware wallet or multisig.
MINTER_ROLECall mint() and batchMint().
BURNER_ROLECall burnFrom() on any holder.
POLICY_ADMIN_ROLESet or clear policy contracts for transfers, mints, and burns.
PAUSE_ROLEPause the token.
UNPAUSE_ROLEUnpause the token.
METADATA_ROLEUpdate profile fields and extraMetadata entries.
OPERATOR_ROLERun Asset flows: multiplier updates and announcements.

Policy hooks

Transfer, mint, and burn calls can be routed through policy contracts registered in PolicyRegistry. Policies are set by POLICY_ADMIN_ROLE.

MethodDescription
transferPolicyId()Active transfer policy id. 0 means no policy.
mintPolicyId()Active mint policy id.
burnPolicyId()Active burn policy id.
setTransferPolicyId(id)Set transfer policy. Gated by POLICY_ADMIN_ROLE.
setMintPolicyId(id)Set mint policy. Gated by POLICY_ADMIN_ROLE.
setBurnPolicyId(id)Set burn policy. Gated by POLICY_ADMIN_ROLE.
⚠️ Wrong policy ids can freeze normal transfers. Verify ids in PolicyRegistry before applying.

B20 version

b20Version() returns a uint256 indicating the B20 feature set the token supports. Use this to check capability before calling optional methods.

Profile

On-chain metadata readable by wallets and frontends.

MethodDescription
profileName()Human-readable token name (may differ from ERC-20 name).
profileDescription()Short description of the token.
profileImage()URI for a token image (IPFS, HTTPS, or data URI).
profileLink()Project website or social link.
updateProfile(name, description, image, link)Update all profile fields. Gated by METADATA_ROLE.

Asset

The Asset variant adds a multiplier for rebase-style accounting. The multiplier scales raw balances to display balances. Default multiplier is 1e18 (no scaling).

MethodDescription
multiplier()Current scaling factor (1e18 = 1×).
toScaledBalance(raw)Convert raw amount to scaled display value.
toRawBalance(scaled)Convert scaled amount to raw.
updateMultiplier(newMultiplier)Update the multiplier. Gated by OPERATOR_ROLE.

Announcements

On-chain disclosure brackets that wrap sensitive operations (e.g. batch mints, multiplier updates) with a public notice period. Gated by OPERATOR_ROLE.

announce(internalCalls, id, description, uri) emits an Announcement event, executes internalCalls, then emits EndAnnouncement. The id must be unique and is enforced forever. Inner call reverts are wrapped in InternalCallFailed.

Batch Mint

batchMint(recipients, amounts) mints to multiple recipients in a single call. Gated by MINT_ROLE. Should be wrapped in announce() for transparency.

Extra Metadata

An arbitrary key/value store for issuer-defined on-chain metadata.

MethodDescription
extraMetadata(key)Read a value by key.
updateExtraMetadata(key, value)Write a value. Gated by METADATA_ROLE. Setting an empty value removes the entry.

Stablecoin

The fixed-decimals, fiat-backed carveout. Decimals are hard-wired to 6 and are not configurable.

Adds currency(), which returns an ISO-style currency code string (e.g. "USD", "EUR"). The code is set once at creation via B20StablecoinCreateParams.currency, restricted to characters A–Z only. It is self-declared and not verified against any external registry.

Precompile addresses

These addresses are identical on every network where B20 is active (Mainnet, Base Sepolia, Vibenet, and local base-anvil).

PrecompileAddress
B20Factory0xB20f000000000000000000000000000000000000
Activation Registry0x8453000000000000000000000000000000000001
Policy Registry0x8453000000000000000000000000000000000002

Events

B20 emits the standard ERC-20 events plus extended events for roles, pause, policy, and Asset flows.

EventDescription
Transfer(from, to, value)Emitted on every token transfer, mint (from = address(0)), and burn (to = address(0)).
Approval(owner, spender, value)Emitted when an allowance is set via approve or transferFrom.
RoleGranted(role, account, sender)Emitted when a role is granted by the admin.
RoleRevoked(role, account, sender)Emitted when a role is revoked by the admin.
RoleAdminChanged(role, previousAdmin, newAdmin)Emitted when a role's admin role is reassigned.
Paused(account)Emitted when the token is paused.
Unpaused(account)Emitted when the token is unpaused.
PolicyUpdated(policyType, oldId, newId)Emitted when a transfer, mint, or burn policy id changes.
MultiplierUpdated(oldMultiplier, newMultiplier)Asset only. Emitted when the multiplier is updated.
Announcement(id, description, uri, caller)Emitted at the start of an announced operation.
EndAnnouncement(id)Emitted after all internal calls in an announcement complete.
InternalCallFailed(id, index, reason)Emitted when an internal call inside an announcement reverts.
ProfileUpdated(name, description, image, link)Emitted when the on-chain profile is updated.
ExtraMetadataUpdated(key, value)Emitted when an extra metadata entry is written or removed.

Errors

B20 uses custom errors. Decode them with decodeB20Error from the SDK. All standard OpenZeppelin and ERC-20 errors are inherited.

ErrorCause
AccessControlUnauthorizedAccount(account, role)Caller does not hold the required role.
EnforcedPause()Action attempted while the token is paused.
ExpectedPause()unpause() called while not paused.
ERC20InsufficientBalance(sender, balance, needed)Transfer or burn exceeds available balance.
ERC20InsufficientAllowance(spender, allowance, needed)transferFrom exceeds approved allowance.
ERC20InvalidSender(sender)Transfer from address(0).
ERC20InvalidReceiver(receiver)Transfer to address(0).
B20CapExceeded(cap, requested)Mint would push totalSupply above cap().
B20AnnouncementIdUsed(id)Announcement id has been used before.
B20PolicyRejected(policyId, reason)An active policy contract blocked the operation.
B20InvalidMultiplier(value)Multiplier is zero or below the allowed minimum.
B20InvalidCurrencyCode(code)Stablecoin currency code contains non A–Z characters.
B20InvalidDecimals(decimals)Decimals outside the 6–18 range (Asset only).
B20ZeroAddress()A required address argument is address(0).

B20Factory

The factory is a precompile at 0xB20f000000000000000000000000000000000000. It creates deterministic B20 tokens from packed params structs. The deployer address is baked into the salt so two accounts cannot collide on the same name.

MethodDescription
createB20Asset(params)Deploy a new B20 Asset token. Returns the token address.
createB20Stablecoin(params)Deploy a new B20 Stablecoin token. Returns the token address.
predictB20AssetAddress(deployer, params)Compute the deterministic address before deployment.
predictB20StablecoinAddress(deployer, params)Compute the deterministic stablecoin address before deployment.
isB20(address)Returns true if the address was deployed by this factory.
b20Count(deployer)Number of tokens deployed by deployer.
b20At(deployer, index)Token address at a deployer's index.

Create params structs:

FieldTypeNotes
namestringERC-20 token name.
symbolstringERC-20 token symbol.
decimalsuint86–18 for Asset. Fixed 6 for Stablecoin.
initialAdminaddressaddress(0) for adminless immutable token.
capuint256Max supply. 0 = uncapped. Immutable after creation.
initCallsInitCall[]Bootstrap calls executed atomically on deploy (role grants, policy setup). Ordered by the SDK.
currencystringStablecoin only. ISO-style currency code. A–Z only.
⚠️ Do not reorder initCalls. The SDK orders them to satisfy role dependencies. Reordering may cause deployment to revert.

PolicyRegistry

Policy contracts are registered at 0x8453000000000000000000000000000000000002. A policy id is a uint256 assigned at registration. Id 0 is always the null policy (no restriction).

MethodDescription
registerPolicy(policy)Register a new policy contract. Returns the assigned id. Caller becomes the policy owner.
getPolicy(id)Return the policy contract address for a given id.
policyCount()Total number of registered policies (including id 0).
policyOwner(id)Address that registered the policy.

A policy contract must implement IB20Policy:

MethodDescription
checkTransfer(token, from, to, amount)Called before every transfer. Revert to block.
checkMint(token, to, amount)Called before every mint. Revert to block.
checkBurn(token, from, amount)Called before every burn. Revert to block.
⚠️ Apply only policy ids you control and have audited. A broken policy can permanently block transfers on the token if no admin is present to clear it.

Activation Registry

The Activation Registry at 0x8453000000000000000000000000000000000001 tracks which networks have B20 active and at what version. It is read-only for most callers.

MethodDescription
isActive(chainId)Returns true if B20 is active on the given chain.
activationBlock(chainId)Block number at which B20 was activated. 0 if not yet active.
b20Version(chainId)Feature-set version active on the chain.
activeChains()Array of chain ids where B20 is currently active.

Integration quickstart

Read a B20 token using the SDK and viem:

import { createPublicClient, http } from 'viem' import { base } from 'viem/chains' import { readB20Token, readKnownRolesForAccount } from '@b20/sdk' // 1. Create a public client for Base mainnet const client = createPublicClient({ chain: base, transport: http(), }) // 2. Read token state const token = await readB20Token(client, '0xYourTokenAddress') console.log(token.name, token.symbol, token.totalSupply) // 3. Check roles for connected wallet const roles = await readKnownRolesForAccount(client, { token: '0xYourTokenAddress', account: '0xYourWalletAddress', }) console.log(roles) // { isMinter: true, isAdmin: false, ... }

Mint tokens to an address:

import { prepareMint } from '@b20/sdk' import { parseUnits } from 'viem' const plan = prepareMint({ token: '0xYourTokenAddress', to: '0xRecipientAddress', amount: parseUnits('1000', 18), chainId: 8453, }) // show plan.label, plan.warnings to user, then: const mcpCall = planToBaseMcpCall(plan) // send via Base MCP send_calls

Create a generic B20 Asset:

import { prepareCreateB20, predictB20Address } from '@b20/sdk' const params = { name: 'My Token', symbol: 'MYT', decimals: 18, initialAdmin: deployer, // or address(0) for immutable cap: 0n, // 0 = uncapped initCalls: [], // SDK populates role grants here } // preview address before signing const predicted = await predictB20Address(client, deployer, params) const plan = prepareCreateB20({ params, chainId: 8453 }) // simulate → send via Base MCP
Guide

A practical map for B20.

Use this when you want to know what RWAGMI is showing, which role an action needs, and what to check before you sign. Deployment notes live in the repository docs.

Start with a token
Paste an address, check the chain, and let RWAGMI show what the token supports.
Check who can do what
Open Roles to see whether your wallet can run the action you have in mind.
Preview before signing
Every write shows the target, function, and arguments before your wallet asks you to sign.
Check the receipt
After it lands, use the history and explorer link to see exactly what changed.
Dashboard tabs
Overview
The clear snapshot: identity, supply, caps, pause status, your balance, and detected B20 support.
Actions
Mint, burn, pause, supply caps, token profile, and multiplier panels. Unsupported calls stay out of the way.
Roles
See role checks, then grant, revoke, or renounce roles when the token supports it.
Policies
Read and update transfer policy ids, then use burnBlocked when the token exposes it.
Transactions
A local trail of submitted transactions with handy explorer links.
Diagnostics
Raw reads and support detection for unusual or freshly created tokens.
B20 feature reference
Create
Deployer wallet
Create Asset or Stablecoin variants through B20Factory. RWAGMI generates the salt, previews the address, and can include admin-less launch, role grants, token profile, policy ids, supply cap, launch mint, Asset multiplier, batch mints, announcements, advanced token data, and final pauses in one wallet transaction.
Mint
MINT_ROLE
Create new supply for a recipient. RWAGMI checks amounts and warns when your wallet may be missing MINT_ROLE.
Burn
BURN_ROLE
Burn tokens from your connected wallet. Memo support appears when the token offers it.
burnBlocked
BURN_BLOCKED_ROLE
Calls burnBlocked(from, amount) for the account you choose.
Pause / unpause
PAUSE_ROLE / UNPAUSE_ROLE
Pause or restore TRANSFER, MINT, or BURN. Transfer pause is powerful, so RWAGMI treats it with extra care.
Supply cap
DEFAULT_ADMIN_ROLE
Updates the maximum supply. The app treats the max uint128 sentinel as uncapped and prevents setting a cap below current total supply.
Token profile
METADATA_ROLE
Update display fields like name, symbol, profile file, and advanced token data when the token exposes them.
Transfer policies
DEFAULT_ADMIN_ROLE
Store policy ids on the token. Policy id 0 means ALWAYS_ALLOW; check nonzero ids in PolicyRegistry first.
Asset multiplier
OPERATOR_ROLE
Update the Asset rebase multiplier. This changes displayed balances for holders, so RWAGMI treats it as critical.
Role meanings
DEFAULT_ADMIN_ROLE
Grant and revoke roles, update policy ids, and update the supply cap.
MINT_ROLE
Mint new tokens, including memo mints when supported.
BURN_ROLE
Burn tokens from the connected wallet.
BURN_BLOCKED_ROLE
Run burnBlocked(from, amount) for blocked accounts.
PAUSE_ROLE
Pause transfer, mint, or burn features.
UNPAUSE_ROLE
Restore paused transfer, mint, or burn features.
METADATA_ROLE
Update token profile fields.
OPERATOR_ROLE
Run Asset flows such as multiplier updates and announcements.
Execution notes
Some actions get one extra checkbox because they can move real power: admin role changes, transfer pause, supply expansion, multiplier updates, and burnBlocked.
Role reads are helpful hints. If a check fails or is unknown, RWAGMI warns you, but the chain is still the final source of truth.
Check policy ids in PolicyRegistry before applying them. The wrong allowlist or blocklist id can freeze normal transfers.
Security reminder
RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.
Last Updated June 25, 2026
Terms of Service
These terms cover use of RWAGMI. By using the app, you agree to them.

What RWAGMI Is

RWAGMI is a wallet-facing console for inspecting and preparing Base B20 token transactions. It is not a custodian, broker, exchange, or financial adviser. It does not hold keys, execute transactions on your behalf, or guarantee any outcome.

Wallet And Transaction Responsibility

You control your wallet and every transaction you sign. RWAGMI shows you what will happen before you sign; reviewing that preview is your responsibility. Blockchain transactions are irreversible.

No Secrets Or Downloads

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, or credit cards, and does not require software downloads. If a page claiming to be RWAGMI asks for any of these, it is not RWAGMI. Report suspected impersonation to rwagmicom@gmail.com.

Token And Launch Risk

B20 tokens and RWAGMI liquid launches are experimental. Token values can go to zero. Immutable launches are permanent. On-chain actions cannot be undone. You accept full responsibility for tokens you create or trades you make.

Availability

RWAGMI is provided as-is with no warranty of availability, fitness, or accuracy. The app may be modified or discontinued at any time.

Analytics

RWAGMI uses Google tag with Google Analytics measurement id G-26DFKY9QK5. Analytics data does not include wallet secrets and is not used to custody assets or alter transactions.

Contact

Questions can be sent to rwagmicom@gmail.com.

Privacy

See the Privacy Policy for data-handling details.

Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.

Last Updated June 25, 2026
Privacy Policy
This policy explains what RWAGMI reads, stores, and sends while helping users inspect and prepare Base B20 wallet transactions.

What We Do Not Collect

RWAGMI does not ask for or store seed phrases, private keys, passwords, phone numbers, or credit card numbers.

RWAGMI does not require software downloads and does not custody tokens or wallet accounts.

Wallet And Public Chain Data

When you connect a wallet or paste a token address, the app may read public addresses, balances, roles, token metadata, launch events, pool data, quotes, and transaction receipts from Base, public RPCs, and the local RWAGMI launch index.

Public blockchain data is visible to anyone and is not controlled by RWAGMI.

Browser Storage

The app may use browser storage for convenience features such as recently visited tokens, local transaction history for this browser session, wallet connector state, and app preferences.

You can clear this data from your browser settings. Clearing it does not remove public blockchain records.

Server Logs And Indexer

The server may process routine request data such as URL paths, timestamps, IP-derived network information, user agents, and error logs to operate and secure the site.

The launch indexer stores public RWAGMI launch data in SQLite so token and swap pages can read indexed launch pools without triggering write scans from quote requests.

Token Profile Uploads

If you use token profile upload features, images and metadata you provide may be sent to configured storage infrastructure such as Pinata/IPFS gateways and become publicly accessible.

Do not upload private, illegal, or sensitive personal information as token metadata.

Analytics

RWAGMI uses the Google tag with Google Analytics measurement id G-26DFKY9QK5 to understand site traffic, page usage, referrals, device and browser categories, and basic engagement.

Google may process analytics identifiers, approximate location, user agent, page URLs, referrers, and related technical information under its own policies. You can use browser settings, extensions, or Google controls to limit analytics tracking.

Third Parties

Wallets, wallet connector infrastructure, RPC providers, explorers, storage gateways, and Uniswap-related infrastructure may process data under their own policies.

RWAGMI loads Google tag from googletagmanager.com for analytics. It does not use analytics to ask for wallet secrets, custody assets, or change transaction behavior.

Contact

Privacy, security, and site-review questions can be sent to rwagmicom@gmail.com.

Terms

See the Terms of Service for wallet-use and transaction-risk terms.

Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.

EN中文
GETTING STARTED
New to B20?
A practical guide to token lookup, roles, actions, and the checks worth making before you sign. Read this once and RWAGMI becomes predictable.
Looking up a token
Start with any B20 address. RWAGMI reads the chain and organises what it finds.
STEP 01

Paste the token address

Drop any Base B20 contract address into the lookup box. RWAGMI reads the token name, symbol, supply, cap, decimals, pause state, and B20 version directly from the chain.

STEP 02

Check roles and your permissions

RWAGMI reads the key role slots and compares them against your connected wallet. This tells you which action panels are likely to succeed before you sign anything.

Role reads are hints, not guarantees. The chain is always the final authority.

STEP 03

Review available actions

Only the panels this token actually supports are shown. Each panel prepares one wallet call. You read it, then decide whether to sign.

Good habit: verify the token address against a trusted source before interacting. Paste-and-check takes ten seconds and removes the most common mistake.

What actions look like
Every action in RWAGMI follows the same pattern: one panel, one prepared call, one wallet confirmation.
MINT

Creating new supply

Enter an amount and a recipient address. RWAGMI prepares the mint call. The minter role is required. Supply cap, if set, is checked before the call goes to your wallet.

BURN

Removing tokens permanently

Specify an amount to burn from your own wallet. The token must support burnFrom or the holder burns directly. This action is irreversible.

TRANSFER

Moving tokens between wallets

Standard ERC-20 transfer wrapped in a reviewable panel. Transfer policy, if active, may block or restrict the call.

PAUSE / UNPAUSE

Halting and restoring activity

Pause stops all transfers, mints, and burns. Unpause restores them. Both require the respective role. A paused token shows a visible warning on its dashboard.

One call, one review: RWAGMI never batches actions without telling you. You always see exactly what will be sent to your wallet before you tap confirm.

Roles reference
B20 uses role-based access control. Each role is an address slot the admin can assign or revoke.
DEFAULT_ADMIN_ROLE
Grant or revoke any role on the token. This is the highest-privilege slot. Keep it on a hardware wallet or multisig.
MINTER_ROLE
Call mint() to create new tokens. Subject to supply cap if one is set.
BURNER_ROLE
Call burnFrom() on any holder balance. Distinct from self-burn, which any holder can do.
POLICY_ADMIN_ROLE
Set or clear transfer, mint, and burn policy contracts. Wrong policy ids can freeze transfers.
PAUSE_ROLE
Pause transfer, mint, or burn features.
UNPAUSE_ROLE
Restore paused transfer, mint, or burn features.
METADATA_ROLE
Update token profile fields.
OPERATOR_ROLE
Run Asset flows such as multiplier updates and announcements.
Execution notes

Some actions get one extra checkbox because they can move real power: admin role changes, transfer pause, supply expansion, multiplier updates, and burnBlocked.

Role reads are helpful hints. If a check fails or is unknown, RWAGMI warns you, but the chain is still the final source of truth.

Check policy ids in PolicyRegistry before applying them. The wrong allowlist or blocklist id can freeze normal transfers.

Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.

EN中文
LAUNCH BROWSER
Browse RWAGMI Launches
Review indexed liquid B20 launches, open token dashboards, and start swaps only from RWAGMI launch pools.
Indexer status
Ready
Chain
Base
Tokens
0
Synced to
48070600
Latest block
48070604

Launched tokens

Each token keeps pool, creator, supply, and launch details. Swaps route through the dedicated trade flow seeded with this token.

0 LAUNCHES

No launches found yet

Launch a token, then refresh this list. RWAGMI will add confirmed launches as they appear.

Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.

All powers
Immutable
Admin powers
EN中文
Swap
5%
Open a token to swap
Start from a token page. This swap card will open with that token ready to buy or sell.
Security reminder

RWAGMI never asks for seed phrases, private keys, passwords, phone numbers, credit cards, or software downloads. Every action is a transparent wallet transaction on Base.