flow_client 0.2.1 → 0.2.2

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: 91c782ac6146b291f2691e51a0ff9bf09fafb58d1fec9ec9d10ae80e3ea6c058
4
- data.tar.gz: e53438e01826e7a68c0868bed486ca51f256e42b2f574e62bee710be88217450
3
+ metadata.gz: 5af7d7f1ba7669936797c908286ae084ca35d28ce1403767c7e670516391c744
4
+ data.tar.gz: 9ece3c471fb71a3bd5fadaac858e72681ee5db0e9259cc6871c4c413e56b2f8a
5
5
  SHA512:
6
- metadata.gz: ecec4b82c34c78f62daf55f048cd7a384e17e14a721162eb40b69b00f9d24bc96bae36a03d9c81105fdaa0beb04632a6ce5a05f57b424d97dd1326db460b58a3
7
- data.tar.gz: a61e7d290d229a990df2e75af28f27f01ef73afbc5aaf8fabea882d8efbbf15e631fcaedf975076e1776a018194cc8ad6c3d304d0baaf5e344c962fc02e2d626
6
+ metadata.gz: 88ba90c30234850aea96ef88fa41592429634a475fce24d931396a17b1214fa6c9e4080e04d754cb7429629e007dff51a6ecf6a94346ccea0ddae02d7af8ddfc
7
+ data.tar.gz: 5b3a241597f592be576678ac36e6c2196bb9efca62442c2ba27dd8fb185db70028d30e6185845a122fa7276f43bac21195db3388308413927faad6b7032ebd7b
data/Gemfile.lock ADDED
@@ -0,0 +1,107 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ flow_client (0.2.2)
5
+ grpc
6
+ grpc-tools
7
+ json
8
+ openssl
9
+ rlp
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ ast (2.4.2)
15
+ coderay (1.1.3)
16
+ diff-lcs (1.4.4)
17
+ ffi (1.15.4)
18
+ formatador (0.3.0)
19
+ google-protobuf (3.19.1-x86_64-darwin)
20
+ googleapis-common-protos-types (1.3.0)
21
+ google-protobuf (~> 3.14)
22
+ grpc (1.41.0-universal-darwin)
23
+ google-protobuf (~> 3.17)
24
+ googleapis-common-protos-types (~> 1.0)
25
+ grpc-tools (1.41.0)
26
+ guard (2.18.0)
27
+ formatador (>= 0.2.4)
28
+ listen (>= 2.7, < 4.0)
29
+ lumberjack (>= 1.0.12, < 2.0)
30
+ nenv (~> 0.1)
31
+ notiffany (~> 0.0)
32
+ pry (>= 0.13.0)
33
+ shellany (~> 0.0)
34
+ thor (>= 0.18.1)
35
+ guard-compat (1.2.1)
36
+ guard-rspec (4.7.3)
37
+ guard (~> 2.1)
38
+ guard-compat (~> 1.1)
39
+ rspec (>= 2.99.0, < 4.0)
40
+ ipaddr (1.2.3)
41
+ json (2.6.1)
42
+ listen (3.7.0)
43
+ rb-fsevent (~> 0.10, >= 0.10.3)
44
+ rb-inotify (~> 0.9, >= 0.9.10)
45
+ lumberjack (1.2.8)
46
+ method_source (1.0.0)
47
+ nenv (0.3.0)
48
+ notiffany (0.1.3)
49
+ nenv (~> 0.1)
50
+ shellany (~> 0.0)
51
+ openssl (2.2.1)
52
+ ipaddr
53
+ parallel (1.21.0)
54
+ parser (3.0.2.0)
55
+ ast (~> 2.4.1)
56
+ pry (0.14.1)
57
+ coderay (~> 1.1)
58
+ method_source (~> 1.0)
59
+ rainbow (3.0.0)
60
+ rake (13.0.6)
61
+ rb-fsevent (0.11.0)
62
+ rb-inotify (0.10.1)
63
+ ffi (~> 1.0)
64
+ regexp_parser (2.1.1)
65
+ rexml (3.2.5)
66
+ rlp (0.7.3)
67
+ rspec (3.10.0)
68
+ rspec-core (~> 3.10.0)
69
+ rspec-expectations (~> 3.10.0)
70
+ rspec-mocks (~> 3.10.0)
71
+ rspec-core (3.10.1)
72
+ rspec-support (~> 3.10.0)
73
+ rspec-expectations (3.10.1)
74
+ diff-lcs (>= 1.2.0, < 2.0)
75
+ rspec-support (~> 3.10.0)
76
+ rspec-mocks (3.10.2)
77
+ diff-lcs (>= 1.2.0, < 2.0)
78
+ rspec-support (~> 3.10.0)
79
+ rspec-support (3.10.3)
80
+ rubocop (1.22.3)
81
+ parallel (~> 1.10)
82
+ parser (>= 3.0.0.0)
83
+ rainbow (>= 2.2.2, < 4.0)
84
+ regexp_parser (>= 1.8, < 3.0)
85
+ rexml
86
+ rubocop-ast (>= 1.12.0, < 2.0)
87
+ ruby-progressbar (~> 1.7)
88
+ unicode-display_width (>= 1.4.0, < 3.0)
89
+ rubocop-ast (1.13.0)
90
+ parser (>= 3.0.1.1)
91
+ ruby-progressbar (1.11.0)
92
+ shellany (0.0.1)
93
+ thor (1.1.0)
94
+ unicode-display_width (2.1.0)
95
+
96
+ PLATFORMS
97
+ x86_64-darwin-20
98
+
99
+ DEPENDENCIES
100
+ flow_client!
101
+ guard-rspec (~> 4.7)
102
+ rake (~> 13.0)
103
+ rspec (~> 3.0)
104
+ rubocop (~> 1.22)
105
+
106
+ BUNDLED WITH
107
+ 2.2.26
data/README.md CHANGED
@@ -669,7 +669,7 @@ After a transaction has been [built](#build-transactions) and [signed](#sign-tra
669
669
  ```ruby
670
670
  tx_res = client.send_transaction(@transaction)
671
671
  client.wait_for_transaction(tx_res.id) do |response|
672
- expect(response.status_code).to eq(0)
672
+ # use response here
673
673
  end
674
674
  ```
675
675
 
data/bin/console CHANGED
File without changes
@@ -24,6 +24,7 @@ module FlowClient
24
24
  @keys = keys
25
25
  @address = address
26
26
  @balance = balance
27
+ @contracts = contracts
27
28
  @contracts = {}
28
29
  end
29
30
  end
@@ -1,5 +1,6 @@
1
- module FlowClient
1
+ # frozen_string_literal: true
2
2
 
3
+ module FlowClient
3
4
  # Represents a block
4
5
  class Block
5
6
  attr_accessor :id,
@@ -9,7 +10,7 @@ module FlowClient
9
10
  :collection_guarantees,
10
11
  :block_seals,
11
12
  :signatures
12
-
13
+
13
14
  def initialize
14
15
  @id = nil
15
16
  @parent_id = nil
@@ -26,8 +27,12 @@ module FlowClient
26
27
  block.parent_id = block_response.block.parent_id.unpack1("H*")
27
28
  block.height = block_response.block.height
28
29
  block.timestamp = FlowClient::Utils.parse_protobuf_timestamp(block_response.block.timestamp)
29
- block.collection_guarantees = block_response.block.collection_guarantees.to_a.map { |cg| FlowClient::CollectionGuarantee.parse_grpc_type(cg) }
30
- block.block_seals = block_response.block.block_seals.to_a.map { |seal| FlowClient::BlockSeal.parse_grpc_type(seal) }
30
+ block.collection_guarantees = block_response.block.collection_guarantees.to_a.map do |cg|
31
+ FlowClient::CollectionGuarantee.parse_grpc_type(cg)
32
+ end
33
+ block.block_seals = block_response.block.block_seals.to_a.map do |seal|
34
+ FlowClient::BlockSeal.parse_grpc_type(seal)
35
+ end
31
36
  block.signatures = block_response.block.signatures.to_a.map { |sig| sig.unpack1("H*") }
32
37
  block
33
38
  end
@@ -51,7 +56,9 @@ module FlowClient
51
56
  block_seal = BlockSeal.new
52
57
  block_seal.block_id = grpc_type.block_id.unpack1("H*")
53
58
  block_seal.execution_receipt_id = grpc_type.execution_receipt_id.unpack1("H*")
54
- block_seal.execution_receipt_signatures = grpc_type.execution_receipt_signatures.to_a.map { |sig| sig.unpack1("H*") }
59
+ block_seal.execution_receipt_signatures = grpc_type.execution_receipt_signatures.to_a.map do |sig|
60
+ sig.unpack1("H*")
61
+ end
55
62
  block_seal.result_approval_signatures = grpc_type.result_approval_signatures.to_a.map { |sig| sig.unpack1("H*") }
56
63
  block_seal
57
64
  end
@@ -61,8 +68,7 @@ module FlowClient
61
68
  class BlockHeader
62
69
  attr_accessor :id, :parent_id, :height, :timestamp
63
70
 
64
- def initialize
65
- end
71
+ def initialize; end
66
72
 
67
73
  def self.parse_grpc_type(grpc_type)
68
74
  header = BlockHeader.new
@@ -72,4 +78,4 @@ module FlowClient
72
78
  header
73
79
  end
74
80
  end
75
- end
81
+ end
@@ -1,16 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "ostruct"
2
4
 
3
5
  module FlowClient
4
6
  module CadenceType
7
+ # Returns an OpenStruct representing a Cadence String type
8
+ #
9
+ # @example
10
+ # @arg = FlowClient::CadenceType.String("Hello world!")
11
+ #
12
+ # @param [String] the string value
13
+ #
14
+ # @returns [OpenStruct] the Cadence String struct
5
15
  def self.String(value)
6
16
  OpenStruct.new(type: "String", value: value.to_s)
7
17
  end
8
18
 
19
+ # Returns an OpenStruct representing a Cadence Optional type
20
+ #
21
+ # @example
22
+ # @arg = FlowClient::CadenceType.Optional("Hello world!")
23
+ # @arg = FlowClient::CadenceType.Optional()
24
+ #
25
+ # @param [String] the string value
26
+ #
27
+ # @returns [OpenStruct] the Cadence Optional struct
9
28
  def self.Optional(value = nil)
10
29
  OpenStruct.new(type: "Optional", value: value)
11
30
  end
12
31
 
13
- def self.Void()
32
+ # Returns an OpenStruct representing a Cadence Void type
33
+ #
34
+ # @example
35
+ # @arg = FlowClient::CadenceType.Void()
36
+ #
37
+ # @returns [OpenStruct] the Cadence Void struct
38
+ def self.Void
14
39
  OpenStruct.new(type: "Void")
15
40
  end
16
41
 
@@ -62,14 +87,6 @@ module FlowClient
62
87
  OpenStruct.new(type: "UInt64", value: value.to_s)
63
88
  end
64
89
 
65
- def self.Int64(value)
66
- OpenStruct.new(type: "Int64", value: value.to_s)
67
- end
68
-
69
- def self.UInt64(value)
70
- OpenStruct.new(type: "UInt64", value: value.to_s)
71
- end
72
-
73
90
  def self.Int128(value)
74
91
  OpenStruct.new(type: "Int128", value: value.to_s)
75
92
  end
@@ -123,9 +140,9 @@ module FlowClient
123
140
  end
124
141
 
125
142
  def self.Path(domain, identifier)
126
- raise raise ArgumentError.new(
127
- "Domain can only be one of storage, private or public"
128
- ) unless ["storage", "private", "public"].include? domain.to_s.downcase
143
+ unless %w[storage private public].include? domain.to_s.downcase
144
+ raise raise ArgumentError, "Domain can only be one of storage, private or public"
145
+ end
129
146
 
130
147
  OpenStruct.new(
131
148
  type: "Path",
@@ -149,8 +166,11 @@ module FlowClient
149
166
  end
150
167
 
151
168
  def self.Composite(type, value)
152
- valid_types = [:struct, :resource, :event, :contract, :enum]
153
- raise ArgumentError.new("incorrect type, expected :struct, :resource, :event, :contract or :enum") unless valid_types.include? type
169
+ valid_types = %i[struct resource event contract enum]
170
+ unless valid_types.include? type
171
+ raise ArgumentError, "incorrect type, expected :struct, :resource, :event, :contract or :enum"
172
+ end
173
+
154
174
  OpenStruct.new(type: type.to_s.capitalize, value: value)
155
175
  end
156
176
 
@@ -162,4 +182,4 @@ module FlowClient
162
182
  OpenStruct.new(name: name, value: value)
163
183
  end
164
184
  end
165
- end
185
+ end
@@ -31,6 +31,8 @@ module FlowClient
31
31
  # Returns an account for the address specified at the latest
32
32
  # block.
33
33
  #
34
+ # @param [String] the address string value
35
+ #
34
36
  # @return [FlowClient::Account] the account
35
37
  def get_account(address)
36
38
  req = Access::GetAccountAtLatestBlockRequest.new(address: to_bytes(address))
@@ -252,6 +254,8 @@ module FlowClient
252
254
 
253
255
  # Returns the latest with height
254
256
  #
257
+ # @param [Integer] block height
258
+ #
255
259
  # @return [FlowClient::Block] the block
256
260
  def get_block_by_height(height)
257
261
  req = Access::GetBlockByHeightRequest.new(
@@ -265,6 +269,8 @@ module FlowClient
265
269
 
266
270
  # Returns the collection with id
267
271
  #
272
+ # @param [String] collection id
273
+ #
268
274
  # @return [FlowClient::Collection] the collection
269
275
  def get_collection_by_id(id)
270
276
  req = Access::GetCollectionByIDRequest.new(
@@ -276,7 +282,13 @@ module FlowClient
276
282
 
277
283
  # :section: Events
278
284
 
279
- # Returns events of the given type between the start and end block heights.
285
+ # Returns events of the given type between the start and end block heights
286
+ #
287
+ # @param [String] event name
288
+ # @param [Integer] start block height
289
+ # @param [Integer] end block height
290
+ #
291
+ # @return [FlowClient::EventsResult] the events response
280
292
  def get_events(type, start_height, end_height)
281
293
  req = Access::GetEventsForHeightRangeRequest.new(
282
294
  type: type,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowClient
2
4
  class Collection
3
5
  attr_accessor :id, :transaction_ids
@@ -30,4 +32,4 @@ module FlowClient
30
32
  collection_guarantee
31
33
  end
32
34
  end
33
- end
35
+ end
@@ -19,7 +19,7 @@ module FlowClient
19
19
  def self.sign(data, private_key_hex, hash_algo = HashAlgos::SHA3_256)
20
20
  ssl_key = FlowClient::Crypto.key_from_hex_keys(private_key_hex)
21
21
  # TODO: Fix this so that both hashing algos will work
22
- asn = ssl_key.dsa_sign_asn1(OpenSSL::Digest.digest("SHA3-256", data))
22
+ asn = ssl_key.dsa_sign_asn1(OpenSSL::Digest.digest(hash_algo, data))
23
23
  r, s = OpenSSL::ASN1.decode(asn).value
24
24
  combined_bytes = Utils.left_pad_bytes([r.value.to_s(16)].pack("H*").unpack("C*"), 32) +
25
25
  Utils.left_pad_bytes([s.value.to_s(16)].pack("H*").unpack("C*"), 32)
@@ -46,7 +46,7 @@ module FlowClient
46
46
  # Crypto::Curves::SECP256K1
47
47
  #
48
48
  # The 04 prefix indicating that the public key is uncompressed is stripped.
49
- # https://datatracker.ietf.org/doc/html/rfc5480
49
+ # @see https://datatracker.ietf.org/doc/html/rfc5480
50
50
  #
51
51
  # Usage example:
52
52
  # private_key, public_key = FlowClient::Crypto.generate_key_pair(FlowClient::Crypto::Curves::P256)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowClient
2
4
  class EventsResult
3
5
  attr_accessor :block_id,
@@ -9,7 +11,7 @@ module FlowClient
9
11
  @block_id = nil
10
12
  @block_height = nil
11
13
  @events = nil
12
- @block_timestamp= nil
14
+ @block_timestamp = nil
13
15
  end
14
16
 
15
17
  def self.parse_grpc_type(type)
@@ -28,7 +30,7 @@ module FlowClient
28
30
  :transaction_index,
29
31
  :event_index,
30
32
  :payload
31
-
33
+
32
34
  def initialize
33
35
  @type = nil
34
36
  @transaction_id = nil
@@ -47,4 +49,4 @@ module FlowClient
47
49
  event
48
50
  end
49
51
  end
50
- end
52
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowClient
2
4
  class ProposalKey
3
5
  attr_accessor :address,
@@ -18,4 +20,4 @@ module FlowClient
18
20
  signature
19
21
  end
20
22
  end
21
- end
23
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FlowClient
2
4
  class Signature
3
5
  attr_accessor :address,
@@ -18,4 +20,4 @@ module FlowClient
18
20
  signature
19
21
  end
20
22
  end
21
- end
23
+ end
@@ -16,8 +16,6 @@ module FlowClient
16
16
  :payer_address,
17
17
  :authorizer_addresses,
18
18
  :address_aliases,
19
- :envelope_signatures,
20
- :payload_signatures,
21
19
  :proposal_key
22
20
 
23
21
  attr_reader :envelope_signatures, :payload_signatures
@@ -36,7 +34,7 @@ module FlowClient
36
34
 
37
35
  def arguments=(arguments)
38
36
  arguments.to_a.each do |arg|
39
- processed_arg = arg.class == OpenStruct ? Utils.openstruct_to_json(arg) : arg
37
+ processed_arg = arg.instance_of?(OpenStruct) ? Utils.openstruct_to_json(arg) : arg
40
38
  @arguments << processed_arg
41
39
  end
42
40
  end
@@ -189,4 +187,4 @@ module FlowClient
189
187
  response
190
188
  end
191
189
  end
192
- end
190
+ end
@@ -47,18 +47,7 @@ module FlowClient
47
47
 
48
48
  def self.openstruct_to_json(struct)
49
49
  struct.deep_to_h.to_json
50
- # struct.each_pair.map do |key, value|
51
- # [
52
- # key,
53
- # case value
54
- # when OpenStruct then value.deep_to_h
55
- # when Array then value.map {|el| el.class == OpenStruct ? el.deep_to_h : el}
56
- # else value
57
- # end
58
- # ]
59
- # end.to_h.to_json
60
50
  end
61
-
62
51
  end
63
52
  end
64
53
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FlowClient
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
data/lib/flow_client.rb CHANGED
@@ -17,6 +17,6 @@ module FlowClient
17
17
  require "flow_client/signer"
18
18
  require "flow_client/proposal_key"
19
19
  require "flow_client/event"
20
- require "flow_client/cadence_type.rb"
20
+ require "flow_client/cadence_type"
21
21
  require "flow_client/signature"
22
22
  end
data/template.md CHANGED
@@ -669,7 +669,7 @@ After a transaction has been [built](#build-transactions) and [signed](#sign-tra
669
669
  ```ruby
670
670
  tx_res = client.send_transaction(@transaction)
671
671
  client.wait_for_transaction(tx_res.id) do |response|
672
- expect(response.status_code).to eq(0)
672
+ # use response here
673
673
  end
674
674
  ```
675
675
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flow_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nico du Plessis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-10 00:00:00.000000000 Z
11
+ date: 2021-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
@@ -94,6 +94,7 @@ files:
94
94
  - CHANGELOG.md
95
95
  - CODE_OF_CONDUCT.md
96
96
  - Gemfile
97
+ - Gemfile.lock
97
98
  - Guardfile
98
99
  - LICENSE.txt
99
100
  - README.md
@@ -155,7 +156,7 @@ metadata:
155
156
  homepage_uri: https://github.com/glucode/flow_client
156
157
  source_code_uri: https://github.com/glucode/flow_client
157
158
  changelog_uri: https://github.com/glucode/flow_client
158
- post_install_message:
159
+ post_install_message:
159
160
  rdoc_options: []
160
161
  require_paths:
161
162
  - lib
@@ -170,8 +171,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
171
  - !ruby/object:Gem::Version
171
172
  version: '0'
172
173
  requirements: []
173
- rubygems_version: 3.0.3.1
174
- signing_key:
174
+ rubygems_version: 3.2.15
175
+ signing_key:
175
176
  specification_version: 4
176
177
  summary: A Ruby client for the Flow blockchain
177
178
  test_files: []