streamd-apis

1.STREAMD #

运行Stream网络的核心点对点服务器被称为streamd。每个streamd服务器与Stream网络相连,转发加密签名交易,并保存一份完整共享的跨国总账的本地副本。streamd的源代码是用C++语言写的,而且在GitHud上得到开源许可。

  • 创建和安装
  • API参考
  • 交易参考

2.WEBSOCKET 和 JSON-RPC API #

如果你想和streamd服务器直接通信,那可以使用WebSocket API或JSON-RPC API。两种API都使用相同的命令列表,每个命令参数几乎完全相同。或者,你可以使用StreamAPI,这是一个简化的JavaScript客户端库,可使用Node.js或者Web浏览器直接通信:

  • Websocket API 使用Websocket协议,对大多数浏览器和JavaScript可实现,从而达到持久的双向交流。请求和回应之间不是1:1的相关性。有些请求服务器会异步响应多个信息;其他时候,与提交它们的请求相比,回应可能以不同的顺序到达。streamd服务器可以配置接受安全的(wss://)、不安全的(ws://)Websocket连接,或同时接受两个。
  • JSON-RPC API依赖HTTP或HTTPs的请求-回应交流。(streamd服务器可以配置接受HTTP、HTTPS,或同时接受两个。)对于提示多个响应的命令,你可以提供一个回调URL。
  • streamd程序也可以被用作快速命令行客户端,向正在运行的streamd服务器发送JSON-RPC请求。这是为管理目的而设计,不是受支持的API。

一般来说,我们推荐使用WebSocket,因为WebSocket的推动范例有较少的延迟和网络开销。JSON-RPC处理每个个体信息时必须打开和关闭HTTP连接。WebSocket也更靠谱,你不用太担心丢失信息和建立多个连接的问题。然而,这三个都有有效的用例,而且在可预见的未来持续受到支持。

2.1.API变化 #

WebSocket和JSON-RPC APIs仍在开发中,并且可能会发生变化。

2.2.连接streamd #

在运行任何针对streamd服务器的命令之前,你必须知道你正在连接哪个服务器。大多数服务器被配置为不能接受直接来自外部网络的请求。

目前labs.stream提供的一些公共服务器:

 

Domain Location Memo
node.labs.stream hk (推荐)

或者,你可以运行自己的streamd本地副本,如果你想运行任意的Admin Commands,这个是必需的。这种情况下,你应该使用你服务器绑定的ip以及端口。

2.2.1.运行个人streamd的原因 #

有许多运行个人streamd服务器的原因,但大多数可以总结为“你信任自己的服务器,你可以控制它的工作量,而且你不需要别人决定使用服务器的时间和方式”。

相信你使用的streamd服务器很重要,所以你可以确认正在运行的软件将以源代码指定的方式操作。当然,你也必须实行良好的网络安全措施,保护服务器不受恶意攻击。如果你连接了一个恶意服务器,那它有无数种方式利用你或使你丢失财富。例如:

  • 一个恶意服务器在你没有支付行为的时候可以报告你被付款。
  • 它可以有选择性地显示或隐藏支付路径和货币交易,不提供给你最佳交易而保证自己的利益。
  • 如果你发送给它账户机密,那它能以你的名义进行任何交易,甚至转移或毁掉你账户余额里的所有钱。

此外,运行个人服务器赋予你管理权,允许你运行重要的只有管理员权限和负荷密集的命令。如果使用其他服务器,你不得不担心其他用户和你抢夺服务器的计算能力。WebSocket API的许多命令会在服务器上加很多负担,所以streamd可以在需要的时候按比例缩减回应。如果你和其他人分享一个服务器,那你可能不能一直得到最佳结果。

2.2.2.WebSocket API #

如果你正在Stream账本上尝试一些方法,那你可以跳过写自己的WebSocket代码,直接使用Stream WebSocket API Tool里的API。稍后,当你想要连接自己的streamd服务器时,你可以用Javascript建立自己的客户端,从而在浏览器(参见这个例子 )或Node.js中运行。 目前Stream实验室在以下地址维护公共WebSocket服务器:

Domain Port
node.labs.stream 443 (wss://)
rpc.labs.stream 443 (wss://)

这些公共服务器不是用于稳定的或商业的用途,而且它们可能在任何时候无法使用。对于常规使用来说,你应运行自己的streamd服务器,或者让你信任的人这样做。

2.2.3.JSON-RPC #

你可以使用任何HTTP客户端(例如Poster for FirefoxPostman for Chrome)提交JSON-RPC访问请求(calls)到streamd服务器。

请求格式

要发出JSON-RPC请求,请将HTTP POST请求发送到streamd服务器正在侦听JSON-RPC连接ip端口的根目录(/)。您可以使用HTTP / 1.0或HTTP / 1.1。如果你使用HTTPS,你应该使用TLS v1.2。出于安全原因,streamd 不支持 SSL v3或更早版本。

始终包含一个Content-Type包含值的标题application/json

如果您打算提出多个请求,请使用Keep-Alives,以便您不必关闭并重新打开请求之间的连接。

将请求主体作为具有以下属性的JSON对象发送:

  • 将该命令放在顶层"method"字段中
  • 包括顶级"params"字段。这个字段的内容应该是一个只包含一个嵌套JSON对象并包含该命令所有参数的单项数组。

响应也是一个JSON对象。

目前Stream实验室在以下地址维护公共JSON-RPC服务器:

Domain Port
rpc.labs.stream 443

这些公共服务器不是用于稳定的或商业的用途,而且它们可能在任何时候无法使用。对于常规使用来说,你应运行自己的streamd服务器,或者让你信任的人这样做。

如果你运行自己的streamd服务器,确保在streamd.cfg文件中已经有JSON-RPC接口,因为JSON-RPC在默认情况下是不可用的。相关部分类似于下面这个例子:

# [rpc_ip]:
#   IP address or domain to bind to allow insecure RPC connections.
#   Defaults to not allow RPC connections.
#
# [rpc_port]:
#   Port to bind to if allowing insecure RPC connections.
[rpc_ip]
127.0.0.1 
[rpc_port]
8088

 

2.2.4.命令行 #

命令行和JSON-RPC连接相同的服务,所以公共服务器和服务器配置是相同的。默认情况下,streamd连接本地实例。或者,你可以指定服务器连接配置文件或--rpc-ip命令行参数。例如:

streamd --rpc_ip=rpc.labs.streamd:443 server_info

 

2.3.请求格式 #

WebSocket API 和JSON-RPC都把JSON用作请求和回应。API上的方法和参数通常是相同的,但两者之间具体的格式略有不同。命令行接口支持具有命令行参数的相同命令。

  • WebSocket请求把命令名称放在JSON对象根目录的命令参数旁边的“command”字段,还有一个将收到回应的可选择“id”字段,所以你可以识别那些发生故障返回的回应。
  • JSON-RPC请求把命令放在“method”字段,作为“params”数组的第一个成员,而且把参数放在另一个分离的对象中。这里没有“id”字段,因为所有回应直接回复给请求。
  • 命令行在任何正式命令行选择后输出命令,被受限的参数组追踪,被空格分离。
{
  "id": 2,
  "command": "account_info",
  "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "strict": true,
  "ledger_index": "validated"
}
POST http://s1.labs.stream:51234/
{
    "method": "account_info",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "strict": true,
            "ledger_index": "validated"
        }
    ]
}
streamd account_info vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV validated true

 

2.4.响应格式 #

成功响应样例

{
  "id": 2,
  "status": "success",
  "type": "response",
  "result": {
    "account_data": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Balance": "27389517749",
      "Flags": 0,
      "LedgerEntryType": "AccountRoot",
      "OwnerCount": 18,
      "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932",
      "PreviousTxnLgrSeq": 6592159,
      "Sequence": 1400,
      "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05"
    },
    "ledger_index": 6760970
  }
}
{
  "id": 2,
  "status": "success",
  "type": "response",
  "result": {
    "account_data": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Balance": "27389517749",
      "Flags": 0,
      "LedgerEntryType": "AccountRoot",
      "OwnerCount": 18,
      "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932",
      "PreviousTxnLgrSeq": 6592159,
      "Sequence": 1400,
      "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05"
    },
    "ledger_index": 6760970
  }
}
{
    "result": {
        "account_data": {
            "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "Balance": "27389517749",
            "Flags": 0,
            "LedgerEntryType": "AccountRoot",
            "OwnerCount": 18,
            "PreviousTxnID": "B6B410172C0B65575D89E464AF5B99937CC568822929ABF87DA75CBD11911932",
            "PreviousTxnLgrSeq": 6592159,
            "Sequence": 1400,
            "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05"
        },
        "ledger_index": 6761012,
        "status": "success"
    }
}

 

2.5.错误响应 #

列举所有错误可能发生的方式几乎是不可能的。某些可能发生在运输层(例如,丢掉网络数据包),这种情况下,结果将根据你使用的客户端和运输工具而有所不同。然而,如果streamd服务器成功收到你的请求,那它将试图以标准化的错误格式回应。

一些错误样例:

{
  "id": 3,
  "status": "error",
  "type": "response",
  "error": "ledgerIndexMalformed",
  "request": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "command": "account_info",
    "id": 3,
    "ledger_index": "-",
    "strict": true
  }
}
HTTP Status: 200 OK
{
    "result": {
        "error": "ledgerIndexMalformed",
        "request": {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "command": "account_info",
            "ledger_index": "-",
            "strict": true
        },
        "status": "error"
    }
}
{
    "result": {
        "error": "ledgerIndexMalformed",
        "request": {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "command": "account_info",
            "ledger_index": "-",
            "strict": true
        },
        "status": "error"
    }
}

 

WebSocket API错误响应格式
字段 类型 描述
id (Varies) 在 WebSocket请求中提供此响应的ID
status String "error" 如果请求导致错误
type String 通常 "response", 这表示对命令的成功响应
error String 发生错误类型的唯一代码
request Object 以JSON格式提示此错误的请求副本。警告:如果请求包含任何账户机密,将在此处展示

 

JSON-RPC API错误响应格式

一些JSON-RPC请求将在HTTP层以错误代码回应。这些情况下,这种回应是回应主体中的纯文本。例如,如果你忘记在method参数中指定命令,那回应类似于下面这样:

HTTP Status: 400 Bad Request
Null method

对于其他返回HTTP 状态代码200 OK的错误来说,JSON格式的回应出现在下面这些字段:

字段 类型 描述
result Object 包含对查询响应的对象
result.error String 发生错误类型的唯一代码
result.status String "error" 如果请求导致错误
result.request Object 以JSON格式提示此错误的请求副本。警告:如果请求包含任何账户机密,将在此处展示!注意:不管请求是什么,请求都以WebSocket格式重新格式化。

2.5.1.错误警告 #

当你的请求导致错误时,全部请求被后台记录下来作为部分响应,因而你可以试着调试错误。然而,这也包括作为请求一部分的任何机密。当共享错误信息时,一定要非常小心,不要把重要的账户私密信息偶然透露给其他人。

2.5.2.通用错误 #

所有的方法可能返还以下错误代码值:

  • unknownCmd – 该请求不包含streamd服务器识别的command.
  • jsonInvalid – (只有WebSocket)该请求不是一个正确的JSON对象。
    • JSON-RPC在这种情况下返回一个400 Bad Request HTTP错误。
  • missingCommand – (只有WebSocket)该请求没有指定一个命令字段。
    • JSON-RPC在这种情况下返回一个400 Bad Request HTTP错误。
  • tooBusy – 该服务器负载过大以至于现在无法执行此命令。如果你是管理员身份连接服务器,通常不会被拒绝。
  • noNetwork – 该服务器无法连接到剩余的radar网络(而且不能在独立模式下运行)。
  • noCurrent – 由于高负荷、网络问题、验证者故障、错误配置或其他问题,该服务器不知道现有总账是什么。
  • noClosed – 该服务器没有已关闭的总账,主要是因为它没有完成启动。
  • wsTextRequired – (只有WebSocket)该请求的操作码 不是文本。

2.6.格式约定 #

WebSocket和JSON-RPC API通常采用相同的参数,尽管是不同的方式(细节参见Request Formatting)。许多相似的参数出现在API中,而且还有一些如何说明这些参数的约定。

所有字段名称是区分大小写的。在响应中,直接从总账节点或交易对象获取的字段以大写字母开头。其他字段,包括不断动态生成响应的一些字段,是小写字母。

2.7.基本数据类型 #

不同类型的对象以不同的方式唯一标识:

账户之间通过各自的地址来区分,比如"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"。地址以字母 r 开头,部分streamd还接受十六进制的地址形式。

交易之间通过交易的二进制编码hash值来识别,你也可以通过交易发送的账户和序列号来识别。

每个完整的账本都有账本索引和唯一hash值,可以用这两个来指定一个账本的实例。

2.7.1.地址 #

Stream账本中的每个账户由一个base58编码格式的地址来识别,该地址通过改账户的主公钥来导出,而主公钥又通过账户的私钥来导出。一个地址由一个以下字符组成的json格式来表示:

  • 地址长度在25-35个字符之间
  • 以字母 v 开头
  • 使用英文字母,排除数字 0 ,大写字母 O ,大写字母 I ,小写字母 l
  • 大小写敏感
  • 包含4个字节的校验
  • 生成的有效的地址数量接近2^32

2.7.2.Hashes #

在Stream中,尤其是其中的交易和账本,通过一个256-bit的hash值来唯一确定。此值通常通过“SHA-512 Half”来计算(通过内容来计算SHA-512,然后截取十六进制表示的前六十四个字符)。由于对象的散列是以非常不可能通过碰撞的方式获取的信息,所以具有相同hash的两个对象就可以认为是一个。

一个Stream账本的hash值具有以下字符:

  • 64个字符的长度
  • 表示为十六进制:0-9,A-F
  • 通常是大写来表示

2.7.3.账户序列 #

序列号是一个32位无符号整数,用于标识相对于特定帐户的交易或优惠。

在Stream账本中每个账户拥有一个序列号,从1开始。对于一个发送到网络或者包含到验证账本的交易,它必须具有与发送帐户的当前序列相匹配的序列字段。每当来自该账户的交易包含在经过验证的账本中,该账户的序列字段就会增加(无论这个交易是成功还是失败)。这样就保留了该账户的交易顺序,以及区分两笔可能相同的交易。

Stream每个节点都标记有创建它OfferCreate交易的发送账户地址和序列值,这两个字段一起提供唯一标识。

2.7.4.总账索引 #

账本索引是用于识别分类帐的32位无符号整数。总账索引也被叫做账本的序列号。第一个账目的索引是1,并且每个新账目的分类索引都高于其之前的账目索引1.

账本索引表达了账目间的顺序;Hash值则标识了账目的确切内容。拥有相同hash的两个账目总是相同的。对于已认证总账,hash值和序列号是同等有效的,而且关系是一对一。然而,这并不适用于正在进行中的账目:

  • 由于交易没有在整个网络里被充分传递,两个不同的streamd服务器可能拥有具有相同序列号的却有不同内容的账目。
  • 可能会有多个关闭的账目版本竞争共识,这些账目拥有相同的序列号却有不同的内容(hash也不同),最后只有一个才能被认证
  • 现有总账内容随时间变化,即便序列号相同,也将导致哈希变化。因此,直至总账关闭,它的哈希是不能被计算的。

2.7.5.指定总账实例 #

许多API方法要求你指定一个总账实例,包括可被检索到的正确数据和共享总账特定版本的最新数据。接受一个总账版本的命令都是按照同样的方式运作。以下有三个能用的你能指定总账的方式:

  1. 通过ledger_index参数中的序列号指定总账。每个已关闭总账都有一个可识别的序列号,该序列号比前一个已验证总账大1。(起源总账序列号为0)
  2. 通过ledger_hash参数中的哈希值指定总账。
  3. 通过ledger_index参数中的快捷方式之一指定总账:
    • validated : 对于已经被全网络验证的大多数近期总账
    • closed :对于已经被修改关闭并由节点为验证提出的大多数近期总账
    • current :对于节点现在运行版本的总账

还有一种接受以上三种格式的已弃用的ledger参数。不要用这个参数,它可能会在没有通知的情况下被移除。

如果你不指定一个总账,current(正在进行中)总账会被默认选择。如果你提供了多于一个的指定总账,那被弃用的ledger字段如果还存在的话,会第一次被使用,后退至ledger_hash。除非其他两个都不存在,否则ledger_index字段将被忽视。

注意:不要依赖这个默认行为;它常常会变化。相反,你需要在每个调用中都制定一个总账版本。

2.8.货币 #

Stream里面有两种不同的货币:stm和其他,两种货币之间有很多不同之处:

stm 发行货币
没有发行者 通常通过发行商发行
指定为字符串 指定为对象
账户间流转 信任关系流转
不能被创造,只能被销毁 可以被自由发行和赎回
Maximum value 100000000000(1e11) Maximum value 9999999999999999e80
精确到最近的 “drop”(0.000001 stm) 15位精度十进制数字,最小非零绝对值为1000000000000000e-96

 

Stream账本使用与典型浮点数不同的精度的小数运算,因此货币金额总是以字符串形式呈现

2.8.1.指定货币金额 #

一些API方法要求你指定货币金额。指定风格取决于你用网络原生stm货币交易还是用其他货币单元(发行货币)交易。

STM

STM数量可以表示为字符串。(stm精度是64位整数,JSON整数被限制在32位,因而使用JSON有可能出现整数溢出。)STM形式上是以“drops”规定的,每个drop相当于0.000001个STM。因此,在JSON文档中,"1000000"代表1.0stm。

不要把STM指定为对象

单元测试允许提交有小数点的STM值 — 例如,“1.23”意为1.23STM。其他所有情况都应以drops说明,不能有小数点:例如“1230000”意为1.23STM。

非STM

如果你正在规定非STM货币(包括法定货币、贵金属、虚拟货币或其他自定义货币),你必须用货币规范对象来规定它。这是该JSON对象的三个字段:

字段 类型 描述
currency String – Currency Code Arbitrary code for currency to issue. Cannot be STM.
value String Quoted decimal representation of the amount of currency. This can include scientific notation, such as 1.23e11 meaning 123,000,000,000. Both e and E may be used.
issuer String Unique account address of the entity issuing the currency. In other words, the person or business where the currency can be redeemed.

例如,为了表示rR5Am25ArfXFmqgNwjZgnfk59EACMhs2hZc账户发行的153.75美元,你要指定:

{
    "currency": "USD",
    "value": "153.75",
    "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
}

单元测试允许以 "amount/currency/issuer"形式的斜线分割字符串提交非STM货币数量。其他所有情况都要使用上面的JSON对象形式。

指定没有金额的货币

如果你要指定没有数量的非STM货币(特别是为了定义货币交易要约的订货单),你需要像上面一样进行指定,但忽略value字段。

如果你要指定没有数量的STM(也是为了定义订货单),你应当用唯一 "currency"字段把它作为JSON对象。STM永远不要包含issuer字段。

最后,如果支付接收者账户信任发行货币的多个网关,你可以表明以接收者接受的任何发行货币组合进行支付。想要实现这个,在JSON对象中指定接收者账户地址为issuer值。

2.8.2.货币代码 #

STM账本中有两种货币代码:

  • 三字符货币代码。我们建议使用全大写的ISO 4217货币代码,然而,以下字符的任何组合都是允许的,所有大写和小写字母,数字以及符号?!@#$%^&*<>(){}[],  |,货币代码STM(全部大写)为STM保留,不能由发行货币使用。
  • 160位十六进制值,根据STM分类帐的内部货币格式,例如0158415500000000C1F76FF6ECB0BAC600000000,这种表达方式并不常见。

2.9.指定时间 #

streamd服务器和它的API把时间表示为未签名的整数。自2000年1月1日(00:00 UTC)起,测量到现在的秒数。这和Unix epoch 的工作方式类似,除了在Unix Epoch后Stream Epoch是946684800秒。

不要以32位变量把Stream Epoch时间转换为UNIX Epoch时间:这可能导致整数溢出。

2.10.可能的服务器状态 #

依据streamd服务器配置方式、运行时间和其他因素,一个服务器可能在不同程度上参与跨国Stream点对点网络。这在对server_info 和server_state命令的回应中表示为server_state字段。这种可能的回应追踪一系列上升互动,每个后面的值取代前一个。它们的定义如下(以从小到大优先级排序):

Value Description
disconnected The server is not connected to the Stream Ledger peer-to-peer network whatsoever. It may be running in offline mode, or it may not be able to access the network for whatever reason.
connected The server believes it is connected to the network.
syncing The server is currently behind on ledger versions. (It is normal for a server to spend a few minutes catching up after you start it.)
tracking The server is in agreement with the network
full The server is fully caught-up with the network and could participate in validation, but is not doing so (possibly because it has not been configured as a validator).
validating The server is currently participating in validation of the ledger
proposing The server is participating in validation of the ledger and currently proposing its own version

 

注意:fullvalidatingproposing间的区别是基于剩余全球网络的同步性,而且一般性操作时服务器在这些状态间波动很正常。

2.11.修改总账 #

Stream全球共享账本的所有改变都是交易的结果。唯一可改变Stream账本的API方法是提交交易的命令。即便如此,只有交易获得共识认证之后,变更才会永久生效。其他大多数公共方法代表不同的方式来查看Stream分类帐中表示的数据,或请求 有关服务器状态的信息。

交易提交命令:

  • submit命令
  • submit_multisigned命令

有关可以提交的各种交易的更多信息,查看交易参考。

3.API方法 #

WebSocket和JSON-RPC的API方法是根据命令名字来定义的,被分为公共命令和管理命令。公共命令不一定适用于普通公众,但是可以被连接到服务器的任意客户端使用。(将公共命令看作是运行服务器的组织成员或​​客户,而管理命令是负责保持服务器运行的人员)。公共命令包括诸如检查分类帐状态,找到连接用户的路径以及提交交易等操作。另一方面,管理命令仅用于受信任的服务器操作员,并包含用于管理,监视和调试服务器的命令。

3.1.公共命令清单 #

  • account_currencies – 获取账户可以发送或接收的货币列表
  • account_channels – 获取账户是渠道来源的支付渠道列表
  • account_info – 获取有关账户的基本数据
  • account_lines – 获取有关账户信任关系的信息
  • account_objects – 获取账户拥有的所有分类账对象
  • account_offers – 获取有关账户货币兑换优惠的信息
  • account_tx – 获取有关账户交易的信息
  • book_offers – 获取有关优惠以交换两种货币的信息
  • channel_authorize – 从付款渠道签署金钱索赔
  • channel_verify – 查看付款渠道声明的签名
  • fee – 获取有关交易成本的信息
  • gateway_balances – 计算账户发出的总金额
  • ledger – 获取关于账本版本的信息
  • ledger_closed – 获取最新的封闭式账本版本
  • ledger_current – 获取当前工作分类账版本
  • ledger_data – 获取账本版本的原始内容
  • ledger_entry – 从账本版本获取一个元素
  • nostream_check – 获取对账户的DefaultStream和NoStream设置的建议更改
  • path_find – 在两个账户之间查找付款路径并接收更新
  • ping – 确认与服务器的连接
  • random – 生成一个随机数
  • stream_path_find – 在两个账户之间找到一次付款路径,一次
  • server_info – 以可读格式检索服务器的状态
  • server_state – 以机器可读格式检索服务器的状态
  • sign – 密码签署交易
  • sign_for – 有助于多重签名
  • submit – 向网络发送交易
  • submit_multisigned – 向网络发送多重签名的交易
  • subscribe – 听取有关特定主体的更新
  • transaction_entry – 从特定分类账版本中检索有关交易的信息
  • tx – 从手边的所有分类账中检索有关交易的信息
  • tx_history – 检索有关所有最近交易的信息
  • unsubscribe – 停止收听有关特定主题的更新

owner_info命令已弃用。改为使用account_objects

3.2.管理命令 #

只有在配置文件标识为admin的主机和端口上连接时,streamd管理命令才可用。(默认情况下,命令行客户端使用管理连接。)

  • can_delete – 允许在线删除分类账至特定分类帐
  • connect – 强制将streamd服务器连接到特定的对等端
  • consensus_info – 获取有关共识状态的信息
  • feature – 获取有关协议修订的信息
  • fetch_info – 获取有关服务器与网络同步的信息
  • get_counts – 获取有关服务器内部和内存使用情况的统计信息
  • ledger_accept – 关闭并在独立模式下推进分类帐
  • ledger_cleaner – 配置分类账清算服务来检查损坏的数据
  • ledger_request – 查询对等服务器的特定分类帐版本
  • log_level – 获取或修改日志冗长
  • logrotate – 重新打开日志文件
  • peers – 获取有关连接的对等服务器的信息
  • print – 获取有关内部子系统的信息
  • stop – 关闭streamd服务器
  • validation_create – 为新的streamd验证器生成密钥
  • validation_seed – 临时设置用于验证的密钥
  • validators – 获取有关当前验证器的信息
  • validator_list_sites – 获取有关发布验证器列表的网站的信息
  • wallet_propose – 为新帐户生成密钥

以下管理命令已弃用,可能会在不做进一步通知的情况下被删除:

  • ledger_header– 改为使用该ledger命令。
  • unl_addunl_deleteunl_listunl_loadunl_networkunl_resetunl_score-使用UNL管理配置文件来代替。
  • wallet_seed– -改为使用wallet_propose

3.3.命令行访问 #

您可以将该streamd应用程序(作为单独的实例)用作JSON-RPC客户端。在这种模式下,它具有从命令提示符用单行触发大多数API方法的语法,如每种方法中所述。但是,某些方法或选项没有命令行语法。对于不支持的语法,您可以使用以下方法:

  • json – 通过命令行传递JSON

注意:命令行界面仅用于管理目的,并不是受支持的API

4.账户信息 #

Stream分类账中的“账户”代表STM的持有人和交易发送人。账户可以发送和接收STM和已发行资产,参与去中心化交易,并更改自己的设置。创建一个帐户涉及生成密钥,然后从另一个帐户接收STM。有关更多信息,请参阅帐户。

4.1.account_currencies #

account_currencies命令根据其信任线检索帐户可以发送或接收的货币列表。(这不是一个彻底确认的列表,但它可以用来填充用户界面。)

请求格式示例:

{
    "command": "account_currencies",
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "strict": true,
    "ledger_index": "validated"
}
{
    "method": "account_currencies",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "account_index": 0,
            "ledger_index": "validated",
            "strict": true
        }
    ]
}

该请求包含以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。
strict Boolean (可选)如果为true,则只接受帐户参数的地址或公钥。默认为false。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)

以下字段已弃用,不应提供:account_index

响应格式实例:

{
    "result": {
        "ledger_index": 155786,
        "receive_currencies": [
            "BTC",
            "CNY",
            "ETH"
        ],
        "send_currencies": [
            "CNY"
        ],
        "validated": true
    },
    "status": "success",
    "type": "response"
}
200 OK
{
    "result": {
        "ledger_index": 155786,
        "receive_currencies": [
            "BTC",
            "CNY",
            "ETH"
        ],
        "send_currencies": [
            "CNY"
        ],
        "status": "success",
        "validated": true
    }
}

注意:账户可以发送或接收的货币是基于对其信任行的检查而定义的。如果一个账户有一个货币的信任线并且有足够的空间来增加余额,它就可以收到该货币。如果信任线的余额可以减少,则该账户可以发送该币种。此方法不检查信任行是否被冻结或授权

可能的错误

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • actNotFound– account请求字段中指定的地址不对应分类帐中的账户。
  • lgrNotFound– 由ledger_hash或者ledger_index指定的分类账不存在,或者确实存在,但服务器没有。

4.2.account_info #

account_info命令将检索有关帐户,其活动和STM余额的信息。所有检索到的信息都与分类账的特定版本有关。

account_info请求的示例:

{
  "id": 2,
  "command": "account_info",
  "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "strict": true,
  "ledger_index": "current",
  "queue": true
}
{
    "method": "account_info",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "strict": true,
            "ledger_index": "current",
            "queue": true
        }
    ]
}
#Syntax: account_info account [ledger_index|ledger_hash] [strict]
rippled account_info vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV true

该请求包含以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。
strict Boolean (可选,默认为False)如果设置为True,则该account字段只接受公钥或Stream分类帐地址。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)
queue Boolean (可选)如果true, FeeEscalation amendment也启用了,还会返回有关与此帐户关联的排队交易的统计信息。只能在查询当前开放分类账的数据时使用。
signer_lists Boolean (可选)如果true,MultiSign amendment启用,还会返回与此帐户关联的任何SignerList对象。

以下字段已弃用,不应提供:identledger

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "account_data": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Balance": "99999986730672448",
      "Flags": 0,
      "LedgerEntryType": "AccountRoot",
      "OwnerCount": 15,
      "PreviousTxnID": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
      "PreviousTxnLgrSeq": 155512,
      "Sequence": 293,
      "index": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037"
    },
    "ledger_current_index": 155823,
    "validated": false
  },
  "status": "success",
  "type": "response"
}
{
  "result": {
    "account_data": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Balance": "99999986730672448",
      "Flags": 0,
      "LedgerEntryType": "AccountRoot",
      "OwnerCount": 15,
      "PreviousTxnID": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
      "PreviousTxnLgrSeq": 155512,
      "Sequence": 293,
      "index": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037"
    },
    "ledger_current_index": 155823,
    "validated": false
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,结果包含请求的帐户,其数据以及它所应用的分类帐,如下所示:

Field 类型 描述
account_data Object AccountRoot ledger object 与此帐户的信息,存储在总账。
signer_lists Array (除非指定的请求signer_lists和至少一个SignerList与帐户相关联,否则省略。)与此帐户关联的SignerList分类帐对象的数组进行多重签名。由于帐户最多只能拥有一个SignerList,因此如果该数组存在,该数组必须只有一个成员。
ledger_current_index Integer (如果ledger_index提供,则省略)检索此信息时使用的最新分类帐的序列号。这些信息不包含任何比这个更新的分类账更改。
ledger_index Integer (如果ledger_current_index提供,则省略)检索此信息时使用的分类帐的序列号。这些信息不包含任何比这个更新的分类账的更改。
queue_data Object (除非queue指定为true和查询当前开立的分类帐,否则省略。)有关此帐户发送的排队交易的信息。该信息描述本地streamd服务器的状态,该状态可能与共识网络中的其他服务器不同。有些字段可能会被忽略,因为这些值是由排队机制“懒散地”计算的。
validated Boolean 如果此数据来自经过验证的分类账版本,则为真; 如果省略或设置为false,则此数据不是最终的。

queue_data参数(如果存在)包含以下字段:

Field 类型 描述
txn_count Integer 此地址的排队交易数量。
auth_change_queued Boolean (可以省略)队列中的交易是否更改此地址授权交易的方式。如果true,该地址可以在该交易已经被执行或从队列中删除之前不进行进一步的交易处理。
lowest_sequence Integer (可以省略)这个地址交易队列中最低序列号。
highest_sequence Integer (可以省略)这个地址交易队列中最高序列号。
max_spend_drops_total String (可省略)如果队列中的每个交易消耗尽可能多的STM,则可以从该地址中扣除整数的drops of STM。
transactions Array (可省略)关于此地址中每个排队交易的信息。

transactions数组中的每个对象(如果存在)都可以包含以下任何或全部字段:

Field 类型 描述
auth_change Boolean 此交易是否更改此地址授权交易的方式。
fee String 此交易的交易成本,以STM为单位。
fee_level String 这笔交易的交易成本,相对于此类交易的最低成本,按fee levels计算。
max_spend_drops String STM的最高金额, in drops,此交易可以发送或销毁。
seq Integer 此事务的序列号。

可能出现的错误:

  • 任何通用错误类型。
  • invalidParams -一个或多个字段指定不正确,或缺少一个或多个必填字段。例如,指定queuetrueledger_index不是当前开放分类账的指定的请求。
  • actNotFound– account请求字段中指定的地址不对应分类帐中的账户。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。

4.3.account_lines #

account_lines方法返回有关账户信任额度的信息,包括所有非STM货币和资产的余额。所有检索到的信息都与分类账的特定版本有关。

请求格式的示例:

{
  "id": 1,
  "command": "account_lines",
  "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "ledger": "current"
}
{
    "method": "account_lines",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "ledger": "current"
        }
    ]
}

该请求接受以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)
peer String (可选)第二个帐户的地址。如果提供,只显示连接两个帐户的信任线。
limit Integer (可选,默认值有所不同)限制要检索的事务数量。服务器不需要遵守这个值。必须在10到400的范围内。
marker (Not Specified) (可选)来自之前分页响应的值。在该响应停止的情况下继续恢复数据。

以下参数已被弃用,可能会被删除,恕不另行通知:ledgerpeer_index

一个成功回应的例子:

{
  "id": 1,
  "result": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "ledger_current_index": 155833,
    "lines": [{
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "999857.44805",
      "currency": "CNY",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "0",
      "currency": "STM",
      "limit": "0",
      "limit_peer": "0",
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "0",
      "currency": "XCN",
      "limit": "0",
      "limit_peer": "0",
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i",
      "balance": "0",
      "currency": "BTC",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "no_vstream_peer": true,
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i",
      "balance": "0",
      "currency": "ETH",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "0",
      "currency": "BTC",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "quality_in": 0,
      "quality_out": 0
    }],
    "validated": false
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "ledger_current_index": 155833,
    "lines": [{
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "999857.44805",
      "currency": "CNY",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "0",
      "currency": "XRP",
      "limit": "0",
      "limit_peer": "0",
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "0",
      "currency": "XCN",
      "limit": "0",
      "limit_peer": "0",
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i",
      "balance": "0",
      "currency": "BTC",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "no_vstream_peer": true,
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i",
      "balance": "0",
      "currency": "ETH",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "quality_in": 0,
      "quality_out": 0
    }, {
      "account": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
      "balance": "0",
      "currency": "BTC",
      "limit": "1000000000000000e-4",
      "limit_peer": "0",
      "no_vstream": true,
      "quality_in": 0,
      "quality_out": 0
    }],
    "validated": false
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,包含帐户地址和信任线对象数组的成功结果。具体而言,结果对象包含以下字段:

Field 类型 描述
account String 此请求所对应帐户的唯一地址。这是用于信任线目的的“透视帐户”。
lines Array 信任线对象数组,如下所述。如果信任线的数量很大,则一次只返回到此limit的次数。
ledger_current_index Integer (如果ledger_hashledger_index提供,则省略)检索此数据时使用的分类帐版本的序号。
ledger_index Integer (如果ledger_current_index改为提供,则省略)请求中提供的序列号,用于检索此数据时使用的分类帐版本。
ledger_hash String (可以省略)请求中提供的Hex哈希检索此数据时使用的分类帐版本。
marker Not Specified 指示响应的服务器定义的值是分页的。将此传递给下一个调用以恢复此调用停止的位置。在此之后没有附加页面时省略。

每个信任线对象具有以下字段的某种组合:

Field 类型 描述
account String 该信任线对手的唯一地址。
balance String 表示当前针对此行保留的数字余额。积极的平衡意味着角度账户持有价值; 负差额意味着远景账户欠款。
currency String 一个货币代码,标识这个信任线可以容纳什么货币。
limit String 此帐户愿意欠对方帐户的最大金额
limit_peer String 交易对手账户愿意欠透视账户的最大金额
quality_in Unsigned integer 该账户对该信任额度上的收入余额进行评估的比率,即每10亿个单位的这个值的比率。(例如,5亿的值代表0.5:1的比率。)作为特例,0被视为1:1的比例。
quality_out Unsigned integer 账户价值在此信任额度上的外发余额的比率,作为此值每10亿单位的比率。(例如,5亿的值代表0.5:1的比率。)作为特例,0被视为1:1的比例。
no_stream Boolean (可以省略)true如果此帐户已启用此行的NoStream标志。如果省略,则与之相同false
no_stream_peer Boolean (可以省略)true如果对等帐户已启用NoStream标志。如果省略,则与之相同false
authorized Boolean (可以省略)true如果此帐户已授权此信任热线。如果省略,则与之相同false
peer_authorized Boolean (可以省略)true如果同行帐户授权此信任线。如果省略,则与之相同false
freeze Boolean (可以省略)true如果此帐户冻结了此信任线。如果省略,则与之相同false
freeze_peer Boolean (可以省略)true如果同行账户冻结了这个信任线。如果省略,则与之相同false

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • actNotFound– 请求字段中指定的地址account不对应分类账中的账户。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。
  • actMalformed– 如果marker提供的字段不可接受。

4.4.account_offers #

account_offers方法检索由特定帐户作为特定分类账版本的优惠清单。

请求格式的示例:

{
  "id": 2,
  "command": "account_offers",
  "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "ledger": "current"
}
{
    "method": "account_offers",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "ledger_index": "current"
        }
    ]
}
#Syntax: account_offers account [ledger_index]
rippled account_offers vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV current

请求可以包含以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。
ledger Unsigned integer, or String (不推荐使用,可选)要使用的分类帐版本的唯一标识符,例如分类帐序列号,散列或诸如“已验证”的快捷方式。
ledger_hash String (可选)标识要使用的分类帐版本的20字节十六进制字符串。
ledger_index (可选) Ledger Index (可选,默认为current)要使用的分类帐的序列号,或“current”,“closed”或“validated”以动态选择分类帐。(请参阅指定分类帐)
limit Integer (可选,默认值有所不同)限制要检索的事务数量。服务器不需要遵守这个值。必须在10到400的范围内。
marker Not Specified (可选)来自之前分页响应的值。在该响应停止的情况下继续检索数据。

以下参数已弃用,可能会被取消,恕不另行通知:ledger

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "ledger_current_index": 155935,
    "offers": [{
      "flags": 0,
      "seq": 234,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1"
      },
      "taker_pays": "1000000"
    }, {
      "flags": 0,
      "seq": 239,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "0.00195"
      },
      "taker_pays": "1950000"
    }, {
      "flags": 0,
      "seq": 275,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1.85"
      },
      "taker_pays": "1000000"
    }],
    "validated": false
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "ledger_current_index": 155935,
    "offers": [{
      "flags": 0,
      "seq": 234,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1"
      },
      "taker_pays": "1000000"
    }, {
      "flags": 0,
      "seq": 239,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "0.00195"
      },
      "taker_pays": "1950000"
    }, {
      "flags": 0,
      "seq": 275,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1.85"
      },
      "taker_pays": "1000000"
    }],
    "validated": false
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
account String 唯一地址标识提供商品的帐户
offers Array 对象数组,其中每个对象都表示此帐户所提供的优惠,与请求的帐本版本相同。如果报价数量很大,则一次只能返回limit
ledger_current_index Integer (如果ledger_hashledger_index提供,则省略)检索此数据时使用的分类帐版本的序号。
ledger_index Integer (如果ledger_current_index改为提供,则省略)请求中提供的序列号,用于检索此数据时使用的分类帐版本。
ledger_hash String (可以省略)请求中提供的Hex哈希检索此数据时使用的分类帐版本。
marker (Not Specified) (可以省略)服务器定义的值,表示响应是分页的。将此传递给下一个调用以恢复此调用停止的位置。在此之后没有信息页面时省略。

每个商品对象都包含以下字段:

Field 类型 描述
flags Unsigned integer 此优惠条目的选项设置为位标志。
seq Unsigned integer 创建此条目的事务的序列号。(交易序列号与账户相关。)
taker_gets String or Object 接受报价的帐户接收的金额,作为表示STM中金额的字符串或货币规格对象。(请参阅指定货币金额)
taker_pays String or Object 接受报价的账户所提供的金额,作为表示STM中金额的字符串或货币规格对象。(请参阅指定货币金额)
quality String 报价的汇率,按原来的比例taker_pays除以原始报价taker_gets。执行报价时,最优质(最低)质量的报价首先被消耗; 提供具有相同质量的产品将从最旧到最新执行。
expiration Unsigned integer (可能会被忽略)之后,此优惠被视为无资金支持,因为自Stream Epoch以来的秒数。另请参阅:优惠到期。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • actNotFound– 请求字段中指定的地址account不对应分类账中的账户。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。
  • actMalformed– 如果marker提供的字段不可接受。

4.5.account_tx #

account_tx方法检索涉及指定帐户的交易列表。

请求格式的示例:

{
  "id": 2,
  "command": "account_tx",
  "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "ledger_index_min": -1,
  "ledger_index_max": -1,
  "binary": false,
  "limit": 2,
  "forward": false
}
{
    "method": "account_tx",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "binary": false,
            "forward": false,
            "ledger_index_max": -1,
            "ledger_index_min": -1,
            "limit": 2
        }
    ]
}
#Syntax account_tx account ledger_index_min ledger_index_max [offset] [limit] [binary] [count] [forward]
rippled -- account_tx vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV -1 -1 2 5 1 0 1

该请求包含以下参数:

Field 类型 描述
account String 账户的唯一标识符,通常是账户的地址。
ledger_index_min Integer (可选)用于指定最早的分类帐以包含交易。的值-1指示使用可用的最早的验证台账版本的服务器。
ledger_index_max Integer (可选)用于指定最近的分类帐以包含来自的交易。的值-1指示使用可用的最新验证台账版本的服务器。
ledger_hash String (可选)仅用于查找单个分类帐中的交易。(请参阅指定分类帐。)
ledger_index String or Unsigned Integer (可选)仅用于查找单个分类帐中的交易。(请参阅指定分类帐。)
binary Boolean (可选)默认为false。如果设置为true,则将事务作为十六进制字符串而不是JSON返回。
forward Boolean (可选)默认为false。如果设置为true,则首先返回使用最旧的分类帐索引的值。否则,结果将首先与最新的分类帐编入索引。(结果的每页可能不是内部排序的,但页面总体排序。)
limit Integer (可选)默认值有所不同。限制要检索的事务数量。服务器不需要遵守这个值。
marker (Not Specified) 来自之前分页响应的价值。在该响应停止的情况下继续检索数据。即使服务器的可用分类账范围发生变化,该值也是稳定的。

虽然这些领域被标记为可选,则必须使用至少一个在您的要求:ledger_indexledger_hashledger_index_min,或ledger_index_max

注意:对于WebSocket和JSON-RPC,该account_tx方法还有一个不推荐的旧版本。出于这个原因,Stream建议不使用任何以下字段offsetcountdescendingledger_max,和ledger_min。如果您使用任何这些已弃用的字段,则该方法不支持分页。

重复查询数据

与其他分页方法一样,您可以使用该marker字段返回多页数据。

在请求之间的时间,"ledger_index_min": -1并且"ledger_index_max": -1可能会更改为指除他们以前做不同的分类帐的版本。marker只要标记未指示请求中指定的分类范围之外的某个点,即使请求中的分类帐范围发生更改,该字段也可以安全分页。

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "ledger_index_max": 155983,
    "ledger_index_min": 2,
    "limit": 2,
    "marker": {
      "ledger": 153500,
      "seq": 0
    },
    "transactions": [{
      "meta": {
        "AffectedNodes": [{
          "ModifiedNode": {
            "FinalFields": {
              "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
              "Balance": "21492361",
              "Flags": 8388608,
              "OwnerCount": 14,
              "Sequence": 78
            },
            "LedgerEntryType": "AccountRoot",
            "LedgerIndex": "ADEFE0B5A676E5431444ADA797634C65B963A00B9B79DBFA4821DA786DD6C8B4",
            "PreviousFields": {
              "Balance": "22492373",
              "Sequence": 77
            },
            "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
            "PreviousTxnLgrSeq": 153524
          }
        }, {
          "ModifiedNode": {
            "FinalFields": {
              "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
              "Balance": "99999986730672448",
              "Flags": 0,
              "OwnerCount": 15,
              "Sequence": 293
            },
            "LedgerEntryType": "AccountRoot",
            "LedgerIndex": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037",
            "PreviousFields": {
              "Balance": "99999986729672448"
            },
            "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
            "PreviousTxnLgrSeq": 153524
          }
        }],
        "TransactionIndex": 0,
        "TransactionResult": "tesSUCCESS",
        "delivered_amount": "1000000"
      },
      "tx": {
        "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
        "Amount": "1000000",
        "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "Fee": "12",
        "Flags": 2147483648,
        "LastLedgerSequence": 155520,
        "Memos": [{
          "Memo": {
            "MemoData": "68616861",
            "MemoType": "6D656D6F"
          }
        }],
        "Sequence": 77,
        "SigningPubKey": "021ADD58CB32BFD8F3F24A027081CE3928CEE072E85692123DE4DF92EFCF2CE2BC",
        "TransactionType": "Payment",
        "TxnSignature": "304402200C8B73E45DD5C43D6C10ECF26BE1D0212BA121BC0EB090441B09AE21FAD2F17C02206143819F8B15F4C8C83A4735E56E971E7465A76C2116443092E8E7179B4A7AFD",
        "date": 575694990,
        "hash": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
        "inLedger": 155512,
        "ledger_index": 155512
      },
      "validated": true
    }]
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "ledger_index_max": 155983,
    "ledger_index_min": 2,
    "limit": 2,
    "marker": {
      "ledger": 153500,
      "seq": 0
    },
    "transactions": [{
      "meta": {
        "AffectedNodes": [{
          "ModifiedNode": {
            "FinalFields": {
              "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
              "Balance": "21492361",
              "Flags": 8388608,
              "OwnerCount": 14,
              "Sequence": 78
            },
            "LedgerEntryType": "AccountRoot",
            "LedgerIndex": "ADEFE0B5A676E5431444ADA797634C65B963A00B9B79DBFA4821DA786DD6C8B4",
            "PreviousFields": {
              "Balance": "22492373",
              "Sequence": 77
            },
            "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
            "PreviousTxnLgrSeq": 153524
          }
        }, {
          "ModifiedNode": {
            "FinalFields": {
              "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
              "Balance": "99999986730672448",
              "Flags": 0,
              "OwnerCount": 15,
              "Sequence": 293
            },
            "LedgerEntryType": "AccountRoot",
            "LedgerIndex": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037",
            "PreviousFields": {
              "Balance": "99999986729672448"
            },
            "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
            "PreviousTxnLgrSeq": 153524
          }
        }],
        "TransactionIndex": 0,
        "TransactionResult": "tesSUCCESS",
        "delivered_amount": "1000000"
      },
      "tx": {
        "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
        "Amount": "1000000",
        "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "Fee": "12",
        "Flags": 2147483648,
        "LastLedgerSequence": 155520,
        "Memos": [{
          "Memo": {
            "MemoData": "68616861",
            "MemoType": "6D656D6F"
          }
        }],
        "Sequence": 77,
        "SigningPubKey": "021ADD58CB32BFD8F3F24A027081CE3928CEE072E85692123DE4DF92EFCF2CE2BC",
        "TransactionType": "Payment",
        "TxnSignature": "304402200C8B73E45DD5C43D6C10ECF26BE1D0212BA121BC0EB090441B09AE21FAD2F17C02206143819F8B15F4C8C83A4735E56E971E7465A76C2116443092E8E7179B4A7AFD",
        "date": 575694990,
        "hash": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
        "inLedger": 155512,
        "ledger_index": 155512
      },
      "validated": true
    }]
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
account String 识别相关帐户的唯一地址
ledger_index_min Integer 实际上搜索的最早的分类账序号交易。
ledger_index_max Integer 实际上搜索的最近一次分类账的序列号交易。
limit Integer limit请求中使用的值。(这可能与服务器实际实施的限制值不同。)
marker (Not Specified) 指示响应的服务器定义的值是分页的。将此传递给下一个电话以恢复此通话停止的位置。
transactions Array 如下所述,与请求标准匹配的事务数组。
validated Boolean 如果包含并设置为true,则此回复中的信息来自经过验证的分类帐版本。否则,信息可能会更改。

 

注意:该服务器可能会响应不同于提供ledger_index_minledger_index_max的值,例如,如果它没有你手头上指定的版本。

每个事务对象都包含以下字段,具体取决于它是以JSON还是以十六进制字符串("binary":true)格式请求的。

Field 类型 描述
ledger_index Integer 包含此交易的分类帐版本的序号。
meta Object(JSON)or String(Binary) 如果binary为True,那么这是事务元数据的十六进制字符串。否则,事务元数据将包含在JSON格式中。
tx Object (仅限JSON模式)定义事务的JSON对象
tx_blob String (仅限二进制模式)唯一散列代表事务的字符串。
validated Boolean 交易是否包含在经过验证的分类帐中。任何尚未处于验证分类帐中的交易可能会发生变化。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • actMalformed– 请求字段中指定的地址account格式不正确。
  • actBitcoin– 该字段中指定的地址account格式化为比特币地址,而不是STM分类帐地址。
  • lgrIdxsInvalid– 由ledger_index_min或者ledger_index_max不存在的分类账,或者存在但服务器不存在。

4.6.novstream_check #

novstream_check命令提供了一种快速检查帐户的DefaultStream字段以及其信任线的Novstream标志的状态,并与建议的设置进行比较。

请求格式的示例:

{
    "id": 0,
    "command": "novstream_check",
    "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "role": "gateway",
    "ledger_index": "current",
    "limit": 2,
    "transactions": true
}
{
    "method": "novstream_check",
    "params": [
        {
            "account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "ledger_index": "current",
            "limit": 2,
            "role": "gateway",
            "transactions": true
        }
    ]
}

注意:此方法没有命令行语法。使用该json命令从命令行访问此命令。

该请求包含以下参数:

Field 类型 描述
account String 账户的唯一标识符,通常是账户的地址。
role String 地址是指a gateway还是user。建议取决于帐户的角色。发行人必须启用DefaultStream,并且必须在所有信任线上禁用NoStream。用户应该禁用DefaultStream,并且应该在所有信任线上启用Novstream。
transactions Boolean (可选)如果true将一组建议的事务包含为JSON对象,那么您可以签名并提交以解决问题。默认为false。
limit Unsigned Integer (可选)要包含在结果中的最大信任线问题数。默认为300。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)

一个成功回应的例子:

{
  "id": 0,
  "result": {
    "ledger_current_index": 169518,
    "problems": ["You should immediately set your default vstream flag", "You should clear the no vstream flag on your CNY line to vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz", "You should clear the no vstream flag on your BTC line to vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz", "You should clear the no vstream flag on your BTC line to vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i"],
    "transactions": [{
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": 10,
      "Sequence": 335,
      "SetFlag": 8,
      "TransactionType": "AccountSet"
    }, {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": 10,
      "Flags": 262144,
      "LimitAmount": {
        "currency": "BTC",
        "issuer": "vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i",
        "value": "1000000000000000e-4"
      },
      "Sequence": 338,
      "TransactionType": "TrustSet"
    }],
    "validated": false
  },
  "status": "success",
  "type": "response"
}
{
  "id": 0,
  "result": {
    "ledger_current_index": 169518,
    "problems": ["You should immediately set your default vstream flag", "You should clear the no vstream flag on your CNY line to vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz", "You should clear the no vstream flag on your BTC line to vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz", "You should clear the no vstream flag on your BTC line to vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i"],
    "transactions": [{
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": 10,
      "Sequence": 335,
      "SetFlag": 8,
      "TransactionType": "AccountSet"
    }, {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": 10,
      "Flags": 262144,
      "LimitAmount": {
        "currency": "BTC",
        "issuer": "vp9Ykz8Af9bYV6zpjxRiza2oeim8xmiu7i",
        "value": "1000000000000000e-4"
      },
      "Sequence": 338,
      "TransactionType": "TrustSet"
    }],
    "validated": false
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
ledger_current_index Number 用于计算这些结果的分类帐的序列号。
problems Array 具有人类可读性问题描述的字符串数组。如果帐户的DefaultStream设置不符合建议条件,则最多包含一个条目,并且最多包含一个条目,limit其信息行的NoStream设置不符合建议。
transactions Array (可以省略)如果请求指定transactionstrue,则这是一个JSON对象数组,每个JSON对象都是JSON形式的事务,它应该修复所描述的问题之一。此数组的长度与数组相同problems,并且每个条目旨在解决在该数组的相同索引中描述的问题。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • actNotFound– 请求字段中指定的地址account不对应分类账中的账户。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。

4.7.wallet_propose #

使用wallet_propose方法生成新账户需要的密钥。以此种方式创建的账户当接收提供足够STM来达到账户储备金的交易时,只会被官方纳入stream网络。(wallet_propose命令不会影响全球网络。从技术上来说,它不是创建新账户所必须的:你可以用其他方式生成密钥,但那样是不推荐的。)

wallet_propose请求是一个管理命令,不能被无权限的用户运行!(管理命令不能被传递至外网,因而可以保护该命令不受那些窃取账户机密的人的威胁。)

请求格式样例:

{
    "command": "wallet_propose",
    "passphrase": "test"
}
{
    "method": "wallet_propose",
    "params": [
        {
            "passphrase": "test"
        }
    ]
}
#Syntax: wallet_propose [passphrase]
streamd -- wallet_propose test

请求包含以下参数:

 

Field 类型 描述
passphrase String 可选)指定一个密码短语,用于测试目的。如果不指定,服务器将使用一个随机生成的秘钥。除了测试目的,秘钥应该使用随机生成的。一些类似Stream的地址和其他格式的值是被禁止使用的。

成功回应的例子:

{
   "result" : {
      "account_id" : "vp2YHP5k3bSd6LRFT4phDjVMLXQjH4hiaG",
      "master_key" : "AHOY CLAD JUDD NOON MINI CHAD CUBA JAN KANT AMID DEL LETS",
      "master_seed" : "ssyXjRurNo75TjXjubby65cD96ak8",
      "master_seed_hex" : "5BDD10A694F2E36CCAC0CBE28CE2AC49",
      "public_key" : "aBPXjfsA7fY2LLPxRuZ7Sj2ADzoSEGDW4Atd5MgxdHz5FQvGPbqU",
      "public_key_hex" : "02CF23BCB1252D153713954AF374F44F82C255170ECAEDB059783128F53288F34F",
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含有关新(潜在)帐户的各种重要信息,包括以下字段:

Field Type Description
master_seed String 这是密钥对的私钥。以Stream的base58编码字符串格式从其中获取有关此帐户的所有其他信息的主种子。通常,您使用此格式的密钥来签署交易。
master_seed_hex String 主种子,十六进制格式。一种简单的,广泛支持的方式来表示私钥。可以用来签署交易。
master_key String 主种子,采用RFC 1751格式。一个更容易记住,更易于记录的私钥版本。可以用来签署交易。
account_id String 该帐户的地址为base58格式。这不是公钥,而是它的哈希值。它也有校验和,所以打字错误几乎肯定会导致无效的地址,而不是有效的,但不同的地址。这是STM分类帐中帐户的主要标识符。你告诉人们这是为了获得报酬,并在交易中使用它来表明你是谁,你支付什么​​,信任等等。多签名列表也使用这些来标识其他签名者
public_key String 密钥对的公钥,采用Stream的base58编码字符串格式。派生自master_seed
public_key_hex String 这是密钥对的公钥,以十六进制表示。派生自master_seed。要验证交易中的签名,streamd需要此公钥。这就是为什么签名交易的格式包含该SigningPubKey字段中的公钥。

您也可以使用此方法生成密钥对,以用作帐户的常规密钥对。您将一个常规密钥对分配给一个帐户,以便能够使用该密钥对签署大部分交易,并尽可能使主密钥对保持离线状态。

除了将其用作常规密钥对外,您还可以将其用作多签名列表(SignerList)的成员。

有关主密钥和常规密钥对的更多信息,请参阅加密密钥。

有关多重签名和签名者列表的更多信息,请参见多重签名。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确。
  • badSeed-该请求所指定的禁止使用的种子值(在passphraseseedseed_hex字段),如一个空字符串,或字符串类似于STM总帐地址。

5.总账信息 #

每台streamd服务器都会保存STM分类帐当前状态的完整副本,其中包含优化树形格式中网络中的所有帐户,交易,优惠和其他数据。由于提出了交易和优惠,每个服务器将它们整合到其当前的分类帐副本中,定期关闭它,并且(如果已配置)参与推进经过全球验证的版本。在网络达成共识之后,该分类帐版本将得到验证并永久不变。任何未包含在一个分类帐版本中的交易都将成为下一个验证版本中的候选项。

5.1.ledger #

检索关于公共分类帐的信息。

请求格式的示例:

{
    "id": 14,
    "command": "ledger",
    "ledger_index": "validated",
    "full": false,
    "accounts": false,
    "transactions": false,
    "expand": false,
    "owner_funds": false
}
{
    "method": "ledger",
    "params": [
        {
            "ledger_index": "validated",
            "accounts": false,
            "full": false,
            "transactions": false,
            "expand": false,
            "owner_funds": false
        }
    ]
}
#Syntax: ledger ledger_index|ledger_hash [full|tx]
# "full" is equivalent to "full": true
# "tx" is equivalent to "transactions": true
streamd ledger current

该请求可以包含以下参数:

Field Type Description
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer 可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)
full Boolean (可选) 需要管理员。如果true返回整个分类帐的完整信息。如果您未指定分类账版本,则忽略。默认为false。(相当于启用transactionsaccountsexpand)注意:这是一个非常大量的数据 – 数百兆字节!
accounts Boolean (可选) 需要管理员。如果true,返回账簿中的账户信息。如果您未指定分类账版本,则忽略。默认为false。警告:这会返回大量的数据!
transactions Boolean (可选)如果true返回指定分类帐版本中的交易信息。默认为false。如果您未指定分类账版本,则忽略。
expand Boolean (可选)为交易/帐户信息提供完整的JSON格式信息,而不仅仅是散列。默认为false。除非您请求交易或帐户,否则将被忽略。
owner_funds Boolean (可选)如果在响应中的OfferCreate事务的元数据中true包含owner_funds字段。默认为false。忽略除非包含交易并且expand是真实的。
binary Boolean (可选)如果truetransactionsexpand都同时true以二进制格式(十六进制字符串)而不是JSON格式返回事务信息。
queue Boolean (可选)如果true,并且该命令正在请求current分类帐,则会在结果中包含排队的事务数组。

ledger字段已弃用,可能会被删除,恕不另行通知。

一个成功回应的例子:

{
  "id": 14,
  "result": {
    "ledger": {
      "accepted": true,
      "account_hash": "C3FED0CFCF26EF342D1213435258C9EB3098620FC2096DFFA1244B333386E64E",
      "close_time": 575706870,
      "close_time_human": "2018-Mar-30 06:34:30",
      "close_time_resolution": 10,
      "closed": true,
      "hash": "03B5A2196152202BFD2F78CEE331ED05AF33D0C381BFD9F168A25C14FCF60870",
      "ledger_hash": "03B5A2196152202BFD2F78CEE331ED05AF33D0C381BFD9F168A25C14FCF60870",
      "ledger_index": "156118",
      "parent_hash": "DEEC565070B7689FC64F6B64DEAD224DCFF037E8A85D8C237627C6460B3EB95B",
      "seqNum": "156118",
      "totalCoins": "99999999999992838",
      "total_coins": "99999999999992838",
      "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000"
    },
    "ledger_index": 156118,
    "validated": true
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "ledger": {
      "accepted": true,
      "account_hash": "C3FED0CFCF26EF342D1213435258C9EB3098620FC2096DFFA1244B333386E64E",
      "close_time": 575706870,
      "close_time_human": "2018-Mar-30 06:34:30",
      "close_time_resolution": 10,
      "closed": true,
      "hash": "03B5A2196152202BFD2F78CEE331ED05AF33D0C381BFD9F168A25C14FCF60870",
      "ledger_hash": "03B5A2196152202BFD2F78CEE331ED05AF33D0C381BFD9F168A25C14FCF60870",
      "ledger_index": "156118",
      "parent_hash": "DEEC565070B7689FC64F6B64DEAD224DCFF037E8A85D8C237627C6460B3EB95B",
      "seqNum": "156118",
      "totalCoins": "99999999999992838",
      "total_coins": "99999999999992838",
      "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000"
    },
    "ledger_index": 156118,
    "validated": true
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含有关分类账的信息,包括以下字段:

Field Type Description
ledger Object 此分类帐的完整标题数据。
ledger.account_hash String 以十六进制格式显示此分类帐中所有帐户状态信息的散列
ledger.accountState Array (除非有请求,则省略)此分类帐中的所有帐户状态信息。
ledger.close_time Integer 这个分类帐的时间在Stream Epoch以后几秒钟内关闭
ledger.close_time_human String 这个分类帐的时间以可读的格式关闭
ledger.close_time_resolution Integer 总帐关闭时间在这几秒钟内四舍五入。
ledger.closed Boolean 这个分类帐是否已经关闭
ledger.ledger_hash String 唯一标识整个分类帐的散列。
ledger.ledger_index String 该分类帐的总帐索引,作为引用的整数
ledger.parent_hash String 唯一标识在此之前出现的分类帐的散列。
ledger.total_coins String 作为引用的整数,网络中的STM下降总数。(这会随着交易成本销毁STM而降低。)
ledger.transaction_hash String 包含在此分类帐中的交易信息散列,如十六进制
ledger.transactions Array (未请求时省略)在此分类帐版本中应用的交易。默认情况下,成员是交易’识别哈希字符串。如果请求指定expand为true,则成员完全是交易的表示形式,而不是JSON或二进制形式,具体取决于请求是否指定binary为true。
ledger_hash String 唯一标识整个分类帐的散列。
ledger_index Number 该分类帐的总帐索引。
queue_data Array (除非使用queue参数请求,否则忽略)按照与队列相同的顺序描述排队事务的对象数组。如果请求指定expand为true,则成员包含事务的完整表示,可以采用JSON或二进制形式,具体取决于请求是否指定binary为true。需要费用修正。

以下字段弃用的并且可以在不另行通知被删除:acceptedhashseqNumtotalCoins

queue_data数组的每个成员表示队列中的一个事务。此对象的某些字段可能会因为尚未计算而被忽略。该对象的字段如下所示:

Field Value Description
account String 该地址发送此排队交易。
tx String or Object 默认情况下,这是一个包含事务标识哈希的字符串。如果事务以二进制格式扩展,那么这是一个对象,它的唯一字段是tx_blob,以十进制字符串形式包含事务的二进制形式。如果事务以JSON格式扩展,则这是一个包含事务对象的对象,包括事务在该hash字段中标识的散列。
retries_remaining Number 此次交易在被投放前可以重试多少次。
preflight_result String 初步交易检查的初步结果。这总是tesSUCCESS
last_result String (可以省略)如果这个事务在得到retriable(ter)结果后留在队列中,这就是ter它得到的确切结果代码。
auth_change Boolean (可以省略)此事务是否更改此地址授权事务的方式。
fee String (可能省略)此交易的交易成本,以STM为单位。
fee_level String (可以省略)此交易的交易成本,相对于此类交易的最低成本,以费用级别表示。
max_spend_drops String (也可以省略) STM的最大量,in drops,该交易可能发送或破坏。

如果请求指定"owner_funds": true并扩展了事务,则响应owner_fundsmetaData每个OfferCreate-type事务的对象中都有一个字段。这个领域的目的是为了更容易地跟踪每个新的经过验证的分类账的供应资金状况。此字段的定义与Order Book订购流中该字段的版本稍有不同:

Field 描述
owner_funds String 在此分类账中执行所有交易后TakerGetsAccount发送此OfferCreate交易的货币的数量金额。这不检查货币金额是否被冻结。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。
  • noPermission– 如果您指定full或者accounts为true,但没有以管理员身份连接到服务器(通常,admin需要连接本地端口)。

5.2.ledger_closed #

ledger_closed方法返回最近关闭的分类帐的唯一标识符。(这个分类账不一定是有效的和不可变的。)

请求格式的示例:

{
   "id": 2,
   "command": "ledger_closed"
}
{
    "method": "ledger_closed",
    "params": [
        {}
    ]
}
#Syntax: ledger_closed
streamd ledger_closed

该方法不接受任何参数。

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
    "ledger_index": 156173
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
    "ledger_index": 156173
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
ledger_hash String 20字节的十六进制字符串,带有分类帐的唯一散列
ledger_index Unsigned Integer 此分类帐的序号

可能的错误:

  • 任何通用错误类型。

5.3.ledger_current #

ledger_current方法返回当前正在进行的分类帐的唯一标识符。该命令对于测试非常有用,因为返回的分类账仍然不断变化。

请求格式的示例:

{
   "id": 2,
   "command": "ledger_current"
}
{
    "method": "ledger_current",
    "params": [
        {}
    ]
}
#Syntax: ledger_current
streamd ledger_current

该请求不包含参数。

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "ledger_current_index": 156196
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "ledger_current_index": 156196
    "status": "success",
  }
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
ledger_current_index Unsigned Integer 此分类帐的序号

可能的错误:

  • 任何通用错误类型。

5.4.ledger_data #

ledger_data方法检索指定分类帐的内容。您可以遍历多个调用来检索单个分类帐版本的全部内容。

请求格式的示例:

{
   "id": 2,
   "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
   "command": "ledger_data",
   "limit": 5,
   "binary": true
}
{
    "method": "ledger_data",
    "params": [
        {
            "binary": true,
            "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
            "limit": 5
        }
    ]
}

注意:没有命令行语法ledger_data。您可以使用该json命令从命令行访问此方法。

请求可以包含以下字段:

Field Type Description
id (Arbitrary) (仅限WebSocket)在响应延迟或无序时,将此请求与其他人分开的任何标识符。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer 可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)
binary Boolean (可选,默认为False)如果设置为true,则返回分类帐对象为散列十六进制字符串而不是JSON。
limit Integer (可选,默认变化的)限制要检索的分类帐对象的数量。服务器不需要遵守这个值。
marker (Not Specified) 来自之前分页响应的价值。在该响应停止的情况下继续检索数据。

ledger字段已弃用,可能会被删除,恕不另行通知。

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
    "ledger_index": "156173",
    "marker": "1E58E0D2E99FFE7EF7C2B98EE63998F845860CF2A58EAE711C12A894A1205A63",
    "state": [{
      "data": "11006F2200000000240000000B250000015133000000000000000034000000000000000055E8146BAA479266D61727383AAF3A7EBA3061B917F08C61BFA82B2C551CAF94355010AFE8D4AF92CB0CBD5051A499BA555711BA23DFD44FACDE675A17AF4C4A80AAAB6440000000000F424065D485543DF729C000000000000000000000000000434E590000000000C3B914002ED6944382B78F183DD6613F0E5CC5FD8114F2D333C71B380B69EDEB68751F7AAD5EE3350E8C",
      "index": "0027D7CCB2CF1E7A8A15A7F255F459BB0B1B42CD2908929C23E948D73966ABC2"
    }, {
      "data": "11006F22000200002400000011250000123A33000000000000000034000000000000000055FA09A55BB3DA539D72B12D3D359C51901F8467F9C97A113E4AAE54D7A546A50750108F8858298670F04B0D754DDD47BAF18BCDDC13409AF229994F1550F7DCA7000064D4CA71EA17A3C000000000000000000000000000434E590000000000C3B914002ED6944382B78F183DD6613F0E5CC5FD6540000000004AC4A08114F2D333C71B380B69EDEB68751F7AAD5EE3350E8C",
      "index": "01985A028B3C15B0CD5D0D5B60F2558043F56FFC4CA04B2177CBBFDF2215D22C"
    }, {
      "data": "1100642200000000581150F3BF4E6D62FAAD62B4D65887E58BA3607C7871238F49B84ED7A30C2EB49E82148B17262A312E4FF5BE1138A85301428C74628BB80113C21F5F400136752D1233FCD9812C4F10D2FCACCE4BCD3398C223F74CFAB010381DA5BE6436A2A7A04FCC55D92AAD60CF3E071B8F13C1D774E219750CFC03207C67DDC9FD121609956EB68CCDF0B4289C763685FB8A3FA9547817E97E92928D5E679FCE3C3F9D3C2889918CB3DCDF310F5B9FCA974BD60D6D5EEB0A3C3D3537CBE8E980C47F489D3CA16E08921B1FE1B20A9A539E233647D82A24A5CAA933931870599E86525727BC6E65DF438FBAF5A39DC30219C91D5AEBB7F70E9B9BDEC3C4BEDBF68A044A7A482962DDF6D960E8C573B95D016433550944DE2ED51E00F41A27E4290774398E42ABB509F49B87B29E5E02505C44437495B816B06BCB6DDEFAFC5BA1323B98B9F0813AF51F525B5C96D7A8179894DD9AD4E9810A5D6023BCD72B3F207649244430791157BD5F29CE9E5B5716D7B83DA9C99B8E5C756BCE430B6CF8BE6F90427EB2EC9131C8A571BA94200A3770C9D26C5403C8C1E19923F8CD02F91FC56E10E6B5170A3EDE8AB39A201597EB0956F310FF0A0F32F4130FB708445AD0483C67C59FE5B1DF6E74A8B270556CDF991503A1F915EA64BB4A48AD87243669CC9CB2F2C658FB816B63C501E346EBAD252E15DFFE136A96882961C1356F6187424C87825150C9AE89E67CC751283DA7ABC6C74E3254E44DE414EB4CB416DF",
      "index": "1150F3BF4E6D62FAAD62B4D65887E58BA3607C7871238F49B84ED7A30C2EB49E"
    }, {
      "data": "1100642200000000581325AE6430D47924A0E9389AC91A7D1125B1AF64A0D729E790BD4BB6DDEFC072821415B8498C737803B6C6D57F0F5F085C8746AF154B011340B84627D80CFDCF5C9721417038617F7A174E0081C69E402490A73AA5A5070CB456D1739F8B693C93D3E4EC9788D1D6492ED5B841360F2DCC625A3EA47C04ABC9",
      "index": "1325AE6430D47924A0E9389AC91A7D1125B1AF64A0D729E790BD4BB6DDEFC072"
    }, {
      "data": "11006F2200000000240000000625000001483300000000000000003400000000000000005597674188B06F3ED44BA2F34180E0B538579504647796E00D8DD5F865D85F0EBB5010AFE8D4AF92CB0CBD5051A499BA555711BA23DFD44FACDE675B038D7EA4C6800064400000000098968065D4C38D7EA4C68000000000000000000000000000434E590000000000C3B914002ED6944382B78F183DD6613F0E5CC5FD8114F2D333C71B380B69EDEB68751F7AAD5EE3350E8C",
      "index": "159769461D9A3B758F9315780270886EA863E21F3677997F319EB58E1F71174A"
    }],
    "validated": true
  },
  "status": "success",
  "type": "response"
}
{
  "id": 2,
  "result": {
    "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
    "ledger_index": "156173",
    "marker": "1E58E0D2E99FFE7EF7C2B98EE63998F845860CF2A58EAE711C12A894A1205A63",
    "state": [{
      "Account": "vP3AYvkqCZTP3oh9b9zDzVqgf9odzhFCcC",
      "BookDirectory": "AFE8D4AF92CB0CBD5051A499BA555711BA23DFD44FACDE675A17AF4C4A80AAAB",
      "BookNode": "0000000000000000",
      "Flags": 0,
      "LedgerEntryType": "Offer",
      "OwnerNode": "0000000000000000",
      "PreviousTxnID": "E8146BAA479266D61727383AAF3A7EBA3061B917F08C61BFA82B2C551CAF9435",
      "PreviousTxnLgrSeq": 337,
      "Sequence": 11,
      "TakerGets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1.5"
      },
      "TakerPays": "1000000",
      "index": "0027D7CCB2CF1E7A8A15A7F255F459BB0B1B42CD2908929C23E948D73966ABC2"
    }, {
      "Account": "vP3AYvkqCZTP3oh9b9zDzVqgf9odzhFCcC",
      "BookDirectory": "8F8858298670F04B0D754DDD47BAF18BCDDC13409AF229994F1550F7DCA70000",
      "BookNode": "0000000000000000",
      "Flags": 131072,
      "LedgerEntryType": "Offer",
      "OwnerNode": "0000000000000000",
      "PreviousTxnID": "FA09A55BB3DA539D72B12D3D359C51901F8467F9C97A113E4AAE54D7A546A507",
      "PreviousTxnLgrSeq": 4666,
      "Sequence": 17,
      "TakerGets": "4900000",
      "TakerPays": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "29.4"
      },
      "index": "01985A028B3C15B0CD5D0D5B60F2558043F56FFC4CA04B2177CBBFDF2215D22C"
    }, {
      "Flags": 0,
      "Indexes": ["5F400136752D1233FCD9812C4F10D2FCACCE4BCD3398C223F74CFAB010381DA5", "BE6436A2A7A04FCC55D92AAD60CF3E071B8F13C1D774E219750CFC03207C67DD", "C9FD121609956EB68CCDF0B4289C763685FB8A3FA9547817E97E92928D5E679F", "CE3C3F9D3C2889918CB3DCDF310F5B9FCA974BD60D6D5EEB0A3C3D3537CBE8E9", "80C47F489D3CA16E08921B1FE1B20A9A539E233647D82A24A5CAA93393187059", "9E86525727BC6E65DF438FBAF5A39DC30219C91D5AEBB7F70E9B9BDEC3C4BEDB", "F68A044A7A482962DDF6D960E8C573B95D016433550944DE2ED51E00F41A27E4", "290774398E42ABB509F49B87B29E5E02505C44437495B816B06BCB6DDEFAFC5B", "A1323B98B9F0813AF51F525B5C96D7A8179894DD9AD4E9810A5D6023BCD72B3F", "207649244430791157BD5F29CE9E5B5716D7B83DA9C99B8E5C756BCE430B6CF8", "BE6F90427EB2EC9131C8A571BA94200A3770C9D26C5403C8C1E19923F8CD02F9", "1FC56E10E6B5170A3EDE8AB39A201597EB0956F310FF0A0F32F4130FB708445A", "D0483C67C59FE5B1DF6E74A8B270556CDF991503A1F915EA64BB4A48AD872436", "69CC9CB2F2C658FB816B63C501E346EBAD252E15DFFE136A96882961C1356F61", "87424C87825150C9AE89E67CC751283DA7ABC6C74E3254E44DE414EB4CB416DF"],
      "LedgerEntryType": "DirectoryNode",
      "Owner": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "RootIndex": "1150F3BF4E6D62FAAD62B4D65887E58BA3607C7871238F49B84ED7A30C2EB49E",
      "index": "1150F3BF4E6D62FAAD62B4D65887E58BA3607C7871238F49B84ED7A30C2EB49E"
    }, {
      "Flags": 0,
      "Indexes": ["B84627D80CFDCF5C9721417038617F7A174E0081C69E402490A73AA5A5070CB4", "56D1739F8B693C93D3E4EC9788D1D6492ED5B841360F2DCC625A3EA47C04ABC9"],
      "LedgerEntryType": "DirectoryNode",
      "Owner": "vpyqxXzyoX62Bs6WRckYuUoVQjiGaBvCwB",
      "RootIndex": "1325AE6430D47924A0E9389AC91A7D1125B1AF64A0D729E790BD4BB6DDEFC072",
      "index": "1325AE6430D47924A0E9389AC91A7D1125B1AF64A0D729E790BD4BB6DDEFC072"
    }, {
      "Account": "vP3AYvkqCZTP3oh9b9zDzVqgf9odzhFCcC",
      "BookDirectory": "AFE8D4AF92CB0CBD5051A499BA555711BA23DFD44FACDE675B038D7EA4C68000",
      "BookNode": "0000000000000000",
      "Flags": 0,
      "LedgerEntryType": "Offer",
      "OwnerNode": "0000000000000000",
      "PreviousTxnID": "97674188B06F3ED44BA2F34180E0B538579504647796E00D8DD5F865D85F0EBB",
      "PreviousTxnLgrSeq": 328,
      "Sequence": 6,
      "TakerGets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "10"
      },
      "TakerPays": "10000000",
      "index": "159769461D9A3B758F9315780270886EA863E21F3677997F319EB58E1F71174A"
    }],
    "validated": true
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "ledger_hash": "D771E2D1A624BBD3FA26827C48F3B6BD5B33E1C642E0982B239D4928E967E25A",
    "ledger_index": "156173",
    "marker": "1E58E0D2E99FFE7EF7C2B98EE63998F845860CF2A58EAE711C12A894A1205A63",
    "state": [{
      "Account": "vP3AYvkqCZTP3oh9b9zDzVqgf9odzhFCcC",
      "BookDirectory": "AFE8D4AF92CB0CBD5051A499BA555711BA23DFD44FACDE675A17AF4C4A80AAAB",
      "BookNode": "0000000000000000",
      "Flags": 0,
      "LedgerEntryType": "Offer",
      "OwnerNode": "0000000000000000",
      "PreviousTxnID": "E8146BAA479266D61727383AAF3A7EBA3061B917F08C61BFA82B2C551CAF9435",
      "PreviousTxnLgrSeq": 337,
      "Sequence": 11,
      "TakerGets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1.5"
      },
      "TakerPays": "1000000",
      "index": "0027D7CCB2CF1E7A8A15A7F255F459BB0B1B42CD2908929C23E948D73966ABC2"
    }, {
      "Account": "vP3AYvkqCZTP3oh9b9zDzVqgf9odzhFCcC",
      "BookDirectory": "8F8858298670F04B0D754DDD47BAF18BCDDC13409AF229994F1550F7DCA70000",
      "BookNode": "0000000000000000",
      "Flags": 131072,
      "LedgerEntryType": "Offer",
      "OwnerNode": "0000000000000000",
      "PreviousTxnID": "FA09A55BB3DA539D72B12D3D359C51901F8467F9C97A113E4AAE54D7A546A507",
      "PreviousTxnLgrSeq": 4666,
      "Sequence": 17,
      "TakerGets": "4900000",
      "TakerPays": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "29.4"
      },
      "index": "01985A028B3C15B0CD5D0D5B60F2558043F56FFC4CA04B2177CBBFDF2215D22C"
    }, {
      "Flags": 0,
      "Indexes": ["5F400136752D1233FCD9812C4F10D2FCACCE4BCD3398C223F74CFAB010381DA5", "BE6436A2A7A04FCC55D92AAD60CF3E071B8F13C1D774E219750CFC03207C67DD", "C9FD121609956EB68CCDF0B4289C763685FB8A3FA9547817E97E92928D5E679F", "CE3C3F9D3C2889918CB3DCDF310F5B9FCA974BD60D6D5EEB0A3C3D3537CBE8E9", "80C47F489D3CA16E08921B1FE1B20A9A539E233647D82A24A5CAA93393187059", "9E86525727BC6E65DF438FBAF5A39DC30219C91D5AEBB7F70E9B9BDEC3C4BEDB", "F68A044A7A482962DDF6D960E8C573B95D016433550944DE2ED51E00F41A27E4", "290774398E42ABB509F49B87B29E5E02505C44437495B816B06BCB6DDEFAFC5B", "A1323B98B9F0813AF51F525B5C96D7A8179894DD9AD4E9810A5D6023BCD72B3F", "207649244430791157BD5F29CE9E5B5716D7B83DA9C99B8E5C756BCE430B6CF8", "BE6F90427EB2EC9131C8A571BA94200A3770C9D26C5403C8C1E19923F8CD02F9", "1FC56E10E6B5170A3EDE8AB39A201597EB0956F310FF0A0F32F4130FB708445A", "D0483C67C59FE5B1DF6E74A8B270556CDF991503A1F915EA64BB4A48AD872436", "69CC9CB2F2C658FB816B63C501E346EBAD252E15DFFE136A96882961C1356F61", "87424C87825150C9AE89E67CC751283DA7ABC6C74E3254E44DE414EB4CB416DF"],
      "LedgerEntryType": "DirectoryNode",
      "Owner": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "RootIndex": "1150F3BF4E6D62FAAD62B4D65887E58BA3607C7871238F49B84ED7A30C2EB49E",
      "index": "1150F3BF4E6D62FAAD62B4D65887E58BA3607C7871238F49B84ED7A30C2EB49E"
    }, {
      "Flags": 0,
      "Indexes": ["B84627D80CFDCF5C9721417038617F7A174E0081C69E402490A73AA5A5070CB4", "56D1739F8B693C93D3E4EC9788D1D6492ED5B841360F2DCC625A3EA47C04ABC9"],
      "LedgerEntryType": "DirectoryNode",
      "Owner": "vpyqxXzyoX62Bs6WRckYuUoVQjiGaBvCwB",
      "RootIndex": "1325AE6430D47924A0E9389AC91A7D1125B1AF64A0D729E790BD4BB6DDEFC072",
      "index": "1325AE6430D47924A0E9389AC91A7D1125B1AF64A0D729E790BD4BB6DDEFC072"
    }, {
      "Account": "vP3AYvkqCZTP3oh9b9zDzVqgf9odzhFCcC",
      "BookDirectory": "AFE8D4AF92CB0CBD5051A499BA555711BA23DFD44FACDE675B038D7EA4C68000",
      "BookNode": "0000000000000000",
      "Flags": 0,
      "LedgerEntryType": "Offer",
      "OwnerNode": "0000000000000000",
      "PreviousTxnID": "97674188B06F3ED44BA2F34180E0B538579504647796E00D8DD5F865D85F0EBB",
      "PreviousTxnLgrSeq": 328,
      "Sequence": 6,
      "TakerGets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "10"
      },
      "TakerPays": "10000000",
      "index": "159769461D9A3B758F9315780270886EA863E21F3677997F319EB58E1F71174A"
    }],
    "validated": true
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
ledger_index Unsigned Integer 此分类帐的序号
ledger_hash String 唯一标识整个分类帐的散列
state Array 包含树中数据的JSON对象数组,如下所定义
marker (Not Specified) 指示响应的服务器定义的值是分页的。将此传递给下一个调用以恢复此调用停止的位置

state数组中每个对象的格式取决于binary请求中是否设置为true或不是。每个state对象可能包含以下字段:

Field Type Description
data String (只包括如果"binary":true)所需数据的十六进制表示
LedgerEntryType String (仅包含if "binary":false)指示此对象代表什么类型的分类帐对象的字符串。请参阅总账格式的完整列表。
(Additional fields) (Various) (仅包含if "binary":false)描述此对象的其他字段,取决于它是哪个LedgerEntryType。
index String 此分类帐条目的唯一标识符,如十六进制。

可能的错误:

  • 任何通用错误类型
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。

5.5.ledger_entry #

ledger_entry方法以原始格式从STM分类帐返回单个分类帐对象。请参阅分类帐格式了解有关可检索的不同类型对象的信息。

注意:此方法没有命令行版本。您可以使用该json命令从命令行访问此方法。

请求格式的示例:

{
  "id": 3,
  "command": "ledger_entry",
  "type": "account_root",
  "account_root": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "ledger_index": "validated"
}
{
    "method": "ledger_entry",
    "params": [
        {
            "account_root": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "ledger_index": "validated",
            "type": "account_root"
        }
    ]
}

该方法可以检索几种不同类型的数据。您可以通过传递适当的参数来选择要检索哪种类型的项目。具体而言,您应该提供以下其中一个字段:

  1. index – 通过其唯一ID检索任何类型的分类帐对象
  2. account_root– 检索AccountRoot对象。这大致相当于account_info命令。
  3. directory– 检索包含其他分类账对象列表的DirectoryNode
  4. offer– 检索要约对象,该对象定义了兑换货币的要约
  5. stream_state– 检索StreamState对象,该对象跟踪两个帐户之间的(非STM)货币余额。

如果您指定了多个上述项目,则服务器仅检索它们; 它选择的是未定义的。

该方法识别的参数完整列表如下:

Field Type Description
index String (可选)指定要检索的单个分类帐条目的唯一标识符。
account_root String – Address (可选)指定要检索的AccountRoot对象。
directory Object or String (可选)指定一个DirectoryNode。(DirectoryNode对象每个都包含它们包含的事物的ID列表。)如果是字符串,则以十六进制解释为目录的唯一索引。如果一个对象需要其中一个dir_root或者owner作为一个子字段,还可以选择一个sub_index子字段。
directory.sub_index Unsigned Integer (可选)如果提供,跳到更高的“页面” 目录。
directory.dir_root String (如果directory指定为对象并且directory.owner未提供,则是必需的)以十六进制字符串标识要检索的目录的唯一索引。
directory.owner String (如果directory指定为对象directory.dir_root且未提供,则为必需)与此目录关联的帐户的唯一地址
offer Object or String (可选)指定要检索的Offer对象。如果是字符串,则解释为要约的唯一索引。如果某个对象需要子字段accountseq唯一标识该提议。
offer.account String – Address (如果offer指定,则为必填项)提交报价的帐户。
offer.seq Unsigned Integer (如果offer指定,则为必需)创建Offer对象的事务的序列号。
stream_state Object (可选)指定要检索的StreamState(信任线)对象的对象。必须accountscurrency子字段唯一地指定要检索的StreamState条目。
stream_state.accounts Array (如果stream_state指定,则为必需)帐户地址的2长度数组,定义由此StreamState对象链接的两个帐户
stream_state.currency String (如果stream_state指定,则为必需)要检索的StreamState对象的货币代码。
binary Boolean (可选)如果为true,则以十六进制字符串形式返回请求的分类帐对象的内容。否则,以JSON格式返回数据。缺省是true如果搜索indexfalse否则。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)

generatorledger参数已过时,可能在没有进一步的通知下被移除。

一个成功回应的例子:

{
  "id": 3,
  "result": {
    "index": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037",
    "ledger_index": 156275,
    "node": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Balance": "99999986731672268",
      "Flags": 0,
      "LedgerEntryType": "AccountRoot",
      "OwnerCount": 13,
      "PreviousTxnID": "8D262E7AFD3E498C924EBA62F901FB4867C1CF04BD7248C8E894EDDD6320A376",
      "PreviousTxnLgrSeq": 156245,
      "Sequence": 308,
      "index": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037"
    },
    "validated": true
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "index": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037",
    "ledger_index": 156275,
    "node": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Balance": "99999986731672268",
      "Flags": 0,
      "LedgerEntryType": "AccountRoot",
      "OwnerCount": 13,
      "PreviousTxnID": "8D262E7AFD3E498C924EBA62F901FB4867C1CF04BD7248C8E894EDDD6320A376",
      "PreviousTxnLgrSeq": 156245,
      "Sequence": 308,
      "index": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037"
    },
    "validated": true
  },
  "status": "success",
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
index String 此ledger_entry的唯一标识键
ledger_index Unsigned Integer 从中检索此数据的分类帐的唯一序号
node Object (如果"binary": true指定,则省略)包含此分类帐对象数据的对象,根据分类帐格式。
node_binary String (除非"binary":true指定,省略)分类帐对象的二进制数据,如十六进制。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。

5.6.ledger_request #

ledger_request命令告诉服务器从其连接的对等方获取特定分类账版本。这只有在服务器的一个立即连接的同行拥有该分类账时才有效。您可能需要多次运行该命令才能完全获取分类帐。

ledger_request请求是一个不能由非特权用户运行的管理命令!

请求格式的示例:

{
    "id": 102,
    "command": "ledger_request",
    "ledger_index": 13800000
}
streamd ledger_request 13800000

该请求包含以下参数:

Field Type Description
ledger_index Number (可选)通过其分类帐索引检索指定的分类帐。
ledger_hash String (可选)通过其标识哈希检索指定的分类帐。

您必须提供ledger_index或者ledger_hash但不是同时。

响应遵循标准格式。但是,如果请求没有指定的分类帐,即使成功地指示streamd服务器开始检索分类帐,该请求也会返回失败响应。

注意:要检索分类帐,Stream服务器必须与其历史记录中的分类帐具有直接对等关系。如果没有对等方拥有请求的分类帐,则可以使用connect命令或fixed_ips配置文件的部分将Stream的完整历史记录服务器添加到s1.labs.stream,然后ledger_request再次发出请求。

失败响应表示获取分类帐的状态。成功的响应包含与ledger命令类似格式的分类帐信息。

Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "acquiring" : {
         "hash" : "01DDD89B6605E20338B8EEB8EB2B0E0DD2F685A2B164F3790C4D634B5734CC26",
         "have_header" : false,
         "peers" : 2,
         "timeouts" : 0
      },
      "error" : "lgrNotFound",
      "error_code" : 20,
      "error_message" : "acquiring ledger containing requested index",
      "request" : {
         "command" : "ledger_request",
         "ledger_index" : 18851277
      },
      "status" : "error"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "hash" : "EB68B5B4F6F06BF59B6D7532BCB98BB98E2F10C2435D895217AA0AA7E910FBD5",
      "have_header" : true,
      "have_state" : false,
      "have_transactions" : false,
      "needed_state_hashes" : [
         "C46F7B9E795135447AF24BAF999AB8FC1612A997F6EAAF8B784C226FF0BD8E25",
         "E48F528E4FC2A1DC492C6264B27B420E2285B2A3ECF3A253DB480DA5BFB7F858",
         "B62CD0B2E1277F78BC279FA037F3F747587299B60D23A551C3F63DD137DC0CF8",
         "30014C55701FB8426E496A47B297BEC9E8F5BFA47763CC22DBD9024CC81D39DD",
         "7EB59A853913898FCEA7B701637F33B1054BD36C32A0B910B612EFB9CDFF6334",
         "07ECAD3066D62583883979A2FADAADC8F7D89FA07375843C8A47452639AB2421",
         "97A87E5246AF78463485CB27E08D561E22AAF33D5E2F08FE2FACAE0D05CB5478",
         "50A0525E238629B32324C9F59B4ECBEFE3C21DC726DB9AB3B6758BD1838DFF68",
         "8C541B1ED47C9282E2A28F0B7F3DDFADF06644CAB71B15A3E67D04C5FAFE9BF4",
         "2C6CC536C778D8C0F601E35DA7DD9888C288897E4F603E76357CE2F47E8A7A9F",
         "309E78DEC67D5725476A59E114850556CC693FB6D92092997ADE97E3EFF473CC",
         "8EFF61B6A636AF6B4314CAC0C08F4FED0759E1F782178A822EDE98275E5E4B10",
         "9535645E5D249AC0B6126005B79BB981CBA00286E00154D20A3BCF65743EA3CA",
         "69F5D6FCB41D1E6CEA5ADD42CBD194086B45E957D497DF7AEE62ADAD485660CE",
         "07E93A95DBB0B8A00925DE0DF6D27E41CACC77EF75055A89815006109D82EAD3",
         "7FDF25F660235DCAD649676E3E6729DF920A9B0B4B6A3B090A3C64D7BDE2FB20"
      ],
      "needed_transaction_hashes" : [
         "BA914854F2F5EDFCBD6E3E0B168E5D4CD0FC92927BEE408C6BD38D4F52505A34",
         "AE3A2DB537B01EB33BB3A677242DE52C9AE0A64BD9222EE55E52855276E7EA2A",
         "E145F737B255D93769673CBA6DEBA4F6AC7387A309DAACC72EA5B07ECF03C215",
         "073A118552AA60E1D3C6BE6F65E4AFA01C582D9C41CCC2887244C19D9BFA7741",
         "562DB8580CD3FE19AF5CEA61C2858C10091151B924DBF2AEB7CBB8722E683204",
         "437C0D1C2391057079E9539CF028823D29E6437A965284F6E54CEBF1D25C5D56",
         "1F069486AF5533883609E5C8DB907E97273D9A782DF26F5E5811F1C42ED63A3D",
         "CAA6B7DA68EBA71254C218C81A9EA029A179694BDD0D75A49FB03A7D57BCEE49"
      ],
      "peers" : 6,
      "status" : "success",
      "timeouts" : 1
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "ledger" : {
         "accepted" : true,
         "account_hash" : "84EBB27D9510AD5B9A3A328201921B3FD418D4A349E85D3DC69E33C7B506407F",
         "close_time" : 486691300,
         "close_time_human" : "2015-Jun-04 00:01:40",
         "close_time_resolution" : 10,
         "closed" : true,
         "hash" : "DCF5D723ECEE1EF56D2B0024CD9BDFF2D8E3DC211BD2B9460165922564ACD863",
         "ledger_hash" : "DCF5D723ECEE1EF56D2B0024CD9BDFF2D8E3DC211BD2B9460165922564ACD863",
         "ledger_index" : "13840000",
         "parent_hash" : "8A3F6FBC62C11DE4538D969F9C7966234635FE6CEB1133DDC37220978F8100A9",
         "seqNum" : "13840000",
         "totalCoins" : "99999022883526403",
         "total_coins" : "99999022883526403",
         "transaction_hash" : "3D759EF3AF1AE2F78716A8CCB2460C3030F82687E54206E883703372B9E1770C"
      },
      "ledger_index" : 13840000,
      "status" : "success"
   }
}

三种可能的响应格式如下:

  1. 当返回一个lgrNotFound错误时,响应有一个字段,acquiring一个Ledger请求对象指示从对等网络获取分类帐的进度。
  2. 当响应显示服务器当前正在提取分类帐时,结果的主体是一个分类帐请求对象,指示从对等网络获取分类账的进度。
  3. 当分类账完全可用时,回应是分类账抬头的表示。

请求对象:

当服务器处于提取分类帐的过程中,但尚未完成时,streamd服务器将返回一个分类帐请求对象,指示其获取分类帐的进度。该对象具有以下字段:

Field Type Description
hash String (可以省略)请求分类帐的散列,如果服务器知道它的话。
have_header Boolean 服务器是否具有请求分类帐的标题部分。
have_state Boolean (可以省略)服务器是否具有请求分类账的账户状态部分。
have_transactions Boolean (可以省略)服务器是否具有请求分类账的交易部分。
needed_state_hashes Array of Strings (可能省略)状态树中最多有16个哈希对象,服务器仍然需要检索。
needed_transaction_hashes Array of Strings (可能会被省略)事务树中最多有16个对象散列,服务器仍然需要检索。
peers Number 服务器查询多少个节点来查找此分类帐。
timeouts Number 取得此分类帐的次数目前已超时。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。如果您指定等于或高于当前正在处理的分类帐的分类帐索引,也会发生此错误。
  • lgrNotFound – 如果分类帐尚未提供。这表明服务器已经开始提取分类账,尽管如果没有连接的对等方拥有请求的分类帐,它可能会失败。(以前,这个错误使用了代码ledgerNotFound。)

5.7.ledger_accept #

该ledger_accept方法强制服务器关闭当前工作分类帐并转到下一个分类帐号。此方法仅用于测试目的,并且仅在streamd服务器运行独立模式时可用。

该ledger_accept方法是不能由非特权用户运行的管理员命令!

请求格式的示例:

{
   "id": "Accept my ledger!",
   "command": "ledger_accept"
}
#Syntax: ledger_accept
streamd ledger_accept

该请求不接受任何参数。

一个成功回应的例子:

{
  "id": "Accept my ledger!",
  "status": "success",
  "type": "response",
  "result": {
    "ledger_current_index": 6643240
  }
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
ledger_current_index Unsigned Integer 新创建的“当前”分类账的序号

 

注意:关闭分类帐时,streamd确定该分类帐中交易的规范顺序并重播它们。这可以改变临时应用于当前分类帐的交易的结果。

可能的错误:

  • 任何通用错误类型。
  • notStandAlone– 如果streamd服务器当前不在独立模式下运行。

6.交易管理 #

事务是唯一可以修改STM分类帐的共享状态的事务。StreamLedger上的所有业务都采用交易形式,其中不仅包括付款,还包括货币兑换优惠,账户设置以及对账本本身属性的更改(如采用新功能)。

交易中有几个复杂的来源。与传统银行业务不同的是,受信任的第三方(银行或ACH)验证参与者的身份并确保他们的余额得到精确调整,Stream使用密码学和分散计算能力来执行相同的操作。发送STM不需要分布式网络本身以外的第三方。但是,Stream账户还支持以任何货币发行余额并在分散交易所进行交易。这带来了更多的权力,但这也意味着系统必须考虑到交易对手的风险货币转换和其他问题。STM分类账必须十分健壮,才能跟踪哪些交易已被完全验证,即使受到硬件故障,攻击或自然灾害的影响。

6.1.tx #

tx方法检索单个事务的信息。

请求格式的示例:

{
  "id": 1,
  "command": "tx",
  "transaction": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
  "binary": false
}
{
    "method": "tx",
    "params": [
        {
            "transaction": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
            "binary": false
        }
    ]
}
#Syntax: tx transaction [binary]
streamd tx 17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D false

该请求包含以下参数:

Field Type Description
transaction String 交易的256位散列,十六进制表示。
binary Boolean (可选,默认为false)如果为true,则将事务数据和元数据作为十六进制字符串而不是JSON返回

一个成功回应的例子:

{
  "id": 1,
  "result": {
    "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
    "Amount": "1000000",
    "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "Fee": "12",
    "Flags": 2147483648,
    "LastLedgerSequence": 155520,
    "Memos": [{
      "Memo": {
        "MemoData": "68616861",
        "MemoType": "6D656D6F"
      }
    }],
    "Sequence": 77,
    "SigningPubKey": "021ADD58CB32BFD8F3F24A027081CE3928CEE072E85692123DE4DF92EFCF2CE2BC",
    "TransactionType": "Payment",
    "TxnSignature": "304402200C8B73E45DD5C43D6C10ECF26BE1D0212BA121BC0EB090441B09AE21FAD2F17C02206143819F8B15F4C8C83A4735E56E971E7465A76C2116443092E8E7179B4A7AFD",
    "date": 575694990,
    "hash": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
    "inLedger": 155512,
    "ledger_index": 155512,
    "meta": {
      "AffectedNodes": [{
        "ModifiedNode": {
          "FinalFields": {
            "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
            "Balance": "21492361",
            "Flags": 8388608,
            "OwnerCount": 14,
            "Sequence": 78
          },
          "LedgerEntryType": "AccountRoot",
          "LedgerIndex": "ADEFE0B5A676E5431444ADA797634C65B963A00B9B79DBFA4821DA786DD6C8B4",
          "PreviousFields": {
            "Balance": "22492373",
            "Sequence": 77
          },
          "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
          "PreviousTxnLgrSeq": 153524
        }
      }, {
        "ModifiedNode": {
          "FinalFields": {
            "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "Balance": "99999986730672448",
            "Flags": 0,
            "OwnerCount": 15,
            "Sequence": 293
          },
          "LedgerEntryType": "AccountRoot",
          "LedgerIndex": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037",
          "PreviousFields": {
            "Balance": "99999986729672448"
          },
          "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
          "PreviousTxnLgrSeq": 153524
        }
      }],
      "TransactionIndex": 0,
      "TransactionResult": "tesSUCCESS",
      "delivered_amount": "1000000"
    },
    "validated": true
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含Transaction对象的字段以及以下附加字段:

Field Type Description
hash String 交易的SHA-512散列
inLedger Unsigned Integer (已弃用)别名ledger_index
ledger_index Unsigned Integer 包含此交易的分类帐的序号。
meta Object 关于交易的各种元数据。
validated Boolean 如果此数据来自经过验证的分类账版本,则为真; 如果省略或设置为false,则此数据不是最终的。
(Various) (Various) Transaction对象的其他字段

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • txnNotFound– 交易不存在,或者它是旧版账本的一部分,streamd没有可用的。

6.2.transaction_entry #

该transaction_entry方法从特定分类帐版本检索单个事务的信息。(tx相比之下,该命令将搜索指定事务的所有分类帐,我们建议使用该方法。)

请求格式的示例:

{
  "id": 4,
  "command": "transaction_entry",
  "tx_hash": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
  "ledger_index": 155512
}
{
    "method": "transaction_entry",
    "params": [
        {
            "tx_hash": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
            "ledger_index": 155512
        }
    ]
}
#Syntax: transaction_entry transaction_hash ledger_index|ledger_hash
streamd transaction_entry 17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D 155512

该请求包含以下参数:

Field Type Description
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)
tx_hash String 您正在查找的交易的唯一散列

 

注意:此方法不支持从当前正在进行的分类账中检索信息。您必须在ledger_indexledger_hash中指定一个分类帐版本。

一个成功回应的例子:

{
  "id": 4,
  "result": {
    "ledger_index": 155512,
    "metadata": {
      "AffectedNodes": [{
        "ModifiedNode": {
          "FinalFields": {
            "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
            "Balance": "21492361",
            "Flags": 8388608,
            "OwnerCount": 14,
            "Sequence": 78
          },
          "LedgerEntryType": "AccountRoot",
          "LedgerIndex": "ADEFE0B5A676E5431444ADA797634C65B963A00B9B79DBFA4821DA786DD6C8B4",
          "PreviousFields": {
            "Balance": "22492373",
            "Sequence": 77
          },
          "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
          "PreviousTxnLgrSeq": 153524
        }
      }, {
        "ModifiedNode": {
          "FinalFields": {
            "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "Balance": "99999986730672448",
            "Flags": 0,
            "OwnerCount": 15,
            "Sequence": 293
          },
          "LedgerEntryType": "AccountRoot",
          "LedgerIndex": "C2FA6D77327E553B9D611CA7BE4CC0CB33817EE23919EC09C48D10E4C5653037",
          "PreviousFields": {
            "Balance": "99999986729672448"
          },
          "PreviousTxnID": "BEE1FD0E440416A4CFD29663ADB2BAB5356CBE3FE2AF7659C69B4153612BBD52",
          "PreviousTxnLgrSeq": 153524
        }
      }],
      "TransactionIndex": 0,
      "TransactionResult": "tesSUCCESS"
    },
    "tx_json": {
      "Account": "vfq4sckDNcNcyfrDQed6FBqqDfEgTgsjtJ",
      "Amount": "1000000",
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "12",
      "Flags": 2147483648,
      "LastLedgerSequence": 155520,
      "Memos": [{
        "Memo": {
          "MemoData": "68616861",
          "MemoType": "6D656D6F"
        }
      }],
      "Sequence": 77,
      "SigningPubKey": "021ADD58CB32BFD8F3F24A027081CE3928CEE072E85692123DE4DF92EFCF2CE2BC",
      "TransactionType": "Payment",
      "TxnSignature": "304402200C8B73E45DD5C43D6C10ECF26BE1D0212BA121BC0EB090441B09AE21FAD2F17C02206143819F8B15F4C8C83A4735E56E971E7465A76C2116443092E8E7179B4A7AFD",
      "hash": "17CF128117A275D1E0F0638CE38DADD7DE4F978818F1E950C89CA5C62620E27D",
      "inLedger": 155512,
      "ledger_index": 155512
    },
    "validated": false
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
ledger_index Unsigned Integer 在该交易中找到的分类账版本的序列号; 这与请求中的一样。
ledger_hash String (可能被省略)发现该交易的分类帐版本的唯一散列; 这与请求中的一样。
metadata Object 关于交易的各种元数据。
tx_json Object Transaction对象的 JSON表示

服务器可能无法找到交易有几个可能的原因:

  • 交易不存在
  • 该交易存在,但不在指定的分类帐版本中
  • 服务器没有可用的指定分类帐版本。另一台拥有正确版本的服务器可能会有不同的响应。

可能的错误:

  • 任何通用错误类型。
  • fieldNotFoundTransaction– tx_hash请求中忽略了该字段
  • notYetImplemented – 请求中未指定分类帐版本。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。
  • transactionNotFound – 在指定的分类帐中找不到请求中指定的交易。(它可能在不同的分类帐版本中,或根本不可用。)

6.3.tx_history #

tx_history方法检索一些最近进行的交易。

警告:此方法已弃用,可能会被删除,恕不另行通知。

请求格式的示例:

{
  "id": 5,
  "command": "tx_history",
  "start": 0
}
{
    "method": "tx_history",
    "params": [
        {
            "start": 0
        }
    ]
}
#Syntax: tx_history [start]
streamd tx_history 0

该请求包含以下参数:

Field 类型 描述
start Unsigned Integer 要跳过的交易数量。

一个成功回应的例子:

{
  "id": 5,
  "result": {
    "index": 11,
    "txs": [{
      "Account": "vpiwZth4cjYpQzpUjHUiEbjiGkgexjU9v3",
      "Fee": "12",
      "Flags": 2148007936,
      "LastLedgerSequence": 156205,
      "Sequence": 10,
      "SigningPubKey": "037BC8FBA834E60F92B2E084DD8937E871AEFFA63255EA12ED827C302C9E0217CB",
      "TakerGets": "1000000",
      "TakerPays": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1"
      },
      "TransactionType": "OfferCreate",
      "TxnSignature": "3045022100ED2C80534AB54D708D48C8E3CC51993159968B54E1AFB97AB4B8C9C07750A7300220449150763E9859B96A7C63D3CBF09FC944AE9E7C812476150B4ECB01023C4843",
      "hash": "861E6F41746B753DAA4ED2D4AE11F967D6FB2F0097F86E8F22845B5BCE9F21CC",
      "inLedger": 156197,
      "ledger_index": 156197
    }, {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "CNY",
        "issuer": "vpiwZth4cjYpQzpUjHUiEbjiGkgexjU9v3",
        "value": "1000"
      },
      "Destination": "vpiwZth4cjYpQzpUjHUiEbjiGkgexjU9v3",
      "Fee": "12",
      "Flags": 2147483648,
      "LastLedgerSequence": 156197,
      "SendMax": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1010"
      },
      "Sequence": 300,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "3045022100EF5BFE996389995EAD9BC6818BF1AA6364123F937E1167269CDEE73908683FD0022025A3E7EE9AE2C7FEFFAFC779914E9A53F84FDF29B8D1C27A28871CE335BA42E0",
      "hash": "ADB6082D69DBFCBB062177EBFEECB5A63F637427301C5ADE12B133961FE46F86",
      "inLedger": 156194,
      "ledger_index": 156194
    }]
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "index": 11,
    "txs": [{
      "Account": "vpiwZth4cjYpQzpUjHUiEbjiGkgexjU9v3",
      "Fee": "12",
      "Flags": 2148007936,
      "LastLedgerSequence": 156205,
      "Sequence": 10,
      "SigningPubKey": "037BC8FBA834E60F92B2E084DD8937E871AEFFA63255EA12ED827C302C9E0217CB",
      "TakerGets": "1000000",
      "TakerPays": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1"
      },
      "TransactionType": "OfferCreate",
      "TxnSignature": "3045022100ED2C80534AB54D708D48C8E3CC51993159968B54E1AFB97AB4B8C9C07750A7300220449150763E9859B96A7C63D3CBF09FC944AE9E7C812476150B4ECB01023C4843",
      "hash": "861E6F41746B753DAA4ED2D4AE11F967D6FB2F0097F86E8F22845B5BCE9F21CC",
      "inLedger": 156197,
      "ledger_index": 156197
    }, {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "CNY",
        "issuer": "vpiwZth4cjYpQzpUjHUiEbjiGkgexjU9v3",
        "value": "1000"
      },
      "Destination": "vpiwZth4cjYpQzpUjHUiEbjiGkgexjU9v3",
      "Fee": "12",
      "Flags": 2147483648,
      "LastLedgerSequence": 156197,
      "SendMax": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1010"
      },
      "Sequence": 300,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "3045022100EF5BFE996389995EAD9BC6818BF1AA6364123F937E1167269CDEE73908683FD0022025A3E7EE9AE2C7FEFFAFC779914E9A53F84FDF29B8D1C27A28871CE335BA42E0",
      "hash": "ADB6082D69DBFCBB062177EBFEECB5A63F637427301C5ADE12B133961FE46F86",
      "inLedger": 156194,
      "ledger_index": 156194
    }]
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
index Unsigned Integer start请求中使用的值。
txs Array 事务对象数组。

根据交易类型,每个交易对象中包含的字段略有不同。详情请参阅交易格式。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • noPermission– start指定的字段大于10000,但您没有以管理员身份连接到服务器。

6.4.path_find #

仅限WebSocket API!path_find方法搜索可能进行交易的路径,并在路径随时间变化时定期发送更新。对于在STM中严格执行的付款,没有必要找到路径,因为STM可以直接发送到任何账户。

有三种不同的path_find命令的模式或子命令。用subcommand参数指定你想要的一个:

  • create – 开始发送寻路信息
  • close – 停止发送寻路信息
  • status – 获取当前打开的寻路请求的信息

尽管streamd服务器试图找到最便宜的路径或用于付款的路径组合,但不能保证此方法返回的路径实际上是最佳路径。由于服务器负载,寻路可能无法找到最佳结果。此外,您应该小心来自不受信任的服务器的寻路结果。服务器可以被修改为返回比最佳路径更少的运营商收入。如果您没有自己可以信任的服务器,那么您应该比较来自不同方运行的多个服务器的寻路结果,以最大限度地降低单个服务器返回不良结果的风险。(注意:返回低于最优结果的服务器不一定是恶意行为的证据; 它也可能是服务器负载过重的症状。)

6.4.1.path_find创建 #

create子命令path_find会创建一个持续请求,以查找可从一个指定帐户进行支付交易的可能路径,以便另一个帐户接收所需数量的某种货币。初始响应包含两个地址之间建议的路径,这会导致收到所需的数量。之后,服务器将发送附加消息"type": "path_find",并更新潜在路径。更新的频率取决于服务器的判断,但通常意味着当有新的分类账版本时,每隔几秒就会有一次更新。

客户端一次只能打开一个寻路请求。如果另一个寻路请求已经在同一连接上打开,则旧请求会自动关闭并替换为新请求。

请求格式的示例:

{
    "id": 8,
    "command": "path_find",
    "subcommand": "create",
    "source_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "destination_amount": {
        "value": "0.001",
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
    }
}

该请求包含以下参数:

Field Type Description
subcommand String 使用"create"发送创建命令
source_account String 从中找到路径的帐户的唯一地址。(换句话说,将发送付款的帐户。)
destination_account String 帐户的唯一地址以查找路径。(换句话说,将收到付款的帐户。)
destination_amount String or Object 目标帐户在交易中收到的货币金额。特殊情况: 您可以指定"-1"(对于STM)或提供-1作为该value字段的内容(对于非STM货币)。这要求尽可能多的交付路径,同时花费不超过send_max(如果提供)指定的金额。
send_max String or Object (可选) 将在交易中花费的货币金额。不兼容source_currencies
paths Array (可选)表示要检查的付款路径的对象数组数组。您可以使用它来随时更新您已知的特定路径的更改,或检查沿特定路径进行支付的总体成本。

服务器还识别下列字段,但不能保证使用它们的结果:source_currenciesbridges。这些字段应被视为保留供将来使用。

一个成功回应的例子:

{
  "alternatives": [],
  "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "destination_amount": {
    "currency": "USD",
    "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "value": "0.001"
  },
  "id": 8,
  "source_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "type": "path_find"
}

最初的响应遵循标准格式,成功的结果包含以下字段:

Field Type Description
alternatives Array 具有建议路径的对象数组,如下所述。如果为空,则找不到连接源帐户和目标帐户的路径。
destination_account String 将接收交易的帐户的唯一地址
destination_amount String or Object 目标在交易中收到的货币金额
id (Various) (仅限WebSocket)WebSocket请求中提供的ID再次包含在此级别。
source_account String 将发送交易的唯一地址
full_reply Boolean 如果false,这是不完整搜索的结果。以后的答复可能有更好的路径。如果true,那么这是找到的最佳路径。(理论上可能存在更好的路径,但streamd不会找到它。)在关闭寻路请求之前,streamd每当新分类账关闭时继续发送更新。

alternatives数组中的每个元素都是一个对象,表示从一种可能的源货币(由初始帐户持有)到目标帐户和货币的路径。该对象具有以下字段:

Field Type Description
paths_computed Array 定义支付路径的对象数组数组
source_amount String or Object 货币金额,源必须沿着此路径发送,以便目的地接收所需金额

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • noEvents – 您正在使用不支持异步回调的协议,例如JSON-RPC。
异步跟进

除了初始响应之外,服务器还会以类似的格式发送更多消息,以随时更新支付路径的状态。这些消息包括id最初的WebSocket请求,因此您可以知道哪些请求会提示他们,并且"type": "path_find"顶层的字段表明他们是额外的响应。其他字段的定义方式与初始响应相同。

如果后续工作包括"full_reply": true,那么这是streamd当前账本的最佳路径。

以下是一个来自path_find创建请求的异步后续示例:

{
    "id": 1,
    "type": "path_find",
    "alternatives": [
        /* paths omitted from this example; same format as the initial response */
    ],
    "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "destination_amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "0.001"
    },
    "source_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
}

6.4.2.path_find关闭 #

path_find子命令close指示服务器停止发送有关当前打开的寻路请求的信息。

请求格式的示例:

{
  "id": 57,
  "command": "path_find",
  "subcommand": "close"
}

该请求包含以下参数:

Field 类型 描述
subcommand String 使用"close"发送关闭子命令

如果寻路请求成功关闭,则响应采用与初始响应相同的格式path_find create,并加上以下字段:

Field 类型 描述
closed Boolean 该值true表示该回复是对path_find close命令的回应。

如果没有出色的寻路请求,则返回错误。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 如果任何字段指定不正确,或缺少任何必填字段。
  • noEvents – 如果您尝试在不支持异步回调的协议上使用此方法,例如JSON-RPC。
  • noPathRequest – 当没有打开请求时,您尝试关闭寻路请求。

6.4.3.path_find状态 #

请求立即更新客户端当前打开的寻路请求的path_find子命令status

请求格式的示例:

{
  "id": 58,
  "command": "path_find",
  "subcommand": "status"
}

该请求包含以下参数:

Field 类型 描述
subcommand String 使用"status"发送状态

如果寻路请求打开,则响应采用与初始响应相同的格式path_find create,并加上以下字段:

Field 类型 描述
status Boolean 该值true表示该回复是对path_find status命令的回应。

如果没有出色的寻路请求,则返回错误。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • noEvents – 您正在使用不支持异步回调的协议,例如JSON-RPC。
  • noPathRequest – 您尝试在没有打开请求时检查寻路请求的状态。

6.5.vstream_path_find #

vstream_path_find方法是path_find的一个简化版本,可以立即使用以及提供支付路径单一响应。它可以在WebSocket和JSON-RPC API中使用。然而,随着时间的推移,结果往往会过时。不要让多个调用保持更新,您应该尽可能地使用path_find

尽管streamd服务器试图找到最便宜的路径或用于付款的路径组合,但不能保证此方法返回的路径实际上是最佳路径。

警告:小心不受信任的服务器的路径查找结果。服务器可以被修改为返回比最佳路径更少的运营商收入。服务器在重负载时也可能返回不良结果。如果您没有自己可以信任的服务器,那么您应该比较来自不同方运行的多个服务器的寻路结果,以最大限度地降低单个服务器返回不良结果的风险。

请求格式的示例:

 

{
    "id": 8,
    "command": "vstream_path_find",
    "source_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "source_currencies": [
        {
            "currency": "STM"
        },
        {
            "currency": "USD"
        }
    ],
    "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "destination_amount": {
        "value": "0.001",
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
    }
}
{
    "method": "vstream_path_find",
    "params": [
        {
            "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "destination_amount": {
                "currency": "USD",
                "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                "value": "0.001"
            },
            "source_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "source_currencies": [
                {
                    "currency": "STM"
                },
                {
                    "currency": "USD"
                }
            ]
        }
    ]
}
#Syntax vstream_path_find json ledger_index|ledger_hash
streamd vstream_path_find '{"source_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "source_currencies": [ { "currency": "STM" }, { "currency": "USD" } ], "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "destination_amount": { "value": "0.001", "currency": "USD", "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV" } }'

该请求包含以下参数:

Field Type Description
source_account String 将在交易中发送资金的帐户的唯一地址
destination_account String 将在交易中获得资金的帐户的唯一地址
destination_amount String or Object 目标帐户在交易中收到的货币金额。特殊情况: 您可以指定"-1"(对于STM)或提供-1作为该value字段的内容(对于非STM货币)。这要求尽可能多的交付路径,同时花费不超过send_max(如果提供)指定的金额。
send_max String or Object (可选) 将在交易中花费的货币金额。不能用于source_currencies
source_currencies Array (可选)源帐户可能要花费的货币数组。数组中的每个条目应该是带有必填currency字段和可选issuer字段的JSON对象,例如指定货币金额的方式。不能包含超过18种来源货币。默认情况下,使用最多88种不同货币/发行商对可用的所有来源货币。
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)

一个成功回应的例子:

{
  "id": 8,
  "result": {
    "alternatives": [],
    "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "destination_currencies": ["ETH", "BTC", "CNY", "STM"]
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "alternatives": [],
    "destination_account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "destination_currencies": ["ETH", "BTC", "CNY", "STM"]
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
alternatives Array 具有可能路径的对象数组,如下所述。如果为空,则没有连接源帐户和目标帐户的路径。
destination_account String 将接收付款交易的帐户的唯一地址
destination_currencies Array 作为代表目标接受的货币的字符串数组,例如3个字母的代码"USD"或40个字符的十六进制等"015841551A748AD2C1F76FF6ECB0CCCD00000000"

alternatives数组中的每个元素都是一个对象,表示从一种可能的源货币(由初始帐户持有)到目标帐户和货币的路径。该对象具有以下字段:

Field Type Description
paths_computed Array 定义支付路径的对象数组数组
source_amount String or Object 货币金额,源必须沿着此路径发送,以便目的地接收所需金额

以下字段已弃用,可能会被忽略:paths_canonical,和paths_expanded。如果它们出现,你应该忽视它们。

可能的错误:

  • 任何通用错误类型。
  • tooBusy – 服务器负载过重,无法计算路径。如果您作为管理员连接,则不会返回。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • srcActMissing– source_account请求中忽略该字段。
  • srcActMalformed– source_account请求中的字段格式不正确。
  • dstActMissing– destination_account请求中忽略该字段。
  • dstActMalformed– destination_account请求中的字段格式不正确。
  • srcCurMalformed– 该source_currencies字段格式不正确。
  • srcIsrMalformed– issuer请求中一个或多个货币对象的字段无效。

6.6.sign #

sign方法采用JSON格式的交易和密钥,并返回交易的带符号二进制表示。结果总是不同,即使您提供相同的交易JSON和密钥。要为多签名交易贡献一个签名,请改用该sign_for命令。

警告:除非您streamd自己运行服务器,否则应该使用StreamAPI执行本地签名,而不是使用此命令。一个不可信任的服务器可能会在签名之前更改交易,或者使用您的密钥签署额外的任意交易,就好像它们来自您。

请求格式的示例:

{
  "id": 2,
  "command": "sign",
  "tx_json" : {
      "TransactionType" : "Payment",
      "Account" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Destination" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount" : {
         "currency" : "USD",
         "value" : "1",
         "issuer" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
      }
   },
   "secret" : "s████████████████████████████",
   "offline": false,
   "fee_mult_max": 1000
}
{
    "method": "sign",
    "params": [
        {
            "offline": false,
            "secret": "s████████████████████████████",
            "tx_json": {
                "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                "Amount": {
                    "currency": "USD",
                    "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                    "value": "1"
                },
                "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                "TransactionType": "Payment"
            },
            "fee_mult_max": 1000
        }
    ]
}
#Syntax: sign secret tx_json [offline]
streamd sign s████████████████████████████ '{"TransactionType": "Payment", "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "Amount": { "currency": "USD", "value": "1", "issuer" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV" }, "Sequence": 360, "Fee": "10000"}' offline

要签署交易,您必须提供可授权交易的密钥。您可以通过几种方式来完成此操作:

  • 提供一个secret值并忽略该key_type字段。该值可以格式化为base58种子,RFC-1751,十六进制或字符串密码。(仅限secp256k1键)
  • 提供一个key_type值和中只有一个seedseed_hexpassphrase。省略该secret字段。(不受命令行语法支持)。

该请求包含以下参数:

Field Type Description
tx_json Object JSON格式的交易定义
secret String (可选)提供交易的帐户的密钥,用于对其进行签名。不要将您的秘密发送给不受信任的服务器或通过不安全的网络连接。不能与使用key_typeseedseed_hex,或passphrase
seed String (可选)提供交易的帐户的密钥,用于对其进行签名。必须采用base58格式。如果提供,您还必须指定key_type。不能与使用secretseed_hexpassphrase
seed_hex String (可选)提供交易的帐户的密钥,用于对其进行签名。必须采用十六进制格式。如果提供,您还必须指定key_type。不能与使用secretseedpassphrase
passphrase String (可选)提供事务的帐户的密钥,用于对其进行签名,作为字符串密码。如果提供,您还必须指定key_type。不能与使用secretseedseed_hex
key_type String (可选)此请求中提供的加密密钥的类型。有效类型是secp256k1ed25519。默认为secp256k1。不能用于secret。小心: Ed25519支持是实验性的。
offline Boolean (可选,默认为false)如果为true,则在构建事务时,不要尝试自动填入或验证值。
build_path Boolean (可选)如果为付款类型的交易提供,则Paths在签名前自动填写该字段。警告:服务器查找是否存在此字段,而不是其值。此行为可能会更改。
fee_mult_max Integer (可选,默认值为10;建议值1000)限制自动提供的Fee字段的数量。rpcHIGH_FEE如果交易成本上的当前负荷乘数大于(fee_mult_max÷ fee_div_max),则签署失败并显示错误。如果您指定Fee交易字段(交易成本),则忽略。
fee_div_max Integer (可选,默认为1)rpcHIGH_FEE如果交易成本上的当前负荷乘数大于(fee_mult_max÷fee_div_max),则签署失败并显示错误。如果您指定Fee交易字段(交易成本),则忽略。

 

6.6.1.自动填充字段 #

如果您忽略它们,服务器将自动尝试自动填写tx_json(交易对象)中的某些字段。服务器在签名之前提供以下字段,除非请求指定offlinetrue

  • Sequence – 服务器自动使用发件人帐户信息中的下一个序列号。
  • 警告:在应用此事务之前,帐户的下一个序号不会递增。如果您在未提交并等待每个交易的响应的情况下签署多个交易,则必须在第一个交易之后手动为每笔交易提供正确的序列号。
  • Fee– 如果您省略Fee参数,则服务器会自动尝试填写适当的交易成本。在生产Stream分类帐中,rpcHIGH_FEE除非您提供适当的fee_mult_max值,否则将失败。
  • 根据应用于参考交易成本的负荷定标乘数,参数fee_mult_maxfee_div_max参数限制了自动提供的交易成本可以达到多高。如果自动提供的值使用大于10倍的乘数,则默认设置会返回错误。但是,生产Stream分类帐通常具有1000倍的负荷乘数。
  • 命令行语法不支持fee_mult_maxfee_div_max。对于生产Stream分类帐,您必须提供一个Fee值。
  • 注意:恶意服务器可以指定过高的交易成本,忽略了价值观fee_mult_maxfee_div_max
  • Paths– 对于付款类型的交易(不包括STM到STM的转账),路径字段可以自动填充。只有build_path提供时才填写。

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C67446304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA81148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8",
    "tx_json": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "1"
      },
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "10",
      "Flags": 2147483648,
      "Sequence": 313,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA",
      "hash": "BD8CD7F28FA90A1336CBB6AA364009096A5222EC639F7D912C04E32D8ED10DBD"
    }
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C67446304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA81148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8",
    "tx_json": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "1"
      },
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "10",
      "Flags": 2147483648,
      "Sequence": 313,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA",
      "hash": "BD8CD7F28FA90A1336CBB6AA364009096A5222EC639F7D912C04E32D8ED10DBD"
    }
  },
  "status": "success"
}
Loading: "/etc/rippled.cfg"
Connecting to 127.0.0.1:5005
{
  "result": {
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C67446304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA81148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8",
    "tx_json": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "1"
      },
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "10",
      "Flags": 2147483648,
      "Sequence": 313,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA",
      "hash": "BD8CD7F28FA90A1336CBB6AA364009096A5222EC639F7D912C04E32D8ED10DBD"
    }
  }
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
tx_blob String 完全合格的签名交易的二进制表示,如十六进制
tx_json Object 完整交易的 JSON规范为已签名的,包括自动填入的所有字段

 

警告:如果此命令导致错误消息,则消息可以包含请求中的密钥。确保这些错误对其他人不可见。

  • 不要将此错误写入可供多人查看的日志文件。
  • 不要将此错误粘贴到公共场所进行调试。
  • 不要在网站上显示错误信息,即使意外。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • highFee – 当前基于负荷的交易成本乘数超过了自动提供交易成本的限制。要么fee_mult_max在请求中指定更高的值(至少1000),要么在该Fee字段中手动提供值tx_json
  • tooBusy – 交易不包括路径,但服务器太忙而无法现在进行寻路。如果您作为管理员连接,则不会发生。
  • noPath – 交易不包括路径,并且服务器无法找到可以发生此付款的路径。

6.7.submit #

submit方法应用交易并将其发送到网络以进行确认并包含在未来的分类账中。

该命令有两种模式:

  • 仅提交模式将已签名的序列化事务作为二进制blob,并将其原样提交给网络。由于已签名的交易对象是不可变的,交易的任何部分都不能修改或在提交后自动填入。
  • 签署和提交模式采用JSON格式的Transaction对象,以与sign命令相同的方式完成并签署事务,然后提交已签名的事务。我们建议仅使用此模式进行测试和开发。

要尽可能强健地发送交易,您应该sign预先构建并将其保留下来,即使停电后您仍然可以访问submit它,然后将其作为一个tx_blob。提交后,使用该tx命令监视网络以查看交易是否已成功应用; 如果发生重启或其他问题,您可以安全地重新提交tx_blob事务:由于它与旧事务具有相同的序列号,因此它不会被应用两次。

6.7.1.仅提交模式 #

提交请求包含以下参数:

Field Type Description
tx_blob String 提交签名交易的十六进制表示。这可以是多签名的交易。
fail_hard Boolean (可选,默认为false)如果为true,并且事务在本地失败,请勿重试或将事务中继到其他服务器

请求格式:

{
    "id": 3,
    "command": "submit",
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C67446304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA81148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8"
}
{
    "method": "submit",
    "params": [
        {
            "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C67446304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA81148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8"
        }
    ]
}
#Syntax: submit tx_blob
submit 1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C67446304402200167648A76219C3E1C6BE70B932468156F20377FC5559E4295490DFEAC1F6A1B022023BB17B6A0F2198C074839204462FA97C8B93173F8780DF5229A351BDAACD2EA81148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8

 

6.7.2.签署和提交模式 #

此模式签署交易并立即提交。该模式旨在用于测试。您不能将此模式用于多重签名的交易。

您可以通过以下方式提供用于签署交易的密钥:

  • 提供一个secret值并忽略该key_type字段。该值可以格式化为base58种子,RFC-1751,十六进制或字符串密码。(仅限secp256k1键)
  • 提供一个key_type值和中只有一个seedseed_hexpassphrase。省略该secret字段。(不受命令行语法支持)。

该请求包含以下参数:

Field Type Description
tx_json Object JSON格式的事务定义,可选地省略任何可自动填充的字段。
secret String (可选)提供交易的帐户的密钥,用于对其进行签名。不要将您的秘密发送给不受信任的服务器或通过不安全的网络连接。不能与使用key_typeseedseed_hex,或passphrase
seed String (可选)提供交易的帐户的密钥,用于对其进行签名。必须采用base58格式。如果提供,您还必须指定key_type。不能与使用secretseed_hexpassphrase
seed_hex String (可选)提供交易的帐户的密钥,用于对其进行签名。必须采用十六进制格式。如果提供,您还必须指定key_type。不能与使用secretseedpassphrase
passphrase String (可选)提供事务的帐户的密钥,用于对其进行签名,作为字符串密码。如果提供,您还必须指定key_type。不能与使用secretseedseed_hex
key_type String (可选)此请求中提供的加密密钥的类型。有效类型是secp256k1ed25519。默认为secp256k1。不能用于secret。注意: Ed25519支持是实验性的。
fail_hard Boolean (可选,默认为false)如果为true,并且事务在本地失败,请勿重试或将事务中继到其他服务器
offline Boolean (可选,默认为false)如果为true,则在构建事务时,不要尝试自动填入或验证值。
build_path Boolean (可选)如果为付款类型的交易提供,则Paths在签名前自动填写该字段。如果事务是直接的STM到STM传输,则必须省略此字段。警告:服务器查找是否存在此字段,而不是其值。此行为可能会更改。
fee_mult_max Integer (可选,缺省值为10,建议值为1000)如果Fee省略此参数,则此字段会限制自动提供的Fee值,使其小于或等于长期基本交易成本乘以此值。
fee_div_max Integer (可选,默认为1)用于fee_mult_max为限制创建分数乘数。具体来说,服务器将其基本交易成本乘以fee_mult_max,然后除以该值(舍入为整数)以获得限制。如果自动提供的Fee值超出限制,则提交命令失败。

有关服务器如何自动填充特定字段的详细信息,请参阅sign命令。

请求格式的示例:

{
  "id": 2,
  "command": "submit",
  "tx_json" : {
      "TransactionType" : "Payment",
      "Account" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Destination" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount" : {
         "currency" : "USD",
         "value" : "1",
         "issuer" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
      }
   },
   "secret" : "s████████████████████████████",
   "offline": false,
   "fee_mult_max": 1000
}
{
    "method": "submit",
    "params": [
        {
            "offline": false,
            "secret": "s████████████████████████████",
            "tx_json": {
                "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                "Amount": {
                    "currency": "USD",
                    "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                    "value": "1"
                },
                "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
                "TransactionType": "Payment"
            },
            "fee_mult_max": 1000
        }
    ]
}
#Syntax: submit secret json [offline]
streamd submit s████████████████████████████ '{"Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "Amount": { "currency": "USD", "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "value": "1" }, "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", "TransactionType": "Payment", "Fee": "10000"}'

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "engine_result": "temREDUNDANT",
    "engine_result_code": -275,
    "engine_result_message": "Sends same currency to self.",
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C674473045022100E9DBF1323A39E65C5E6085CD12C49383059365A9F664466327742E0ACB975339022069CF3C84706C19419B31FD182816598BABE5410F72C3728AEA9B933C11660FF281148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8",
    "tx_json": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "1"
      },
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "10",
      "Flags": 2147483648,
      "Sequence": 313,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "3045022100E9DBF1323A39E65C5E6085CD12C49383059365A9F664466327742E0ACB975339022069CF3C84706C19419B31FD182816598BABE5410F72C3728AEA9B933C11660FF2",
      "hash": "A9F6F788C0576969648738CECA450FD8AC82CAF0CF32540A3D2F1C7A13CBF98E"
    }
  },
  "status": "success",
  "type": "response"
}
{
  "result": {
    "engine_result": "temREDUNDANT",
    "engine_result_code": -275,
    "engine_result_message": "Sends same currency to self.",
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C674473045022100E9DBF1323A39E65C5E6085CD12C49383059365A9F664466327742E0ACB975339022069CF3C84706C19419B31FD182816598BABE5410F72C3728AEA9B933C11660FF281148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8",
    "tx_json": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "1"
      },
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "10",
      "Flags": 2147483648,
      "Sequence": 313,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "3045022100E9DBF1323A39E65C5E6085CD12C49383059365A9F664466327742E0ACB975339022069CF3C84706C19419B31FD182816598BABE5410F72C3728AEA9B933C11660FF2",
      "hash": "A9F6F788C0576969648738CECA450FD8AC82CAF0CF32540A3D2F1C7A13CBF98E"
    }
  }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
  "result": {
    "engine_result": "temREDUNDANT",
    "engine_result_code": -275,
    "engine_result_message": "Sends same currency to self.",
    "tx_blob": "1200002280000000240000013961D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A73210338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C674473045022100E9DBF1323A39E65C5E6085CD12C49383059365A9F664466327742E0ACB975339022069CF3C84706C19419B31FD182816598BABE5410F72C3728AEA9B933C11660FF281148B17262A312E4FF5BE1138A85301428C74628BB883148B17262A312E4FF5BE1138A85301428C74628BB8",
    "tx_json": {
      "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Amount": {
        "currency": "USD",
        "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
        "value": "1"
      },
      "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
      "Fee": "10",
      "Flags": 2147483648,
      "Sequence": 313,
      "SigningPubKey": "0338B02E376397CE1600D338500584CC79E54094C8544DE2400E01E7CE4447F2C6",
      "TransactionType": "Payment",
      "TxnSignature": "3045022100E9DBF1323A39E65C5E6085CD12C49383059365A9F664466327742E0ACB975339022069CF3C84706C19419B31FD182816598BABE5410F72C3728AEA9B933C11660FF2",
      "hash": "A9F6F788C0576969648738CECA450FD8AC82CAF0CF32540A3D2F1C7A13CBF98E"
    }
  }
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
engine_result String 例如,表示交易初步结果的代码 tesSUCCESS
engine_result_code Integer 表示交易初步结果的数字代码,直接与相关 engine_result
engine_result_message String 人类可读的交易初步结果解释
tx_blob String 十六进制字符串格式的完整交易
tx_json Object JSON格式的完整交易

 

警告:即使WebSocket响应具有"status":"success",表示命令已成功接收,但并不表示事务成功执行。许多情况可能会阻止交易成功处理,例如在支付中缺少连接两个帐户的信任线,或者自交易构建时开始账户状态发生变化。即使没有任何错误,可能需要几秒钟才能关闭和验证包含交易的分类帐版本。有关详细信息,请参阅交易回复的完整列表,并且不要将交易的结果视为最终结果,直至它们出现在经过验证的分类帐版本中。

警告:如果此命令导致错误消息,则消息可以包含请求中的密钥。(如果请求包含签名的tx_blob,那么这不是问题。)确保这些错误对其他人不可见。

  • 不要将包括密钥在内的错误写入多人可见的日志文件。
  • 不要将包含密钥在内的错误粘贴到公共场所进行调试。
  • 不要在网站上显示包含您的密钥的错误消息,即使意外。

可能的错误:

  • 任何通用错误类型。
  • amendmentBlocked– 由于streamd服务器被修改阻止,因此无法将事务提交到网络。
  • highFee– fee_mult_max指定了参数,但服务器的当前费用乘数超过了指定的值。(仅限签署和提交模式)
  • internalJson – 将事务序列化为JSON时发生内部错误。这可能是由交易的许多方面引起的,包括签名不正确或某些字段格式错误。
  • internalSubmit – 提交交易时发生内部错误。这可能是由交易的许多方面引起的,包括签名不正确或某些字段格式错误。
  • internalTransaction – 处理事务时发生内部错误。这可能是由交易的许多方面引起的,包括签名不正确或某些字段格式错误。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • invalidTransaction – 交易格式不正确或无效。
  • noPath – 交易不包括路径,并且服务器无法找到可以发生此付款的路径。(仅限签署和提交模式)
  • tooBusy – 交易不包括路径,但服务器太忙而无法现在进行寻路。如果您作为管理员连接,则不会发生。(仅限签署和提交模式)

6.8.book_offers #

该book_offers方法检索两种货币之间的报价列表,也称为订单簿。如果结果非常大,则使用标记返回部分结果,以便稍后的请求可以从前一个请求的剩余位置恢复。

请求格式的示例:

{
  "id": 4,
  "command": "book_offers",
  "taker": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
  "taker_gets": {
    "currency": "STM"
  },
  "taker_pays": {
    "currency": "USD",
    "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
  },
  "limit": 10
}
{
    "method": "book_offers",
    "params": [
        {
            "taker": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "taker_gets": {
                "currency": "STM"
            },
            "taker_pays": {
                "currency": "USD",
                "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            },
            "limit": 10
        }
    ]
}
#Syntax: book_offers taker_pays taker_gets [taker [ledger [limit] ] ]
streamd book_offers 'USD/vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV' 'EUR/vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV'

该请求包含以下参数:

Field Type Description
ledger_hash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
ledger_index String or Unsigned Integer (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)
limit Unsigned Integer (可选)如果提供,服务器在结果中提供的优惠数量不会超过此数。返回的结果总数可能会少于限制,因为服务器忽略了未提供资金的优惠。
marker (Not Specified) (可选)来自之前分页响应的值。在该响应停止的情况下继续恢复数据。
taker String (可选)作为透视图使用的帐户的地址。响应中始终包含此帐户放置的未获资助的优惠。(你可以用它来查找你自己的命令来取消它们。)
taker_gets Object 指定接受报价的账户将以哪种货币收到的货币作为具有currencyissuer字段的对象(省略STM的发行者),如货币金额。
taker_pays Object 指定接受报价的账户将支付哪种货币作为具有currencyissuer字段的对象(省略STM的发行者),如货币金额。

一个成功回应的例子:

{
  "id": 4,
  "result": {
    "ledger_current_index": 168798,
    "offers": [],
    "validated": false
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "ledger_current_index": 168798,
    "offers": [],
    "validated": false
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
ledger_current_index Integer (如果提供分类帐版本,则省略)检索此数据时使用的分类账版本的序号。
ledger_index Integer (如果改为提供ledger_current_index,则省略)请求中提供的序列号,用于检索此数据时使用的分类帐版本。
ledger_hash String (可以省略)请求中提供的Hex哈希检索此数据时使用的分类帐版本。
marker (Not Specified) (可以省略)服务器定义的值,表示响应是分页的。将此传递给下一个电话以恢复此通话停止的位置。在此之后没有信息页面时省略。
offers Array 要约对象数组,其中每个对象都有一个OfferCreate事务的字段

除标准商品字段外,以下字段可能包含在offers数组成员中:

Field Type Description
owner_funds String 可以交易报价方的TakerGets货币金额。(STM表示为下跌;任何其他货币都表示为十进制值。)如果交易者在同一本书中有多个商品,则只有排名最高的商品包含该字段。
taker_gets_funded String (STM) or Object (non-STM) (仅包含在部分资助的优惠中)考虑到优惠的资金状况,接受方可获得的最大金额。
taker_pays_funded String (STM) or Object (non-STM) (仅包含在部分资助的优惠中)考虑到优惠的资金状态,接受方将支付的最大货币金额。
quality Number 汇率,比率taker_pays除以taker_gets。为了公平起见,具有相同质量的报价将自动采用先入先出。(换句话说,如果多人提出以相同的汇率兑换货币,则最先采用最早的报价。​​)

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • lgrNotFound– 由ledger_hash或者ledger_index不存在的分类账,或者确实存在,但服务器没有。
  • srcCurMalformed– taker_pays请求中的字段格式不正确。
  • dstAmtMalformed– taker_gets请求中的字段格式不正确。
  • srcIsrMalformed– 请求中issuer字段的taker_pays字段无效。
  • dstIsrMalformed– 请求中issuer字段的taker_gets字段无效。
  • badMarket – 所需订单不存在; 例如,为自己交换货币。

7.订阅 #

使用订阅时,您可以让服务器在发生各种事件时将更新推送到客户端,以便您可以立即知道并做出反应。订阅仅在WebSocket API中受支持,您可以在同一频道中接收其他响应。

对订阅回调的JSON-RPC支持已弃用,可能无法按预期工作。

7.1.subscribe #

该 subscribe方法在发生某些事件时请求服务器定期发出通知。

请求格式的示例:

{
  "id": "Example watch Bitstamp's hot wallet",
  "command": "subscribe",
  "accounts": ["vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"]
}
{
    "id": "Example subscribe to STM/GateHub USD order book",
    "command": "subscribe",
    "books": [
        {
            "taker_pays": {
                "currency": "STM"
            },
            "taker_gets": {
                "currency": "USD",
                "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
            },
            "snapshot": true
        }
    ]
}
{
  "id": "Example watch for new validated ledgers",
  "command": "subscribe",
  "streams": ["ledger"]
}

该请求包含以下参数:

Field Type Description
streams Array (可选)要订阅的通用流的字符串名称数组,如下所述
accounts Array (可选)具有唯一base58地址帐户的阵列,用于监视已验证的事务。服务器为任何影响至少其中一个帐户的交易发送通知。
accounts_proposed Array (可选)类似accounts,但包括尚未最终确定的交易。
books Array (可选)定义订单以监控更新的对象数组,如下所述。
url String (对于WebSocket是可选的;否则为必需)服务器为每个事件发送JSON-RPC回调的URL。仅管理员。
url_username String (可选)在回调URL处提供基本身份验证的用户名。
url_password String (可选)在回调URL处提供基本身份验证的密码。

以下参数弃用,可以在不另行通知删除:userpasswordrt_accounts

streams参数提供对以下默认信息流的访问权限:

  • server– 每当streamd服务器的状态(例如网络连接)发生变化时发送消息
  • ledger – 每当共识流程声明新的验证分类账时发送消息
  • transactions – 每当交易包含在封闭式分类帐中时发送消息
  • transactions_proposed – 每当交易包含在封闭式分类帐中时发送消息,以及一些尚未包含在验证分类帐中的交易,并且可能永远不会。并非所有建议的交易在验证之前出现 注意: 即使一些不成功的交易也包含在验证的分类帐中,因为它们会收取反垃圾邮件交易费用。
  • validations – 每当服务器收到来自其信任的服务器的验证消息时发送消息。(streamd当服务器收到来自至少一个信任验证器的法定数量的验证消息时,个人声明验证分类帐。)
  • peer_status– (仅限管理员)关于连接的对等streamd服务器的信息,特别是关于共识流程的信息。

books数组的每个成员(如果提供)都是包含以下字段的对象:

Field Type Description
taker_gets Object 指定接受报价的账户将接收哪种货币作为没有金额的货币对象。
taker_pays Object 作为没有金额的货币对象,指定接受报价的账户将支付哪种货币。
taker String 独特的base58帐户地址,用作查看优惠的透视图。(这会影响资金状态和优惠费用。)
snapshot Boolean (可选,默认为false)如果为true,则在发送更新之前订阅订单时返回当前状态
both Boolean (可选,默认为false)如果为true,则返回订单的双方。

一个成功回应的例子:

{
  "id": "Example watch Bitstamp's hot wallet",
  "status": "success",
  "type": "response",
  "result": {}
}

响应遵循标准格式。响应中包含的字段取决于请求中包含的订阅内容。

  • accountsaccounts_proposed-无场返回
  • 流:服务器 – 有关服务器状态的信息,例如load_base(服务器的当前负载级别),random(随机生成的值)等等,可能会发生更改。
  • 流:事务流:transactions_proposed流:验证 – 没有字段返回
  • 流:分类账 – 有关分类账和现行收费表的信息,例如fee_base(当前STM交易的基本费用),fee_ref(收费单位交易的当前基本费用),ledger_hash(最新验证分类账的散列),reserve_base(最低储备金为帐户),等等。
  • books – 没有字段默认返回。如果"snapshot": true在请求中设置,返回offers(定义订单簿的商品定义对象数组)

可能的错误:

  • 任何通用错误类型
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • noPermission– 请求中包含该url字段,但不作为管理员连接。
  • unknownStream– streams请求字段的一个或多个成员不是有效的流名称。
  • malformedStream– streams请求的字段格式不正确。
  • malformedAccount– 请求中的一个地址accountsaccounts_proposed字段中的地址不是正确格式的STM分类帐地址。(注意:您可以订阅尚未在全局分类帐中具有条目的地址流,以便在该地址获得资助时收到消息。)
  • srcCurMalformed– 请求中taker_pays字段的一个或多个子字段books格式不正确。
  • dstAmtMalformed– 请求中taker_gets字段的一个或多个子字段books格式不正确。
  • srcIsrMalformed– 请求中issuer字段的一个或多taker_pays个子字段的books字段无效。
  • dstIsrMalformed– 请求中issuer字段的一个或多taker_gets个子字段的books字段无效。
  • badMarket– books现场不存在一本或多本所需订单; 例如,为自己交换货币。

当您订阅特定的流时,您会在该流上收到定期响应,直到您取消订阅或关闭WebSocket连接。这些回复的内容取决于您订阅的内容。这里有些例子:

7.1.1.Ledger Stream #

ledger流只发送ledgerClosed消息时的共识的过程声明了一个新的有效的分类帐。该消息标识分类帐并提供有关其内容的一些信息。

{
  "type": "ledgerClosed",
  "fee_base": 10,
  "fee_ref": 10,
  "ledger_hash": "687F604EF6B2F67319E8DCC8C66EF49D84D18A1E18F948421FC24D2C7C3DB464",
  "ledger_index": 7125358,
  "ledger_time": 455751310,
  "reserve_base": 20000000,
  "reserve_inc": 5000000,
  "txn_count": 7,
  "validated_ledgers": "32570-7125358"
}

分类账流消息中的字段如下所示:

Field Type Description
type String ledgerClosed 表明这是来自分类账流
fee_base Unsigned Integer STM下降的’参考交易’成本。(请参阅交易成本如果分类帐包含SetFee伪交易,则新交易成本将应用于此分类帐后的所有交易。
fee_ref Unsigned Integer “费用单位”中“参考交易”的成本。
ledger_hash String 作为十六进制关闭的分类账的唯一散列
ledger_index Unsigned Integer 已关闭的分类帐的序号
ledger_time Unsigned Integer 这个分类帐的时间在Stream Epoch以后几秒钟内关闭
reserve_base Unsigned Integer 账户所需的最低储备金,以STM为单位。如果分类账中包含SetFee伪交易,则在此分类账之后应用新的基本准备金。
reserve_inc Unsigned Integer 为账户所拥有的每个项目(例如优惠或信任额度)添加的账户储备增加。如果分类账包含SetFee伪交易,则在此分类帐之后应用新所有者预留。
txn_count Unsigned Integer 包含在此分类帐中的新交易数量
validated_ledgers String (可以省略)服务器可用的分类帐范围。这可能是不连续的。如果服务器未连接到网络,或者已连接但尚未从网络获取分类帐,则不会返回此字段。

7.1.2.Transaction Streams #

许多订阅会导致有关交易的消息,其中包括以下内容:

  • 该 transactions
  • transactions_proposed
  • accounts 订阅
  • accounts_proposed 订阅
  • book (订购书)订阅

transactions_proposed流,严格来说,是一个超集transactions流:它包括了所有经过验证的交易,以及尚未被纳入一个有效的总账和可能永远是一些建议的交易。您可以通过其字段识别这些“正在进行中的”交易:

  • validated字段丢失或具有值false
  • 没有metametadata领域。
  • 而不是ledger_hashledger_index领域指定其中台账版本的交易被完成,有一个ledger_current_index字段中指定其中台账版本他们目前提出的。

否则,transactions_proposed流中的消息与流中的消息相同transactions

由于唯一可以修改帐户或订单的事物就是一个事务,这些消息是作为特定订阅的结果发送的,accounts或者books也是采用交易消息的形式,与transactions流中的消息相同。唯一的区别是,您只收到影响您正在观看的帐户或订单的交易的消息。

accounts_proposed订阅的工作方式相同,但它也包括未经证实的交易,如transactions_proposed流,你正在观看的账户。

{
  "status": "closed",
  "type": "transaction",
  "engine_result": "tesSUCCESS",
  "engine_result_code": 0,
  "engine_result_message": "The transaction was applied.",
  "ledger_hash": "989AFBFD65D820C6BD85301B740F5D592F060668A90EEF5EC1815EBA27D58FE8",
  "ledger_index": 7125442,
  "meta": {
    "AffectedNodes": [
      {
        "ModifiedNode": {
          "FinalFields": {
            "Flags": 0,
            "IndexPrevious": "0000000000000000",
            "Owner": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "RootIndex": "ABD8CE2D1205D0C062876E9E1F3CBDC902ED8EF4E8D3D071B962C7ED0E113E68"
          },
          "LedgerEntryType": "DirectoryNode",
          "LedgerIndex": "0BBDEE7D0BE120F7BF27640B5245EBFE0C5FD5281988BA823C44477A70262A4D"
        }
      },
      {
        "DeletedNode": {
          "FinalFields": {
            "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "BookDirectory": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE",
            "BookNode": "0000000000000000",
            "Flags": 0,
            "OwnerNode": "000000000000006E",
            "PreviousTxnID": "58A17D95770F8D07E08B81A85896F4032A328B6C2BDCDEC0A00F3EF3914DCF0A",
            "PreviousTxnLgrSeq": 7125330,
            "Sequence": 540691,
            "TakerGets": "4401967683",
            "TakerPays": {
              "currency": "BTC",
              "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
              "value": "0.04424"
            }
          },
          "LedgerEntryType": "Offer",
          "LedgerIndex": "386B7803A9210747941B0D079BB408F31ACB1CB98832184D0287A1CBF4FE6D00"
        }
      },
      {
        "DeletedNode": {
          "FinalFields": {
            "ExchangeRate": "4A03920BFC5E99BE",
            "Flags": 0,
            "RootIndex": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE",
            "TakerGetsCurrency": "0000000000000000000000000000000000000000",
            "TakerGetsIssuer": "0000000000000000000000000000000000000000",
            "TakerPaysCurrency": "0000000000000000000000004254430000000000",
            "TakerPaysIssuer": "92D705968936C419CE614BF264B5EEB1CEA47FF4"
          },
          "LedgerEntryType": "DirectoryNode",
          "LedgerIndex": "892E892DC63D8F70DCF5C9ECF29394FF7DD3DC6F47DB8EB34A03920BFC5E99BE"
        }
      },
      {
        "ModifiedNode": {
          "FinalFields": {
            "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
            "Balance": "11133297300",
            "Flags": 0,
            "OwnerCount": 9,
            "Sequence": 540706
          },
          "LedgerEntryType": "AccountRoot",
          "LedgerIndex": "A6C2532E1008A513B3F822A92B8E5214BD0D413DC20AD3631C1A39AD6B36CD07",
          "PreviousFields": {
            "Balance": "11133297310",
            "OwnerCount": 10,
            "Sequence": 540705
          },
          "PreviousTxnID": "484D57DFC4E446DA83B4540305F0CE836D4E007361542EC12CC0FFB5F0A1BE3A",
          "PreviousTxnLgrSeq": 7125358
        }
      }
    ],
    "TransactionIndex": 1,
    "TransactionResult": "tesSUCCESS"
  },
  "transaction": {
    "Account": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
    "Fee": "10",
    "Flags": 2147483648,
    "OfferSequence": 540691,
    "Sequence": 540705,
    "SigningPubKey": "030BB49C591C9CD65C945D4B78332F27633D7771E6CF4D4B942D26BA40748BB8B4",
    "TransactionType": "OfferCancel",
    "TxnSignature": "30450221008223604A383F3AED25D53CE7C874700619893A6EEE4336508312217850A9722302205E0614366E174F2DFF78B879F310DB0B3F6DA1967E52A32F65E25DCEC622CD68",
    "date": 455751680,
    "hash": "94CF924C774DFDBE474A2A7E40AEA70E7E15D130C8CBEF8AF1D2BE97A8269F14"
  },
  "validated": true
}

事务流消息具有以下字段:

Field Type Description
type String transaction 表示这是交易通知,可能来自多个可能的流。
engine_result String 字符串事务结果代码
engine_result_code Number 数字事务响应代码(如果适用)。
engine_result_message String 交易响应的人类可读解释
ledger_current_index Unsigned Integer (对已验证的交易省略)当前提交此交易的当前分类账版本的序列号
ledger_hash String (对于未验证的事务省略)包含此交易的分类帐版本的唯一哈希,如十六进制
ledger_index Unsigned Integer (对于未验证的交易省略)包含此交易的分类帐版本的序号
meta Object (对于未验证的事务省略)有关交易的各种元数据,包括它影响的分类帐条目
transaction Object 该交易的定义JSON格式
validated Boolean 如果为true,则此交易包含在经过验证的分类账中。transaction应始终验证来自流的响应。

7.1.3.Peer Status Stream #

管理员专用peer_status流会报告有关streamd此服务器所连接的其他服务器的活动的大量信息,特别是它们在共识流程中的状态。

对等状态流消息的示例:

{
    "action": "CLOSING_LEDGER",
    "date": 508546525,
    "ledger_hash": "4D4CD9CD543F0C1EF023CC457F5BEFEA59EEF73E4552542D40E7C4FA08D3C320",
    "ledger_index": 18853106,
    "ledger_index_max": 18853106,
    "ledger_index_min": 18852082,
    "type": "peerStatusChange"
}

对等状态流消息表示对等streamd服务器状态改变的一些事件。这些消息是带有以下字段的JSON对象:

Field Value Description
type String peerStatusChange 表示这来自对等状态流。
action String 提示此消息的事件类型。查看对等状态事件以获取可能的值。
date Number 此事件发生的时间,自Stream Epoch以来的秒数。
ledger_hash String (可以省略)该消息所属的账本版本的标识哈希。
ledger_index Number (可能被省略)此消息所属的账簿版本的分类账索引。
ledger_index_max Number (可以省略)对等体当前可用的最大分类帐索引。
ledger_index_min Number (可以省略)对等体当前可用的最小总帐索引。

action对等状态流消息的字段可以具有以下值:

Value Meaning
CLOSING_LEDGER 同行关闭了一个带有此分类帐索引的分类账版本,这通常意味着它即将开始达成共识。
ACCEPTED_LEDGER 同行建立了这个账本是作为共识回合的结果。注意:此分类帐仍不一定会得到不变的验证。
SWITCHED_LEDGER 同行得出的结论是,它没有跟随网络的其他部分,转而使用不同的分类帐版本。
LOST_SYNC 同行在落后于网络的其他部分追踪哪些分类账版本得到验证并且正在达成共识。

7.2.unsubscribe #

unsubscribe命令会通知服务器停止发送特定订阅或订阅集的消息。

请求格式的示例:

{
    "id": "Unsubscribe a lot of stuff",
    "command": "unsubscribe",
    "streams": ["ledger","server","transactions","transactions_proposed"],
    "accounts": ["vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"],
    "accounts_proposed": ["vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"],
    "books": [
        {
            "taker_pays": {
                "currency": "STM"
            },
            "taker_gets": {
                "currency": "USD",
                "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
            },
            "both": true
        }
    ]
}

请求中的参数与参数几乎完全相同subscribe,除了它们用于定义要结束的订阅。参数是:

Field Type Description
streams Array (可选)通用流的字符串名称的数组从,包括退订ledgerservertransactions,和transactions_proposed
accounts Array (可选)用于停止接收更新的唯一Base58帐户地址数组。(如果您之前已专门订阅了这些帐户,则只会停止这些邮件。您不能使用此功能从普通交易流中过滤帐户。)
accounts_proposed Array (可选)类似accounts,但对于accounts_proposed包含尚未验证事务的订阅。
books Array (可选)定义要取消订阅订单的对象数组,如下所述。

rt_accountsurl参数,以及rt_transactions流名称,被弃用,可以在没有进一步的通知被移除。

books数组中的对象的定义与订阅中的对象几乎相同,只是它们没有全部字段。他们的字段如下:

Field Type Description
taker_gets Object 指定接受报价的账户将以哪种货币收到的货币作为具有currencyissuer字段的对象(省略STM的发行者),如货币金额。
taker_pays Object 指定接受报价的账户将支付哪种货币作为具有currencyissuer字段的对象(省略STM的发行者),如货币金额。
both Boolean (可选,默认为false)如果为true,则删除订单两侧的订阅。

一个成功回应的例子:

{
    "id": "Unsubscribe a lot of stuff",
    "result": {},
    "status": "success",
    "type": "response"
}

响应遵循标准格式,成功的结果不包含字段。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • noPermission– 请求中包含该url字段,但不作为管理员连接。
  • malformedStream– streams请求的字段格式不正确。
  • malformedAccount– 请求中的一个地址accountsaccounts_proposed字段中的地址不是正确格式的STM分类帐地址。
  • 注意:您可以订阅尚未在全局分类帐中输入的地址的流,以便在地址获得资助时收到消息。
  • srcCurMalformed– 请求中taker_pays字段的一个或多个子字段books格式不正确。
  • dstAmtMalformed– 请求中taker_gets字段的一个或多个子字段books格式不正确。
  • srcIsrMalformed– 请求中issuer字段的一个或多taker_pays个子字段的books字段无效。
  • dstIsrMalformed– 请求中issuer字段的一个或多taker_gets个子字段的books字段无效。
  • badMarket– books现场不存在一本或多本所需订单; 例如,为自己交换货币。

8.服务器信息 #

还有一些命令可以检索有关服务器当前状态的信息。这些可能对监视服务器的健康状况或准备制作其他API方法很有用。例如,您可以在发送交易之前查询当前费用明细表,或者您可以在挖掘特定记录的分类帐历史记录之前查看哪些分类帐版本可用。

8.1.server_info #

server_info命令向服务器请求关于streamd正被查询的服务器的各种信息的人类可读版本。

请求格式的示例:

{
  "id": 1,
  "command": "server_info"
}
{
    "method": "server_info",
    "params": [
        {}
    ]
}
#Syntax: server_info
streamd server_info

该请求不包含任何参数。

一个成功回应的例子:

{
  "id": 1,
  "result": {
    "info": {
      "build_version": "0.1.0",
      "complete_ledgers": "2-168922",
      "hostid": "MOS",
      "io_latency_ms": 1,
      "last_close": {
        "converge_time_s": 2.001,
        "proposers": 2
      },
      "load_factor": 1,
      "peers": 2,
      "pubkey_node": "n9KeFY9ZAmhuk2CDdKthcMhcZLhhaBrCFKSNAc1ondhFZNQgfR5e",
      "server_state": "proposing",
      "validated_ledger": {
        "age": 12,
        "base_fee_stm": 1e-05,
        "hash": "5BED1224009D5FC996B41A5E95041286596346D96DD8F6B4DF18DDD4FC65F54C",
        "reserve_base_stm": 1,
        "reserve_inc_stm": 0.1,
        "seq": 168922
      },
      "validation_quorum": 2
    }
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "info": {
      "build_version": "0.1.0",
      "complete_ledgers": "2-168922",
      "hostid": "MOS",
      "io_latency_ms": 1,
      "last_close": {
        "converge_time_s": 2.001,
        "proposers": 2
      },
      "load_factor": 1,
      "peers": 2,
      "pubkey_node": "n9KeFY9ZAmhuk2CDdKthcMhcZLhhaBrCFKSNAc1ondhFZNQgfR5e",
      "server_state": "proposing",
      "validated_ledger": {
        "age": 12,
        "base_fee_stm": 1e-05,
        "hash": "5BED1224009D5FC996B41A5E95041286596346D96DD8F6B4DF18DDD4FC65F54C",
        "reserve_base_stm": 1,
        "reserve_inc_stm": 0.1,
        "seq": 168922
      },
      "validation_quorum": 2
    }
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功的结果包含一个info对象作为唯一字段。

info对象可能具有以下字段:

Field Type Description
build_version String 正在运行的streamd版本的版本号。
closed_ledger Object (可能被省略)最近关闭的分类帐的信息尚未经协商一致确认。如果最近验证的分类账可用,则回复省略此字段并包含validated_ledger。成员字段与validated_ledger字段相同。
complete_ledgers String 范围表达式指示数据库中本地波动的分类帐版本的序列号。例如,这可能是一个不相交的序列24900901-24900984,24901116-24901158
hostid String 在管理请求上,返回运行该streamd实例的服务器的主机名; 否则,返回一个唯一的四个字母的单词。
io_latency_ms Number 花在等待I / O操作上的时间,以毫秒为单位。如果这个数字不是非常非常低,那么streamd服务器可能有严重的负载问题。
last_close Object 关于上次服务器关闭分类账的信息,包括达成共识所花费的时间以及参与的可信验证人数。
load Object (仅限管理员)有关服务器当前负载状态的详细信息
load.job_types Array (仅限管理员)有关服务器正在执行的不同类型作业的比率以及每个作业花费多少时间的信息。
load.threads Number (仅限管理员)服务器主作业池中的线程数。
load_factor_local Number (可能会被省略)当前乘以该交易成本的乘数,并基于该服务器的负载。
load_factor_net Number (可省略)网络其余部分使用的交易成本的当前乘数(根据其他服务器报告的负载值估算)。
load_factor_cluster Number (可能省略)基于此群集中服务器负载的交易成本的当前乘数。
peers Number streamd这个服务器当前连接了多少个其他服务器。
pubkey_node String 用于验证此服务器以进行对等通信的公钥。该密钥由服务器首次启动时自动生成。(如果删除,服务器可以创建一对新的密钥。)
pubkey_validator String (仅限管理员)此节点用于签署分类帐验证的公钥。
server_state String 指示服务器参与网络的程度的字符串。有关更多信息,请参阅可能的服务器状
state_accounting Object 各种服务器状态的地图,包含有关服务器每次花费的时间的信息。这可以用于跟踪服务器与网络连接的长期健康状况。
state_accounting.*.duration_us String 服务器在此状态下花费的微秒数。(每当服务器转换到另一个状态时都会更新。)
state_accounting.*.transitions Number 服务器转换到此状态的次数。
uptime Number 服务器运行的连续秒数。
validated_ledger Object (可以省略)关于最近一次完全验证的分类帐的信息。如果最近验证的分类账不可用,则回复省略此字段并包含closed_ledger
validated_ledger.age Number 自分类帐关闭以来的时间,以秒为单位。
validated_ledger.base_fee_stm Number 基本费用,在STM。这可以用科学记数法表示,例如1e-050.00005。
validated_ledger.hash String 分类帐的唯一哈希,如十六进制
validated_ledger.reserve_base_stm Unsigned Integer 每个账户需要保留的最小STM金额(而不是下降)
validated_ledger.reserve_inc_stm Unsigned Integer 为账户在分类帐中拥有的每个对象添加的账户储备额的STM数量(非丢弃)
validated_ledger.seq Number – Ledger Index 最新验证分类账的分类账索引
validation_quorum Number 验证分类帐版本所需的可信验证的最小数目。有些情况可能会导致服务器需要更多验证。

 

注意:如果该closed_ledger字段存在并且seq值较小(少于8位),则表明streamd当前没有来自对等网络的验证分类帐的副本。这可能意味着您的服务器仍在同步。通常,根据连接速度和硬件规格,网络同步需要大约5分钟的时间。

可能的错误:

  • 任何通用错误类型。

8.2.server_state #

server_state命令向服务器询问有关streamd服务器当前状态的各种机器可读信息。结果几乎相同server_info,但使用易于处理而不易读取的单位。(例如,STM值以整数下降给出,而不是科学记数法或小数值,时间以毫秒为单位,而不是秒。)

请求格式的示例:

{
  "id": 2,
  "command": "server_state"
}
{
    "method": "server_state",
    "params": [
        {}
    ]
}
#Syntax: server_state
streamd server_state

该请求不需要任何参数。

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "state": {
      "build_version": "0.1.0",
      "complete_ledgers": "2-168954",
      "io_latency_ms": 1,
      "last_close": {
        "converge_time": 2001,
        "proposers": 2
      },
      "load_base": 256,
      "load_factor": 256,
      "peers": 2,
      "pubkey_node": "n9KiKNomfCpaMgocLawVjQv7VvvBbDTw1Kcy8YMTNJJBdoQM4sGZ",
      "server_state": "proposing",
      "validated_ledger": {
        "base_fee": 10,
        "close_time": 575963230,
        "hash": "16388D25CD429747F753DF68438FC8C0173AAF4F971870C4B0A4625530C178F8",
        "reserve_base": 1000000,
        "reserve_inc": 100000,
        "seq": 168954
      },
      "validation_quorum": 2
    }
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "state": {
      "build_version": "0.1.0",
      "complete_ledgers": "2-168954",
      "io_latency_ms": 1,
      "last_close": {
        "converge_time": 2001,
        "proposers": 2
      },
      "load_base": 256,
      "load_factor": 256,
      "peers": 2,
      "pubkey_node": "n9KiKNomfCpaMgocLawVjQv7VvvBbDTw1Kcy8YMTNJJBdoQM4sGZ",
      "server_state": "proposing",
      "validated_ledger": {
        "base_fee": 10,
        "close_time": 575963230,
        "hash": "16388D25CD429747F753DF68438FC8C0173AAF4F971870C4B0A4625530C178F8",
        "reserve_base": 1000000,
        "reserve_inc": 100000,
        "seq": 168954
      },
      "validation_quorum": 2
    }
  },
  "status": "success",
  "type": "response"
}

响应遵循标准格式,成功的结果包含一个state对象作为唯一的字段。

state对象可能具有以下字段:

Field Type Description
build_version String 正在运行的streamd版本的版本号。
complete_ledgers String 范围表达式表示本地streamd数据库中的分类帐版本的序列号。可能是不相交的序列,例如“2500-5000,32570-7695432”。
closed_ledger Object (可能被省略)最近关闭的分类帐的信息尚未经协商一致确认。如果最近验证的分类账可用,则回复省略此字段并包含validated_ledger。成员字段与validated_ledger字段相同。
io_latency_ms Number 花在等待I / O操作上的时间,以毫秒为单位。如果这个数字不是非常非常低,那么streamd服务器可能有严重的负载问题。
load Object (仅限管理员)有关服务器当前负载状态的详细信息
load.job_types Array (仅限管理员)有关服务器正在执行的不同类型作业的比率以及每个作业花费多少时间的信息。
load.threads Number (仅限管理员)服务器主作业池中的线程数。
load_base Integer 这是交易成本计算中使用的服务器负载的基准数量。如果load_factor等于load_base那么只有基本交易成本被执行。如果该load_factor值高于该值load_base,则交易成本乘以它们之间的比率。例如,如果load_factor是两倍load_base,那么交易成本就会增加一倍。
peers Number streamd这个服务器当前连接了多少个其他服务器。
pubkey_node String 用于验证此服务器以进行对等通信的公钥。该密钥对在服务器第一次启动时自动生成。(如果删除,服务器可以创建一对新的密钥。)
pubkey_validator String (仅限管理员)此服务器使用的密钥对的公钥,用于签署提议的分类帐以进行验证。
server_state String 指示服务器参与网络的程度的字符串。有关更多信息,请参阅可能的服务器状态
state_accounting Object 各种服务器状态的地图,包含有关服务器每次花费的时间的信息。这可以用于跟踪服务器与网络连接的长期健康状况。
state_accounting.*.duration_us String 服务器在此状态下花费的微秒数。(每当服务器转换到另一个状态时都会更新。)
state_accounting.*.transitions Number 服务器转换到此状态的次数。
uptime Number 服务器运行的连续秒数。
validated_ledger Object (可以省略)关于最近一次完全验证的分类帐的信息。如果最近验证的分类账不可用,则回复省略此字段并包含closed_ledger
validated_ledger.base_fee Unsigned Integer 基础费用,以STM为单位,用于向网络传播交易。
validated_ledger.close_time Number 自Stream Epoch以来,此分类账已经关闭的时间
validated_ledger.hash String 此分类帐版本的独特散列,如十六进制
validated_ledger.reserve_base Unsigned Integer 每个账户需要保留的最低金额,以STM为单位
validated_ledger.reserve_inc Unsigned Integer 金额,以STM为单位,添加到账户在账本中拥有的每个项目的账户储备金中。
validated_ledger.seq Unsigned Integer 此分类帐的唯一序号
validation_quorum Number 验证分类帐版本所需的可信验证的最小数目。有些情况可能会导致服务器需要更多验证。

可能的错误:

  • 任何通用错误类型。

8.3.can_delete #

在启用online_deleteadvisory_delete配置选项的情况下,该can_delete方法通知Streamd服务器可能被删除的最新分类帐。

can_delete方法是不能由非特权用户运行的管理员命令。

请求格式的示例:

{
  "id": 2,
  "command": "can_delete",
  "can_delete": 11320417
}
{
    "method": "can_delete",
    "params": [
        {
            "can_delete": 11320417
        }
    ]
}
#Syntax can_delete [||now|always|never]
streamd can_delete 11320417

该请求包含以下可选参数:

Field Type Description
can_delete String or Integer 允许删除的最大分类帐。对于ledger_indexledger_hash请参阅指定分类帐。never将该值设置为0,并有效地禁用在线删除直到另一个can_delete被适当调用。 always将该值设置为最大可能分类帐(4294967295),并在每个配置的online_delete间隔内发生联机删除。now在下一个经过验证的分类账中触发在线删除,达到或超过配置的online_delete时间间隔,但没有进一步的限制。

如果没有指定参数,则不做任何更改。

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
can_delete Integer 可以通过在线删除例程删除的最大分类帐索引。

使用此命令不带参数来查询现有can_delete设置。

可能的错误:

  • 任何通用错误类型。
  • notEnabled – 在配置中未启用。
  • notReady – 没有准备好处理这个请求。
  • lgrNotFound – 未找到总帐。
  • invalidParams – 无效的参数。

8.4.consensus_info #

consensus_info命令提供了有关用于调试目的的一致过程的信息。

consensus_info方法是不能由非特权用户运行的管理员命令。

请求格式的示例:

{
    "id": 99,
    "command": "consensus_info"
}
{
    "method": "consensus_info",
    "params": [
        {}
    ]
}
#Syntax: consensus_info
streamd consensus_info

该请求没有参数。

一个成功回应的例子:

{
   "result" : {
      "info" : {
         "acquired" : {
            "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306" : "acquired"
         },
         "close_granularity" : 10,
         "close_percent" : 50,
         "close_resolution" : 10,
         "close_times" : {
            "486082972" : 1,
            "486082973" : 4
         },
         "current_ms" : 1003,
         "have_time_consensus" : false,
         "ledger_seq" : 13701086,
         "our_position" : {
            "close_time" : 486082973,
            "previous_ledger" : "0BB01379B51234BAAF501A71C7AB147F595460B689BB9E8252A0B87B5A483623",
            "propose_seq" : 0,
            "transaction_hash" : "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306"
         },
         "peer_positions" : {
            "5C29005CF4FB479FC49EEFB4A5B075C86DD963CC" : {
               "close_time" : 486082973,
               "peer_id" : "n9L81uNCaPgtUJfaHh89gmdvXKAmSt5Gdsw2g1iPWaPkAHW5Nm4C",
               "previous_ledger" : "0BB01379B51234BAAF501A71C7AB147F595460B689BB9E8252A0B87B5A483623",
               "propose_seq" : 0,
               "transaction_hash" : "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306"
            },
            "EFC49EB648E557CC50A72D715249B80E071F7705" : {
               "close_time" : 486082973,
               "peer_id" : "n949f75evCHwgyP4fPVgaHqNHxUVN15PsJEZ3B3HnXPcPjcZAoy7",
               "previous_ledger" : "0BB01379B51234BAAF501A71C7AB147F595460B689BB9E8252A0B87B5A483623",
               "propose_seq" : 0,
               "transaction_hash" : "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306"
            }
         },
         "previous_mseconds" : 2005,
         "previous_proposers" : 5,
         "proposers" : 5,
         "proposing" : false,
         "state" : "consensus",
         "synched" : true,
         "validating" : false
      },
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "info" : {
         "acquired" : {
            "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306" : "acquired"
         },
         "close_granularity" : 10,
         "close_percent" : 50,
         "close_resolution" : 10,
         "close_times" : {
            "486082972" : 1,
            "486082973" : 4
         },
         "current_ms" : 1003,
         "have_time_consensus" : false,
         "ledger_seq" : 13701086,
         "our_position" : {
            "close_time" : 486082973,
            "previous_ledger" : "0BB01379B51234BAAF501A71C7AB147F595460B689BB9E8252A0B87B5A483623",
            "propose_seq" : 0,
            "transaction_hash" : "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306"
         },
         "peer_positions" : {
            "5C29005CF4FB479FC49EEFB4A5B075C86DD963CC" : {
               "close_time" : 486082973,
               "peer_id" : "n9L81uNCaPgtUJfaHh89gmdvXKAmSt5Gdsw2g1iPWaPkAHW5Nm4C",
               "previous_ledger" : "0BB01379B51234BAAF501A71C7AB147F595460B689BB9E8252A0B87B5A483623",
               "propose_seq" : 0,
               "transaction_hash" : "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306"
            },
            "EFC49EB648E557CC50A72D715249B80E071F7705" : {
               "close_time" : 486082973,
               "peer_id" : "n949f75evCHwgyP4fPVgaHqNHxUVN15PsJEZ3B3HnXPcPjcZAoy7",
               "previous_ledger" : "0BB01379B51234BAAF501A71C7AB147F595460B689BB9E8252A0B87B5A483623",
               "propose_seq" : 0,
               "transaction_hash" : "4BC2CE596CBD1321775320E2067F9C06D3862826212C16EF42ABB6A2B0414306"
            }
         },
         "previous_mseconds" : 2005,
         "previous_proposers" : 5,
         "proposers" : 5,
         "proposing" : false,
         "state" : "consensus",
         "synched" : true,
         "validating" : false
      },
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
info Object 可能对调试共识有用的信息。此输出如有更改,恕不另行通知。

以下是可能包含在info对象中的字段的不完整摘要:

Field Type Description
ledger_seq Number 当前处于共识流程中的分类帐的序号
our_position Object 此服务器对共识流程中的分类帐的期望。
peer_positions Object 在协商一致的过程中,同行的地图和他们建议的分类账版本。
proposers Number 参与此共识流程的可信验证者数量。哪些验证器受信任取决于此服务器的配置。
synched Boolean 该服务器是否认为自己与网络同步。
state String 目前是什么部分达成共识的过程中取得进展:openconsensusfinished,或accepted

这也是正常的,其中的唯一领域获得最小的结果info"consensus": "none"。这表明服务器处于共识轮次之间。

consensus_info如果您多次运行该命令,命令的结果可能会发生显着变化,即使是连续运行很短时间。

可能的错误:

  • 任何通用错误类型。

8.5.fetch_info #

该 fetch_info命令返回有关此服务器当前从网络中获取的对象的信息,以及有多少对等端具有该信息。它也可以用来重置当前的提取。

fetch_info方法是一个管理员命令不能由非特权用户运行。

请求格式的示例:

{
    "id": 91,
    "command": "fetch_info",
    "clear": false
}
{
    "method": "fetch_info",
    "params": [
        {
            "clear": false
        }
    ]
}
#Syntax: fetch_info [clear]
streamd fetch_info

该请求包含以下参数:

Field 类型 描述
clear Boolean 如果true,重置当前提取。否则,只会获取正在进行的提取状态。

一个成功回应的例子:

{
   "result" : {
      "info" : {
         "348928" : {
            "hash" : "C26D432B06F84861BCACD7942EDC3FE0B2E1DEB966A9E516A0FD275A375C2010",
            "have_header" : true,
            "have_state" : false,
            "have_transactions" : true,
            "needed_state_hashes" : [
               "BF8DC6B1E10D1D3565BF0649075D22EBFD34F751AFCC0E53E81D74786BC88922",
               "34E37A71CB51A12C73A435250E6A6349F7884C7EEBA6B88FA31F0244E967E88F",
               "BFB7D3008A7D61FD6A0538D1C2E70CFB94CE8DC66606319C372F278A48629765",
               "41C0C61D701FB1EA586F0EF1FC7A91FEC476D979589DA60507F05C13F7C21975",
               "6DDE8840A2C3C7FF05E5FFEE4D06408694C16A8357338FE0C4581DC3D8A00BBA",
               "6C69D833B582C849917806FA009518832BB50E900E43716FD7CC1966428DD0CF",
               "1EDC020CFC4AF19B625C52E20B66D6AE672821CCC461E8A9C457A3B2955657F7",
               "FC0616A66A2B0589CA513F3341D4EA51E782C4601E5072308478E3CC19264640",
               "19FC607B5DE1B64681A676EC1ED5507B9555B0E098CD9D898320297DE1A64033",
               "5E128D3FC990074E35687387A14AA12D9FD287E5AB57CB9B2FD83DE635DF5CA9",
               "DE72820F3981770F2AA8770BC233B80661F1A452819D8529008875FF8DED87A9",
               "3ACB84BEE2C45556351FF60FD787D235C9CF5623FB8A35B01446B773598E7CC0",
               "0DD3A8DF69874148057F1F2BF305442FF2E89A76A08B4CC8C051E2ED69B874F3",
               "4AE9A9C4F12A5BD0355037DA40A0B145420A2168A9FEDE43E643BD13062F8ECE",
               "08CBF8CFFEC207F5AC4E4F24BC447011FD8C79D25B344281FBFB4732D7058ED4",
               "779B2577C5C4BAED6657421448EA506BBF50F86BE363E0924127C4EA17A58BBE"
            ],
            "peers" : 2,
            "timeouts" : 0
         }
      },
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "info" : {
         "348928" : {
            "hash" : "C26D432B06F84861BCACD7942EDC3FE0B2E1DEB966A9E516A0FD275A375C2010",
            "have_header" : true,
            "have_state" : false,
            "have_transactions" : true,
            "needed_state_hashes" : [
               "BF8DC6B1E10D1D3565BF0649075D22EBFD34F751AFCC0E53E81D74786BC88922",
               "34E37A71CB51A12C73A435250E6A6349F7884C7EEBA6B88FA31F0244E967E88F",
               "BFB7D3008A7D61FD6A0538D1C2E70CFB94CE8DC66606319C372F278A48629765",
               "41C0C61D701FB1EA586F0EF1FC7A91FEC476D979589DA60507F05C13F7C21975",
               "6DDE8840A2C3C7FF05E5FFEE4D06408694C16A8357338FE0C4581DC3D8A00BBA",
               "6C69D833B582C849917806FA009518832BB50E900E43716FD7CC1966428DD0CF",
               "1EDC020CFC4AF19B625C52E20B66D6AE672821CCC461E8A9C457A3B2955657F7",
               "FC0616A66A2B0589CA513F3341D4EA51E782C4601E5072308478E3CC19264640",
               "19FC607B5DE1B64681A676EC1ED5507B9555B0E098CD9D898320297DE1A64033",
               "5E128D3FC990074E35687387A14AA12D9FD287E5AB57CB9B2FD83DE635DF5CA9",
               "DE72820F3981770F2AA8770BC233B80661F1A452819D8529008875FF8DED87A9",
               "3ACB84BEE2C45556351FF60FD787D235C9CF5623FB8A35B01446B773598E7CC0",
               "0DD3A8DF69874148057F1F2BF305442FF2E89A76A08B4CC8C051E2ED69B874F3",
               "4AE9A9C4F12A5BD0355037DA40A0B145420A2168A9FEDE43E643BD13062F8ECE",
               "08CBF8CFFEC207F5AC4E4F24BC447011FD8C79D25B344281FBFB4732D7058ED4",
               "779B2577C5C4BAED6657421448EA506BBF50F86BE363E0924127C4EA17A58BBE"
            ],
            "peers" : 2,
            "timeouts" : 0
         }
      },
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
info Object 正在提取的对象的地图以及正在提取的对象的状态。正在提取的分类账可以通过其序列号来标识; 分类账和其他正在提取的对象也可以通过它们的哈希来识别。

描述正在读取的字段可能会随时更改,恕不另行通知。以下字段可能包含在内:

Field Type Description
hash String 正在提取的项目的散列。
have_header Boolean 对于分类帐,该服务器是否已经获得分类账的抬头部分。
have_transactions Boolean 对于分类帐,该服务器是否已获得该分类账的交易部分。
needed_state_hashes Array of (Hash) Strings 此项目仍需要状态对象的哈希值。如果需要超过16个,则响应只包含前16个。
peers Number 拥有此商品的同行人数。
timeouts Number 获取此项目的次数导致超时(2.5秒)。

可能的错误:

  • 任何通用错误类型。

8.6.feature #

feature命令返回有关服务器了解的修改的信息,包括它们是否已启用以及服务器是否投票赞成修改过程中的这些修改。

您可以使用该feature命令临时配置服务器投票反对或赞成修正案。如果您重新启动服务器,此更改不会持续。要对修改投票进行持久更改,请使用该streamd.cfg文件。有关更多信息,请参阅配置修正投票。

feature方法是不能由非特权用户运行的管理员命令。

请求格式的示例:

{
  "id": "list_all_features",
  "command": "feature"
}
{
  "id": "reject_multi_sign",
  "command": "feature",
  "feature": "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
  "vetoed": true
}
{
    "method": "feature",
    "params": [
        {
            "feature": "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
            "vetoed": false
        }
    ]
}
#Syntax: feature [ [accept|reject]]
streamd feature 4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 accept

该请求包含以下参数:

Field Type Description
feature String (可选)修改的唯一标识,如十六进制; 或修正案的简称。如果提供,限制对一项修正案的回应。否则,答复将列出所有修正案。
vetoed Boolean (可选;除非另有feature说明,否则忽略)如果为true,则指示服务器对由指定的修改进行投票feature。如果为false,则指示服务器投票赞成修改。

 

注意:即使服务器当前不知道如何应用该修订,也可以通过在该feature字段中指定修订ID来配置服务器,以支持新的修订。例如,如果您计划尽快升级到支持修订的新streamd版本,可能需要执行此操作。

一个成功回应的例子:

{
  "id": "list_all_features",
  "status": "success",
  "type": "response",
  "result": {
    "features": {
      "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE": {
        "enabled": false,
        "name": "FeeEscalation",
        "supported": true,
        "vetoed": false
      },
      "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
        "enabled": false,
        "name": "MultiSign",
        "supported": true,
        "vetoed": false
      },
      "6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC": {
        "enabled": false,
        "name": "TrustSetAuth",
        "supported": true,
        "vetoed": false
      }
    }
  }
}
{
    "id": "reject_multi_sign",
    "status": "success",
    "type": "response",
    "result": {
        "features": {
            "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
                "enabled": false,
                "name": "MultiSign",
                "supported": true,
                "vetoed": true
            }
        }
    }
}
200 OK
{
    "result": {
        "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
            "enabled": false,
            "name": "MultiSign",
            "supported": true,
            "vetoed": false
        },
        "status": "success"
    }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
    "result": {
        "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
            "enabled": false,
            "name": "MultiSign",
            "supported": true,
            "vetoed": false
        },
        "status": "success"
    }
}

响应遵循标准格式,并且成功的结果包含作为JSON对象的修订映射。对象的键是修改ID。每个键的值是修改对象,用该ID来描述修订的状态。如果请求指定了一个 feature,则在应用请求中的任何更改之后,映射仅包含请求的修改对象。每个修改对象都有以下字段:

Field Type Description
enabled Boolean 目前是否在最新的分类帐中启用了此修正案。
name String (可能会被忽略)如果知道此修正案的人类可读名称。
supported Boolean 服务器是否知道如何应用此修正。如果此字段设置为false(服务器不知道如何应用此修订)并且enabled设置为true(此修订在最新的分类账中启用),则此修订可能会导致您的服务器被修改阻止。
vetoed Boolean 服务器是否被指示投票反对该修正案。

 

注意:在name一项修正案并不严格表明修正案做什么。该名称不保证在服务器之间唯一或一致。

可能的错误:

  • 任何通用错误类型
  • badFeature– feature指定的格式无效,或服务器不知道使用该名称的修订。

8.7.get_counts #

get_counts命令提供有关服务器运行状况的各种统计信息,主要是当前在内存中保存的不同类型的对象数量。

get_counts方法是不能由非特权用户运行的管理员命令

请求格式的示例:

{
    "id": 90,
    "command": "get_counts",
    "min_count": 100
}
{
    "method": "get_counts",
    "params": [
        {
            "min_count": 100
        }
    ]
}
#Syntax: get_counts [min_count]
streamd get_counts 100

该请求包含以下参数:

Field 类型 描述
min_count Number (Unsigned Integer) 只返回值至少为最高的字段。

一个成功回应的例子:

{
   "result" : {
      "AL_hit_rate" : 48.36725616455078,
      "HashRouterEntry" : 3048,
      "Ledger" : 46,
      "NodeObject" : 10417,
      "SLE_hit_rate" : 64.62035369873047,
      "STArray" : 1299,
      "STLedgerEntry" : 646,
      "STObject" : 6987,
      "STTx" : 4104,
      "STValidation" : 610,
      "Transaction" : 4069,
      "dbKBLedger" : 10733,
      "dbKBTotal" : 39069,
      "dbKBTransaction" : 26982,
      "fullbelow_size" : 0,
      "historical_perminute" : 0,
      "ledger_hit_rate" : 71.0565185546875,
      "node_hit_rate" : 3.808214902877808,
      "node_read_bytes" : 393611911,
      "node_reads_hit" : 1283098,
      "node_reads_total" : 679410,
      "node_writes" : 1744285,
      "node_written_bytes" : 794368909,
      "status" : "success",
      "treenode_cache_size" : 6650,
      "treenode_track_size" : 598631,
      "uptime" : "3 hours, 50 minutes, 27 seconds",
      "write_load" : 0
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "AL_hit_rate" : 48.36725616455078,
      "HashRouterEntry" : 3048,
      "Ledger" : 46,
      "NodeObject" : 10417,
      "SLE_hit_rate" : 64.62035369873047,
      "STArray" : 1299,
      "STLedgerEntry" : 646,
      "STObject" : 6987,
      "STTx" : 4104,
      "STValidation" : 610,
      "Transaction" : 4069,
      "dbKBLedger" : 10733,
      "dbKBTotal" : 39069,
      "dbKBTransaction" : 26982,
      "fullbelow_size" : 0,
      "historical_perminute" : 0,
      "ledger_hit_rate" : 71.0565185546875,
      "node_hit_rate" : 3.808214902877808,
      "node_read_bytes" : 393611911,
      "node_reads_hit" : 1283098,
      "node_reads_total" : 679410,
      "node_writes" : 1744285,
      "node_written_bytes" : 794368909,
      "status" : "success",
      "treenode_cache_size" : 6650,
      "treenode_track_size" : 598631,
      "uptime" : "3 hours, 50 minutes, 27 seconds",
      "write_load" : 0
   }
}

响应遵循标准格式。结果中包含的字段列表如有更改,恕不另行通知,但可能包含以下任何内容(除其他外):

Field 类型 描述
Transaction Number Transaction内存中的对象数量
Ledger Number 记忆中的分类账数量
uptime String 这台服务器一直运行的时间不间断。

对于大多数其他条目,该值指示当前在内存中的那种类型的对象的数量。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。

8.8.ledger_cleaner #

ledger_cleaner命令控制Ledger Cleaner,这是一个异步维护过程,可以查找和修复streamd分类账数据库中的损坏。

ledger_cleaner方法是不能由非特权用户运行的管理员命令。

请求格式的示例:

{
    "command": "ledger_cleaner",
    "max_ledger": 13818756,
    "min_ledger": 13818000,
    "stop": false
}

该请求包含以下参数:

Field Type Description
ledger Number (Ledger Sequence Number) (可选)如果提供,请仅检查并更正此特定分类帐。
max_ledger Number (Ledger Sequence Number) (可选)配置分类账清算器以检查序号等于或低于此的分类账。
min_ledger Number (Ledger Sequence Number) (可选)配置分类帐清理程序以检查序号等于或高于此数的分类帐。
full Boolean (可选)如果为true,则在指定的分类账中修订分类账状态对象和转账。默认为false。自动设置为true如果ledger提供。
fix_txns Boolean (可选)如果为真,则在指定的分类帐中进行正确的交易。覆盖,full如果提供。
check_nodes Boolean (可选)如果指定分类账中为真,正确的分类账状态对象。覆盖,full如果提供。
stop Boolean (可选)如果为true,请禁用帐簿清理器。

一个成功回应的例子:

200 OK
{
   "result" : {
      "message" : "Cleaner configured",
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
message String Cleaner configured 成功。

可能的错误:

  • 任何通用错误类型。
  • internal如果一个参数指定不正确。(这是一个错误;预期的错误代码是invalidParams。)

8.9.log_level #

log_level命令更改streamd服务器的日志记录详细程度,或者为日志消息的每个类别(称为分区)返回当前日志记录级别。

log_level方法是不能由非特权用户运行的管理员命令。

请求格式的示例:

{
    "id": "ll1",
    "command": "log_level",
    "severity": "debug",
    "partition": "PathRequest"
}
#Syntax: log_level [[partition] severity]
streamd log_level PathRequest debug

该请求包含以下参数:

Field Type Description
severity String (可选)设置日志记录的详细级别。有效值是,为了从最低到最高详细:fatalerrorwarninfodebug,和trace。如果省略,则返回所有类别的当前日志详细程度。
partition String (可选)除非severity提供,否则忽略。要修改哪个日志记录类别。如果省略,或者如果提供值base,则为所有类别设置日志记录级别。

成功回应的例子:

Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "levels" : {
         "AmendmentTable" : "Error",
         "Application" : "Error",
         "CancelOffer" : "Error",
         "Collector" : "Error",
         "CreateOffer" : "Error",
         "DeferredCredits" : "Error",
         "FeeVote" : "Error",
         "InboundLedger" : "Error",
         "JobQueue" : "Error",
         "Ledger" : "Error",
         "LedgerCleaner" : "Error",
         "LedgerConsensus" : "Error",
         "LedgerEntrySet" : "Error",
         "LedgerMaster" : "Error",
         "LedgerTiming" : "Error",
         "LoadManager" : "Error",
         "LoadMonitor" : "Error",
         "NetworkOPs" : "Error",
         "NodeObject" : "Error",
         "OrderBookDB" : "Error",
         "Overlay" : "Error",
         "PathRequest" : "Debug",
         "Payment" : "Error",
         "Peer" : "Error",
         "PeerFinder" : "Error",
         "Protocol" : "Error",
         "RPC" : "Error",
         "RPCErr" : "Error",
         "RPCHandler" : "Error",
         "RPCManager" : "Error",
         "Resolver" : "Error",
         "Resource" : "Error",
         "StreamCalc" : "Error",
         "SHAMap" : "Error",
         "SHAMapStore" : "Error",
         "SNTPClient" : "Error",
         "STAmount" : "Error",
         "SerializedLedger" : "Error",
         "Server" : "Error",
         "SetAccount" : "Error",
         "SetTrust" : "Error",
         "TaggedCache" : "Error",
         "TransactionAcquire" : "Error",
         "TransactionEngine" : "Error",
         "UVL" : "Error",
         "UniqueNodeList" : "Error",
         "Validations" : "Error",
         "WALCheckpointer" : "Error",
         "WebSocket" : "Trace",
         "base" : "Error"
      },
      "status" : "success"
   }
}

响应遵循标准格式。响应格式取决于请求是否指定了 severity。如果是,则日志级别会更改,并且成功的结果不会包含其他字段。

否则,请求包含以下字段:

Field 类型 描述
level Object 每个类别的当前日志级别。此类别列表如有更改,恕不另行通知。您可以将字段名称用作partition请求此命令的值。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。

8.10.validation_create #

使用该validation_create命令生成Streamd校验器的密钥。与wallet_propose命令类似,此命令不会进行实际更改,但只会生成一组具有适当格式的键。

validation_create方法是不能由非特权用户运行的管理员命令。

请求格式的示例:

{
    "id": 0,
    "command": "validation_create",
    "secret": "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE"
}
{
    "method": "validation_create",
    "params": [
        {
            "secret": "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE"
        }
    ]
}
#Syntax: validation_create [secret]
streamd validation_create "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE"

该请求包含以下参数:

Field 类型 描述
secret String (可选)使用此值作为种子来生成凭证。同一个秘密总是生成相同的凭证。您可以提供RFC-1751格式或Stream的base58格式的种子。如果省略,则生成一个随机种子。

注意:验证器的安全性取决于你的种子的熵。除非产生强大的随机性,否则不要将秘密值用于实际商业目的。Stream建议secret在第一次生成新凭证时省略。

一个成功回应的例子:

{
   "result" : {
      "status" : "success",
      "validation_key" : "FAWN JAVA JADE HEAL VARY HER REEL SHAW GAIL ARCH BEN IRMA",
      "validation_public_key" : "n9Mxf6qD4J55XeLSCEpqaePW4GjoCR5U1ZeGZGJUCNe3bQa4yQbG",
      "validation_seed" : "ssZkdwURFMBXenJPbrpE14b6noJSu"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "status" : "success",
      "validation_key" : "FAWN JAVA JADE HEAL VARY HER REEL SHAW GAIL ARCH BEN IRMA",
      "validation_public_key" : "n9Mxf6qD4J55XeLSCEpqaePW4GjoCR5U1ZeGZGJUCNe3bQa4yQbG",
      "validation_seed" : "ssZkdwURFMBXenJPbrpE14b6noJSu"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field Type Description
validation_key String 这些验证凭证的密钥,采用RFC-1751格式。
validation_public_key String 这些验证凭证的公钥,采用Stream的base58编码字符串格式。
validation_seed String 这些验证凭证的秘密密钥,采用Stream的base58编码字符串格式。

可能的错误:

  • 任何通用错误类型。
  • badSeed – 请求提供了无效的种子值。这通常意味着种子值似乎是不同格式的有效字符串,例如帐户地址或验证公钥。

8.11.logrotate #

logrotate命令关闭并重新打开日志文件。这旨在帮助Linux文件系统上的日志循环。

logrotate方法是不能由非特权用户运行的管理员命令

请求格式的示例:

{
    "id": "lr1",
    "command": "logrotate"
}
streamd logrotate

该请求不包含参数。

一个成功回应的例子:

200 OK
{
   "result" : {
      "message" : "The log file was closed and reopened.",
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "message" : "The log file was closed and reopened.",
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
message String 成功时,包含该消息 The log file was closed and reopened.

可能的错误:

  • 任何通用错误类型。

8.12.validation_seed #

validation_seed命令临时设置streamd用于签署验证的秘密值。重新启动服务器时,此值将根据配置文件进行重置。

validation_seed请求是一个不能由非特权用户运行的管理命令

请求格式的示例:

{
    "id": "set_seed_1",
    "command": "validation_seed",
    "secret": "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE"
}
#Syntax: validation_seed [secret]
streamd validation_seed 'BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE'

该请求包含以下参数:

Field 类型 描述
secret String (可选)如果存在,则使用此值作为验证密钥对的秘密值。有效格式包括base58RFC-1751或作为密码。如果省略,则禁止向网络提出验证。

一个成功回应的例子:

200 OK
{
   "result" : {
      "status" : "success",
      "validation_key" : "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE",
      "validation_public_key" : "n9Jx6RS6zSgqsgnuWJifNA9EqgjTKAywqYNReK5NRd1yLBbfC3ng",
      "validation_seed" : "snjJkyBGogTem5dFGbcRaThKq2Rt3"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "status" : "success",
      "validation_key" : "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE",
      "validation_public_key" : "n9Jx6RS6zSgqsgnuWJifNA9EqgjTKAywqYNReK5NRd1yLBbfC3ng",
      "validation_seed" : "snjJkyBGogTem5dFGbcRaThKq2Rt3"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
validation_key String (如果提议禁用,则省略)这些验证凭证的密钥,采用RFC-1751格式。
validation_public_key String (如果建议禁用,则省略)这些验证凭证的公钥,采用Stream的base58编码字符串格式。
validation_seed String (如果提议禁用,则省略)这些验证凭证的秘密密钥,采用Stream的base58编码字符串格式。

可能的错误:

  • 任何通用错误类型。
  • badSeed – 请求提供了无效的秘密值。这通常意味着秘密值似乎是不同格式的有效字符串,例如帐户地址或验证公钥。

8.13.peers #

peers命令返回streamd当前连接到该服务器的所有其他服务器的列表,包括有关其连接和同步状态的信息。

peers请求是一个不能由非特权用户运行的管理命令!

请求格式的示例:

{
    "id": 2,
    "command": "peers"
}
streamd peers

该请求不包含其他参数。

一个成功回应的例子:

{
  "id": 2,
  "status": "success",
  "type": "response",
  "result": {
    "cluster": {},
    "peers": [
      {
        "address": "1.1.1.1:51235",
        "complete_ledgers": "18828845 - 18828973",
        "latency": 99,
        "ledger": "50A2577CE6EB8A92847C443BDA45F5C5F0A22B9C6F4B47DBA0C12BDA75001D01",
        "load": 60,
        "public_key": "n9LDBRoqPYY7RdkNXbX1dqZXVtUKcSqzs2CZPhTH7ymA9X7Xzmpj",
        "uptime": 99625,
        "version": "streamd-0.30.1-rc4"
      }
    ]
  }
}
{
   "result" : {
      "cluster" : {},
      "peers" : [
         {
            "address" : "1.1.1.1:51235",
            "complete_ledgers" : "18828830 - 18828957",
            "latency" : 137,
            "ledger" : "9447480E351221123B1A454356435A66C188D9794B0197A060637E19F074B421",
            "load" : 54,
            "public_key" : "n9LDBRoqPYY7RdkNXbX1dqZXVtUKcSqzs2CZPhTH7ymA9X7Xzmpj",
            "uptime" : 99566,
            "version" : "streamd-0.30.1-rc4"
         }
      ],
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "cluster" : {},
      "peers" : [
         {
            "address" : "5.1.1.1:51235",
            "complete_ledgers" : "18850253 - 18851277",
            "latency" : 63,
            "ledger" : "592C723DDBB1C5119F0D8288894060C83C8C2975A061D7C9971427D6798098F5",
            "load" : 36,
            "public_key" : "n9MT5EjnV912KGuBUqPs4tpdhzMPGcnDBrTuWkD9sWQHJ1kDcUcz",
            "uptime" : 51,
            "version" : "streamd-0.30.1"
         }
      ],
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含带有以下字段的JSON对象:

Field 类型 描述
cluster Object streamd如果配置为群集,则同一群集中的其他服务器的摘要。
peers Array 同级对象数组。

cluster对象的每个字段都是该streamd服务器的标识密钥对的公钥。(这与服务器pubkey_nodeserver_info命令中返回的值相同。)该字段的内容是包含以下字段的对象:

Field 类型 描述
tag String 配置文件中定义的此集群成员的显示名称。
fee Number (可以省略)此集群成员应用于交易成本的负荷乘数
age Number 自该群集成员上次群集报告以来的秒数。

peers数组的每个成员都是具有以下字段的对等对象:

Field Type Description
address String 该对等体所连接的IP地址和端口
cluster Boolean (可以省略)如果true当前服务器和对等服务器是同一个streamd群集的一部分。
name String (可以省略)如果对等体是同一个群集的一部分,则这是该配置文件中定义的该服务器的显示名称。
complete_ledgers String 范围表达式指示对等streamd体可用的分类帐版本的序列号
inbound Boolean (可以省略)如果true,对等方正在连接到本地服务器。
latency Number 节点的网络延迟(以毫秒为单位)
ledger String 节点最近关闭的分类账的散列
load Number 衡量节点服务器加载到本地服务器的负载量。较大的数字表示更多的负载。(负载测量的单位没有正式定义。)
protocol String (可能会被忽略)节点正在使用的协议版本,如果与本地服务器不一样。
public_key String (可以省略)可用于验证节点消息完整性的公钥。这与用于验证的密钥不同,但它遵循相同的格式。
sanity String (可以省略)该对等体是否遵循与当前服务器相同的规则和总账顺序。值insane可能表示对等体是并行网络的一部分。该值unknown表示当前服务器不确定对等体是否兼容。
status String (可能省略)来自节点的最新状态消息。可能是connectingconnectedmonitoringvalidating,或shutting
uptime Number 您的streamd服务器连续连接到此对等设备的秒数
version string (可能省略)streamd节点服务器的版本号

可能的错误:

  • 任何通用错误类型。

9.便利功能 #

streamd服务器还提供了一些命令纯粹是为了方便。

9.1.ping #

ping命令返回一个确认,以便客户端可以测试连接状态和延迟。

请求格式的示例:

{
    "id": 1,
    "command": "ping"
}
{
    "method": "ping",
    "params": [
        {}
    ]
}
#Syntax: ping
streamd ping

该请求不包含参数。

一个成功回应的例子:

{
  "id": 1,
  "result": {},
  "status": "success",
  "type": "response"
}
200 OK
{
    "result": {
        "status": "success"
    }
}

响应遵循标准格式,成功的结果不包含字段。客户端可以测量从请求到响应的往返时间作为延迟。

可能的错误

  • 任何通用错误类型。

9.2.random #

random命令提供一个随机数,用作客户端产生随机数的熵源。

请求格式的示例:

{
    "id": 1,
    "command": "random"
}
{
    "method": "random",
    "params": [
        {}
    ]
}
#Syntax: random
streamd random

该请求不包含参数。

一个成功回应的例子:

{
  "id": 1,
  "result": {
    "random": "02869CBC0E17C3039944B24FD1932E65B8E0A4B99F80CBCDC39AE79A2356CEF9"
  },
  "status": "success",
  "type": "response"
}
200 OK
{
  "result": {
    "random": "02869CBC0E17C3039944B24FD1932E65B8E0A4B99F80CBCDC39AE79A2356CEF9"
  },
  "status": "success"
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
random String 随机的256位十六进制值。

可能的错误:

  • 任何通用错误类型。
  • internal – 发生了一些内部错误,可能与随机数发生器有关。

9.3.json #

json方法是运行其他命令的代理,并将该命令的参数作为JSON值接受。它是Commandline客户端专用的,用于指定参数的命令行语法不足或不合需要的情况。

请求格式的示例:

# Syntax: json method json_stanza
streamd -q json ledger_closed '{}'

一个成功回应的例子:

{
   "result" : {
      "ledger_hash" : "8047C3ECF1FA66326C1E57694F6814A1C32867C04D3D68A851367EE2F89BBEF3",
      "ledger_index" : 390308,
      "status" : "success"
   }
}

响应遵循标准格式,无论哪个字段适合于所执行的命令类型。

9.4.connect #

connect命令强制streamd服务器连接到特定的对等streamd服务器。

connect请求是一个不能由非特权用户运行的管理命令!

请求格式的示例:

{
    "command": "connect",
    "ip": "192.168.145.88",
    "port": 51235
}
{
    "method": "connect",
    "params": [
        {
            "ip": "192.168.145.88",
            "port": 51235
        }
    ]
}
#Syntax: connect ip [port]
streamd connect 192.168.145.88 51235

该请求包含以下参数:

Field 类型 描述
ip String 要连接的服务器的IP地址
port Number (可选)连接时使用的端口号。默认为6561。

一个成功回应的例子:

{
   "result" : {
      "message" : "connecting",
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "message" : "connecting",
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
message String connecting,如果命令成功。

可能的错误:

  • 任何通用错误类型。
  • invalidParams – 一个或多个字段指定不正确,或缺少一个或多个必填字段。
  • 无法以独立模式连接 – 在独立模式下禁用与网络相关的命令。

9.5.stop #

优雅地关闭服务器。

stop请求是一个不能由非特权用户运行的管理命令!

请求格式的示例:

{
    "id": 0,
    "command": "stop"
}
{
    "method": "stop",
    "params": [
        {}
    ]
}
streamd stop

该请求不包含参数。

一个成功回应的例子:

{
   "result" : {
      "message" : "stream server stopping",
      "status" : "success"
   }
}
Loading: "/etc/streamd.cfg"
Connecting to 127.0.0.1:5005
{
   "result" : {
      "message" : "stream server stopping",
      "status" : "success"
   }
}

响应遵循标准格式,成功结果包含以下字段:

Field 类型 描述
message String stream server stopping 成功。

可能的错误:

  • 任何通用错误类型。
Help Guide Powered by Documentor
Suggest Edit