分类
新手該如何投資

交易格式和支付金额

“问题反馈”移到了这里,您可继续向我们反馈问题,我们将会跟进处理。

交易格式和支付金额

交易是来自帐户的密码学签名指令。 帐户将发起交易以更新以太坊网络的状态。 最简单的交易是将 ETH 从一个账户转到另一个帐户。

以太坊交易是指由外部持有账户发起的行动,换句话说,是指由人管理而不是智能合约管理的账户。 例如,如果 Bob 发送 Alice 1 ETH,则 Bob 的帐户必须减少 1 ETH,而 Alice 的账户必须增加 1 ETH。 此项操作发生在交易中,会变更状态。

改变 EVM 状态的交易需要广播到整个网络。 任何节点都可以在 EVM 上广播交易请求;此后,矿工将执行交易并将由此产生的状态变化传播到网络的其他部分。

交易需要收费并且必须开采才能有效。 为了使这种概述更加简单,我们将其称为 Gas 费和挖矿。

  • recipient – 接收地址(如果为一个外部持有的帐户,交易将传输值。 如果为合约帐户,交易将执行合约代码)
  • signature – 发送者的标识符。 当通过发送者的私钥签名交易来确保发送者已授权此交易时,生成此签名。
  • value – 从发件人向收件人转移 ETH 的金额 (以 WEI 为单位,ETH 的一种面值单位)
  • data – 可包括任意数据的可选字段
  • gasLimit – 交易可以消耗的 Gas 的最大数量。 Gas 单位代表了计算步骤
  • maxPriorityFeePerGas - 作为矿工小费包含的最大 gas 数量
  • maxFeePerGas - 愿意为交易支付的最大 gas 交易格式和支付金额 数量(包括 baseFeePerGas 和 maxPriorityFeePerGas )

Gas 是指矿工处理交易所需的算力。 用户必须为此计算支付费用。 gasLimit 和 gasPrice 决定支付给矿工的最高交易费用。 关于 Gas 的更多信息。

  • raw 是已签名交易的 RLP(Recursive Length Prefix)编码形式。
  • tx 是已签名交易的 JSON 形式。

绝大多数交易从外部所有的帐户访问合约。 大多数合约用 Solidity 语言编写,并根据应用程序二进制接口 (ABI)

例如,我们来看一下这笔交易。 使用 Click to see More(单击查看更多)查看调用数据。

函数选择器是 0xa9059cbb 。 有几个具有此签名的已知函数。 本例中合约源代码已经上传到 Etherscan,所以我们知道该函数是 transfer(address, uint256) 。

根据应用程序二进制接口规范,整型值(例如地址,它是 20 字节整型)在应用程序二进制接口中显示为 32 字节的字,前面用零填充。 所以我们知道 to 地址是 4f6742badb049791cd9a37ea913f2bac38d01279 。 value 是 0x3b0559f4 = 990206452。

  • 常规交易:从一个钱包到另一个钱包的交易。
  • 合约部署交易:没有“to”地址的交易,数据字段用于合约代码。
  • 执行合约:与已部署的智能合约进行交互的交易。 在这种情况下,“to”地址是智能合约地址。

如上所述,执行交易需要耗费燃料。 简单的转账交易需要 21000 单位燃料。

因此,如果 Bob 要在 baseFeePerGas 为 190 Gwei 且 maxPriorityFeePerGas 为 10 Gwei 时给 Alice 发送一个以太币,Bob 需要支付以下费用:

Bob 的帐户将会减少 -1.0042 ETH

Alice 的帐户将会增加 +1.0 ETH

基础费将会燃烧 -0.00399 ETH

矿工获得 +0.000210 ETH 的小费

未使用燃料退还示意图

示意图节选自以太坊虚拟机图解

  1. 一旦您发送交易,加密法生成交易哈希: 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
  2. 然后将该交易转播到网络,并且与大量其他交易一起包含在一个集合中。
  3. 矿工必须选择您的交易并将它包含在一个区块中,以便验证交易并认为它“成功”交易格式和支付金额 。
    • 如果网络繁忙,矿工无法跟上,您可能会在这个阶段等候。
  4. 您的交易将收到"确认"。 确认的数量是自包含您交易的区块以来创建的区块数。 这个数字越大,交易被网络处理和承认的确定性就越强。
    • 最近的区块可能会被重组,给人留下交易失败的印象;但交易可能仍然有效,但包含在另一个区块中。
    • 重组的概率随着其后每一次挖掘的区块而降低,即确认次数越多,交易就越不可改变。

跟随 Austin 交易格式和支付金额 交易格式和支付金额 了解交易、燃料和挖矿。

Typed Transaction Envelope 交易

以太坊最初有一种交易形式。 每笔交易都包含 Nonce、燃料价格、燃料限制、目的地地址、价值、数据、v、r 和 s。 这些字段采用 RLP 编码,如下所示:

交易格式和支付金额

Payment

查询条件如下:App,Time,State,Currency,Merchant order No.,Paynicorn order No.,User ID;

查询条件如下:App,Time,State,Currency,Merchant order No.,Paynicorn order No.,User ID;选择对应的查询条件后,点击“OK”显示对应的查询结果

交易格式和支付金额

    发卡机构 收单机构 服务商 商户 查看全部

文档中心 技术文档 应答码

“问题反馈”移到了这里,您可继续向我们反馈问题,我们将会跟进处理。

交易格式和支付金额

那有哪些记录需要对账? 目前主要是两个:一个是交易记录;一个是退款记录。 这里以交易记录的处理为例,退款记录可以类似处理。

一、对账处理流程

1.1 渠道对账单下载

  • 对账单格式不一。文本,XML,csv的都有。为了后续能够统一处理,在账单下载完成后,需要进行标准化处理。
  • 下载方式不一,HTTP,HTTPS,FTP的,都有。下载程序需要按照渠道的协议来处理。
  • 下载时间不一,一般是凌晨1点后,到中午12才能用的也有。如果在预定的时间取不到数据,需要注意重试读取。
  • 稳定性差。FTP服务器出问题那是常有的事。渠道侧解决方案往往就是重启。所以重试机制是必要的。

1.2 渠道对账单标准化

  1. 交易时间:这是在微信侧的支付完成的时间。 这个时间会成为一个陷阱。
  2. 公众账号ID,商户号,子商户号,设备号: 这些信息需要做验证,确保是自己的单子,不要让微信把老王家的单子也给发过来了;
  3. 微信订单号,商户订单号: 这两个是对单的核心。前者是微信侧产生的订单号,在微信支付接口返回值中有。但是万一收不到这个返回值,那在本地记录中可能就空了。 后者是我们发送给微信的订单号,一般用这个来做对单依据。两边的数据中都会有这个值。
  4. 用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额: 这几个就是对单的核心字段,必须确保双方是一致的。
  5. 商品名称,商户数据包,手续费,费率:这些是可选验证。

由于每个渠道的账单格式都不尽相同, 在得到账单后,下一步是对账单做标准化处理,这样轧帐以及后续工作就可以统一处理了。 标准化后的账单数据可以放在文件系统或者数据库中。这取决于交易数据量。每天百万以上的量,还是使用文件系统,比较合适。数据库操作相对比较慢,也浪费资源。 基于文件系统的标准化涉及如下内容:

1.3 本地交易记录准备

  • 啥都不做,直接用原始数据。鉴于大部分系统使用的是mysql,这也意味着在MySQL上做对账。对账时需要大量的数据查找工作,必然会影响线上业务。在数据规模较大,比如超过100万时,就不太合适了。
  • 当然,还有一个选择是使用备库来执行对账,这样既简单,也不影响线上业务。这是典型的空间换时间的做法。
  • 如果业务大到需要分表分库才能处理,那对账数据准备也不一样。使用分库也不现实,因为分库一般是按照主体id,而不是渠道id,来分库,这样对账就需要在多个库上进行,效率反而降低了。而对分表分库建立从库也非常耗费资源。这种情况下,需要同步一份数据到(交易格式和支付金额 hdfs)文件系统中,或者NOSQL数据库上。

由于交易记录是支付系统核心数据,有大量的应用,如信用、风控等,都需要交易记录数据。这些应用对交易记录的需求还不完全一致,为了提升性能, 交易记录会使用异步的方式来将数据投递给使用方。 交易记录在入库时,投递消息到消息系统中。使用方监听这个消息,一旦收到新消息,则从交易记录库中查询数据,获取数据并更新到库中。关于此类数据同步的文章不少,这里就不详细介绍。

1.4 轧帐

轧帐是按照客户订单号来比较本地交易记录和渠道交易记录是否一致。从算法角度,是计算两个数组的差异。在单机运行时,可以采用的算法不少,这里不详细介绍。 我们推荐采用mapreduce来轧帐,这有个优势,可以按照订单号将渠道提供的记录和本地记录shuffle到同一个reduce处理上,这样就可以很容易进行数据比对。 轧帐中***的坑,莫过于切分点的问题。比如以整0点为切分点,那存在一个问题,本地23:59发起的交易,到了渠道侧,可能会在00:01处理,这一笔交易变成第二天的帐了。实际处理中,一笔交易在渠道侧处理,花上几分钟都有可能。 对于切分点附近无法确认的帐,做一个时间窗,在时间窗内的数据,留待第二天对账时继续处理。

1.5 平帐

  • 长款: 本地未支付,支付渠道已支付。这主要是本地未正确接收到渠道下发的异步通知导致。 一般处理是将本地状态修改为已支付,并做响应的后续处理,比如通知业务方等。
  • 短款:本地已支付,但是支付渠道中无记录;或者本地无记录,支付渠道有记录。在排除跨日因素外,这种情况非常少见,需要了解具体原因后做处理。
  • 金额不一致: 交易格式和支付金额 本地已支付,支付渠道已支付,但是金额不同,这个需要人工核查。
  • 本地未退款,支付渠道已退款,则以支付渠道为准,修改本地为已退款状态,并出发后续处理。
  • 本地已退款、支付渠道已退款,但是金额不同,需要人工核查;
  • 本地已退款,但是支付渠道无记录;或者支付渠道有记录,但是本地没有。 在排除跨日因素外, 这种情况非常少见,需要了解具体原因后做处理。

二、对账架构

2.1 对账单下载

对账单下载组件每天定时触发,从支付通道服务器上下载对账单。 目前主要有HTTP(S)和FTP两种对账单下载方式。 技术选型上,HTTP(S)用apache httpclient即可实现链接池和断点续传, FTP也可以使用Apache Commons Net API。 不管是哪一个,都需要设置重试次数和链接超时间。重试次数和间隔的设置需要小心,重试太频繁,容易把服务器打死.;时间间隔太大,又会阻塞后续处理步骤。5~10分钟是一个合适的重试间隔区间。链接超时指在服务器出现问题时,连接在指定时间内获取不到数据即自动断开。这个很容易被忽略。我们有一次系统出问题,是渠道侧的FTP假死后重启,导致我们的客户端挂住,一直在等待重新链接。此外,注意,有些对账单下载是支持分页下载的。

2.2 对账单转换

将对账单转换为标准格式的账单,为对账Mapreduce任务执行提供支持。每个渠道的对账单格式不一,需要分别开发转换程序。 转换程序主要就两个操作: 解析源文件、转换成标准格式并输出。