BTC 安装和使用笔记

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"
]
 

猜你喜欢

转载自blog.csdn.net/ffzhihua/article/details/80695886
今日推荐