cardano_wallet 0.1.8 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebc7d4ddc02947d49ab653cfc6e1a86a09ff4e8cf7efb33921a1418a855dc68a
4
- data.tar.gz: 187877c6fe0fa07d231676f2140a93e30bf2934e325fa9761df63e72a3c85476
3
+ metadata.gz: 74c9782cd3632fcc7dcfa508223f69a9a027870866bdb5d396c6148882e52fd6
4
+ data.tar.gz: caac73d294e60c1cf420494cb8642e920953671fd2c9934f8f94d8701a5f4b32
5
5
  SHA512:
6
- metadata.gz: f4956699eb0dc284137b84f7aa53bc38f2fd6b7bed5e0f7793d6c4ec30b692f3f45160db173c175a2421cc889bb2d1d5861c7c5431dd1f924f38fb3d2e7245a2
7
- data.tar.gz: d0d63600ec42d8b59fb4f6f5bdf29e88c5e7aa42209b854d5a3da3cea84994f93dd3df5165ae46dd89ec1581137e7f6dfec779fb8d5b1e5fb1b114be548055c5
6
+ metadata.gz: 0c97ede17011cbb192b1de47ee7048dbe3dd56b8fdbb98c304549da2de0cd54838783dba1987b7ff7bd5aba1f6800455b62449283e42e68eb05beaeed7abe63f
7
+ data.tar.gz: 04caba35632d0e15825414e6bf1680b50673a9c1e7e9c65a1bad4ed0e82a03af3ca17aa64fce28a7ddadaabd3a54716b9fb5cc8ca590be0b3cff17cb09cf1e80
@@ -24,11 +24,11 @@ jobs:
24
24
  run: bundle install
25
25
  - name: Wait until node is synced
26
26
  run: bundle exec rake wait_until_node_synced
27
- - name: Run all tests (temporarily without nightly)
28
- run: bundle exec rspec . -t ~nightly
27
+ - name: Run all tests
28
+ run: bundle exec rspec .
29
29
  env:
30
30
  CI: true
31
31
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
32
32
  NETWORK: testnet
33
33
  WALLET: dev-master-shelley
34
- NODE: 1.18.0
34
+ NODE: 1.21.1
@@ -38,4 +38,4 @@ jobs:
38
38
  CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
39
39
  NETWORK: testnet
40
40
  WALLET: dev-master-shelley
41
- NODE: 1.18.0
41
+ NODE: 1.21.1
data/README.md CHANGED
@@ -65,7 +65,6 @@ CW = CardanoWallet.new
65
65
  BYRON = CW.byron
66
66
  SHELLEY = CW.shelley
67
67
  MISC = CW.misc
68
- PROXY = CW.proxy
69
68
 
70
69
  #Byron
71
70
  BYRON.wallets.list.each_with_index do |wal, i|
@@ -82,9 +81,8 @@ SHELLEY.wallets.get(w['id'])
82
81
  #Misc
83
82
  MISC.network.information
84
83
  MISC.network.clock
85
-
86
- #Proxy
87
- PROXY.submit_external_transaction(File.new("/tmp/blob.bin").read)
84
+ MISC.proxy.submit_external_transaction(File.new("/tmp/blob.bin").read)
85
+ MISC.utils.addresses("addr_test1vqrlltfahghjxl5sy5h5mvfrrlt6me5fqphhwjqvj5jd88cccqcek")
88
86
  ```
89
87
 
90
88
  Refer to [documentation](https://rubydoc.info/gems/cardano_wallet) for more details.
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'rake', '~> 12.3'
33
33
  spec.add_development_dependency 'rspec', '~> 3.7'
34
34
  spec.add_development_dependency 'bip_mnemonic', '~> 0.0.4'
35
- spec.add_development_dependency 'codecov'
35
+ spec.add_development_dependency 'codecov', '~> 0.2.8'
36
36
  spec.add_development_dependency 'simplecov'
37
37
 
38
38
  end
data/dev CHANGED
@@ -1 +1,8 @@
1
- NETWORK=testnet WALLET=dev-master-byron NODE=master docker-compose $1
1
+ #!/bin/sh
2
+
3
+ NETWORK=testnet \
4
+ WALLET=dev-master-shelley \
5
+ NODE=1.20.0 \
6
+ NODE_CONFIG_PATH=`pwd`/spec/testnet \
7
+ docker-compose -f docker-compose-shelley.yml \
8
+ $1 $2 $3 $4
@@ -6,7 +6,6 @@ require_relative "cardano_wallet/utils"
6
6
  require_relative "cardano_wallet/shelley"
7
7
  require_relative "cardano_wallet/byron"
8
8
  require_relative "cardano_wallet/misc"
9
- require_relative "cardano_wallet/proxy"
10
9
 
11
10
  module CardanoWallet
12
11
  def self.new(options = {})
@@ -13,7 +13,11 @@ module CardanoWallet
13
13
  opt[:url] ||= "#{opt[:protocol]}://#{opt[:host]}:#{opt[:port]}/v2"
14
14
  opt[:cacert] ||= ''
15
15
  opt[:pem] ||= ''
16
+ opt[:timeout] ||= -1
16
17
  self.class.base_uri opt[:url]
18
+ unless(opt[:timeout] == -1)
19
+ self.class.default_timeout(opt[:timeout].to_i)
20
+ end
17
21
 
18
22
  unless opt[:cacert].empty?
19
23
  ENV['SSL_CERT_FILE'] = opt[:cacert]
@@ -181,7 +181,7 @@ module CardanoWallet
181
181
  # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/byronSelectCoins
182
182
  #
183
183
  # @example
184
- # random(wid, {address1: 123, address2: 456})
184
+ # random(wid, [{addr1: 1000000}, {addr2: 1000000}])
185
185
  def random(wid, payments)
186
186
  payments_formatted = Utils.format_payments(payments)
187
187
  self.class.post("/byron-wallets/#{wid}/coin-selections/random",
@@ -217,10 +217,10 @@ module CardanoWallet
217
217
  # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postByronTransaction
218
218
  # @param wid [String] source wallet id
219
219
  # @param passphrase [String] source wallet's passphrase
220
- # @param payments [Hash] addres, amount pair
220
+ # @param payments [Array of Hashes] addres, amount pair
221
221
  #
222
222
  # @example
223
- # create(wid, passphrase, {addr1: 1000000})
223
+ # create(wid, passphrase, [{addr1: 1000000}, {addr2: 1000000}])
224
224
  def create(wid, passphrase, payments)
225
225
  payments_formatted = Utils.format_payments(payments)
226
226
  self.class.post("/byron-wallets/#{wid}/transactions",
@@ -234,7 +234,7 @@ module CardanoWallet
234
234
  # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postTransactionFee
235
235
  #
236
236
  # @example
237
- # payment_fees(wid, {addr1: 1000000})
237
+ # payment_fees(wid, [{addr1: 1000000}, {addr2: 1000000}])
238
238
  def payment_fees(wid, payments)
239
239
  payments_formatted = Utils.format_payments(payments)
240
240
  self.class.post("/byron-wallets/#{wid}/payment-fees",
@@ -15,6 +15,43 @@ module CardanoWallet
15
15
  def network
16
16
  Network.new @opt
17
17
  end
18
+
19
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Utils
20
+ def utils
21
+ Utils.new @opt
22
+ end
23
+
24
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Proxy
25
+ def proxy
26
+ Proxy.new @opt
27
+ end
28
+
29
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Settings
30
+ def settings
31
+ Settings.new @opt
32
+ end
33
+ end
34
+
35
+ # API for Network
36
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Settings
37
+ class Settings < Base
38
+ def initialize opt
39
+ super
40
+ end
41
+
42
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/getSettings
43
+ def get
44
+ self.class.get("/settings")
45
+ end
46
+
47
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/putSettings
48
+ def update(params)
49
+ CardanoWallet::Utils.verify_param_is_hash!(params)
50
+ self.class.put("/settings",
51
+ :body => {"settings" => params}.to_json,
52
+ :headers => { 'Content-Type' => 'application/json' }
53
+ )
54
+ end
18
55
  end
19
56
 
20
57
  # API for Network
@@ -43,5 +80,34 @@ module CardanoWallet
43
80
  end
44
81
 
45
82
  end
83
+
84
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Utils
85
+ class Utils < Base
86
+ def initialize opt
87
+ super
88
+ end
89
+
90
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/inspectAddress
91
+ def addresses(address_id)
92
+ self.class.get("/addresses/#{address_id}")
93
+ end
94
+
95
+ end
96
+
97
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Proxy
98
+ class Proxy < Base
99
+ def initialize opt
100
+ super
101
+ end
102
+
103
+ # Submit a transaction that was created and signed outside of cardano-wallet.
104
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postExternalTransaction
105
+ # @param binary_blob [String] Signed transaction message binary blob.
106
+ def submit_external_transaction(binary_blob)
107
+ self.class.post("/proxy/transactions",
108
+ :body => binary_blob,
109
+ :headers => { 'Content-Type' => 'application/octet-stream' })
110
+ end
111
+ end
46
112
  end
47
113
  end
@@ -158,13 +158,26 @@ module CardanoWallet
158
158
  # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/selectCoins
159
159
  #
160
160
  # @example
161
- # random(wid, {address1: 123, address2: 456})
161
+ # random(wid, [{addr1: 1000000}, {addr2: 1000000}])
162
162
  def random(wid, payments)
163
163
  payments_formatted = Utils.format_payments(payments)
164
164
  self.class.post("/wallets/#{wid}/coin-selections/random",
165
165
  :body => {:payments => payments_formatted}.to_json,
166
166
  :headers => { 'Content-Type' => 'application/json' })
167
167
  end
168
+
169
+ # Coin selection -> Delegation action
170
+ # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/selectCoins
171
+ #
172
+ # @example
173
+ # random(wid, {action: "join", pool: "poolid"})
174
+ # random(wid, {action: "quit"})
175
+ def random_deleg(wid, deleg_action)
176
+ payments_formatted = Utils.verify_param_is_hash!(deleg_action)
177
+ self.class.post("/wallets/#{wid}/coin-selections/random",
178
+ :body => {:delegation_action => deleg_action}.to_json,
179
+ :headers => { 'Content-Type' => 'application/json' })
180
+ end
168
181
  end
169
182
 
170
183
  # API for Transactions
@@ -194,24 +207,19 @@ module CardanoWallet
194
207
  # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postTransaction
195
208
  # @param wid [String] source wallet id
196
209
  # @param passphrase [String] source wallet's passphrase
197
- # @param payments [Hash] addres, amount pair
198
- # @param withdrawal [Strin or Array] 'self' or mnemonic sentence
210
+ # @param payments [Array of Hashes] addres, amount pair
211
+ # @param withdrawal [String or Array] 'self' or mnemonic sentence
212
+ # @param metadata [Hash] special metadata JSON subset format (cf: https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postTransaction)
199
213
  #
200
214
  # @example
201
- # create(wid, passphrase, {addr1: 1000000}, 'self')
202
- def create(wid, passphrase, payments, withdrawal = nil)
215
+ # create(wid, passphrase, [{addr1: 1000000}, {addr2: 1000000}], 'self', {"1": "abc"})
216
+ def create(wid, passphrase, payments, withdrawal = nil, metadata = nil)
203
217
  payments_formatted = Utils.format_payments(payments)
204
-
205
- if withdrawal
206
- payload = { :payments => payments_formatted,
207
- :passphrase => passphrase,
208
- :withdrawal => withdrawal,
209
- }
210
- else
211
- payload = { :payments => payments_formatted,
212
- :passphrase => passphrase
213
- }
214
- end
218
+ payload = { :payments => payments_formatted,
219
+ :passphrase => passphrase
220
+ }
221
+ payload[:withdrawal] = withdrawal if withdrawal
222
+ payload[:metadata] = metadata if metadata
215
223
 
216
224
  self.class.post("/wallets/#{wid}/transactions",
217
225
  :body => payload.to_json,
@@ -222,17 +230,13 @@ module CardanoWallet
222
230
  # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postTransactionFee
223
231
  #
224
232
  # @example
225
- # payment_fees(wid, {addr1: 1000000})
226
- def payment_fees(wid, payments, withdrawal = nil)
233
+ # payment_fees(wid, [{addr1: 1000000}, {addr2: 1000000}], {"1": "abc"})
234
+ def payment_fees(wid, payments, withdrawal = nil, metadata = nil)
227
235
  payments_formatted = Utils.format_payments(payments)
236
+ payload = { :payments => payments_formatted }
228
237
 
229
- if withdrawal
230
- payload = { :payments => payments_formatted,
231
- :withdrawal => withdrawal
232
- }
233
- else
234
- payload = { :payments => payments_formatted }
235
- end
238
+ payload[:withdrawal] = withdrawal if withdrawal
239
+ payload[:metadata] = metadata if metadata
236
240
 
237
241
  self.class.post("/wallets/#{wid}/payment-fees",
238
242
  :body => payload.to_json,
@@ -5,13 +5,24 @@ module CardanoWallet
5
5
  raise ArgumentError, "argument should be Hash" unless param.is_a?(Hash)
6
6
  end
7
7
 
8
+ def self.verify_param_is_array!(param)
9
+ raise ArgumentError, "argument should be Array" unless param.is_a?(Array)
10
+ end
11
+
12
+ ##
13
+ # @param payments [Array of Hashes] - [{addr1: 1}, {addr2: 2}]
14
+ # @return [Array of Hashes] - [{:address=>"addr1", :amount=>{:quantity=>1, :unit=>"lovelace"}}, {:address=>"addr2", :amount=>{:quantity=>2, :unit=>"lovelace"}}]
8
15
  def self.format_payments(payments)
9
- verify_param_is_hash!(payments)
10
- payments.collect do |addr, amt|
11
- {:address => addr.to_s,
12
- :amount => {:quantity => amt.to_i,
13
- :unit => "lovelace"}
14
- }
16
+ verify_param_is_array!(payments)
17
+ raise ArgumentError, "argument should be Array of single Hashes" unless payments.all?{|p| p.size == 1 && p.is_a?(Hash)}
18
+ payments.map do |p|
19
+ a = p.collect do |addr, amt|
20
+ {:address => addr.to_s,
21
+ :amount => {:quantity => amt.to_i,
22
+ :unit => "lovelace"}
23
+ }
24
+ end.flatten
25
+ Hash[*a]
15
26
  end
16
27
  end
17
28
 
@@ -1,3 +1,3 @@
1
1
  module CardanoWallet
2
- VERSION = "0.1.8"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cardano_wallet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Stachyra
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-31 00:00:00.000000000 Z
11
+ date: 2020-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: codecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.2.8
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 0.2.8
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -117,12 +117,10 @@ files:
117
117
  - cardano_wallet.gemspec
118
118
  - dev
119
119
  - docker-compose-shelley.yml
120
- - docker-compose.yml
121
120
  - lib/cardano_wallet.rb
122
121
  - lib/cardano_wallet/base.rb
123
122
  - lib/cardano_wallet/byron.rb
124
123
  - lib/cardano_wallet/misc.rb
125
- - lib/cardano_wallet/proxy.rb
126
124
  - lib/cardano_wallet/shelley.rb
127
125
  - lib/cardano_wallet/utils.rb
128
126
  - lib/cardano_wallet/version.rb
@@ -149,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
147
  - !ruby/object:Gem::Version
150
148
  version: '0'
151
149
  requirements: []
152
- rubygems_version: 3.0.3
150
+ rubygems_version: 3.1.2
153
151
  signing_key:
154
152
  specification_version: 4
155
153
  summary: Ruby wrapper over cardano-wallet.
@@ -1,38 +0,0 @@
1
- version: "3.5"
2
-
3
- services:
4
- cardano-node:
5
- image: inputoutput/cardano-node:${NODE}
6
- environment:
7
- NETWORK:
8
- volumes:
9
- - node-${NETWORK}-db:/data
10
- - node-ipc:/ipc
11
- - node-config:/nix/store
12
- restart: on-failure
13
-
14
- cardano-wallet:
15
- image: inputoutput/cardano-wallet:${WALLET}
16
- volumes:
17
- - wallet-${NETWORK}-db:/wallet-db
18
- - node-ipc:/ipc
19
- - node-config:/config
20
- ports:
21
- - 8090:8090
22
- entrypoint: []
23
- command: bash -c "
24
- ([[ $$NETWORK == \"mainnet\" ]] && $$CMD --mainnet) ||
25
- ([[ $$NETWORK == \"testnet\" ]] && $$CMD --testnet /config/*testnet-genesis.json)
26
- "
27
- environment:
28
- CMD: "cardano-wallet-byron serve --node-socket /ipc/node.socket --database /wallet-db --listen-address 0.0.0.0"
29
- NETWORK:
30
- restart: on-failure
31
-
32
- volumes:
33
- node-mainnet-db:
34
- node-testnet-db:
35
- wallet-mainnet-db:
36
- wallet-testnet-db:
37
- node-ipc:
38
- node-config:
@@ -1,26 +0,0 @@
1
- module CardanoWallet
2
- module Proxy
3
-
4
- # Call API for Proxy
5
- # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#tag/Proxy
6
- def self.new(opt)
7
- Init.new opt
8
- end
9
-
10
- class Init < Base
11
- def initialize opt
12
- super
13
- end
14
-
15
- # Submit a transaction that was created and signed outside of cardano-wallet.
16
- # @see https://input-output-hk.github.io/cardano-wallet/api/edge/#operation/postExternalTransaction
17
- # @param binary_blob [String] Signed transaction message binary blob.
18
- def submit_external_transaction(binary_blob)
19
- self.class.post("/proxy/transactions",
20
- :body => binary_blob,
21
- :headers => { 'Content-Type' => 'application/octet-stream' })
22
- end
23
- end
24
-
25
- end
26
- end