universa 3.10.2.1 → 3.10.5.1

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: 6d880e947e94fef7b4f3f9f242989a1cc6278e569b7c62ce9e15f598b46b9eb6
4
- data.tar.gz: 95c27b6fa5bcf9bb22b0f053cf9db20476cd04297bcd6778f3bb7fadafba6d1c
3
+ metadata.gz: bd3630d6a6c8fff3148c0f24f1105aaff2647dcf08209eb4cf70dac19f0eca56
4
+ data.tar.gz: 91cde45beb3d577ee43cfc8e6f55c73fc106b10ba6c6c38228a6bd18daeb2893
5
5
  SHA512:
6
- metadata.gz: aba7de7c8d151d161eaf309f3dab251845ea4e7ba3f82eb5c7668a828c1a1de5927cfc8db32efa5a91f27ae25b7b42e22ca94dfdd16f58912f4436b7ec11e651
7
- data.tar.gz: ab29f071d9c2ec56fe1fff8666b9a96ef023954616517ce9889ab7759daf12fbe3fb43b57dc70d0d624eb3d53aba2e56037ede4ccae5d6e84b544c4aab34a2e4
6
+ metadata.gz: ec691554decb811f2d3bb7bf26ccd78f25c97acf35444b02467502c2465c75e1f3ec295a59b496ca7b4472042c26c0a985a40645107612d756586c298dfe1ad1
7
+ data.tar.gz: f6ba4803339e88a14a30c81c3445e3e9dba4e8fa627872af1bda0656f92e205553b6589b38b5a038a970d737f51511134db15dfbdf326e71ac96faec1c99484d
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ Gemfile.lock
14
14
  /sessionlog.txt
15
15
  /**/sessionlog.txt
16
16
  .DS_Store
17
+ /*.private.unikey
data/bin/umi/bin/umi CHANGED
@@ -344,7 +344,7 @@ declare -r lib_dir="$(realpath "${app_home}/../lib")"
344
344
  declare -a app_mainclass=(com.icodici.farcallscala.Main)
345
345
 
346
346
  declare -r script_conf_file="${app_home}/../conf/application.ini"
347
- declare -r app_classpath="$lib_dir/com.icodici.umi-0.8.44.jar:$lib_dir/org.scala-lang.scala-library-2.12.7.jar:$lib_dir/com.icodici.universa_core-3.10.2.jar:$lib_dir/org.yaml.snakeyaml-1.18.jar:$lib_dir/com.icodici.nanohttpd-2.1.0.jar:$lib_dir/com.icodici.common_tools-3.10.2.jar:$lib_dir/com.eclipsesource.minimal-json.minimal-json-0.9.4.jar:$lib_dir/net.java.dev.jna.jna-4.5.1.jar:$lib_dir/org.checkerframework.checker-qual-2.3.2.jar:$lib_dir/com.icodici.crypto-3.10.2.jar:$lib_dir/com.madgag.spongycastle.core-1.58.0.0.jar:$lib_dir/com.squareup.jnagmp.jnagmp-2.0.0.jar:$lib_dir/com.typesafe.play.play-json_2.12-2.6.10.jar:$lib_dir/com.typesafe.play.play-functional_2.12-2.6.10.jar:$lib_dir/org.scala-lang.scala-reflect-2.12.7.jar:$lib_dir/org.typelevel.macro-compat_2.12-1.1.1.jar:$lib_dir/joda-time.joda-time-2.9.9.jar:$lib_dir/com.fasterxml.jackson.core.jackson-core-2.8.11.jar:$lib_dir/com.fasterxml.jackson.core.jackson-annotations-2.8.11.jar:$lib_dir/com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.8.11.jar:$lib_dir/com.fasterxml.jackson.core.jackson-databind-2.8.11.1.jar:$lib_dir/com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.8.11.jar:$lib_dir/org.scala-sbt.ipcsocket.ipcsocket-1.0.0.jar:$lib_dir/net.java.dev.jna.jna-platform-4.5.0.jar:$lib_dir/net.sf.jopt-simple.jopt-simple-4.9.jar"
347
+ declare -r app_classpath="$lib_dir/com.icodici.umi-0.8.49.jar:$lib_dir/org.scala-lang.scala-library-2.12.7.jar:$lib_dir/com.icodici.universa_core-3.10.5.1.jar:$lib_dir/org.yaml.snakeyaml-1.18.jar:$lib_dir/com.icodici.nanohttpd-2.1.0.jar:$lib_dir/com.icodici.common_tools-3.10.5.1.jar:$lib_dir/com.eclipsesource.minimal-json.minimal-json-0.9.4.jar:$lib_dir/net.java.dev.jna.jna-4.5.1.jar:$lib_dir/org.checkerframework.checker-qual-2.3.2.jar:$lib_dir/com.icodici.crypto-3.10.5.1.jar:$lib_dir/org.bouncycastle.bcprov-jdk15on-1.62.jar:$lib_dir/com.squareup.jnagmp.jnagmp-2.0.0.jar:$lib_dir/com.typesafe.play.play-json_2.12-2.6.10.jar:$lib_dir/com.typesafe.play.play-functional_2.12-2.6.10.jar:$lib_dir/org.scala-lang.scala-reflect-2.12.7.jar:$lib_dir/org.typelevel.macro-compat_2.12-1.1.1.jar:$lib_dir/joda-time.joda-time-2.9.9.jar:$lib_dir/com.fasterxml.jackson.core.jackson-core-2.8.11.jar:$lib_dir/com.fasterxml.jackson.core.jackson-annotations-2.8.11.jar:$lib_dir/com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.8.11.jar:$lib_dir/com.fasterxml.jackson.core.jackson-databind-2.8.11.1.jar:$lib_dir/com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.8.11.jar:$lib_dir/org.scala-sbt.ipcsocket.ipcsocket-1.0.0.jar:$lib_dir/net.java.dev.jna.jna-platform-4.5.0.jar:$lib_dir/net.sf.jopt-simple.jopt-simple-4.9.jar"
348
348
 
349
349
  # java_cmd is overrode in process_args when -java-home is used
350
350
  declare java_cmd=$(get_java_cmd)
data/bin/umi/bin/umi.bat CHANGED
@@ -80,7 +80,7 @@ rem "-J" is stripped, "-D" is left as is, and everything is appended to JAVA_OPT
80
80
  set _JAVA_PARAMS=
81
81
  set _APP_ARGS=
82
82
 
83
- set "APP_CLASSPATH=%APP_LIB_DIR%\com.icodici.umi-0.8.44.jar;%APP_LIB_DIR%\org.scala-lang.scala-library-2.12.7.jar;%APP_LIB_DIR%\com.icodici.universa_core-3.10.2.jar;%APP_LIB_DIR%\org.yaml.snakeyaml-1.18.jar;%APP_LIB_DIR%\com.icodici.nanohttpd-2.1.0.jar;%APP_LIB_DIR%\com.icodici.common_tools-3.10.2.jar;%APP_LIB_DIR%\com.eclipsesource.minimal-json.minimal-json-0.9.4.jar;%APP_LIB_DIR%\net.java.dev.jna.jna-4.5.1.jar;%APP_LIB_DIR%\org.checkerframework.checker-qual-2.3.2.jar;%APP_LIB_DIR%\com.icodici.crypto-3.10.2.jar;%APP_LIB_DIR%\com.madgag.spongycastle.core-1.58.0.0.jar;%APP_LIB_DIR%\com.squareup.jnagmp.jnagmp-2.0.0.jar;%APP_LIB_DIR%\com.typesafe.play.play-json_2.12-2.6.10.jar;%APP_LIB_DIR%\com.typesafe.play.play-functional_2.12-2.6.10.jar;%APP_LIB_DIR%\org.scala-lang.scala-reflect-2.12.7.jar;%APP_LIB_DIR%\org.typelevel.macro-compat_2.12-1.1.1.jar;%APP_LIB_DIR%\joda-time.joda-time-2.9.9.jar;%APP_LIB_DIR%\com.fasterxml.jackson.core.jackson-core-2.8.11.jar;%APP_LIB_DIR%\com.fasterxml.jackson.core.jackson-annotations-2.8.11.jar;%APP_LIB_DIR%\com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.8.11.jar;%APP_LIB_DIR%\com.fasterxml.jackson.core.jackson-databind-2.8.11.1.jar;%APP_LIB_DIR%\com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.8.11.jar;%APP_LIB_DIR%\org.scala-sbt.ipcsocket.ipcsocket-1.0.0.jar;%APP_LIB_DIR%\net.java.dev.jna.jna-platform-4.5.0.jar;%APP_LIB_DIR%\net.sf.jopt-simple.jopt-simple-4.9.jar"
83
+ set "APP_CLASSPATH=%APP_LIB_DIR%\com.icodici.umi-0.8.49.jar;%APP_LIB_DIR%\org.scala-lang.scala-library-2.12.7.jar;%APP_LIB_DIR%\com.icodici.universa_core-3.10.5.1.jar;%APP_LIB_DIR%\org.yaml.snakeyaml-1.18.jar;%APP_LIB_DIR%\com.icodici.nanohttpd-2.1.0.jar;%APP_LIB_DIR%\com.icodici.common_tools-3.10.5.1.jar;%APP_LIB_DIR%\com.eclipsesource.minimal-json.minimal-json-0.9.4.jar;%APP_LIB_DIR%\net.java.dev.jna.jna-4.5.1.jar;%APP_LIB_DIR%\org.checkerframework.checker-qual-2.3.2.jar;%APP_LIB_DIR%\com.icodici.crypto-3.10.5.1.jar;%APP_LIB_DIR%\org.bouncycastle.bcprov-jdk15on-1.62.jar;%APP_LIB_DIR%\com.squareup.jnagmp.jnagmp-2.0.0.jar;%APP_LIB_DIR%\com.typesafe.play.play-json_2.12-2.6.10.jar;%APP_LIB_DIR%\com.typesafe.play.play-functional_2.12-2.6.10.jar;%APP_LIB_DIR%\org.scala-lang.scala-reflect-2.12.7.jar;%APP_LIB_DIR%\org.typelevel.macro-compat_2.12-1.1.1.jar;%APP_LIB_DIR%\joda-time.joda-time-2.9.9.jar;%APP_LIB_DIR%\com.fasterxml.jackson.core.jackson-core-2.8.11.jar;%APP_LIB_DIR%\com.fasterxml.jackson.core.jackson-annotations-2.8.11.jar;%APP_LIB_DIR%\com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.8.11.jar;%APP_LIB_DIR%\com.fasterxml.jackson.core.jackson-databind-2.8.11.1.jar;%APP_LIB_DIR%\com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.8.11.jar;%APP_LIB_DIR%\org.scala-sbt.ipcsocket.ipcsocket-1.0.0.jar;%APP_LIB_DIR%\net.java.dev.jna.jna-platform-4.5.0.jar;%APP_LIB_DIR%\net.sf.jopt-simple.jopt-simple-4.9.jar"
84
84
  set "APP_MAIN_CLASS=com.icodici.farcallscala.Main"
85
85
  set "SCRIPT_CONF_FILE=%APP_HOME%\conf\application.ini"
86
86
 
data/exe/unikeys ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'ansi/code'
3
+ require 'io/console'
4
+ begin
5
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
6
+ require 'universa'
7
+ rescue LoadError => e
8
+ require 'universa'
9
+ end
10
+
11
+ require 'universa/tools'
12
+ require 'universa/keytool/keytool'
13
+
data/exe/utool CHANGED
@@ -8,79 +8,4 @@ rescue LoadError => e
8
8
  require 'universa'
9
9
  end
10
10
 
11
- require 'optparse'
12
-
13
- include Universa
14
-
15
- options = OpenStruct.new
16
- options.key_path = "~/.universa/test_access.private.unikey"
17
- options.key_password = nil
18
-
19
- opt_parser = OptionParser.new {|opts|
20
- opts.banner = "Universa Node tool #{Universa::VERSION}"
21
- opts.separator ""
22
-
23
- opts.on("-k", "--key KEY_FILE",
24
- "load the access key from the specified file. By default, looks in", "#{options.key_path}") do |file_name|
25
- options.key_path = File.expand_path(file_name)
26
- end
27
-
28
- opts.on("-n", "--node name", "node to connect, without protocol, e.g. 'node-7-com.universa.io'") do |node|
29
- options.node = node
30
- end
31
-
32
- opts.separator ""
33
- opts.on_tail("-h", "--help", "Show this message") do
34
- puts opts
35
- exit
36
- end
37
-
38
- opts.on_tail("-v", "--version", "Show versions") do
39
- puts "UNodeTool version: #{Universa::VERSION}"
40
- puts "UMI version : #{Service.umi.version}"
41
- exit
42
- end
43
- }
44
-
45
- def seconds_to_hms seconds
46
- mm, ss = seconds.divmod(60)
47
- hh, mm = mm.divmod(60)
48
- "%d:%02d:%02d" % [hh, mm, ss]
49
- end
50
-
51
-
52
- opt_parser.parse!
53
-
54
- begin
55
- node = options.node or raise "please specify node name with --node"
56
- key = PrivateKey.from_packed(
57
- open(File.expand_path options.key_path, 'rb').read,
58
- password: options.key_password
59
- ) rescue nil
60
- raise "failed to load private key from #{options.key_path}" unless key
61
- conn = Client.new(key)[node]
62
- stats = conn.execute("getStats", showDays: 60)
63
-
64
- puts
65
- puts "--------------- UNIVERSA NODE ##{stats.nodeNumber} (#{conn.name}) REPORT : -------------------------"
66
- puts
67
- puts "Server uptime (since last restart): #{seconds_to_hms stats.uptime} (#{stats.uptime}\")"
68
- puts "Active ledger records : #{stats.ledgerSize}"
69
- puts "Software version : #{stats.coreVersion}"
70
- puts
71
- stats.payments.each_slice(4) {|pss|
72
- puts pss.map {|pdata| "#{pdata.date}: %4dU" % pdata.units}.join("\t")
73
- }
74
-
75
- rescue RuntimeError
76
- puts $!.message
77
- puts "Try --help fo see usage information"
78
- rescue
79
- p $!.class.name
80
- $stderr.puts "Excetion: #{$!.message}"
81
- $stderr.puts $!.backtrace.join("\n")
82
- puts "\n\ntry --help"
83
- end
84
-
85
-
86
11
  # key = PrivateKey.from_packed
data/lib/universa/keys.rb CHANGED
@@ -39,6 +39,19 @@ module Universa
39
39
  class PublicKey < RemoteAdapter
40
40
  remote_class 'com.icodici.crypto.PublicKey'
41
41
 
42
+ # Load key from packed, optinally, using the password
43
+ #
44
+ # @param [String] packed binary string with packed key
45
+ # @param [String] password optional password
46
+ def self.from_packed(packed, password: nil)
47
+ packed.force_encoding 'binary'
48
+ if password
49
+ invoke_static "unpackWithPassword", packed, password
50
+ else
51
+ PublicKey.new packed
52
+ end
53
+ end
54
+
42
55
  # @return [KeyAddress] short address
43
56
  def short_address
44
57
  @short_address ||= get_short_address()
@@ -0,0 +1,228 @@
1
+ require 'optparse'
2
+ require 'ostruct'
3
+ require 'ansi/code'
4
+ require 'universa'
5
+ require 'universa/tools'
6
+
7
+ include Universa
8
+
9
+ class MessageException < Exception;
10
+ end
11
+
12
+ def error message
13
+ raise MessageException, message
14
+ end
15
+
16
+ using Universa
17
+
18
+ def human_to_i value, factor = 1000
19
+ head, tail = value[0...-1], value[-1]
20
+ case tail
21
+ when 'k', 'K'
22
+ head.to_i * 1000
23
+ when 'M', 'm'
24
+ head.to_i * factor * factor
25
+ when 'G', 'g'
26
+ head.to_i * factor * factor * factor
27
+ else
28
+ value.to_t
29
+ end
30
+ end
31
+
32
+ def seconds_to_hms seconds
33
+ mm, ss = seconds.divmod(60)
34
+ hh, mm = mm.divmod(60)
35
+ "%d:%02d:%02d" % [hh, mm, ss]
36
+ end
37
+
38
+ # Show help it nothing to do
39
+ ARGV << "-h" if ARGV == []
40
+
41
+ class KeyTool
42
+
43
+ def initialize
44
+ @require_password = true
45
+ @autogenerate_password = false
46
+ @tasks = []
47
+ @rounds = 1000000
48
+ init_parser()
49
+ end
50
+
51
+ def task &block
52
+ @tasks << block
53
+ end
54
+
55
+ def session_password
56
+ @require_password or return nil
57
+ @session_password ||= begin
58
+ if @autogenerate_password
59
+ psw = 29.random_alnums
60
+ puts "Autogenerated password: #{ANSI.bold { psw }}"
61
+ psw
62
+ else
63
+ puts "\nPlease enter password for key to be generated"
64
+ psw1 = STDIN.noecho(&:gets).chomp
65
+ puts "Please re-enter the password"
66
+ psw2 = STDIN.noecho(&:gets).chomp
67
+ psw1 == psw2 or error "passwords do not match"
68
+ psw1.length < 8 and error "password is too short"
69
+ psw1
70
+ end
71
+ end
72
+ end
73
+
74
+ def output_file(extension = nil)
75
+ name = @output_file or error "specify ouput file with -o / --output"
76
+ extension && !name.end_with?(extension) ? "#{name}#{extension}" : name
77
+ end
78
+
79
+ def load_key(name)
80
+ packed = open(name, 'rb') { |f| f.read } rescue error("can't read file: #{name}")
81
+ begin
82
+ PrivateKey.from_packed(packed)
83
+ rescue Exception => e
84
+ if e.message.include?('PasswordProtectedException')
85
+ puts "\nThe key is password-protected"
86
+ while (true)
87
+ puts "\renter password for #{name}:"
88
+ password = STDIN.noecho(&:gets).chomp
89
+ STDOUT << ANSI.faint { "trying to decrypt..." }
90
+ key = PrivateKey.from_packed(packed, password: password) rescue nil
91
+ key and break key
92
+ end
93
+ else
94
+ error "can't load the key (file corrupt?)"
95
+ end
96
+ end
97
+ end
98
+
99
+ def check_overwrite output
100
+ error "File #{output} already exists" if File.exists?(output) && !@overwrite
101
+ end
102
+
103
+ def save_key name, key
104
+ open(name, 'wb') { |f|
105
+ f << if @require_password
106
+ password = session_password
107
+ puts "\nEncrypting key with #@rounds PBKDF rounds..."
108
+ key.pack_with_password(password, @rounds)
109
+ else
110
+ key.pack()
111
+ end
112
+ }
113
+ end
114
+
115
+ def init_parser
116
+ opt_parser = OptionParser.new { |opts|
117
+ opts.banner = ANSI.bold { "\nUniversa Key tool #{Universa::VERSION}" }
118
+ opts.separator ""
119
+
120
+ # opts.on("-k", "--key KEY_FILE",
121
+ # "load the access key from the specified file. By default, looks in", "#{options.key_path}") do |file_name|
122
+ # options.key_path = File.expand_path(file_name)
123
+ # end
124
+ #
125
+ # opts.on("-n", "--node name", "node to connect, without protocol, e.g. 'node-7-com.universa.io'") do |node|
126
+ # options.node = node
127
+ # end
128
+ #
129
+ opts.on("--no-password",
130
+ "create resources not protected by password. Not recommended.") { |x|
131
+ @require_password = x
132
+ }
133
+
134
+ opts.on("-a", "--autogenerate_password",
135
+ "the new secure password will be generated and shown on the console",
136
+ "while the password is safe, printing it out to the console may not.",
137
+ "Normally, system promts the password on the console that is",
138
+ "more secure") { |x|
139
+ @autogenerate_password = x
140
+ }
141
+
142
+ opts.on("-o FILE", "--output FILE", "file name for the output file") { |f|
143
+ @output_file = f
144
+ }
145
+
146
+ opts.on("-F", "--force", "force overwrite file") {
147
+ @overwrite = true
148
+ }
149
+
150
+ opts.on("-g SIZE", "--generate SIZE", "generate new private key of the specified bis size") { |s|
151
+ task {
152
+ strength = s.to_i
153
+ case strength
154
+ when 2048, 4096
155
+ task {
156
+ # check we have all to generate...
157
+ output = output_file(".private.unikey")
158
+ check_overwrite(output)
159
+ key = PrivateKey.new(strength)
160
+ save_key(output, key)
161
+ puts "\nNew private key is generated: #{output}"
162
+ }
163
+ else
164
+ error "Only supported key sizes are 2048, 4096"
165
+ end
166
+ }
167
+ }
168
+
169
+ opts.on("-u FILE", "--update FILE", "update password on the existing key (also add/remove") { |name|
170
+ task {
171
+ output = output_file(".private.unikey")
172
+ check_overwrite output
173
+ key = load_key(name)
174
+ puts("\rKey loaded OK ")
175
+ save_key output, key
176
+ }
177
+ }
178
+
179
+ opts.on("-r ROUNDS", "--rounds ROUNDS", "how many PBKDF2 rounds to use when saving with password",
180
+ "(1 million by default, the more the better, but takes time)") { |r|
181
+ @rounds = human_to_i(r)
182
+ @rounds < 100000 and error "To few rounds, use at least 100000"
183
+ }
184
+
185
+ opts.on("-s FILE", "--show FILE", "show key information") { |name|
186
+ task {
187
+ key = load_key(name)
188
+ puts "\r----------------------------------------------------------------------------------------"
189
+ puts "Private key, #{key.info.getKeyLength() * 8} bits\n"
190
+ puts "Short address : #{ANSI.bold { key.short_address.to_s }}"
191
+ puts "Long address : #{ANSI.bold { key.long_address.to_s }}"
192
+ }
193
+ }
194
+
195
+ opts.separator ""
196
+
197
+ opts.on_tail("-h", "--help", "Show this message") do
198
+ puts opts
199
+ exit
200
+ end
201
+
202
+ opts.on_tail("-v", "--version", "Show versions") do
203
+ puts "Universa core version: #{Service.umi.core_version}"
204
+ puts "UMI version : #{Service.umi.version}"
205
+ client = Universa::Client.new
206
+ puts "Connected nodes : #{client.size}"
207
+ exit
208
+ end
209
+ }
210
+
211
+ ## D_TIsYOfFQ2WejhG3
212
+ begin
213
+ opt_parser.order!
214
+ @tasks.each { |t| t.call }
215
+ rescue MessageException, OptionParser::ParseError => e
216
+ STDERR.puts ANSI.red { ANSI.bold { "\nError: #{e}\n" } }
217
+ exit(1000)
218
+ rescue Interrupt
219
+ exit(1010)
220
+ rescue
221
+ STDERR.puts ANSI.red { "\n#{$!.backtrace.reverse.join("\n")}\n" }
222
+ STDERR.puts ANSI.red { ANSI.bold { "Error: #$! (#{$!.class.name})" } }
223
+ exit(2000)
224
+ end
225
+ end
226
+ end
227
+
228
+ KeyTool.new()
@@ -143,7 +143,7 @@ module Universa
143
143
 
144
144
  # debugging label
145
145
  def inspect
146
- "<#{self.class.name}:#{__id__}:#{@remote._remote_class_name}:#{@remote._remote_id}}>"
146
+ "<#{self.class.name}:#{__id__}:#{@remote._remote_class_name}:#{@remote._remote_id}>"
147
147
  end
148
148
 
149
149
  # call the remote toString(). Does not cache it.
@@ -120,7 +120,24 @@ module Universa
120
120
  result
121
121
  end
122
122
  end
123
+ end
124
+
125
+ alnums = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
126
+ ALNUMS = (alnums + alnums.downcase + '_' + '0123456789').chars.to_ary
127
+ NUMBERS = "0123456789".chars.to_ary
128
+
129
+ refine Numeric do
130
+ def random_alnums
131
+ to_i.times.map {ALNUMS.sample}.join('')
132
+ end
123
133
 
134
+ def random_digits
135
+ to_i.times.map {NUMBERS.sample}.join('')
136
+ end
137
+
138
+ def random_bytes
139
+ to_i.times.map {rand(256).chr}.join('').force_encoding('binary')
140
+ end
124
141
  end
125
142
 
126
143
  end
@@ -66,4 +66,17 @@ module Universa
66
66
 
67
67
  end
68
68
  end
69
+
70
+ class EscrowHelper < RemoteAdapter
71
+ remote_class "com.icodici.universa.contract.helpers.EscrowHelper"
72
+
73
+ static_method :initEscrow
74
+ static_method :assignEscrow
75
+ static_method :cancelEscrow
76
+ static_method :completeEscrow
77
+ static_method :closeEscrow
78
+ static_method :closeEscrow
79
+ static_method :obtainPaymentOnClosedEscrow
80
+ static_method :getPayment
81
+ end
69
82
  end
@@ -1,4 +1,4 @@
1
1
  module Universa
2
2
  # Current gem version
3
- VERSION = "3.10.2.1"
3
+ VERSION = "3.10.5.1"
4
4
  end
data/universa.gemspec CHANGED
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency "boss-protocol", ">= 1.5.0"
35
35
  spec.add_dependency "concurrent-ruby", ">= 1.0.5"
36
36
  spec.add_dependency "concurrent-ruby-ext"
37
+ spec.add_dependency "ansi"
37
38
 
38
39
  spec.add_development_dependency "bundler", "~> 1.16"
39
40
  spec.add_development_dependency "rake", "~> 10.0"
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.10.2.1
4
+ version: 3.10.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - sergeych
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-01 00:00:00.000000000 Z
11
+ date: 2019-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: farcall
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ansi
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -112,6 +126,7 @@ description: Uses UMI Universa client
112
126
  email:
113
127
  - real.sergeych@gmail.com
114
128
  executables:
129
+ - unikeys
115
130
  - universa
116
131
  - utool
117
132
  extensions: []
@@ -136,12 +151,11 @@ files:
136
151
  - bin/umi/lib/com.fasterxml.jackson.core.jackson-databind-2.8.11.1.jar
137
152
  - bin/umi/lib/com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.8.11.jar
138
153
  - bin/umi/lib/com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.8.11.jar
139
- - bin/umi/lib/com.icodici.common_tools-3.10.2.jar
140
- - bin/umi/lib/com.icodici.crypto-3.10.2.jar
154
+ - bin/umi/lib/com.icodici.common_tools-3.10.5.1.jar
155
+ - bin/umi/lib/com.icodici.crypto-3.10.5.1.jar
141
156
  - bin/umi/lib/com.icodici.nanohttpd-2.1.0.jar
142
- - bin/umi/lib/com.icodici.umi-0.8.44.jar
143
- - bin/umi/lib/com.icodici.universa_core-3.10.2.jar
144
- - bin/umi/lib/com.madgag.spongycastle.core-1.58.0.0.jar
157
+ - bin/umi/lib/com.icodici.umi-0.8.49.jar
158
+ - bin/umi/lib/com.icodici.universa_core-3.10.5.1.jar
145
159
  - bin/umi/lib/com.squareup.jnagmp.jnagmp-2.0.0.jar
146
160
  - bin/umi/lib/com.typesafe.play.play-functional_2.12-2.6.10.jar
147
161
  - bin/umi/lib/com.typesafe.play.play-json_2.12-2.6.10.jar
@@ -149,12 +163,14 @@ files:
149
163
  - bin/umi/lib/net.java.dev.jna.jna-4.5.1.jar
150
164
  - bin/umi/lib/net.java.dev.jna.jna-platform-4.5.0.jar
151
165
  - bin/umi/lib/net.sf.jopt-simple.jopt-simple-4.9.jar
166
+ - bin/umi/lib/org.bouncycastle.bcprov-jdk15on-1.62.jar
152
167
  - bin/umi/lib/org.checkerframework.checker-qual-2.3.2.jar
153
168
  - bin/umi/lib/org.scala-lang.scala-library-2.12.7.jar
154
169
  - bin/umi/lib/org.scala-lang.scala-reflect-2.12.7.jar
155
170
  - bin/umi/lib/org.scala-sbt.ipcsocket.ipcsocket-1.0.0.jar
156
171
  - bin/umi/lib/org.typelevel.macro-compat_2.12-1.1.1.jar
157
172
  - bin/umi/lib/org.yaml.snakeyaml-1.18.jar
173
+ - exe/unikeys
158
174
  - exe/universa
159
175
  - exe/utool
160
176
  - lib/universa.rb
@@ -166,6 +182,7 @@ files:
166
182
  - lib/universa/fs_store/entry.rb
167
183
  - lib/universa/fs_store/file_store.rb
168
184
  - lib/universa/keys.rb
185
+ - lib/universa/keytool/keytool.rb
169
186
  - lib/universa/service.rb
170
187
  - lib/universa/stored_contract.rb
171
188
  - lib/universa/string_utils.rb