BTC的官方网站: http://bitcoin.org
参考: https://bitcoin.org/en/developer-examples
1.安装. 过程如下:
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind
2. 配置:
mkdir -p ~/.bitcoin
touch ~/.bitcoin/bitcoin.conf
vim ~/.bitcoin/bitcoin.conf
server=1 (是否是server)
daemon=1 ( 是否是独立进程, 守护进程 )
# If run on the test network instead of the real bitcoin network
# testnet=0 # 这里设置成为1,就是 测试网络.
# You must set rpcuser and rpcpassword to secure the JSON-RPC api
# Please make rpcpassword to something secure, `5gKAgrJv8CQr2CGUhjVbBFLSj29HnE6YGXvfykHJzS3k` for example.
# Listen for JSON-RPC connections on (default: 8332 or testnet: 18332)
rpcuser=godmode (rpc 用户名)
rpcpassword=????? (密码)
rpcport=8332 (端口)
( 这个应该是用于通知,不是太明白)
walletnotify=/usr/local/sbin/rabbitmqadmin publish routing_key=peatio.deposit.coin payload='{"txid":"%s", "channel_key":"satoshi"}'
# 数据要保存到这里.
datadir=/opt/btc_data
3. 开始在开发网络上做一些事情. (注意,不是测试网络.测试网络的数据也很大的...直接用 -regtest 在本机搞)
sudo bitcoind -conf=/home/shensiwei/.bitcoin/bitcoin.conf -regtest
bitcoin-cli -regtest generate 101
这个会生成 101个区块. 会在创世区块中,生成50个 BTC. 需要100次确认. 所以,我们要生成 101个.这样就把BTC拿到手了 .
4. 查询余额
$ bitcoin-cli -regtest getbalance
50.00000000
转账
1. 创建个新地址
$ bitcoin-cli -regtest getnewaddress
2MyKRaVfMVT9nbNYAA62Z8s6mT99pg5xLbg
NEWADDRESS=2MyKRaVfMVT9nbNYAA62Z8s6mT99pg5xLbg
2. 转账
$ bitcoin-cli -regtest sendtoaddress $NEWADDRESS 10.00
0e688c4ea859ca424a6f69124cd41d3fe323bc3dafe36ecf7e53334b449ebdd3 (返回的这个,是交易号)
这里是给新的地址转 10元.
运行下面两个命令,可以看到: utxo:
UTXO: unspend transaction output. 未花费的交易输出 (这个概念很重要. )
$ bitcoin-cli -regtest listunspent ( 这里显示是空数组,比特币默认显示 确认过的 UTXO )
[
]
$ bitcoin-cli -regtest listunspent 0 ( 这里显示 没有被确认过的, 所有的 UTXO)
[
{
"txid": "0e688c4ea859ca424a6f69124cd41d3fe323bc3dafe36ecf7e53334b449ebdd3",
"vout": 0,
"address": "2MyKRaVfMVT9nbNYAA62Z8s6mT99pg5xLbg",
"account": "",
"redeemScript": "0014d044221fbbf105311133a4120f2fa883d3d9e142",
"scriptPubKey": "a914429c17e03e0802f2392737f94380cd21d00b8d9887",
"amount": 10.00000000,
"confirmations": 0,
"spendable": true,
"solvable": true,
"safe": true
},
{
"txid": "0e688c4ea859ca424a6f69124cd41d3fe323bc3dafe36ecf7e53334b449ebdd3",
"vout": 1,
"address": "2MznuAx55TrVtoTkYdEbpdxysZvJ6DTUedN",
"redeemScript": "0014d8bf59ee939621cf90ebe91b29f7d2cb6659b8c2",
"scriptPubKey": "a91452c67c001ae5c148fc4b9c50a58f1434b1c3c62687",
"amount": 39.99996240,
"confirmations": 0,
"spendable": true,
"solvable": true,
"safe": true
}
]
如果这个时候,我们再生成一个block : bitcoin-cli -regtest generate 1
然后,就会发现前面的 UTXO 都是确认过的了.(确认过一次.) 代码就不粘贴了.
然后,我们来继续交易:
## Outputs - inputs = transaction fee, so always double-check your math!
> bitcoin-cli -regtest createrawtransaction '''
[
{
"txid": "'$UTXO_TXID'",
"vout": '$UTXO_VOUT' # 注意, 这里必须是 单引号, 不能在外面加上双引号, 否则会报错. missing vout key
}
]
''' '''
{
"'$NEW_ADDRESS'": 49.9999
}'''
0200000001b8cf2b8c86d53d08840120c56b64be89dd81847c264ef07b2ed9f4639b76a0770000000000ffffffff01f036d0b20000000017a914223c39af0bd86f4f377300c3f610f18b02455eff8700000000
# 这里设置好这个变量.
RAW_TX=01000000017b1eabe0209b1fe794124575ef807057c77ada2138ae4[...]
注意: 本来你有 50个BTC, 发给别人 49.9999个的话, GAS费用就是 0.0001
如果你不准确的计算出来的话, 那么 GAS费用会高的惊人.
接下来, 我们可以通过这个命令, 来还原刚才得到的 RAW_TX:
$ bitcoin-cli -regtest decoderawtransaction $RAW_TX
{
"txid": "138a9d28ae0827e903842fbd0b02dc39ebb506491c9ee590a9fe3651ca592261",
"hash": "138a9d28ae0827e903842fbd0b02dc39ebb506491c9ee590a9fe3651ca592261",
"version": 2,
"size": 83,
"vsize": 83,
"locktime": 0,
"vin": [
{
"txid": "77a0769b63f4d92e7bf04e267c8481dd89be646bc5200184083dd5868c2bcfb8",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 49.99990000,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 223c39af0bd86f4f377300c3f610f18b02455eff OP_EQUAL",
"hex": "a914223c39af0bd86f4f377300c3f610f18b02455eff87",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2MvNF7LQ9SRkw4vcaFRhaMCJYkYWAGceqWX"
]
}
}
]
}
下一步, 可以对刚才的操作进行"签名":
$ bitcoin-cli -regtest signrawtransaction $RAW_TX
{
"hex": "0200000001b8cf2b8c86d53d08840120c56b64be89dd81847c264ef07b2ed9f4639b76a0770000000049483045022100e2a52d661c6c0283f69b7a6591555da60f361fdf0fa7de3904af8f28ef058c9402205c5c8909b2cca90ec21d846a8b1ac8deeb870aa57fe516843d8e83283a0085b001ffffffff01f0ca052a0100000017a914223c39af0bd86f4f377300c3f610f18b02455eff8700000000",
"complete": true
}
$ SIGNED_RAW_TX=0200000001b8cf2b8c86d53d08840120c56b64be89dd81847c264ef07b2ed9f4639b76a0770000000049483045022100e2a52d661c6c0283f69b7a6591555da60f361fdf0fa7de3904af8f28ef058c9402205c5c8909b2cca90ec21d846a8b1ac8deeb870aa57fe516843d8e83283a0085b001ffffffff01f0ca052a0100000017a914223c39af0bd86f4f377300c3f610f18b02455eff8700000000
接下来, 就可以把这个被签名过的 交易, 发到网络上, (交易才会生效)
$ bitcoin-cli -regtest sendrawtransaction $SIGNED_RAW_TX
3eb56998a3a2c56d9c77476d07d1c1cbe0c3a04d59b9d0785013f4e6bab2f536
# 点击发送后, 本node 才会发送消息,通知其他的 node(或者叫 peers)
接下来, 我们手动创建一个block, 来模拟该交易已经被确认:
$ bitcoin-cli -regtest generate 1
[
"11a9300f1ca952ced5ac85405dfac8562a2304b2dcc1d5b98759844aa24a5b8c"
]