V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 支持 Solana 登录

你可以在 V2EX 设置中绑定 Solana 地址,然后就可以用 Phantom / Glow 登录 V2EX。

Get V2EX Coin

9raUVuzeWUk53co63M4WXLWPWE4Xc6Lpn7RS9dnkpump

channg01
V2EX  ›  Solana

solana 功能求解

  •  
  •   channg01 · 23 天前 · 1313 次点击
    假设我的网站增加了一个功能,可以用我网站的积分兑换 V2EX 币,用户点击按钮,我后端构建交易内容,前端弹出 phantom 钱包的交易,比如说他有 200 积分兑换了 200V2ex ,然后用户支付 ADA 和 gas 就可以兑换了。

    但是用户可以点击取消,那么我怎么知道这个交易有没有完成呢?必须通过轮训吗?

    很明在用户点击的时候我应该冻结对应的积分,但是我不知道啥时候需要解冻。

    phantom 的交易页面还可以一直挂起,虽然时间长之后区块错了会报错。但是我不知道交易最终结果。

    这个有什么好的解法吗?
    19 条回复    2025-08-18 12:47:54 +08:00
    JoeJoeJoe
        1
    JoeJoeJoe  
    PRO
       23 天前
    不用其实, 站长提供了一个 api 地址, 可以通过回调来分析用户真正打款了没, 只有收到用户的打款你再执行你的业务逻辑就好, 等我找找站长的地址一会贴给你
    channg01
        2
    channg01  
    OP
       23 天前
    @JoeJoeJoe #1 V2EX 币只是我举例,其实我要兑换的是其他的代币
    JoeJoeJoe
        3
    JoeJoeJoe  
    PRO
       23 天前
    @channg01 一样的, 站长提供的是 Helius 的 api, 你可以看一下

    via: https://v2ex.com/t/1151386#r_16606232
    channg01
        4
    channg01  
    OP
       23 天前
    @JoeJoeJoe #3 我知道,但是现在只有轮训检测这一种方式,想看看有没有其他的方式。
    stabc
        5
    stabc  
       23 天前
    给用户转币不需要用户签名,也就是不需要弹 phantom
    BeCool
        6
    BeCool  
    PRO
       23 天前
    前端可以得到支付完成的 tx ,用户取消时是得不到这个 tx 的。
    即使得到 tx ,也要在后端去 check 这个记录是否在链上。
    https://v2ex.com/t/1151332
    JoeJoeJoe
        7
    JoeJoeJoe  
    PRO
       23 天前
    @channg01 #4 我又突然想到一种方法, 如果仅仅是用户前端点了取消的话, 你的前端界面是可以监听到的

    ps: 我觉得你可能得画个图来理理交互逻辑.
    channg01
        8
    channg01  
    OP
       23 天前
    @stabc #5 我要让用户自己支付 ata 和 gas要不然一个 ata2 块多钱呢
    channg01
        9
    channg01  
    OP
       23 天前
    @channg01 #7 打错了 ADA
    channg01
        10
    channg01  
    OP
       23 天前
    @BeCool #6 用户关了页面再点钱包的确认不就芭比扣了吗
    channg01
        11
    channg01  
    OP
       23 天前
    @JoeJoeJoe #7 想简单了,原来这个逻辑挺复杂的。

    其实就是 V2EX 的金币兑换 V2EX 币的功能,因为涉及到 ADA 和 gas 所以才需要让用户去签名支付,有钱的话直接服务端出了这个费用就没事了。

    当然轮训也没事,只是复杂了一些,还浪费 rpc
    JoeJoeJoe
        12
    JoeJoeJoe  
    PRO
       23 天前
    @channg01 #10 我有一计, 前端点击的时候, 你跟后端发条通知, 让后端等 1 分钟或者多久去检查下 tx, 如果前端能拿到结果, 就取消这个 check, 如果出现你那种情况的话, 就以后端校验为准
    channg01
        13
    channg01  
    OP
       23 天前
    @JoeJoeJoe #12 基本上最简单的就这种了,做一个订单列表,默认交易成功,用户可以去订单列表检查是否成功,失败就还回去积分,哥们也要做这种需求吗?
    JoeJoeJoe
        14
    JoeJoeJoe  
    PRO
       23 天前
    @channg01 #13 最近在研究 web3 的东西, 看了下 livid 的回复, 打算跟着站长规划的路径做点配套

    ps: 安利两个文档:
    https://solana.com/zh/docs
    https://www.solanazh.com/
    channg01
        15
    channg01  
    OP
       23 天前
    @JoeJoeJoe #14 我都 ai 写的,我只提供思虑
    BeCool
        16
    BeCool  
    PRO
       23 天前
    @channg01
    所以通常后端要有一个定时任务来检查收款钱包收到的转账进行对账。根据地址或者 memo 里的信息再做处理。
    lyric
        17
    lyric  
       23 天前 via Android
    后端生成一个 tx ,前端签名然后发送它,把签名发回后端,后端轮询校验这个签名的有效性。这个 tx 如果一段时间不支付,这个 tx 就会失效,轮询时间窗口不会太长。
    channg01
        18
    channg01  
    OP
       21 天前
    @lyric #17 感谢,大概就是用的这个方法,不过具体是后端部分签名发给前端,前端继续部分签名再发给后端,后端上链就能获得 tx 了。后端直接用这个 tx 去查询就行了。
    lyric
        19
    lyric  
       21 天前
    @channg01
    嗯 是这个意思。前端发到链上或者后端发链上都行。多发也没关系
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1981 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:12 · PVG 00:12 · LAX 09:12 · JFK 12:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.