V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
b00tyhunt3r
V2EX  ›  程序员

德华们, 电商平台实现 btc 支付,一定要自建全节点服务器吗 (go 语言)

  •  
  •   b00tyhunt3r · 2021-02-01 17:52:30 +08:00 · 2545 次点击
    这是一个创建于 1394 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上个贴子没表达清楚 目前平台不做自营,是 100%的买家、卖家交易平台。但商品本身是由平台制作,平台发货的。 所以不存在例如买家付了款,卖家不发货的情况,

    只要能通过某种方式确定买家完成了付款,款项正确的到达了卖家手里, 我们就可以发货完结这笔交易了。

    而关于比特币支付的实现,大概会是这么个流程,我来描述一场交易:

    已知这么几个信息:

    1.物品 1 卖家定价 100btc

    2.一位买家 A

    3.卖家 B, 钱包地址 bbb

    4.介绍人 C (如果有的话) ,钱包地址 ccc (介绍人制度是你可以介绍别人来买这个卖家的东西。卖出去了你分到物品定价的 1%)

    5.公司钱包地址 ppp

    6.平台手续费为,物品定价的 3%

    现在,

    一、 买家 A 欲购买物品 1,点下“确认购买”按钮

    平台弹出窗口,创建交易 tx1:A 支付 100btc 到平台钱包 ppp. 限时 15 分钟

    A 自行支付。

    if (支付失败) {

    订单取消

    }

    二、

    确认 A 支付到账后,平台基于 A 的付款再生成 1 笔交易 tx2, tx2 包含 3 个输出

    输出 1 付给 卖家 B 的钱包地址 bbb 96btc

    输出 2 付给 介绍人 C 钱包地址 C 1btc

    输出 3 找回自己 3btc 。(手续费)

    三、

    确认交易 tx2 成功后,将物品 1 发货给买家 A 。

    现在的问题是 如果想实现这个流程,技术上最好的 approach 应该是哪种?

    好像不需要自建全节点服务器,借助网络上的附近节点也可以实现发起交易,确认交易状态? 先谢过各位彦祖。

    18 条回复    2022-02-22 20:57:03 +08:00
    zpfhbyx
        1
    zpfhbyx  
       2021-02-01 18:03:04 +08:00
    方便 pt 跑路?
    JDog
        2
    JDog  
       2021-02-01 18:17:26 +08:00
    说清楚,是马德华还是刘德华
    swulling
        3
    swulling  
       2021-02-01 18:20:57 +08:00 via iPhone
    主流平台的结算都要到买家确认收货后,你设计那么着急得打钱给卖家是为啥。
    Showfom
        4
    Showfom  
       2021-02-01 18:22:40 +08:00   ❤️ 1
    https://btcpayserver.org/

    开源的 BTCPay 一般都用这个搭建
    keepeye
        5
    keepeye  
       2021-02-01 18:25:36 +08:00
    我是 马特.彦祖,很高兴回答你的问题,自己搭个全节点也没啥难度啊,随便租一台 e3 服务器就行,硬盘搞大点
    htoooth
        6
    htoooth  
       2021-02-01 18:55:51 +08:00
    这不是交易所吗
    Aaron325
        7
    Aaron325  
       2021-02-01 18:57:28 +08:00
    不需要
    你是在做这个方向,还是只是技术研究
    redtea
        8
    redtea  
       2021-02-01 19:01:40 +08:00
    100 个比特币,你们还是手工操作吧。
    learningman
        9
    learningman  
       2021-02-01 19:04:39 +08:00
    流程错了啊
    应该是一开始买家就全款付给平台,收到货后平台扣除手续费付给买家
    不是让买家自己分的啊
    b00tyhunt3r
        10
    b00tyhunt3r  
    OP
       2021-02-01 19:14:22 +08:00
    @swulling
    @learningman

    我们的商品类似虚拟道具,没有收不到货 /货有问题的可能性。
    所以只要确认买家款项到了就可以视为交易成功。不用等待买家确认收货,因为发货(即时发到)/货本身一定没问题
    b00tyhunt3r
        11
    b00tyhunt3r  
    OP
       2021-02-01 19:24:54 +08:00
    @Aaron325
    真的在做,年内就上线了。
    老哥可以指点下具体的实现方法吗
    现在第 1 是不知道怎么自己发起一笔交易,第 2 怎么确认这个交易被矿工挖到了,并已经成功确认到主链了。
    yfwl
        12
    yfwl  
       2021-02-02 10:15:55 +08:00
    麻瓜宝支付了解一下啊,或者第三方的 BTC 支付系统啊,你自己去对接节点很麻烦... 有现成的 API 为什么不用呢
    pkoukk
        13
    pkoukk  
       2021-02-02 10:22:34 +08:00   ❤️ 1
    @b00tyhunt3r 我们当时是用的 bitcore 的 websocket,交易打包 push 到链上然后订阅地址,每当地址被一个区块 ack 之后会收到回调,确认数超过几个就认为确认到主链。
    不过节点是自己搭的,不确定其它人的节点是否会给你开放这些 api
    大概是这样,太久没做忘了
    Aaron325
        14
    Aaron325  
       2021-02-02 12:50:50 +08:00
    @b00tyhunt3r 给个联系方式,关注下,最近也想做这个方向
    ruanimal
        15
    ruanimal  
       2021-02-02 14:34:36 +08:00
    @b00tyhunt3r 就算即时到货,货也有可能有问题,比如充值不了
    b00tyhunt3r
        16
    b00tyhunt3r  
    OP
       2021-02-03 12:33:34 +08:00
    @pkoukk
    兄弟 现在我想解决的主要是 2 个问题,
    用户点击购买后,我这边服务器需要生成一个地址给用户付款。随后我需要知道用户的确付款成功了,比如这笔交易确认到主链了我接受到一个通知之类的。
    但是我怎么之后这笔交易的交易 id(TxId)呢? 毕竟我只给了用户一个付款地址,交易是他自己完成的,只要他知道交易 id 吧。

    第 2 是 就算我知道交易 id 了,我怎么用非人工的方法追踪这笔交易呢?你提到”交易打包 push 到链上然后订阅地址“, 这一步可以完成我的需求吗?可以的话能具体再说下吗,我搜了 bitcore 貌似没看到相关 API

    还想问下,你有其他联系方式吗 v 站没有私信功能
    主要是如果确实能帮到我, 我们希望给你一些酬谢礼品 谢谢!!
    b00tyhunt3r
        17
    b00tyhunt3r  
    OP
       2021-02-03 12:35:26 +08:00
    @pkoukk
    病句更正:
    但是我怎么知道这笔交易的交易 id(TxId)呢? 毕竟我只给了用户一个付款地址,交易是他自己完成的,只有他知道交易 id 吧。
    wj5868386
        18
    wj5868386  
       2022-02-22 20:57:03 +08:00
    这种就是 2 个方案,一种自己搭建钱包 做相应业务处理
    第二种 用三方钱包类似优盾这种,他收到款会把交易回调给你。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5196 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:53 · PVG 11:53 · LAX 19:53 · JFK 22:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.