Creating Vanity Address
Introduction
This guide explains how to create vanity addresses on the TON blockchain — contracts or wallets with custom patterns (for example, specific starting or ending characters) that make the address visually distinctive. Vanity addresses are often used for branding, better recognizability, or aesthetic purposes.
Vanity Contract Address
To create a vanity contract address (for example, for a Jetton Master contract), follow these steps.
Clone the Repository
Install Dependencies
Run the Generator
- Replace
{suffix}
with the desired ending for the generated address. - Replace
{owner_address}
with the wallet address from which the deployment will be made.
Example:
python src/generator/run.py --end NESS -w -0 --case-sensitive UQCZq3_Vd21-4y4m7Wc-ej9NFOhh_qvdfAkAYAOHoQ__Ness
If a match is found, you will see a message like:
Found: EQC7PA9iWnUVWv001Drj3vTu-pmAkTc30OarHy5iDJ1uNESS salt: 7c9398f0999a96fe5480b5d573817255d53377a000be18d0fb47d090a5606dfe
Deploy the Contract
Copy the salt
value and use it in the SALT
constant in the deployment script:
from tonutils.client import ToncenterV3Client
from tonutils.jetton import JettonMasterStandard
from tonutils.jetton.content import JettonOnchainContent
from tonutils.vanity import Vanity
from tonutils.wallet import WalletV4R2
# Set to True for test network, False for main network
IS_TESTNET = True
# Mnemonic phrase
MNEMONIC = "word1 word2 word3 ..."
# The salt for the vanity address
SALT = ""
async def main() -> None:
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1)
wallet, _, _, _ = WalletV4R2.from_mnemonic(client, MNEMONIC)
jetton_master = JettonMasterStandard(
content=JettonOnchainContent(
name="Ness Jetton",
symbol="NESS",
description="Probably nothing",
decimals=9,
image="https://ton.org/download/ton_symbol.png",
),
admin_address=wallet.address,
)
vanity = Vanity(
owner_address=wallet.address,
salt=SALT,
)
body = vanity.build_deploy_body(jetton_master)
tx_hash = await wallet.transfer(
destination=vanity.address,
amount=0.05,
body=body,
state_init=vanity.state_init,
)
print(f"Successfully deployed contract at address: {vanity.address.to_str()}")
print(f"Transaction hash: {tx_hash}")
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Vanity Wallet Address
Note
The mnemonic phrase and wallet ID generated by this tool are only compatible with WalletV3R2
.
To create a vanity wallet address using GPU acceleration, follow these steps.
Check Requirements
NVIDIA GPU (driver version 555.* or later).
Download Binary
Download the gpu-generator-linux
binary from the latest release.
Run the Generator
To start the generator with interactive input:
To run the generator with predefined constraints directly from the command line:
Follow the on-screen instructions to monitor progress and view results.
After a successful match, the tool will display the mnemonic phrase and the wallet ID for use with a WalletV3R2
wallet.
Constraints Syntax
-
Allowed characters:
A-Z
,a-z
,0-9
,_
,-
-
Start constraint (after
UQ
prefix, third character):Example →
start[A][P][P][L][E]
orstart[*][T][O][N]
-
End constraint:
Example →
end[T][O][N]
orend[Tt][Oo][Nn]
-
Combined constraints:
Example →
start[*][T][O][N] & end[T][O][N]
-
Multiple variants (OR):
Example →
start[*][T][O][N] & end[T][O][N] | start[D][D][D] | end[0][0][0]
Performance Reference
Hardware | 5 chars | 6 chars | 7 chars | 8 chars |
---|---|---|---|---|
Intel i5-8350U | 4 min | 4 h 40 m | 12.5 days | > 2 years |
AMD Ryzen 5 3600 | 26 sec | 30 min | 31.5 h | 84 days |
NVIDIA GTX 1650 SUPER | 2 sec | 2 min | 2 h | 5.5 days |
NVIDIA RTX 4090 | <1 sec | 13 sec | 13.5 min | 14.5 h |
Use the Generated Wallet
After obtaining the mnemonic and wallet ID, use the following code:
from tonutils.client import ToncenterV3Client
from tonutils.wallet import WalletV3R2
# Set to True for test network, False for main network
IS_TESTNET = True
# Mnemonic phrase
MNEMONIC = "word1 word2 word3 ..."
# Wallet ID
WALLET_ID = 0
def main() -> None:
client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=1, max_retries=1)
wallet, public_key, private_key, mnemonic = WalletV3R2.from_mnemonic(client, MNEMONIC, WALLET_ID)
print(f"Address: {wallet.address.to_str()}")
if __name__ == "__main__":
main()
Conclusion
Vanity addresses are a cosmetic feature that can make your TON wallet or contract stand out. While they offer no functional advantage, they can be useful for branding, marketing, or personal aesthetics.