bitcoin-ruby 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +2 -7
  4. data/COPYING +1 -1
  5. data/Gemfile +2 -6
  6. data/Gemfile.lock +34 -0
  7. data/README.rdoc +16 -68
  8. data/Rakefile +3 -6
  9. data/bin/bitcoin_shell +0 -1
  10. data/{concept-examples/blockchain-pow.rb → examples/concept-blockchain-pow.rb} +0 -0
  11. data/lib/bitcoin.rb +350 -296
  12. data/lib/bitcoin/builder.rb +3 -1
  13. data/lib/bitcoin/connection.rb +2 -1
  14. data/lib/bitcoin/contracthash.rb +76 -0
  15. data/lib/bitcoin/dogecoin.rb +97 -0
  16. data/lib/bitcoin/ffi/bitcoinconsensus.rb +74 -0
  17. data/lib/bitcoin/ffi/openssl.rb +98 -2
  18. data/lib/bitcoin/ffi/secp256k1.rb +144 -0
  19. data/lib/bitcoin/key.rb +12 -2
  20. data/lib/bitcoin/logger.rb +3 -12
  21. data/lib/bitcoin/protocol/block.rb +3 -9
  22. data/lib/bitcoin/protocol/parser.rb +6 -2
  23. data/lib/bitcoin/protocol/tx.rb +44 -13
  24. data/lib/bitcoin/protocol/txin.rb +4 -2
  25. data/lib/bitcoin/protocol/txout.rb +2 -2
  26. data/lib/bitcoin/script.rb +212 -37
  27. data/lib/bitcoin/trezor/mnemonic.rb +130 -0
  28. data/lib/bitcoin/version.rb +1 -1
  29. data/spec/bitcoin/bitcoin_spec.rb +32 -3
  30. data/spec/bitcoin/builder_spec.rb +18 -0
  31. data/spec/bitcoin/contracthash_spec.rb +45 -0
  32. data/spec/bitcoin/dogecoin_spec.rb +176 -0
  33. data/spec/bitcoin/ffi_openssl.rb +45 -0
  34. data/spec/bitcoin/fixtures/156e6e1b84c5c3bd3a0927b25e4119fadce6e6d5186f363317511d1d680fae9a.json +24 -0
  35. data/spec/bitcoin/fixtures/8d0b238a06b5a70be75d543902d02d7a514d68d3252a949a513865ac3538874c.json +24 -0
  36. data/spec/bitcoin/fixtures/coinbase-toshi.json +33 -0
  37. data/spec/bitcoin/fixtures/coinbase.json +24 -0
  38. data/spec/bitcoin/fixtures/dogecoin-block-60323982f9c5ff1b5a954eac9dc1269352835f47c2c5222691d80f0d50dcf053.bin +0 -0
  39. data/spec/bitcoin/fixtures/rawtx-01-toshi.json +46 -0
  40. data/spec/bitcoin/fixtures/rawtx-02-toshi.json +46 -0
  41. data/spec/bitcoin/fixtures/rawtx-03-toshi.json +73 -0
  42. data/spec/bitcoin/fixtures/rawtx-testnet-04fdc38d6722ab4b12d79113fc4b2896bdcc5169710690ee4e78541b98e467b4.bin +0 -0
  43. data/spec/bitcoin/fixtures/rawtx-testnet-0b294c7d11dd21bcccb8393e6744fed7d4d1981a08c00e3e88838cc421f33c9f.bin +0 -0
  44. data/spec/bitcoin/fixtures/rawtx-testnet-3bc52ac063291ad92d95ddda5fd776a342083b95607ad32ed8bc6f8f7d30449e.bin +0 -0
  45. data/spec/bitcoin/fixtures/rawtx-testnet-6f0bbdd4e71a8af4305018d738184df32dbb6f27284fdebd5b56d16947f7c181.bin +0 -0
  46. data/spec/bitcoin/fixtures/rawtx-testnet-a7c9b06e275e8674cc19a5f7d3e557c72c6d93576e635b33212dbe08ab7cdb60.bin +0 -0
  47. data/spec/bitcoin/fixtures/rawtx-testnet-f80acbd2f594d04ddb0e1cacba662132104909157dff526935a3c88abe9201a5.bin +0 -0
  48. data/spec/bitcoin/protocol/block_spec.rb +0 -22
  49. data/spec/bitcoin/protocol/tx_spec.rb +145 -2
  50. data/spec/bitcoin/script/script_spec.rb +282 -0
  51. data/spec/bitcoin/secp256k1_spec.rb +48 -0
  52. data/spec/bitcoin/spec_helper.rb +0 -51
  53. data/spec/bitcoin/trezor/mnemonic_spec.rb +161 -0
  54. metadata +48 -98
  55. data/bin/bitcoin_dns_seed +0 -130
  56. data/bin/bitcoin_gui +0 -80
  57. data/bin/bitcoin_node +0 -153
  58. data/bin/bitcoin_node_cli +0 -81
  59. data/bin/bitcoin_wallet +0 -402
  60. data/doc/CONFIG.rdoc +0 -66
  61. data/doc/EXAMPLES.rdoc +0 -13
  62. data/doc/NAMECOIN.rdoc +0 -34
  63. data/doc/NODE.rdoc +0 -225
  64. data/doc/STORAGE.rdoc +0 -33
  65. data/doc/WALLET.rdoc +0 -102
  66. data/examples/balance.rb +0 -66
  67. data/examples/forwarder.rb +0 -73
  68. data/examples/index_nhash.rb +0 -24
  69. data/examples/reindex_p2sh_addrs.rb +0 -44
  70. data/examples/relay_tx.rb +0 -22
  71. data/examples/verify_tx.rb +0 -57
  72. data/lib/bitcoin/config.rb +0 -58
  73. data/lib/bitcoin/gui/addr_view.rb +0 -44
  74. data/lib/bitcoin/gui/bitcoin-ruby.png +0 -0
  75. data/lib/bitcoin/gui/bitcoin-ruby.svg +0 -80
  76. data/lib/bitcoin/gui/conn_view.rb +0 -38
  77. data/lib/bitcoin/gui/connection.rb +0 -70
  78. data/lib/bitcoin/gui/em_gtk.rb +0 -30
  79. data/lib/bitcoin/gui/gui.builder +0 -1643
  80. data/lib/bitcoin/gui/gui.rb +0 -292
  81. data/lib/bitcoin/gui/helpers.rb +0 -115
  82. data/lib/bitcoin/gui/tree_view.rb +0 -84
  83. data/lib/bitcoin/gui/tx_view.rb +0 -69
  84. data/lib/bitcoin/namecoin.rb +0 -280
  85. data/lib/bitcoin/network/command_client.rb +0 -104
  86. data/lib/bitcoin/network/command_handler.rb +0 -570
  87. data/lib/bitcoin/network/connection_handler.rb +0 -387
  88. data/lib/bitcoin/network/node.rb +0 -565
  89. data/lib/bitcoin/storage/dummy/dummy_store.rb +0 -179
  90. data/lib/bitcoin/storage/models.rb +0 -171
  91. data/lib/bitcoin/storage/sequel/migrations.rb +0 -99
  92. data/lib/bitcoin/storage/sequel/migrations/001_base_schema.rb +0 -52
  93. data/lib/bitcoin/storage/sequel/migrations/002_tx.rb +0 -45
  94. data/lib/bitcoin/storage/sequel/migrations/003_change_txin_script_sig_to_blob.rb +0 -18
  95. data/lib/bitcoin/storage/sequel/migrations/004_change_txin_prev_out_to_blob.rb +0 -18
  96. data/lib/bitcoin/storage/sequel/migrations/005_change_tx_hash_to_bytea.rb +0 -14
  97. data/lib/bitcoin/storage/sequel/migrations/006_add_tx_nhash.rb +0 -31
  98. data/lib/bitcoin/storage/sequel/migrations/007_add_prev_out_index_index.rb +0 -16
  99. data/lib/bitcoin/storage/sequel/migrations/008_add_txin_p2sh_type.rb +0 -31
  100. data/lib/bitcoin/storage/sequel/migrations/009_add_addrs_type.rb +0 -56
  101. data/lib/bitcoin/storage/sequel/sequel_store.rb +0 -551
  102. data/lib/bitcoin/storage/storage.rb +0 -517
  103. data/lib/bitcoin/storage/utxo/migrations/001_base_schema.rb +0 -52
  104. data/lib/bitcoin/storage/utxo/migrations/002_utxo.rb +0 -18
  105. data/lib/bitcoin/storage/utxo/migrations/003_update_indices.rb +0 -14
  106. data/lib/bitcoin/storage/utxo/migrations/004_add_addrs_type.rb +0 -14
  107. data/lib/bitcoin/storage/utxo/utxo_store.rb +0 -374
  108. data/lib/bitcoin/validation.rb +0 -400
  109. data/lib/bitcoin/wallet/coinselector.rb +0 -33
  110. data/lib/bitcoin/wallet/keygenerator.rb +0 -77
  111. data/lib/bitcoin/wallet/keystore.rb +0 -207
  112. data/lib/bitcoin/wallet/txdp.rb +0 -118
  113. data/lib/bitcoin/wallet/wallet.rb +0 -281
  114. data/spec/bitcoin/fixtures/freicoin-block-000000005d231b285e63af83edae2d8f5e50e70d396468643092b9239fd3be3c.bin +0 -0
  115. data/spec/bitcoin/fixtures/freicoin-block-000000005d231b285e63af83edae2d8f5e50e70d396468643092b9239fd3be3c.json +0 -43
  116. data/spec/bitcoin/fixtures/freicoin-genesis-block-000000005b1e3d23ecfd2dd4a6e1a35238aa0392c0a8528c40df52376d7efe2c.bin +0 -0
  117. data/spec/bitcoin/fixtures/freicoin-genesis-block-000000005b1e3d23ecfd2dd4a6e1a35238aa0392c0a8528c40df52376d7efe2c.json +0 -67
  118. data/spec/bitcoin/namecoin_spec.rb +0 -182
  119. data/spec/bitcoin/node/command_api_spec.rb +0 -663
  120. data/spec/bitcoin/storage/models_spec.rb +0 -104
  121. data/spec/bitcoin/storage/reorg_spec.rb +0 -236
  122. data/spec/bitcoin/storage/storage_spec.rb +0 -387
  123. data/spec/bitcoin/storage/validation_spec.rb +0 -300
  124. data/spec/bitcoin/wallet/coinselector_spec.rb +0 -38
  125. data/spec/bitcoin/wallet/keygenerator_spec.rb +0 -69
  126. data/spec/bitcoin/wallet/keystore_spec.rb +0 -190
  127. data/spec/bitcoin/wallet/txdp_spec.rb +0 -76
  128. data/spec/bitcoin/wallet/wallet_spec.rb +0 -238
@@ -1,66 +0,0 @@
1
- = Config
2
-
3
- All commands accept configuration, either via config file, or at the command line.
4
-
5
- == Locations
6
-
7
- There are 3 default locations where configfiles are loaded from:
8
-
9
- * /etc/bitcoin-ruby.yml
10
- * ~/.bitcoin-ruby.yml
11
- * ./bitcoin-ruby.yml
12
-
13
- Files are loaded in order (if they exist) and override each others settings.
14
-
15
- To specify a different config file use the +--config+ option.
16
-
17
- == Files
18
-
19
- Inside a config file, you can put options for the different commands, separated
20
- into categories.
21
-
22
- all:
23
- network: bitcoin
24
- storage: sequel::postgres:/bitcoin
25
- command: 127.0.0.1:1234
26
- blockchain:
27
- max:
28
- connect: 30
29
- wallet:
30
- keystore: "simple::file=keys.json"
31
-
32
- Options in the +all+ category are loaded by every command, and are loaded first
33
- (so command-specific options will override them).
34
-
35
- Other categories are loaded by the corresponding command and may override options
36
- from the +all+ category (ie. +bitcoin_wallet+ loads +all+ and +wallet+).
37
-
38
- == Default Values
39
-
40
- all:
41
- network: bitcoin # network identifier ("bitcoin", "testnet3", "namecoin")
42
- command: "127.0.0.1:9999" # IP:Port to listen for incomming command connections
43
- listen: "0.0.0.0:8332" # IP:Port to listen for incoming peer connections
44
- connect: "" # List of IP:Port,IP:Port of nodes to connect to
45
- storage: "sequel::sqlite://~/.bitcoin-ruby/<network>/blocks.db" # storage backend to use (see STORAGE)
46
- node:
47
- headers_only: false # download/store only block headers (experimental)
48
- dns: true # query peers from dns server
49
- epoll: false
50
- epoll_limit: 10000
51
- epoll_user: nil
52
- log: # log levels (debug, info, warn, error, fatal)
53
- network: info
54
- storage: info
55
- max:
56
- connections: 32 # number of peer connections
57
- addr: 1024 # peer-address store size
58
- queue: 500 # storage-queue size
59
- inv: 500 # inventory-queue size
60
- intervals:
61
- queue: 5 # work storage queue
62
- inv_queue: 5 # work inventory queue
63
- addrs: 15 # collect new peer addrs
64
- connect: 30 # connect to new peers
65
- wallet:
66
- keystore: "simple::file=~/.bitcoin-ruby/<network>/keys.json" # keystore to use
@@ -1,13 +0,0 @@
1
- = Examples
2
-
3
- There are a few demo scripts in `examples/` that might give you an idea where to start.
4
-
5
- connect.rb:: Connect to a network node and chat a little.
6
- verify_tx.rb:: Fetch a transaction from local storage and verify signatures.
7
- bbe_verify_tx.rb:: Fetch transaction from blockexplorer.com and verify signatures.
8
- balance.rb:: Display balance/transactions for given address.
9
- relay_tx.rb:: Relay transaction to the network.
10
- generate_tx.rb:: Create a transaction.
11
- validate_tx.rb:: Verify transaction signatures.
12
- simple_network_monitor_and_util:: Connects to the network and lets you monitor and query blocks/txs.
13
- forwarder.rb:: Waits for tx sent to your address and forwards them to another address.
@@ -1,34 +0,0 @@
1
- = Namecoin
2
-
3
- Namecoin is almost fully supported.
4
- * connect to the network,
5
- * store and query the blockchain
6
- * transact NMC
7
- * create/handle name_new/first/update transaction types
8
-
9
- The AuxPow is parsed from the block header, the only thing missing is actually verifying it.
10
-
11
- == Usage
12
-
13
- It should suffice to just set the network to :namecoin when running the node/wallet.
14
-
15
- bitcoin_node -n namecoin
16
-
17
- bitcoin_wallet -n namecoin list
18
- bitcoin_wallet -n namecoin send address:NCme95FewQEjTeBhBfXTyqjz1GTxw4bo56:1.0 0.1
19
-
20
- bitcoin_wallet -n namecoin name_show d/bitcoin
21
- bitcoin_wallet -n namecoin name_history d/bitcoin
22
-
23
- bitcoin_wallet -n namecoin name_new d/bitcoin
24
- bitcoin_wallet -n namecoin name_firstupdate d/bitcoin abcdef '{"foo": "bar"}'
25
- bitcoin_wallet -n namecoin name_update d/bitcoin '{"bar": "baz"}'
26
- bitcoin_wallet -n namecoin name_update d/bitcoin 'transferring...' NCme95FewQEjTeBhBfXTyqjz1GTxw4bo56
27
-
28
- == Implementation Details
29
-
30
- All the differences from regular bitcoin behaviour should be in separate modules inside
31
- Bitcoin::Namecoin. (this is still a work in progress)
32
-
33
- The AuxPow parsing is implemented in the Bitcoin::Protocol/::Block, because there might
34
- be other altchains using it one day.
@@ -1,225 +0,0 @@
1
- = NODE
2
-
3
- Bitcoin Node. Connects to the network and downloads the blockchain into local storage.
4
-
5
- == Usage
6
-
7
- To run the node with the default options (download the blockchain into ./bitcoin.db
8
- using the sequel::sqlite3 STORAGE backend):
9
-
10
- bitcoin_node
11
-
12
- You can specify options (see +--help+) or pass a config file with +--config+ (see CONFIG).
13
-
14
- Some common options you might want to use:
15
-
16
- <tt>-n --network</tt> <i><name></i>::
17
- Network to use. Usually +bitcoin+. Support for +namecoin+ is also quite good.
18
- Use +testnet+ for development.
19
-
20
- <tt>-c --config</tt> <i><file></i>::
21
- Read options from config file. See also CONFIG.
22
-
23
- <tt>--connect</tt> <i><ip:port></i>::
24
- List of peers to connect to.
25
-
26
- <tt>-s --storage</tt> <i><backend-string></i>::
27
- Storage backend to use. See also STORAGE.
28
-
29
- <tt>--import</tt> <i><blockchain dir></i>::
30
- Import blockchain in bitcoind/qt format from given directory.
31
-
32
- <tt>--skip-validation</tt>::
33
- Skip validation of received blockchain data. Can be used to speed up import/sync when
34
- blockchain data is received from a trusted source.
35
-
36
- <tt>--check-blocks <i><count></i></tt>::
37
- Check consistency of the +count+ most recent blocks. Pass -1 to check all blocks.
38
-
39
- <tt>-v --verbose</tt>::
40
- Display debug output.
41
-
42
- <tt>-h --help</tt>::
43
- Display all available options.
44
-
45
- It will take a long time to download/store the entire blockchain at first, so be patient ;)
46
-
47
-
48
- == Command socket
49
-
50
- The node opens a separate command socket which you can connect to and query statistics
51
- or get notified about new blocks/tx, etc. See below for a list of available commands.
52
- For more details, see Bitcoin::Network::CommandHandler.
53
-
54
- === CLI interface
55
-
56
- The `bitcoin_node_cli` command can be used to interface with a running node, send it commands
57
- and subscribe to notifications about new blocks/txs, etc.
58
- The easiest way is to just call `bitcoin_node_cli` in the same way you started
59
- `bitcoin_node`, but with extra command arguments:
60
-
61
- bitcoin_node_cli info
62
- bitcoin_node_cli -c config.yml info
63
- bitcoin_node_cli monitor "block tx"
64
-
65
-
66
- === CommandClient
67
-
68
- If you are programming in an EventMachine context, you might find the
69
- Bitcoin::Network::CommandClient convenient.
70
-
71
- === Raw socket
72
-
73
- Of course you can also connect to the socket by any other means you like, just
74
- your commands as valid JSON, like:
75
-
76
- {"id": 0, "method": <command>, "params": <params>}
77
-
78
- and you'll receive responses in the form:
79
-
80
- {"id": <id>, "method": <method>, "result": <result>}
81
-
82
- For example:
83
-
84
- $ echo -e '{"id": 1, "method": "tslb", "params": {}}\0' | nc 127.0.0.1 9999
85
- {"id":1,"method":"tslb","result":{"tslb":10}}
86
-
87
-
88
- === Commands
89
-
90
- ==== info
91
-
92
- Get various statistics.
93
-
94
- bitcoin_node_cli info
95
-
96
- ==== config
97
-
98
- Get the currently active configuration.
99
-
100
- bitcoin_node_cli config
101
-
102
- ==== connections
103
-
104
- Get currently connected peers.
105
-
106
- bitcoin_node_cli connections
107
-
108
- ==== connect
109
-
110
- Connect to given peer(s).
111
-
112
- bitcoin_node_cli connect <ip>:<port>[,<ip>:<port>]
113
-
114
- ==== disconnect
115
-
116
- Disconnect given peer(s).
117
-
118
- bitcoin_node_cli disconnect <ip>:<port>[,<ip>,<port>]
119
-
120
- ==== getblocks
121
-
122
- Trigger the node to ask its peers for new blocks.
123
-
124
- bitcoin_node_cli getblocks
125
-
126
- ==== getaddr
127
-
128
- Trigger the node to ask its for new peer addresses.
129
-
130
- bitcoin_node_cli getaddr
131
-
132
- ==== addrs
133
-
134
- Get known peer addresses (used by bin/bitcoin_dns_seed)
135
-
136
- bitcoin_node_cli addrs [count]
137
-
138
- ==== tslb
139
-
140
- Get Time Since Last Block.
141
-
142
- bitcoin_node_cli tslb
143
-
144
- ==== create_tx
145
-
146
- Create a transaction, collecting outputs from given +keys+, spending to +recipients+
147
- with an optional +fee+.
148
- Keys is an array that can contain either privkeys, pubkeys or addresses.
149
- When a privkey is given, the corresponding inputs are signed. If not, the
150
- signature_hash is computed and passed along with the response.
151
- After creating an unsigned transaction, one just needs to sign the sig_hashes
152
- and send everything to #assemble_tx, to receive the complete transaction that
153
- can be relayed to the network.
154
-
155
- bitcoin_node_cli create_tx 'keys=[<addr|pub|priv>, <...>]' 'recipients=[[<addr>, <amount>], ...]'
156
-
157
- ==== assemble_tx
158
-
159
- Assemble an unsigned transaction from the +tx+ and +sig_pubkeys+ params and return
160
- a valid transaction that can be relayed to the network.
161
- The +tx+ is the regular transaction structure, with empty input scripts
162
- (as returned by #create_tx when called without privkeys).
163
- +sig_pubkeys+ is an array of [signature, pubkey] pairs used to build the input scripts.
164
-
165
- bitcoin_node_cli assemble_tx tx=<hex> 'sig_pubkeys=[[<sig>, <pub>], ...]'
166
-
167
- ==== relay_tx
168
-
169
- Relay given transaction (in hex).
170
-
171
- bitcoin_node_cli relay_tx <tx in hex>
172
-
173
- ==== store_block
174
-
175
- Validate and store given block (in hex) as if it was received by a peer.
176
-
177
- bitcoin_node_cli store_block <block in hex>
178
-
179
- ==== store_tx
180
-
181
- Store given transaction (in hex) as if it was received by a peer.
182
-
183
- bitcoin_node_cli store_tx <tx in hex>
184
-
185
- ==== stop
186
-
187
- Stop the bitcoin node.
188
-
189
- bitcoin_node_cli stop
190
-
191
- ==== help
192
-
193
- List all available commands.
194
-
195
- bitcoin_node_cli help
196
-
197
-
198
- === Monitors
199
-
200
- ==== block
201
-
202
- Monitor new blocks that are accepted into the main chain.
203
- If +last+ parameter is given, it will send all blocks since then.
204
-
205
- bitcoin_node_cli monitor channel=block
206
- bitcoin_node_cli monitor channel=block last=1234
207
-
208
- ==== tx
209
-
210
- Monitor new transactions.
211
- If +conf+ parameter is given, it will only send txs with at least that many confirmations.
212
- If +last+ parameter is given, it will send all txs since then.
213
-
214
- bitcoin_node_cli monitor channel=tx
215
- bitcoin_node_cli monitor channel=tx conf=1 last=b187505ce2acbafcb02948657c0cadb855fbcbf0491f12670f9ff8d271de1983
216
-
217
- ==== output
218
-
219
- Monitor transaction outputs.
220
- If +conf+ parameter is given, it will only send outputs with at least that many confirmations.
221
- If +last+ parameter is given, it will send all outputs since then.
222
- If +addresses+ parameter is given, it will only send outputs related to those addresses.
223
-
224
- bitcoin_node_cli monitor channel=output
225
- bitcoin_node_cli monitor channel=output conf=1 last=b187505ce2acbafcb02948657c0cadb855fbcbf0491f12670f9ff8d271de1983:0
@@ -1,33 +0,0 @@
1
- = Storage
2
-
3
- There is support for different storage backends, currently there are two. Each backend can be used with sqlite, postgres or mysql.
4
-
5
- == Backends
6
-
7
- === UTXO
8
-
9
- The `utxo` backend stores only the minimum amount of information needed to validate new blocks, namely the `Unspent TX Outputs`. So it can be used to independently validate the whole blockchain as it goes, but it cannot query old data or serve blocks to peers. There is however a way to tell it specific addresses for which it will keep the history (the ones in your wallet).
10
-
11
- === Sequel
12
-
13
- The `sequel` backend stores the whole blockchain into a fully normalized SQL DB. It can be used to run arbitrary queries on the blockchain data, but the database gets huge and it takes a very long time to do an initial sync.
14
-
15
- It is used to run http://webbtc.com and there are also postgres dumps to get you started faster on http://dumps.webbtc.com.
16
-
17
-
18
- == Config
19
-
20
- For examples that require storage backends, you can specify them using
21
- a string containing the backend name and a configuration string.
22
- The default backend is +utxo::sqlite:~/.bitcoin-ruby/<network>blocks.db+, which is a sqlite database called +blocks.db+ in a directory named after the network you're using, inside your homedir.
23
-
24
- sequel::sqlite:/ # in-memory
25
- sequel::sqlite://bitcoin.db
26
- sequel::sqlite:///tmp/bitcoin.db
27
- sequel::postgres:/bitcoin
28
- sequel::postgres://<user>:<pass>@<host>:<port>/<database>
29
-
30
- == Custom Backends
31
-
32
- To implement a custom backend you need to inherit from Bitcoin::Storage::Backends::StoreBase
33
- and implement the methods defined there. When returning blocks/tx, you should wrap them in Bitcoin::Storage::Models objects. See the `dummy` backend for a simple example.
@@ -1,102 +0,0 @@
1
- = WALLET
2
-
3
- The wallet stores your keys/addresses, knows which transactions belong to them,
4
- can create transactions, etc.
5
-
6
- == Keystores
7
-
8
- A keystore is responsible for storing/accessing your keys/addresses.
9
-
10
- The +simple+ keystore (Bitcoin::Wallet::SimpleKeyStore) will create one key
11
- and put it into the given file. You can later ask it to generate more keys
12
- or add labels to the keys.
13
-
14
- The +deterministic+ keystore (Bitcoin::Wallet::KeyGenerator) uses the seed
15
- (which should be a large, unique, random string!) and generates the given number
16
- of keys. The nonce is optional, it just speeds up finding the first key.
17
- Note: Currently this keystore is not usable because it doesn't support labels yet.
18
-
19
-
20
- == Config
21
-
22
- To use the wallet you should create a configfile. It's not required but more convenient.
23
- See CONFIG for details.
24
-
25
- wallet:
26
- keystore: "simple::file=keys.json"
27
- # keystore: "deterministic::seed=foo,nonce=2116,keys=7"
28
-
29
-
30
- == Usage
31
-
32
- Then you can list all addresses in the wallet:
33
-
34
- bitcoin_wallet list
35
-
36
- Display transaction history for a specific address:
37
-
38
- bitcoin_wallet list <address>
39
-
40
- Create new keys/addresses:
41
-
42
- bitcoin_wallet new
43
-
44
- Import keys from base58 format:
45
-
46
- bitcoin_wallet import <base58>
47
-
48
- Export keys to base58 format:
49
-
50
- bitcoin_wallet export <address>
51
-
52
- == Transactions
53
-
54
- Transactions consist of multiple inputs and outputs. Inputs are selected
55
- automatically, and you can define outputs of different types.
56
- Each output has a +value+ (specified in base units/"satoshis"), and script represented by
57
- the script type (see below) and one or more recipients (addresses or public keys).
58
-
59
- Outputs can be specified as a combination of type, recipient(s) and value.
60
-
61
- bitcoin_wallet send <type>:<recipients>:<value> [<fee>]
62
-
63
- This will create and sign a transaction and display it, asking for confirmation.
64
- If you accept, it will be sent to your node and relayed to the rest of the network.
65
-
66
-
67
- There are different script types:
68
-
69
-
70
- === Address
71
-
72
- Specify address/hash160 of the public key needed to spend the output again.
73
- This is the most commonly used transaction type at the moment.
74
-
75
- bitcoin_wallet send address:1GQkkFvAFW2ts3YLnEvMnu76WyCB6yDb4d:0.1 0.005
76
-
77
-
78
- === Pubkey
79
-
80
- Specify public key needed to spend the output.
81
- Somewhat deprecated (because of the higher long-term storage requirements compared
82
- to address-transactions).
83
-
84
- bitcoin_wallet send pubkey:<pubkey in hex>:1.0 0.005
85
-
86
-
87
- === Multisig
88
-
89
- Specify multiple addresses needed to spend the output.
90
-
91
- bitcoin_wallet send <type>:<m>:<key>:<key>:<amount> [<fee>]
92
- bitcoin_wallet send multisig:1:1GQkkFvAFW2ts3YLnEvMnu76WyCB6yDb4d:1C5uWeXorS46ZubciCLN4zyR7sAqeNJfLD:1.0 0.005
93
-
94
- You can give up to 3 addresses/keys and +m+ specifies how many of them are required to spend
95
- the output.
96
-
97
- Note: Currently you need to have all keys in the same wallet for this to work.
98
-
99
-
100
- === P2SH
101
-
102
- # TODO