onchain 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/onchain/payments.rb +61 -0
  3. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24947d483566842381a576800363e31a7b574132
4
- data.tar.gz: 55b175275880b829ab4c97e72b11ca621ccc8aa4
3
+ metadata.gz: df1ff0c8960ece90d655f5936994141258aec19a
4
+ data.tar.gz: 377e2a448d78d731ef2f47ca30bfa2efaaf4defe
5
5
  SHA512:
6
- metadata.gz: ab4f43e2a35c1b7409c2b1e5315b1dac0120401655703899542a71fa5539ce6291adc6f7b584748a498faa872d63904be48deee3d1d702cd1b50ddf7734ceb94
7
- data.tar.gz: 9ccb05b770d81c9f187ffafd8bae8deb635ab6eca86089fe2630692333b6b2f8c00cdbc49caebbe3b44a83ec35fcc37ea6954bae71438d36dc4c33f7efb22b0f
6
+ metadata.gz: 31634e1cfe1bef167d96f1e9747a5c4fea620f5b966f4f92d7d911f478429de47997aac42d54d51a6a9a106ea68437b576fb5f792dd06a18f00172d3c9a84e87
7
+ data.tar.gz: a3fba350cbfa7ff904c9313354d4e209214aca1f27cb8a359a3b98d59bbe22d226c271b188cae88de55ee480a4b9c82a5a397306ecf58dec9e210b636541aee9
@@ -0,0 +1,61 @@
1
+ class OnChain
2
+ class << self
3
+
4
+
5
+ # With a bunch of HD wallet paths, build a transaction
6
+ # That pays all the coins to a certain address
7
+ def create_payment_tx(fund_address, payments)
8
+
9
+ begin
10
+
11
+ tx = Bitcoin::Protocol::Tx.new
12
+
13
+ total_amount = 0
14
+
15
+ payments.each do |payment|
16
+ total_amount = total_amount + payment[1]
17
+ end
18
+
19
+ total_in_fund = get_balance_satoshi(fund_address)
20
+
21
+ # Do we have enough in the fund.
22
+ if(total_amount > total_in_fund)
23
+ return 'Balance is not enough to cover payment'
24
+ end
25
+
26
+ # OK, let's get some inputs
27
+ amount_so_far = 0
28
+ unspent = get_unspent_outs(fund_address)
29
+ unspent.each do |spent|
30
+
31
+ amount_so_far = amount_so_far + spent[3].to_i
32
+ if amount_so_far >= total_amount
33
+ next
34
+ end
35
+
36
+ txin = Bitcoin::Protocol::TxIn.new
37
+
38
+ txin.prev_out = spent[0]
39
+ txin.prev_out_index = spent[1]
40
+
41
+ tx.add_in(txin)
42
+ end
43
+ change = amount_so_far - total_amount
44
+
45
+ payments.each do |payment|
46
+ txout = Bitcoin::Protocol::TxOut.new(payment[1], Bitcoin::Script.from_string(
47
+ "OP_DUP OP_HASH160 #{payment[0]} " +
48
+ "OP_EQUALVERIFY OP_CHECKSIG").to_payload)
49
+
50
+ tx.add_out(txout)
51
+ end
52
+
53
+ return tx
54
+
55
+ rescue Exception => e
56
+ return 'Unable to parse payment :: ' + e.to_s
57
+ end
58
+ end
59
+
60
+ end
61
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onchain
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Purton
@@ -75,6 +75,7 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - lib/onchain.rb
77
77
  - lib/onchain/block_chain.rb
78
+ - lib/onchain/payments.rb
78
79
  - lib/onchain/sweeper.rb
79
80
  homepage: https://github.com/onchain/onchain-gem
80
81
  licenses: []