openassets-ruby 0.2.8 → 0.2.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e14dae510bd326f2eebfd68bb8c340c357bd784
4
- data.tar.gz: b47b056dd41870261c220ceebb54a1e93552f244
3
+ metadata.gz: d5a79cc924492696e02f90d9b2921b0753d9e619
4
+ data.tar.gz: 875977bc89c76903f923b20f1ca15da38e881345
5
5
  SHA512:
6
- metadata.gz: 61d27c133aa5469a76f1e021b261fcbcc0f43b05d63501a0db0dae4050ab00237d8edd01ff8598ed8412880aef3a9bcfa2c270a53b871ca1e1e31be18f2e6f46
7
- data.tar.gz: c95fa4b8b7761e5c30a0d50d73c7a84df18d3f6eb729d63c5729096a775988d528377be9347dae557aa6b8567ffa9fe6f684777a905852a937256e961b5e6330
6
+ metadata.gz: 6f27081be1ef5c68114410337396fb78e65ca3f7535ab40758111971fc66b72760ce7bcdb7ff899d467bfbd90dc60a0b21d5484e6d74eeb573e80579493e4822
7
+ data.tar.gz: dfc1b43a7acb7f8a8191c2c938f88cb3446fc8e5575381ead4574fda5c69caaf7d1ec00be5237dadb40a02e5e35bb9dd2a72dd31441ea4e64ee9ea7c42a99fab
data/README.md CHANGED
@@ -17,7 +17,7 @@ require 'openassets'
17
17
 
18
18
  api = OpenAssets::Api.new({:network => 'mainnet',
19
19
  :provider => 'bitcoind',
20
- :dust_limit => 600,
20
+ :dust_limit => 600, :default_fees => 10000,
21
21
  :rpc => {:user => 'xxx', :password => 'xxx', :schema => 'http', :port => 8332, :host => 'localhost'}})
22
22
  ```
23
23
 
@@ -28,10 +28,20 @@ require 'openassets'
28
28
 
29
29
  api = OpenAssets::Api.new({:network => 'testnet',
30
30
  :provider => 'bitcoind',
31
- :dust_limit => 600,
31
+ :dust_limit => 600, :default_fees => 10000,
32
32
  :rpc => {:user => 'xxx', :password => 'xxx', :schema => 'http', :port => 18332, :host => 'localhost'}})
33
33
  ```
34
34
 
35
+ The configuration options are as follows:
36
+
37
+ |option|describe|default|
38
+ |---|---|---|
39
+ |**network**|The using network. "mainnet" or "testnet" |mainnet|
40
+ |**provider**|The RPC server. Specify possible now only "bitcoind".|bitcoind|
41
+ |**dust_limit**|The amount of Bitcoin, which is set to the each output of the Open Assets Protocol(issue or transfer).|600 (satoshi)|
42
+ |**default_fees**|The transaction fee. (used by issue_asset and send_asset, send_bitcoin )|10000 (satoshi)|
43
+ |**rpc**|The access information to the RPC server of Bitcoin Core.|N/A|
44
+
35
45
  ## API
36
46
 
37
47
  Currently openassets-ruby support the following API.
@@ -183,6 +193,21 @@ Get tx outputs. (use for debug)
183
193
  },..
184
194
  ```
185
195
 
196
+ * **send_assets**
197
+ Creates a transaction for sending **multiple** asset from the open asset address to another.
198
+ ```ruby
199
+ # send assets
200
+ # api.send_assets(<from open asset address>, <The array of send Asset information(see OpenAssets::SendAssetParam).>, <fees (The fess in satoshis for the transaction. use 10000 satoshi if specified nil)>, <mode=('broadcast', 'signed', 'unsigned')>, <output_qty default value is 1.>)
201
+
202
+ # example
203
+ from = address_to_oa_address('mrxpeizRrF8ymNx5FrvcGGZVecZjtUFVP3')
204
+ to = address_to_oa_address('n4MEsSUN8GktDFZzU3V55mP3jWGMN7e4wE')
205
+ params = []
206
+ params << OpenAssets::SendAssetParam.new('oGu4VXx2TU97d9LmPP8PMCkHckkcPqC5RY', 50, to)
207
+ params << OpenAssets::SendAssetParam.new('oUygwarZqNGrjDvcZUpZdvEc7es6dcs1vs', 4, to)
208
+ tx = api.send_assets(from, params)
209
+ ```
210
+
186
211
  ## License
187
212
 
188
213
  The MIT License (MIT)
@@ -9,5 +9,6 @@ module OpenAssets
9
9
  autoload :Api, 'openassets/api'
10
10
  autoload :Provider, 'openassets/provider'
11
11
  autoload :Error, 'openassets/error'
12
+ autoload :SendAssetParam, 'openassets/send_asset_param'
12
13
 
13
14
  end
@@ -7,7 +7,7 @@ module OpenAssets
7
7
  include Util
8
8
  include MethodFilter
9
9
 
10
- before_filter :change_network, {:include => [:list_unspent, :get_balance, :issue_asset, :send_asset, :send_bitcoin]}
10
+ before_filter :change_network, {:include => [:list_unspent, :get_balance, :issue_asset, :send_asset, :send_assets, :send_bitcoin]}
11
11
 
12
12
  attr_reader :config
13
13
  attr_reader :provider
@@ -114,7 +114,26 @@ module OpenAssets
114
114
  builder = OpenAssets::Transaction::TransactionBuilder.new(@config[:dust_limit])
115
115
  colored_outputs = get_unspent_outputs([oa_address_to_address(from)])
116
116
  asset_transfer_spec = OpenAssets::Transaction::TransferParameters.new(colored_outputs, to, from, amount, output_qty)
117
- tx = builder.transfer_assets(asset_id, asset_transfer_spec, from, fees.nil? ? @config[:default_fees]: fees)
117
+ tx = builder.transfer_asset(asset_id, asset_transfer_spec, from, fees.nil? ? @config[:default_fees]: fees)
118
+ tx = process_transaction(tx, mode)
119
+ tx
120
+ end
121
+
122
+ # Creates a transaction for sending multiple asset from an address to another.
123
+ # @param[String] from The open asset address to send the asset from.
124
+ # @param[Array[OpenAssets::SendAssetParams]] send_asset_params The send Asset information(asset_id, amount, to).
125
+ # @param[Integer] fees The fess in satoshis for the transaction.
126
+ # @param[String] mode 'broadcast' (default) for signing and broadcasting the transaction,
127
+ # 'signed' for signing the transaction without broadcasting,
128
+ # 'unsigned' for getting the raw unsigned transaction without broadcasting"""='broadcast'
129
+ # @return[Bitcoin::Protocol:Tx] The resulting transaction.
130
+ def send_assets(from, send_asset_params, fees = nil, mode = 'broadcast')
131
+ builder = OpenAssets::Transaction::TransactionBuilder.new(@config[:dust_limit])
132
+ colored_outputs = get_unspent_outputs([oa_address_to_address(from)])
133
+ transfer_specs = send_asset_params.map{|param|
134
+ [param.asset_id, OpenAssets::Transaction::TransferParameters.new(colored_outputs, param.to, from, param.amount)]
135
+ }
136
+ tx = builder.transfer_assets(transfer_specs, from, fees.nil? ? @config[:default_fees]: fees)
118
137
  tx = process_transaction(tx, mode)
119
138
  tx
120
139
  end
@@ -0,0 +1,15 @@
1
+ module OpenAssets
2
+
3
+ class SendAssetParam
4
+ attr_accessor :asset_id
5
+ attr_accessor :amount
6
+ attr_accessor :to
7
+
8
+ def initialize(asset_id, amount, to)
9
+ @asset_id = asset_id
10
+ @amount = amount
11
+ @to = to
12
+ end
13
+ end
14
+
15
+ end
@@ -45,12 +45,18 @@ module OpenAssets
45
45
  # @param[String] btc_change_script The script where to send bitcoin change, if any.
46
46
  # @param[Integer] fees The fees to include in the transaction.
47
47
  # @return[Bitcoin::Protocol:Tx] The resulting unsigned transaction.
48
- def transfer_assets(asset_id, asset_transfer_spec, btc_change_script, fees)
48
+ def transfer_asset(asset_id, asset_transfer_spec, btc_change_script, fees)
49
49
  btc_transfer_spec = OpenAssets::Transaction::TransferParameters.new(
50
50
  asset_transfer_spec.unspent_outputs, nil, oa_address_to_address(btc_change_script), 0)
51
51
  transfer([[asset_id, asset_transfer_spec]], btc_transfer_spec, fees)
52
52
  end
53
53
 
54
+ def transfer_assets(transfer_specs, btc_change_script, fees)
55
+ btc_transfer_spec = OpenAssets::Transaction::TransferParameters.new(
56
+ transfer_specs[0][1].unspent_outputs, nil, oa_address_to_address(btc_change_script), 0)
57
+ transfer(transfer_specs, btc_transfer_spec, fees)
58
+ end
59
+
54
60
  # Creates a transaction for sending bitcoins.
55
61
  # @param[OpenAssets::Transaction::TransferParameters] btc_transfer_spec The parameters of the bitcoins being transferred.
56
62
  # @param[Integer] fees The fees to include in the transaction.
@@ -91,6 +91,17 @@ module OpenAssets
91
91
  }
92
92
  end
93
93
 
94
+ # generate Asset ID from open asset address.
95
+ def oa_address_to_asset_id(oa_address)
96
+ address_to_asset_id(oa_address_to_address(oa_address))
97
+ end
98
+
99
+ # generate Asset ID from bitcoin address.
100
+ def address_to_asset_id(btc_address)
101
+ pubkey_hash = hash160_from_address(btc_address)
102
+ pubkey_hash_to_asset_id(pubkey_hash)
103
+ end
104
+
94
105
  private
95
106
  def oa_version_byte
96
107
  Bitcoin.network[:address_version] == "6f" ? OA_VERSION_BYTE_TESTNET : OA_VERSION_BYTE
@@ -1,3 +1,3 @@
1
1
  module OpenAssets
2
- VERSION = '0.2.8'
2
+ VERSION = '0.2.9'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openassets-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-19 00:00:00.000000000 Z
11
+ date: 2016-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bitcoin-ruby
@@ -126,6 +126,7 @@ files:
126
126
  - lib/openassets/provider/api_error.rb
127
127
  - lib/openassets/provider/bitcoin_core_provider.rb
128
128
  - lib/openassets/provider/block_chain_provider_base.rb
129
+ - lib/openassets/send_asset_param.rb
129
130
  - lib/openassets/transaction.rb
130
131
  - lib/openassets/transaction/dust_output_error.rb
131
132
  - lib/openassets/transaction/insufficient_asset_quantity_error.rb