bigchaindb 0.0.2 → 0.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/bigchaindb.rb +29 -10
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2d9cf27e3a5fb294f3c6e37d7b84faddb571f3c
4
- data.tar.gz: 3d95ff6eb3c196556dc7f314c2e1ad4b8d3098df
3
+ metadata.gz: 2618f49e57cb2ca1f60a063f1158f67aa8fdcb1a
4
+ data.tar.gz: 7baed025c2623ac93d98ef0f69c0a1468fa1566d
5
5
  SHA512:
6
- metadata.gz: a1ab9d92ca2f8e04552625929a36117fa09f1515683beeb9ec3ec6e382529ebcfc8bc80fc036def0fc7ee20a98965d3da878f5e18fafa19c2cc80faa7deb7466
7
- data.tar.gz: a7e7737e4dd84c11e13b45f7dd416eecfc7e578b20f0e9564e5920cd6412244651b11ebda8c80df7e71c5fb3c00c4b59da32d022ab608b8d71f9f75cfec2d396
6
+ metadata.gz: 2cee9717b4f5c95b51d94412e69f14625ff1b820a0dba70cb3e42d780dddfc16dc3173cc79cacbf9a6d623a62a262203e1ed137de36f3b744f3226aa8306d6b3
7
+ data.tar.gz: 6fdd7c0f337fa04bb93ac3cace765729ac2617394c25763f79444fdb60cf519a8f6d93c68f4c782e3ac8d596a6166478f679c242c03971eaa0284f68e6a8e378
data/lib/bigchaindb.rb CHANGED
@@ -47,9 +47,9 @@ module Bdb
47
47
  def self.spend(txn, output_ids = [])
48
48
  # Convert outputs in txn to signable/spendable inputs.
49
49
  if output_ids.any?
50
- args = [txn.to_json]
51
- else
52
50
  args = [txn.to_json, output_ids.to_json]
51
+ else
52
+ args = [txn.to_json]
53
53
  end
54
54
  JSON.parse(`bdb spend #{args.shelljoin}`)
55
55
  end
@@ -61,9 +61,28 @@ module Bdb
61
61
 
62
62
  def self.transfer_asset(ipdb, receiver_pubkey, sender_pubkey, sender_privkey, inputs, amount, asset_id, metadata = {"ts"=> Time.now.to_s})
63
63
  asset = { "id" => asset_id}
64
- input_amount = inputs["outputs"].inject(0) { |sum,out| sum + out["amount"].to_i }
64
+ new_inputs = []
65
+ input_amount = 0
66
+
67
+ if inputs.blank?
68
+ # ask IPDB for unspent outputs
69
+ unspent = Bdb.unspent_outputs(ipdb, sender_pubkey)
70
+ unspent.each do |u|
71
+ txn = JSON.parse(Bdb.get_transaction_by_id(ipdb, u["transaction_id"]))
72
+ next unless t["asset"]["id"] == asset_id
73
+ input_amount += txn["outputs"][u["output_index"]]["amount"].to_i
74
+ new_inputs.push(Bdb.spend(txn, u["output_index"]))
75
+ end
76
+ else
77
+ # assume that every output for sender_pubkey in given inputs is unspent and can be used as input
78
+ inputs.each do |inp|
79
+ input_amount += inp["outputs"].select { |o| o["condition"]["details"]["public_key"] == sender_pubkey }.inject(0) { |sum,out| sum + out["amount"].to_i }
80
+ new_inputs.push(Bdb.spend(inp, inputs["outputs"].each_with_index.select { |o,i| o["condition"]["details"]["public_key"] == sender_pubkey }.map(&:last)))
81
+ end
82
+ end
83
+
65
84
  if amount > input_amount
66
- puts "input_amount < amount"
85
+ puts "input_amount #{input_amount} < amount #{amount}"
67
86
  return nil
68
87
  end
69
88
  outputs = [Bdb.generate_output(receiver_pubkey,amount)]
@@ -71,14 +90,14 @@ module Bdb
71
90
  # left-over amount should be transferred back to sender
72
91
  outputs.push(Bdb.generate_output(sender_pubkey,input_amount - amount))
73
92
  end
74
- input = Bdb.spend(inputs)
75
- transfer = Bdb.transfer_txn(input, outputs, asset, metadata)
93
+
94
+ transfer = Bdb.transfer_txn(new_inputs, outputs, asset, metadata)
76
95
  signed_transfer = Bdb.sign(transfer, sender_privkey)
77
96
  resp = post_transaction(ipdb, signed_transfer)
78
97
  if resp.code == 202
79
- puts "Transaction posted. Now checking status..."
80
- sleep(5)
81
98
  txn = JSON.parse(resp.body)
99
+ puts "Transaction #{txn["id"]} posted. Now checking status..."
100
+ sleep(5)
82
101
  status_resp = get_transaction_status(ipdb, txn["id"])
83
102
  if (status_resp.code == 200) && JSON.parse(status_resp.body)["status"] == "valid"
84
103
  return {"transfer" => transfer, "txn" => txn}
@@ -105,9 +124,9 @@ module Bdb
105
124
  signed_create = Bdb.sign(create, private_key)
106
125
  resp = post_transaction(ipdb, signed_create)
107
126
  if resp.code == 202
108
- puts "Transaction posted. Now checking status..."
109
- sleep(5)
110
127
  txn = JSON.parse(resp.body)
128
+ puts "Transaction #{txn["id"]} posted. Now checking status..."
129
+ sleep(5)
111
130
  status_resp = get_transaction_status(ipdb, txn["id"])
112
131
  if (status_resp.code == 200) && JSON.parse(status_resp.body)["status"] == "valid"
113
132
  return {"create" => create, "txn" => txn}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bigchaindb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nilesh Trivedi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-31 00:00:00.000000000 Z
11
+ date: 2017-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty