istox 0.2.9 → 0.2.10
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/Gemfile.lock +11 -19
- data/lib/istox/helpers/order_book_prorate.rb +47 -21
- data/lib/istox/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f2099515f9703dcadd1f99da2d05be06e062c624638ae9c3646880497c7d192d
|
|
4
|
+
data.tar.gz: 1ceba372de27ec21beb41acde07f601f138cf116d1aad19f50034af3f7cb2d18
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9263b776b77849f00a25f08b99a2e753a5eabc03e929afeb3628b6c58d13dcf799e1c587418781b77c2c01e2bd0afd7bba9de88291569198a4d66f8354a8c8dc
|
|
7
|
+
data.tar.gz: 9d6034c961985ae0ea89c806ac44dd505074fabfe899f73765328b9ef00bc4b85a06a907d8203ea3ad9f35cac77841caf372fe518911184b1f808f68f0f6a682
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
istox (0.2.
|
|
4
|
+
istox (0.2.9)
|
|
5
5
|
amazing_print
|
|
6
6
|
awesome_print
|
|
7
7
|
aws-sdk-sns (~> 1)
|
|
@@ -9,7 +9,6 @@ PATH
|
|
|
9
9
|
bunny (>= 2.12.0)
|
|
10
10
|
exponential-backoff (= 0.0.4)
|
|
11
11
|
graphlient
|
|
12
|
-
gruf
|
|
13
12
|
hashie (~> 3.5.7)
|
|
14
13
|
istox_gruf (~> 2.7.3)
|
|
15
14
|
listen (~> 3.0.5)
|
|
@@ -92,8 +91,9 @@ GEM
|
|
|
92
91
|
bullet (5.7.6)
|
|
93
92
|
activesupport (>= 3.0.0)
|
|
94
93
|
uniform_notifier (~> 1.11.0)
|
|
95
|
-
bunny (2.
|
|
94
|
+
bunny (2.18.0)
|
|
96
95
|
amq-protocol (~> 2.3, >= 2.3.1)
|
|
96
|
+
sorted_set (~> 1, >= 1.0.2)
|
|
97
97
|
byebug (11.1.3)
|
|
98
98
|
coderay (1.1.2)
|
|
99
99
|
concurrent-ruby (1.1.6)
|
|
@@ -101,7 +101,6 @@ GEM
|
|
|
101
101
|
database_cleaner (1.6.2)
|
|
102
102
|
debug_inspector (1.1.0)
|
|
103
103
|
diff-lcs (1.3)
|
|
104
|
-
e2mmap (0.1.0)
|
|
105
104
|
erubi (1.9.0)
|
|
106
105
|
exponential-backoff (0.0.4)
|
|
107
106
|
factory_bot (4.8.2)
|
|
@@ -124,7 +123,7 @@ GEM
|
|
|
124
123
|
faraday-net_http_persistent (1.1.0)
|
|
125
124
|
faraday_middleware (1.0.0)
|
|
126
125
|
faraday (~> 1.0)
|
|
127
|
-
ffi (1.15.
|
|
126
|
+
ffi (1.15.1)
|
|
128
127
|
globalid (0.4.2)
|
|
129
128
|
activesupport (>= 4.2.0)
|
|
130
129
|
google-protobuf (3.15.8-universal-darwin)
|
|
@@ -142,15 +141,6 @@ GEM
|
|
|
142
141
|
google-protobuf (~> 3.15)
|
|
143
142
|
googleapis-common-protos-types (~> 1.0)
|
|
144
143
|
grpc-tools (1.37.0)
|
|
145
|
-
gruf (2.9.1)
|
|
146
|
-
activesupport (> 4)
|
|
147
|
-
concurrent-ruby (> 1)
|
|
148
|
-
e2mmap (~> 0.1)
|
|
149
|
-
grpc (~> 1.10)
|
|
150
|
-
grpc-tools (~> 1.10)
|
|
151
|
-
json (>= 2.3)
|
|
152
|
-
slop (~> 4.6)
|
|
153
|
-
thwait (~> 0.1)
|
|
154
144
|
hashie (3.5.7)
|
|
155
145
|
i18n (0.9.5)
|
|
156
146
|
concurrent-ruby (~> 1.0)
|
|
@@ -161,7 +151,6 @@ GEM
|
|
|
161
151
|
grpc-tools (~> 1.10)
|
|
162
152
|
slop (~> 4.6)
|
|
163
153
|
jmespath (1.4.0)
|
|
164
|
-
json (2.5.1)
|
|
165
154
|
listen (3.0.8)
|
|
166
155
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
167
156
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
@@ -223,9 +212,10 @@ GEM
|
|
|
223
212
|
rake (>= 0.8.7)
|
|
224
213
|
thor (>= 0.19.0, < 2.0)
|
|
225
214
|
rake (10.5.0)
|
|
226
|
-
rb-fsevent (0.
|
|
215
|
+
rb-fsevent (0.11.0)
|
|
227
216
|
rb-inotify (0.10.1)
|
|
228
217
|
ffi (~> 1.0)
|
|
218
|
+
rbtree (0.4.4)
|
|
229
219
|
redis (4.1.3)
|
|
230
220
|
redis-actionpack (5.2.0)
|
|
231
221
|
actionpack (>= 5, < 7)
|
|
@@ -267,7 +257,11 @@ GEM
|
|
|
267
257
|
rspec-support (~> 3.8.0)
|
|
268
258
|
rspec-support (3.8.0)
|
|
269
259
|
ruby2_keywords (0.0.4)
|
|
270
|
-
|
|
260
|
+
set (1.0.1)
|
|
261
|
+
slop (4.9.1)
|
|
262
|
+
sorted_set (1.0.3)
|
|
263
|
+
rbtree
|
|
264
|
+
set (~> 1.0)
|
|
271
265
|
sprockets (3.7.2)
|
|
272
266
|
concurrent-ruby (~> 1.0)
|
|
273
267
|
rack (> 1, < 3)
|
|
@@ -278,8 +272,6 @@ GEM
|
|
|
278
272
|
sqlite3 (1.3.13)
|
|
279
273
|
thor (0.20.3)
|
|
280
274
|
thread_safe (0.3.6)
|
|
281
|
-
thwait (0.2.0)
|
|
282
|
-
e2mmap
|
|
283
275
|
timecop (0.9.1)
|
|
284
276
|
tzinfo (1.2.6)
|
|
285
277
|
thread_safe (~> 0.1)
|
|
@@ -18,33 +18,59 @@ module Istox
|
|
|
18
18
|
|
|
19
19
|
# process whitelist
|
|
20
20
|
whitelists.each do |whitelist|
|
|
21
|
-
|
|
21
|
+
whitelisted_investments = investments.select { |investment1| investment1[:account_id] == whitelist[:account_id] }
|
|
22
22
|
|
|
23
|
-
next unless
|
|
23
|
+
next unless whitelisted_investments.length.positive?
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
current_guarenteed_amount = ::BigDecimal.new(whitelist[:guaranteed_allocation].to_s)
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
whitelisted_investments.each do |whitelisted_investment|
|
|
28
|
+
granted_amount = [::BigDecimal.new(whitelisted_investment[:fiat_amount].to_s), current_guarenteed_amount].min
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
next unless granted_amount.positive?
|
|
31
|
+
|
|
32
|
+
current_guarenteed_amount = ::Istox::FMath.sub(current_guarenteed_amount, granted_amount).to_d
|
|
33
|
+
|
|
34
|
+
hard_cap = ::Istox::FMath.sub(hard_cap, granted_amount)
|
|
35
|
+
whitelisted_investment[:fiat_amount] = Istox::FMath.sub(whitelisted_investment[:fiat_amount], granted_amount)
|
|
36
|
+
whitelisted_investment[:is_vip] = true
|
|
37
|
+
whitelisted_investment[:granted_amount] = granted_amount.to_s
|
|
38
|
+
end
|
|
33
39
|
end
|
|
34
40
|
|
|
35
41
|
# sort by id asc
|
|
36
42
|
interests = investments.sort do |a, b|
|
|
37
43
|
a[:id] <=> b[:id]
|
|
38
44
|
end
|
|
45
|
+
|
|
46
|
+
## check whether each investment already had earlier investment from the same investor
|
|
47
|
+
interests = interests.map do |interest|
|
|
48
|
+
earlier_interest = interests.find do |i|
|
|
49
|
+
i[:account_id] == interest[:account_id] &&
|
|
50
|
+
i[:id] != interest[:id] && i[:id].to_i < interest[:id].to_i
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
interest[:has_earlier_interest] = earlier_interest.present?
|
|
54
|
+
|
|
55
|
+
interest
|
|
56
|
+
end
|
|
57
|
+
|
|
39
58
|
total_interests = 0
|
|
40
59
|
|
|
41
60
|
max_allowed_investor = Istox::FMath.round_down(::Istox::FMath.div(hard_cap, min_investment), 0).to_i
|
|
42
61
|
|
|
43
|
-
|
|
62
|
+
allowed_investor_ids = []
|
|
44
63
|
interests.each_with_index.map do |interest|
|
|
45
|
-
if interest[:
|
|
64
|
+
if !allowed_investor_ids.include?(interest[:account_id]) &&
|
|
65
|
+
interest[:fiat_amount].to_d.positive? && allowed_investor_ids.length < max_allowed_investor
|
|
66
|
+
allowed_investor_ids.push(interest[:account_id])
|
|
67
|
+
interest[:to_be_set_zero] = false
|
|
46
68
|
total_interests = ::Istox::FMath.add(total_interests, interest[:fiat_amount])
|
|
47
|
-
|
|
69
|
+
elsif allowed_investor_ids.include?(interest[:account_id]) && interest[:fiat_amount].to_d.positive?
|
|
70
|
+
interest[:to_be_set_zero] = false
|
|
71
|
+
total_interests = ::Istox::FMath.add(total_interests, interest[:fiat_amount])
|
|
72
|
+
else
|
|
73
|
+
interest[:to_be_set_zero] = true
|
|
48
74
|
end
|
|
49
75
|
end
|
|
50
76
|
|
|
@@ -52,18 +78,18 @@ module Istox
|
|
|
52
78
|
if total_interests.to_d > hard_cap.to_s.to_d
|
|
53
79
|
|
|
54
80
|
# prorate the interests
|
|
55
|
-
i = 0
|
|
56
81
|
interests = interests.each_with_index.map do |interest|
|
|
57
|
-
investment = if
|
|
82
|
+
investment = if interest[:fiat_amount].to_d.positive? && !interest[:to_be_set_zero]
|
|
58
83
|
result = ::Istox::FMath.round_down(::Istox::FMath.mul(::Istox::FMath.div(interest[:fiat_amount], total_interests),
|
|
59
84
|
hard_cap), 0)
|
|
60
85
|
|
|
61
86
|
result = result.to_d - result.to_d.modulo(invest_step.to_s.to_d)
|
|
62
87
|
|
|
63
88
|
# only set to min investment if is not vip
|
|
64
|
-
|
|
89
|
+
if result < min_investment.to_d && interest[:is_vip].blank? && !interest[:has_earlier_interest]
|
|
90
|
+
result = min_investment.to_d
|
|
91
|
+
end
|
|
65
92
|
|
|
66
|
-
i += 1
|
|
67
93
|
result
|
|
68
94
|
else
|
|
69
95
|
::BigDecimal.new('0').to_s
|
|
@@ -73,6 +99,7 @@ module Istox
|
|
|
73
99
|
id: interest[:id],
|
|
74
100
|
is_vip: interest[:is_vip],
|
|
75
101
|
granted_amount: interest[:granted_amount],
|
|
102
|
+
has_earlier_interest: interest[:has_earlier_interest],
|
|
76
103
|
investment: investment.to_s
|
|
77
104
|
}
|
|
78
105
|
end
|
|
@@ -86,10 +113,10 @@ module Istox
|
|
|
86
113
|
if new_total_interests.to_d > hard_cap.to_s.to_d
|
|
87
114
|
total_deducting = ::Istox::FMath.sub(new_total_interests, hard_cap)
|
|
88
115
|
interests.reverse_each do |interest|
|
|
89
|
-
next unless interest[:investment].to_d > min_investment.to_d || interest[:is_vip]
|
|
116
|
+
next unless interest[:investment].to_d > min_investment.to_d || interest[:is_vip] || interest[:has_earlier_interest]
|
|
90
117
|
|
|
91
118
|
# allow to deduct to zero if is vip
|
|
92
|
-
deductable = if interest[:is_vip]
|
|
119
|
+
deductable = if interest[:is_vip] || interest[:has_earlier_interest]
|
|
93
120
|
interest[:investment]
|
|
94
121
|
else
|
|
95
122
|
::Istox::FMath.sub(interest[:investment], min_investment)
|
|
@@ -110,6 +137,7 @@ module Istox
|
|
|
110
137
|
interest[:granted_amount].to_d.positive?
|
|
111
138
|
interest.delete(:is_vip)
|
|
112
139
|
interest.delete(:granted_amount)
|
|
140
|
+
interest.delete(:has_earlier_interest)
|
|
113
141
|
|
|
114
142
|
if include_refund_amount
|
|
115
143
|
original_investment = original_investments.find { |original_investment1| original_investment1[:id] == interest[:id] }
|
|
@@ -122,14 +150,12 @@ module Istox
|
|
|
122
150
|
|
|
123
151
|
final_interests = interests.each_with_index.map do |interest|
|
|
124
152
|
final_amount = if interest[:is_vip]
|
|
125
|
-
vip_fiat_amount =
|
|
153
|
+
vip_fiat_amount = !interest[:to_be_set_zero] ? interest[:fiat_amount] : '0'
|
|
126
154
|
::Istox::FMath.add(vip_fiat_amount, interest[:granted_amount])
|
|
127
155
|
else
|
|
128
|
-
|
|
156
|
+
!interest[:to_be_set_zero] ? interest[:fiat_amount] : '0'
|
|
129
157
|
end
|
|
130
158
|
|
|
131
|
-
max_allowed_investor -= 1 if interest[:fiat_amount].to_d.positive?
|
|
132
|
-
|
|
133
159
|
result = {
|
|
134
160
|
id: interest[:id],
|
|
135
161
|
investment: ::BigDecimal.new(final_amount.to_s).to_s
|
data/lib/istox/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: istox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Siong Leng
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-06-
|
|
11
|
+
date: 2021-06-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: amazing_print
|