ton-sdk-ruby 0.0.5 → 0.0.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz: '
|
3
|
+
metadata.gz: 752289b7128c6053647dcef5b5e3abd2df529b0c3123ab82a19de7bafc510e96
|
4
|
+
data.tar.gz: '058e58a9bc26b88de381e106dcfa2ab8d4a93cc0da115753a9ea491f8b19004f'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 394ba8607ba2edd3e020d55683501402f1443ef9d56d0af325fd2ddc55851d9c1a64bea6a5134879b0c81ff9a3a1fc2eac25049dad18231938aa1b01f63d1640
|
7
|
+
data.tar.gz: 8422831cd0aadb059d753828c835330eb2b96aa6085cf7808d0eccb4890ee12a8ee88325db61afccd225d85922239fe81a5587d468ca28867650032e89113e02
|
@@ -106,6 +106,11 @@ module TonSdkRuby
|
|
106
106
|
size = (Math.log2(length)).ceil
|
107
107
|
size_bytes = (int.to_s(2).length.to_f / 8).ceil
|
108
108
|
size_bits = size_bytes * 8
|
109
|
+
int_bits = 1 << (size_bits - 1)
|
110
|
+
|
111
|
+
if int < -int_bits || int >= int_bits
|
112
|
+
raise StandardError.new("Builder: can't store an VarInt, because its value allocates more space than provided.")
|
113
|
+
end
|
109
114
|
|
110
115
|
check_bits_overflow(size + size_bits)
|
111
116
|
|
@@ -124,6 +129,10 @@ module TonSdkRuby
|
|
124
129
|
size_bytes = (uint.to_s(2).length.to_f / 8).ceil
|
125
130
|
size_bits = size_bytes * 8
|
126
131
|
|
132
|
+
if uint < 0 || uint >= (1 << size_bits)
|
133
|
+
raise StandardError.new("Builder: can't store an VarUInt, because its value allocates more space than provided.")
|
134
|
+
end
|
135
|
+
|
127
136
|
check_bits_overflow(size + size_bits)
|
128
137
|
|
129
138
|
if uint == 0
|
@@ -38,7 +38,6 @@ module TonSdkRuby
|
|
38
38
|
def get_secure_random_number(min, max)
|
39
39
|
range = max - min
|
40
40
|
bits_needed = Math.log2(range).ceil
|
41
|
-
raise 'Range is too large' if bits_needed > 53
|
42
41
|
bytes_needed = (bits_needed / 8.0).ceil
|
43
42
|
mask = (2 ** bits_needed) - 1
|
44
43
|
|
@@ -88,7 +87,7 @@ module TonSdkRuby
|
|
88
87
|
current_file_path = File.expand_path(File.dirname(__FILE__))
|
89
88
|
bip0039en = JSON.parse(File.read("#{current_file_path}/words/english.json"))
|
90
89
|
length.times do
|
91
|
-
index = get_secure_random_number(0,
|
90
|
+
index = get_secure_random_number(0, bip0039en.size)
|
92
91
|
mnemonic_array.push(bip0039en[index])
|
93
92
|
end
|
94
93
|
|
data/lib/ton-sdk-ruby/version.rb
CHANGED
data/lib/ton-sdk-ruby.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require_relative './ton-sdk-ruby/version'
|
2
|
-
require_relative './ton-sdk-ruby/bit_array/bit_array'
|
3
2
|
|
4
3
|
require_relative './ton-sdk-ruby/utils/helpers'
|
5
4
|
require_relative './ton-sdk-ruby/utils/bits'
|
@@ -7,9 +6,9 @@ require_relative './ton-sdk-ruby/utils/checksum'
|
|
7
6
|
require_relative './ton-sdk-ruby/utils/hash'
|
8
7
|
require_relative './ton-sdk-ruby/utils/numbers'
|
9
8
|
|
10
|
-
require_relative './ton-sdk-ruby/types/
|
11
|
-
require_relative './ton-sdk-ruby/types/
|
12
|
-
require_relative './ton-sdk-ruby/types/
|
9
|
+
require_relative './ton-sdk-ruby/types/address'
|
10
|
+
require_relative './ton-sdk-ruby/types/block'
|
11
|
+
require_relative './ton-sdk-ruby/types/coins'
|
13
12
|
|
14
13
|
require_relative './ton-sdk-ruby/boc/mask'
|
15
14
|
require_relative './ton-sdk-ruby/boc/cell'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ton-sdk-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nerzh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ed25519
|
@@ -90,7 +90,6 @@ extra_rdoc_files: []
|
|
90
90
|
files:
|
91
91
|
- bin/ton-sdk-ruby
|
92
92
|
- lib/ton-sdk-ruby.rb
|
93
|
-
- lib/ton-sdk-ruby/bit_array/bit_array.rb
|
94
93
|
- lib/ton-sdk-ruby/boc/builder.rb
|
95
94
|
- lib/ton-sdk-ruby/boc/cell.rb
|
96
95
|
- lib/ton-sdk-ruby/boc/hashmap.rb
|
@@ -1,147 +0,0 @@
|
|
1
|
-
module TonSdkRuby
|
2
|
-
|
3
|
-
class BitArray < Array
|
4
|
-
extend TonSdkRuby
|
5
|
-
include TonSdkRuby
|
6
|
-
|
7
|
-
attr_accessor :read_cursor
|
8
|
-
|
9
|
-
def initialize(size: 0, value: false)
|
10
|
-
@read_cursor = 0
|
11
|
-
super(size) { |_| get_value(value) }
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
self.map { |e| e ? 1 : 0 }.join('')
|
16
|
-
end
|
17
|
-
|
18
|
-
def show_cursor
|
19
|
-
self.map { |e| e ? 1 : 0 }.join('').insert(cursor, '⏶')
|
20
|
-
end
|
21
|
-
|
22
|
-
def set_bit!(index: nil, value: nil)
|
23
|
-
raise "Wrong index #{index}. Out of bounds array" if index > size || index < 0
|
24
|
-
self[index] = get_value(value)
|
25
|
-
end
|
26
|
-
|
27
|
-
def get_bit(index: nil)
|
28
|
-
raise "Wrong index #{index}. Out of bounds array" if index > size - 1 || index < 0
|
29
|
-
self[index]
|
30
|
-
end
|
31
|
-
|
32
|
-
def set_byte!(index: nil, value: nil)
|
33
|
-
set_number!(index: index, value: value, size: 8)
|
34
|
-
end
|
35
|
-
|
36
|
-
def get_byte(index: nil)
|
37
|
-
raise "Wrong index #{index}. Out of bounds array" if index > size - 1 || index < 0
|
38
|
-
self[index..index+7].map { |e| e.to_i}.join('').to_i(2)
|
39
|
-
end
|
40
|
-
|
41
|
-
def store_uint!(value: nil, size: nil)
|
42
|
-
store_number!(value: value, size: size)
|
43
|
-
end
|
44
|
-
|
45
|
-
def store_sint!(value: nil, size: nil)
|
46
|
-
# i.e. signed int and one first bit reserved for sign size = (size - 1)
|
47
|
-
# and restrict for max value = value >= (1 << size - 1)
|
48
|
-
max_sint = (1 << size - 1)
|
49
|
-
raise "Wrong value #{value}" if value < -max_sint || value >= max_sint
|
50
|
-
set_number!(value: value, size: size)
|
51
|
-
end
|
52
|
-
|
53
|
-
def read_uint!(bits_amount: nil)
|
54
|
-
raise "Wrong bits_amount #{bits_amount}" if bits_amount > self.size
|
55
|
-
bits_string = ""
|
56
|
-
(read_cursor + bits_amount).times do |index|
|
57
|
-
bits_string << self[index] ? '1' : '0'
|
58
|
-
@read_cursor = index
|
59
|
-
end
|
60
|
-
bits_string.to_i(2)
|
61
|
-
end
|
62
|
-
|
63
|
-
def read_sint!(bits_amount: nil)
|
64
|
-
raise "Wrong bits_amount #{bits_amount}" if bits_amount > self.size
|
65
|
-
negative_sign = false
|
66
|
-
bits_string = ""
|
67
|
-
(read_cursor + bits_amount).times do |index|
|
68
|
-
bits_string << (self[index] ? '1' : '0')
|
69
|
-
@read_cursor = index
|
70
|
-
end
|
71
|
-
calc_signed_integer(bits_string: bits_string)
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
private
|
76
|
-
|
77
|
-
# 00001101 -> set as 00001101
|
78
|
-
def set_number!(index: nil, value: nil, size: nil)
|
79
|
-
index = index ? index : self.size
|
80
|
-
raise "Wrong index #{index}. Out of bounds array" if index > self.size || index < 0
|
81
|
-
# if size = 4 bit and max value in bits = 1111, then error (value >= 10000) == (value >= (1 << 4))
|
82
|
-
raise "Wrong value #{value}" if value >= (1 << size)
|
83
|
-
size.times do |i|
|
84
|
-
bit_index = size - i - 1
|
85
|
-
# if size = 4 bit and value in bots = 1000, then (1000 >> (4 - 1)) == 0001
|
86
|
-
most_significant_bit = (value >> bit_index)
|
87
|
-
# p most_significant_bit.to_s(2)
|
88
|
-
# & (AND) 101 & 1 == 001 or 101 & 001 == 001
|
89
|
-
bit = (most_significant_bit & 1) == 1
|
90
|
-
set_bit!(index: index, value: bit)
|
91
|
-
index += 1
|
92
|
-
end
|
93
|
-
self
|
94
|
-
end
|
95
|
-
|
96
|
-
# # 00001101 -> set as 00001101
|
97
|
-
# def store_number!(index: nil, value: nil, size: nil)
|
98
|
-
# @cursor = index ? index : cursor
|
99
|
-
# raise "Wrong index #{cursor}. Out of bounds array" if cursor > self.size || cursor < 0
|
100
|
-
# # if size = 4 bit and max value in bits = 1111, then error (value >= 10000) == (value >= (1 << 4))
|
101
|
-
# raise "Wrong value #{value}" if value < 0 || value >= (1 << size)
|
102
|
-
# size.times do |i|
|
103
|
-
# bit_index = size - i - 1
|
104
|
-
# # if size = 4 bit and value in bots = 1000, then (1000 >> (4 - 1)) == 0001
|
105
|
-
# most_significant_bit = (value >> bit_index)
|
106
|
-
# # p most_significant_bit.to_s(2)
|
107
|
-
# # & (AND) 101 & 1 == 001 or 101 & 001 == 001
|
108
|
-
# bit = (most_significant_bit & 1) == 1
|
109
|
-
# set_bit!(index: cursor, value: bit)
|
110
|
-
# @cursor += 1
|
111
|
-
# end
|
112
|
-
# self
|
113
|
-
# end
|
114
|
-
|
115
|
-
def calc_signed_integer(bits_string: nil)
|
116
|
-
value = bits_string.to_i(2)
|
117
|
-
index = bits_string.size - 1
|
118
|
-
(value & ~(1 << index)) - (value & (1 << index))
|
119
|
-
end
|
120
|
-
|
121
|
-
def get_value(val)
|
122
|
-
if val.class == TrueClass
|
123
|
-
val
|
124
|
-
elsif val.class == FalseClass
|
125
|
-
val
|
126
|
-
elsif val.class == String
|
127
|
-
val == "1" ? true : false
|
128
|
-
elsif val.class == Integer
|
129
|
-
val == 0 ? false : true
|
130
|
-
else
|
131
|
-
raise "Wrong data type of #{val}"
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
class FalseClass
|
138
|
-
def to_i
|
139
|
-
0
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
class TrueClass
|
144
|
-
def to_i
|
145
|
-
1
|
146
|
-
end
|
147
|
-
end
|