openassets-ruby 0.6.6 → 0.6.7
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/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/README.md +129 -50
- data/lib/openassets/api.rb +4 -2
- data/lib/openassets/provider/bitcoin_core_provider.rb +3 -0
- data/lib/openassets/util.rb +11 -11
- data/lib/openassets/version.rb +1 -1
- data/openassets-ruby.gemspec +2 -2
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 762cb76ac06beeb46aac132bcb5ac714edf67976
|
4
|
+
data.tar.gz: 421ce1356c464b70c927b37cf79297b9383329d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2d91da9ed7a58efe8eb8139a0e3779fccf6c5c721fd762f901cfe512abb82bdf6cf1558905836c4ee1a012b7833461beba9cab41afb54a35106cde5fccec2dc
|
7
|
+
data.tar.gz: 23df64ea454a114ca8f2bbd6d3bd851f716db29008c03166e108b940cdd74efecf32b2aa803756cf6a29adfca572d5e465bc55b9cebf1b7c0cc14883d1fd642a
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.5.0
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -12,51 +12,81 @@ gem install openassets-ruby
|
|
12
12
|
Initialize the connection information to the Bitcoin Core server.
|
13
13
|
|
14
14
|
* **use mainnet**
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
require 'openassets'
|
18
|
+
|
19
|
+
api = OpenAssets::Api.new({
|
20
|
+
network: 'mainnet',
|
21
|
+
provider: 'bitcoind',
|
22
|
+
cache: 'cache.db',
|
23
|
+
dust_limit: 600,
|
24
|
+
default_fees: 10000,
|
25
|
+
min_confirmation: 1,
|
26
|
+
max_confirmation: 9999999,
|
27
|
+
rpc: {
|
28
|
+
user: 'xxx',
|
29
|
+
password: 'xxx',
|
30
|
+
schema: 'http',
|
31
|
+
port: 8332,
|
32
|
+
host: 'localhost',
|
33
|
+
timeout: 60,
|
34
|
+
open_timeout: 60 }
|
35
|
+
})
|
36
|
+
```
|
36
37
|
|
37
38
|
* **use testnet**
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
39
|
+
|
40
|
+
Change `network` and `port` depending on your server setting.
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
require 'openassets'
|
44
|
+
|
45
|
+
api = OpenAssets::Api.new({
|
46
|
+
network: 'testnet',
|
47
|
+
provider: 'bitcoind',
|
48
|
+
cache: 'testnet.db',
|
49
|
+
dust_limit: 600,
|
50
|
+
default_fees: 10000,
|
51
|
+
min_confirmation: 1,
|
52
|
+
max_confirmation: 9999999,
|
53
|
+
rpc: {
|
54
|
+
user: 'xxx',
|
55
|
+
password: 'xxx',
|
56
|
+
schema: 'http',
|
57
|
+
port: 18332,
|
58
|
+
host: 'localhost',
|
59
|
+
timeout: 60,
|
60
|
+
open_timeout: 60 }
|
61
|
+
})
|
62
|
+
```
|
63
|
+
|
64
|
+
* **with [multi-wallet support](https://github.com/bitcoin/bitcoin/blob/0.15/doc/release-notes/release-notes-0.15.0.md#multi-wallet-support)**
|
65
|
+
|
66
|
+
From Bitcoin Core version 0.15 onwards, change `wallet` depending on wallet settings.
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
require 'openassets'
|
70
|
+
|
71
|
+
api = OpenAssets::Api.new({
|
72
|
+
network: 'testnet',
|
73
|
+
provider: 'bitcoind',
|
74
|
+
cache: 'testnet.db',
|
75
|
+
dust_limit: 600,
|
76
|
+
default_fees: 10000,
|
77
|
+
min_confirmation: 1,
|
78
|
+
max_confirmation: 9999999,
|
79
|
+
rpc: {
|
80
|
+
user: 'xxx',
|
81
|
+
password: 'xxx',
|
82
|
+
schema: 'http',
|
83
|
+
port: 18332,
|
84
|
+
host: 'localhost',
|
85
|
+
wallet: 'wallet.dat',
|
86
|
+
timeout: 60,
|
87
|
+
open_timeout: 60 }
|
88
|
+
})
|
89
|
+
```
|
60
90
|
|
61
91
|
The configuration options are as follows:
|
62
92
|
|
@@ -64,13 +94,61 @@ The configuration options are as follows:
|
|
64
94
|
|---|---|---|
|
65
95
|
|**network**|The using network. "mainnet" or "testnet" or "regtest" or "litecoin" or "litecoin_testnet" |mainnet|
|
66
96
|
|**provider**|The RPC server. "bitcoind" is the only option for now.|bitcoind|
|
67
|
-
|**cache**|The path to the database file. Specify ':memory: to use in-memory database.|cache.db|
|
97
|
+
|**cache**|The path to the database file. Specify `':memory:'` to use in-memory database.|cache.db|
|
68
98
|
|**dust_limit**|The amount of Bitcoin, which is set to the each output of the Open Assets Protocol (issue or transfer).|600 (satoshi)|
|
69
|
-
|**default_fees**|The default transaction fee in satoshi. Specify
|
99
|
+
|**default_fees**|The default transaction fee in satoshi. Specify `:auto` to use auto fee settings. (used by issue_asset and send_asset, send_bitcoin )|10000 (satoshi)|
|
70
100
|
|**min_confirmation**|The minimum number of confirmations the transaction containing an output that used to get UTXO.|1|
|
71
101
|
|**max_confirmation**|The maximum number of confirmations the transaction containing an output that used to get UTXO.|9999999|
|
72
102
|
|**rpc**|The access information to the RPC server of Bitcoin Core.|N/A|
|
73
103
|
|
104
|
+
### Using the API with multi-wallet support
|
105
|
+
|
106
|
+
To use the Bitcoin Core multi-wallet support ([version 0.15 onwards](https://github.com/bitcoin/bitcoin/blob/0.15/doc/release-notes/release-notes-0.15.0.md#multi-wallet-support)), you should use multiple instances of API, for example:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
@apis = Hash.new
|
110
|
+
@apis[1] = OpenAssets::Api.new({
|
111
|
+
network: 'testnet',
|
112
|
+
provider: 'bitcoind',
|
113
|
+
cache: 'testnet.db',
|
114
|
+
dust_limit: 600,
|
115
|
+
default_fees: 10000,
|
116
|
+
min_confirmation: 1,
|
117
|
+
max_confirmation: 9999999,
|
118
|
+
rpc: {
|
119
|
+
user: 'xxx',
|
120
|
+
password: 'xxx',
|
121
|
+
schema: 'http',
|
122
|
+
port: 18332,
|
123
|
+
host: 'localhost',
|
124
|
+
wallet: 'wallet001.dat',
|
125
|
+
timeout: 60,
|
126
|
+
open_timeout: 60 }
|
127
|
+
})
|
128
|
+
@apis[2] = OpenAssets::Api.new({
|
129
|
+
network: 'testnet',
|
130
|
+
provider: 'bitcoind',
|
131
|
+
cache: 'testnet.db',
|
132
|
+
dust_limit: 600,
|
133
|
+
default_fees: 10000,
|
134
|
+
min_confirmation: 1,
|
135
|
+
max_confirmation: 9999999,
|
136
|
+
rpc: {
|
137
|
+
user: 'xxx',
|
138
|
+
password: 'xxx',
|
139
|
+
schema: 'http',
|
140
|
+
port: 18332,
|
141
|
+
host: 'localhost',
|
142
|
+
wallet: 'wallet002.dat',
|
143
|
+
timeout: 60,
|
144
|
+
open_timeout: 60 }
|
145
|
+
})
|
146
|
+
# More wallets perhaps...
|
147
|
+
# Then call API selectively
|
148
|
+
@apis[1].provider.list_unspent
|
149
|
+
@apis[2].provider.list_unspent
|
150
|
+
```
|
151
|
+
|
74
152
|
## API
|
75
153
|
|
76
154
|
Currently openassets-ruby support the following API.
|
@@ -183,10 +261,10 @@ Creates a transaction for issuing an asset.
|
|
183
261
|
api.issue_asset(address, 150, 'u=https://goo.gl/bmVEuw', address, nil, 'broadcast')
|
184
262
|
```
|
185
263
|
If specified ``output_qty``, the issue output is divided by the number of output_qty.
|
186
|
-
|
264
|
+
For example, amount = 125 and output_qty = 2, the marker output asset quantity is [62, 63] and issue TxOut is two.
|
187
265
|
|
188
266
|
* **send_asset**
|
189
|
-
Creates a transaction for sending an asset from the open asset address to another.
|
267
|
+
Creates a transaction for sending an asset from the open asset address to another.
|
190
268
|
```ruby
|
191
269
|
# send asset
|
192
270
|
# api.send_asset(<from open asset address>,
|
@@ -316,7 +394,8 @@ This API is to burn the asset by spending the all UTXO of specified asset as Bit
|
|
316
394
|
asset_id = 'oGu4VXx2TU97d9LmPP8PMCkHckkcPqC5RY'
|
317
395
|
tx = api.burn_asset(oa_address, asset_id)
|
318
396
|
```
|
319
|
-
|
397
|
+
|
398
|
+
**Note:** Burnt asset will be lost forever.
|
320
399
|
|
321
400
|
## Command line interface
|
322
401
|
|
@@ -328,10 +407,10 @@ Openassets-ruby comes with a `openassets` command line interface that allows eas
|
|
328
407
|
|
329
408
|
Options:
|
330
409
|
-c path to config JSON which is passed to OpenAssets::Api.new - see Configuration for details
|
331
|
-
-e load
|
410
|
+
-e load config from ENV variables (look at the exe/openassets file for details)
|
332
411
|
|
333
412
|
commands:
|
334
|
-
* console runs an IRB console and gives you an initialized
|
413
|
+
* console runs an IRB console and gives you an initialized API instance to interact with OpenAssets
|
335
414
|
* any method on the API instance, helpful for get_balance, list_unspent
|
336
415
|
|
337
416
|
|
data/lib/openassets/api.rb
CHANGED
@@ -18,7 +18,8 @@ module OpenAssets
|
|
18
18
|
@config = {:network => 'mainnet',
|
19
19
|
:provider => 'bitcoind', :cache => 'cache.db',
|
20
20
|
:dust_limit => 600, :default_fees => 10000, :min_confirmation => 1, :max_confirmation => 9999999,
|
21
|
-
:rpc => {
|
21
|
+
:rpc => {:host => 'localhost', :port => 8332 , :user => '', :password => '', :wallet => '',
|
22
|
+
:schema => 'https', :timeout => 60, :open_timeout => 60}}
|
22
23
|
if config
|
23
24
|
@config.update(config)
|
24
25
|
end
|
@@ -73,7 +74,7 @@ module OpenAssets
|
|
73
74
|
}
|
74
75
|
{
|
75
76
|
'address' => btc_address,
|
76
|
-
'oa_address' => btc_address.nil? ? nil : address_to_oa_address(btc_address),
|
77
|
+
'oa_address' => (btc_address.nil? || btc_address.is_a?(Array)) ? nil : address_to_oa_address(btc_address),
|
77
78
|
'value' => satoshi_to_coin(v.inject(0) { |sum, o|sum + o.value}),
|
78
79
|
'assets' => assets,
|
79
80
|
'account' => v[0].account
|
@@ -218,6 +219,7 @@ module OpenAssets
|
|
218
219
|
cached = output_cache.get(txid, output_index)
|
219
220
|
return cached unless cached.nil?
|
220
221
|
end
|
222
|
+
puts "#{txid}:[#{output_index}]"
|
221
223
|
decode_tx = load_cached_tx(txid)
|
222
224
|
tx = Bitcoin::Protocol::Tx.new(decode_tx.htb)
|
223
225
|
colored_outputs = get_color_outputs_from_tx(tx)
|
@@ -95,6 +95,9 @@ module OpenAssets
|
|
95
95
|
url = "#{@config[:schema]}://"
|
96
96
|
url.concat "#{@config[:user]}:#{@config[:password]}@"
|
97
97
|
url.concat "#{@config[:host]}:#{@config[:port]}"
|
98
|
+
if !@config[:wallet].nil? && !@config[:wallet].empty?
|
99
|
+
url.concat "/wallet/#{@config[:wallet]}"
|
100
|
+
end
|
98
101
|
url
|
99
102
|
end
|
100
103
|
|
data/lib/openassets/util.rb
CHANGED
@@ -15,12 +15,16 @@ module OpenAssets
|
|
15
15
|
# @param [String] btc_address The Bitcoin address.
|
16
16
|
# @return [String] The Open Assets Address.
|
17
17
|
def address_to_oa_address(btc_address)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
begin
|
19
|
+
btc_hex = decode_base58(btc_address)
|
20
|
+
btc_hex = '0' +btc_hex if btc_hex.size==47
|
21
|
+
address = btc_hex[0..-9] # bitcoin address without checksum
|
22
|
+
named_addr = OA_NAMESPACE.to_s(16) + address
|
23
|
+
oa_checksum = checksum(named_addr)
|
24
|
+
encode_base58(named_addr + oa_checksum)
|
25
|
+
rescue ArgumentError
|
26
|
+
nil # bech32 format fails to decode. TODO define OA address for segwit
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
# convert open assets address to bitcoin address
|
@@ -95,11 +99,7 @@ module OpenAssets
|
|
95
99
|
# @param [Bitcoin::Script] script The output script.
|
96
100
|
# @return [String] The Bitcoin address. if the script dose not contains address, return nil.
|
97
101
|
def script_to_address(script)
|
98
|
-
|
99
|
-
return script.get_hash160_address if script.is_hash160?
|
100
|
-
return script.get_multisig_addresses if script.is_multisig?
|
101
|
-
return script.get_p2sh_address if script.is_p2sh?
|
102
|
-
nil
|
102
|
+
script.is_multisig? ? script.get_multisig_addresses : script.get_addresses.first
|
103
103
|
end
|
104
104
|
|
105
105
|
# validate bitcoin address
|
data/lib/openassets/version.rb
CHANGED
data/openassets-ruby.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.bindir = "exe"
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
|
-
spec.add_runtime_dependency "bitcoin-ruby", "~> 0.0.
|
21
|
+
spec.add_runtime_dependency "bitcoin-ruby", "~> 0.0.18"
|
22
22
|
spec.add_runtime_dependency "ffi", "~>1.9.8"
|
23
|
-
spec.add_runtime_dependency "rest-client", "
|
23
|
+
spec.add_runtime_dependency "rest-client", "2.0"
|
24
24
|
spec.add_runtime_dependency "httpclient"
|
25
25
|
spec.add_runtime_dependency "sqlite3"
|
26
26
|
spec.add_runtime_dependency "leb128", '~> 1.0.0'
|
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.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- azuchi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bitcoin-ruby
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.
|
19
|
+
version: 0.0.18
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.
|
26
|
+
version: 0.0.18
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: ffi
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rest-client
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '2.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: httpclient
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
239
239
|
version: '0'
|
240
240
|
requirements: []
|
241
241
|
rubyforge_project:
|
242
|
-
rubygems_version: 2.6.
|
242
|
+
rubygems_version: 2.6.14
|
243
243
|
signing_key:
|
244
244
|
specification_version: 4
|
245
245
|
summary: The implementation of the Open Assets Protocol for Ruby.
|