btcruby 1.0.1 → 1.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47f8d99f965f48b15252c34e99721b005d2eed0d
4
- data.tar.gz: a364c03eccb5174fe5f110f466bac5e3f147b68c
3
+ metadata.gz: 668f16c886cfdceb4e178df2ae51b030dd1580d5
4
+ data.tar.gz: a83d764d41c055fef97c824a46f91f372c5b0e57
5
5
  SHA512:
6
- metadata.gz: 4161f2211ab6fce89f3e56d2ceef2eb977ffb55c71279ae94e52633b54e06a241ded2607e66db06d945c421e7d05d0ed519daeda839781c87a3b896b261c38ea
7
- data.tar.gz: d21def19c9077a78da729fe3604582fb2144607569a9cf85551a73891267967f92e583307ec98fd612f94b1dde6910521751eb5ed89d88ffbe9e767427ddf5f5
6
+ metadata.gz: 58827f74191443b4d0da51fe2d156072888947081c9c58a56b991a6ecb2b6f6e2915e99da08b4837b96752e94311e4a80fc90ffa0545a418acec59264fd596ba
7
+ data.tar.gz: 92c6cc676c97dafa2dd903ba24eb1a42e3061d890531c88e7fef096b9d57183e48866009a417cd5904eb167f709526e6dbf641dbaf333e635657998d0173eab8
@@ -58,19 +58,3 @@ Returns a binary string compressed using two passes of [SHA-256](http://en.wikip
58
58
  #### hash160
59
59
 
60
60
  Returns a binary string compressed using composition `ripemd160(sha256(string))`. Known in Bitcoin as *Hash160*.
61
-
62
- #### hmac_sha256(key: *String*)
63
-
64
- Returns a result of [HMAC](http://en.wikipedia.org/wiki/Hash-based_message_authentication_code) using [SHA-256](http://en.wikipedia.org/wiki/SHA-2) hash using `self` as data.
65
-
66
- #### hmac_sha256(data: *String*)
67
-
68
- Returns a result of [HMAC](http://en.wikipedia.org/wiki/Hash-based_message_authentication_code) using [SHA-256](http://en.wikipedia.org/wiki/SHA-2) hash using `self` as key.
69
-
70
- #### hmac_sha512(key: *String*)
71
-
72
- Returns a result of [HMAC](http://en.wikipedia.org/wiki/Hash-based_message_authentication_code) using [SHA-512](http://en.wikipedia.org/wiki/SHA-2) hash using `self` as data.
73
-
74
- #### hmac_sha512(data: *String*, key: *String*)
75
-
76
- Returns a result of [HMAC](http://en.wikipedia.org/wiki/Hash-based_message_authentication_code) using [SHA-512](http://en.wikipedia.org/wiki/SHA-2) hash using `self` as key.
@@ -11,7 +11,7 @@ Bitcoin Data Structures | Utilities
11
11
  [Constants](constants.md) | [Base58](base58.md) | [HashFunctions](hash_functions.md)
12
12
  [Address](address.md) | [Core Extensions](extensions.md) | [Key](key.md)
13
13
  ↳ [PublicKeyAddress](p2pkh.md) | [Data](data.md) | [Keychain](keychain.md)
14
- ↳ [ScriptHashAddress](p2psh.md) | [Diagnostics](diagnostics.md) | [OpenSSL](openssl.md)
14
+ ↳ [ScriptHashAddress](p2sh.md) | [Diagnostics](diagnostics.md) | [OpenSSL](openssl.md)
15
15
  ↳ [WIF](wif.md) | [Hash↔ID Conversions](hash_id.md) |
16
16
  [Block](block.md) | [ProofOfWork](proof_of_work.md) |
17
17
  [BlockHeader](block_header.md) | [WireFormat](wire_format.md) |
@@ -130,7 +130,7 @@ builder.input_addresses = [ "L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVw
130
130
  builder.unspent_outputs_provider_block = lambda do |addresses, outputs_amount, outputs_size, fee_rate|
131
131
  txout = BTC::TransactionOutput.new(
132
132
  value: 50_000,
133
- script: BTC::PublicKeyAddress.with_string("17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV").script,
133
+ script: BTC::PublicKeyAddress.parse("17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV").script,
134
134
  transaction_id: "115e8f72f39fad874cfab0deed11a80f24f967a84079fb56ddf53ea02e308986",
135
135
  index: 0
136
136
  )
@@ -179,7 +179,7 @@ tx.add_input(TransactionInput.new(
179
179
  # 2. Add a raw output with a script
180
180
  tx.add_output(TransactionOutput.new(
181
181
  value: 100_000,
182
- script: PublicKeyAddress.with_string("1CBtcGivXmHQ8ZqdPgeMfcpQNJrqTrSAcG").script))
182
+ script: PublicKeyAddress.parse("1CBtcGivXmHQ8ZqdPgeMfcpQNJrqTrSAcG").script))
183
183
 
184
184
  # 3. Get the private key from WIF
185
185
  key = Key.new(wif: "L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy")
@@ -99,6 +99,11 @@ Starts with `xprv` for mainnet and `tprv` for testnet.
99
99
 
100
100
  An alias to `extended_private_key`.
101
101
 
102
+ #### to_s
103
+
104
+ A [Base58Check](base58.md)-encoded extended key.
105
+ Returns `extended_private_key` if private, and `extended_public_key` if public.
106
+
102
107
  #### identifier
103
108
 
104
109
  A 160-bit binary identifier (aka "hash") of the keychain.
@@ -176,5 +181,3 @@ Equivalent to `derived_keychain(...).key`
176
181
  #### derived_key(*path*)
177
182
 
178
183
  Equivalent to `derived_keychain(path).key`
179
-
180
-
@@ -28,16 +28,6 @@
28
28
  module BTC
29
29
  class Address
30
30
 
31
- # Converts base58-encoded string to a BTC::Address instance.
32
- # If BTC::Address is already provided, returns it.
33
- def self.with_address(string_or_address)
34
- raise ArgumentError, "Use Address.parse(...) instead"
35
- end
36
-
37
- def self.with_string(base58check_string)
38
- raise ArgumentError, "Use #{self}.parse(...) instead"
39
- end
40
-
41
31
  # Decodes address from a Base58Check-encoded string
42
32
  def self.parse(string_or_address)
43
33
  raise ArgumentError, "Argument is missing" if !string_or_address
@@ -175,11 +165,6 @@ module BTC
175
165
 
176
166
  HASH160_LENGTH = 20
177
167
 
178
- # Instantiates addess with the 20-byte hash
179
- def self.with_data(hash, network: nil)
180
- raise ArgumentError, "Use #{self}.new(hash: ...) instead"
181
- end
182
-
183
168
  def initialize(string: nil, hash: nil, network: nil, _raw_data: nil)
184
169
  if string || _raw_data
185
170
  _raw_data ||= Base58.data_from_base58check(string)
@@ -240,11 +225,6 @@ module BTC
240
225
  end
241
226
  end
242
227
 
243
- # Instantiates an address with a public key binary data
244
- def self.with_public_key(public_key, network: nil)
245
- raise ArgumentError, "Use #{self}.new(public_key: ...) instead"
246
- end
247
-
248
228
  # Returns BTC::Script with data 'OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG'
249
229
  def script
250
230
  raise ArgumentError, "BTC::PublicKeyAddress: invalid data length (must be 20 bytes)" if self.data.bytesize != 20
@@ -277,16 +257,6 @@ module BTC
277
257
  end
278
258
  end
279
259
 
280
- # Instantiates address with a given redeem script.
281
- def self.with_redeem_script(redeem_script, network: nil)
282
- raise ArgumentError, "Use #{self}.new(redeem_script: ...) instead"
283
- end
284
-
285
- # Instantiates address with a given redeem script binary data.
286
- def self.with_redeem_script_data(redeem_script_data, network: nil)
287
- raise ArgumentError, "Use #{self}.new(hash: BTC.hash160(redeem_script.data)) instead"
288
- end
289
-
290
260
  # Returns BTC::Script with data 'OP_HASH160 <hash> OP_EQUAL'
291
261
  def script
292
262
  raise ArgumentError, "BTC::ScriptHashAddress: invalid data length (must be 20 bytes)" if self.data.bytesize != 20
@@ -77,14 +77,6 @@ module BTC
77
77
  )
78
78
  end
79
79
 
80
- def self.with_data(data)
81
- raise ArgumentError, "Use #{self}.new(data: ...) instead"
82
- end
83
-
84
- def self.with_stream(stream)
85
- raise ArgumentError, "Use #{self}.new(stream: ...) instead"
86
- end
87
-
88
80
  def initialize(data: nil,
89
81
  stream: nil,
90
82
  version: CURRENT_VERSION,
@@ -47,16 +47,6 @@ module BTC
47
47
  BTC.sha512(self)
48
48
  end
49
49
 
50
- def hmac_sha256(data: nil, key: nil)
51
- raise ArgumentError, "Either data or key must be specified" if !data && !key
52
- BTC.hmac_sha256(data: data || self, key: key || self)
53
- end
54
-
55
- def hmac_sha512(data: nil, key: nil)
56
- raise ArgumentError, "Either data or key must be specified" if !data && !key
57
- BTC.hmac_sha512(data: data || self, key: key || self)
58
- end
59
-
60
50
  end
61
51
  end
62
52
 
data/lib/btcruby/key.rb CHANGED
@@ -87,26 +87,6 @@ module BTC
87
87
  network: network)
88
88
  end
89
89
 
90
- # Creates an instance with public key data (compressed or not).
91
- # You can verify signatures with that instance, but cannot sign messages.
92
- # If the public key is compressed, public_key_compressed attribute will be set to true.
93
- def self.with_public_key(public_key, network: nil)
94
- raise ArgumentError, "Use Key.new(public_key: ...) instead"
95
- end
96
-
97
- # Creates an instance with private key data (32 bytes).
98
- # You can sign messages and verify signatures with that instance.
99
- # public_key_compressed is set to true as a default.
100
- def self.with_private_key(private_key, public_key_compressed: true, network: nil)
101
- raise ArgumentError, "Use Key.new(private_key: ...) instead"
102
- end
103
-
104
- # Creates an instance with a private key encoded in WIF format.
105
- # Uses WIF internally.
106
- def self.with_wif(wif_string)
107
- raise ArgumentError, "Use Key.new(wif: ...) instead"
108
- end
109
-
110
90
 
111
91
  # Accessors
112
92
  # ---------
@@ -113,6 +113,10 @@ module BTC
113
113
  end
114
114
  end
115
115
 
116
+ def to_s
117
+ private? ? xprv : xpub
118
+ end
119
+
116
120
  def xpub
117
121
  extended_public_key
118
122
  end
@@ -174,17 +178,6 @@ module BTC
174
178
  @network])
175
179
  end
176
180
 
177
- # Initializes master keychain from a seed.
178
- # This is the "root" keychain of the entire hierarchy.
179
- def self.with_seed(seed, network: nil)
180
- raise ArgumentError, "Use Keychain.new(seed: ...) instead"
181
- end
182
-
183
- # Initializes keychain from a Base58Check-encoded extended public or private key.
184
- def self.with_extended_key(xkey)
185
- raise ArgumentError, "Use Keychain.new(extended_key/xpub/xprv: ...) instead"
186
- end
187
-
188
181
  # Instantiates Keychain with a binary seed or a base58-encoded extended public/private key.
189
182
  # Usage:
190
183
  # * Keychain.new(seed: ...[, network: ...])
@@ -60,17 +60,6 @@ module BTC
60
60
  end
61
61
  end
62
62
 
63
- # Initializes a script with its binary representation.
64
- # Returns nil if data is not a well-formed script.
65
- def self.with_data(data)
66
- raise ArgumentError, "Use Script.new(data: ...) instead"
67
- end
68
-
69
- # Initializes a script of form "OP_RETURN <data>"
70
- def self.op_return_script(data)
71
- raise ArgumentError, "Use Script.new(op_return:...) instead"
72
- end
73
-
74
63
  # Initializes a multisignature script "OP_<M> <pubkey1> ... <pubkeyN> OP_<N> OP_CHECKMULTISIG"
75
64
  # N must be >= M, M and N should be from 1 to 16.
76
65
  # If you need a more customized transaction with OP_CHECKMULTISIG, create it using other methods.
@@ -174,18 +174,6 @@ module BTC
174
174
  init_with_components(version: version, inputs: txins, outputs: txouts, lock_time: lock_time)
175
175
  end
176
176
 
177
- def self.with_data(data)
178
- raise ArgumentError, "Use Transaction.new(data: ...) instead"
179
- end
180
-
181
- def self.with_stream(stream)
182
- raise ArgumentError, "Use Transaction.new(stream: ...) instead"
183
- end
184
-
185
- def self.with_dictionary(dict)
186
- raise ArgumentError, "Use Transaction.new(dictionary: ...)"
187
- end
188
-
189
177
  # Returns true if this transaction is a coinbase transaction.
190
178
  def coinbase?
191
179
  self.inputs.size == 1 && self.inputs[0].coinbase?
@@ -188,18 +188,6 @@ module BTC
188
188
  @sequence = seq
189
189
  end
190
190
 
191
- def self.with_data(data)
192
- raise ArgumentError, "Use TransactionInput.new(data: ...) instead"
193
- end
194
-
195
- def self.with_stream(stream)
196
- raise ArgumentError, "Use TransactionInput.new(stream: ...) instead"
197
- end
198
-
199
- def self.with_dictionary(dict)
200
- raise ArgumentError, "Use TransactionInput.new(dictionary: ...) instead"
201
- end
202
-
203
191
  # Returns true if this input is a coinbase input.
204
192
  def coinbase?
205
193
  return self.previous_index == INVALID_INDEX && self.previous_hash == ZERO_HASH256
@@ -150,18 +150,6 @@ module BTC
150
150
  end
151
151
  end
152
152
 
153
- def self.with_data(data)
154
- raise ArgumentError, "Use TransactionOutput.new(data: ...) instead"
155
- end
156
-
157
- def self.with_stream(stream)
158
- raise ArgumentError, "Use TransactionOutput.new(stream: ...) instead"
159
- end
160
-
161
- def self.with_dictionary(dict)
162
- raise ArgumentError, "Use TransactionOutput.new(dictionary: ...) instead"
163
- end
164
-
165
153
  def data
166
154
  data = "".b
167
155
  data << BTC::WireFormat.encode_int64le(self.value)
@@ -1,3 +1,3 @@
1
1
  module BTC
2
- VERSION = "1.0.1".freeze
2
+ VERSION = "1.0.2".freeze
3
3
  end
data/lib/btcruby/wif.rb CHANGED
@@ -38,16 +38,6 @@ module BTC
38
38
  end
39
39
  alias_method :eql?, :==
40
40
 
41
- # private API
42
- def self.with_string(base58check_string, raw_data = nil)
43
- raise ArgumentError, "Use WIF.new(string: ...) instead"
44
- end
45
-
46
- # Creates an address with private key data and non-compressed pubkey flag.
47
- def self.with_data(data, public_key_compressed: false, network: nil)
48
- raise ArgumentError, "Use WIF.new(private_key: ...) or WIF.new(key: ...) instead"
49
- end
50
-
51
41
  # Usage:
52
42
  # * WIF.new(string: ...)
53
43
  # * WIF.new(private_key: ..., public_key_compressed: true|false, network: ...)
@@ -19,7 +19,7 @@ tx.add_input(TransactionInput.new(
19
19
  # 2. Add a raw output with a script
20
20
  tx.add_output(TransactionOutput.new(
21
21
  value: 100_000,
22
- script: PublicKeyAddress.with_string("1CBtcGivXmHQ8ZqdPgeMfcpQNJrqTrSAcG").script))
22
+ script: PublicKeyAddress.parse("1CBtcGivXmHQ8ZqdPgeMfcpQNJrqTrSAcG").script))
23
23
 
24
24
  # 3. Get the private key from WIF
25
25
  key = Key.new(wif: "L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy")
@@ -27,7 +27,7 @@ key = Key.new(wif: "L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy")
27
27
  # 4. Sign the input (assuming it links to an output with address 18oxCAnbuKHDjP7KzLBDj8mLjggDBjE1Q9)
28
28
  hashtype = BTC::SIGHASH_ALL
29
29
  sighash = tx.signature_hash(input_index: 0,
30
- output_script: PublicKeyAddress.with_string("18oxCAnbuKHDjP7KzLBDj8mLjggDBjE1Q9").script,
30
+ output_script: PublicKeyAddress.parse("18oxCAnbuKHDjP7KzLBDj8mLjggDBjE1Q9").script,
31
31
  hash_type: hashtype)
32
32
  tx.inputs[0].signature_script = Script.new << (key.ecdsa_signature(sighash) + WireFormat.encode_uint8(hashtype)) << key.public_key
33
33
 
@@ -20,7 +20,7 @@ builder.input_addresses = [ BTC::Key.new(wif: "L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27
20
20
  builder.unspent_outputs_provider_block = lambda do |addresses, outputs_amount, outputs_size, fee|
21
21
  txout = BTC::TransactionOutput.new(
22
22
  value: 50_000,
23
- script: BTC::PublicKeyAddress.with_string("17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV").script,
23
+ script: BTC::PublicKeyAddress.parse("17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV").script,
24
24
  transaction_id: "115e8f72f39fad874cfab0deed11a80f24f967a84079fb56ddf53ea02e308986",
25
25
  index: 0
26
26
  )
@@ -30,10 +30,10 @@ end
30
30
  # 3. Specify payment address and amount
31
31
  builder.outputs = [ BTC::TransactionOutput.new(
32
32
  value: 10_000,
33
- script: BTC::PublicKeyAddress.with_string("17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV").script) ]
33
+ script: BTC::PublicKeyAddress.parse("17XBj6iFEsf8kzDMGQk5ghZipxX49VXuaV").script) ]
34
34
 
35
35
  # 4. Specify the change address
36
- builder.change_address = BTC::PublicKeyAddress.with_string("1CBtcGivXmHQ8ZqdPgeMfcpQNJrqTrSAcG")
36
+ builder.change_address = BTC::PublicKeyAddress.parse("1CBtcGivXmHQ8ZqdPgeMfcpQNJrqTrSAcG")
37
37
 
38
38
  # 5. Build the transaction and broadcast it.
39
39
  result = builder.build
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: btcruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Andreev
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-06-08 00:00:00.000000000 Z
12
+ date: 2015-06-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
@@ -38,7 +38,6 @@ extensions: []
38
38
  extra_rdoc_files: []
39
39
  files:
40
40
  - ".gitignore"
41
- - ".travis.yml"
42
41
  - FAQ.md
43
42
  - Gemfile
44
43
  - Gemfile.lock
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.1
4
- - 2.1.0
5
- notifications:
6
- slack:
7
- secure: ZbYOCxRusuhvSdSl6nW9/emtZTnwK+o1uuhMKK5yrWDVL/kNV/ejcGTuInOA8TW1ULv6fNI9j2c7Q+zSu3CDO5oTMM7PK4TNeKsCY4koyk+91QKltWIH+aAFpPzbMcWbvnTSzHzTkhRW3ZPhfcQTkb6MRLEA/B6SjmUVc5ADTtc=