stellar_spectrum 1.1.2 → 1.1.3

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: 5ef61e24fd04852881c091a6155671ad2f53448d3fa699b3146fa19ce82b8f3a
4
- data.tar.gz: d89c169967f8b853331174587aacb4b7ea8c1d0016122e12890764a404787cd6
3
+ metadata.gz: 15c1e0a0f9aa47c73f9c75d915fa48156c53368f618874fcca352c2fc3724288
4
+ data.tar.gz: e53e539e65c3e3821c7f23635a255b5e3d9f2c5f6e415dd6f00f96bc1ae58bda
5
5
  SHA512:
6
- metadata.gz: a4f15d359e6c46e11f3a94b33f45c409fc9aaab50019c83d3d16dbbdf45cd08dab8c9a003c91ed47e9c8665d7431c375f04207425a22837d4bd7ab49e6778ac6
7
- data.tar.gz: 00cf1675dd97d7c8574fdc43776e8f9d720c33efdd083b07577b54477f5dfbd658ea5a3c371299e88e10fbca61373c07db9942ccb37dc4aa03c0b44493f09652
6
+ metadata.gz: 268a94fefd0608dd5bc0ad71574816b6298713f76e22a9dd648f57fcafca344fe9b9e2cb9c804b448e2f937a8c6d9b4d821b900caceafe545252dff227a227d1
7
+ data.tar.gz: e098fd73295d499bbe323b30aa9949582abe49901aa9edef2bee8da62f28bb44a2a2de64accda3ea6a17232cd60aed048d01650be40d6b1697d7aca85883c543
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.3] - 2018-12-13
8
+ ### Fixed
9
+ - Check if the sequence number in horizon has bumped up before unlocking
10
+
7
11
  ## [1.1.2] - 2018-12-13
8
12
  ### Fixed
9
13
  - Do not blow up if `Faraday::ClientError#response` is nil
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stellar_spectrum (1.1.2)
4
+ stellar_spectrum (1.1.3)
5
5
  activesupport
6
6
  gem_config
7
7
  light-service
@@ -8,6 +8,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
10
  require "stellar_spectrum/services/get_available_channels"
11
+ require "stellar_spectrum/services/get_channel_account_info"
11
12
  require "stellar_spectrum/services/get_channel_accounts"
12
13
  require "stellar_spectrum/services/get_key_for_address"
13
14
  require "stellar_spectrum/services/get_locked_accounts"
@@ -18,9 +19,12 @@ require "stellar_spectrum/services/init_stellar_client"
18
19
  require "stellar_spectrum/services/lock_channel"
19
20
  require "stellar_spectrum/services/pick_channel"
20
21
  require "stellar_spectrum/services/send_payment"
22
+ require "stellar_spectrum/services/sending_payment/attempt_release_lock"
21
23
  require "stellar_spectrum/services/sending_payment/retry"
22
24
  require "stellar_spectrum/services/sending_payment/send_asset"
23
- require "stellar_spectrum/services/unlock"
25
+ require "stellar_spectrum/services/unlocking/attempt_release"
26
+ require "stellar_spectrum/services/unlocking/check_sequence_number"
27
+ require "stellar_spectrum/services/unlocking/unlock"
24
28
 
25
29
  module StellarSpectrum
26
30
 
@@ -0,0 +1,23 @@
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
@@ -50,7 +50,7 @@ module StellarSpectrum
50
50
  LockChannel,
51
51
  reduce_if(->(c) {!c.successfully_locked}, SendingPayment::Retry),
52
52
  SendingPayment::SendAsset,
53
- Unlock,
53
+ SendingPayment::AttemptReleaseLock,
54
54
  ]
55
55
  end
56
56
 
@@ -0,0 +1,19 @@
1
+ module StellarSpectrum
2
+ module SendingPayment
3
+ class AttemptReleaseLock
4
+
5
+ extend LightService::Action
6
+ expects :stellar_client, :redis, :channel_account, :channel_accounts
7
+
8
+ executed do |c|
9
+ Unlocking::AttemptRelease.(
10
+ stellar_client: c.stellar_client,
11
+ redis: c.redis,
12
+ channel_account: c.channel_account,
13
+ channel_accounts: c.channel_accounts,
14
+ )
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ module StellarSpectrum
2
+ module Unlocking
3
+ class AttemptRelease
4
+
5
+ WAIT_TIME_IN_SECONDS = 5
6
+
7
+ extend LightService::Organizer
8
+ def self.call(redis:, channel_accounts:, channel_account:, stellar_client:)
9
+ result = with(
10
+ stellar_client: stellar_client,
11
+ redis: redis,
12
+ channel_account: channel_account,
13
+ channel_accounts: channel_accounts,
14
+ ).reduce(actions)
15
+
16
+ if result.failure?
17
+ puts "Failed to unlock, retry..."
18
+ sleep WAIT_TIME_IN_SECONDS
19
+ result = self.(
20
+ stellar_client: stellar_client,
21
+ redis: redis,
22
+ channel_account: channel_account,
23
+ channel_accounts: channel_accounts,
24
+ )
25
+ end
26
+
27
+ result
28
+ end
29
+
30
+ def self.actions
31
+ [
32
+ GetLockedAccounts,
33
+ GetChannelAccountInfo,
34
+ GetSequenceNumber,
35
+ CheckSequenceNumber,
36
+ Unlock,
37
+ ]
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,25 @@
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
@@ -0,0 +1,17 @@
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
+ puts "Will unlock #{address_key}"
12
+ c.unlock_response = c.redis.del(address_key)
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module StellarSpectrum
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  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.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ramon Tayag
@@ -176,6 +176,7 @@ 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
179
180
  - lib/stellar_spectrum/services/get_channel_accounts.rb
180
181
  - lib/stellar_spectrum/services/get_key_for_address.rb
181
182
  - lib/stellar_spectrum/services/get_locked_accounts.rb
@@ -186,9 +187,12 @@ files:
186
187
  - lib/stellar_spectrum/services/lock_channel.rb
187
188
  - lib/stellar_spectrum/services/pick_channel.rb
188
189
  - lib/stellar_spectrum/services/send_payment.rb
190
+ - lib/stellar_spectrum/services/sending_payment/attempt_release_lock.rb
189
191
  - lib/stellar_spectrum/services/sending_payment/retry.rb
190
192
  - lib/stellar_spectrum/services/sending_payment/send_asset.rb
191
- - lib/stellar_spectrum/services/unlock.rb
193
+ - lib/stellar_spectrum/services/unlocking/attempt_release.rb
194
+ - lib/stellar_spectrum/services/unlocking/check_sequence_number.rb
195
+ - lib/stellar_spectrum/services/unlocking/unlock.rb
192
196
  - lib/stellar_spectrum/version.rb
193
197
  - stellar_spectrum.gemspec
194
198
  homepage: https://github.com/bloom-solutions/stellar_spectrum-ruby
@@ -1,14 +0,0 @@
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