bitsy-bitcoin 0.3.2 → 0.5.0
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/app/models/bitsy/payment_depot.rb +1 -1
- data/app/models/bitsy/payment_transaction.rb +10 -0
- data/app/services/bitsy/build_send_many_hash.rb +27 -15
- data/app/services/bitsy/build_send_many_hash_for_transaction.rb +44 -0
- data/app/services/bitsy/build_send_many_hash_with_transaction_fee.rb +13 -0
- data/app/services/bitsy/compute_amount_for_splitting.rb +14 -0
- data/app/services/bitsy/forward_payments.rb +4 -2
- data/app/services/bitsy/log_send_many.rb +18 -0
- data/app/services/bitsy/send_payments.rb +11 -2
- data/config/initializers/bitsy.rb +8 -0
- data/db/migrate/20141115001846_add_total_received_amount_cache_to_payment_depots.rb +5 -0
- data/lib/bitsy/config.rb +2 -0
- data/lib/bitsy/version.rb +1 -1
- data/lib/generators/bitsy/config/templates/initializer.rb +8 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26107994e7453d8a676d90db622bcf7e86122d0a
|
4
|
+
data.tar.gz: 09e2b2d6883d04cb6781d6bc142064935a6f80a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d35ac415e27a8bb4b943ed19dc2950293e9955a6b8732115b636a7bc802700bcd9379e42c50437a6ecd2b40558513e8de8fb8c689a900b43397079af4f9313f
|
7
|
+
data.tar.gz: 37aa5bf710b689f31aa22ab39f07e52eaf817633a80ec5c21223d9e4eb44ec38177071d21a0e299386600daf4001f463c7e73bab34295905b5f55b10f7e90a24
|
@@ -27,6 +27,8 @@ module Bitsy
|
|
27
27
|
delegate :added_tax_rate, to: :payment_depot, prefix: true
|
28
28
|
delegate :total_received_amount, to: :payment_depot, prefix: true
|
29
29
|
|
30
|
+
after_create :update_payment_depot_cache
|
31
|
+
|
30
32
|
def forward_tax_fee
|
31
33
|
ForwardTaxCalculator.calculate(self.amount,
|
32
34
|
self.payment_depot_min_payment,
|
@@ -38,5 +40,13 @@ module Bitsy
|
|
38
40
|
def owner_fee
|
39
41
|
self.amount - self.forward_tax_fee
|
40
42
|
end
|
43
|
+
|
44
|
+
def update_payment_depot_cache
|
45
|
+
if payment_type == "receive"
|
46
|
+
payment_depot.total_received_amount_cache += amount
|
47
|
+
payment_depot.save
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
41
51
|
end
|
42
52
|
end
|
@@ -2,33 +2,45 @@ module Bitsy
|
|
2
2
|
class BuildSendManyHash
|
3
3
|
|
4
4
|
include LightService::Action
|
5
|
+
expects :payment_transactions, :amount_for_splitting, :total_amount
|
6
|
+
promises :send_many_hash, :computed_transaction_fee
|
5
7
|
|
6
8
|
executed do |ctx|
|
7
|
-
|
9
|
+
ctx.send_many_hash = send_many_hash_from(ctx)
|
10
|
+
total_payments = total_payments_from(ctx.send_many_hash)
|
11
|
+
ctx.computed_transaction_fee =
|
12
|
+
(ctx.total_amount * 100_000_000.0 - total_payments).round
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.send_many_hash_from(ctx)
|
8
18
|
send_many_hash = {}
|
9
19
|
|
10
|
-
|
11
|
-
tx_hash =
|
12
|
-
|
20
|
+
ctx.payment_transactions.each do |tx|
|
21
|
+
tx_hash = BuildSendManyHashForTransaction.execute(
|
22
|
+
payment_transaction: tx,
|
23
|
+
amount_for_splitting: ctx.amount_for_splitting,
|
24
|
+
total_amount: ctx.total_amount,
|
25
|
+
).transaction_send_many_hash
|
26
|
+
|
27
|
+
tx_hash.each do |address, amount|
|
13
28
|
if send_many_hash.has_key?(address)
|
14
|
-
send_many_hash[address]
|
29
|
+
send_many_hash[address] += amount
|
15
30
|
else
|
16
|
-
send_many_hash[address] =
|
31
|
+
send_many_hash[address] = amount
|
17
32
|
end
|
18
33
|
end
|
19
34
|
end
|
20
35
|
|
21
|
-
|
36
|
+
send_many_hash
|
22
37
|
end
|
23
38
|
|
24
|
-
def self.
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
tax_address => payment_transaction.forward_tax_fee.to_f * 100_000_000,
|
30
|
-
owner_address => payment_transaction.owner_fee.to_f * 100_000_000,
|
31
|
-
}
|
39
|
+
def self.total_payments_from(send_many_hash)
|
40
|
+
send_many_hash.inject(0) do |sum, hash|
|
41
|
+
sum += hash[1]
|
42
|
+
sum
|
43
|
+
end
|
32
44
|
end
|
33
45
|
|
34
46
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Bitsy
|
2
|
+
class BuildSendManyHashForTransaction
|
3
|
+
|
4
|
+
include LightService::Action
|
5
|
+
expects :payment_transaction, :amount_for_splitting, :total_amount
|
6
|
+
promises :transaction_send_many_hash
|
7
|
+
|
8
|
+
executed do |ctx|
|
9
|
+
tax_amount = tax_amount_from(ctx)
|
10
|
+
owner_amount = owner_amount_from(ctx)
|
11
|
+
|
12
|
+
payment_depot = ctx.payment_transaction.payment_depot
|
13
|
+
|
14
|
+
ctx.transaction_send_many_hash = {
|
15
|
+
payment_depot.tax_address => tax_amount,
|
16
|
+
payment_depot.owner_address => owner_amount,
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.tax_amount_from(ctx)
|
23
|
+
fee_less_share_for_transaction_fee(
|
24
|
+
ctx.payment_transaction.forward_tax_fee,
|
25
|
+
ctx.amount_for_splitting,
|
26
|
+
ctx.total_amount,
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.owner_amount_from(ctx)
|
31
|
+
fee_less_share_for_transaction_fee(
|
32
|
+
ctx.payment_transaction.owner_fee,
|
33
|
+
ctx.amount_for_splitting,
|
34
|
+
ctx.total_amount,
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.fee_less_share_for_transaction_fee(fee, amount_for_splitting, total_amount)
|
39
|
+
percent_of_total = fee / total_amount
|
40
|
+
(percent_of_total * 100_000_000 * amount_for_splitting).to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Bitsy
|
2
|
+
class BuildSendManyHashWithTransactionFee
|
3
|
+
|
4
|
+
include LightService::Organizer
|
5
|
+
include LightService::Action
|
6
|
+
expects :payment_transactions, :transaction_fee
|
7
|
+
|
8
|
+
executed do |ctx|
|
9
|
+
with(ctx).reduce(ComputeAmountForSplitting, BuildSendManyHash)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Bitsy
|
2
|
+
class ComputeAmountForSplitting
|
3
|
+
|
4
|
+
include LightService::Action
|
5
|
+
expects :payment_transactions, :transaction_fee
|
6
|
+
promises :amount_for_splitting, :total_amount
|
7
|
+
|
8
|
+
executed do |ctx|
|
9
|
+
ctx.total_amount = ctx.payment_transactions.sum(:amount)
|
10
|
+
ctx.amount_for_splitting = ctx.total_amount - ctx.transaction_fee
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -9,10 +9,12 @@ module Bitsy
|
|
9
9
|
|
10
10
|
return unless past_threshold?(payment_transactions)
|
11
11
|
with(
|
12
|
-
payment_transactions: payment_transactions
|
12
|
+
payment_transactions: payment_transactions,
|
13
|
+
transaction_fee: Bitsy.config.transaction_fee,
|
13
14
|
).reduce([
|
14
15
|
InstantiateBlockchainWallet,
|
15
|
-
|
16
|
+
BuildSendManyHashWithTransactionFee,
|
17
|
+
LogSendMany,
|
16
18
|
SendPayments,
|
17
19
|
AssociatesTransactions
|
18
20
|
])
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Bitsy
|
2
|
+
class LogSendMany
|
3
|
+
|
4
|
+
include LightService::Action
|
5
|
+
expects :payment_transactions, :computed_transaction_fee, :send_many_hash
|
6
|
+
|
7
|
+
executed do |ctx|
|
8
|
+
message = ["Will forward transactions for payment transactions:"]
|
9
|
+
message << ctx.payment_transactions.map(&:id).join(", ")
|
10
|
+
message << "hash: #{ctx.send_many_hash.inspect}"
|
11
|
+
message = message.join("\n")
|
12
|
+
|
13
|
+
logger = Logger.new(Bitsy.config.send_many_log_path)
|
14
|
+
logger.info(message)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -2,11 +2,20 @@ module Bitsy
|
|
2
2
|
class SendPayments
|
3
3
|
|
4
4
|
include LightService::Action
|
5
|
-
expects :send_many_hash, :wallet
|
5
|
+
expects :send_many_hash, :wallet, :computed_transaction_fee
|
6
6
|
promises :forwarding_transaction_id
|
7
7
|
|
8
8
|
executed do |ctx|
|
9
|
-
|
9
|
+
if Bitsy.config.debug
|
10
|
+
ctx.forwarding_transaction_id = nil
|
11
|
+
next ctx
|
12
|
+
end
|
13
|
+
|
14
|
+
payment_response = ctx.wallet.send_many(
|
15
|
+
ctx.send_many_hash,
|
16
|
+
nil,
|
17
|
+
ctx.computed_transaction_fee,
|
18
|
+
)
|
10
19
|
ctx.forwarding_transaction_id = payment_response.tx_hash
|
11
20
|
end
|
12
21
|
|
@@ -13,6 +13,14 @@ Bitsy.configure do |c|
|
|
13
13
|
# List of allowed secrets from Blockchain.info. The callback URL should look
|
14
14
|
# like this http://app.com/bitsy/v1/blockchain_notifications?secret=mysecret
|
15
15
|
c.blockchain_secrets = %w(secret)
|
16
|
+
|
17
|
+
# Write out the payment transactions, addresses, and other details. These
|
18
|
+
# transactions are the ones being forwarded.
|
19
|
+
c.send_many_log_path = Rails.root.join("log", "send_many.log")
|
20
|
+
|
21
|
+
# WHen debug is true, no money will be forwarded. This is for testing
|
22
|
+
# purposes.
|
23
|
+
c.debug = false
|
16
24
|
end
|
17
25
|
|
18
26
|
Sidekiq.configure_server do |config|
|
data/lib/bitsy/config.rb
CHANGED
data/lib/bitsy/version.rb
CHANGED
@@ -14,6 +14,14 @@ Bitsy.configure do |c|
|
|
14
14
|
# List of allowed secrets from Blockchain.info. The callback URL should look
|
15
15
|
# like this http://app.com/bitsy/v1/blockchain_notifications?secret=mysecret
|
16
16
|
c.blockchain_secrets = %w(secret)
|
17
|
+
|
18
|
+
# Write out the payment transactions, addresses, and other details. These
|
19
|
+
# transactions are the ones being forwarded.
|
20
|
+
c.send_many_log_path = Rails.root.join("log", "send_many.log")
|
21
|
+
|
22
|
+
# WHen debug is true, no money will be forwarded. This is for testing
|
23
|
+
# purposes.
|
24
|
+
c.debug = false
|
17
25
|
end
|
18
26
|
|
19
27
|
Sidekiq.configure_server do |config|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitsy-bitcoin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ramon Tayag
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -310,10 +310,14 @@ files:
|
|
310
310
|
- app/services/bitsy/amount_for_initial_tax_calculator.rb
|
311
311
|
- app/services/bitsy/associates_transactions.rb
|
312
312
|
- app/services/bitsy/build_send_many_hash.rb
|
313
|
+
- app/services/bitsy/build_send_many_hash_for_transaction.rb
|
314
|
+
- app/services/bitsy/build_send_many_hash_with_transaction_fee.rb
|
315
|
+
- app/services/bitsy/compute_amount_for_splitting.rb
|
313
316
|
- app/services/bitsy/create_payment_depot.rb
|
314
317
|
- app/services/bitsy/forward_payments.rb
|
315
318
|
- app/services/bitsy/forward_tax_calculator.rb
|
316
319
|
- app/services/bitsy/instantiate_blockchain_wallet.rb
|
320
|
+
- app/services/bitsy/log_send_many.rb
|
317
321
|
- app/services/bitsy/process_blockchain_notification.rb
|
318
322
|
- app/services/bitsy/send_payments.rb
|
319
323
|
- app/services/bitsy/updating/get_latest_block.rb
|
@@ -332,6 +336,7 @@ files:
|
|
332
336
|
- db/migrate/20141106123922_create_bitsy_blockchain_notifications.rb
|
333
337
|
- db/migrate/20141108002656_drop_occurred_at_and_received_at_from_payment_transactions.rb
|
334
338
|
- db/migrate/20141109072242_change_payment_depot_balance_cache_default.rb
|
339
|
+
- db/migrate/20141115001846_add_total_received_amount_cache_to_payment_depots.rb
|
335
340
|
- lib/bitsy-bitcoin.rb
|
336
341
|
- lib/bitsy.rb
|
337
342
|
- lib/bitsy/config.rb
|