NAV Navbar
json

语言/Language

English

English

Metanet 查询

txid 选取节点

根据交易 txid 选取唯一一个 Metanet 节点,包含此节点与此节点相关的边(父节点)的信息

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/metanet/txid/49ee9cc653ddd8e59b3321ec4d34ad8522bc394e48399931834db0987e26d1d6"

GET metanet/txid/{txid}

请求示例-txid 选取节点

响应数据

{
  "code": 200,
  "data": {
    "id": 1007417,
    "height": 637709,
    "blockIndex": 238,
    "nodeTxid": "61145a1f39174a02ae618ab076c5daf46e9a361bad4c0cb64a39f9225711575b",
    "parentTxid": "NULL",
    "nodeAddress": "1PojuVs6VLTSps9DMP6S3qm8g32EvikqYM",
    "parentAddress": "NULL",
    "nodePubkey": "024ce693a669126143bbb9129aec1c4a554220c7350b97f6a8b5fcdcc19f4481f1",
    "parentPubkey": "NULL",
    "outputIndex": 0,
    "time": 1591168235,
    "rootTxid": "NULL",
    "rootAddress": "NULL"
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
id long 翻页 id
nodeTxid string 节点交易 id
parentTxid string 父交易 id
nodeAddress string 节点地址
parentAddress string 父地址
outputIndex string 输出索引号
time long 时间戳
height int 区块高度
rootTxid string 根交易 id
rootAddress string 根地址

地址选取节点列表

Metanet 协议中一个节点的 地址(nodeAddress)或者公钥(nodePubkey)可能对应多个 metanet 节点,根据节点的地址或者公钥查询所有对应的节点列表

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/metanet/address/16qVqhQSixSrEk6XNJWv26inug5so72SF5"

GET metanet/address/{nodeAddress/nodePubkey}

请求示例-地址选取节点列表

请求示例-公钥选取节点列表

请求参数

参数 数据类型 是否必需 描述
flag long false 翻页标签(上一次查询的最后一条记录的 id)

响应数据

{
  "code": 200,
  "data": [
    {
      "id": 3,
      "height": 587848,
      "blockIndex": 142,
      "nodeTxid": "49ee9cc653ddd8e59b3321ec4d34ad8522bc394e48399931834db0987e26d1d6",
      "parentTxid": "048e7609c70089ee052ddc7e5bceaec14a22b815b20624bcbebad58bc2415f2c",
      "nodeAddress": "16qVqhQSixSrEk6XNJWv26inug5so72SF5",
      "parentAddress": "1B43Nn9MEW1sTYw57s31XUXoPX3zuM6fBG",
      "nodePubkey": "",
      "parentPubkey": "02164a0d0f2aa2f6840f91f6b658edb6b91a3d0b4b4fb396008002734f6a098085",
      "outputIndex": 0,
      "time": 1561132282
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
id long 翻页 id
nodeTxid string 节点交易 id
parentTxid string 父交易 id
nodeAddress string 节点地址
parentAddress string 父地址
nodePubkey string 节点公钥
parentPubkey string 父公钥
outputIndex string 输出索引号
time long 时间戳
height int 区块高度

选取历史版本

根据 Metanet 协议的定义,如果两个节点 地址(nodeAddress)或者 公钥(nodePubkey)与 parentTxid(父交易 ID) 相同,那么这两个节点互为先后版本,根据 TTOR(拓扑排序)决定版本先后。

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/metanet/history_versions/1DwLduKv9FbxCL1GyB7rZxuUNXh5FJbjb/048e7609c70089ee052ddc7e5bceaec14a22b815b20624bcbebad58bc2415f2c"

GET metanet/history_versions/{nodeAddress/nodePubkey}/{parentTxid}

请求示例-根据地址和父交易 ID 选取节点历史版本

请求示例-根据公钥和父交易 ID 选取节点历史版本

请求参数

参数 数据类型 是否必需 描述
flag(可选) long false 翻页标签

响应数据

{
  "code": 200,
  "data": [
    {
      "id": 6,
      "height": 587848,
      "blockIndex": 145,
      "nodeTxid": "c10413a3ec3a395804960f337d77b97304d2576a346cb975949f7038552276ef",
      "parentTxid": "048e7609c70089ee052ddc7e5bceaec14a22b815b20624bcbebad58bc2415f2c",
      "nodeAddress": "1DwLduKv9FbxCL1GyB7rZxuUNXh5FJbjb",
      "parentAddress": "1B43Nn9MEW1sTYw57s31XUXoPX3zuM6fBG",
      "nodePubkey": "",
      "parentPubkey": "02164a0d0f2aa2f6840f91f6b658edb6b91a3d0b4b4fb396008002734f6a098085",
      "outputIndex": 0,
      "time": 1561132282
    },
    {
      "id": 5,
      "height": 587848,
      "blockIndex": 144,
      "nodeTxid": "35a1250da21bec3b87c56171a5bdfc58c1e830746f1786340405a49e52880802",
      "parentTxid": "048e7609c70089ee052ddc7e5bceaec14a22b815b20624bcbebad58bc2415f2c",
      "nodeAddress": "1DwLduKv9FbxCL1GyB7rZxuUNXh5FJbjb",
      "parentAddress": "1B43Nn9MEW1sTYw57s31XUXoPX3zuM6fBG",
      "nodePubkey": "",
      "parentPubkey": "02164a0d0f2aa2f6840f91f6b658edb6b91a3d0b4b4fb396008002734f6a098085",
      "outputIndex": 0,
      "time": 1561132282
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
id long 翻页 id
nodeTxid string 节点交易 id
parentTxid string 父交易 id
nodeAddress string 节点地址
parentAddress string 父地址
nodePubkey string 节点公钥
parentPubkey string 父公钥
outputIndex string 输出索引号
time long 时间戳
height int 区块高度

父节点查子节点

根据父节点的 txid(不能为 address,address 对应的节点不唯一,可以先用 address 找出 node 列表,再根据特定的 txid 来查询)

返回所有子节点,包括子节点的所有版本

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/metanet/children/72b34a2890b9699528738a90ea87493a8848a7ec669f837ea386ac18e99474b7"

GET metanet/children/{parentTxid}

请求示例-父节点查子节点

请求参数

参数 数据类型 是否必需 描述
flag(可选) long false 翻页标签

响应数据

{
  "code": 200,
  "data": [
    {
      "id": 7,
      "nodeTxid": "bfe99262132497f13376e41b998599ccbf685907f3c82559380580b770e55821",
      "parentTxid": "72b34a2890b9699528738a90ea87493a8848a7ec669f837ea386ac18e99474b7",
      "nodeAddress": "16EYKVbWzyWBr1Fs8h5nYR9PebjqSYhTQK",
      "parentAddress": "1RWhhV21Zx4Hj6XDLL6gUhMsgGQjeaAf3",
      "outputIndex": 0,
      "time": 1561132282
    },
    {
      "id": 5,
      "nodeTxid": "57bd02c1cc7e080aac19fa129a30e409bbe88a199c5abf5ffc40da077a6d3796",
      "parentTxid": "72b34a2890b9699528738a90ea87493a8848a7ec669f837ea386ac18e99474b7",
      "nodeAddress": "12U5Q74XGWNr3ji9H6voS77cGPn533Mzzb",
      "parentAddress": "1RWhhV21Zx4Hj6XDLL6gUhMsgGQjeaAf3",
      "outputIndex": 0,
      "time": 1561132282
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
id long 翻页 id
nodeTxid string 节点交易 id
parentTxid string 父交易 id
nodeAddress string 节点地址
parentAddress string 父地址
outputIndex string 输出索引号
time long 时间戳
height int 区块高度

链上数据查询

txid 查询链上数据详情

根据 txid 来选取交易输出为 OP_RETURN 的数据内容

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/data/tx/5648192b964061498ad7902552f0f6345f8521f67fdfc42946b5cd55f1670b41/0"

GET /data/tx/{txid}

GET /data/tx/{txid}/{outputIndex}

注意:如果不确定 OP_RETURN 的 outputIndex,建议使用前一个接口

请求示例-txid 查询链上数据详情

请求示例-txid 查询链上数据详情

响应数据

{
  "code": 200,
  "data": {
    "txId": "5648192b964061498ad7902552f0f6345f8521f67fdfc42946b5cd55f1670b41",
    "height": 625741,
    "index": 0,
    "raw": "AGoiMURTWGk4aHZ4bjZQZDRUYXZobVRLeFU3QlVxUzdjbnhodwxXVENXUTk3U0s1Q1cU5rKz5Y2XL+WRqOWPoy/pobnln44ZMjAyMC0wMy0xMVQxNzowMDowMCswODowMExreyJhcWkiOiI4MyIsInBtMjUiOiIyOSIsInBtMTAiOiIxMTYiLCJzbzIiOiI1Iiwibm8yIjoiMTAiLCJjbyI6IjAuMzI1IiwibzMiOiIxMDEiLCJwb2wiOiJQTTEwIiwicXVhIjoi6ImvIn1NCAF42oXRzUpCQRgG4HuZtRxm5pu/0z0E7cWFuApGp6hWIUgKBknmMsKF1SIICheRtPFmGo+X0TdHtOPpDO3e+fmYh3fql6R5ekwOiOGkRk7aXGLmJs+MYmZM4OLMccwhdfLEwu2Ww0STsOsAY5qGMWcxHh3iMI6dN3HhF1fZ7bt/7GcPk9XHTfZ6j0c2nAAkinFDw13rNq8lSjHAnW6tkqaqaWpHM78y2MoYZRHa5MWPn/ziej3qF1EgdAmlpdlH6UhfHHYovUV1LqytUtFoYevlXfY288+DgkqmOi2ppFDRqkD8V1X+5F+VjKg+p6v50I++8DO/l1M/7xUbE1SVbKCCttv4Aa43pow=",
    "parts": [
      "0",
      "OP_RETURN",
      "1DSXi8hvxn6Pd4TavhmTKxU7BUqS7cnxhw",
      "WTCWQ97SK5CW",
      "河南/周口/项城",
      "2020-03-11T17:00:00+08:00",
      "{\"aqi\":\"83\",\"pm25\":\"29\",\"pm10\":\"116\",\"so2\":\"5\",\"no2\":\"10\",\"co\":\"0.325\",\"o3\":\"101\",\"pol\":\"PM10\",\"qua\":\"\"}",
      ""
    ]
  },
  "message": null,
  "success": true
}
参数 数据类型 描述
txid string 交易哈希
height int 区块高度
index int 交易输出索引号
raw string BASE64 编码后的原始输出
parts array 输出栈组成

列表查询

根据一定的查询条件查询所有满足该条件的数据。 例如 Webot 上链协议,根据 OP_RETURN 栈的第 3 个 part(bit 协议地址位)来作为 protocol 根据 input 中的 address 信息来区分用户和鉴权。同理还有 weathersv,preev 等应用采用此方式 一次返回 50 条记录,按时间倒序

HTTP 请求

curl --location --request GET 'api.metasv.com/v1/data/list?inputAddress=14PEs4zAtdGAECWhSS9XGNc4FmRoURusFL&protocol=BCHjeepney%20and%20stresstestbitcoin.cash%20(blaster.cash)&start=1533162913&end=1533167175'

GET data/list

请求示例-链上数据列表查询

请求参数

参数 数据类型 描述
inputAddress(可选) string 交易输入中携带此地址
protocol(可选) string OP_RETURN 之后的 bit 协议位
flag(可选) long 翻页标签(上一次查询的最后一条记录的 id)
start (可选) long 时间范围起始点的秒级时间戳(闭区间)
end (可选) long 时间范围的终止点的秒级时间戳(闭区间)

响应数据

{
  "code": 200,
  "data": [
    {
      "id": 1814788,
      "inputAddress": "14PEs4zAtdGAECWhSS9XGNc4FmRoURusFL",
      "protocol": "BCHjeepney and stresstestbitcoin.cash (blaster.cash)",
      "height": 541584,
      "time": 1533167175,
      "txid": "b08b6050fa4a9e4f22b7fd873d0f58e222266a0874f1ca2d6d6874f3789c025e",
      "outputIndex": 1
    },
    {
      "id": 1814216,
      "inputAddress": "14PEs4zAtdGAECWhSS9XGNc4FmRoURusFL",
      "protocol": "BCHjeepney and stresstestbitcoin.cash (blaster.cash)",
      "height": 541584,
      "time": 1533167175,
      "txid": "43f01c7f88f0a3e0681b7bab28b8a0244c60d37674b8334c95178da5b869b86e",
      "outputIndex": 1
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
id int 翻页 id
inputAddress string 输入地址
protocol string 协议
time long 时间戳
txid string 交易 id
outputIndex int 输出索引号

B 协议

根据文件名搜索 B 协议(bit://19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut)的文件列表

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/data/b_protocol/twetch_twtext_1583810727714.txt"

GET data/b_protocol/{filename}

请求示例-文件名搜索 B 协议

请求数据

参数 数据类型 是否必需 描述
flag(可选) long false 翻页标签

响应数据

{
  "code": 200,
  "data": [
    {
      "id": 1961,
      "filename": "twetch_twtext_1583810727714.txt",
      "time": 1583810733,
      "txid": "6e661935503cce008a273a6a88e5989c424ce4716ebfe0cd843f8079edd006bb",
      "outIndex": null
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
id int 翻页 id
filename string 文件名
time long 时间戳
txid string 交易 id
outIndex int 输出索引号

交易查询

交易详情

交易详情查询,查询交易详情,输入输出等信息

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/tx/8e3da3d115a685ae28421b5661517e829e495091e6121c8d4b0cd52531a660a2"

GET /tx/{txid}

请求示例-交易详情查询

请求参数

响应数据

{
  "code": 200,
  "data": {
    "txDetail": {
      "txid": "8e3da3d115a685ae28421b5661517e829e495091e6121c8d4b0cd52531a660a2",
      "version": 1,
      "lockTime": 0,
      "size": 192,
      "fee": 57,
      "height": 627182,
      "blockIndex": 6,
      "blockHash": "000000000000000000f0d2c432132681f73ef22679ef75aebe7ea190b184b14c",
      "blockTime": 1584787871000,
      "inputCount": 1,
      "outputCount": 1
    },
    "vinList": [
      {
        "parentTxid": "8e3da3d115a685ae28421b5661517e829e495091e6121c8d4b0cd52531a660a2",
        "height": 627182,
        "index": 0,
        "utxoTxid": "be70912d20e4d9639f270c09ff9ddb8e8d2fb676a4460fc8866581e56e884aff",
        "utxoIndex": "5",
        "value": 603,
        "address": "15T6soD5ze5dMoguk7C1cnojWkX7yQPuGN",
        "unlockScript": "SDBFAiEAoPLDAEpUxKLWL+b1I/3JAQ03vQSRcwAgQNDNoMbvkaYCIAEaTknYinzdp5vprXbMbL5riFatLIxQCrXcCBERQriBQSEDisPfwlnGgpyE/nOsS81xUf7zPCh1RuZmZous64/9hTY=",
        "sequence": 4294967295
      }
    ],
    "voutList": [
      {
        "parentTxid": "8e3da3d115a685ae28421b5661517e829e495091e6121c8d4b0cd52531a660a2",
        "height": 627182,
        "index": 0,
        "value": 546,
        "address": "1363FvHSaAA9TgfxZAKQLMVjjdC5WvSjjx",
        "lockScript": "dqkUFuQ3MhFWH2e2tiTUeiO6LQK1zGWIrA==",
        "spentTxid": "",
        "spentIndex": 0,
        "spentHeight": 0,
        "spent": false
      }
    ]
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
txDetail object 交易详情
vinList array 输入列表
voutList array 输出列表

txDetail

字段 数据类型
txid object
version int
lockTime long
size int
fee int
height int
blockIndex int
blockHash string
blockTime long
inputCount int
outputCount int

vin

字段 数据类型
parentTxid string
height int
index int
value long
address string
unlockScript string
sequence long
utxoTxid string
utxoIndex string

vout

字段 数据类型
parentTxid string
height int
index int
value long
address string
lockScript string
spentTxid string
spentIndex int
spentHeight int
spent boolean

获取生交易

获取 Hex 表示的原始生交易

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/tx/8e3da3d115a685ae28421b5661517e829e495091e6121c8d4b0cd52531a660a2/raw"

GET /tx/{txid}/raw

请求示例-生交易

请求参数

响应数据

{
  "code": 200,
  "data": {
    "rawHex": "0100000001ff4a886ee5816586c80f46a476b62f8d8edb9dff090c279f63d9e4202d9170be050000006b483045022100a0f2c3004a54c4a2d62fe6f523fdc9010d37bd049173002040d0cda0c6ef91a60220011a4e49d88a7cdda79be9ad76cc6cbe6b8856ad2c8c500ab5dc08111142b8814121038ac3dfc259c6829c84fe73ac4bcd7151fef33c287546e666668baceb8ffd8536ffffffff0122020000000000001976a91416e4373211561f67b6b624d47a23ba2d02b5cc6588ac00000000"
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
rawHex string hex 表示的生交易

区块查询

区块头部信息查询

查询区块头部信息

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/block/1/header"

GET /block/{blockIdentifier}/header

请求示例-通过高度查询区块头部信息

请求示例-通过哈希查询区块头部信息

请求参数

参数 数据类型 描述
blockIdentifier int/string 区块高度或区块哈希

响应数据

{
  "code": 200,
  "data": {
    "blockHash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
    "height": 1,
    "version": 1,
    "prevBlockHash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
    "merkleRoot": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
    "timestamp": 1231469665000,
    "medianTime": 1231469665000,
    "reward": 5000000000,
    "minerAddress": "12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX",
    "txCount": 1,
    "inputCount": 1,
    "outputCount": 1,
    "bits": 486604799,
    "nounce": null,
    "size": 215
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
blockHash string 区块哈希
height long 区块高度
version int 版本号
preBlockHash string 前一区块的哈希
merkleRoot string 默克尔树根
timestamp long 时间戳
medianTime long 中位时间
txCount long 交易数量
inputCount long 交易输入数
outputCount long 交易输出数
bits long 目标值
nonce long 随机数
size long 区块大小

区块交易列表查询

查询区块交易信息列表

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/block/100000/txs?limit=10"

GET /block/{blockIdentifier}/txs

请求示例-区块交易列表查询

请求参数

参数 数据类型 描述
blockIdentifier int/string 区块高度或区块哈希
offset long 位移量(可选)
limit long 个数上限(最大 50)

响应数据

{
  "code": 200,
  "data": [
    {
      "txid": "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",
      "version": 1,
      "lockTime": 0,
      "size": 135,
      "fee": 0,
      "blockIndex": 0,
      "inputCount": 1,
      "outputCount": 1
    },
    {
      "txid": "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",
      "version": 1,
      "lockTime": 0,
      "size": 259,
      "fee": 0,
      "blockIndex": 1,
      "inputCount": 1,
      "outputCount": 2
    },
    {
      "txid": "6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4",
      "version": 1,
      "lockTime": 0,
      "size": 257,
      "fee": 0,
      "blockIndex": 2,
      "inputCount": 1,
      "outputCount": 2
    },
    {
      "txid": "e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d",
      "version": 1,
      "lockTime": 0,
      "size": 225,
      "fee": 0,
      "blockIndex": 3,
      "inputCount": 1,
      "outputCount": 1
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型
txid string
version int
lockTime long
size long
fee long
blockIndex long
inputCount long
outputCount long

商户用接口

交易存在查询

查询交易存在与否

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/merchants/tx/exists?txid=826f60e6cd9355774998677e43026fd26716a0ac161ad94322f089ce98492e81"

GET /merchants/tx/exists

请求示例-查询交易存在与否

请求参数

参数 数据类型 描述
txid string 交易 id

响应数据

{
  "code": 200,
  "data": {
    "txid": "826f60e6cd9355774998677e43026fd26716a0ac161ad94322f089ce98492e81",
    "exists": true
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
txid String 交易 id
exists Boolean 是否存在

广播交易

生交易广播

允许广播费率大于 0.25sat/byte 的交易,广播之后系统将会使用 mapi(merchant API)把交易直推矿工,因为 metasv 汇集多个应用的交易,有交易量优势,因此可以从矿工处获取费率优惠,所有从 metasv 广播的应用都可以共享此费率优惠。目前 metasv 支持广播的交易体积上限为 15M,这个上限将来会移除,请关注我们的更新日志(为了防止矿工独揽交易,metasv 在把交易递给矿工之后还会往 metasv 运行的全节点广播一次,以保证交易全网可见。)

合作矿池 代号 公钥
taal.com TAAL 03e92d3e5c3f7bd945dfbf48e7a99393b1bfb3f11f380ae30d286e7ff2aec5a270

HTTP 请求


curl -X POST \
  https://api.metasv.com/v1/merchants/tx/broadcast \
  -H 'content-type: application/json' \
  -d '{"rawHex":"0200000001e0d2128a554d7793352b3478c2339d4c6ba12f294584a2bcfd494daa106769e7000000006b483045022100863549e778bba1f8f8617c77bb286d161463a7b1ebd68d58c9e60e7f96c9afde022038d693ffe511685471b199ed90a806ac84e4ba2ab66ac1f3e160eb5f129452ab4121038fc908bdbac664624c0cca5e1c2c80a73af51f237e95a45b56f1a45446cb1a9bffffffff01bc020000000000001976a914950a65a1ffdde0931dcf2e3b0a1ce8142d43bfb888ac00000000"}'

POST /merchants/tx/broadcast

请求体

参数 数据类型 描述
rawHex string 十六进制交易

响应数据

{
  "code": 200,
  "data": {
    "hash": "b8193728dce79f9c1c370670ae428326e3afe96210d072dba38a29d1bf1e1e18",
    "error": null,
    "minerName": "TAAL",
    "minerResponse": {
      "payload": "{\"apiVersion\":\"0.1.0\",\"timestamp\":\"2020-05-17T06:56:10.039Z\",\"txid\":\"b8193728dce79f9c1c370670ae428326e3afe96210d072dba38a29d1bf1e1e18\",\"returnResult\":\"success\",\"resultDescription\":\"\",\"minerId\":\"03e92d3e5c3f7bd945dfbf48e7a99393b1bfb3f11f380ae30d286e7ff2aec5a270\",\"currentHighestBlockHash\":\"000000000000000002dc558abcd3caf9a2c5560ad346dabff7af51ebba356cb3\",\"currentHighestBlockHeight\":635273,\"txSecondMempoolExpiry\":0}",
      "publicKey": "03e92d3e5c3f7bd945dfbf48e7a99393b1bfb3f11f380ae30d286e7ff2aec5a270",
      "signature": "304402203effd0188f1d61fc78fb38b05fdaf99dcf363c6c73384b98895088d10549c9ad02201bdb2dd106e3090af2eb51bdc8f766ccabe34c4dc58d08bda2ad98daab80f2eb",
      "encoding": "UTF-8",
      "mimetype": "application/json"
    }
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
hash string 交易哈希
error object 错误
minerName string 直推的 miner 名
minerResponse object miner 通过 mapi 回传的带签名信息

error

字段 数据类型 描述
code int 全节点错误码
message string 错误信息

minerResponse

详情请参考 mapi 定义

https://github.com/bitcoin-sv-specs/brfc-merchantapi

字段 数据类型 描述
payload string 矿工返回的消息体
publicKey publicKey 矿工公钥
signature signature 矿工签名
encoding encoding payload 编码方式
mimetype mimetype payload 媒体类型

全节点常见错误码

错误类型 错误码 错误信息
RPC_MISC_ERROR -1 exception thrown in command handling
RPC_TYPE_ERROR -3 Unexpected type was passed as parameter
RPC_INVALID_ADDRESS_OR_KEY -5 Invalid address or key
RPC_OUT_OF_MEMORY -7 Ran out of memory during operation
RPC_INVALID_PARAMETER -8 Invalid, missing or duplicate parameter
RPC_DATABASE_ERROR -20 Database error
RPC_DESERIALIZATION_ERROR -22 Error parsing or validating structure in raw format
RPC_VERIFY_ERROR -25 General error during transaction or block submission
RPC_VERIFY_REJECTED -26 Transaction or block was rejected by network rules
RPC_VERIFY_ALREADY_IN_CHAIN -27 Transaction already in chain

"reject" 信息码

错误类型 错误码
REJECT_MALFORMED 0x01
REJECT_INVALID 0x10
REJECT_OBSOLETE 0x11
REJECT_DUPLICATE 0x12
REJECT_NONSTANDARD 0x40
REJECT_DUST 0x41
REJECT_INSUFFICIENTFEE 0x42
REJECT_CHECKPOINT 0x43
REJECT_TOOBUSY 0x44

挑选 Utxo 集

给定地址集和金额,挑选大于该金额的 Utxo 集 对于 HD 钱包,可以同时传入多个地址地址,给出一个待花费总金额 amount,取出总额大于 amount 的 utxo

注意:此接口选取出来的 amount 并未计算手续费,因此调用方在传入 amount 的时候需要多设置一些金额以保证手续费足够。

HTTP 请求

curl --location --request POST 'https://api.metasv.com/v1/merchants/utxo_select' \
--header 'Content-Type: application/json' \
--data-raw '{"addresses": ["12higDjoCCNXSA95xZMWUdPvXNmkAduhWv", "19k8nToWwMGuF4HkNpzgoVAYk4viBnEs5D"], "amount": 102891277}'

POST /merchants/utxo_select

请求体

字段 数据类型 描述
addresses array 待取 utxo 的地址列表
amount long 待取金额(satoshi)
{
  "addresses": [
    "12higDjoCCNXSA95xZMWUdPvXNmkAduhWv",
    "19k8nToWwMGuF4HkNpzgoVAYk4viBnEs5D"
  ],
  "amount": 102891277
}

响应数据

{
  "code": 200,
  "data": [
    {
      "outputIndex": 0,
      "address": "12higDjoCCNXSA95xZMWUdPvXNmkAduhWv",
      "txid": "0a21079a06c523fed3a41f890c4e96bb148433c90bf42d3c12649846af20f5b6",
      "id": 31537708,
      "ancestors": 0,
      "descendents": 0,
      "value": 100000000,
      "height": 576232
    },
    {
      "outputIndex": 0,
      "address": "12higDjoCCNXSA95xZMWUdPvXNmkAduhWv",
      "txid": "166a3ab4254f7dbb0a9ea5750bdc19254fb8597b30a8c393b8a48d3f73939775",
      "id": 20292332,
      "ancestors": 0,
      "descendents": 0,
      "value": 666000,
      "height": 576241
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
txid string 交易 id
address string 地址
height int 高度(未确认 utxo 为-1)
value long 金额
id long 翻页 id
outputIndex int 索引
ancestors int 祖先数(已确认 utxo 为 0)
descendents int 后代数(已确认 utxo 为 0)

如果当前 address 余额总和小于要选取的金额,则返回错误码 20001 以及当前的余额,如果要获取全量 utxo,请使用此余额作为 amount 再次请求一遍。

{
  "code": 20001,
  "data": {
    "balance": 102891278
  },
  "message": "Utxo total amount is insufficient",
  "success": false
}

Paymail 地址查询

Paymail 是一系列比特币 SV 钱包协议,这些协议允许在整个生态系统中的所有钱包中提供简化的地址管理服务。

不用直接管理一系列复杂难以记忆的地址,而是通过记住自己的 paymail 邮箱地址,就可以映射到自己的地址。

关于 Paymail 协议的详情,请参考 Paymail Protocol

HTTP 请求

curl --location --request GET 'api.metasv.com/v1/merchants/paymail/bitcoinscl@moneybutton.com'

GET /merchants/paymail/{alias}@{domain}

请求示例-Paymail 地址

响应数据

{
  "code": 200,
  "data": {
    "email": "bitcoinscl@moneybutton.com",
    "publicKey": "03db230f7ac74a7193048f10b893c10bc8d3c43b6e151c3ca7fc1b1cd1e9627e6d",
    "address": "1EXyJR3pzvSz8Xg6ux23TFkz8hUjUTL5xW",
    "url": "https://www.moneybutton.com/api/v1/bsvalias/id/bitcoinscl@moneybutton.com"
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
email string 邮箱地址
publicKey string 公钥
address string 可使用的地址
url string paymail 解析 url

地址查询

地址基本信息

查询地址基本信息,参数支持地址和 pubKey

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/address/1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz/info"

GET /address/{addressIdentifier}/info

请求示例-地址基本信息

响应数据

{
  "code": 200,
  "data": {
    "id": null,
    "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
    "confirmedBalance": 12504971819,
    "unconfirmedBalance": 0,
    "firstSpend": 1502122852000,
    "firstSpendHeight": 478751,
    "firstReceive": 1501746239000,
    "firstReceiveHeight": 478583,
    "lastSpend": 1591574628000,
    "lastSpendHeight": 638383,
    "lastReceive": 1591604088000,
    "lastReceiveHeight": 638452,
    "txCount": 22954,
    "totalIncome": 25731818063550,
    "totalOutcome": 25719313091731
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
id long
address string 地址
confirmedBalance long 确认余额
unconfirmedBalance long 未确认余额
firstSpend long 首次支出时间
firstSpendHeight int 首次支出高度
firstReceive long 首次收入时间
firstReceiveHeight int 首次收入高度
lastSpend long 最后支出时间
lastSpendHeight int 最后支出高度
lastReceive long 最后收入时间
lastReceiveHeight int 最后收入高度
txCount long 交易数量
totalIncome long 总收入
totalOutcome long 总支出

地址交易列表

查询地址历史交易列表,参数支持地址和 pubKey

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/address/1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz/tx?limit=10"

GET /address/{addressIdentifier}/tx

请求示例-地址交易列表

请求参数

字段 数据类型 描述
flag string 翻页标签(可选)
limit int 数量上限,最大 100(可选,默认 50)

响应数据

{
  "code": 200,
  "data": {
    "flag": "h_1591856308000_76785125",
    "transactions": [
      {
        "id": 77427768,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591936092000,
        "height": 638985,
        "income": 625250909,
        "outcome": 0,
        "txid": "99561557fb56b53a026e7c5043542a1c27104859beb4cb65a1a68dc838dd53a3"
      },
      {
        "id": 77310381,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591922015000,
        "height": 638962,
        "income": 0,
        "outcome": 1875825044,
        "txid": "9b8344c79f68094c02240bb093542f310bcd0fc416a161130617a1f12ce8173a"
      },
      {
        "id": 77247902,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591910347000,
        "height": 638949,
        "income": 625113306,
        "outcome": 0,
        "txid": "16796544c87dab68c5287b60ffe4f44b569a4171d967aca339e3fe99ee13a999"
      },
      {
        "id": 77124605,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591896582000,
        "height": 638927,
        "income": 625152761,
        "outcome": 0,
        "txid": "25cc416ae22bbd5bc5614acdadcca86522b1f3a99254a02ae86aeaadba75c162"
      },
      {
        "id": 76965728,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591877219000,
        "height": 638903,
        "income": 0,
        "outcome": 5627506777,
        "txid": "3cca533e1553a19044f0d7d2a8e37db0ea1a909b774dcd5de7db7e61900c95fb"
      },
      {
        "id": 76960828,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591876353000,
        "height": 638898,
        "income": 625071036,
        "outcome": 0,
        "txid": "e308fc17a976a8b110881b12dd5a134067442fecb7dc93f8f3d319cbee3de415"
      },
      {
        "id": 76949119,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591874978000,
        "height": 638895,
        "income": 625127587,
        "outcome": 0,
        "txid": "eb388edfecc69dcb0db184af937c4855731b45b1f7ff137ea445b1362853fbef"
      },
      {
        "id": 76814075,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591861906000,
        "height": 638880,
        "income": 625300161,
        "outcome": 0,
        "txid": "7d264a613657e35710ed1cbc822a5bf619d1bbb00bb0f49ca5d35833bf2fab57"
      },
      {
        "id": 76798308,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591858108000,
        "height": 638875,
        "income": 625145054,
        "outcome": 0,
        "txid": "a4e6f017d1dd7fa1533c8b58074048575ed5e59cd6b9b5c5db0d234ae2ab63e0"
      },
      {
        "id": 76785125,
        "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
        "time": 1591856308000,
        "height": 638868,
        "income": 625026889,
        "outcome": 0,
        "txid": "4228fb498e0b1b137c98a7164d1b99f88c10ddb8184ba1cc63cc1f93b6901fdb"
      }
    ]
  },
  "success": true
}
字段 数据类型 描述
flag string 翻页标签
transactions array 地址列表
字段 数据类型 描述
id long 翻页 id
address string 地址
time long 时间戳
height int 高度
income long 收入
outcome long 支出
txid string 交易 id

地址余额

地址余额查询,包括已确认余额和未确认余额

HTTP 请求

curl --location --request GET "https://api.metasv.com/v1/address/1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz/balance"

GET /address/{address}/balance

请求示例-地址余额

响应数据

{
  "code": 200,
  "data": {
    "address": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
    "confirmedBalance": 43783170730,
    "unconfirmedBalance": 0
  },
  "message": null,
  "success": true
}
字段 数据类型 描述
address string 地址
confirmed long 确认余额
unconfirmed long 未确认余额

地址 utxo 查询

翻页查询给定地址的 utxo 集,每页最多返回 50 条记录 优先取确认数多的 utxo

HTTP 请求

curl --location --request GET 'api.metasv.com/v1/address/12higDjoCCNXSA95xZMWUdPvXNmkAduhWv/utxo'

GET /address/{address}/utxo

请求示例-地址 utxo

请求数据

参数 数据类型 是否必需 描述
flag long false 翻页标签(上一次查询的最后一条记录的 id)

响应数据

{
  "code": 200,
  "data": [
    {
      "id": 4701050,
      "address": "12higDjoCCNXSA95xZMWUdPvXNmkAduhWv",
      "txid": "3541514998f58a38443878d0904033f519cb26820e9d88ccb5b22a90c3f34d1b",
      "outputIndex": 0,
      "value": 500000,
      "height": 576239,
      "ancestors": 0,
      "descendents": 0
    },
    {
      "id": 5376917,
      "address": "12higDjoCCNXSA95xZMWUdPvXNmkAduhWv",
      "txid": "e798e31cecf8a73ecf66402e702d28a91f99be46c09bee73a2e04a2068f2451f",
      "outputIndex": 0,
      "value": 9990,
      "height": 576240,
      "ancestors": 0,
      "descendents": 0
    }
  ],
  "message": null,
  "success": true
}
字段 数据类型 描述
txid string 交易 id
address string 地址
height int 高度(未确认 utxo 为-1)
value long 金额
id long 翻页 id
outputIndex int 索引
ancestors int 祖先数(已确认 utxo 为 0)
descendents int 后代数(已确认 utxo 为 0)

MetaStream 流订阅

为了方便开发者获取最新最实时的链上数据,我们开发了MetaStream流式推送 api。客户端使用长连接链接到服务器订阅某些信息,如果客户端关心的交易在链上发生,则服务器就会使用 SSE(Server Sent Event)的形式,以 http 中的 text/event-stream 流推送将实时数据推送给客户端。

此功能特别适合一些需要实时性的链上应用使用,如链上聊天室,收款实时推送,钱包充值提醒,链上实时统计(bitcoinblocks.live)等,MetaSV 会帮应用做好 filter 的功能,只推送用户关心的数据给客户端。

通用说明

订阅流推送,服务器返回的推送 message 中,有如下三种类型

{"type":"OPEN","data":""}

{"type":"HEARTBEAT","data":""}

{"type":"DATA","data":{"txid":"17140bb8784344a38c72f3041ae884fc86cda2f2d431b76ce6ad954d11890de6","time":1586600513456511000}}

其中的 type 类型和含义如下

type 类型 含义
OPEN 开始建立连接的通知标志
HEARTBEAT 长连接默认超时时间为 1 分钟,因此服务器每 30 秒会推送心跳数据保持连接
DATA 推送数据

对于推送的数据中,存在一个 time 字段,为 unix 时间戳(精度为纳秒)

所有请求都带有一个 flag 参数(可选)

实时性说明

订阅区块信息

订阅区块信息可以实时获取链上的出块事件,以及块的一些详细内容

HTTP 请求

curl --location --request GET 'https://api.metasv.com/v1/stream/block'

GET /stream/block

请求示例-订阅区块信息

请求数据

参数 数据类型 是否必需 描述
flag long false 重放标签(需要重放推送的时间点),纳秒时间戳 1586600513456511000

响应数据

{
  "type": "DATA",
  "data": {
    "block": {
      "blockHash": "0000000000000000046bdee35b14794ed21035e2322a5687dcd7d40879639ac1",
      "height": 630093,
      "version": 536870912,
      "prevBlock": "000000000000000005c4e4e1ee3f969f448964d90540342a7c1d6b17c5edd6c2",
      "merkleRoot": "49113fd51c48763df8b54ad8b08694bb9e08507541703d1362606083f889b46b",
      "timeStamp": 1586601469000,
      "medianTime": 1586599227000,
      "reward": 625285073,
      "minerAddress": "1P3GQYtcWgZHrrJhUa4ctoQ3QoCU2F65nz",
      "txCount": 1301,
      "bits": 403043979,
      "nonce": 3442284989,
      "size": 591171,
      "inputCount": 2804,
      "outputCount": 4332,
      "miner": "minerName",
      "coinbase": "coinbaseMessage written by miner"
    },
    "time": 1586601509955212000
  }
}
字段 数据类型 描述
blockHash string 区块 hash
height int 区块高度
version int 区块版本号
prevBlock string 前一个区块 hash
merkleRoot string merkle 根
timeStamp long 区块时间戳(毫秒)
medianTime long 区块中位数时间(秒级)
reward long 区块奖励
minerAddress string 矿工地址
txCount int 区块中包含的交易数
bits long 区块 bits
nonce int 区块 nonce
size int 区块大小
inputCount int 区块中 input 个数
outputCount int 区块中 output 个数
miner string 解析出来的 miner 名称
coinbase string 解析后的 coinbase 消息

订阅实时交易 hash

订阅实时交易,推送正在发生的全量交易 hash

HTTP 请求

curl --location --request GET 'https://api.metasv.com/v1/stream/tx'

GET /stream/tx

请求示例-订阅实时交易 hash

请求数据

参数 数据类型 是否必需 描述
flag long false 重放标签(需要重放推送的时间点),纳秒时间戳 1586600513456511000

响应数据

{
  "type": "DATA",
  "data": {
    "txid": "469df6790f08785a33108620f73aeadd6d0e8344ada1c61c56dc25c35a22d100",
    "time": 1586602009727723000
  }
}
字段 数据类型 描述
txid string 交易 hash

订阅实时交易详情

订阅实时交易详情,推送正在发生的全量交易的及其详细的信息(包括生交易以及解析过的交易数据)。

HTTP 请求

curl --location --request GET 'https://api.metasv.com/v1/stream/tx/detail'

GET /stream/tx/detail

请求示例-订阅实时交易详情

请求数据

参数 数据类型 是否必需 描述
flag long false 重放标签(需要重放推送的时间点),纳秒时间戳 1586600513456511000

响应数据

{
  "type": "DATA",
  "data": {
    "tx": {
      "txDetail": {
        "txid": "443ce7b5cfaaf34d650763e7814b7f1b2171313a1d28eb7245434c5c81e3c8d5",
        "version": 1,
        "lockTime": 0,
        "size": 335,
        "fee": 84,
        "inputCount": 1,
        "outputCount": 2,
        "rawHex": "0100000001a3054761ea1ccb63d88a4fadb3e8c307c209ecd8d44963cc86713aac5730f1b5010000006b483045022100914b85024e0aeb275a42dbd64524363905b4fc68f3cfc210fb547c1bdcf7b51902205c133c2ea2d8a44cac6d0e413aa7ee8d55ed945f6e104a9c9acd621b41793c424121036609449580213f50abc68433cf9bed24568b3f6e8dcf19bddfb3e9ee1c6aef5dffffffff02000000000000000086006a22314c74794d45366235416e4d6f70517242504c6b3446474e3855427568784b71726e0101307b2274223a33372c2268223a34322c2270223a313030392c2263223a34302c227773223a332e312c227764223a39307d22313338523356484147456576554c57487173705077716e714a7941344778505479320a31353836363033383234e7ee0000000000001976a91417573bb918cdd72760f6aa59133719119f16769388ac00000000"
      },
      "vinList": [
        {
          "txId": "443ce7b5cfaaf34d650763e7814b7f1b2171313a1d28eb7245434c5c81e3c8d5",
          "index": 0,
          "utxoTxid": "b5f13057ac3a7186cc6349d4d8ec09c207c3e8b3ad4f8ad863cb1cea614705a3",
          "utxoIndex": "1",
          "value": 61243,
          "address": "138R3VHAGEevULWHqspPwqnqJyA4GxPTy2",
          "unlockScript": "483045022100914b85024e0aeb275a42dbd64524363905b4fc68f3cfc210fb547c1bdcf7b51902205c133c2ea2d8a44cac6d0e413aa7ee8d55ed945f6e104a9c9acd621b41793c424121036609449580213f50abc68433cf9bed24568b3f6e8dcf19bddfb3e9ee1c6aef5d",
          "sequence": 4294967295
        }
      ],
      "voutList": [
        {
          "index": 0,
          "value": 0,
          "address": "",
          "lockScript": "006a22314c74794d45366235416e4d6f70517242504c6b3446474e3855427568784b71726e0101307b2274223a33372c2268223a34322c2270223a313030392c2263223a34302c227773223a332e312c227764223a39307d22313338523356484147456576554c57487173705077716e714a7941344778505479320a31353836363033383234",
          "parts": [
            "0",
            "OP_RETURN",
            "1LtyME6b5AnMopQrBPLk4FGN8UBuhxKqrn",
            "\u0001",
            "{\"t\":37,\"h\":42,\"p\":1009,\"c\":40,\"ws\":3.1,\"wd\":90}",
            "138R3VHAGEevULWHqspPwqnqJyA4GxPTy2",
            "1586603824"
          ]
        },
        {
          "index": 1,
          "value": 61159,
          "address": "138R3VHAGEevULWHqspPwqnqJyA4GxPTy2",
          "lockScript": "76a91417573bb918cdd72760f6aa59133719119f16769388ac"
        }
      ]
    },
    "time": 1586603836631453000
  }
}
字段 数据类型 描述
txDetail Object 交易概况对象,包含交易的一些汇总信息以及生交易原文
vinList List 交易输入列表,以及此输入对应的金额、脚本以及 utxo point,以及 input 地址
voutList List 交易输出列表,以及此输出对应的金额、脚本以及地址(OP_RETURN 会携带 parts)

订阅地址

订阅指定地址,实时推送此地址发生的转账事件,包括收款和付款都会推送。

HTTP 请求

curl --location --request GET 'https://api.metasv.com/v1/stream/address/1Twetcht1cTUxpdDoX5HQRpoXeuupAdyf'

GET /stream/address/{address}

请求示例-订阅 Twetch 收款地址实时交易

请求数据

参数 数据类型 是否必需 描述
flag long false 重放标签(需要重放推送的时间点),纳秒时间戳 1586600513456511000
simple boolean false 是否为简单查询(默认为true)

响应数据

{
  "type": "DATA",
  "data": {
    "relatedTx": {
      "txDetail": {
        "txid": "e29a8c21a2b7ff6dec2622b8b525bf35f81ace023f5b39f3f627c05f00a7c522",
        "version": 1,
        "lockTime": 0,
        "size": 874,
        "fee": 505,
        "inputCount": 1,
        "outputCount": 6,
        "rawHex": "0100000001e3565a467f8adad66f2f00bea3b8bcec8ed01cd2422d5ac63c9632a0ff69279f050000006a473044022049385c71854122c2f04c00c5b2e517a3acb56bef58548ea5b388ccf0c88ee6ca022020d83cfefafafa9fc68c4abe901ddf5763cab9b219f940e92b56272cb373bec7412103e9ae85c03f284bf044708d1161987be21c54b7879408c367f6ada013316ec677ffffffff060000000000000000fd1802006a2231394878696756345179427633744870515663554551797131707a5a56646f4175741c4e4f20696e206d7920696e746572707265746174696f6e2e2e2e2e2e0a746578742f706c61696e04746578741f7477657463685f7477746578745f313538363630333539303432372e747874017c223150755161374b36324d694b43747373534c4b79316b683536575755374d74555235035345540b7477646174615f6a736f6e046e756c6c0375726c046e756c6c07636f6d6d656e74046e756c6c076d625f75736572053135313337057265706c794063333139356236373137393165303537356639313263393763373563333838633338633336653632383332326332636664313732363036353430663764626333047479706504706f73740974696d657374616d70046e756c6c036170700674776574636807696e766f6963652435313838303130382d353366342d346366372d623863342d653861663566343864313465017c22313550636948473232534e4c514a584d6f53556157566937575371633768436676610d424954434f494e5f454344534122314b6e695a4b396453757354545137564a726142445177537550664d56644d4e776d4c58487741334f376466465738554f3631434e49746a68767679544e4f63494e5946655166626d454d483652564d53335264586d7055304d2f495162415033467a557431755a734f7659356955573571704636366d2f7073773d13130000000000001976a91405186ff0710ed004229e644c0653b2985c648a2388ac22020000000000001976a91471818c0c2fd07d43fce35b1086904ac6838d484388ac990a0000000000001976a9141e32c13d76b7a0c842e69dbc74d1fefc27aab46288ac990a0000000000001976a9148d7795663206e5fb98ca370acb50f63d88bc747588ac35630200000000001976a9148468450fb7f945c6bdc272e22fdcf35c49d4e65e88ac00000000"
      },
      "vinList": [
        {
          "txId": "e29a8c21a2b7ff6dec2622b8b525bf35f81ace023f5b39f3f627c05f00a7c522",
          "index": 0,
          "utxoTxid": "9f2769ffa032963cc65a2d42d21cd08eecbcb8a3be002f6fd6da8a7f465a56e3",
          "utxoIndex": "5",
          "value": 167829,
          "address": "1D5777WrAhk3PuN63U2TTPLys2T7MYmJ21",
          "unlockScript": "473044022049385c71854122c2f04c00c5b2e517a3acb56bef58548ea5b388ccf0c88ee6ca022020d83cfefafafa9fc68c4abe901ddf5763cab9b219f940e92b56272cb373bec7412103e9ae85c03f284bf044708d1161987be21c54b7879408c367f6ada013316ec677",
          "sequence": 4294967295
        }
      ],
      "voutList": [
        {
          "index": 0,
          "value": 0,
          "address": "",
          "lockScript": "006a2231394878696756345179427633744870515663554551797131707a5a56646f4175741c4e4f20696e206d7920696e746572707265746174696f6e2e2e2e2e2e0a746578742f706c61696e04746578741f7477657463685f7477746578745f313538363630333539303432372e747874017c223150755161374b36324d694b43747373534c4b79316b683536575755374d74555235035345540b7477646174615f6a736f6e046e756c6c0375726c046e756c6c07636f6d6d656e74046e756c6c076d625f75736572053135313337057265706c794063333139356236373137393165303537356639313263393763373563333838633338633336653632383332326332636664313732363036353430663764626333047479706504706f73740974696d657374616d70046e756c6c036170700674776574636807696e766f6963652435313838303130382d353366342d346366372d623863342d653861663566343864313465017c22313550636948473232534e4c514a584d6f53556157566937575371633768436676610d424954434f494e5f454344534122314b6e695a4b396453757354545137564a726142445177537550664d56644d4e776d4c58487741334f376466465738554f3631434e49746a68767679544e4f63494e5946655166626d454d483652564d53335264586d7055304d2f495162415033467a557431755a734f7659356955573571704636366d2f7073773d",
          "parts": [
            "0",
            "OP_RETURN",
            "19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut",
            "NO in my interpretation.....",
            "text/plain",
            "text",
            "twetch_twtext_1586603590427.txt",
            "|",
            "1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5",
            "SET",
            "twdata_json",
            "null",
            "url",
            "null",
            "comment",
            "null",
            "mb_user",
            "15137",
            "reply",
            "c3195b671791e0575f912c97c75c388c38c36e628322c2cfd172606540f7dbc3",
            "type",
            "post",
            "timestamp",
            "null",
            "app",
            "twetch",
            "invoice",
            "51880108-53f4-4cf7-b8c4-e8af5f48d14e",
            "|",
            "15PciHG22SNLQJXMoSUaWVi7WSqc7hCfva",
            "BITCOIN_ECDSA",
            "1KniZK9dSusTTQ7VJraBDQwSuPfMVdMNwm",
            "HwA3O7dfFW8UO61CNItjhvvyTNOcINYFeQfbmEMH6RVMS3RdXmpU0M/IQbAP3FzUt1uZsOvY5iUW5qpF66m/psw="
          ]
        },
        {
          "index": 1,
          "value": 4883,
          "address": "qqz3smlswy8dqppznejycpjnk2v9cey2yvgehq93cw",
          "lockScript": "76a91405186ff0710ed004229e644c0653b2985c648a2388ac"
        },
        {
          "index": 2,
          "value": 546,
          "address": "qpccrrqv9lg86sluudd3pp5sftrg8r2ggvzlx9zjhx",
          "lockScript": "76a91471818c0c2fd07d43fce35b1086904ac6838d484388ac"
        },
        {
          "index": 3,
          "value": 2713,
          "address": "qq0r9sfaw6m6pjzzu6wmcax3lm7z0245vgruw3r85n",
          "lockScript": "76a9141e32c13d76b7a0c842e69dbc74d1fefc27aab46288ac"
        },
        {
          "index": 4,
          "value": 2713,
          "address": "qzxh09txxgrwt7ucegms4j6s7c7c30r5w5a3t5m3c7",
          "lockScript": "76a9148d7795663206e5fb98ca370acb50f63d88bc747588ac"
        },
        {
          "index": 5,
          "value": 156469,
          "address": "qzzxs3g0klu5t34acfewyt7u7dwyn48xtcyj22ssqq",
          "lockScript": "76a9148468450fb7f945c6bdc272e22fdcf35c49d4e65e88ac"
        }
      ]
    },
    "time": 1586603609082965000,
    "income": 4883,
    "outcome": 0
  }
}
字段 数据类型 描述
relatedTx Object 与此地址相关的交易详情,数据结构同上面的订阅交易详情
income Long 此地址在此次交易总收入(所有 output 之和)
outcome Long 此地址在此次交易总支出(所有 input 之和)

简单查询响应数据

{
  "type": "DATA",
  "data": {
    "txid": "8f8c2a7f89ccc0b6b4f70d0e126e158dfa3174f640a7698ad9f4996778af47d2",
    "time": 1586865907728955000,
    "income": 546,
    "outCome": 0
  }
}
字段 数据类型 描述
txid string 交易 id
income Long 此地址在此次交易总收入(所有 output 之和)
outcome Long 此地址在此次交易总支出(所有 input 之和)

订阅实时链上数据

订阅带有 OP_RETURN 的交易,同时根据 OP_RETURN 来筛选链上数据。

HTTP 请求

curl --location --request GET 'https://api.metasv.com/v1/stream/data?p2=1LtyME6b5AnMopQrBPLk4FGN8UBuhxKqrn'

GET /stream/data

请求示例-订阅实时 WeatherSV 数据

请求数据

操作码 栈的位置 代号
OP_FALSE 0 p0
OP_RETURN 1 p1
data0 2 p2
data1 3 p3
data2 4 p4
data3 5 p5
data4 6 p6

根据上述代号传递参数,参数起到 filter 的作用,要求交易必须满足参数才会被推送。

参数 数据类型 是否必需 描述
flag string false 重放标签(需要重放推送的时间点),纳秒时间戳 1586600513456511000
inputAddress string false 交易中的 input 必须包含此地址(用于鉴权和区分身份)
p2 string false OP_RETURN 栈中 p2 的位置匹配此字符,一般为 bitcom 协议 protocol
p3 string false OP_RETURN 栈中 p3 的位置匹配此字符
p4 string false OP_RETURN 栈中 p4 的位置匹配此字符
p5 string false OP_RETURN 栈中 p5 的位置匹配此字符
p6 string false OP_RETURN 栈中 p6 的位置匹配此字符

响应数据

{
  "type": "DATA",
  "data": {
    "data": {
      "txId": "b727685b857824ff050d8b9c485c214aedd284f13e422223cd7d30093f0dfa18",
      "raw": "006a22314c74794d45366235416e4d6f70517242504c6b3446474e3855427568784b71726e01012b7b2274223a32302e30362c2268223a34302c2270223a313032332c2263223a32302c227773223a312e357d2231473256686f434e73596651487a5044313256506b357037584876413572745874500a31353836363035303631",
      "parts": [
        "0",
        "OP_RETURN",
        "1LtyME6b5AnMopQrBPLk4FGN8UBuhxKqrn",
        "\u0001",
        "{\"t\":20.06,\"h\":40,\"p\":1023,\"c\":20,\"ws\":1.5}",
        "1G2VhoCNsYfQHzPD12VPk5p7XHvA5rtXtP",
        "1586605061"
      ]
    },
    "time": 1586605064152232000
  }
}
字段 数据类型 描述
txid string 交易 hash
raw string 此 OP_RETURN 的 output 的 HEX 表示
parts string utf8 解析后的输出栈内容 parts

事件触发器

MetaSV 提供一些事件触发器(Transaction Event Trigger)服务,只要向指定地址发送指定格式的交易,就可以触发特定的链上事件发生。

此类服务无需 http 和 rest 请求,只需要构造比特币交易,只要此交易满足特定的条件,就可以触发服务。

加特林机枪

为了给开发者以及其他商家提供测试便利的需要,MetaSV 推出了简单易用的交易机枪功能。

由于短期之内发送大量交易是非常复杂的,需要提前拆分 UTXO,并且管理 UTXO 并发问题,同时还有交易签名和广播的性能瓶颈。

MetaSV 将为应用方封闭所有的内部复杂性,只需要一个简单的交易即可高速发射交易。

使用方法

向以下地址转账超过 2000satoshi,即可触发 0.25 费率机枪。

1MpRcaGTx3iQ5EisGbfPa2jTWUPTQ5jqWZ

向以下地址转账超过 2000satoshi,即可触发 0.5 费率机枪。

1EHpcD2vyh7vwaYtFELthqoGXAS3iSfUTL

如果想在机枪生成的交易中写入个性签名,可以在转账交易的 OP_RETURN 中写入,例如:

0 OP_RETURN LoveBSV

那么在所有的机枪交易中都会输出一个这样的 OP_RETURN。如果不指定个性签名的话,将显示 MetaSV.com。

限制

一次转账触发的机枪将以固定的 10TPS 的速度进行发射。

系统同时执行的任务数量为 20 个(最高 200TPS),超过则需要排队等待执行。

查看结果

  1. 可以从一些实时交易显示网站,如BitcoinBlocks.live来查看实时效果。

  2. 也可以使用 MetaStream 来监控查询机枪的交易,例如: https://api.metasv.com/v1/stream/data?p3=7a2591 其中,p3 位 part 3 的位置,机枪会在此处写入触发此任务的交易 hash 的前 6 位作为任务 Id,用来搜索交易。在机枪发射完毕后,也可以使用 MetaSV 的数据查询接口,来查看机枪的发射历史,本例中交易 id 为 7a2591cbe716118ee3773f5584eee13a283f83657cd879cbab271e45e0fd8d7f。

  3. 还可以使用我们定制前端页面, https://webot.metasv.com/gatlin/your_order_txid 例如:example link

费用

转账金额至少 2000satoshi,低于 2000 的被视作捐赠,请注意。

单个交易的计费(单位:satoshi)如下公式所示:

0.5费率加特林: 单价 = (个性签名长度 - 10) * 10; 如果前面计算出的单价低于300那么单价取300

0.25费率加特林: 单价 = (个性签名长度 - 5) * 10; 如果前面计算出的单价低于200那么单价等于200

费用包含矿工手续费,构造 utxo 子弹的费用,以及 MetaSV 服务器费用等。

如果有大量交易上链需求,可以联系我们团队,给与优惠的费率。

意见和建议

如果您在使用过程中有任何的意见和建议,欢迎提交 issue 到 github 仓库:

https://github.com/KaKeimei/meta-sv/issues

更新日志

2020 年 6 月 8 日

  1. 增加地址基本信息和地址交易列表接口。

2020 年 6 月 3 日

  1. 增加区块查询接口。

2020 年 5 月 28 日

  1. utxo 新增后代字段。查询 utxo 时可以看到后代数。

2020 年 5 月 27 日

  1. metanet node 查询新增公钥字段。查询时可使用节点公钥。

2020 年 5 月 17 日

  1. 广播交易之后,将直推矿工,并增加返回矿工签名等信息

2020 年 5 月 14 日

  1. 在商户用接口中增加 Paymail 地址查询服务

2020 年 5 月 9 日

  1. 增加事件触发器的服务
  2. 增加加特林机枪服务

2020 年 5 月 5 日

  1. metastream 订阅 block,新增 miner 名称以及 coinbase message

2020 年 4 月 17 日

  1. metanet 节点查询新增 rootTxid,rootAddress 字段
  2. 数据列表查询新增时间段参数

2020 年 4 月 14 日

实时地址流水流新增简单查询参数

2020 年 4 月 11 日

新增 MetaStream 流式推送接口

  1. 订阅实时区块流: /stream/block

  2. 订阅实时交易 hash 流: /stream/tx

  3. 订阅实时交易详情流: /stream/tx/detail

  4. 订阅实时地址流水流: /stream/address/{address}

  5. 订阅实时链上数据流: /stream/data

新增获取生交易的接口

  1. /tx/{txid}/raw

修改如下接口,当资源未找到的时候,返回 code 404:

  1. /tx/{txid}

  2. /data/tx/{txid} /data/tx/{txid}/{outputIndex}

2020 年 3 月 27 日

新增两个接口,支持 utxo 操作:

  1. utxo 批量选取接口 /merchants/utxo_select

  2. utxo 翻页查询接口 /address/{address}/utxo

2020 年 3 月 15 日

alpha 版本发布

错误码

汇总目前所有接口可能返回的 Code 错误码与含义:

错误码 代号 说明
404 NOT_FOUND 所请求的资源不存在
500 SYSTEM_ERROR 系统发生错误
20001 UTXO_SELECT_AMOUNT_INSUFFICIENT 使用挑选 utxo 接口时,余额不足