V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
BeCool
48.66D
10.9D
V2EX  ›  分享创造

生成一个 V2EX 结尾的 solana 地址

  •  1
     
  •   BeCool ·
    PRO
    · 41 天前 · 3590 次点击
    这是一个创建于 41 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原理

    不断生成随机密钥对,检查地址是否符合要求。 基本要一百万次以上才能匹配到一个。

    注意

    • 在安全的环境运行。
    • 生成后,彻底删除本地 JSON 文件。
    • 不要相信别人提供的在线地址生成器。

    代码

    下面是 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 条附言  ·  41 天前
    如果你点击向我打赏,可以看到地址为:EiXwKoconqc6fccnjRJiPULaWBLvfeUhBFBM6dFav2ex
    第 2 条附言  ·  41 天前
    评论区 v 友提醒,安装 solana-cli 工具也可以直接生成,使用 solana-keygen grind 命令,可以指定前后缀。
    Solana
    V2EX 支持通过 Solana 网络向内容作者打赏
    Livid 打赏了 100 $V2EX
    24 条回复    2025-08-09 22:34:24 +08:00
    hellojay
        1
    hellojay  
       41 天前
    这个有意思,感谢感谢
    hellojay
        2
    hellojay  
       41 天前   ❤️ 1
    已经使用 sol 送出感谢~
    hzlzh
        3
    hzlzh  
    PRO
       41 天前
    哈哈 有趣
    tom8
        4
    tom8  
       41 天前
    之前搞过 eth 888888 结尾的,go 实现下来生成快很多
    oneisall8955
        5
    oneisall8955  
    PRO
       41 天前
    有意思
    cat
        6
    cat  
       41 天前
    av2ex
    TracyMagic
        7
    TracyMagic  
       41 天前   ❤️ 5
    不需要这么麻烦。solana-keygen grind --ends-with v2ex:1
    samuel
        8
    samuel  
       41 天前
    真有趣!送出一点 V2EX 聊表心意
    prefect
        9
    prefect  
       41 天前   ❤️ 1
    有点不是很理解,这个不是本地生成的公私钥对吗?咋关联到钱包的?地址不是创建钱包的时候生成的吗~
    kaichen
        10
    kaichen  
    PRO
       41 天前   ❤️ 2
    从资产安全的角度不推荐。

    如果只是生成这种 Vanity 地址玩玩没问题,但是真的别拿来存币。

    区块链的公私钥机制就是为了提升抗破解能力,自己用的钱包还去撞特定前后缀,是在帮攻击者压缩搜索空间。

    另外一个供给面是,让攻击者更好地容易准备一份与你地址前后缀相似的地址库,可以用这个地址库给你或者你收发对手方转垃圾代币或者小量代币,赌你看错地址转错,这是非常简单但极其有效的攻击手段。

    历史上出过不少这种 Vanity Address 丢大钱的例子,网络上很容易搜索到,比如 https://www.certik.com/resources/blog/vanity-address-and-address-poisoning
    JackMaMa
        11
    JackMaMa  
    PRO
       41 天前
    @kaichen +1 ,这种靓号有碰撞风险
    alinwu05
        12
    alinwu05  
       41 天前
    这个有意思啊,人才!
    crocoBaby
        13
    crocoBaby  
       41 天前
    好厉害
    Tink
        14
    Tink  
    PRO
       41 天前
    还有想法!
    vanillahz
        15
    vanillahz  
       41 天前   ❤️ 1
    @kaichen 私钥会不会破解,取决于你用的 RNG 强度,本来空间就有 256 位,去掉 32 位也绰绰有余
    第二种攻击取决于你有没有用通讯录/扫码转账的习惯。复制地址无论什么时候都是相当危险的
    bearbest
        16
    bearbest  
       41 天前
    @cat 你是懂华点的 🤣🤣🤣
    BeCool
        17
    BeCool  
    OP
    PRO
       41 天前
    @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 地址,支持前后缀,是否官方无视风险让我们使用不安全的方式?
    kaichen
        18
    kaichen  
    PRO
       41 天前
    @BeCool

    如果是一个人或者少数人这么玩问题不大,但当大量的用户这么用,那么以 V2EX 为结尾的钱包变多,撞库的搜索空间就被压缩了。

    我只是想让人了解存在这样的风险 🙂

    如果只是为了好记,那么去买个 sns.id 是更好的选择。
    ooTwToo
        19
    ooTwToo  
       41 天前
    可以给钱包创建一个域名,方便记住:
    https://www.sns.id/
    BeCool
        20
    BeCool  
    OP
    PRO
       41 天前
    @ooTwToo 这个我有: https://v2ex.com/planet/becool.sol
    它和生成 V2EX 后缀钱包其实是两件事,因为不是为了易记。
    GreyChou
        21
    GreyChou  
       38 天前
    同样疑问,自己生成的地址怎么绑定的?
    luozhsky
        22
    luozhsky  
       38 天前
    @kaichen 就算所有 holder 都改成 V2EX 后缀的地址..几千个而已..真的有影响么...

    数量级在那呢。你要说被破解率上升了 1000 倍是吧...

    一滴水和一杯水放到大海里,有区别么?
    ershierdu
        23
    ershierdu  
       38 天前 via Android
    @kaichen
    纯好奇,这为什么会压缩状态空间?如果我撞出了 123456789……123456789 这个地址,其他人有办法破解吗?
    BeCool
        24
    BeCool  
    OP
    PRO
       38 天前
    @GreyChou 在钱包中导入私钥,然后绑定就可以。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3420 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:27 · PVG 12:27 · LAX 21:27 · JFK 00:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.