coin-op 0.1.0 → 0.2.0

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: dfeba45649380d25bdb450efa635c4abfeb97808
4
- data.tar.gz: 9163ba6bb9a926d3e68ac56d52cfedf8a58f5896
3
+ metadata.gz: 2901af471862b2ef2ccdc2ca7fc7192a71400d93
4
+ data.tar.gz: 538d7b513fc85ef0da0bdb8175886708766e2bd9
5
5
  SHA512:
6
- metadata.gz: 5dc4eb2daff6a91ed33309ef74562ec21573c165708825bf616b03f3bf6df2d1ef20ee277d726889fb808b4f99325cee05916e77cd4099eb04ef91ad9969cc4d
7
- data.tar.gz: 8186166830812cf399ad01542cc936e156589d42bef51be532e39a61d57324b99c2f72e47022f6799425703b15a2982db6ab270ea995f106113c71c214102c5a
6
+ metadata.gz: b19ee9fc1272c34d5380ad87eaa4b32e121d17059b80ba97ff568b4e09debdd881b9e0ec78cd63ca35c118bfee9c3541b3cd4dbfc4e6d7815c8f7a65cf26c686
7
+ data.tar.gz: 57f64f37f1e18e3e1d8b50f7fa8eda1ee89bb6b3e05af583ff39c45e50d04bae46231bd0857051c68df96b68278e8d21c173ab357e1a0ae25cdd19e974250b59
@@ -46,7 +46,7 @@ module CoinOp::Bit
46
46
 
47
47
  def binary_sig_hash=(blob)
48
48
  @binary_sig_hash = blob
49
- @sig_hash = base58(blob)
49
+ @sig_hash = hex(blob)
50
50
  end
51
51
 
52
52
  def script_sig=(blob)
@@ -59,7 +59,7 @@ module CoinOp::Bit
59
59
  def to_json(*a)
60
60
  {
61
61
  :output => self.output,
62
- :signatures => self.signatures.map {|b| base58(b) },
62
+ :signatures => self.signatures.map {|b| hex(b) },
63
63
  :sig_hash => self.sig_hash || "",
64
64
  :script_sig => self.script_sig || ""
65
65
  }.to_json(*a)
@@ -24,6 +24,7 @@ module CoinOp::Bit
24
24
  @trees = {}
25
25
  private_trees = options[:private]
26
26
 
27
+ # FIXME: we should allow this.
27
28
  if !private_trees
28
29
  raise "Must supply :private"
29
30
  end
@@ -41,6 +42,17 @@ module CoinOp::Bit
41
42
  end
42
43
  end
43
44
 
45
+ def get_node(arg)
46
+ case arg
47
+ when MoneyTree::Node
48
+ arg
49
+ when String
50
+ MoneyTree::Node.from_serialized_address(arg)
51
+ else
52
+ raise "Unusable type: #{node.class}"
53
+ end
54
+ end
55
+
44
56
  def drop(*names)
45
57
  names = names.map(&:to_sym)
46
58
  options = {:private => {}, :public => {}}
@@ -93,9 +105,8 @@ module CoinOp::Bit
93
105
  end
94
106
  end
95
107
 
96
- alias_method :public_address, :public_seed
97
108
 
98
- def private_addresses
109
+ def private_seeds
99
110
  out = {}
100
111
  @private_trees.each do |name, tree|
101
112
  out[name] = self.private_address(name)
@@ -103,7 +114,7 @@ module CoinOp::Bit
103
114
  out
104
115
  end
105
116
 
106
- def public_addresses
117
+ def public_seeds
107
118
  out = {}
108
119
  @private_trees.each do |name, node|
109
120
  out[name] = node.to_serialized_address
@@ -111,16 +122,9 @@ module CoinOp::Bit
111
122
  out
112
123
  end
113
124
 
114
- def get_node(arg)
115
- case arg
116
- when MoneyTree::Node
117
- arg
118
- when String
119
- MoneyTree::Node.from_serialized_address(arg)
120
- else
121
- raise "Unusable type: #{node.class}"
122
- end
123
- end
125
+ alias_method :public_address, :public_seed
126
+ alias_method :private_addresses, :private_seeds
127
+ alias_method :public_addresses, :public_seeds
124
128
 
125
129
  def path(path)
126
130
  options = {
@@ -159,6 +163,13 @@ module CoinOp::Bit
159
163
  end
160
164
  end
161
165
 
166
+ def set_sig_hashes(transaction)
167
+ transaction.inputs.each do |input|
168
+ path = input.output.metadata[:wallet_path]
169
+ node = self.path(path)
170
+ input.binary_sig_hash = transaction.sig_hash(input, node.script)
171
+ end
172
+ end
162
173
 
163
174
  # Takes a Transaction and any number of Arrays of signature dictionaries.
164
175
  # Each sig_dict in an Array corresponds to the Input with the same index.
@@ -200,11 +211,8 @@ module CoinOp::Bit
200
211
  class MultiNode
201
212
  include CoinOp::Encodings
202
213
 
203
- attr_reader :path, :keys, :public_keys
214
+ attr_reader :path, :private, :public, :keys, :public_keys
204
215
  def initialize(options)
205
- # m of n
206
- # TODO: take @m from the options
207
- @m = 2
208
216
  @path = options[:path]
209
217
 
210
218
  @keys = {}
@@ -222,15 +230,18 @@ module CoinOp::Bit
222
230
  end
223
231
  end
224
232
 
225
- def script
233
+ def script(m=2)
234
+ # m of n
226
235
  keys = @public_keys.sort_by {|name, key| name }.map {|name, key| key.pub }
227
- Script.new(:public_keys => keys, :needed => @m)
236
+ Script.new(:public_keys => keys, :needed => m)
228
237
  end
229
238
 
230
- def p2sh_address
239
+ def address
231
240
  self.script.p2sh_address
232
241
  end
233
242
 
243
+ alias_method :p2sh_address, :address
244
+
234
245
  def p2sh_script
235
246
  Script.new(:address => self.script.p2sh_address)
236
247
  end
@@ -87,9 +87,6 @@ module CoinOp::Bit
87
87
  input.instance_eval do
88
88
  @native = native
89
89
  end
90
- if input.is_a? Input
91
- input.binary_sig_hash = self.sig_hash(input)
92
- end
93
90
  # TODO: is this re-nativization necessary for outputs, too?
94
91
  end
95
92
  end
@@ -24,7 +24,7 @@ module CoinOp
24
24
  #
25
25
  def self.decrypt(passphrase, hash)
26
26
  salt, nonce, ciphertext =
27
- hash.values_at(:salt, :nonce, :ciphertext).map {|s| decode_base58(s) }
27
+ hash.values_at(:salt, :nonce, :ciphertext).map {|s| decode_hex(s) }
28
28
  box = self.new(passphrase, salt, hash[:iterations])
29
29
  box.decrypt(nonce, ciphertext)
30
30
  end
@@ -53,10 +53,10 @@ module CoinOp
53
53
  nonce = RbNaCl::Random.random_bytes(RbNaCl::SecretBox.nonce_bytes)
54
54
  ciphertext = @box.encrypt(nonce, plaintext)
55
55
  {
56
- :salt => base58(@salt),
56
+ :salt => hex(@salt),
57
57
  :iterations => @iterations,
58
- :nonce => base58(nonce),
59
- :ciphertext => base58(ciphertext)
58
+ :nonce => hex(nonce),
59
+ :ciphertext => hex(ciphertext)
60
60
  }
61
61
  end
62
62
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coin-op
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew King
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-30 00:00:00.000000000 Z
11
+ date: 2014-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bitcoin-ruby