bigchaindb 0.0.2 → 0.0.3

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.
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