区块链 - Blockbook API - Trezor

  • trezor
  • 发布于 2025-03-21 16:43
  • 阅读 23

本文档详细介绍了 Blockbook API V2 提供的 REST 和 WebSocket 接口,用于访问索引的区块链数据。API V2 支持多种加密货币,并提供包括获取状态、区块、交易、地址、UTXO等功能,以及发送交易和获取汇率信息等功能。同时还介绍了旧版本API V1,它只兼容比特币类型的币种。

Blockbook API

Blockbook 提供了 REST 和 websocket API 来访问已索引的区块链。

API V2

API V2 是当前版本的 API。它可以用于 Blockbook 支持的所有币种类型。API V2 可以使用 REST 和 websocket 接口访问。

API V2 中使用的通用原则:

  • 所有加密货币金额都以字符串形式传输,以最小的面额(聪、wei 等),不带小数点
  • 空字段被省略。空字段是值为 null"" 的字符串,值为 0 的数字,值为 null 的对象或没有元素的数组。这样做的原因是该接口服务于许多不同的币种,这些币种仅使用字段的子集。有时,此原则可能导致稍微混乱的结果,例如,当交易版本为 0 时,version 字段将被省略。

请参阅 blockbook-api.ts 文件中的所有引用类型(typescript 接口)。

REST API

支持以下方法:

状态页面

状态页面返回 Blockbook 和连接的后端的当前状态。

GET /api/status

响应(SystemInfo 类型):

<!-- https://btc1.trezor.io/api/status -->

{
  "blockbook": {
    "coin": "Bitcoin",
    "network": "BTC",
    "host": "backend5",
    "version": "0.5.0",
    "gitCommit": "a0960c8e",
    "buildTime": "2024-08-08T12:32:50+00:00",
    "syncMode": true,
    "initialSync": false,
    "inSync": true,
    "bestHeight": 860730,
    "lastBlockTime": "2024-09-10T08:19:04.471017534Z",
    "inSyncMempool": true,
    "lastMempoolTime": "2024-09-10T08:42:39.38871351Z",
    "mempoolSize": 232021,
    "decimals": 8,
    "dbSize": 761283489075,
    "hasFiatRates": true,
    "currentFiatRatesTime": "2024-09-10T08:42:00.898792419Z",
    "historicalFiatRatesTime": "2024-09-10T00:00:00Z",
    "about": "Blockbook - blockchain indexer for Trezor Suite https://trezor.io/trezor-suite. Do not use for any other purpose."
  },
  "backend": {
    "chain": "main",
    "blocks": 860730,
    "headers": 860730,
    "bestBlockHash": "00000000000000000000effeb0c4460480e6a347deab95332c63007a68646ee5",
    "difficulty": "89471664776970.77",
    "sizeOnDisk": 681584532221,
    "version": "270100",
    "subversion": "/Satoshi:27.1.0/",
    "protocolVersion": "70016"
  }
}
获取区块哈希
GET /api/v2/block-index/&lt;区块高度>

响应:

<!-- https://btc1.trezor.io/api/v2/block-index/666666 -->

{
  "blockHash": "0000000000000000000b7b8574bc6fd285825ec2dbcbeca149121fc05b0c828c"
}

注意:Blockbook 始终遵循其连接的后端的主链。请参阅下面获取区块上的注释。

获取交易

获取交易返回关于交易,"标准化" 的数据,对于所有支持的币种,这些数据具有相同的通用结构。它不返回币种特定的字段(例如,关于 Zcash 屏蔽地址的信息)。

GET /api/v2/tx/&lt;txid>

比特币类型币的响应,已确认的交易(Tx 类型):

<!-- https://btc1.trezor.io/api/v2/tx/8c1e3dec662d1f2a5e322ccef5eca263f98eb16723c6f990be0c88c1db113fb1 -->

{
  "txid": "8c1e3dec662d1f2a5e322ccef5eca263f98eb16723c6f990be0c88c1db113fb1",
  "version": 2,
  "lockTime": 860729,
  "vin": [
    {
      "txid": "0eb7b574373de2c88d0dc1444f49947c681d0437d21361f9ebb4dd09c62f2a66",
      "vout": 1,
      "sequence": 4294967293,
      "n": 0,
      "addresses": [
        "bc1qmgwnfjlda4ns3g6g3yz74w6scnn9yu2ts82yyc"
      ],
      "isAddress": true,
      "value": "10106300"
    }
  ],
  "vout": [
    {
      "value": "175000",
      "n": 0,
      "hex": "76a914ecc999d554eaa3efa5e871c28f58b549c36ec51788ac",
      "addresses": [
        "1Nb1ykSD7J5k4RFjJQGsrD9gxBE6jzfNa9"
      ],
      "isAddress": true
    },
    {
      "value": "9888100",
      "n": 1,
      "hex": "001496f152a0919487624bf4f13f46f0d20fa10d9acc",
      "addresses": [
        "bc1qjmc49gy3jjrkyjl57yl5duxjp7ssmxkvh5t2q5"
      ],
      "isAddress": true
    }
  ],
  "blockHash": "00000000000000000000effeb0c4460480e6a347deab95332c63007a68646ee5",
  "blockHeight": 860730,
  "confirmations": 1,
  "blockTime": 1725956288,
  "size": 225,
  "vsize": 144,
  "value": "10063100",
  "valueIn": "10106300",
  "fees": "43200",
  "hex": "02000000000101662a2fc609ddb4ebf96113d237041d687c94494f44c10d8dc8e23d3774b5b70e0100000000fdffffff0298ab0200000000001976a914ecc999d554eaa3efa5e871c28f58b549c36ec51788ac64e196000000000016001496f152a0919487624bf4f13f46f0d20fa10d9acc0247304402202bb0591180cdbbe0f639af6eb21abdb993fc5a667b09e6392d5c11b025a9187102201ef2e84fc91a5d2c6fbbc9f943482d230256a3640f8ecb83c1f3f17242cf011001210314f03889e1667feb696ee280625943195189cfabe46d54204d987f631fe6892739220d00"
}

比特币类型币的响应,未确认的交易:

特殊字段:

  • blockHeight: -1
  • confirmations: 0
  • confirmationETABlocks: 数字
  • confirmationETASeconds: 数字

<!-- https://btc1.trezor.io/api/v2/tx/73b1ad97194e426031e5c692869de2d83dc2ff6033fc6f0ab5514345f92eaf0d -->

{
  "txid": "73b1ad97194e426031e5c692869de2d83dc2ff6033fc6f0ab5514345f92eaf0d",
  "version": 2,
  "vin": [
    {
      "txid": "bccbebb64b1613ada74eefa96753088a80fefa53a10e42c66eef1899371bc096",
      "n": 0,
      "addresses": [
        "bc1q9lh77es6m8ztr7muwcec00ewn8fxakpl9jwv8y"
      ],
      "isAddress": true,
      "value": "371042"
    }
  ],
  "vout": [
    {
      "value": "293135",
      "n": 0,
      "hex": "0014aafd7386f99f4b508ec05ee8f7edc2e07126620a",
      "addresses": [
        "bc1q4t7h8phena94prkqtm500mwzupcjvcs2akcdy9"
      ],
      "isAddress": true
    },
    {
      "value": "74022",
      "n": 1,
      "hex": "0014a3de0fbba89c17d43093164ea955bad65bc260bf",
      "addresses": [
        "bc1q500qlwagnstagvynze82j4d66eduyc9lf64ksh"
      ],
      "isAddress": true
    }
  ],
  "blockHeight": -1,
  "confirmations": 0,
  "confirmationETABlocks": 1,
  "confirmationETASeconds": 619,
  "blockTime": 1725959035,
  "size": 222,
  "vsize": 141,
  "value": "367157",
  "valueIn": "371042",
  "fees": "3885",
  "hex": "0200000000010196c01b379918ef6ec6420ea153fafe808a085367a9ef4ea7ad13164bb6ebcbbc000000000000000000020f79040000000000160014aafd7386f99f4b508ec05ee8f7edc2e07126620a2621010000000000160014a3de0fbba89c17d43093164ea955bad65bc260bf0247304402204a5bdf8a8d19b0a19044b0c0de3ced92b92e8d0c629ffca83178c85a608f719e02203841d40dd92db48715f9f41a732e139ac3cc7696a23adc87136bd8037a594e9f012102824a5e7b878f8d63887bdcb1b0982cdb0b375068b3798c4c96799476a19a389e000000000",
  "rbf": true,
  "coinSpecificData": {
    "txid": "73b1ad97194e426031e5c692869de2d83dc2ff6033fc6f0ab5514345f92eaf0d",
    "hash": "91deb6a9d0f5a37e2e83d1e602ba14cd9811fd3605f582154c9bd1337f7f4c8a",
    "version": 2,
    "size": 222,
    "vsize": 141,
    "weight": 561,
    "locktime": 0,
    "vin": [
      {
        "txid": "bccbebb64b1613ada74eefa96753088a80fefa53a10e42c66eef1899371bc096",
        "vout": 0,
        "scriptSig": {
          "asm": "",
          "hex": ""
        },
        "txinwitness": [
          "304402204a5bdf8a8d19b0a19044b0c0de3ced92b92e8d0c629ffca83178c85a608f719e02203841d40dd92db48715f9f41a732e139ac3cc7696a23adc87136bd8037a594e9f01",
          "02824a5e7b878f8d63887bdcb1b0982cdb0b375068b3798c4c96799476a19a389e"
        ],
        "sequence": 0
      }
    ],
    "vout": [
      {
        "value": 0.00293135,
        "n": 0,
        "scriptPubKey": {
          "asm": "0 aafd7386f99f4b508ec05ee8f7edc2e07126620a",
          "desc": "addr(bc1q4t7h8phena94prkqtm500mwzupcjvcs2akcdy9)#qmxeweuu",
          "hex": "0014aafd7386f99f4b508ec05ee8f7edc2e07126620a",
          "address": "bc1q4t7h8phena94prkqtm500mwzupcjvcs2akcdy9",
          "type": "witness_v0_keyhash"
        }
      },
      {
        "value": 0.00074022,
        "n": 1,
        "scriptPubKey": {
          "asm": "0 a3de0fbba89c17d43093164ea955bad65bc260bf",
          "desc": "addr(bc1q500qlwagnstagvynze82j4d66eduyc9lf64ksh)#mynfp6xy",
          "hex": "0014a3de0fbba89c17d43093164ea955bad65bc260bf",
          "address": "bc1q500qlwagnstagvynze82j4d66eduyc9lf64ksh",
          "type": "witness_v0_keyhash"
        }
      }
    ],
    "hex": "0200000000010196c01b379918ef6ec6420ea153fafe808a085367a9ef4ea7ad13164bb6ebcbbc000000000000000000020f79040000000000160014aafd7386f99f4b508ec05ee8f7edc2e07126620a2621010000000000160014a3de0fbba89c17d43093164ea955bad65bc260bf0247304402204a5bdf8a8d19b0a19044b0c0de3ced92b92e8d0c629ffca83178c85a608f719e02203841d40dd92db48715f9f41a732e139ac3cc7696a23adc87136bd8037a594e9f012102824a5e7b878f8d63887bdcb1b0982cdb0b375068b3798c4c96799476a19a389e000000000"
  }
}

以太坊类型币的响应。交易数据包括:

  • 始终只有一个 vin,只有一个 vout
  • 一个 tokenTransfers 数组 (ERC20, ERC721 或 ERC1155)
  • ethereumSpecific 数据
    • type(仅针对合约创建返回 - 值 1 和销毁值 2
    • status (1 OK, 0 失败, -1 待定), 潜在的 error 消息, gasLimit, gasUsed, gasPrice, nonce, 输入 data
    • parsedData 字段中已解析的输入数据,如果找到与 4 字节目录匹配的项
    • 内部转账(类型 0 转账,类型 1 合约创建,类型 2 合约销毁)
  • addressAliases - 将交易中的地址映射到来自合约或 ENS 的名称。仅返回具有已知名称的地址。

<!-- https://eth1.trezor.io/tx/0xa6c8ae1f91918d09cf2bd67bbac4c168849e672fd81316fa1d26bb9b4fc0f790 -->

{
  "txid": "0xa6c8ae1f91918d09cf2bd67bbac4c168849e672fd81316fa1d26bb9b4fc0f790",
  "vin": [
    {
      "n": 0,
      "addresses": ["0xd446089cf19C3D3Eb1743BeF3A852293Fd2C7775"],
      "isAddress": true
    }
  ],
  "vout": [
    {
      "value": "5615959129349132871",
      "n": 0,
      "addresses": ["0xC36442b4a4522E871399CD717aBDD847Ab11FE88"],
      "isAddress": true
    }
  ],
  "blockHash": "0x10ea8cfecda89d6d864c1d919911f819c9febc2b455b48c9918cee3c6cdc4adb",
  "blockHeight": 16529834,
  "confirmations": 3,
  "blockTime": 1675204631,
  "value": "5615959129349132871",
  "fees": "19141662404282012",
  "tokenTransfers": [
    {
      "type": "ERC20",
      "from": "0xd446089cf19C3D3Eb1743BeF3A852293Fd2C7775",
      "to": "0x3B685307C8611AFb2A9E83EBc8743dc20480716E",
      "contract": "0x4E15361FD6b4BB609Fa63C81A2be19d873717870",
      "name": "Fantom Token",
      "symbol": "FTM",
      "decimals": 18,
      "value": "15362368338194882707417"
    },
    {
      "type": "ERC20",
      "from": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
      "to": "0x3B685307C8611AFb2A9E83EBc8743dc20480716E",
      "contract": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
      "name": "Wrapped Ether",
      "symbol": "WETH",
      "decimals": 18,
      "value": "5615959129349132871"
    },
    {
      "type": "ERC721",
      "from": "0x0000000000000000000000000000000000000000",
      "to": "0xd446089cf19C3D3Eb1743BeF3A852293Fd2C7775",
      "contract": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
      "name": "Uniswap V3 Positions NFT-V1",
      "symbol": "UNI-V3-POS",
      "decimals": 18,
      "value": "428189"
    }
  ],
  "ethereumSpecific": {
    "status": 1,
    "nonce": 505,
    "gasLimit": 550941,
    "gasUsed": 434686,
    "gasPrice": "44035608242",
    "maxPriorityFeePerGas": "44035608243",
    "maxFeePerGas": "44035608244",
    "baseFeePerGas": "2035608244",
    "data": "0xac9650d800000000000000000000",
    "parsedData": {
      "methodId": "0xfa2b068f",
      "name": "Mint",
      "function": "mint(address, uint256, uint32, bytes32[], address)",
      "params": [
        {
          "type": "address",
          "values": ["0xa5fD1Da088598e88ba731B0E29AECF0BC2A31F82"]
        },
        { "type": "uint256", "values": ["688173296"] },
        { "type": "uint32", "values": ["0"] }
      ]
    },
    "internalTransfers": [
      {
        "type": 0,
        "from": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
        "to": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
        "value": "5615959129349132871"
      }
    ]
  },
  "addressAliases": {
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
      "Type": "Contract",
      "Alias": "Wrapped Ether"
    },
    "0xC36442b4a4522E871399CD717aBDD847Ab11FE88": {
      "Type": "Contract",
      "Alias": "Uniswap V3 Positions NFT-V1"
    }
  }
}

关于 blockTime 字段的说明:

  • 对于已经挖出的交易 (confirmations > 0),字段 blockTime 包含区块的时间
  • 对于内存池中的交易 (confirmations == 0),该字段包含运行中的 Blockbook 实例首次收到有关该交易通知的时间。此时间在不同的 Blockbook 实例中可能不同。
获取特定交易

以后端返回的确切格式返回交易数据,包括所有币种特定字段:

GET /api/v2/tx-specific/&lt;txid>

示例响应:

<!-- https://zec1.trezor.io/api/v2/tx-specific/7a0a0ff6f67bac2a856c7296382b69151949878de6fb0d01a8efa197182b2913 -->

{
  "hex": "040000808...8e6e73cb009",
  "txid": "7a0a0ff6f67bac2a856c7296382b69151949878de6fb0d01a8efa197182b2913",
  "authdigest": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  "size": 1809,
  "overwintered": true,
  "version": 4,
  "versiongroupid": "892f2085",
  "locktime": 0,
  "expiryheight": 495680,
  "vin": [],
  "vout": [],
  "vjoinsplit": [],
  "valueBalance": 0,
  "valueBalanceZat": 0,
  "vShieldedSpend": [
    {
      "cv": "50258bfa65caa9f42f4448b9194840c7da73afc8159faf7358140bfd0f237962",
      "anchor": "6beb3b64ecb30033a9032e1a65a68899917625d1fdd2540e70f19f3078f5dd9b",
      "nullifier": "08e5717f6606af7c2b01206ff833eaa6383bb49c7451534b2e16d588956fd10a",
      "rk": "36841a9be87a7022445b77f433cdd0355bbed498656ab399aede1e5285e9e4a2",
      "proof": "aecf824dbae8eea863ec6...73878c37391f01df520aa",
      "spendAuthSig": "65b9477cb1ec5da...1178fe402e5702c646945197108339609"
    },
    {
      "cv": "a5aab3721e33d6d6360eabd21cbd07524495f202149abdc3eb30f245d503678c",
      "anchor": "6beb3b64ecb30033a9032e1a65a68899917625d1fdd2540e70f19f3078f5dd9b",
      "nullifier": "60e790d6d0e12e777fb2b18bc97cf42a92b1e47460e1bd0b0ffd294c23232cc9",
      "rk": "2d741695e76351597712b4a04d2a4e108a116f376283d2d104219b86e2930117",
      "proof": "a0c2a6fdcbba966b9894...3a9c3118b76c8e2352d524cbb44c02decaeda7",
      "spendAuthSig": "feea902e01eac9ebd...b43b4af6b607ce5b0b38f708"
    }
  ],
  "vShieldedOutput": [
    {
      "cv": "23db384cde862f20238a1004e57ba18f114acabc7fd2ac029757f82af5bd4cab",
      "cmu": "3ff5a5ff521fabefb5287fef4feb2642d69ead5fe18e6ac717cfd76- **page**: 指定返回交易的页码,从 1 开始。如果超出范围,Blockbook 将返回最接近的可能页面。
- **pageSize**: 每次调用返回的交易数量(默认值和最大值为 1000)
- **from**, **to**: 返回的交易的过滤器,**from** 区块高度到 **to** 区块高度(默认为无过滤器)
- **details**: 指定请求返回的详细程度级别(默认为 **txids**)
    - **basic**: 仅返回 xpub 余额,不包含任何派生地址和交易
    - **tokens**: **basic** + 从 xpub 派生的 token(地址),受 **tokens** 参数的影响
    - **tokenBalances**: **basic** + 从 xpub 派生的带有余额的 token(地址),受 **tokens** 参数的影响
    - **txids**: **tokenBalances** + 交易 ID 列表,受 **from**,**to** 过滤器和分页的影响
    - **txs**: **tokenBalances** + 带有详细信息的交易列表,受 **from**,**to** 过滤器和分页的影响
- **tokens**: 指定请求返回哪些 token(xpub 地址)(默认为 **nonzero**)
    - **nonzero**: 仅返回余额不为零的地址
    - **used**: 返回至少有一笔交易的地址
    - **derived**: 返回所有派生地址
- **secondary**: 指定除加密货币价值外,还以哪种二级(法币)货币返回余额

响应(`Address` 类型):

```javascript
{
  "page": 1,
  "totalPages": 1,
  "itemsOnPage": 1000,
  "address": "dgub8sbe5Mi8LA4dXB9zPfLZW8arm...9Vjp2HHx91xdDEmWYpmD49fpoUYF",
  "balance": "90000000",
  "totalReceived": "3093381250",
  "totalSent": "3083381250",
  "unconfirmedBalance": "0",
  "unconfirmedTxs": 0,
  "txs": 5,
  "txids": [
    "383ccb5da16fccad294e24a2ef77bdee5810573bb1b252d8b2af4f0ac8c4e04c",
    "75fb93d47969ac92112628e39148ad22323e96f0004c18f8c75938cffb6c1798",
    "e8cd84f204b4a42b98e535e72f461dd9832aa081458720b0a38db5856a884876",
    "57833d50969208091bd6c950599a1b5cf9d66d992ae8a8d3560fb943b98ebb23",
    "9cfd6295f20e74ddca6dd816c8eb71a91e4da70fe396aca6f8ce09dc2947839f",
  ],
  "usedTokens": 2,
  "tokens": [
    {
      "type": "XPUBAddress",
      "name": "DUCd1B3YBiXL5By15yXgSLZtEkvwsgEdqS",
      "path": "m/44'/3'/0'/0/0",
      "transfers": 3,
      "decimals": 8,
      "balance": "90000000",
      "totalReceived": "2903986975",
      "totalSent": "2803986975"
    },
    {
      "type": "XPUBAddress",
      "name": "DKu2a8Wo6zC2dmBBYXwUG3fxWDHbKnNiPj",
      "path": "m/44'/3'/0'/1/0",
      "transfers": 2,
      "decimals": 8,
      "balance": "0",
      "totalReceived": "279394275",
      "totalSent": "279394275"
    }
  ],
  "secondaryValue": 21195.47633568
}

注意:usedTokens 始终返回 xpub 的 used 地址总数。

获取 utxo

返回地址或 xpub 的未花费交易输出数组,仅适用于比特币类型币。默认情况下,该列表包含已确认和未确认的交易。查询参数 confirmed=true 禁用返回未确认的交易。返回的 utxo 按区块高度排序,最新区块在前。对于 xpub 或输出描述符,响应还包含 utxo 的地址和推导路径。

未确认的 utxo 没有 height 字段,confirmations 字段的值为 0,并且可能包含 lockTime 字段(如果非零)。

Coinbase utxo 的 coinbase 字段设置为 true,但由于性能原因,仅限于最小 coinbase 确认限制(100)。超过此限制后,utxo 不会被检测为 coinbase。

GET /api/v2/utxo/&lt;address|xpub|descriptor>[?confirmed=true]

响应(Utxo[] 类型):

[
    {
        txid: '13d26cd939bf5d155b1c60054e02d9c9b832a85e6ec4f2411be44b6b5a2842e9',
        vout: 0,
        value: '1422303206539',
        confirmations: 0,
        lockTime: 2648100,
    },
    {
        txid: 'a79e396a32e10856c97b95f43da7e9d2b9a11d446f7638dbd75e5e7603128cac',
        vout: 1,
        value: '39748685',
        height: 2648043,
        confirmations: 47,
        coinbase: true,
    },
    {
        txid: 'de4f379fdc3ea9be063e60340461a014f372a018d70c3db35701654e7066b3ef',
        vout: 0,
        value: '122492339065',
        height: 2646043,
        confirmations: 2047,
    },
    {
        txid: '9e8eb9b3d2e8e4b5d6af4c43a9196dfc55a05945c8675904d8c61f404ea7b1e9',
        vout: 0,
        value: '142771322208',
        height: 2644885,
        confirmations: 3205,
    },
];
获取区块

返回有关区块的信息,包括交易,受分页限制。

GET /api/v2/block/&lt;block height|block hash>

响应(Block 类型):

{
  "page": 1,
  "totalPages": 1,
  "itemsOnPage": 1000,
  "hash": "760f8ed32894ccce9c1ea11c8a019cadaa82bcb434b25c30102dd7e43f326217",
  "previousBlockHash": "786a1f9f38493d32fd9f9c104d748490a070bc74a83809103bcadd93ae98288f",
  "nextBlockHash": "151615691b209de41dda4798a07e62db8429488554077552ccb1c4f8c7e9f57a",
  "height": 2648059,
  "confirmations": 47,
  "size": 951,
  "time": 1553096617,
  "version": 6422787,
  "merkleRoot": "6783f6083788c4f69b8af23bd2e4a194cf36ac34d590dfd97e510fe7aebc72c8",
  "nonce": "0",
  "bits": "1a063f3b",
  "difficulty": "2685605.260733312",
  "txCount": 2,
  "txs": [
    {
      "txid": "2b9fc57aaa8d01975631a703b0fc3f11d70671953fc769533b8078a04d029bf9",
      "vin": [
        {
          "n": 0,
          "value": "0"
        }
      ],
      "vout": [
        {
          "value": "1000100000000",
          "n": 0,
          "addresses": [
            "D6ravJL6Fgxtgp8k2XZZt1QfUmwwGuLwQJ"
          ],
          "isAddress": true
        }
      ],
      "blockHash": "760f8ed32894ccce9c1ea11c8a019cadaa82bcb434b25c30102dd7e43f326217",
      "blockHeight": 2648059,
      "confirmations": 47,
      "blockTime": 1553096617,
      "value": "1000100000000",
      "valueIn": "0",
      "fees": "0"
    },
    {
      "txid": "d7ce10ecf9819801ecd6ee045cbb33436eef36a7db138206494bacedfd2832cf",
      "vin": [
        {
          "n": 0,
          "addresses": [
            "9sLa1AKzjWuNTe1CkLh5GDYyRP9enb1Spp"
          ],
          "isAddress": true,
          "value": "1277595845202"
        }
      ],
      "vout": [
        {
          "value": "9900000000",
          "n": 0,
          "addresses": [
            "DMnjrbcCEoeyvr7GEn8DS4ZXQjwq7E2zQU"
          ],
          "isAddress": true
        },
        {
          "value": "1267595845202",
          "n": 1,
          "spent": true,
          "addresses": [
            "9sLa1AKzjWuNTe1CkLh5GDYyRP9enb1Spp"
          ],
          "isAddress": true
        }
      ],
      "blockHash": "760f8ed32894ccce9c1ea11c8a019cadaa82bcb434b25c30102dd7e43f326217",
      "blockHeight": 2648059,
      "confirmations": 47,
      "blockTime": 1553096617,
      "value": "1277495845202",
      "valueIn": "1277595845202",
      "fees": "100000000"
    }
  ]
}

注意:Blockbook 始终遵循其连接的后端的主链。如果后端存在回滚重组(rollback-reorg),Blockbook 也会执行回滚。当你按高度请求区块时,你将始终获得主链区块。如果你按哈希值(hash)请求区块,你可能会从另一个分叉获得该区块,但这不能保证(后端可能不会保留它)。

发送交易

将新交易发送到后端。

GET /api/v2/sendtx/&lt;hex tx data>
POST /api/v2/sendtx/ (request body 中的十六进制交易数据)  注意:末尾的 '/' 符号是强制性的。

响应:

{
  "result": "7c3be24063f268aaa1ed81b64776798f56088757641a34fb156c4f51ed2e9d25"
}

或者在发生错误时

{
  "error": {
    "message": "错误消息"
  }
}
Ticker 列表

返回指定日期的可用货币汇率 Ticker(辅助货币)列表,以及实际数据时间戳。

GET /api/v2/tickers-list/?timestamp=&lt;timestamp>

查询参数:

  • timestamp: 指定返回可用 ticker 的 Unix 时间戳。

示例响应(AvailableVsCurrencies 类型):

{
  "ts":1574346615,
  "available_currencies": [
    "eur",
    "usd"
  ]
}
Ticker

返回指定货币和日期的货币汇率。如果该货币在该特定时间戳不可用,将返回下一个最接近的汇率。 所有响应都包含实际的汇率时间戳。

GET /api/v2/tickers/[?currency=&lt;currency>&timestamp=&lt;timestamp>]

可选查询参数:

  • currency: 指定返回汇率的货币(“usd”,“eur”,“eth”...)。如果未指定,将返回所有可用货币。
  • timestamp: 一个 Unix 时间戳,用于指定返回货币汇率的日期。如果未指定,将返回最新的可用汇率。

示例响应(无参数,FiatTicker 类型):

{
  "ts": 1574346615,
  "rates": {
    "eur": 7134.1,
    "usd": 7914.5
    }
}

示例响应(currency=usd):

{
  "ts": 1574346615,
  "rates": {
    "usd": 7914.5
  }
}

示例错误响应(例如,汇率不可用,货币不正确...):

{
  "ts":7980386400,
  "rates": {
    "usd": -1
  }
}
余额历史

返回指定 XPUB 或地址的余额历史记录。

GET /api/v2/balancehistory/&lt;XPUB | address>?from=&lt;dateFrom>&to=&lt;dateTo>[&fiatcurrency=&lt;currency>&groupBy=&lt;groupBySeconds>]

查询参数:

  • from: 指定开始日期,格式为 Unix 时间戳
  • to: 指定结束日期,格式为 Unix 时间戳

可选查询参数:

  • fiatcurrency: 如果指定,响应将包含交易时的辅助(法币)汇率。如果未指定,将返回所有可用货币。
  • groupBy: 一个以秒为单位的时间间隔,用于对结果进行分组。默认为 3600 秒。

示例响应(未指定 fiatcurrencyBalanceHistory[] 类型):

[
  {
    "time": 1578391200,
    "txs": 5,
    "received": "5000000",
    "sent": "0",
    "sentToSelf":"100000",
    "rates": {
      "usd": 7855.9,
      "eur": 6838.13,
      ...
    }
  },
  {
    "time": 1578488400,
    "txs": 1,
    "received": "0",
    "sent": "5000000",
    "sentToSelf":"0",
    "rates": {
      "usd": 8283.11,
      "eur": 7464.45,
      ...
    }
  }
]

示例响应(fiatcurrency=usd):

[
    {
        time: 1578391200,
        txs: 5,
        received: '5000000',
        sent: '0',
        sentToSelf: '0',
        rates: {
            usd: 7855.9,
        },
    },
    {
        time: 1578488400,
        txs: 1,
        received: '0',
        sent: '5000000',
        sentToSelf: '0',
        rates: {
            usd: 8283.11,
        },
    },
];

示例响应(fiatcurrency=usd&groupBy=172800):

[
    {
        time: 1578355200,
        txs: 6,
        received: '5000000',
        sent: '5000000',
        sentToSelf: '0',
        rates: {
            usd: 7734.45,
        },
    },
];

sentToSelf 的值是指从同一地址发送到同一地址或在 xpub 的地址内发送的金额。

Websocket API

Websocket 接口在 /websocket/ 提供。可以使用 /test-websocket.html 中的 Blockbook Websocket 测试页面浏览该接口。

Websocket 接口提供以下请求:

  • getInfo
  • getBlockHash
  • getAccountInfo
  • getAccountUtxo
  • getTransaction
  • getTransactionSpecific
  • getBalanceHistory
  • getCurrentFiatRates
  • getFiatRatesTickersList
  • getFiatRatesForTimestamps
  • getMempoolFilters
  • getBlockFilter
  • estimateFee
  • sendTransaction
  • ping

客户端可以订阅以下事件:

  • subscribeNewBlock - 新的区块添加到区块链
  • subscribeNewTransaction - 新的交易添加到区块链(所有地址)
  • subscribeAddresses - 为给定地址(地址列表)添加到内存池的新交易
  • subscribeFiatRates - 新的货币汇率 ticker

每个连接对于给定的事件始终只能有一个订阅,即,新的地址列表将替换以前的地址列表。

默认情况下未启用 subscribeNewTransaction 事件。要启用支持,必须使用 -enablesubnewtx 标志运行 blockbook。

注意:如果后端(区块链)发生重组(reorg),如果重组更深,你将获得具有相同甚至更小高度的新区块哈希。

Websocket 通信格式(WsReq 类型)

{
  "id":"1", //一个用于帮助识别响应的 ID
  "method":"&lt;你想要调用的方法>",
  "params":&lt;参数(与 API 调用中的相同)>
}

订阅某个地址(或多个地址)的示例

{
  "id":"1",
  "method":"subscribeAddresses",
  "params":{
    "addresses":["mnYYiDCb2JZXnqEeXta1nkt5oCVe2RVhJj", "tb1qp0we5epypgj4acd2c4au58045ruud2pd6heuee"]
   }
}

Legacy API V1

传统 API 是 Bitcore Insight 提供的 API 的兼容子集。它仅支持比特币类型的币。REST/socket.io 请求的详细信息可以在 Insight 的文档中找到。

REST API

GET /api/v1/block-index/&lt;block height>
GET /api/v1/tx/&lt;txid>
GET /api/v1/address/&lt;address>
GET /api/v1/utxo/&lt;address>
GET /api/v1/block/&lt;block height | block hash>
GET /api/v1/estimatefee/&lt;number of blocks>
GET /api/v1/sendtx/&lt;hex tx data>
POST /api/v1/sendtx/ (request body 中的十六进制交易数据)

Socket.io API

Socket.io 接口在 /socket.io/ 提供。也可以使用 /test-socketio.html 中的 Blockbook Socket.io 测试页面浏览该接口。

传统 API 按原样提供,不会进一步开发。

传统 API 目前(截至 Blockbook v0.5.0)也可以在没有 /v1/ 前缀的情况下访问,但是在将来的版本中,将删除无版本访问。

  • 原文链接: github.com/trezor/blockb...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
trezor
trezor
江湖只有他的大名,没有他的介绍。