ConfidentialPayments is a payment link registry for HideMeToken (native confidential tokens). Merchants create links with a fixed amount; payers fulfill them by calling payLink(), which triggers transferPlaintext on the token — encrypting the transfer on-chain.
Mainnet address: 0xA12c43CFCe337f0f8b831551Fbd273A61b0488d5
This contract works with HideMeToken only. For confidential payments with any ERC-20 (WETH, USDC, etc.), see ConfidentialPaymentRouterV2.
createPaymentLink
keccak256 hash of the parameters and block timestamp.
A HideMeToken contract address.
Fixed payment amount in raw token units (6 decimals). For example,
50_000_000 = 50 tokens.Human-readable description (e.g.
"Invoice #42").Unix timestamp after which the link cannot be paid. Pass
0 for no expiry.bytes32 linkId.
payLink
token.transferPlaintext(merchant, amount) on the payer’s behalf — the amount is encrypted on-chain inside the EVM.
cancelLink
getLink
getMerchantLinks
PaymentLink struct fields
The HideMeToken contract address.
Address that created the link and receives payment.
Fixed amount in token units (6 decimals).
Description set at creation time.
Expiry timestamp.
0 = no expiry.Whether the link has been fulfilled.
Whether the merchant cancelled the link.
Address that paid (
address(0) if unpaid).Block timestamp of payment (
0 if unpaid).Events
| Event | Parameters |
|---|---|
LinkCreated | linkId, merchant, token |
LinkPaid | linkId, payer, paidAt |
LinkCancelledEvent | linkId |
Custom errors
| Error | When thrown |
|---|---|
LinkNotFound | linkId does not exist |
LinkAlreadyPaid | Link has already been paid |
LinkExpired | Current time exceeds expiry |
LinkNotExpired | (reserved) |
NotMerchant | Caller is not the link creator |
LinkCancelled | Link was cancelled |
Payment Links
How to use payment links from the frontend.
PaymentRouterV2
For confidential payments with any ERC-20.