xrbp 0.1.6 → 0.1.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.
- checksums.yaml +4 -4
- data/examples/sandbox.rb +1 -1
- data/lib/xrbp/nodestore/db.rb +97 -85
- data/lib/xrbp/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d19910e3c88e5a509e3ed8e763bfd30ae764c6a7e31464b36e66ea7f03ce6929
|
4
|
+
data.tar.gz: 8105339c1ba88f6cc9e52b18bb72a44434ff3646f4fa1f6cfdde2691654e2ed0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 439f2a90a8eb76f1e3ac28f6bb08fd0bbbdb7ec1c600df52199cc56db1738c1cbe2cfae45c484c5d1b1d7635c00db88d38428ffa98c77977c9e36252f9a7962a
|
7
|
+
data.tar.gz: 9f87cdb439e262527cbec2181d86a21931fc44d29fb4a9900ad479ad385479921f06d2ba9a6cda245894de51b98607a21f39ed2d8921fe8b75dab2e1e2859546
|
data/examples/sandbox.rb
CHANGED
@@ -5,7 +5,7 @@ require 'xrbp/nodestore/backends/nudb'
|
|
5
5
|
db = XRBP::NodeStore::Backends::NuDB.new "/var/lib/rippled/nudb/"
|
6
6
|
store = db.instance_variable_get(:@store)
|
7
7
|
|
8
|
-
key = [
|
8
|
+
key = [85, 128, 20, 72, 146, 231, 227, 37, 187, 39, 215, 214, 137, 172, 74, 102, 212, 160, 121, 146, 42, 165, 122, 58, 253, 41, 102, 206, 69, 144, 37, 66].pack("C*")
|
9
9
|
val = store.fetch(key).first
|
10
10
|
puts val.unpack("C*").join " "
|
11
11
|
decompressed = db.send(:decompress, val)
|
data/lib/xrbp/nodestore/db.rb
CHANGED
@@ -40,9 +40,9 @@ module XRBP
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def parse_encoding(encoding)
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
enc = encoding.unpack("C").first
|
44
|
+
type = enc >> 4
|
45
|
+
field = enc & 0xF
|
46
46
|
encoding = encoding[1..-1]
|
47
47
|
|
48
48
|
if type == 0
|
@@ -130,98 +130,20 @@ module XRBP
|
|
130
130
|
return data.unpack("H40").first, data[20..-1]
|
131
131
|
when :hash256
|
132
132
|
return data.unpack("H64").first, data[32..-1]
|
133
|
-
|
134
133
|
when :amount
|
135
|
-
|
136
|
-
xrp = amount < 0x8000000000000000
|
137
|
-
return (amount & 0x3FFFFFFFFFFFFFFF), data[8..-1] if xrp
|
138
|
-
|
139
|
-
sign = (amount & 0x4000000000000000) >> 62 # 0 = neg / 1 = pos
|
140
|
-
exp = (amount & 0x3FC0000000000000) >> 54
|
141
|
-
mant = (amount & 0x003FFFFFFFFFFFFF)
|
142
|
-
|
143
|
-
data = data[8..-1]
|
144
|
-
currency = Format::CURRENCY_CODE.decode(data)
|
145
|
-
|
146
|
-
data = data[Format::CURRENCY_CODE.size..-1]
|
147
|
-
issuer, data = parse_account(data, 20)
|
148
|
-
|
149
|
-
# TODO calculate value
|
150
|
-
return { :sign => sign,
|
151
|
-
:exp => exp,
|
152
|
-
:mantissa => mant,
|
153
|
-
:currency => currency,
|
154
|
-
:issuer => issuer }, data
|
155
|
-
|
134
|
+
return parse_amount(data)
|
156
135
|
when :vl
|
157
136
|
vl, offset = parse_vl(data)
|
158
137
|
return data[offset..vl+offset-1], data[vl+offset..-1]
|
159
138
|
|
160
139
|
when :account
|
161
140
|
return parse_account(data)
|
162
|
-
|
163
141
|
when :array
|
164
|
-
|
165
|
-
return nil, data if e == :end_of_array
|
166
|
-
|
167
|
-
array = []
|
168
|
-
until data == "" || data.nil?
|
169
|
-
aencoding, data = parse_encoding(data)
|
170
|
-
break if aencoding.first.nil?
|
171
|
-
|
172
|
-
e = Format::ENCODINGS[aencoding]
|
173
|
-
break if e == :end_of_array
|
174
|
-
|
175
|
-
value, data = parse_field(data, aencoding)
|
176
|
-
break unless value
|
177
|
-
array << value
|
178
|
-
end
|
179
|
-
|
180
|
-
return array, data
|
181
|
-
|
142
|
+
return parse_array(data, encoding)
|
182
143
|
when :object
|
183
|
-
|
184
|
-
case e
|
185
|
-
when :end_of_object
|
186
|
-
return nil, data
|
187
|
-
|
188
|
-
when :signer, :signer_entry,
|
189
|
-
:majority, :memo,
|
190
|
-
:modified_node, :created_node, :deleted_node,
|
191
|
-
:previous_fields, :final_fields, :new_fields
|
192
|
-
# TODO instantiate corresponding classes
|
193
|
-
return parse_fields(data)
|
194
|
-
|
195
|
-
#else:
|
196
|
-
end
|
197
|
-
|
144
|
+
return parse_object(data, encoding)
|
198
145
|
when :pathset
|
199
|
-
|
200
|
-
until data == "" || data.nil?
|
201
|
-
segment = data.unpack("C").first
|
202
|
-
data = data[1..-1]
|
203
|
-
return pathset, data if segment == 0x00 # end of path
|
204
|
-
|
205
|
-
if segment == 0xFF # path boundry
|
206
|
-
pathset << []
|
207
|
-
else
|
208
|
-
if segment & 0x01 # path account
|
209
|
-
issuer, data = parse_account(data, 20)
|
210
|
-
end
|
211
|
-
|
212
|
-
if segment & 0x02 # path currency
|
213
|
-
currency = Format::CURRENCY_CODE.decode(data)
|
214
|
-
data = data[Format::CURRENCY_CODE.size..-1]
|
215
|
-
end
|
216
|
-
|
217
|
-
if segment & 0x03 # path issuer
|
218
|
-
issuer, data = parse_account(data, 20)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
return pathset, data
|
224
|
-
|
146
|
+
return parse_pathset(data)
|
225
147
|
when :vector256
|
226
148
|
vl, offset = parse_vl(data)
|
227
149
|
return data[offset..vl+offset-1], data[vl+offset..-1]
|
@@ -250,6 +172,29 @@ module XRBP
|
|
250
172
|
raise
|
251
173
|
end
|
252
174
|
|
175
|
+
def parse_amount(data)
|
176
|
+
amount = data[0..7].unpack("Q>").first
|
177
|
+
xrp = amount < 0x8000000000000000
|
178
|
+
return (amount & 0x3FFFFFFFFFFFFFFF), data[8..-1] if xrp
|
179
|
+
|
180
|
+
sign = (amount & 0x4000000000000000) >> 62 # 0 = neg / 1 = pos
|
181
|
+
exp = (amount & 0x3FC0000000000000) >> 54
|
182
|
+
mant = (amount & 0x003FFFFFFFFFFFFF)
|
183
|
+
|
184
|
+
data = data[8..-1]
|
185
|
+
currency = Format::CURRENCY_CODE.decode(data)
|
186
|
+
|
187
|
+
data = data[Format::CURRENCY_CODE.size..-1]
|
188
|
+
issuer, data = parse_account(data, 20)
|
189
|
+
|
190
|
+
# TODO calculate value
|
191
|
+
return { :sign => sign,
|
192
|
+
:exp => exp,
|
193
|
+
:mantissa => mant,
|
194
|
+
:currency => currency,
|
195
|
+
:issuer => issuer }, data
|
196
|
+
end
|
197
|
+
|
253
198
|
def parse_account(data, vl=nil)
|
254
199
|
unless vl
|
255
200
|
vl,offset = parse_vl(data)
|
@@ -264,6 +209,73 @@ module XRBP
|
|
264
209
|
return Base58.binary_to_base58(acct, :ripple), data[vl..-1]
|
265
210
|
end
|
266
211
|
|
212
|
+
def parse_array(data, encoding)
|
213
|
+
e = Format::ENCODINGS[encoding]
|
214
|
+
return nil, data if e == :end_of_array
|
215
|
+
|
216
|
+
array = []
|
217
|
+
until data == "" || data.nil?
|
218
|
+
aencoding, data = parse_encoding(data)
|
219
|
+
break if aencoding.first.nil?
|
220
|
+
|
221
|
+
e = Format::ENCODINGS[aencoding]
|
222
|
+
break if e == :end_of_array
|
223
|
+
|
224
|
+
value, data = parse_field(data, aencoding)
|
225
|
+
break unless value
|
226
|
+
array << value
|
227
|
+
end
|
228
|
+
|
229
|
+
return array, data
|
230
|
+
end
|
231
|
+
|
232
|
+
def parse_object(data, encoding)
|
233
|
+
e = Format::ENCODINGS[encoding]
|
234
|
+
case e
|
235
|
+
when :end_of_object
|
236
|
+
return nil, data
|
237
|
+
|
238
|
+
when :signer, :signer_entry,
|
239
|
+
:majority, :memo,
|
240
|
+
:modified_node, :created_node, :deleted_node,
|
241
|
+
:previous_fields, :final_fields, :new_fields
|
242
|
+
# TODO instantiate corresponding classes
|
243
|
+
return parse_fields(data)
|
244
|
+
|
245
|
+
#else:
|
246
|
+
end
|
247
|
+
|
248
|
+
raise "unknown object type"
|
249
|
+
end
|
250
|
+
|
251
|
+
def parse_pathset(data)
|
252
|
+
pathset = []
|
253
|
+
until data == "" || data.nil?
|
254
|
+
segment = data.unpack("C").first
|
255
|
+
data = data[1..-1]
|
256
|
+
return pathset, data if segment == 0x00 # end of path
|
257
|
+
|
258
|
+
if segment == 0xFF # path boundry
|
259
|
+
pathset << []
|
260
|
+
else
|
261
|
+
if (segment & 0x01) != 0 # path account
|
262
|
+
issuer, data = parse_account(data, 20)
|
263
|
+
end
|
264
|
+
|
265
|
+
if (segment & 0x02) != 0 # path currency
|
266
|
+
currency = Format::CURRENCY_CODE.decode(data)
|
267
|
+
data = data[Format::CURRENCY_CODE.size..-1]
|
268
|
+
end
|
269
|
+
|
270
|
+
if (segment & 0x03) != 0 # path issuer
|
271
|
+
issuer, data = parse_account(data, 20)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
return pathset, data
|
277
|
+
end
|
278
|
+
|
267
279
|
###
|
268
280
|
|
269
281
|
def parse_tx(tx)
|
data/lib/xrbp/version.rb
CHANGED