js-apis

介绍

StreamAPI是STM Ledger的官方客户端库。目前,StreamAPI仅适用于JavaScript。使用StreamAPI,您可以:

  • 从STM分类帐历史中查询交易
  • 无需连接任何服务器即可安全签署交易
  • 将交易提交到STM分类帐,包括付款,订单,设置更改和其他类型
  • 生成新的STM分类帐地址
  • … 等等。

StreamAPI只提供接入验证确定的交易数据。

样板

使用以下样板代码使用StreamAPI封装您的自定义代码。

<script>
  var remote = new stream.Remote({
    trace: false,
    trusted: true,
    local_signing: true,
    connection_offest: 60,
    servers: [{
        host: 'node.labs.stream',
        port: 443,
        secure: true
      }
    ]
  });

  remote.connect(function () {
    remote.requestServerInfo(function (err, res) {
      if (!err) {
        document.getElementById('text').innerHTML = JSON.stringify(res);
      }
    })
  });
</script>

StreamAPI被设计为在Node.js中使用,本文档中的所有代码片段假定您已经用这个样板包围了它们。

基本类型

地址

"vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"

每个STM分类帐帐户都有一个地址,该地址是该帐户公钥的散列的base58编码。STM分类帐地址始终以小写字母v开头。

账户序列号

每个STM分类帐帐户都有一个序号,用于保持交易顺序。每笔交易都必须有一个序列号。只有在发送它的账户中具有下一个序列号时才能执行交易。这可以防止一次事务执行两次,并且事务执行不按顺序执行。序列号从1账户开始的每个交易开始并递增。

货币

货币表示为3个字符的货币代码或40个字符的大写十六进制字符串。我们建议仅使用大写的ISO 4217货币代码。信任线上不允许使用字符串“STM”,因为它是为STM分类帐本币设置的。以下字符:所有大写字母和小写字母,数字,以及符号?!@#$%^&*<>(){}[],和|

Value

Value是表示为一个十进制字符串的货币的量。注意:JavaScript的原生数字格式没有足够的精度来表示所有值。STM与其他货币的精度不同。

STM在小数点后有6位有效数字。换句话说,STM不能被分成小于0.000001(1e-6)的正值。STM的最大值为100000000000(1e11)。

非STM值有16位精度的十进制数字,最大值为9999999999999999e80。最小的正非STM值是1e-81

Amount

示例:

{
  "currency": "USD",
  "counterparty": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
  "value": "100"
}

STM amount示例:

{
  "currency": "STM",
  "value": "400"
}

Amount是表示货币,对该货币的量,并在持有该值的trustline对方的数据结构。对于STM,没有交易对手。

一个宽松的amount允许所有货币将被省略的对手。如果交易对手未在交易规格内指定金额,则任何交易对手均可用于该金额。

一个宽松的amount允许使用或将被省略的这两个交易对方和值。

余额可具有负值的量。

Name Type Description
currency currency 用于表示货币的三字符代码或十六进制字符串
counterparty address 可选项 欠款或欠款的帐户的STM地址(如果currency是“STM”则省略)
value value 可选 货币数量,表示为保留浮点精度的字符串

API方法

connect

connect(): Promise<void>

告诉StreamAPI实例连接到它的服务器。

参数

此方法没有参数。

返回值

无返回值,建立一个连接。

disconnect

disconnect(): Promise<void>

告诉StreamAPI实例从其Stream的服务器断开连接。

参数:

此方法没有参数。

返回值:

无返回,销毁一个连接。

isConnected

isConnected(): boolean

检查StreamAPI实例是否连接到Stream的服务器。

参数:

此方法没有参数。

返回值:

true 已成功连接

false 未连接

示例:

return remote.isConnected();

true

requestServerInfo

requestServerInfo(): Promise<object>

获取有关StreamAPI实例连接到的服务器的状态信息。

参数:

此方法没有参数。

Name Type Description
buildVersion string 正在运行的Stream版本的版本号。
completeLedgers string 范围表达式,指示数据库中本地STM的分类帐版本的序列号。可能是不相交的序列,例如“2500-5000,32570-7695432”。
hostID string 在管理请求上,返回运行streamd实例的服务器的主机名; 否则,返回一个唯一的四个字母的单词。
ioLatencyMs number 等待执行I / O操作的时间量(以毫秒为单位)。如果这个数字不是很低,那么Stream的服务器可能有严重的负载问题。
lastClose object 有关上次服务器关闭分类帐的信息。
lastClose.convergeTimeS number 花费在几秒钟内达成最后一个分类帐的共识所需的时间。
lastClose. proposers integer 参与分类账结算的可信验证人数。
loadFactor number 服务器当前执行的加载因子,作为基本事务处理费用的乘数。负载因子由单个服务器的负载因子,簇的负载因子和整个网络的负载因子中的最高者决定。
peers integer 该节点当前连接到多少个其他Stream服务器。
pubkeyNode string 用于验证此节点以进行内部通信的公钥; 该密钥由服务器第一次启动时自动生成。(如果删除,节点可以创建一对新的密钥。)
serverState string 指示服务器参与网络的程度的字符串。有关更多信息,请参阅可能的服务器状态
validatedLedger object 关于序号最高的完整验证分类帐的信息(最新)。
validatedLedger. age integer 自分类帐关闭以来的时间,以秒为单位。
validatedLedger.baseFeeSTM value 基本费用,在STM。这可能以科学记数法表示,如1e-05为0.00005。
validatedLedger.hash string 分类帐的唯一散列,作为大写十六进制字符串。
validatedLedger.reserve_base_stm value 每个账户需要保留的最小STM金额。
validatedLedger.reserve_inc_stm value 为账户在分类帐中负责的每个对象添加的STM金额。
validation_Quorum number 验证分类帐版本所需的可信验证的最小数量。有些情况可能会导致服务器需要更多验证。

示例:

return remote.requestServerInfo()
{
    "info": {
        "build_version": "0.1.0", 
        "complete_ledgers": "2-471008", 
        "hostid": "GALE", 
        "io_latency_ms": 1, 
        "last_close": {
            "converge_time_s": 2.001, 
            "proposers": 4
        }, 
        "load_factor": 1, 
        "peers": 4, 
        "pubkey_node": "n9KBjT9uvPfjHmNaMpDKgRZhFTghK7beHEDJcrTNhowJyiGvvgUw", 
        "server_state": "proposing", 
        "validated_ledger": {
            "age": 9, 
            "base_fee_stm": 0.00001, 
            "hash": "2DDA1371CC8BA00F31CBAC7A1BA6E037BD3275CCA00921ACB02A818FCB335A98", 
            "reserve_base_stm": 1, 
            "reserve_inc_stm": 0.1, 
            "seq": 471008
        }, 
        "validation_quorum": 3
    }
}

 

requestAccountCurrencies

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

请求格式示例:

remote.connect(function() {
	remote.requestAccountCurrencies({
			account: 'vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr'
		}, function(err, res) {
			if (!err) {
				document.getElementById('text').innerHTML = JSON.stringify(res);
			}
		}
	)
});

该请求包含以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。

响应格式实例:

{
    "ledger_current_index": 474260, 
    "receive_currencies": [ 
        "BTC",
        "CNY",
        "ETH"
     ], 
    "send_currencies": [
        "CNY"
     ], 
    "validated": true
}

requestAccountInfo

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

requestAccountInfo请求的示例:

remote.connect(function() {
    remote.requestAccountInfo({
            account: 'vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr'
        }, function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

该请求包含以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。

一个成功回应的例子:

{
    "account_data": {
        "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
        "Balance": "999999988", 
        "Flags": 0, 
        "LedgerEntryType": "AccountRoot", 
        "OwnerCount": 0, 
        "PreviousTxnID": "0D4E960BC9E517077EAF90F487F3A3D5F6D3029BA7FF68A31E3B2DFCD78EB3F6", 
        "PreviousTxnLgrSeq": 269696, 
        "Sequence": 2, 
        "index": "EF9FA3DDA9E716BFF74DA790342FA08894FECB9F60005DA0971EB0D01E376C7C"
    }, 
    "ledger_current_index": 474339, 
    "validated": true
}

结果包含请求的帐户,其数据以及它所应用的分类帐,如下所示:

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 此事务的序列号。

requestAccountOffers

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

请求格式的示例:

remote.connect(function() {
    remote.requestAccountOffers({
            account: 'vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr',
      ledger: 'current'
        }, function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

请求可以包含以下参数:

Field 类型 描述
account String 该帐户的唯一标识符,通常是帐户的地址。
ledger Unsigned integer, or String (不推荐使用,可选)要使用的分类帐版本的唯一标识符,例如分类帐序列号,散列或诸如“已验证”的快捷方式。
ledger_index (可选) Ledger Index (可选,默认为current)要使用的分类帐的序列号,或“current”,“closed”或“validated”以动态选择分类帐。(请参阅指定分类帐)

一个成功回应的例子:

{
  "id": 2,
  "result": {
    "account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
    "ledger_current_index": 474401,
    "offers": [{
      "flags": 0,
      "seq": 234,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1"
      },
      "taker_pays": "1000000"
    },{
      "flags": 0,
      "seq": 275,
      "taker_gets": {
        "currency": "CNY",
        "issuer": "vJqt7ir44V6RyWwxxEgD87sEfStdwCahZz",
        "value": "1.85"
      },
      "taker_pays": "1000000"
    }],
    "validated": false
  }
}

成功结果包含以下字段:

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以来的秒数。另请参阅:优惠到期。

requestAccountTx

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

请求格式的示例:

remote.connect(function() {
    remote.requestAccountTx({
            account: 'vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr',
            ledger: 'current',
            ledger_index_min: -1,
            ledger_index_max: -1,
	        limit: 2
        }, function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

该请求包含以下参数:

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) 来自之前分页响应的价值。在该响应停止的情况下继续检索数据。即使服务器的可用分类账范围发生变化,该值也是稳定的。

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

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

一个成功回应的例子:

{
    "account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
    "ledger_index_max": 474440, 
    "ledger_index_min": 2, 
    "limit": 2, 
    "transactions": [
        {
            "meta": {
                "AffectedNodes": [
                    {
                        "CreatedNode": {
                            "LedgerEntryType": "AccountRoot", 
                            "LedgerIndex": "25CD24C151EB51100BB7A5C239F70405746EDF7C0295B8374347518F5918662B", 
                            "NewFields": {
                                "Account": "vGuHMY2tAZ2WJWRFVuKVyngPdZjMvr5HBa", 
                                "Balance": "3000000000", 
                                "Sequence": 1
                            }
                        }
                    }, 
                    {
                        "ModifiedNode": {
                            "FinalFields": {
                                "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
                                "Balance": "999999988", 
                                "Flags": 0, 
                                "OwnerCount": 0, 
                                "Sequence": 2
                            }, 
                            "LedgerEntryType": "AccountRoot", 
                            "LedgerIndex": "EF9FA3DDA9E716BFF74DA790342FA08894FECB9F60005DA0971EB0D01E376C7C", 
                            "PreviousFields": {
                                "Balance": "4000000000", 
                                "Sequence": 1
                            }, 
                            "PreviousTxnID": "ED1915F0F4293F57D0A5376FFF9B1047CB7B01ED1686EBA4C96B9123880FC600", 
                            "PreviousTxnLgrSeq": 199583
                        }
                    }
                ], 
                "TransactionIndex": 0, 
                "TransactionResult": "tesSUCCESS", 
                "delivered_amount": "3000000000"
            }, 
            "tx": {
                "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
                "Amount": "3000000000", 
                "Destination": "vGuHMY2tAZ2WJWRFVuKVyngPdZjMvr5HBa", 
                "Fee": "12", 
                "Flags": 2147483648, 
                "LastLedgerSequence": 269699, 
                "Sequence": 1, 
                "SigningPubKey": "027B3201436842B04147A3651239DA5223EF8C8CB821853691A231626338A0A183", 
                "TransactionType": "Payment", 
                "TxnSignature": "3045022100EA01E47A11835878E74B4C5AE2340D7BBE9231DB974C6F80ADB92DD9FA94392D022004FF0BE81FBA60452E4027A487085DEA351C53B6A80FA7AD648D9D185582753D", 
                "date": 582976790, 
                "hash": "0D4E960BC9E517077EAF90F487F3A3D5F6D3029BA7FF68A31E3B2DFCD78EB3F6", 
                "inLedger": 269696, 
                "ledger_index": 269696
            }, 
            "validated": true
        }, 
        {
            "meta": {
                "AffectedNodes": [
                    {
                        "ModifiedNode": {
                            "FinalFields": {
                                "Account": "vpgedsRGPuSrqMekwD8cAEahdLL1HaJf2P", 
                                "Balance": "44639962097312", 
                                "Flags": 0, 
                                "OwnerCount": 0, 
                                "Sequence": 200
                            }, 
                            "LedgerEntryType": "AccountRoot", 
                            "LedgerIndex": "3352A7D02FFE55AB131B41C1930ACE3B253D12A1E3E6687DCAB186EC4B6729A4", 
                            "PreviousFields": {
                                "Balance": "44643962097324", 
                                "Sequence": 199
                            }, 
                            "PreviousTxnID": "4DDEBE3D7A422F0178AF210EEE2318C89ADA421DF0B0336F5CFA8C5A6A4419C3", 
                            "PreviousTxnLgrSeq": 199582
                        }
                    }, 
                    {
                        "CreatedNode": {
                            "LedgerEntryType": "AccountRoot", 
                            "LedgerIndex": "EF9FA3DDA9E716BFF74DA790342FA08894FECB9F60005DA0971EB0D01E376C7C", 
                            "NewFields": {
                                "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
                                "Balance": "4000000000", 
                                "Sequence": 1
                            }
                        }
                    }
                ], 
                "TransactionIndex": 0, 
                "TransactionResult": "tesSUCCESS", 
                "delivered_amount": "4000000000"
            }, 
            "tx": {
                "Account": "vpgedsRGPuSrqMekwD8cAEahdLL1HaJf2P", 
                "Amount": "4000000000", 
                "Destination": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
                "Fee": "12", 
                "Flags": 2147483648, 
                "LastLedgerSequence": 199591, 
                "Memos": [
                    {
                        "Memo": {
                            "MemoData": "6769766561776179", 
                            "MemoType": "6D656D6F"
                        }
                    }
                ], 
                "Sequence": 199, 
                "SigningPubKey": "03681CB7F2FD82FB8F0B4C6962DE3D8AF8C4B86D8BD6D0B3C12AA2C218DA16973B", 
                "TransactionType": "Payment", 
                "TxnSignature": "304402207DF2976B6D1F287B93962C6699F2F598BACD15F1F56ED498A418544A58C782A802201F160E2FF2616A8C1C5636D75BCE3B07C0C5642D49275E0DC00134CD4DD3807C", 
                "date": 581599830, 
                "hash": "ED1915F0F4293F57D0A5376FFF9B1047CB7B01ED1686EBA4C96B9123880FC600", 
                "inLedger": 199583, 
                "ledger_index": 199583
            }, 
            "validated": true
        }
    ]
}

requestLedger

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

请求格式的示例:

remote.connect(function() {
    remote.requestLedger({
            ledger_index: 'validated',
            expand: false,
            transactions: false
        }, function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

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

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。除非您请求交易或帐户,否则将被忽略。

一个成功回应的例子:

{
    "ledger": {
        "accepted": true, 
        "account_hash": "EC0E29536BF74A49CF6938E0015E46D29E37A4B6318DF393715DD560A6707BDB", 
        "close_time": 587029830, 
        "close_time_human": "2018-Aug-08 07:50:30", 
        "close_time_resolution": 10, 
        "closed": true, 
        "hash": "FD1367C2EF594179512C8ED5BCF40281FF3759C558095151A755466EF2A2E4B7", 
        "ledger_hash": "FD1367C2EF594179512C8ED5BCF40281FF3759C558095151A755466EF2A2E4B7", 
        "ledger_index": "475543", 
        "parent_hash": "DA7FFEF0608CCB575A16C18705F831439F1DA52BA7C0F1848100F51F23A6F7C6", 
        "seqNum": "475543", 
        "totalCoins": "99999999999874996", 
        "total_coins": "99999999999874996", 
        "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000", 
        "transactions": [ ]
    }, 
    "ledger_index": 475543, 
    "validated": true
}

成功结果包含有关分类账的信息,包括以下字段:

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。需要费用修正。

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,该交易可能发送或破坏。

requestLedgerHash

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

请求格式的示例:

remote.connect(function() {
    remote.requestLedgerHash( function(err, res) {
        if (!err) {
            document.getElementById('text').innerHTML = JSON.stringify(res);
        }
    })
});

该方法不接受任何参数。

一个成功回应的例子:

{"ledger_hash":"62C0102B55FBCCF268297E099EFF468206F92C5A19B7A96457CCD9253C26CAC6","ledger_index":475556}

成功结果包含以下字段:

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

requestLedgerCurrent

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

请求格式的示例:

remote.connect(function() {
    remote.requestLedgerCurrent( function(err, res) {
        if (!err) {
            document.getElementById('text').innerHTML = JSON.stringify(res);
        }
    })
});

该请求不包含参数。

一个成功回应的例子:

{"ledger_current_index":478835}

 

requestTx

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

requestTx(hash, callback)

请求格式的示例:

remote.connect(function() {
    remote.requestTx("0D4E960BC9E517077EAF90F487F3A3D5F6D3029BA7FF68A31E3B2DFCD78EB3F6", function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

该请求包含以下参数:

Field Type Description
hash String 交易的256位散列,十六进制表示。

一个成功回应的例子:

{
    "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
    "Amount": "3000000000", 
    "Destination": "vGuHMY2tAZ2WJWRFVuKVyngPdZjMvr5HBa", 
    "Fee": "12", 
    "Flags": 2147483648, 
    "LastLedgerSequence": 269699, 
    "Sequence": 1, 
    "SigningPubKey": "027B3201436842B04147A3651239DA5223EF8C8CB821853691A231626338A0A183", 
    "TransactionType": "Payment", 
    "TxnSignature": "3045022100EA01E47A11835878E74B4C5AE2340D7BBE9231DB974C6F80ADB92DD9FA94392D022004FF0BE81FBA60452E4027A487085DEA351C53B6A80FA7AD648D9D185582753D", 
    "date": 582976790, 
    "hash": "0D4E960BC9E517077EAF90F487F3A3D5F6D3029BA7FF68A31E3B2DFCD78EB3F6", 
    "inLedger": 269696, 
    "ledger_index": 269696, 
    "meta": {
        "AffectedNodes": [
            {
                "CreatedNode": {
                    "LedgerEntryType": "AccountRoot", 
                    "LedgerIndex": "25CD24C151EB51100BB7A5C239F70405746EDF7C0295B8374347518F5918662B", 
                    "NewFields": {
                        "Account": "vGuHMY2tAZ2WJWRFVuKVyngPdZjMvr5HBa", 
                        "Balance": "3000000000", 
                        "Sequence": 1
                    }
                }
            }, 
            {
                "ModifiedNode": {
                    "FinalFields": {
                        "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
                        "Balance": "999999988", 
                        "Flags": 0, 
                        "OwnerCount": 0, 
                        "Sequence": 2
                    }, 
                    "LedgerEntryType": "AccountRoot", 
                    "LedgerIndex": "EF9FA3DDA9E716BFF74DA790342FA08894FECB9F60005DA0971EB0D01E376C7C", 
                    "PreviousFields": {
                        "Balance": "4000000000", 
                        "Sequence": 1
                    }, 
                    "PreviousTxnID": "ED1915F0F4293F57D0A5376FFF9B1047CB7B01ED1686EBA4C96B9123880FC600", 
                    "PreviousTxnLgrSeq": 199583
                }
            }
        ], 
        "TransactionIndex": 0, 
        "TransactionResult": "tesSUCCESS", 
        "delivered_amount": "3000000000"
    }, 
    "validated": true
}

 

requestTransactionEntry

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

requestTransactionEntry(hash, ledgerHash, callback)

请求格式的示例:

remote.connect(function() {
    remote.requestTransactionEntry("0D4E960BC9E517077EAF90F487F3A3D5F6D3029BA7FF68A31E3B2DFCD78EB3F6",269696, function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

该请求包含以下参数:

Field Type Description
ledgerhash String (可选)要使用的分类帐版本的20字节十六进制字符串。(请参阅指定分类帐)
hash String 您正在查找的交易的唯一散列

一个成功回应的例子:

{
    "ledger_index": 269696, 
    "metadata": {
        "AffectedNodes": [
            {
                "CreatedNode": {
                    "LedgerEntryType": "AccountRoot", 
                    "LedgerIndex": "25CD24C151EB51100BB7A5C239F70405746EDF7C0295B8374347518F5918662B", 
                    "NewFields": {
                        "Account": "vGuHMY2tAZ2WJWRFVuKVyngPdZjMvr5HBa", 
                        "Balance": "3000000000", 
                        "Sequence": 1
                    }
                }
            }, 
            {
                "ModifiedNode": {
                    "FinalFields": {
                        "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
                        "Balance": "999999988", 
                        "Flags": 0, 
                        "OwnerCount": 0, 
                        "Sequence": 2
                    }, 
                    "LedgerEntryType": "AccountRoot", 
                    "LedgerIndex": "EF9FA3DDA9E716BFF74DA790342FA08894FECB9F60005DA0971EB0D01E376C7C", 
                    "PreviousFields": {
                        "Balance": "4000000000", 
                        "Sequence": 1
                    }, 
                    "PreviousTxnID": "ED1915F0F4293F57D0A5376FFF9B1047CB7B01ED1686EBA4C96B9123880FC600", 
                    "PreviousTxnLgrSeq": 199583
                }
            }
        ], 
        "TransactionIndex": 0, 
        "TransactionResult": "tesSUCCESS"
    }, 
    "tx_json": {
        "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
        "Amount": "3000000000", 
        "Destination": "vGuHMY2tAZ2WJWRFVuKVyngPdZjMvr5HBa", 
        "Fee": "12", 
        "Flags": 2147483648, 
        "LastLedgerSequence": 269699, 
        "Sequence": 1, 
        "SigningPubKey": "027B3201436842B04147A3651239DA5223EF8C8CB821853691A231626338A0A183", 
        "TransactionType": "Payment", 
        "TxnSignature": "3045022100EA01E47A11835878E74B4C5AE2340D7BBE9231DB974C6F80ADB92DD9FA94392D022004FF0BE81FBA60452E4027A487085DEA351C53B6A80FA7AD648D9D185582753D", 
        "hash": "0D4E960BC9E517077EAF90F487F3A3D5F6D3029BA7FF68A31E3B2DFCD78EB3F6", 
        "inLedger": 269696, 
        "ledger_index": 269696
    }, 
    "validated": false
}

 

requestTxHistory

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

requestTxHistory(start, callback)

请求格式的示例:

remote.connect(function() {
    remote.requestTxHistory(0, function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

该请求包含以下参数:

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

一个成功回应的例子:

{
    "index": 0, 
    "txs": [
        {
            "Account": "v33pARkvXFH3znGMxnD6VnbMViJPkKYB8d", 
            "Amount": "83330000000", 
            "Destination": "v3Rhnd3xQTLpDMAtLvLkAHPDq34tPVcFAE", 
            "DestinationTag": 97, 
            "Fee": "12", 
            "Flags": 2147483648, 
            "LastLedgerSequence": 479048, 
            "Sequence": 15, 
            "SigningPubKey": "02FD504BCB9EFCB7B049C41A5A9B10EBBA32094B99EC14AFE006CFECE099E6F794", 
            "TransactionType": "Payment", 
            "TxnSignature": "3045022100F3C87E64663BAA02A529518EEB5644AEB14DFC290683263E340386C9488300210220139BDE61544D82FD5A48AE3598F7C412A6FBD99D4FED2FAACC44B1C57B1D8223", 
            "hash": "9B7E0BDD51CFE50C1C2FE9F44719636E880C3378689E77ECED044DFA370609B0", 
            "inLedger": 479045, 
            "ledger_index": 479045
        }, 
        {
            "Account": "vn4K541zh3vNHHJJaos2Poc4z3RiMHLHcK", 
            "Amount": "83326995000", 
            "Destination": "v33pARkvXFH3znGMxnD6VnbMViJPkKYB8d", 
            "Fee": "12", 
            "Flags": 2147483648, 
            "LastLedgerSequence": 479043, 
            "Memos": [
                {
                    "Memo": {
                        "MemoData": "34383831344336423635413834304442434546434130463744313436314441344533443739334343393833443944413636313344323343303433374337373837", 
                        "MemoType": "6D656D6F"
                    }
                }
            ], 
            "Sequence": 78, 
            "SigningPubKey": "028D1C021B4F6C02965A66B370D94140863D21D88808F1AC363D2A3C94D6C15C21", 
            "TransactionType": "Payment", 
            "TxnSignature": "30450221009727CECB318C06DB01FC1BED2E11F3A4DA51F0290B039307BBF536E818951476022034278CB17FD158A9F9B4157C938FFBD38CD0CD90D76CAF3924D47E218ED8D149", 
            "hash": "56D79F1A6E3C012D2156BBCD549F4ABD86447E70D6B0BEC60E7EE719CD095CE7", 
            "inLedger": 479040, 
            "ledger_index": 479040
        }, 
        {
            "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
            "Amount": "5990000", 
            "Destination": "vnJdXznPHnFumWjJVVQHVMtnNbeYEHBkin", 
            "DestinationTag": 2017, 
            "Fee": "12", 
            "Flags": 2147483648, 
            "LastLedgerSequence": 478950, 
            "Memos": [
                {
                    "Memo": {
                        "MemoData": "787878", 
                        "MemoType": "6D656D6F"
                    }
                }
            ], 
            "Sequence": 2, 
            "SigningPubKey": "027B3201436842B04147A3651239DA5223EF8C8CB821853691A231626338A0A183", 
            "TransactionType": "Payment", 
            "TxnSignature": "3045022100BF06D150574CF55C2A37683C729F61B18BE3F5F99B962F963CC82DA3BA3A644F022016FEBA58616031C1B02CD0495DFD94F830E80ED32FB9F56917F1249EC11318E4", 
            "hash": "95092F6F65F448581E145B5DFDF04C11CAA95D5614F890F3E563C33CB49EDE51", 
            "inLedger": 478947, 
            "ledger_index": 478947
        }, 
        {
            "Account": "vNYxPfTcYWUkYRRipLyEW8N6bsg5fTrgVB", 
            "Fee": "12", 
            "Flags": 2147483648, 
            "LastLedgerSequence": 476734, 
            "Sequence": 493, 
            "SigningPubKey": "03040FD87BB705B2F133385DA7460BEDEFEE99E58F9EA5EC7855088E157C4F8D76", 
            "TakerGets": {
                "currency": "CNY", 
                "issuer": "vw92NVCxjrprk5oaMPcVA81xsXVYYzy66a", 
                "value": "700"
            }, 
            "TakerPays": {
                "currency": "PHC", 
                "issuer": "vGQXtCirab4CiFpV4d5jHfjL9AC5PKNcSE", 
                "value": "10000"
            }, 
            "TransactionType": "OfferCreate", 
            "TxnSignature": "3045022100F275BC47B605F8779CBC6FBD1798022B4CCD9230FC590795F618C4ADEDC4EF950220755DD81975635D930A12DAA4450A4FEF7BF53370C5C94DD77B839CC039A4463B", 
            "hash": "993D388B0183105DFAB3D4E9878DD92ADBA7998D018DB0C37825EE195E93D4F3", 
            "inLedger": 476727, 
            "ledger_index": 476727
        }, 
        {
            "Account": "vNYxPfTcYWUkYRRipLyEW8N6bsg5fTrgVB", 
            "Fee": "12", 
            "Flags": 2147483648, 
            "LastLedgerSequence": 476733, 
            "Sequence": 492, 
            "SigningPubKey": "03040FD87BB705B2F133385DA7460BEDEFEE99E58F9EA5EC7855088E157C4F8D76", 
            "TakerGets": {
                "currency": "CNY", 
                "issuer": "vw92NVCxjrprk5oaMPcVA81xsXVYYzy66a", 
                "value": "910"
            }, 
            "TakerPays": {
                "currency": "PHC", 
                "issuer": "vGQXtCirab4CiFpV4d5jHfjL9AC5PKNcSE", 
                "value": "13000"
            }, 
            "TransactionType": "OfferCreate", 
            "TxnSignature": "3045022100F38C35C62E92F515F948E0CF91E97521FB8D9AE1084D501588BF046BC9F38E8202201C58D4713DF746D59269DE16111BB89E2A2615385F9DC7653634B95F38BDE201", 
            "hash": "DCB7CDD865415422802D09098F648E815739A52B1014A5AEC4B04474FF374750", 
            "inLedger": 476725, 
            "ledger_index": 476725
        }
    ]
}

 

 

requestPathFind

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

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

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

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

requestPathFindCreate

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

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

requestPathFindCreate(src_account, dst_account, dst_amount, src_currencies, callback)

请求格式的示例:

remote.connect(function () {
  remote.requestPathFindCreate('vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr', 'vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr', {
    "value": "0.001",
    "currency": "USD",
    "issuer": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"
  }, [{
        "currency": "USD",
        "issuer": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"
      }
    ],
    function (err, res) {
    if (!err) {
      document.getElementById('text').innerHTML = JSON.stringify(res);
    } else {
      document.getElementById('text').innerHTML = JSON.stringify(err);
    }
  })
});

 

该请求包含以下参数:

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 (可选)表示要检查的付款路径的对象数组数组。您可以使用它来随时更新您已知的特定路径的更改,或检查沿特定路径进行支付的总体成本。

一个成功回应的例子:

{
  "alternatives": [],
  "destination_account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
  "destination_amount": {
    "currency": "USD",
    "issuer": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
    "value": "0.001"
  },
  "id": 1,
  "source_account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"
}

成功的结果包含以下字段:

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 货币金额,源必须沿着此路径发送,以便目的地接收所需金额

requestPathFindClose

requestPathFindClose指示服务器停止发送有关当前打开的寻路请求的信息。

请求格式的示例:

remote.connect(function() {
    remote.requestPathFindClose( function(err, res) {
        if (!err) {
            document.getElementById('text').innerHTML = JSON.stringify(res);
        }
    })
});

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

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

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

requestStreamPathFind

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

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

requestStreamPathFind(src_account, dst_account, dst_amount, src_currencies, callback)

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

请求格式的示例:

remote.connect(function () {
  remote.requestPathFindCreate('vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr', 'vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr', {
    "value": "0.001",
    "currency": "USD",
    "issuer": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"
  }, [{
        "currency": "USD",
        "issuer": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"
      }
    ],
    function (err, res) {
    if (!err) {
      document.getElementById('text').innerHTML = JSON.stringify(res);
    } else {
      document.getElementById('text').innerHTML = JSON.stringify(err);
    }
  })
});

该请求包含以下参数:

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 (可选)要使用的分类帐的序号或快捷字符串自动选择分类帐。(请参阅指定分类帐)

一个成功回应的例子:

{
  "alternatives": [],
  "destination_account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
  "destination_amount": {
    "currency": "USD",
    "issuer": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
    "value": "0.001"
  },
  "id": 1,
  "source_account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr"
}

成功结果包含以下字段:

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 货币金额,源必须沿着此路径发送,以便目的地接收所需金额

requestSign

requestSign方法采用JSON格式的交易和密钥,并返回交易的带符号二进制表示。结果总是不同,即使您提供相同的交易JSON和密钥。

requestSign(secret, tx_json, callback)

请求格式的示例:

remote.connect(function() {
    remote.requestSign(
    "s████████████████████████████",",
    {
          "TransactionType" : "Payment",
          "Account" : "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr",
          "Destination" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV",
          "Amount" : {
             "currency" : "USD",
             "value" : "1",
             "issuer" : "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV"
          }
       },function(err, res) {
            if (!err) {
                document.getElementById('text').innerHTML = JSON.stringify(res);
            }
        }
    )
});

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

  • 提供一个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交易字段(交易成本),则忽略。

自动填充字段

如果您忽略它们,服务器将自动尝试自动填写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值。
  • Paths– 对于付款类型的交易(不包括STM到STM的转账),路径字段可以自动填充。只有build_path提供时才填写。

一个成功回应的例子:

{
    "tx_blob": "1200002280000000240000000461D4838D7EA4C6800000000000000000000000000055534400000000008B17262A312E4FF5BE1138A85301428C74628BB868400000000000000A7321027B3201436842B04147A3651239DA5223EF8C8CB821853691A231626338A0A1837446304402205E74789E90DA99E2553C6367A9039DBDADDCC2E29D2219BCE09CA052F14ADF4602207E2FFB5205F4488B5A0340852A78C8F3B1A15A746AE953B7FB0484CDCB8EF0BE8114336873538F7144E4124D9F1F2B3B202505C58FDB83148B17262A312E4FF5BE1138A85301428C74628BB8", 
    "tx_json": {
        "Account": "vngFb3bKpGyocUfUR3VYjn9osaE6wXaZsr", 
        "Amount": {
            "currency": "USD", 
            "issuer": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", 
            "value": "1"
        }, 
        "Destination": "vDgSCaGS3iih9iKvfvRULrK7gurJjdDnUV", 
        "Fee": "10", 
        "Flags": 2147483648, 
        "Sequence": 4, 
        "SigningPubKey": "027B3201436842B04147A3651239DA5223EF8C8CB821853691A231626338A0A183", 
        "TransactionType": "Payment", 
        "TxnSignature": "304402205E74789E90DA99E2553C6367A9039DBDADDCC2E29D2219BCE09CA052F14ADF4602207E2FFB5205F4488B5A0340852A78C8F3B1A15A746AE953B7FB0484CDCB8EF0BE", 
        "hash": "EB977DDC1F063F1B7B3573656E9BF931AEDB2E876CC42FDFDDF08096E5D472D1"
    }
}

成功结果包含以下字段:

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

 

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

requestSubscribe

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

requestSubscribe(streams, callback)

请求格式的示例:

remote.connect(function() {
  remote.requestSubscribe(["ledger"],function(err, res) {
    if (!err) {
      document.getElementById('text').innerHTML = JSON.stringify(res);
    }
  })
});

该请求包含以下参数:

Field Type Description
streams Array (可选)要订阅的通用流的字符串名称数组,如下所述

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,则返回订单的双方。

一个成功回应的例子:

{
    "fee_base": 10, 
    "fee_ref": 10, 
    "ledger_hash": "52F1443F8864CF2A61ECFA9CEF5B215A01B279E3AB68E8440DE9960C7EF98110", 
    "ledger_index": 492282, 
    "ledger_time": 587363290, 
    "reserve_base": 1000000, 
    "reserve_inc": 100000, 
    "validated_ledgers": "2-492282"
}

响应中包含的字段取决于请求中包含的订阅内容。

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

requestUnsubscribe

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

requestUnsubscribe(streams, callback)

请求格式的示例:

remote.connect(function() {
  remote.requestUnsubscribe(["ledger"],function(err, res) {
    if (!err) {
      document.getElementById('text').innerHTML = JSON.stringify(res);
    }
  })
});

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

Field Type Description
streams Array (可选)通用流的字符串名称的数组从,包括退订ledgerservertransactions,和transactions_proposed

成功的返回结果不包含字段。

Help Guide Powered by Documentor
Suggest Edit