universa 3.14.2.1 → 3.14.2.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
  SHA256:
3
- metadata.gz: 634b16b7d4ee30cc046a3f20ed5c3db1de4d7ddda5a2cc22a7fd87462b10b4d2
4
- data.tar.gz: 6733a5eeba94d4e574e3873db94bc07eccba8261b0e0de79802795399f3b4640
3
+ metadata.gz: 6487e468be6041ca989e00499911941b71f8684fcdf171e9659c3934f26a54f8
4
+ data.tar.gz: 0e04d054937e42a0955a48597fc20766327b2438d036c490d4dbe12b79d86ae5
5
5
  SHA512:
6
- metadata.gz: 9c2633e546d18a264e7ee4200d8830f1af180eb3dffdfae24d6b65ab6eb3ecca6967c2c7ade942fce239959ed74ddc2dbd71d7caf5e64517574b72d7089e23dd
7
- data.tar.gz: 49c671d2d33706044361e6bcf26d6ebab5512dae06f037f38a4ee665efa18a59f532c471b63efde248f2f81b4fd23b20d55876af09da4c01bd21c5ed24c3b7e9
6
+ metadata.gz: 3106d98aa41169ff04865fcf6b21705077f0d365ac9064cb577b8a5e68af6aafc8086999f10d2da3e5641e8f0e59d839fa68011a9ff4acfb18c44c8c7197ad36
7
+ data.tar.gz: f5be6b114d0df7d4e625c6b8c4a4a7a2469105c10f8fe9fcba1d792e8f361a4827040956ddb1ca2bbc9fb771027d19c83d5873daf32ba4d0cf8e22eead6475b4
@@ -35,6 +35,15 @@ module Universa
35
35
  end
36
36
  end
37
37
 
38
+ # Safe58 allows human-friendly binary-to-characters codec. It automatically corrects recognition
39
+ # errors like 0 instead of 0 and 1 instead of I. The code does not use characters that look alike and
40
+ # uses only encglish letters and digits that also simplify select-copy-paste routine.
41
+ #
42
+ # important! arguments MUST be binary strings, so use
43
+ #
44
+ # str.force_encoding('binary')
45
+ #
46
+ # as need, otherwise it will not work as expected.
38
47
  class Safe58 < RemoteAdapter
39
48
  remote_class "net.sergeych.utils.Safe58"
40
49
 
@@ -253,7 +262,7 @@ module Universa
253
262
  # @return [Contract] simple contact, not sealed
254
263
  def self.create issuer_key, expires_at: (Time.now + 90 * 24 * 60 * 60), use_short_address: false
255
264
  contract = Contract.new
256
- contract.set_expires_at expires_at
265
+ contract.set_expires_at expires_at.utc
257
266
  contract.set_issuer_keys(use_short_address ? issuer_key.short_address : issuer_key.long_address)
258
267
  contract.register_role(contract.issuer.link_as("owner"))
259
268
  contract.register_role(contract.issuer.link_as("creator"))
@@ -333,7 +342,7 @@ module Universa
333
342
  # set +expires_at+ field
334
343
  # @param [Time] time when this contract will be expired, if yet +APPROVED+.
335
344
  def expires_at=(time)
336
- set_expires_at time
345
+ set_expires_at time.utc
337
346
  end
338
347
 
339
348
  # @return definition data
@@ -0,0 +1,40 @@
1
+ module Universa
2
+
3
+ # Convert binary data to a human-readable dump string, like
4
+ #
5
+ # <code>
6
+ # 000000 27 23 64 61 74 61 c4 2d 0f |'#data.-.|
7
+ # 000008 0f 1f 43 63 6f 6e 74 72 61 |..Ccontra|
8
+ # </code>
9
+ #
10
+ # @param data[String] data to dump
11
+ # @param line_bytes[Number] how many bytes to show in each line
12
+ # @return [String] dump as a string
13
+ def dump_bytes data, line_bytes=16
14
+ data.force_encoding Encoding::BINARY
15
+ offset = 0
16
+ res = []
17
+
18
+ while( offset < data.length )
19
+
20
+ left = "%06x" % offset
21
+ portion = data[offset..(offset+line_bytes)].bytes
22
+
23
+ bytes = portion.map { |x| "%02x" % x }.join(' ')
24
+ chars = portion.map { |c| x = c.ord; x >= 32 && x <= 'z'.ord ? x.chr : '.' }.join('')
25
+
26
+ if chars.length < line_bytes
27
+ pad = line_bytes - chars.length + 1
28
+ chars += ' ' * pad
29
+ bytes += ' ' * pad
30
+ end
31
+
32
+ res << "#{left} #{bytes} |#{chars}|"
33
+
34
+ offset += line_bytes
35
+ end
36
+ res.join("\n")
37
+ end
38
+
39
+ module_function :dump_bytes
40
+ end
@@ -1,4 +1,4 @@
1
1
  module Universa
2
2
  # Current gem version
3
- VERSION = "3.14.2.1"
3
+ VERSION = "3.14.2.2"
4
4
  end
@@ -0,0 +1,10 @@
1
+ require_relative '../lib/universa/dump'
2
+
3
+ source_file = ARGV[0] || File.expand_path("~/Downloads/c.unicon")
4
+
5
+ packed = open(source_file,'rb') { |f| f.read }
6
+
7
+ puts Universa::dump_bytes(packed)
8
+
9
+ require 'base64'
10
+ puts Base64.encode64(packed)
@@ -0,0 +1,45 @@
1
+ # example:
2
+ #
3
+ # rationale:
4
+ # We want to pass order code to user which is potentially long integer (sam, above 9 characters in decimal
5
+ # notation), but the bank insist oreder code in the payment purpose should be 5-8 characters.
6
+ #
7
+ # solution:
8
+ #
9
+ # pack long id (we assume it will fit 5 bytes that give us >60 billions which is usually more
10
+ # than enough) to short and easy to human-retype code using SAFE58 encoding by Universa.
11
+ #
12
+ # It will nirmally give us 6 letter-code which is well protected against recognition mistakes,
13
+ # for example 0 instead of o or 1 instead of I or i. It autocorrects it and does not use like characters.
14
+ #
15
+ require 'universa'
16
+
17
+ # sample long to encode, 12 billions+ (12`884`901`887)
18
+ id = 0x2FFFFffff
19
+
20
+ def int_to_safe58(value)
21
+ # pack to BE 8-byte long
22
+ packed = [value].pack("Q>")
23
+
24
+ # important: safe58 needs binary encoded string, but pack already gives us binary string,
25
+ # so we strip 3 first bytes which are are zeroes and encode the rest to safe 58:
26
+ Universa::Safe58.encode(packed[3..])
27
+ end
28
+
29
+ def safe58_to_int(encoded)
30
+ # decode 5 bytes
31
+ bytes = Universa::Safe58.decode(encoded)
32
+ # pad left with 3 zero bytes to get back 64 bit integer and unpack it:
33
+ "\x0\x0\x0#{bytes}".unpack("Q>")[0]
34
+ end
35
+
36
+ puts "Encoded: #{id} -> #{int_to_safe58 id}"
37
+
38
+ id2 = safe58_to_int(int_to_safe58(id))
39
+ puts "Decoded: #{int_to_safe58 id} -> #{id2}"
40
+
41
+ id == id2 or raise "test failed"
42
+
43
+ puts "ALL OK"
44
+
45
+
data/universa.gemspec CHANGED
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_dependency "concurrent-ruby-ext"
37
37
  spec.add_dependency "ansi"
38
38
 
39
- spec.add_development_dependency "bundler", "~> 1.16"
40
- spec.add_development_dependency "rake", "~> 10.0"
39
+ spec.add_development_dependency "bundler", "~> 2"
40
+ spec.add_development_dependency "rake", "~> 12.3.3"
41
41
  spec.add_development_dependency "rspec", "~> 3.8"
42
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: universa
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.14.2.1
4
+ version: 3.14.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - sergeych
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-23 00:00:00.000000000 Z
11
+ date: 2021-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: farcall
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.16'
89
+ version: '2'
90
90
  type: :development
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: '1.16'
96
+ version: '2'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: 12.3.3
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: 12.3.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +164,7 @@ files:
164
164
  - lib/universa/chain_store.rb
165
165
  - lib/universa/client.rb
166
166
  - lib/universa/contract.rb
167
+ - lib/universa/dump.rb
167
168
  - lib/universa/errors.rb
168
169
  - lib/universa/fs_store/entry.rb
169
170
  - lib/universa/fs_store/file_store.rb
@@ -181,12 +182,14 @@ files:
181
182
  - lib/universa/version.rb
182
183
  - lib/universa/weak_reference.rb
183
184
  - sample_ping.rb
185
+ - samples/load_contract.rb
186
+ - samples/safe58_sample.rb
184
187
  - universa.gemspec
185
- homepage:
188
+ homepage:
186
189
  licenses:
187
190
  - MIT
188
191
  metadata: {}
189
- post_install_message:
192
+ post_install_message:
190
193
  rdoc_options: []
191
194
  require_paths:
192
195
  - lib
@@ -201,8 +204,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
201
204
  - !ruby/object:Gem::Version
202
205
  version: '0'
203
206
  requirements: []
204
- rubygems_version: 3.1.2
205
- signing_key:
207
+ rubygems_version: 3.2.15
208
+ signing_key:
206
209
  specification_version: 4
207
210
  summary: Expose Universa Java API to ruby
208
211
  test_files: []