stellar_spectrum 1.1.0 → 1.1.1
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/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/lib/stellar_spectrum.rb +1 -6
- data/lib/stellar_spectrum/client.rb +1 -2
- data/lib/stellar_spectrum/services/send_payment.rb +3 -9
- data/lib/stellar_spectrum/services/unlock.rb +14 -0
- data/lib/stellar_spectrum/version.rb +1 -1
- metadata +2 -7
- data/lib/stellar_spectrum/services/get_channel_account_info.rb +0 -23
- data/lib/stellar_spectrum/services/sending_payment/attempt_release_lock.rb +0 -18
- data/lib/stellar_spectrum/services/unlocking/attempt_release.rb +0 -37
- data/lib/stellar_spectrum/services/unlocking/check_sequence_number.rb +0 -25
- data/lib/stellar_spectrum/services/unlocking/get_account_to_unlock.rb +0 -23
- data/lib/stellar_spectrum/services/unlocking/unlock.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1f612b68e42b96844627bd1b79a6bd3fc6af1cae0c58d61a6f71390b6514886
|
4
|
+
data.tar.gz: 9aa9ae6bbf9dc14a972b0eb544d3e335689ad932afbf9ffa9d9b9e7c32d02eae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: baf26711abdfea3e88212dbd5255fa8b50ae12f0c57081f9b3438306f50c3ae11ecb2a9375a3cb1114c66504574897e3f8689add2cfdacab8679c25a243d8b79
|
7
|
+
data.tar.gz: 47bbc538c0706fe459060bbb5c22ed5d002443ac56e471777a9209af5d1c77d9226602429bd2362a16708117b2f95e5eb693c011ffaae3c456792bb571201bce
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [1.1.1] - 2018-12-13
|
8
|
+
### Fixed
|
9
|
+
- [Make unlocking strategy safer](https://github.com/bloom-solutions/stellar_spectrum-ruby/pull/9)
|
10
|
+
|
7
11
|
## [1.1.0] - 2018-12-12
|
8
12
|
### Added
|
9
13
|
- Retry when timeout is encountered [#6](https://github.com/bloom-solutions/stellar_spectrum-ruby/pull/6)
|
data/Gemfile.lock
CHANGED
data/lib/stellar_spectrum.rb
CHANGED
@@ -7,7 +7,6 @@ require "redis"
|
|
7
7
|
require "active_support/core_ext/hash/except"
|
8
8
|
require "active_support/core_ext/object/blank"
|
9
9
|
require 'active_support/core_ext/integer/inflections'
|
10
|
-
require "stellar_spectrum/services/get_channel_account_info"
|
11
10
|
require "stellar_spectrum/services/get_available_channels"
|
12
11
|
require "stellar_spectrum/services/get_channel_accounts"
|
13
12
|
require "stellar_spectrum/services/get_key_for_address"
|
@@ -19,13 +18,9 @@ require "stellar_spectrum/services/init_stellar_client"
|
|
19
18
|
require "stellar_spectrum/services/lock_channel"
|
20
19
|
require "stellar_spectrum/services/pick_channel"
|
21
20
|
require "stellar_spectrum/services/send_payment"
|
22
|
-
require "stellar_spectrum/services/sending_payment/attempt_release_lock"
|
23
21
|
require "stellar_spectrum/services/sending_payment/retry"
|
24
22
|
require "stellar_spectrum/services/sending_payment/send_asset"
|
25
|
-
require "stellar_spectrum/services/
|
26
|
-
require "stellar_spectrum/services/unlocking/check_sequence_number"
|
27
|
-
require "stellar_spectrum/services/unlocking/get_account_to_unlock"
|
28
|
-
require "stellar_spectrum/services/unlocking/unlock"
|
23
|
+
require "stellar_spectrum/services/unlock"
|
29
24
|
|
30
25
|
module StellarSpectrum
|
31
26
|
|
@@ -7,7 +7,7 @@ module StellarSpectrum
|
|
7
7
|
attr_accessor :logger
|
8
8
|
|
9
9
|
LOG_TAG = "[StellarSpectrum]"
|
10
|
-
MAX_LOCK_TIME_IN_SECONDS =
|
10
|
+
MAX_LOCK_TIME_IN_SECONDS = 120
|
11
11
|
|
12
12
|
def initialize(
|
13
13
|
redis_url: StellarSpectrum.configuration.redis_url,
|
@@ -26,7 +26,6 @@ module StellarSpectrum
|
|
26
26
|
to:,
|
27
27
|
amount:,
|
28
28
|
memo: nil,
|
29
|
-
tries: 0,
|
30
29
|
transaction_source: nil,
|
31
30
|
sequence: nil
|
32
31
|
)
|
@@ -40,7 +40,7 @@ module StellarSpectrum
|
|
40
40
|
reduce_if(->(c) {c[:force_transaction_source].nil?}, [
|
41
41
|
GetLockedAccounts,
|
42
42
|
GetAvailableChannels,
|
43
|
-
reduce_if(->(c) {
|
43
|
+
reduce_if(->(c) {c.available_channels.empty?}, SendingPayment::Retry),
|
44
44
|
PickChannel,
|
45
45
|
]),
|
46
46
|
reduce_if(->(c) {c[:force_transaction_source].present?}, [
|
@@ -48,15 +48,9 @@ module StellarSpectrum
|
|
48
48
|
]),
|
49
49
|
GetSequenceNumber,
|
50
50
|
LockChannel,
|
51
|
-
reduce_if(->(c) {!c.successfully_locked},
|
51
|
+
reduce_if(->(c) {!c.successfully_locked}, SendingPayment::Retry),
|
52
52
|
SendingPayment::SendAsset,
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.retry_actions
|
57
|
-
[
|
58
|
-
SendingPayment::AttemptReleaseLock,
|
59
|
-
SendingPayment::Retry,
|
53
|
+
Unlock,
|
60
54
|
]
|
61
55
|
end
|
62
56
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module StellarSpectrum
|
2
|
+
class Unlock
|
3
|
+
|
4
|
+
extend LightService::Action
|
5
|
+
expects :redis, :channel_account
|
6
|
+
promises :unlock_response
|
7
|
+
|
8
|
+
executed do |c|
|
9
|
+
address_key = GetKeyForAddress.execute(c.channel_account.address)
|
10
|
+
c.unlock_response = c.redis.del(address_key)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stellar_spectrum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ramon Tayag
|
@@ -176,7 +176,6 @@ files:
|
|
176
176
|
- lib/stellar_spectrum.rb
|
177
177
|
- lib/stellar_spectrum/client.rb
|
178
178
|
- lib/stellar_spectrum/services/get_available_channels.rb
|
179
|
-
- lib/stellar_spectrum/services/get_channel_account_info.rb
|
180
179
|
- lib/stellar_spectrum/services/get_channel_accounts.rb
|
181
180
|
- lib/stellar_spectrum/services/get_key_for_address.rb
|
182
181
|
- lib/stellar_spectrum/services/get_locked_accounts.rb
|
@@ -187,13 +186,9 @@ files:
|
|
187
186
|
- lib/stellar_spectrum/services/lock_channel.rb
|
188
187
|
- lib/stellar_spectrum/services/pick_channel.rb
|
189
188
|
- lib/stellar_spectrum/services/send_payment.rb
|
190
|
-
- lib/stellar_spectrum/services/sending_payment/attempt_release_lock.rb
|
191
189
|
- lib/stellar_spectrum/services/sending_payment/retry.rb
|
192
190
|
- lib/stellar_spectrum/services/sending_payment/send_asset.rb
|
193
|
-
- lib/stellar_spectrum/services/
|
194
|
-
- lib/stellar_spectrum/services/unlocking/check_sequence_number.rb
|
195
|
-
- lib/stellar_spectrum/services/unlocking/get_account_to_unlock.rb
|
196
|
-
- lib/stellar_spectrum/services/unlocking/unlock.rb
|
191
|
+
- lib/stellar_spectrum/services/unlock.rb
|
197
192
|
- lib/stellar_spectrum/version.rb
|
198
193
|
- stellar_spectrum.gemspec
|
199
194
|
homepage: https://github.com/bloom-solutions/stellar_spectrum-ruby
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module StellarSpectrum
|
2
|
-
class GetChannelAccountInfo
|
3
|
-
|
4
|
-
extend LightService::Action
|
5
|
-
expects :locked_accounts, :channel_account
|
6
|
-
promises :channel_account_info, :unlock_response
|
7
|
-
|
8
|
-
executed do |c|
|
9
|
-
c.channel_account_info = c.locked_accounts[c.channel_account.address]
|
10
|
-
|
11
|
-
c.unlock_response = nil
|
12
|
-
next c if c.channel_account_info.present?
|
13
|
-
|
14
|
-
c.unlock_response = true
|
15
|
-
|
16
|
-
message = "#{c.channel_account.address} has been unlocked by some " \
|
17
|
-
"other mechanism like ttl expiration or by something else, " \
|
18
|
-
"so this is a success"
|
19
|
-
c.skip_remaining!(message)
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module StellarSpectrum
|
2
|
-
module SendingPayment
|
3
|
-
class AttemptReleaseLock
|
4
|
-
|
5
|
-
extend LightService::Action
|
6
|
-
expects :stellar_client, :redis, :channel_accounts
|
7
|
-
|
8
|
-
executed do |c|
|
9
|
-
Unlocking::AttemptRelease.(
|
10
|
-
stellar_client: c.stellar_client,
|
11
|
-
redis: c.redis,
|
12
|
-
channel_accounts: c.channel_accounts,
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module StellarSpectrum
|
2
|
-
module Unlocking
|
3
|
-
class AttemptRelease
|
4
|
-
|
5
|
-
extend LightService::Organizer
|
6
|
-
def self.call(redis:, channel_accounts:, stellar_client:)
|
7
|
-
result = with(
|
8
|
-
stellar_client: stellar_client,
|
9
|
-
redis: redis,
|
10
|
-
channel_accounts: channel_accounts,
|
11
|
-
).reduce(actions)
|
12
|
-
|
13
|
-
if result.failure?
|
14
|
-
result[:unlock_response] = false
|
15
|
-
end
|
16
|
-
|
17
|
-
result
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.actions
|
21
|
-
[
|
22
|
-
GetLockedAccounts,
|
23
|
-
GetAccountToUnlock,
|
24
|
-
GetSequenceNumber,
|
25
|
-
# Someone else may have unlocked it while we were taking
|
26
|
-
# our sweet time fetching the sequence number, so fetch
|
27
|
-
# the locked accounts again:
|
28
|
-
GetLockedAccounts,
|
29
|
-
GetChannelAccountInfo,
|
30
|
-
CheckSequenceNumber,
|
31
|
-
Unlock,
|
32
|
-
]
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module StellarSpectrum
|
2
|
-
module Unlocking
|
3
|
-
class CheckSequenceNumber
|
4
|
-
|
5
|
-
extend LightService::Action
|
6
|
-
expects :current_sequence_number, :channel_account, :channel_account_info
|
7
|
-
|
8
|
-
executed do |c|
|
9
|
-
address_sequence_number = c.channel_account_info[:sequence_number].to_i
|
10
|
-
current_sequence_number = c.current_sequence_number
|
11
|
-
|
12
|
-
next c if current_sequence_number >= address_sequence_number
|
13
|
-
|
14
|
-
address = c.channel_account.address
|
15
|
-
|
16
|
-
message = "Not releasing #{address}: sequence number locked at " \
|
17
|
-
"#{address_sequence_number} is > current sequence number " \
|
18
|
-
"#{current_sequence_number}"
|
19
|
-
|
20
|
-
c.fail_and_return! message
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module StellarSpectrum
|
2
|
-
module Unlocking
|
3
|
-
class GetAccountToUnlock
|
4
|
-
|
5
|
-
extend LightService::Action
|
6
|
-
expects :locked_accounts
|
7
|
-
promises :channel_account
|
8
|
-
|
9
|
-
executed do |c|
|
10
|
-
address, info = c.locked_accounts.except(c[:except_address])
|
11
|
-
.sort_by {|address, info| info[:pttl]}.last
|
12
|
-
|
13
|
-
if address.present?
|
14
|
-
c.channel_account = Stellar::Account.from_address(address)
|
15
|
-
else
|
16
|
-
c.channel_account = nil
|
17
|
-
c.fail_and_return! "No addresses to unlock"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module StellarSpectrum
|
2
|
-
module Unlocking
|
3
|
-
class Unlock
|
4
|
-
|
5
|
-
extend LightService::Action
|
6
|
-
expects :redis, :channel_account
|
7
|
-
promises :unlock_response
|
8
|
-
|
9
|
-
executed do |c|
|
10
|
-
address_key = GetKeyForAddress.execute(c.channel_account.address)
|
11
|
-
c.unlock_response = c.redis.del(address_key)
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|