openassets-ruby 0.5.5 → 0.5.6
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 +4 -4
- data/.ruby-version +1 -1
- data/Rakefile +0 -1
- data/lib/openassets.rb +1 -0
- data/lib/openassets/api.rb +2 -6
- data/lib/openassets/version.rb +1 -1
- data/lib/segwit.rb +8 -0
- data/lib/segwit/script_witness.rb +23 -0
- data/lib/segwit/tx.rb +76 -0
- data/lib/segwit/tx_in_witness.rb +22 -0
- data/lib/segwit/tx_witness.rb +22 -0
- data/openassets-ruby.gemspec +2 -2
- metadata +13 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73a2e3f9a8afacf4353d268e424223fd17baaa11
|
4
|
+
data.tar.gz: 194c9b3a032235108ae763f7c9f4fe967e3e763b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ea7f8836af8f8095145692593b05f79c399c6cb5a90cd9fb40291bdc093a65f0994c5b987b56241ffe444e7680c85c06b8e3fc25f34cf09ea174274d023e826
|
7
|
+
data.tar.gz: 0ef222597d3614e49481d953eb11e1453e892ca1b8ee68c7287d8c96c4ea1f83f7c8392a6de933000b68108b5ed2a14615c4abca5d95f6ebb02788577267b393
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.3.0
|
data/Rakefile
CHANGED
data/lib/openassets.rb
CHANGED
data/lib/openassets/api.rb
CHANGED
@@ -271,11 +271,7 @@ module OpenAssets
|
|
271
271
|
marker_output = outputs[marker_output_index]
|
272
272
|
|
273
273
|
# Add the issuance outputs
|
274
|
-
|
275
|
-
issuance_asset_id = script_to_asset_id(prev_outs[0].script.to_payload.bth)
|
276
|
-
else
|
277
|
-
issuance_asset_id = pubkey_hash_to_asset_id(prev_outs[0].script.get_hash160)
|
278
|
-
end
|
274
|
+
issuance_asset_id = script_to_asset_id(prev_outs[0].script.to_payload.bth)
|
279
275
|
|
280
276
|
for i in (0..marker_output_index-1)
|
281
277
|
value = outputs[i].value
|
@@ -283,7 +279,7 @@ module OpenAssets
|
|
283
279
|
if i < asset_quantities.length && asset_quantities[i] > 0
|
284
280
|
payload = OpenAssets::Protocol::MarkerOutput.parse_script(marker_output.parsed_script.to_payload)
|
285
281
|
metadata = OpenAssets::Protocol::MarkerOutput.deserialize_payload(payload).metadata
|
286
|
-
if prev_outs[0].script.is_p2sh?
|
282
|
+
if (metadata.nil? || metadata.length == 0) && prev_outs[0].script.is_p2sh?
|
287
283
|
metadata = parse_issuance_p2sh_pointer(tx.in[0].script_sig)
|
288
284
|
end
|
289
285
|
metadata = '' unless metadata
|
data/lib/openassets/version.rb
CHANGED
data/lib/segwit.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class Bitcoin::Protocol::ScriptWitness
|
2
|
+
|
3
|
+
# witness stack
|
4
|
+
attr_reader :stack
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@stack = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def empty?
|
11
|
+
stack.empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
# output script in raw binary format
|
15
|
+
def to_payload
|
16
|
+
payload = Bitcoin::Protocol.pack_var_int(stack.size)
|
17
|
+
stack.each{|e|
|
18
|
+
payload << Bitcoin::Protocol.pack_var_int(e.htb.bytesize)
|
19
|
+
payload << e.htb
|
20
|
+
}
|
21
|
+
payload
|
22
|
+
end
|
23
|
+
end
|
data/lib/segwit/tx.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# extension for Bitcoin::Protocol::Tx to support segwit
|
2
|
+
class Bitcoin::Protocol::Tx
|
3
|
+
include Bitcoin::Util
|
4
|
+
|
5
|
+
attr_reader :witness
|
6
|
+
|
7
|
+
def initialize(data=nil)
|
8
|
+
@ver, @lock_time, @in, @out, @scripts, @witness = 1, 0, [], [], [], Bitcoin::Protocol::TxWitness.new
|
9
|
+
@enable_bitcoinconsensus = !!ENV['USE_BITCOINCONSENSUS']
|
10
|
+
if data
|
11
|
+
begin
|
12
|
+
parse_data_from_io(data) # parse no witness data
|
13
|
+
rescue StandardError
|
14
|
+
parse_witness_data_from_io(data) # parse witness data
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# get witness hash
|
20
|
+
def witness_hash
|
21
|
+
hash_from_payload(to_witness_payload)
|
22
|
+
end
|
23
|
+
|
24
|
+
# parse raw data which include witness data
|
25
|
+
# serialization format is defined by https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki
|
26
|
+
def parse_witness_data_from_io(data)
|
27
|
+
buf = data.is_a?(String) ? StringIO.new(data) : data
|
28
|
+
|
29
|
+
@ver = buf.read(4).unpack("V").first
|
30
|
+
|
31
|
+
@marker = buf.read(1).unpack("c").first
|
32
|
+
|
33
|
+
@flag = buf.read(1).unpack("c").first
|
34
|
+
|
35
|
+
in_size = Bitcoin::Protocol.unpack_var_int_from_io(buf)
|
36
|
+
@in = []
|
37
|
+
in_size.times{
|
38
|
+
break if buf.eof?
|
39
|
+
@in << Bitcoin::Protocol::TxIn.from_io(buf)
|
40
|
+
}
|
41
|
+
|
42
|
+
out_size = Bitcoin::Protocol.unpack_var_int_from_io(buf)
|
43
|
+
@out = []
|
44
|
+
out_size.times{
|
45
|
+
break if buf.eof?
|
46
|
+
@out << Bitcoin::Protocol::TxOut.from_io(buf)
|
47
|
+
}
|
48
|
+
|
49
|
+
@witness = Bitcoin::Protocol::TxWitness.new
|
50
|
+
in_size.times{
|
51
|
+
witness_count = Bitcoin::Protocol.unpack_var_int_from_io(buf)
|
52
|
+
in_witness = Bitcoin::Protocol::TxInWitness.new
|
53
|
+
witness_count.times{
|
54
|
+
length = Bitcoin::Protocol.unpack_var_int_from_io(buf)
|
55
|
+
in_witness.add_stack(buf.read(length).unpack("H*").first)
|
56
|
+
}
|
57
|
+
@witness.add_witness(in_witness)
|
58
|
+
}
|
59
|
+
|
60
|
+
@lock_time = buf.read(4).unpack("V").first
|
61
|
+
|
62
|
+
@hash = hash_from_payload(to_payload)
|
63
|
+
end
|
64
|
+
|
65
|
+
# output transaction in raw binary format with witness
|
66
|
+
def to_witness_payload
|
67
|
+
pin = ""
|
68
|
+
@in.each{|input| pin << input.to_payload }
|
69
|
+
pout = ""
|
70
|
+
@out.each{|output| pout << output.to_payload }
|
71
|
+
payload = [@ver].pack("V") << [0].pack("c") << [1].pack("c") << Bitcoin::Protocol.pack_var_int(@in.size) << pin <<
|
72
|
+
Bitcoin::Protocol.pack_var_int(@out.size) << pout << @witness.to_payload << [@lock_time].pack("V")
|
73
|
+
payload
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Bitcoin::Protocol::TxInWitness
|
2
|
+
|
3
|
+
attr_reader :script_witness
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@script_witness = Bitcoin::Protocol::ScriptWitness.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_stack(script)
|
10
|
+
script_witness.stack << script
|
11
|
+
end
|
12
|
+
|
13
|
+
# output witness script in raw binary format with witness
|
14
|
+
def to_payload
|
15
|
+
script_witness.to_payload
|
16
|
+
end
|
17
|
+
|
18
|
+
def stack
|
19
|
+
script_witness.stack
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Bitcoin::Protocol::TxWitness
|
2
|
+
|
3
|
+
attr_reader :tx_in_wit
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@tx_in_wit = []
|
7
|
+
end
|
8
|
+
|
9
|
+
# Add witness
|
10
|
+
# @param[Bitcoin::Protocol::TxInWitness] tx_in_wit witness object
|
11
|
+
def add_witness(tx_in_wit)
|
12
|
+
(@tx_in_wit ||= []) << tx_in_wit
|
13
|
+
end
|
14
|
+
|
15
|
+
# output witness in raw binary format
|
16
|
+
def to_payload
|
17
|
+
payload = ""
|
18
|
+
tx_in_wit.each{|w|payload << w.to_payload}
|
19
|
+
payload
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/openassets-ruby.gemspec
CHANGED
@@ -23,11 +23,11 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_runtime_dependency "rest-client", "~>1.8.0"
|
24
24
|
spec.add_runtime_dependency "httpclient"
|
25
25
|
spec.add_runtime_dependency "sqlite3"
|
26
|
-
spec.add_runtime_dependency "leb128"
|
26
|
+
spec.add_runtime_dependency "leb128", '0.1.1'
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.9"
|
28
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
29
|
spec.add_development_dependency "rspec"
|
30
30
|
spec.add_development_dependency "timecop"
|
31
|
-
spec.add_development_dependency "
|
31
|
+
spec.add_development_dependency "travis"
|
32
32
|
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openassets-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bitcoin-ruby
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: leb128
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 0.1.1
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 0.1.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: bundler
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: travis
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
@@ -219,6 +219,11 @@ files:
|
|
219
219
|
- lib/openassets/transaction/transfer_parameters.rb
|
220
220
|
- lib/openassets/util.rb
|
221
221
|
- lib/openassets/version.rb
|
222
|
+
- lib/segwit.rb
|
223
|
+
- lib/segwit/script_witness.rb
|
224
|
+
- lib/segwit/tx.rb
|
225
|
+
- lib/segwit/tx_in_witness.rb
|
226
|
+
- lib/segwit/tx_witness.rb
|
222
227
|
- openassets-ruby.gemspec
|
223
228
|
homepage: https://github.com/haw-itn/openassets-ruby
|
224
229
|
licenses:
|
@@ -240,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
245
|
version: '0'
|
241
246
|
requirements: []
|
242
247
|
rubyforge_project:
|
243
|
-
rubygems_version: 2.
|
248
|
+
rubygems_version: 2.5.1
|
244
249
|
signing_key:
|
245
250
|
specification_version: 4
|
246
251
|
summary: The implementation of the Open Assets Protocol for Ruby.
|