Gateway Addresses (GW) in Zano
Gateway Addresses are currently available only on testnet. They will be included in a future mainnet release.
1. What are Gateway Addresses?
A Gateway Address (GW) is a new type of address in the Zano blockchain that will be introduced starting with Hard Fork 6. Unlike classic addresses, which operate under the UTXO model, GW addresses use an account-based model, meaning that the balance is stored directly on the blockchain rather than being represented as a set of separate UTXOs.
GW addresses are designed to simplify integration with external systems such as cross-chain bridges, DEXs, exchanges, and payment gateways. They follow an approach that is more familiar to these services and provide a simple API that is, in some respects, closer to those used by more traditional blockchain platforms such as Bitcoin and Ethereum. This makes it easier for such services to use established custody frameworks, including MPC, and helps make the integration process more transparent and reliable.
In addition, because GW addresses use an account-based model, they avoid the issues related to UTXO fragmentation and distribution that are common in traditional UTXO-based blockchains.
2. Structure
Gateway Addresses are entities that must first be registered on the blockchain before they can be used. A GW address can only be registered through a standard Zano wallet by calling the Wallet RPC API(see doc below). Once a GW address is registered, it is assigned an ID, which is effectively its public view key, and presented to user as a string starting from gwZ... (regular) or gwiZ...(integrated). After that, coins can be sent to this GW address.
Each Gateway Address is associated with two private keys controlled by its owner: a view key and a spend key(owner key). In the simplest case, the view key and the spend key may be the same.
In a more advanced setup, a GW address may use different view and spend keys. Importantly, the spend key can be replaced by the owner of the GW address.
Keys associated with GW address
Each GW address is associated with two public keys: a view key and a spend key.
The view key is used exclusively to derive a shared secret between the sender and the recipient, and to encrypt additional information attached to the transaction, such as comments or a payment_id, using that secret. Once a view key has been associated with a GW address, it cannot be changed.
The spend key acts as a master key that controls all operations related to a GW address, including spending funds and assigning a new owner by replacing the spend key. From a security perspective, this is the most critical key, as it ultimately controls all funds associated with the address.
To make integration with Zano convenient for a wide range of services, we implemented support for several signature types that are widely used across the blockchain industry. Below is a description of these signature types, along with the names of the corresponding API fields in the Wallet RPC API register_gateway_address:
| Name in API | Curve | Public key | Signature | Use case |
|---|---|---|---|---|
opt_owner_ecdsa_pub_key | secp256k1 | 33 bytes (compressed) | 64 bytes (r || s) | ECDSA over secp256k1. This signature type is widely used in blockchain projects such as Ethereum, Bitcoin, and others. |
opt_owner_eddsa_pub_key | Ed25519 | 32 bytes | 64 bytes (R || s) | EDDSA (also referred to as EdDSA). This is the variant used in Solana. |
opt_owner_custom_schnorr_pub_key | Ed25519 | 32 bytes | 64 bytes (c || y) | Zano custom Schnorr signature, also based on Ed25519. |
opt_owner_ecdsa_pub_key(ECDSA) and opt_owner_eddsa_pub_key(Ed25519) were implemented primarily because these standards are widely supported across the blockchain industry and because there is extensive tooling available for building MPC solutions with these key types.
opt_owner_custom_schnorr_pub_key(Zano custom Schnorr signature) is an internal algorithm native to the Zano codebase and integrated into Zano’s core transaction protocols. It has similarities to the scheme used in Solana and relies on the same elliptic curve, but for historical reasons it differs in several implementation details, including the hash function used in the Schnorr algorithm.
Note: View key (view_pub_key) can be only Zano custom Schnorr signature, as it involved in internal protocol machinery. Only spend key could be assigned as ECDSA/EDDSA*
All three types use the compact signature format (64 bytes, without the recovery byte v). The signature is transmitted as a hex string (128 characters).
Privacy
When a transaction is sent to or from a GW address, some confidentiality is intentionally sacrificed for the parts of the transaction that directly involve the GW address, whether as the sender or the recipient:
- Amounts transferred to or from a GW address are stored in an open form. Anyone can see how much was sent or received by the GW address, while the counterparty remains hidden through commitments and stealth addresses.
- The GW address itself is visible in each input or output associated with it, whereas regular addresses remain hidden.
- The Payment ID always remains encrypted using key derivation from the view key. Decryption requires the
view_secret_key.
This design makes GW addresses suitable for use cases such as bridges, exchanges, and similar services, where a certain level of transparency is acceptable or required.
3. Creating a GW address
Registration of a GW address is done via wallet RPC (register_gateway_address), a Zano wallet with sufficient balance is required.