发表时间:2020年10月1日
信息来源:Bitcoinsv.io
以下的指引是介绍在主流的Linux系统下安装Miner ID可使用的工具,前提假设是你使用着类似Bourne shell的shell,比如bash
。
在此了解Miner ID的BRFC(比特币注释请求)。
在此了解Miner ID参考实现的开源代码。
技术支持
欲获得技术支持、参与讨论技术标准和参考实现的,请加入以下telegram群组。
从源代码开始构建
要求
对于开发,你只需要在本地中安装Node.js(最低10.12.0版本)和节点全局软件包NPM。
节点
- 在Windows下安装节点
前往 Node.js官网下载安装包。另外,请确保git在你的PATH中可用,npm
可能会需要它(你可以在这里找到git)。
- 在Ubuntu上安装节点
你可以使用apt install轻松安装nodejs和npm,只需运行以下命令:
```console
$ sudo apt install nodejs
$ sudo apt install npm
```
- 其它操作系统
你可以在Node.js官网和NPM官网找到更多关于安装的信息。
安装
$ git clone https://github.com/bitcoin-sv/minerid-reference.git
$ cd minerid-reference
$ npm install
配置
打开config.json 并根据你的设置编辑它:
- 更改
port
- 更改
minerIdDataPath
,它用于存储用户的Miner ID - 更改
keystore
它用于存储Miner ID私钥 - 更改
network
(mainnet="livenet" | testnet="testnet" | regtest="regtest") - 更改Bitcoin RPC参数:
rpcHost
rpcPort
rpcUser
rpcPassword
运行项目
运行API服务器:
$ npm start
运行CLI:
$ npm run cli
测试
$ npm test
Docker
Build Image
你可以使用自己的更改配置来自行build image。
$ docker build . -t minerid_reference:1.1.1
Pull Image
你还可以从Miner ID的公共Docker Hub库中提取image。
$ docker pull bitcoinsv/minerid:1.1.1
使用Docker Compose运行
docker-compose
文件示例:
version: "3.8"
services:minerid:image: bitcoinsv/minerid:1.1.1ports:- 9002:9002restart: alwaysenvironment:NODE_CONFIG: '{"bitcoin": {"rpcHost":"host.docker.internal"},"network": "regtest"}'volumes:- minerid:/root/.keystore- minerid:/root/.minerid-client
volumes:minerid:external: false
由于Miner ID本质上是围绕一个私钥(Miner ID)构建的服务,因此我们使用数据卷来运行容器,以避免容器由于某种原因失灵及私钥丢失的情况。在环境变量中,我们通过将其传递给NODE_CONFIG
来指定要使用哪个网络(livenet
(或mainnet)、testnet
或regtest
),以及要使用哪些比特币节点RPC参数和凭证。
初始设置
一旦docker容器开始运行,你就需要生成一个Miner ID私钥,并且设置Validity Check Transaction output (VCTx),来设置和配置你的Miner ID。你可以使用docker exec
:
$ docker exec -it <CONTAINER> bash root@2623e1f4ed4e:/app#
接下来运行cli命令,来对上面进行设置和配置:
root@2623e1f4ed4e:/app# npm run cli -- generateminerid --name testMiner
root@2623e1f4ed4e:/app# npm run cli -- generatevctx --name testMiner
如果你正在livenet
(主网)上运行,请按照指示为你的VCT供应资金。
使用Miner ID API
一旦你已经设置好并开始运行Miner ID服务,你将需要从矿池软件调用Miner ID的公开API,从而将Miner ID包含在coinbase交易中。如果要对mAPI响应进行签名,你还需要从mAPI调用Miner ID。Miner ID API的定义如下,也可以点击这里查看:
实施
REST API有四个端点:
1、GET /opreturn/:alias/:blockHeight([0-9]+)
Alias
:Miner ID的别名blockHeight
:Miner ID文档创建时的区块高度
block height which Miner ID document is created for/at
返回高度为 blockHeight
、别名为alias
的Miner ID输出(锁定)脚本,为十六进制字符串
示例
2、POST /coinbase2
正文:
{ "blockHeight": number,"alias": string,"coinbase2": string,"jobData": {"miningCandidate": {}, "getInfo": {}, "feeSpec": {} }
}
返回包含Miner ID输出的新版coinbase2
字段 |
功能 |
|
coinbase交易所在的区块高度 |
|
Miner ID的别名 |
|
coinbase ( |
|
挖矿行为的特定数据将通过扩展的方式添加到Miner ID coinbase文档中 |
|
BitCoin RPC |
|
BitCoin RPC |
|
mAPI默认 |
请注意:coinbase交易在stratum协议中被分成如下:
示例
{ "blockHeight": 100, "alias": "testMiner", "coinbase2": "ffffffff011a0a5325000000001976a9145deb9155942e7d38febc15de8870222fd24d080e88ac00000000", "jobData": {"miningCandidate": {"id": "e706b0e6-793b-448f-a1ae-8ef54459eb72","prevhash": "70f5701644897c92b60e98dbbfe72e1cfd7a2728c6fa3a29c4b4f6e986b0ccaa","coinbaseValue": 5000000974,"version": 536870912,"nBits": "207fffff","time": 1590152467,"height": 106,"num_tx": 4,"sizeWithoutCoinbase": 1052,"merkleProof": ["9bd12ce6508574b3163aadb14eab7bd862306da85b221eb284fb41d6012db98f","56f04cc78ac493defced65dd58f4437c67bcc697b59778b0cd96c3c64c1b0bbf"]},"getInfo": {"version": 101000300,"protocolversion": 70015,"walletversion": 160300,"balance": 199.99997068,"blocks": 104,"timeoffset": 0,"connections": 4,"proxy": "","difficulty": 4.656542373906925e-10,"testnet": false,"stn": false,"keypoololdest": 1575386196,"keypoolsize": 1999,"paytxfee": 0.00000000,"relayfee": 0.00000250,"errors": "","maxblocksize": 9223372036854775807,"maxminedblocksize": 128000000,"maxstackmemoryusagepolicy": 100000000,"maxstackmemoryusageconsensus": 9223372036854775807},"feeSpec": {"fees": [{"feeType": "standard","miningFee": {"satoshis": 1,"bytes": 1},"relayFee": {"satoshis": 1,"bytes": 10}},{"feeType": "data","miningFee": {"satoshis": 2,"bytes": 1000},"relayFee": {"satoshis": 1,"bytes": 10000}}]}}
}
3、GET /opreturn/:alias/rotate
alias
: Miner ID别名
rotates the Miner ID key for an alias
Miner ID
根据Miner ID转换出Miner ID的别名alias
示例
$ curl localhost:9002/opreturn/testMiner/rotate OK
4、GET /minerid/:alias
alias
: Miner ID别名
返回Miner iD别名alias
的十六进制压缩公钥(33字节)字符串
示例
$ curl localhost:9002/minerid/testMiner
02644f5000535bbc135f9c8613f86f10c66a4a773eda5e913eff64eb328bc6326a
5. GET /minerid/:alias/sign/:hash
alias
: Miner ID别名hash
: SHA256哈希(32字节十六进制字符串) 被用于 ECDSA签名算法
使用Miner ID别名alias
返回哈希签名(71至73字节十六进制字符串)
示例
$ curl localhost:9002/minerid/testMiner/sign/02644f5000535bbc135f9c8613f86f10c66a4a773eda5e913eff64eb328bc632
3045022100e0f86a5b1748ae48b0d10ea305202769d754071272cba0fbb82f74f8e8da8b530220494351742f3ba9e51b155df15b13f27c927d21956822aedcbb7d179c66d4d4c0
Bitcoin SV节点项目为比特币协会所拥有,请前往Bitcoinsv.io网站获取BSV节点的官方信息。