不断生成随机密钥对,检查地址是否符合要求。 基本要一百万次以上才能匹配到一个。
下面是 claude code 完成的代码,Node.js 实现,使用官方库。
package.json
{
"name": "solana-v2ex-generator",
"version": "1.0.0",
"description": "Generate Solana addresses ending with v2ex",
"main": "generate-v2ex-address.js",
"scripts": {
"start": "node generate-v2ex-address.js"
},
"dependencies": {
"@solana/web3.js": "^1.95.0",
"bs58": "^5.0.0"
}
}
generate-v2ex-address.js
const { Keypair } = require('@solana/web3.js');
const fs = require('fs');
const bs58 = require('bs58');
async function generateV2exAddress() {
let attempts = 0;
const startTime = Date.now();
console.log('开始生成以 V2EX 结尾的 Solana 地址...\n');
while (true) {
attempts++;
const keypair = Keypair.generate();
const publicKey = keypair.publicKey.toBase58();
if (attempts % 10000 === 0) {
console.log(`已尝试 ${attempts} 次...`);
}
if (publicKey.endsWith('v2ex')) {
const elapsedTime = (Date.now() - startTime) / 1000;
console.log('\n🎉 成功找到匹配的地址!');
console.log(`尝试次数: ${attempts}`);
console.log(`耗时: ${elapsedTime.toFixed(2)} 秒\n`);
console.log('='.repeat(60));
console.log('地址:', publicKey);
console.log('私钥 (Base58):', bs58.encode(keypair.secretKey));
console.log('='.repeat(60));
const result = {
address: publicKey,
privateKey: bs58.encode(keypair.secretKey),
privateKeyArray: Array.from(keypair.secretKey),
attempts: attempts,
timeInSeconds: elapsedTime
};
const filename = `v2ex-address-${Date.now()}.json`;
fs.writeFileSync(filename, JSON.stringify(result, null, 2));
console.log(`\n 结果已保存到: ${filename}`);
break;
}
}
}
generateV2exAddress().catch(console.error);
![]() |
1
hellojay 41 天前
这个有意思,感谢感谢
|
![]() |
2
hellojay 41 天前 ![]() 已经使用 sol 送出感谢~
|
![]() |
3
hzlzh PRO 哈哈 有趣
|
4
tom8 41 天前
之前搞过 eth 888888 结尾的,go 实现下来生成快很多
|
![]() |
5
oneisall8955 PRO 有意思
|
![]() |
6
cat 41 天前
av2ex
|
![]() |
7
TracyMagic 41 天前 ![]() 不需要这么麻烦。solana-keygen grind --ends-with v2ex:1
|
![]() |
8
samuel 41 天前
真有趣!送出一点 V2EX 聊表心意
|
9
prefect 41 天前 ![]() 有点不是很理解,这个不是本地生成的公私钥对吗?咋关联到钱包的?地址不是创建钱包的时候生成的吗~
|
![]() |
10
kaichen PRO ![]() 从资产安全的角度不推荐。
如果只是生成这种 Vanity 地址玩玩没问题,但是真的别拿来存币。 区块链的公私钥机制就是为了提升抗破解能力,自己用的钱包还去撞特定前后缀,是在帮攻击者压缩搜索空间。 另外一个供给面是,让攻击者更好地容易准备一份与你地址前后缀相似的地址库,可以用这个地址库给你或者你收发对手方转垃圾代币或者小量代币,赌你看错地址转错,这是非常简单但极其有效的攻击手段。 历史上出过不少这种 Vanity Address 丢大钱的例子,网络上很容易搜索到,比如 https://www.certik.com/resources/blog/vanity-address-and-address-poisoning |
12
alinwu05 41 天前
这个有意思啊,人才!
|
![]() |
13
crocoBaby 41 天前
好厉害
|
![]() |
14
Tink PRO 还有想法!
|
15
vanillahz 41 天前 ![]() @kaichen 私钥会不会破解,取决于你用的 RNG 强度,本来空间就有 256 位,去掉 32 位也绰绰有余
第二种攻击取决于你有没有用通讯录/扫码转账的习惯。复制地址无论什么时候都是相当危险的 |
![]() |
17
BeCool OP PRO @kaichen
1. 实际这个过程是“挑选”。假设你说的“压缩搜索空间”成立,那 crypto 可能要崩塌。此刻我们认为 V2EX 是 vanity 后缀,但世界上每个人可能他的 vanity 字符是不一样的。每个都是随机生成的,那么每个都可以被叫做“特定前后缀”。攻击者如果看到一个钱包有大量资金,尾数为 2fdsf 这样的,按照你的说法,攻击者可以根据这个后缀来压缩探索空间? 在第三方 app 钱包中如果刚好生成了 V2EX 或者 8888 的后缀,是否说明这个地址是不安全的? 2. 第二种攻击实际上和靓号无关,是批量无选择的攻击。不安全性依然是人导致的。 3. Solana 官方文档有一个叫做 “How to Generate a Vanity Address” 的文档,https://solana.com/developers/cookbook/wallets/generate-vanity-address 使用 solana-keygen grind 工具来生成 vanity 地址,支持前后缀,是否官方无视风险让我们使用不安全的方式? |
![]() |
18
kaichen PRO |
![]() |
19
ooTwToo 41 天前
可以给钱包创建一个域名,方便记住:
https://www.sns.id/ |
![]() |
20
BeCool OP PRO |
21
GreyChou 38 天前
同样疑问,自己生成的地址怎么绑定的?
|