filecoin 0.2.0 → 0.3.0

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
  SHA256:
3
- metadata.gz: ef27efff91c40a5b52704f6a8aa63f2ede88e1d88e495444e8660e7746483538
4
- data.tar.gz: 2ee28c49341b368e2cbab1dc872f72fb156da4217335a6a8e680ed0797a25992
3
+ metadata.gz: 51d924d8ec129371f94374405e003a802de0b7952fdeb9ae8eec0df93ed4f2f1
4
+ data.tar.gz: d3f27b9ee0a0a5b252d6523740be7d3fb2302a89ea528503e9081f7cbcb7d328
5
5
  SHA512:
6
- metadata.gz: e603609b41f74c9cfa5fd06072ef859036f3d6fb8644283dd4b824098c05db1dc0cfec23e6b140f661629ee84ee04fc4203449e00757172cc48d8725eee4ca10
7
- data.tar.gz: d50ba2023ebb16ebc76c03cc064eca582fb1cd40318d594d5d0e567bb535940f0a2a893dc80c3390274b1930f1b04766c324e0a5ffc583c7670147a38989a39d
6
+ metadata.gz: a6021bf20aa984240b5839418aa29913007e40889f9dbbae25ec9a1a84a74577ba771fe6b9ad548f9312b7088cf957f3f6ec5d8643168a364e876ef64e6ecad3
7
+ data.tar.gz: d893ffd092e50be52cd458eb0e277897df5305ce670d0134da287a62cf658afd39e8f6dec200e66920dde56b86e53ec29117ce223b916d26488f8b35957610ad
@@ -0,0 +1,39 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: 2.7
17
+ - name: Install dependencies
18
+ run: bundle install
19
+ - name: Run tests
20
+ run: bundle exec rake lint
21
+ test:
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ os: [ubuntu, macos]
26
+ ruby: [2.5, 2.6, 2.7, head, debug, jruby, jruby-head, truffleruby, truffleruby-head]
27
+ runs-on: ${{ matrix.os }}-latest
28
+ continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
29
+ steps:
30
+ - uses: actions/checkout@v2
31
+ - uses: ruby/setup-ruby@v1
32
+ with:
33
+ ruby-version: ${{ matrix.ruby }}
34
+ - name: Install dependencies
35
+ run: bundle install
36
+ - name: Run tests
37
+ env:
38
+ FILECOIN_URL: ${{ secrets.FILECOIN_URL }}
39
+ run: bundle exec rake spec
@@ -10,7 +10,13 @@ The format is based on [Keep a Changelog], and this project adheres to
10
10
  Unreleased
11
11
  ----------
12
12
 
13
- _Coming soon_
13
+ - Add optional argument to extract the deal CID automatically from the response
14
+ when submitting a proposal;
15
+ - Make wallet for deal proposals optional, falling back on the configured
16
+ default wallet;
17
+ - Add configuration object to set default wallet for deal proposals;
18
+ - Fix defaults overriding provided nil values in `Filecoin::Client`;
19
+ - Add abstraction for deals and their state with client lifecycle helpers.
14
20
 
15
21
 
16
22
  v0.2.0 - 2020-06-12
data/Gemfile CHANGED
@@ -12,4 +12,6 @@ group :test do
12
12
  gem "rubocop", "~> 0.84.0"
13
13
  gem "rubocop-performance", "~> 1.6.0"
14
14
  gem "rubocop-rspec", "~> 1.39.0"
15
+ gem "vcr", "~> 6.0"
16
+ gem "webmock", "~> 3.0"
15
17
  end
@@ -1,22 +1,57 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- filecoin (0.2.0)
4
+ filecoin (0.3.0)
5
+ dry-struct (~> 1.0)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
10
+ addressable (2.7.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
9
12
  ast (2.4.0)
10
13
  concurrent-ruby (1.1.6)
14
+ crack (0.4.3)
15
+ safe_yaml (~> 1.0.0)
11
16
  diff-lcs (1.3)
17
+ dry-configurable (0.11.6)
18
+ concurrent-ruby (~> 1.0)
19
+ dry-core (~> 0.4, >= 0.4.7)
20
+ dry-equalizer (~> 0.2)
21
+ dry-container (0.7.2)
22
+ concurrent-ruby (~> 1.0)
23
+ dry-configurable (~> 0.1, >= 0.1.3)
24
+ dry-core (0.4.9)
25
+ concurrent-ruby (~> 1.0)
26
+ dry-equalizer (0.3.0)
27
+ dry-inflector (0.2.0)
28
+ dry-logic (1.0.6)
29
+ concurrent-ruby (~> 1.0)
30
+ dry-core (~> 0.2)
31
+ dry-equalizer (~> 0.2)
32
+ dry-struct (1.3.0)
33
+ dry-core (~> 0.4, >= 0.4.4)
34
+ dry-equalizer (~> 0.3)
35
+ dry-types (~> 1.3)
36
+ ice_nine (~> 0.11)
37
+ dry-types (1.4.0)
38
+ concurrent-ruby (~> 1.0)
39
+ dry-container (~> 0.3)
40
+ dry-core (~> 0.4, >= 0.4.4)
41
+ dry-equalizer (~> 0.3)
42
+ dry-inflector (~> 0.1, >= 0.1.2)
43
+ dry-logic (~> 1.0, >= 1.0.2)
12
44
  faker (2.12.0)
13
45
  i18n (>= 1.6, < 2)
46
+ hashdiff (1.0.1)
14
47
  i18n (1.8.2)
15
48
  concurrent-ruby (~> 1.0)
49
+ ice_nine (0.11.2)
16
50
  parallel (1.19.1)
17
51
  parser (2.7.1.3)
18
52
  ast (~> 2.4.0)
19
53
  permafrost (1.0.0)
54
+ public_suffix (4.0.5)
20
55
  rainbow (3.0.0)
21
56
  rake (12.3.3)
22
57
  rexml (3.2.4)
@@ -48,7 +83,13 @@ GEM
48
83
  rubocop-rspec (1.39.0)
49
84
  rubocop (>= 0.68.1)
50
85
  ruby-progressbar (1.10.1)
86
+ safe_yaml (1.0.5)
51
87
  unicode-display_width (1.7.0)
88
+ vcr (6.0.0)
89
+ webmock (3.8.3)
90
+ addressable (>= 2.3.6)
91
+ crack (>= 0.3.2)
92
+ hashdiff (>= 0.4.0, < 2.0.0)
52
93
 
53
94
  PLATFORMS
54
95
  ruby
@@ -62,6 +103,8 @@ DEPENDENCIES
62
103
  rubocop (~> 0.84.0)
63
104
  rubocop-performance (~> 1.6.0)
64
105
  rubocop-rspec (~> 1.39.0)
106
+ vcr (~> 6.0)
107
+ webmock (~> 3.0)
65
108
 
66
109
  BUNDLED WITH
67
110
  2.1.4
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  filecoin-ruby
2
2
  =============
3
3
 
4
+ ![Ruby](https://github.com/subvisual/filecoin-ruby/workflows/Ruby/badge.svg)
5
+
4
6
  Interface to the Filecoin network APIs in Ruby.
5
7
 
6
8
 
@@ -198,33 +200,106 @@ The state of a deal has a numerical value which links it to a constant in the
198
200
  Filecoin Lotus client. At the time of writing, these states are
199
201
  ([source][states]):
200
202
 
201
- 1. Unknown;
202
- 2. Proposal not found;
203
- 3. Proposal rejected;
204
- 4. Proposal accepted;
205
- 5. Deal staged;
206
- 6. Deal sealing;
207
- 7. Deal is active;
208
- 8. Deal is failing;
209
- 9. Deal not found;
210
- 10. Deal funds ensured &mdash; deposited funds as necessary to create a deal,
211
- ready to move forward;
212
- 11. Waiting for data request &mdash; client is waiting for a request for the
213
- deal data;
214
- 12. Deal validating &mdash; verifying that deal parameters are good;
215
- 13. Waiting for deal acceptance &mdash; deciding whether or not to accept the
216
- deal;
217
- 14. Deal transferring &mdash; transferring data to the miner;
218
- 15. Waiting for data &mdash; for manual transfers;
219
- 16. Verifying transferred data &mdash; generate CAR / piece data;
220
- 17. Ensuring provider funds &mdash; checking collateral is sufficient;
221
- 18. Ensuring client funds &mdash; checking client funds are sufficient;
222
- 19. Waiting for funds to appear in provider balance;
223
- 20. Waiting for funds to appear in client balance;
224
- 21. Publishing deal to chain;
225
- 22. Waiting for deal to appear on chain;
226
- 23. Deal failed with an unexpected error;
227
- 24. Deal completed &mdash; the deal has reached the end of its duration.
203
+ | Value | State | Description |
204
+ | :---: | :--- | :--- |
205
+ | 0 | Unknown | Status of the deal is undefined. |
206
+ | 1 | Not found | Deal can not be located. |
207
+ | 2 | Proposal rejected | Storage miner chose not to accept this deal proposal. |
208
+ | 3 | Proposal accepted | Storage miner chose to accept this deal proposal. |
209
+ | 4 | Staged | Deal has been published and data is ready to be put into a sector. |
210
+ | 5 | Sealing | Deal is in sector that's being sealed. |
211
+ | 6 | Active | Deal is in a sealed sector and the miner is providing proofs for this deal. |
212
+ | 7 | Expired | Deal has passed its final epoch and is expired. |
213
+ | 8 | Slashed | Deal was in a sector that got slashed from failing to produce proofs. |
214
+ | 9 | Failing | Something has gone wrong in the deal. Data is being cleaned. |
215
+ | 10 | Funds ensured | The funds necessary to create the deal have been deposited. |
216
+ | 11 | Waiting for data request | Client is waiting for provider to request the deal data. |
217
+ | 12 | Validating | Storage provider is validating whether the deal parameters are good for a proposal. |
218
+ | 13 | Waiting for acceptance | Storage provider is running some custom decision logic to decide whether to accept the deal. |
219
+ | 14 | Transferring | Data is being sent from the client to the storage provider. |
220
+ | 15 | Waiting for data | Deal is for a manual data transfer, or the storage provider has not yet received a request to transfer data from the client. |
221
+ | 16 | Verifying data | Data has been transferred and the storage provider is verifying it against the provided piece CID. |
222
+ | 17 | Ensure provider funds | Storage provider is making sure it has adequate funds for the deal. |
223
+ | 18 | Ensure client funds | Client is making sure it has adequate funds for the deal. |
224
+ | 19 | Provider is funding | Storage provider has deposited funds and is waiting for funds to show up in balance. |
225
+ | 20 | Client is funding | Client has deposited funds and is waiting for funds to show up in balance. |
226
+ | 21 | Publish | Deal is ready to be published on chain. |
227
+ | 22 | Publishing | Deal has been published, currently waiting for it to appear on chain. |
228
+ | 23 | Error | Deal has failed due to an error, no further updates will occur. |
229
+ | 24 | Completed | Deal is active and information for retrieval is recorded. |
230
+
231
+ The lifecycle of a deal is slightly different from the point-of-view of the
232
+ client (the node proposing a deal) and the miner. Please refer to [the
233
+ storage market technical documentation] for up-to-date diagrams.
234
+
235
+ This gem provides an abstraction in `Filecoin::Deals::State` of the **client
236
+ deal lifecycle** reducing them to 4 general states for general deal
237
+ health-checks and tracking.
238
+
239
+ <table>
240
+ <thead>
241
+ <tr>
242
+ <th>Abstract State</th>
243
+ <th>Description</th>
244
+ <th>Positive States</th>
245
+ </tr>
246
+ </thead>
247
+ <tbody>
248
+ <tr>
249
+ <td>Pending</td>
250
+ <td>Deal has been proposed and is pending acceptance or rejection.</td>
251
+ <td>
252
+ <ul>
253
+ <li>Ensure client funds</li>
254
+ <li>Client is funding</li>
255
+ <li>Funds ensured</li>
256
+ <li>Waiting for data</li>
257
+ <li>Transferring</li>
258
+ <li>Validating</li>
259
+ </ul>
260
+ </td>
261
+ </tr>
262
+ <tr>
263
+ <td>Good</td>
264
+ <td>Deal has been accepted and is active or on its way to become active.</td>
265
+ <td>
266
+ <ul>
267
+ <li>Proposal accepted</li>
268
+ <li>Sealing</li>
269
+ <li>Active</li>
270
+ </ul>
271
+ </td>
272
+ </tr>
273
+ <tr>
274
+ <td>Bad</td>
275
+ <td>Something has gone wrong with the deal and it is now invalid.</td>
276
+ <td>
277
+ <ul>
278
+ <li>Failing</li>
279
+ <li>Error</li>
280
+ </ul>
281
+ </td>
282
+ </tr>
283
+ <tr>
284
+ <td>Finished</td>
285
+ <td>The deal has followed its natural course and is no longer active.</td>
286
+ <td>
287
+ <ul>
288
+ <li>Slashed</li>
289
+ <li>Expired</li>
290
+ </ul>
291
+ </td>
292
+ </tr>
293
+ </tbody>
294
+ </table>
295
+
296
+ To make use of this abstraction, initialize `Filecoin::Deal` with the result
297
+ of `Filecoin.ClientGetDealInfo`.
298
+
299
+ ```ruby
300
+ response = Filecoin.client_get_deal_info("bafyreigc4b4fqsval4pjmfncaqdezhe5y3anwavjyzpj4mar73e6n7mvj4")
301
+ deal = Filecoin::Deal.new(response["result"])
302
+ ```
228
303
 
229
304
 
230
305
  ### Filecoin.ClientQueryAsk
@@ -266,6 +341,7 @@ start_deal_params = Filecoin::Types::StartDealParams.new(
266
341
  # Description of the data the deal refers to
267
342
  data: data_ref,
268
343
  # Address of the wallet in the node to use to pay for the deal
344
+ # (optional if `Filecoin.config.default_wallet` is set)
269
345
  wallet: "t13nqjc55m3h327646cwcu4lchdx4lkw7ccxnx4ca",
270
346
  # Address ot the miner to whom this deal is to be proposed
271
347
  miner: "t1234567",
@@ -277,7 +353,7 @@ start_deal_params = Filecoin::Types::StartDealParams.new(
277
353
  deal_start_epoch: 1591979600,
278
354
  )
279
355
 
280
- Filecoin.client_start_deal(start_deal_params)
356
+ Filecoin.client_start_deal(start_deal_params, extract_response: false)
281
357
  ```
282
358
 
283
359
  ```json
@@ -290,6 +366,10 @@ Filecoin.client_start_deal(start_deal_params)
290
366
  }
291
367
  ```
292
368
 
369
+ This method accepts an optional keyword argument `extract_response`. If truthy,
370
+ the method returns the deal CID directly, or `nil`, instead of the JSON RPC
371
+ full response. Defaults to `false`.
372
+
293
373
 
294
374
  ### Filecoin.NetPeers
295
375
 
@@ -364,7 +444,8 @@ filecoin-ruby was created and is maintained with :heart: by
364
444
 
365
445
  [Filecoin Node API]: https://github.com/filecoin-project/lotus/blob/master/api/api_full.go
366
446
  [permissions]: https://lotu.sh/en+api#what-authorization-level-should-i-use-21853
367
- [states]: https://github.com/filecoin-project/go-fil-markets/blob/095b388f830be66ceedc0965e5c7afcb1b96ad60/storagemarket/types.go#L30-L60
447
+ [states]: https://github.com/filecoin-project/go-fil-markets/blob/master/storagemarket/dealstatus.go
448
+ [the storage market technical documentation]: https://github.com/filecoin-project/go-fil-markets/tree/master/storagemarket#technical-documentation
368
449
  [license]: ./LICENSE.txt
369
450
  [rubygems.org]: https://rubygems.org
370
451
  [subvisual]: http://subvisual.com
@@ -38,4 +38,6 @@ Gem::Specification.new do |spec|
38
38
  spec.bindir = "exe"
39
39
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
40
40
  spec.require_paths = ["lib"]
41
+
42
+ spec.add_runtime_dependency "dry-struct", "~> 1.0"
41
43
  end
@@ -1,4 +1,5 @@
1
1
  require "filecoin/client"
2
+ require "filecoin/configuration"
2
3
  require "filecoin/types"
3
4
  require "filecoin/version"
4
5
  require "forwardable"
@@ -7,6 +8,8 @@ module Filecoin
7
8
  class << self
8
9
  extend Forwardable
9
10
 
11
+ include Configurable
12
+
10
13
  def_delegators :client, *Client::Node.public_instance_methods
11
14
 
12
15
  def client
@@ -7,23 +7,23 @@ module Filecoin
7
7
 
8
8
  attr_reader :uri, :token
9
9
 
10
- def initialize(uri: nil, token: nil)
11
- @uri = initialize_uri(uri)
12
- @token = initialize_token(token)
10
+ def initialize(opts = {})
11
+ @uri = initialize_uri(opts)
12
+ @token = initialize_token(opts)
13
13
  end
14
14
 
15
15
  private
16
16
 
17
- def initialize_uri(uri)
18
- uri ||= ENV["FILECOIN_URL"]
17
+ def initialize_uri(opts)
18
+ uri = opts.fetch(:uri, ENV["FILECOIN_URL"])
19
19
 
20
20
  return if uri.nil?
21
21
 
22
22
  URI(uri)
23
23
  end
24
24
 
25
- def initialize_token(token)
26
- token || ENV["FILECOIN_TOKEN"]
25
+ def initialize_token(opts)
26
+ opts.fetch(:token, ENV["FILECOIN_TOKEN"])
27
27
  end
28
28
 
29
29
  def json_rpc_call(method, *params)
@@ -17,14 +17,16 @@ module Filecoin
17
17
  json_rpc_call "Filecoin.ClientQueryAsk", peer_id, miner_id
18
18
  end
19
19
 
20
- def client_start_deal(start_deal_params)
20
+ def client_start_deal(start_deal_params, extract_response: false)
21
21
  params = if start_deal_params.is_a?(Hash)
22
22
  start_deal_params
23
23
  else
24
24
  start_deal_params.as_json
25
25
  end
26
26
 
27
- json_rpc_call("Filecoin.ClientStartDeal", params)
27
+ response = json_rpc_call("Filecoin.ClientStartDeal", params)
28
+
29
+ extract_response ? response.dig("result", "/") : response
28
30
  end
29
31
 
30
32
  def net_peers
@@ -0,0 +1,20 @@
1
+ module Filecoin
2
+ class Configuration
3
+ attr_writer :default_wallet
4
+
5
+ def default_wallet
6
+ @default_wallet || ENV["FILECOIN_WALLET"]
7
+ end
8
+ end
9
+
10
+ module Configurable
11
+ def configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+ alias config configuration
15
+
16
+ def configure
17
+ yield configuration
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,39 @@
1
+ require "dry-struct"
2
+ require "filecoin/deals/state"
3
+
4
+ module Filecoin
5
+ class Deal < Dry::Struct
6
+ attribute? :deal_id, Dry::Types["integer"].optional
7
+ attribute? :duration, Dry::Types["integer"].optional
8
+ attribute? :message, Dry::Types["string"].optional
9
+ attribute? :piece_cid, Dry::Types["string"].optional
10
+ attribute? :price_per_epoch, Dry::Types["string"].optional
11
+ attribute? :proposal_cid, Dry::Types["string"].optional
12
+ attribute? :provider, Dry::Types["string"].optional
13
+ attribute? :size, Dry::Types["integer"].optional
14
+ attribute? :state, Dry::Types["integer"].optional
15
+
16
+ module ClassMethods
17
+ def from_deal_info(deal_info) # rubocop:disable Metrics/MethodLength
18
+ new(
19
+ deal_id: deal_info["DealID"],
20
+ duration: deal_info["Duration"],
21
+ message: deal_info["Message"],
22
+ piece_cid: deal_info.dig("PieceCID", "/"),
23
+ price_per_epoch: deal_info["PricePerEpoch"],
24
+ proposal_cid: deal_info.dig("ProposalCid", "/"),
25
+ provider: deal_info["Provider"],
26
+ size: deal_info["Size"],
27
+ state: deal_info["State"],
28
+ )
29
+ end
30
+ end
31
+
32
+ extend ClassMethods
33
+ include Deals::State
34
+
35
+ def initialize(attrs = {})
36
+ super
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,63 @@
1
+ module Filecoin
2
+ module Deals
3
+ module State
4
+ STATES = %i[
5
+ unknown
6
+ not_found
7
+ proposal_rejected
8
+ proposal_accepted
9
+ staged
10
+ sealing
11
+ active
12
+ expired
13
+ slashed
14
+ failing
15
+ funds_ensured
16
+ waiting_for_data_request
17
+ validating
18
+ waiting_for_acceptance
19
+ transferring
20
+ waiting_for_data
21
+ verifying_data
22
+ ensure_provider_funds
23
+ ensure_client_funds
24
+ provider_funding
25
+ client_funding
26
+ publish
27
+ publishing
28
+ error
29
+ completed
30
+ ].freeze
31
+
32
+ STATES.each_with_index do |state, index|
33
+ define_method("#{state}?") do
34
+ self.state == index
35
+ end
36
+ end
37
+
38
+ GOOD_STATES = %i[proposal_accepted sealing active].freeze
39
+ BAD_STATES = %i[failing error].freeze
40
+ PENDING_STATES = %i[
41
+ ensure_client_funds client_funding funds_ensured
42
+ waiting_for_data_request transferring validating
43
+ ].freeze
44
+ FINISHED_STATES = %i[slashed expired].freeze
45
+
46
+ def bad?
47
+ BAD_STATES.include?(STATES[state])
48
+ end
49
+
50
+ def finished?
51
+ FINISHED_STATES.include?(STATES[state])
52
+ end
53
+
54
+ def good?
55
+ GOOD_STATES.include?(STATES[state])
56
+ end
57
+
58
+ def pending?
59
+ PENDING_STATES.include?(STATES[state])
60
+ end
61
+ end
62
+ end
63
+ end
@@ -3,9 +3,9 @@ module Filecoin
3
3
  class StartDealParams
4
4
  attr_reader :data, :wallet, :miner, :epoch_price, :min_blocks_duration, :deal_start_epoch
5
5
 
6
- def initialize(data:, wallet:, miner:, epoch_price:, min_blocks_duration: nil, deal_start_epoch: nil)
6
+ def initialize(data:, wallet: nil, miner:, epoch_price:, min_blocks_duration: nil, deal_start_epoch: nil)
7
7
  @data = data
8
- @wallet = wallet
8
+ @wallet = wallet || Filecoin.config.default_wallet
9
9
  @miner = miner
10
10
  @epoch_price = epoch_price
11
11
  @min_blocks_duration = min_blocks_duration
@@ -1,3 +1,3 @@
1
1
  module Filecoin
2
- VERSION = "0.2.0".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filecoin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pedro Costa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-12 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2020-07-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-struct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
13
27
  description: |
14
28
  Filecoin (https://filecoin.io/) is a distributed storage network based on a
15
29
  blockchain mechanism. Filecoin miners provide storage capacity for the
@@ -29,6 +43,7 @@ executables: []
29
43
  extensions: []
30
44
  extra_rdoc_files: []
31
45
  files:
46
+ - ".github/workflows/ruby.yml"
32
47
  - ".gitignore"
33
48
  - ".rspec"
34
49
  - ".rubocop.yml"
@@ -46,6 +61,9 @@ files:
46
61
  - lib/filecoin.rb
47
62
  - lib/filecoin/client.rb
48
63
  - lib/filecoin/client/node.rb
64
+ - lib/filecoin/configuration.rb
65
+ - lib/filecoin/deal.rb
66
+ - lib/filecoin/deals/state.rb
49
67
  - lib/filecoin/http.rb
50
68
  - lib/filecoin/types.rb
51
69
  - lib/filecoin/types/cid.rb