比特币对接文档

比特币对接

地址分类

  • p2sk(``)
  • p2skh(主网地址是以"1"开头,例如:16dN3XhaTejyZFy4hWompK2x8de2T46wA8; 测试网是以"m"或"n"开头, 例如:mvZjn2485hwxjVPJoLAZVyJKUDn8aGpBy5)
  • p2sh (主网地址是以"3"开头,例如:33ZzFZZJcvtnLBWRdne6F9SpD9Rc7sjSDX; 测试网以"2"开头,例如:2Mt5wo9k8ykrJLrszhom1drPLNSArYAbLsH; ), 目前, 多重签名基本上使用这种类型地址

提币流程

1.地址导入

  • 热钱包(私钥在钱包软件中):通过钱包密码就可以直接进行转账

  • 观察钱包(私钥不在钱包软件中):只能监测地址的入币和出币,可以通过listunspent列出其utxo集, 也可以使用createrawtransaction创建交易

2.列出utxo

通过rpc接口listunspent列出一个地址的utxo集

复制代码
listunspent  最小确认数  最大确认数  ["地址1", "地址2" ]  include_unsafe(是否包含不安全的utxo,即确认数太少)  query_options("其他查询选项")

例如:

listunspent 0 9999999 '[\'2MyeRq1tEWJR9rNeTcAZzoW6tUZiQpvRJum\']' true  

3.创建裸交易

复制代码
createrawtransaction "[{\"txid\":\"1f945d93db219da806538eacb9251856687c40b5879941ddd01692734c8c229d\", \"vout\":1}]" "{\"mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB\":\"0.0001\",\"2Mt5wo9k8ykrJLrszhom1drPLNSArYAbLsH\":\"0.028000\"}"

4.交易签名(离线, 在线)

  • 离线签名(支持多签, 如果是p2sh地址, 需要填写redeemScript, redeemScript创建多签地址时生成的, 如果是普通p2sh地址需要将私钥导入钱包,使用listunspent可以查看到redeemScript)

    signrawtransactionwithkey 02000000019d228c4c739216d0dd419987b5407c68561825b9ac8e5306a89d21db935d941f0100000000ffffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88ac80b92a000000000017a9140936dda3ae8df6ae9c8f3f48948caaad60cc44d18700000000 "["cPGsdAQLFnKRWrtbGKbdcbLRCnx2MEJ7vk5uCFy9a6PRpNaJDsAT"]" "[{"txid":"1f945d93db219da806538eacb9251856687c40b5879941ddd01692734c8c229d", "vout":1, "redeemScript": "0014db469d3cddb96c5fb6a6b5bebb9bc97ef71cc0e0", "scriptPubKey": "a9140936dda3ae8df6ae9c8f3f48948caaad60cc44d187","amount": 0.02990000}]" "ALL"

  • 在线签名(私钥在钱包中)不需要inputs

  • 普通p2skh地址(主网是"1"开头, 测试网是"m"或"n"开头), input中不需要填写 redeemScript

5.发送交易

在全节点上使用sendrawtransaction发送即可

如果在signerawtransaction时,input中的amout填写错误, 在发送sendrawtransaction会出现non-mandatory-script-verify-flag (Signature must be zero for failed CHECK(MULTI)SIG operation) (code 64) (code -26)

复制代码
sendrawtransaction 020000000001019d228c4c739216d0dd419987b5407c68561825b9ac8e5306a89d21db935d941f0100000017160014db469d3cddb96c5fb6a6b5bebb9bc97ef71cc0e0ffffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88ac80b92a000000000017a9140936dda3ae8df6ae9c8f3f48948caaad60cc44d1870247304402206647f4945ca9cf625a66b9b80d72deb98a21e52ede4c4958644f51c390c814620220330a6b8e238f63011b8514303002a0582961e2a68771fd22429ca039509f864b01210246cb83e5dc00e07bdb9ddf4a27c98ec6272a20df4baaeadbbc2b996847955e3200000000

txid如下:
75eaa247413b9b1cbd1aa4000a4e732be1fb6182f17b36435a6cfee4e3737a78

6.交易确认

复制代码
算法描述:

getrawtransaction 75eaa247413b9b1cbd1aa4000a4e732be1fb6182f17b36435a6cfee4e3737a78 true

{
  "txid": "75eaa247413b9b1cbd1aa4000a4e732be1fb6182f17b36435a6cfee4e3737a78",
  "hash": "1e2b637a3a7bc409e9db6c83b015f9682a075f3cec88ff3cc1407023cba938db",
  "version": 2,
  "size": 249,
  "vsize": 168,
  "weight": 669,
  "locktime": 0,
  "vin": [
    {
      "txid": "1f945d93db219da806538eacb9251856687c40b5879941ddd01692734c8c229d",
      "vout": 1,
      "scriptSig": {
        "asm": "0014db469d3cddb96c5fb6a6b5bebb9bc97ef71cc0e0",
        "hex": "160014db469d3cddb96c5fb6a6b5bebb9bc97ef71cc0e0"
      },
      "txinwitness": [
        "304402206647f4945ca9cf625a66b9b80d72deb98a21e52ede4c4958644f51c390c814620220330a6b8e238f63011b8514303002a0582961e2a68771fd22429ca039509f864b01",
        "0246cb83e5dc00e07bdb9ddf4a27c98ec6272a20df4baaeadbbc2b996847955e32"
      ],
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00010000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 9f9a7abd600c0caa03983a77c8c3df8e062cb2fa OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB"
        ]
      }
    },
    {
      "value": 0.02800000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_HASH160 0936dda3ae8df6ae9c8f3f48948caaad60cc44d1 OP_EQUAL",
        "hex": "a9140936dda3ae8df6ae9c8f3f48948caaad60cc44d187",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2Mt5wo9k8ykrJLrszhom1drPLNSArYAbLsH"
        ]
      }
    }
  ],
  "hex": "020000000001019d228c4c739216d0dd419987b5407c68561825b9ac8e5306a89d21db935d941f0100000017160014db469d3cddb96c5fb6a6b5bebb9bc97ef71cc0e0ffffffff0210270000000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88ac80b92a000000000017a9140936dda3ae8df6ae9c8f3f48948caaad60cc44d1870247304402206647f4945ca9cf625a66b9b80d72deb98a21e52ede4c4958644f51c390c814620220330a6b8e238f63011b8514303002a0582961e2a68771fd22429ca039509f864b01210246cb83e5dc00e07bdb9ddf4a27c98ec6272a20df4baaeadbbc2b996847955e3200000000",
  "blockhash": "00000000000001bc26994340915b8b13db186c66e065b572ca684ab377bf64ef", //交易所在区块的区块hash
  "confirmations": 4,   //交易确认数
  "time": 1550718558,
  "blocktime": 1550718558
}

getblock 00000000000001bc26994340915b8b13db186c66e065b572ca684ab377bf64ef


{
  "hash": "00000000000001bc26994340915b8b13db186c66e065b572ca684ab377bf64ef",
  "confirmations": 7,  //目前区块确认数
  "strippedsize": 1022,
  "size": 1707,
  "weight": 4773,
  "height": 1479868,
  "version": 807034880,
  "versionHex": "301a6000",
  "merkleroot": "0799ecf47189b8c6f302965fa2fbcf289099fb6264a290ba2643a051989a4f63",
  "tx": [
    "3103afff6e37d3edbb03a97fc2e2b1c46758e837d7569a9cd797de17a0ec35a9",
    "75eaa247413b9b1cbd1aa4000a4e732be1fb6182f17b36435a6cfee4e3737a78",
    "cb08675a7f240a6a9b86b8e50535001f8e75092013c1f2370b6f39f5e550fad2",
    "80d70233474d9d9383c24bd3aec1d94304f92ee49bb9cccc1fac67cb297663fc"
  ],
  "time": 1550718558,
  "mediantime": 1550718216,
  "nonce": 658858781,
  "bits": "1a03f010",
  "difficulty": 4260551.067022134,
  "chainwork": "0000000000000000000000000000000000000000000000f563640f85fedea691",
  "nTx": 4,
  "previousblockhash": "00000000000002580ef22c6a097723f010e56bd046360d5f8eefa8dcbb91e84d",
  "nextblockhash": "000000000000007ed7332a15fbe4566e1e5410966d4a3b48b2789695e20ef0a6"
}

区块监测(充币通知)

  • 方案1(理论上适用所有币)

    解析最新区块中的交易, 找到关心的交易

    根据区块hash获取区块信息

  • 方案2(比特币可以用这种方法做, 其他币未知)

    将地址导入钱包中(观察钱包), 使用 listunspent(可以设置确认数)来监测区块变化, 例如:使用listunspent 0 0 ["地址A"]可以查看交易池中刚刚收到的交易, 通过设置确认数可以查看地址是否入币了

相关推荐
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意9 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码9 天前
嵌入式学习路线
学习
毛小茛9 天前
计算机系统概论——校验码
学习
babe小鑫9 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms9 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下9 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。9 天前
2026.2.25监控学习
学习
im_AMBER9 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J9 天前
从“Hello World“ 开始 C++
c语言·c++·学习