fabric-gateway 0.0.2 → 0.4.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 +4 -4
- data/.editorconfig +3 -0
- data/.github/workflows/codeql-analysis.yml +71 -0
- data/.github/workflows/rspec.yml +37 -0
- data/.github/workflows/rubocop.yml +28 -0
- data/.github/workflows/todo.yml +10 -0
- data/.github/workflows/yardoc.yml +28 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +23 -0
- data/.ruby-version +1 -0
- data/.vscode/settings.json +7 -0
- data/.yardopts +8 -0
- data/CODE_OF_CONDUCT.md +105 -46
- data/Gemfile +5 -3
- data/LICENSE.txt +1 -1
- data/README.md +123 -12
- data/Rakefile +6 -3
- data/bin/console +4 -3
- data/bin/regenerate +1 -0
- data/bin/release +5 -0
- data/fabric-gateway.gemspec +31 -17
- data/lib/fabric/accessors/contract.rb +51 -0
- data/lib/fabric/accessors/gateway.rb +33 -0
- data/lib/fabric/accessors/network.rb +40 -0
- data/lib/fabric/client.rb +199 -0
- data/lib/fabric/constants.rb +8 -0
- data/lib/fabric/contract.rb +178 -0
- data/lib/fabric/ec_crypto_suite.rb +199 -0
- data/lib/fabric/entities/chaincode_events_requests.rb +166 -0
- data/lib/fabric/entities/envelope.rb +158 -0
- data/lib/fabric/entities/identity.rb +87 -0
- data/lib/fabric/entities/proposal.rb +189 -0
- data/lib/fabric/entities/proposed_transaction.rb +163 -0
- data/lib/fabric/entities/status.rb +32 -0
- data/lib/fabric/entities/transaction.rb +247 -0
- data/lib/fabric/gateway.rb +31 -6
- data/lib/fabric/network.rb +70 -0
- data/lib/fabric/version.rb +5 -0
- data/lib/fabric.rb +59 -0
- data/lib/msp/identities_pb.rb +25 -0
- metadata +162 -13
- data/Gemfile.lock +0 -42
- data/lib/fabric/gateway/version.rb +0 -5
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fabric
|
4
|
+
#
|
5
|
+
# Network represents a blockchain network, or Fabric channel. The Network can be used to access deployed smart
|
6
|
+
# contracts, and to listen for events emitted when blocks are committed to the ledger.
|
7
|
+
#
|
8
|
+
# JChan & THowe believe this should be called a Channel, however Hyperledger Fabric has decided upon the terminology
|
9
|
+
# network - https://github.com/hyperledger/fabric-gateway/issues/355#issuecomment-997888071
|
10
|
+
#
|
11
|
+
class Network
|
12
|
+
attr_reader :gateway, :name
|
13
|
+
|
14
|
+
# @!parse include Fabric::Accessors::Gateway
|
15
|
+
include Fabric::Accessors::Gateway
|
16
|
+
|
17
|
+
def initialize(gateway, name)
|
18
|
+
@gateway = gateway
|
19
|
+
@name = name
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# Creates a new contract instance
|
24
|
+
#
|
25
|
+
# @param [string] chaincode_name name of the chaincode
|
26
|
+
# @param [string] contract_name optional name of the contract
|
27
|
+
#
|
28
|
+
# @return [Fabric::Contract] new contract instance
|
29
|
+
#
|
30
|
+
def new_contract(chaincode_name, contract_name = '')
|
31
|
+
Contract.new(self, chaincode_name, contract_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Get chaincode events emitted by transaction functions of a specific chaincode.
|
36
|
+
#
|
37
|
+
# @see Fabric::Client#chaincode_events Fabric::Client#chaincode_events - explanation of the different return types
|
38
|
+
# and example usage.
|
39
|
+
# @see https://www.rubydoc.info/gems/grpc/GRPC%2FClientStub:server_streamer Call options for options parameter
|
40
|
+
#
|
41
|
+
# @param [Fabric::Contract] contract the chaincode to listen for events on
|
42
|
+
# @param [Integer] start_block Block number at which to start reading chaincode events.
|
43
|
+
# @param [Hash] call_options gRPC call options (merged with default_call_options from initializer)
|
44
|
+
# @yield [chaincode_event] loops through the chaincode events
|
45
|
+
# @yieldparam chaincode_event [Gateway::ChaincodeEventsResponse] the chaincode event
|
46
|
+
#
|
47
|
+
# @return [Enumerator|GRPC::ActiveCall::Operation|nil] Dependent on parameters passed;
|
48
|
+
# please see Fabric::Client#get_chaincode_events
|
49
|
+
#
|
50
|
+
def chaincode_events(contract, start_block: nil, call_options: {}, &block)
|
51
|
+
new_chaincode_events_request(contract, start_block: start_block).get_events(call_options, &block)
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Create a request to receive chaincode events emitted by transaction functions of a specific chaincode. Supports
|
56
|
+
# off-line signing flow.
|
57
|
+
#
|
58
|
+
# @note I'm lying. I just copy and pasted the description from the node SDK. Offline signing should work, but it has
|
59
|
+
# not been explicitly tested.
|
60
|
+
# @todo Test off-line signing flow.
|
61
|
+
#
|
62
|
+
# @param [Fabric::Contract] contract the chaincode to listen for events on
|
63
|
+
# @param [Integer] start_block Block number at which to start reading chaincode events.
|
64
|
+
# @return [Fabric::ChaincodeEventsRequest] Encapsulated ChaincodeEventsRequest
|
65
|
+
#
|
66
|
+
def new_chaincode_events_request(contract, start_block: nil)
|
67
|
+
ChaincodeEventsRequest.new(contract, start_block: start_block)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/fabric.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'gateway/gateway_pb'
|
4
|
+
require 'gateway/gateway_services_pb'
|
5
|
+
|
6
|
+
require 'fabric/accessors/gateway'
|
7
|
+
require 'fabric/accessors/network'
|
8
|
+
require 'fabric/accessors/contract'
|
9
|
+
|
10
|
+
require 'fabric/entities/envelope'
|
11
|
+
require 'fabric/entities/identity'
|
12
|
+
require 'fabric/entities/proposal'
|
13
|
+
require 'fabric/entities/proposed_transaction'
|
14
|
+
require 'fabric/entities/status'
|
15
|
+
require 'fabric/entities/transaction'
|
16
|
+
require 'fabric/entities/chaincode_events_requests'
|
17
|
+
|
18
|
+
require 'fabric/constants'
|
19
|
+
require 'fabric/contract'
|
20
|
+
require 'fabric/client'
|
21
|
+
require 'fabric/ec_crypto_suite'
|
22
|
+
require 'fabric/gateway'
|
23
|
+
require 'fabric/network'
|
24
|
+
require 'fabric/version'
|
25
|
+
|
26
|
+
#
|
27
|
+
# Hyperledger Fabric Gateway SDK
|
28
|
+
#
|
29
|
+
module Fabric
|
30
|
+
class Error < StandardError; end
|
31
|
+
class InvalidArgument < Error; end
|
32
|
+
class NotYetImplemented < Error; end
|
33
|
+
|
34
|
+
#
|
35
|
+
# CommitError
|
36
|
+
#
|
37
|
+
# TODO: Add RSpec Tests for CommitError
|
38
|
+
# @todo TEST ME!
|
39
|
+
#
|
40
|
+
class CommitError < Error
|
41
|
+
attr_reader :code, :transaction_id
|
42
|
+
|
43
|
+
#
|
44
|
+
# Creates a transaction commit error from the status
|
45
|
+
#
|
46
|
+
# @param [Fabric::Status] status transaction status
|
47
|
+
#
|
48
|
+
def initialize(status)
|
49
|
+
super("Transaction #{status.transaction_id} failed to commit with status code #{status.code} - " +
|
50
|
+
Status::TRANSACTION_STATUSES.key(status.code).to_s)
|
51
|
+
@code = code
|
52
|
+
@transaction_id = status.transaction_id
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.crypto_suite(opts = {})
|
57
|
+
@crypto_suite ||= Fabric::ECCryptoSuite.new opts
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: msp/identities.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_file("msp/identities.proto", :syntax => :proto3) do
|
8
|
+
add_message "msp.SerializedIdentity" do
|
9
|
+
optional :mspid, :string, 1
|
10
|
+
optional :id_bytes, :bytes, 2
|
11
|
+
end
|
12
|
+
add_message "msp.SerializedIdemixIdentity" do
|
13
|
+
optional :nym_x, :bytes, 1
|
14
|
+
optional :nym_y, :bytes, 2
|
15
|
+
optional :ou, :bytes, 3
|
16
|
+
optional :role, :bytes, 4
|
17
|
+
optional :proof, :bytes, 5
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module Msp
|
23
|
+
SerializedIdentity = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("msp.SerializedIdentity").msgclass
|
24
|
+
SerializedIdemixIdentity = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("msp.SerializedIdemixIdentity").msgclass
|
25
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fabric-gateway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Chan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-protobuf
|
@@ -38,40 +38,192 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.42'
|
41
|
-
|
42
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: codecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.6.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.6.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: factory_bot
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 6.2.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 6.2.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: grpc-tools
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.42'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.42'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake-notes
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.2.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.2.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.23.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.23.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.6.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.6.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.21.2
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.21.2
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: timecop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.9.4
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.9.4
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: yard
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.9.27
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.9.27
|
167
|
+
description: Ruby port of the Hyperledger Fabric Gateway SDK
|
43
168
|
email:
|
44
169
|
- jonathan.chan@ethicalidentity.com
|
45
170
|
executables: []
|
46
171
|
extensions: []
|
47
172
|
extra_rdoc_files: []
|
48
173
|
files:
|
174
|
+
- ".editorconfig"
|
175
|
+
- ".github/workflows/codeql-analysis.yml"
|
176
|
+
- ".github/workflows/rspec.yml"
|
177
|
+
- ".github/workflows/rubocop.yml"
|
178
|
+
- ".github/workflows/todo.yml"
|
179
|
+
- ".github/workflows/yardoc.yml"
|
49
180
|
- ".gitignore"
|
50
181
|
- ".gitmodules"
|
51
182
|
- ".rspec"
|
183
|
+
- ".rubocop.yml"
|
184
|
+
- ".ruby-version"
|
52
185
|
- ".travis.yml"
|
186
|
+
- ".vscode/settings.json"
|
187
|
+
- ".yardopts"
|
53
188
|
- CHANGELOG.md
|
54
189
|
- CODE_OF_CONDUCT.md
|
55
190
|
- Gemfile
|
56
|
-
- Gemfile.lock
|
57
191
|
- LICENSE.txt
|
58
192
|
- README.md
|
59
193
|
- Rakefile
|
60
194
|
- TAGS
|
61
195
|
- bin/console
|
62
196
|
- bin/regenerate
|
197
|
+
- bin/release
|
63
198
|
- bin/setup
|
64
199
|
- fabric-gateway.gemspec
|
65
200
|
- lib/.DS_Store
|
66
201
|
- lib/common/common_pb.rb
|
67
202
|
- lib/common/policies_pb.rb
|
203
|
+
- lib/fabric.rb
|
68
204
|
- lib/fabric/.DS_Store
|
205
|
+
- lib/fabric/accessors/contract.rb
|
206
|
+
- lib/fabric/accessors/gateway.rb
|
207
|
+
- lib/fabric/accessors/network.rb
|
208
|
+
- lib/fabric/client.rb
|
209
|
+
- lib/fabric/constants.rb
|
210
|
+
- lib/fabric/contract.rb
|
211
|
+
- lib/fabric/ec_crypto_suite.rb
|
212
|
+
- lib/fabric/entities/chaincode_events_requests.rb
|
213
|
+
- lib/fabric/entities/envelope.rb
|
214
|
+
- lib/fabric/entities/identity.rb
|
215
|
+
- lib/fabric/entities/proposal.rb
|
216
|
+
- lib/fabric/entities/proposed_transaction.rb
|
217
|
+
- lib/fabric/entities/status.rb
|
218
|
+
- lib/fabric/entities/transaction.rb
|
69
219
|
- lib/fabric/gateway.rb
|
70
|
-
- lib/fabric/
|
220
|
+
- lib/fabric/network.rb
|
221
|
+
- lib/fabric/version.rb
|
71
222
|
- lib/gateway/gateway_pb.rb
|
72
223
|
- lib/gateway/gateway_services_pb.rb
|
73
224
|
- lib/gossip/message_pb.rb
|
74
225
|
- lib/gossip/message_services_pb.rb
|
226
|
+
- lib/msp/identities_pb.rb
|
75
227
|
- lib/msp/msp_principal_pb.rb
|
76
228
|
- lib/orderer/ab_pb.rb
|
77
229
|
- lib/orderer/ab_services_pb.rb
|
@@ -84,10 +236,7 @@ homepage: https://github.com/ethicalidentity/fabric-gateway-ruby
|
|
84
236
|
licenses:
|
85
237
|
- MIT
|
86
238
|
metadata:
|
87
|
-
|
88
|
-
homepage_uri: https://github.com/ethicalidentity/fabric-gateway-ruby
|
89
|
-
source_code_uri: https://github.com/ethicalidentity/fabric-gateway-ruby
|
90
|
-
changelog_uri: https://github.com/EthicalIdentity/fabric-gateway-ruby/blob/master/CHANGELOG.md
|
239
|
+
rubygems_mfa_required: 'true'
|
91
240
|
post_install_message:
|
92
241
|
rdoc_options: []
|
93
242
|
require_paths:
|
@@ -96,15 +245,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
245
|
requirements:
|
97
246
|
- - ">="
|
98
247
|
- !ruby/object:Gem::Version
|
99
|
-
version: 2.
|
248
|
+
version: 2.6.0
|
100
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
250
|
requirements:
|
102
251
|
- - ">="
|
103
252
|
- !ruby/object:Gem::Version
|
104
253
|
version: '0'
|
105
254
|
requirements: []
|
106
|
-
rubygems_version: 3.
|
255
|
+
rubygems_version: 3.1.6
|
107
256
|
signing_key:
|
108
257
|
specification_version: 4
|
109
|
-
summary: Hyperledger Fabric Gateway
|
258
|
+
summary: Hyperledger Fabric Gateway SDK
|
110
259
|
test_files: []
|
data/Gemfile.lock
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
fabric-gateway (0.0.1)
|
5
|
-
google-protobuf (>= 3.19.1)
|
6
|
-
grpc (~> 1.42)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
diff-lcs (1.4.4)
|
12
|
-
google-protobuf (3.19.1)
|
13
|
-
googleapis-common-protos-types (1.3.0)
|
14
|
-
google-protobuf (~> 3.14)
|
15
|
-
grpc (1.42.0)
|
16
|
-
google-protobuf (~> 3.18)
|
17
|
-
googleapis-common-protos-types (~> 1.0)
|
18
|
-
rake (12.3.2)
|
19
|
-
rspec (3.10.0)
|
20
|
-
rspec-core (~> 3.10.0)
|
21
|
-
rspec-expectations (~> 3.10.0)
|
22
|
-
rspec-mocks (~> 3.10.0)
|
23
|
-
rspec-core (3.10.1)
|
24
|
-
rspec-support (~> 3.10.0)
|
25
|
-
rspec-expectations (3.10.1)
|
26
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
27
|
-
rspec-support (~> 3.10.0)
|
28
|
-
rspec-mocks (3.10.2)
|
29
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
30
|
-
rspec-support (~> 3.10.0)
|
31
|
-
rspec-support (3.10.3)
|
32
|
-
|
33
|
-
PLATFORMS
|
34
|
-
ruby
|
35
|
-
|
36
|
-
DEPENDENCIES
|
37
|
-
fabric-gateway!
|
38
|
-
rake (~> 12.0)
|
39
|
-
rspec (~> 3.0)
|
40
|
-
|
41
|
-
BUNDLED WITH
|
42
|
-
2.1.4
|