btcruby 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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=