diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Managed Blockchain SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-09-24@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-managedblockchain)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.ManagedBlockChain](http://hackage.haskell.org/package/amazonka-managedblockchain/docs/Amazonka-ManagedBlockChain.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-managedblockchain` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-managedblockchain.cabal b/amazonka-managedblockchain.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-managedblockchain.cabal
@@ -0,0 +1,159 @@
+cabal-version:      2.2
+name:               amazonka-managedblockchain
+version:            2.0
+synopsis:           Amazon Managed Blockchain SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2018-09-24@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.ManagedBlockChain.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.ManagedBlockChain" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-managedblockchain
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.ManagedBlockChain
+    Amazonka.ManagedBlockChain.CreateAccessor
+    Amazonka.ManagedBlockChain.CreateMember
+    Amazonka.ManagedBlockChain.CreateNetwork
+    Amazonka.ManagedBlockChain.CreateNode
+    Amazonka.ManagedBlockChain.CreateProposal
+    Amazonka.ManagedBlockChain.DeleteAccessor
+    Amazonka.ManagedBlockChain.DeleteMember
+    Amazonka.ManagedBlockChain.DeleteNode
+    Amazonka.ManagedBlockChain.GetAccessor
+    Amazonka.ManagedBlockChain.GetMember
+    Amazonka.ManagedBlockChain.GetNetwork
+    Amazonka.ManagedBlockChain.GetNode
+    Amazonka.ManagedBlockChain.GetProposal
+    Amazonka.ManagedBlockChain.Lens
+    Amazonka.ManagedBlockChain.ListAccessors
+    Amazonka.ManagedBlockChain.ListInvitations
+    Amazonka.ManagedBlockChain.ListMembers
+    Amazonka.ManagedBlockChain.ListNetworks
+    Amazonka.ManagedBlockChain.ListNodes
+    Amazonka.ManagedBlockChain.ListProposals
+    Amazonka.ManagedBlockChain.ListProposalVotes
+    Amazonka.ManagedBlockChain.ListTagsForResource
+    Amazonka.ManagedBlockChain.RejectInvitation
+    Amazonka.ManagedBlockChain.TagResource
+    Amazonka.ManagedBlockChain.Types
+    Amazonka.ManagedBlockChain.Types.Accessor
+    Amazonka.ManagedBlockChain.Types.AccessorStatus
+    Amazonka.ManagedBlockChain.Types.AccessorSummary
+    Amazonka.ManagedBlockChain.Types.AccessorType
+    Amazonka.ManagedBlockChain.Types.ApprovalThresholdPolicy
+    Amazonka.ManagedBlockChain.Types.Edition
+    Amazonka.ManagedBlockChain.Types.Framework
+    Amazonka.ManagedBlockChain.Types.Invitation
+    Amazonka.ManagedBlockChain.Types.InvitationStatus
+    Amazonka.ManagedBlockChain.Types.InviteAction
+    Amazonka.ManagedBlockChain.Types.LogConfiguration
+    Amazonka.ManagedBlockChain.Types.LogConfigurations
+    Amazonka.ManagedBlockChain.Types.Member
+    Amazonka.ManagedBlockChain.Types.MemberConfiguration
+    Amazonka.ManagedBlockChain.Types.MemberFabricAttributes
+    Amazonka.ManagedBlockChain.Types.MemberFabricConfiguration
+    Amazonka.ManagedBlockChain.Types.MemberFabricLogPublishingConfiguration
+    Amazonka.ManagedBlockChain.Types.MemberFrameworkAttributes
+    Amazonka.ManagedBlockChain.Types.MemberFrameworkConfiguration
+    Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration
+    Amazonka.ManagedBlockChain.Types.MemberStatus
+    Amazonka.ManagedBlockChain.Types.MemberSummary
+    Amazonka.ManagedBlockChain.Types.Network
+    Amazonka.ManagedBlockChain.Types.NetworkEthereumAttributes
+    Amazonka.ManagedBlockChain.Types.NetworkFabricAttributes
+    Amazonka.ManagedBlockChain.Types.NetworkFabricConfiguration
+    Amazonka.ManagedBlockChain.Types.NetworkFrameworkAttributes
+    Amazonka.ManagedBlockChain.Types.NetworkFrameworkConfiguration
+    Amazonka.ManagedBlockChain.Types.NetworkStatus
+    Amazonka.ManagedBlockChain.Types.NetworkSummary
+    Amazonka.ManagedBlockChain.Types.Node
+    Amazonka.ManagedBlockChain.Types.NodeConfiguration
+    Amazonka.ManagedBlockChain.Types.NodeEthereumAttributes
+    Amazonka.ManagedBlockChain.Types.NodeFabricAttributes
+    Amazonka.ManagedBlockChain.Types.NodeFabricLogPublishingConfiguration
+    Amazonka.ManagedBlockChain.Types.NodeFrameworkAttributes
+    Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration
+    Amazonka.ManagedBlockChain.Types.NodeStatus
+    Amazonka.ManagedBlockChain.Types.NodeSummary
+    Amazonka.ManagedBlockChain.Types.Proposal
+    Amazonka.ManagedBlockChain.Types.ProposalActions
+    Amazonka.ManagedBlockChain.Types.ProposalStatus
+    Amazonka.ManagedBlockChain.Types.ProposalSummary
+    Amazonka.ManagedBlockChain.Types.RemoveAction
+    Amazonka.ManagedBlockChain.Types.StateDBType
+    Amazonka.ManagedBlockChain.Types.ThresholdComparator
+    Amazonka.ManagedBlockChain.Types.VoteSummary
+    Amazonka.ManagedBlockChain.Types.VoteValue
+    Amazonka.ManagedBlockChain.Types.VotingPolicy
+    Amazonka.ManagedBlockChain.UntagResource
+    Amazonka.ManagedBlockChain.UpdateMember
+    Amazonka.ManagedBlockChain.UpdateNode
+    Amazonka.ManagedBlockChain.VoteOnProposal
+    Amazonka.ManagedBlockChain.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-managedblockchain-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.ManagedBlockChain
+    Test.Amazonka.ManagedBlockChain
+    Test.Amazonka.ManagedBlockChain.Internal
+
+  build-depends:
+    , amazonka-core               >=2.0 && <2.1
+    , amazonka-managedblockchain
+    , amazonka-test               >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateAccessor.yaml b/fixture/CreateAccessor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccessor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAccessorResponse.proto b/fixture/CreateAccessorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccessorResponse.proto
diff --git a/fixture/CreateMember.yaml b/fixture/CreateMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMember.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateMemberResponse.proto b/fixture/CreateMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMemberResponse.proto
diff --git a/fixture/CreateNetwork.yaml b/fixture/CreateNetwork.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetwork.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkResponse.proto b/fixture/CreateNetworkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkResponse.proto
diff --git a/fixture/CreateNode.yaml b/fixture/CreateNode.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNode.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNodeResponse.proto b/fixture/CreateNodeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNodeResponse.proto
diff --git a/fixture/CreateProposal.yaml b/fixture/CreateProposal.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProposal.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateProposalResponse.proto b/fixture/CreateProposalResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateProposalResponse.proto
diff --git a/fixture/DeleteAccessor.yaml b/fixture/DeleteAccessor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessor.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteAccessorResponse.proto b/fixture/DeleteAccessorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessorResponse.proto
diff --git a/fixture/DeleteMember.yaml b/fixture/DeleteMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMember.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteMemberResponse.proto b/fixture/DeleteMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMemberResponse.proto
diff --git a/fixture/DeleteNode.yaml b/fixture/DeleteNode.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNode.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNodeResponse.proto b/fixture/DeleteNodeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNodeResponse.proto
diff --git a/fixture/GetAccessor.yaml b/fixture/GetAccessor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccessor.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAccessorResponse.proto b/fixture/GetAccessorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccessorResponse.proto
diff --git a/fixture/GetMember.yaml b/fixture/GetMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMember.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetMemberResponse.proto b/fixture/GetMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMemberResponse.proto
diff --git a/fixture/GetNetwork.yaml b/fixture/GetNetwork.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetwork.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetNetworkResponse.proto b/fixture/GetNetworkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkResponse.proto
diff --git a/fixture/GetNode.yaml b/fixture/GetNode.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetNode.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetNodeResponse.proto b/fixture/GetNodeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetNodeResponse.proto
diff --git a/fixture/GetProposal.yaml b/fixture/GetProposal.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetProposal.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetProposalResponse.proto b/fixture/GetProposalResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetProposalResponse.proto
diff --git a/fixture/ListAccessors.yaml b/fixture/ListAccessors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccessors.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListAccessorsResponse.proto b/fixture/ListAccessorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccessorsResponse.proto
diff --git a/fixture/ListInvitations.yaml b/fixture/ListInvitations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListInvitations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListInvitationsResponse.proto b/fixture/ListInvitationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListInvitationsResponse.proto
diff --git a/fixture/ListMembers.yaml b/fixture/ListMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListMembersResponse.proto b/fixture/ListMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMembersResponse.proto
diff --git a/fixture/ListNetworks.yaml b/fixture/ListNetworks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListNetworks.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListNetworksResponse.proto b/fixture/ListNetworksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListNetworksResponse.proto
diff --git a/fixture/ListNodes.yaml b/fixture/ListNodes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListNodes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListNodesResponse.proto b/fixture/ListNodesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListNodesResponse.proto
diff --git a/fixture/ListProposalVotes.yaml b/fixture/ListProposalVotes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProposalVotes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProposalVotesResponse.proto b/fixture/ListProposalVotesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProposalVotesResponse.proto
diff --git a/fixture/ListProposals.yaml b/fixture/ListProposals.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProposals.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProposalsResponse.proto b/fixture/ListProposalsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProposalsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/RejectInvitation.yaml b/fixture/RejectInvitation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectInvitation.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectInvitationResponse.proto b/fixture/RejectInvitationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectInvitationResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateMember.yaml b/fixture/UpdateMember.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMember.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateMemberResponse.proto b/fixture/UpdateMemberResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMemberResponse.proto
diff --git a/fixture/UpdateNode.yaml b/fixture/UpdateNode.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNode.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateNodeResponse.proto b/fixture/UpdateNodeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNodeResponse.proto
diff --git a/fixture/VoteOnProposal.yaml b/fixture/VoteOnProposal.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/VoteOnProposal.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/managedblockchain/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  managedblockchain.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/VoteOnProposalResponse.proto b/fixture/VoteOnProposalResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/VoteOnProposalResponse.proto
diff --git a/gen/Amazonka/ManagedBlockChain.hs b/gen/Amazonka/ManagedBlockChain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain.hs
@@ -0,0 +1,479 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2018-09-24@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Managed Blockchain is a fully managed service for creating and
+-- managing blockchain networks using open-source frameworks. Blockchain
+-- allows you to build applications where multiple parties can securely and
+-- transparently run transactions and share data without the need for a
+-- trusted, central authority.
+--
+-- Managed Blockchain supports the Hyperledger Fabric and Ethereum
+-- open-source frameworks. Because of fundamental differences between the
+-- frameworks, some API actions or data types may only apply in the context
+-- of one framework and not the other. For example, actions related to
+-- Hyperledger Fabric network members such as @CreateMember@ and
+-- @DeleteMember@ don\'t apply to Ethereum.
+--
+-- The description for each action indicates the framework or frameworks to
+-- which it applies. Data types and properties that apply only in the
+-- context of a particular framework are similarly indicated.
+module Amazonka.ManagedBlockChain
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** IllegalActionException
+    _IllegalActionException,
+
+    -- ** InternalServiceErrorException
+    _InternalServiceErrorException,
+
+    -- ** InvalidRequestException
+    _InvalidRequestException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceLimitExceededException
+    _ResourceLimitExceededException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourceNotReadyException
+    _ResourceNotReadyException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** TooManyTagsException
+    _TooManyTagsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateAccessor
+    CreateAccessor (CreateAccessor'),
+    newCreateAccessor,
+    CreateAccessorResponse (CreateAccessorResponse'),
+    newCreateAccessorResponse,
+
+    -- ** CreateMember
+    CreateMember (CreateMember'),
+    newCreateMember,
+    CreateMemberResponse (CreateMemberResponse'),
+    newCreateMemberResponse,
+
+    -- ** CreateNetwork
+    CreateNetwork (CreateNetwork'),
+    newCreateNetwork,
+    CreateNetworkResponse (CreateNetworkResponse'),
+    newCreateNetworkResponse,
+
+    -- ** CreateNode
+    CreateNode (CreateNode'),
+    newCreateNode,
+    CreateNodeResponse (CreateNodeResponse'),
+    newCreateNodeResponse,
+
+    -- ** CreateProposal
+    CreateProposal (CreateProposal'),
+    newCreateProposal,
+    CreateProposalResponse (CreateProposalResponse'),
+    newCreateProposalResponse,
+
+    -- ** DeleteAccessor
+    DeleteAccessor (DeleteAccessor'),
+    newDeleteAccessor,
+    DeleteAccessorResponse (DeleteAccessorResponse'),
+    newDeleteAccessorResponse,
+
+    -- ** DeleteMember
+    DeleteMember (DeleteMember'),
+    newDeleteMember,
+    DeleteMemberResponse (DeleteMemberResponse'),
+    newDeleteMemberResponse,
+
+    -- ** DeleteNode
+    DeleteNode (DeleteNode'),
+    newDeleteNode,
+    DeleteNodeResponse (DeleteNodeResponse'),
+    newDeleteNodeResponse,
+
+    -- ** GetAccessor
+    GetAccessor (GetAccessor'),
+    newGetAccessor,
+    GetAccessorResponse (GetAccessorResponse'),
+    newGetAccessorResponse,
+
+    -- ** GetMember
+    GetMember (GetMember'),
+    newGetMember,
+    GetMemberResponse (GetMemberResponse'),
+    newGetMemberResponse,
+
+    -- ** GetNetwork
+    GetNetwork (GetNetwork'),
+    newGetNetwork,
+    GetNetworkResponse (GetNetworkResponse'),
+    newGetNetworkResponse,
+
+    -- ** GetNode
+    GetNode (GetNode'),
+    newGetNode,
+    GetNodeResponse (GetNodeResponse'),
+    newGetNodeResponse,
+
+    -- ** GetProposal
+    GetProposal (GetProposal'),
+    newGetProposal,
+    GetProposalResponse (GetProposalResponse'),
+    newGetProposalResponse,
+
+    -- ** ListAccessors (Paginated)
+    ListAccessors (ListAccessors'),
+    newListAccessors,
+    ListAccessorsResponse (ListAccessorsResponse'),
+    newListAccessorsResponse,
+
+    -- ** ListInvitations
+    ListInvitations (ListInvitations'),
+    newListInvitations,
+    ListInvitationsResponse (ListInvitationsResponse'),
+    newListInvitationsResponse,
+
+    -- ** ListMembers
+    ListMembers (ListMembers'),
+    newListMembers,
+    ListMembersResponse (ListMembersResponse'),
+    newListMembersResponse,
+
+    -- ** ListNetworks
+    ListNetworks (ListNetworks'),
+    newListNetworks,
+    ListNetworksResponse (ListNetworksResponse'),
+    newListNetworksResponse,
+
+    -- ** ListNodes
+    ListNodes (ListNodes'),
+    newListNodes,
+    ListNodesResponse (ListNodesResponse'),
+    newListNodesResponse,
+
+    -- ** ListProposalVotes
+    ListProposalVotes (ListProposalVotes'),
+    newListProposalVotes,
+    ListProposalVotesResponse (ListProposalVotesResponse'),
+    newListProposalVotesResponse,
+
+    -- ** ListProposals
+    ListProposals (ListProposals'),
+    newListProposals,
+    ListProposalsResponse (ListProposalsResponse'),
+    newListProposalsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** RejectInvitation
+    RejectInvitation (RejectInvitation'),
+    newRejectInvitation,
+    RejectInvitationResponse (RejectInvitationResponse'),
+    newRejectInvitationResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateMember
+    UpdateMember (UpdateMember'),
+    newUpdateMember,
+    UpdateMemberResponse (UpdateMemberResponse'),
+    newUpdateMemberResponse,
+
+    -- ** UpdateNode
+    UpdateNode (UpdateNode'),
+    newUpdateNode,
+    UpdateNodeResponse (UpdateNodeResponse'),
+    newUpdateNodeResponse,
+
+    -- ** VoteOnProposal
+    VoteOnProposal (VoteOnProposal'),
+    newVoteOnProposal,
+    VoteOnProposalResponse (VoteOnProposalResponse'),
+    newVoteOnProposalResponse,
+
+    -- * Types
+
+    -- ** AccessorStatus
+    AccessorStatus (..),
+
+    -- ** AccessorType
+    AccessorType (..),
+
+    -- ** Edition
+    Edition (..),
+
+    -- ** Framework
+    Framework (..),
+
+    -- ** InvitationStatus
+    InvitationStatus (..),
+
+    -- ** MemberStatus
+    MemberStatus (..),
+
+    -- ** NetworkStatus
+    NetworkStatus (..),
+
+    -- ** NodeStatus
+    NodeStatus (..),
+
+    -- ** ProposalStatus
+    ProposalStatus (..),
+
+    -- ** StateDBType
+    StateDBType (..),
+
+    -- ** ThresholdComparator
+    ThresholdComparator (..),
+
+    -- ** VoteValue
+    VoteValue (..),
+
+    -- ** Accessor
+    Accessor (Accessor'),
+    newAccessor,
+
+    -- ** AccessorSummary
+    AccessorSummary (AccessorSummary'),
+    newAccessorSummary,
+
+    -- ** ApprovalThresholdPolicy
+    ApprovalThresholdPolicy (ApprovalThresholdPolicy'),
+    newApprovalThresholdPolicy,
+
+    -- ** Invitation
+    Invitation (Invitation'),
+    newInvitation,
+
+    -- ** InviteAction
+    InviteAction (InviteAction'),
+    newInviteAction,
+
+    -- ** LogConfiguration
+    LogConfiguration (LogConfiguration'),
+    newLogConfiguration,
+
+    -- ** LogConfigurations
+    LogConfigurations (LogConfigurations'),
+    newLogConfigurations,
+
+    -- ** Member
+    Member (Member'),
+    newMember,
+
+    -- ** MemberConfiguration
+    MemberConfiguration (MemberConfiguration'),
+    newMemberConfiguration,
+
+    -- ** MemberFabricAttributes
+    MemberFabricAttributes (MemberFabricAttributes'),
+    newMemberFabricAttributes,
+
+    -- ** MemberFabricConfiguration
+    MemberFabricConfiguration (MemberFabricConfiguration'),
+    newMemberFabricConfiguration,
+
+    -- ** MemberFabricLogPublishingConfiguration
+    MemberFabricLogPublishingConfiguration (MemberFabricLogPublishingConfiguration'),
+    newMemberFabricLogPublishingConfiguration,
+
+    -- ** MemberFrameworkAttributes
+    MemberFrameworkAttributes (MemberFrameworkAttributes'),
+    newMemberFrameworkAttributes,
+
+    -- ** MemberFrameworkConfiguration
+    MemberFrameworkConfiguration (MemberFrameworkConfiguration'),
+    newMemberFrameworkConfiguration,
+
+    -- ** MemberLogPublishingConfiguration
+    MemberLogPublishingConfiguration (MemberLogPublishingConfiguration'),
+    newMemberLogPublishingConfiguration,
+
+    -- ** MemberSummary
+    MemberSummary (MemberSummary'),
+    newMemberSummary,
+
+    -- ** Network
+    Network (Network'),
+    newNetwork,
+
+    -- ** NetworkEthereumAttributes
+    NetworkEthereumAttributes (NetworkEthereumAttributes'),
+    newNetworkEthereumAttributes,
+
+    -- ** NetworkFabricAttributes
+    NetworkFabricAttributes (NetworkFabricAttributes'),
+    newNetworkFabricAttributes,
+
+    -- ** NetworkFabricConfiguration
+    NetworkFabricConfiguration (NetworkFabricConfiguration'),
+    newNetworkFabricConfiguration,
+
+    -- ** NetworkFrameworkAttributes
+    NetworkFrameworkAttributes (NetworkFrameworkAttributes'),
+    newNetworkFrameworkAttributes,
+
+    -- ** NetworkFrameworkConfiguration
+    NetworkFrameworkConfiguration (NetworkFrameworkConfiguration'),
+    newNetworkFrameworkConfiguration,
+
+    -- ** NetworkSummary
+    NetworkSummary (NetworkSummary'),
+    newNetworkSummary,
+
+    -- ** Node
+    Node (Node'),
+    newNode,
+
+    -- ** NodeConfiguration
+    NodeConfiguration (NodeConfiguration'),
+    newNodeConfiguration,
+
+    -- ** NodeEthereumAttributes
+    NodeEthereumAttributes (NodeEthereumAttributes'),
+    newNodeEthereumAttributes,
+
+    -- ** NodeFabricAttributes
+    NodeFabricAttributes (NodeFabricAttributes'),
+    newNodeFabricAttributes,
+
+    -- ** NodeFabricLogPublishingConfiguration
+    NodeFabricLogPublishingConfiguration (NodeFabricLogPublishingConfiguration'),
+    newNodeFabricLogPublishingConfiguration,
+
+    -- ** NodeFrameworkAttributes
+    NodeFrameworkAttributes (NodeFrameworkAttributes'),
+    newNodeFrameworkAttributes,
+
+    -- ** NodeLogPublishingConfiguration
+    NodeLogPublishingConfiguration (NodeLogPublishingConfiguration'),
+    newNodeLogPublishingConfiguration,
+
+    -- ** NodeSummary
+    NodeSummary (NodeSummary'),
+    newNodeSummary,
+
+    -- ** Proposal
+    Proposal (Proposal'),
+    newProposal,
+
+    -- ** ProposalActions
+    ProposalActions (ProposalActions'),
+    newProposalActions,
+
+    -- ** ProposalSummary
+    ProposalSummary (ProposalSummary'),
+    newProposalSummary,
+
+    -- ** RemoveAction
+    RemoveAction (RemoveAction'),
+    newRemoveAction,
+
+    -- ** VoteSummary
+    VoteSummary (VoteSummary'),
+    newVoteSummary,
+
+    -- ** VotingPolicy
+    VotingPolicy (VotingPolicy'),
+    newVotingPolicy,
+  )
+where
+
+import Amazonka.ManagedBlockChain.CreateAccessor
+import Amazonka.ManagedBlockChain.CreateMember
+import Amazonka.ManagedBlockChain.CreateNetwork
+import Amazonka.ManagedBlockChain.CreateNode
+import Amazonka.ManagedBlockChain.CreateProposal
+import Amazonka.ManagedBlockChain.DeleteAccessor
+import Amazonka.ManagedBlockChain.DeleteMember
+import Amazonka.ManagedBlockChain.DeleteNode
+import Amazonka.ManagedBlockChain.GetAccessor
+import Amazonka.ManagedBlockChain.GetMember
+import Amazonka.ManagedBlockChain.GetNetwork
+import Amazonka.ManagedBlockChain.GetNode
+import Amazonka.ManagedBlockChain.GetProposal
+import Amazonka.ManagedBlockChain.Lens
+import Amazonka.ManagedBlockChain.ListAccessors
+import Amazonka.ManagedBlockChain.ListInvitations
+import Amazonka.ManagedBlockChain.ListMembers
+import Amazonka.ManagedBlockChain.ListNetworks
+import Amazonka.ManagedBlockChain.ListNodes
+import Amazonka.ManagedBlockChain.ListProposalVotes
+import Amazonka.ManagedBlockChain.ListProposals
+import Amazonka.ManagedBlockChain.ListTagsForResource
+import Amazonka.ManagedBlockChain.RejectInvitation
+import Amazonka.ManagedBlockChain.TagResource
+import Amazonka.ManagedBlockChain.Types
+import Amazonka.ManagedBlockChain.UntagResource
+import Amazonka.ManagedBlockChain.UpdateMember
+import Amazonka.ManagedBlockChain.UpdateNode
+import Amazonka.ManagedBlockChain.VoteOnProposal
+import Amazonka.ManagedBlockChain.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'ManagedBlockChain'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/ManagedBlockChain/CreateAccessor.hs b/gen/Amazonka/ManagedBlockChain/CreateAccessor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/CreateAccessor.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.CreateAccessor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The token based access feature is in preview release for Ethereum on
+-- Amazon Managed Blockchain and is subject to change. We recommend that
+-- you use this feature only with test scenarios, and not in production
+-- environments.
+--
+-- Creates a new accessor for use with Managed Blockchain Ethereum nodes.
+-- An accessor object is a container that has the information required for
+-- token based access to your Ethereum nodes.
+module Amazonka.ManagedBlockChain.CreateAccessor
+  ( -- * Creating a Request
+    CreateAccessor (..),
+    newCreateAccessor,
+
+    -- * Request Lenses
+    createAccessor_clientRequestToken,
+    createAccessor_accessorType,
+
+    -- * Destructuring the Response
+    CreateAccessorResponse (..),
+    newCreateAccessorResponse,
+
+    -- * Response Lenses
+    createAccessorResponse_accessorId,
+    createAccessorResponse_billingToken,
+    createAccessorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAccessor' smart constructor.
+data CreateAccessor = CreateAccessor'
+  { -- | This is a unique, case-sensitive identifier that you provide to ensure
+    -- the idempotency of the operation. An idempotent operation completes no
+    -- more than once. This identifier is required only if you make a service
+    -- request directly using an HTTP client. It is generated automatically if
+    -- you use an Amazon Web Services SDK or the Amazon Web Services CLI.
+    clientRequestToken :: Prelude.Text,
+    -- | The type of accessor.
+    --
+    -- Currently accessor type is restricted to @BILLING_TOKEN@.
+    accessorType :: AccessorType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccessor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createAccessor_clientRequestToken' - This is a unique, case-sensitive identifier that you provide to ensure
+-- the idempotency of the operation. An idempotent operation completes no
+-- more than once. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the Amazon Web Services CLI.
+--
+-- 'accessorType', 'createAccessor_accessorType' - The type of accessor.
+--
+-- Currently accessor type is restricted to @BILLING_TOKEN@.
+newCreateAccessor ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'accessorType'
+  AccessorType ->
+  CreateAccessor
+newCreateAccessor pClientRequestToken_ pAccessorType_ =
+  CreateAccessor'
+    { clientRequestToken =
+        pClientRequestToken_,
+      accessorType = pAccessorType_
+    }
+
+-- | This is a unique, case-sensitive identifier that you provide to ensure
+-- the idempotency of the operation. An idempotent operation completes no
+-- more than once. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the Amazon Web Services CLI.
+createAccessor_clientRequestToken :: Lens.Lens' CreateAccessor Prelude.Text
+createAccessor_clientRequestToken = Lens.lens (\CreateAccessor' {clientRequestToken} -> clientRequestToken) (\s@CreateAccessor' {} a -> s {clientRequestToken = a} :: CreateAccessor)
+
+-- | The type of accessor.
+--
+-- Currently accessor type is restricted to @BILLING_TOKEN@.
+createAccessor_accessorType :: Lens.Lens' CreateAccessor AccessorType
+createAccessor_accessorType = Lens.lens (\CreateAccessor' {accessorType} -> accessorType) (\s@CreateAccessor' {} a -> s {accessorType = a} :: CreateAccessor)
+
+instance Core.AWSRequest CreateAccessor where
+  type
+    AWSResponse CreateAccessor =
+      CreateAccessorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAccessorResponse'
+            Prelude.<$> (x Data..?> "AccessorId")
+            Prelude.<*> (x Data..?> "BillingToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAccessor where
+  hashWithSalt _salt CreateAccessor' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` accessorType
+
+instance Prelude.NFData CreateAccessor where
+  rnf CreateAccessor' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf accessorType
+
+instance Data.ToHeaders CreateAccessor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAccessor where
+  toJSON CreateAccessor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just ("AccessorType" Data..= accessorType)
+          ]
+      )
+
+instance Data.ToPath CreateAccessor where
+  toPath = Prelude.const "/accessors"
+
+instance Data.ToQuery CreateAccessor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAccessorResponse' smart constructor.
+data CreateAccessorResponse = CreateAccessorResponse'
+  { -- | The unique identifier of the accessor.
+    accessorId :: Prelude.Maybe Prelude.Text,
+    -- | The billing token is a property of the Accessor. Use this token to make
+    -- Ethereum API calls to your Ethereum node. The billing token is used to
+    -- track your accessor object for billing Ethereum API requests made to
+    -- your Ethereum nodes.
+    billingToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccessorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessorId', 'createAccessorResponse_accessorId' - The unique identifier of the accessor.
+--
+-- 'billingToken', 'createAccessorResponse_billingToken' - The billing token is a property of the Accessor. Use this token to make
+-- Ethereum API calls to your Ethereum node. The billing token is used to
+-- track your accessor object for billing Ethereum API requests made to
+-- your Ethereum nodes.
+--
+-- 'httpStatus', 'createAccessorResponse_httpStatus' - The response's http status code.
+newCreateAccessorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAccessorResponse
+newCreateAccessorResponse pHttpStatus_ =
+  CreateAccessorResponse'
+    { accessorId =
+        Prelude.Nothing,
+      billingToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the accessor.
+createAccessorResponse_accessorId :: Lens.Lens' CreateAccessorResponse (Prelude.Maybe Prelude.Text)
+createAccessorResponse_accessorId = Lens.lens (\CreateAccessorResponse' {accessorId} -> accessorId) (\s@CreateAccessorResponse' {} a -> s {accessorId = a} :: CreateAccessorResponse)
+
+-- | The billing token is a property of the Accessor. Use this token to make
+-- Ethereum API calls to your Ethereum node. The billing token is used to
+-- track your accessor object for billing Ethereum API requests made to
+-- your Ethereum nodes.
+createAccessorResponse_billingToken :: Lens.Lens' CreateAccessorResponse (Prelude.Maybe Prelude.Text)
+createAccessorResponse_billingToken = Lens.lens (\CreateAccessorResponse' {billingToken} -> billingToken) (\s@CreateAccessorResponse' {} a -> s {billingToken = a} :: CreateAccessorResponse)
+
+-- | The response's http status code.
+createAccessorResponse_httpStatus :: Lens.Lens' CreateAccessorResponse Prelude.Int
+createAccessorResponse_httpStatus = Lens.lens (\CreateAccessorResponse' {httpStatus} -> httpStatus) (\s@CreateAccessorResponse' {} a -> s {httpStatus = a} :: CreateAccessorResponse)
+
+instance Prelude.NFData CreateAccessorResponse where
+  rnf CreateAccessorResponse' {..} =
+    Prelude.rnf accessorId
+      `Prelude.seq` Prelude.rnf billingToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/CreateMember.hs b/gen/Amazonka/ManagedBlockChain/CreateMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/CreateMember.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.CreateMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a member within a Managed Blockchain network.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.CreateMember
+  ( -- * Creating a Request
+    CreateMember (..),
+    newCreateMember,
+
+    -- * Request Lenses
+    createMember_clientRequestToken,
+    createMember_invitationId,
+    createMember_networkId,
+    createMember_memberConfiguration,
+
+    -- * Destructuring the Response
+    CreateMemberResponse (..),
+    newCreateMemberResponse,
+
+    -- * Response Lenses
+    createMemberResponse_memberId,
+    createMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateMember' smart constructor.
+data CreateMember = CreateMember'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the operation. An idempotent operation completes no more
+    -- than one time. This identifier is required only if you make a service
+    -- request directly using an HTTP client. It is generated automatically if
+    -- you use an Amazon Web Services SDK or the CLI.
+    clientRequestToken :: Prelude.Text,
+    -- | The unique identifier of the invitation that is sent to the member to
+    -- join the network.
+    invitationId :: Prelude.Text,
+    -- | The unique identifier of the network in which the member is created.
+    networkId :: Prelude.Text,
+    -- | Member configuration parameters.
+    memberConfiguration :: MemberConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createMember_clientRequestToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the operation. An idempotent operation completes no more
+-- than one time. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the CLI.
+--
+-- 'invitationId', 'createMember_invitationId' - The unique identifier of the invitation that is sent to the member to
+-- join the network.
+--
+-- 'networkId', 'createMember_networkId' - The unique identifier of the network in which the member is created.
+--
+-- 'memberConfiguration', 'createMember_memberConfiguration' - Member configuration parameters.
+newCreateMember ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'invitationId'
+  Prelude.Text ->
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'memberConfiguration'
+  MemberConfiguration ->
+  CreateMember
+newCreateMember
+  pClientRequestToken_
+  pInvitationId_
+  pNetworkId_
+  pMemberConfiguration_ =
+    CreateMember'
+      { clientRequestToken =
+          pClientRequestToken_,
+        invitationId = pInvitationId_,
+        networkId = pNetworkId_,
+        memberConfiguration = pMemberConfiguration_
+      }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the operation. An idempotent operation completes no more
+-- than one time. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the CLI.
+createMember_clientRequestToken :: Lens.Lens' CreateMember Prelude.Text
+createMember_clientRequestToken = Lens.lens (\CreateMember' {clientRequestToken} -> clientRequestToken) (\s@CreateMember' {} a -> s {clientRequestToken = a} :: CreateMember)
+
+-- | The unique identifier of the invitation that is sent to the member to
+-- join the network.
+createMember_invitationId :: Lens.Lens' CreateMember Prelude.Text
+createMember_invitationId = Lens.lens (\CreateMember' {invitationId} -> invitationId) (\s@CreateMember' {} a -> s {invitationId = a} :: CreateMember)
+
+-- | The unique identifier of the network in which the member is created.
+createMember_networkId :: Lens.Lens' CreateMember Prelude.Text
+createMember_networkId = Lens.lens (\CreateMember' {networkId} -> networkId) (\s@CreateMember' {} a -> s {networkId = a} :: CreateMember)
+
+-- | Member configuration parameters.
+createMember_memberConfiguration :: Lens.Lens' CreateMember MemberConfiguration
+createMember_memberConfiguration = Lens.lens (\CreateMember' {memberConfiguration} -> memberConfiguration) (\s@CreateMember' {} a -> s {memberConfiguration = a} :: CreateMember)
+
+instance Core.AWSRequest CreateMember where
+  type AWSResponse CreateMember = CreateMemberResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMemberResponse'
+            Prelude.<$> (x Data..?> "MemberId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMember where
+  hashWithSalt _salt CreateMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` invitationId
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` memberConfiguration
+
+instance Prelude.NFData CreateMember where
+  rnf CreateMember' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf invitationId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf memberConfiguration
+
+instance Data.ToHeaders CreateMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateMember where
+  toJSON CreateMember' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just ("InvitationId" Data..= invitationId),
+            Prelude.Just
+              ("MemberConfiguration" Data..= memberConfiguration)
+          ]
+      )
+
+instance Data.ToPath CreateMember where
+  toPath CreateMember' {..} =
+    Prelude.mconcat
+      ["/networks/", Data.toBS networkId, "/members"]
+
+instance Data.ToQuery CreateMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMemberResponse' smart constructor.
+data CreateMemberResponse = CreateMemberResponse'
+  { -- | The unique identifier of the member.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'createMemberResponse_memberId' - The unique identifier of the member.
+--
+-- 'httpStatus', 'createMemberResponse_httpStatus' - The response's http status code.
+newCreateMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMemberResponse
+newCreateMemberResponse pHttpStatus_ =
+  CreateMemberResponse'
+    { memberId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the member.
+createMemberResponse_memberId :: Lens.Lens' CreateMemberResponse (Prelude.Maybe Prelude.Text)
+createMemberResponse_memberId = Lens.lens (\CreateMemberResponse' {memberId} -> memberId) (\s@CreateMemberResponse' {} a -> s {memberId = a} :: CreateMemberResponse)
+
+-- | The response's http status code.
+createMemberResponse_httpStatus :: Lens.Lens' CreateMemberResponse Prelude.Int
+createMemberResponse_httpStatus = Lens.lens (\CreateMemberResponse' {httpStatus} -> httpStatus) (\s@CreateMemberResponse' {} a -> s {httpStatus = a} :: CreateMemberResponse)
+
+instance Prelude.NFData CreateMemberResponse where
+  rnf CreateMemberResponse' {..} =
+    Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/CreateNetwork.hs b/gen/Amazonka/ManagedBlockChain/CreateNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/CreateNetwork.hs
@@ -0,0 +1,357 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.CreateNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new blockchain network using Amazon Managed Blockchain.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.CreateNetwork
+  ( -- * Creating a Request
+    CreateNetwork (..),
+    newCreateNetwork,
+
+    -- * Request Lenses
+    createNetwork_description,
+    createNetwork_frameworkConfiguration,
+    createNetwork_tags,
+    createNetwork_clientRequestToken,
+    createNetwork_name,
+    createNetwork_framework,
+    createNetwork_frameworkVersion,
+    createNetwork_votingPolicy,
+    createNetwork_memberConfiguration,
+
+    -- * Destructuring the Response
+    CreateNetworkResponse (..),
+    newCreateNetworkResponse,
+
+    -- * Response Lenses
+    createNetworkResponse_memberId,
+    createNetworkResponse_networkId,
+    createNetworkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetwork' smart constructor.
+data CreateNetwork = CreateNetwork'
+  { -- | An optional description for the network.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Configuration properties of the blockchain framework relevant to the
+    -- network configuration.
+    frameworkConfiguration :: Prelude.Maybe NetworkFrameworkConfiguration,
+    -- | Tags to assign to the network. Each tag consists of a key and optional
+    -- value.
+    --
+    -- When specifying tags during creation, you can specify multiple key-value
+    -- pairs in a single request, with an overall maximum of 50 tags added to
+    -- each resource.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | This is a unique, case-sensitive identifier that you provide to ensure
+    -- the idempotency of the operation. An idempotent operation completes no
+    -- more than once. This identifier is required only if you make a service
+    -- request directly using an HTTP client. It is generated automatically if
+    -- you use an Amazon Web Services SDK or the Amazon Web Services CLI.
+    clientRequestToken :: Prelude.Text,
+    -- | The name of the network.
+    name :: Prelude.Text,
+    -- | The blockchain framework that the network uses.
+    framework :: Framework,
+    -- | The version of the blockchain framework that the network uses.
+    frameworkVersion :: Prelude.Text,
+    -- | The voting rules used by the network to determine if a proposal is
+    -- approved.
+    votingPolicy :: VotingPolicy,
+    -- | Configuration properties for the first member within the network.
+    memberConfiguration :: MemberConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createNetwork_description' - An optional description for the network.
+--
+-- 'frameworkConfiguration', 'createNetwork_frameworkConfiguration' - Configuration properties of the blockchain framework relevant to the
+-- network configuration.
+--
+-- 'tags', 'createNetwork_tags' - Tags to assign to the network. Each tag consists of a key and optional
+-- value.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- 'clientRequestToken', 'createNetwork_clientRequestToken' - This is a unique, case-sensitive identifier that you provide to ensure
+-- the idempotency of the operation. An idempotent operation completes no
+-- more than once. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the Amazon Web Services CLI.
+--
+-- 'name', 'createNetwork_name' - The name of the network.
+--
+-- 'framework', 'createNetwork_framework' - The blockchain framework that the network uses.
+--
+-- 'frameworkVersion', 'createNetwork_frameworkVersion' - The version of the blockchain framework that the network uses.
+--
+-- 'votingPolicy', 'createNetwork_votingPolicy' - The voting rules used by the network to determine if a proposal is
+-- approved.
+--
+-- 'memberConfiguration', 'createNetwork_memberConfiguration' - Configuration properties for the first member within the network.
+newCreateNetwork ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'framework'
+  Framework ->
+  -- | 'frameworkVersion'
+  Prelude.Text ->
+  -- | 'votingPolicy'
+  VotingPolicy ->
+  -- | 'memberConfiguration'
+  MemberConfiguration ->
+  CreateNetwork
+newCreateNetwork
+  pClientRequestToken_
+  pName_
+  pFramework_
+  pFrameworkVersion_
+  pVotingPolicy_
+  pMemberConfiguration_ =
+    CreateNetwork'
+      { description = Prelude.Nothing,
+        frameworkConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        clientRequestToken = pClientRequestToken_,
+        name = pName_,
+        framework = pFramework_,
+        frameworkVersion = pFrameworkVersion_,
+        votingPolicy = pVotingPolicy_,
+        memberConfiguration = pMemberConfiguration_
+      }
+
+-- | An optional description for the network.
+createNetwork_description :: Lens.Lens' CreateNetwork (Prelude.Maybe Prelude.Text)
+createNetwork_description = Lens.lens (\CreateNetwork' {description} -> description) (\s@CreateNetwork' {} a -> s {description = a} :: CreateNetwork)
+
+-- | Configuration properties of the blockchain framework relevant to the
+-- network configuration.
+createNetwork_frameworkConfiguration :: Lens.Lens' CreateNetwork (Prelude.Maybe NetworkFrameworkConfiguration)
+createNetwork_frameworkConfiguration = Lens.lens (\CreateNetwork' {frameworkConfiguration} -> frameworkConfiguration) (\s@CreateNetwork' {} a -> s {frameworkConfiguration = a} :: CreateNetwork)
+
+-- | Tags to assign to the network. Each tag consists of a key and optional
+-- value.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+createNetwork_tags :: Lens.Lens' CreateNetwork (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createNetwork_tags = Lens.lens (\CreateNetwork' {tags} -> tags) (\s@CreateNetwork' {} a -> s {tags = a} :: CreateNetwork) Prelude.. Lens.mapping Lens.coerced
+
+-- | This is a unique, case-sensitive identifier that you provide to ensure
+-- the idempotency of the operation. An idempotent operation completes no
+-- more than once. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the Amazon Web Services CLI.
+createNetwork_clientRequestToken :: Lens.Lens' CreateNetwork Prelude.Text
+createNetwork_clientRequestToken = Lens.lens (\CreateNetwork' {clientRequestToken} -> clientRequestToken) (\s@CreateNetwork' {} a -> s {clientRequestToken = a} :: CreateNetwork)
+
+-- | The name of the network.
+createNetwork_name :: Lens.Lens' CreateNetwork Prelude.Text
+createNetwork_name = Lens.lens (\CreateNetwork' {name} -> name) (\s@CreateNetwork' {} a -> s {name = a} :: CreateNetwork)
+
+-- | The blockchain framework that the network uses.
+createNetwork_framework :: Lens.Lens' CreateNetwork Framework
+createNetwork_framework = Lens.lens (\CreateNetwork' {framework} -> framework) (\s@CreateNetwork' {} a -> s {framework = a} :: CreateNetwork)
+
+-- | The version of the blockchain framework that the network uses.
+createNetwork_frameworkVersion :: Lens.Lens' CreateNetwork Prelude.Text
+createNetwork_frameworkVersion = Lens.lens (\CreateNetwork' {frameworkVersion} -> frameworkVersion) (\s@CreateNetwork' {} a -> s {frameworkVersion = a} :: CreateNetwork)
+
+-- | The voting rules used by the network to determine if a proposal is
+-- approved.
+createNetwork_votingPolicy :: Lens.Lens' CreateNetwork VotingPolicy
+createNetwork_votingPolicy = Lens.lens (\CreateNetwork' {votingPolicy} -> votingPolicy) (\s@CreateNetwork' {} a -> s {votingPolicy = a} :: CreateNetwork)
+
+-- | Configuration properties for the first member within the network.
+createNetwork_memberConfiguration :: Lens.Lens' CreateNetwork MemberConfiguration
+createNetwork_memberConfiguration = Lens.lens (\CreateNetwork' {memberConfiguration} -> memberConfiguration) (\s@CreateNetwork' {} a -> s {memberConfiguration = a} :: CreateNetwork)
+
+instance Core.AWSRequest CreateNetwork where
+  type
+    AWSResponse CreateNetwork =
+      CreateNetworkResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateNetworkResponse'
+            Prelude.<$> (x Data..?> "MemberId")
+            Prelude.<*> (x Data..?> "NetworkId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNetwork where
+  hashWithSalt _salt CreateNetwork' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` frameworkConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` frameworkVersion
+      `Prelude.hashWithSalt` votingPolicy
+      `Prelude.hashWithSalt` memberConfiguration
+
+instance Prelude.NFData CreateNetwork where
+  rnf CreateNetwork' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf frameworkConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf frameworkVersion
+      `Prelude.seq` Prelude.rnf votingPolicy
+      `Prelude.seq` Prelude.rnf memberConfiguration
+
+instance Data.ToHeaders CreateNetwork where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateNetwork where
+  toJSON CreateNetwork' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("FrameworkConfiguration" Data..=)
+              Prelude.<$> frameworkConfiguration,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Framework" Data..= framework),
+            Prelude.Just
+              ("FrameworkVersion" Data..= frameworkVersion),
+            Prelude.Just ("VotingPolicy" Data..= votingPolicy),
+            Prelude.Just
+              ("MemberConfiguration" Data..= memberConfiguration)
+          ]
+      )
+
+instance Data.ToPath CreateNetwork where
+  toPath = Prelude.const "/networks"
+
+instance Data.ToQuery CreateNetwork where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateNetworkResponse' smart constructor.
+data CreateNetworkResponse = CreateNetworkResponse'
+  { -- | The unique identifier for the first member within the network.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the network.
+    networkId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'createNetworkResponse_memberId' - The unique identifier for the first member within the network.
+--
+-- 'networkId', 'createNetworkResponse_networkId' - The unique identifier for the network.
+--
+-- 'httpStatus', 'createNetworkResponse_httpStatus' - The response's http status code.
+newCreateNetworkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkResponse
+newCreateNetworkResponse pHttpStatus_ =
+  CreateNetworkResponse'
+    { memberId = Prelude.Nothing,
+      networkId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier for the first member within the network.
+createNetworkResponse_memberId :: Lens.Lens' CreateNetworkResponse (Prelude.Maybe Prelude.Text)
+createNetworkResponse_memberId = Lens.lens (\CreateNetworkResponse' {memberId} -> memberId) (\s@CreateNetworkResponse' {} a -> s {memberId = a} :: CreateNetworkResponse)
+
+-- | The unique identifier for the network.
+createNetworkResponse_networkId :: Lens.Lens' CreateNetworkResponse (Prelude.Maybe Prelude.Text)
+createNetworkResponse_networkId = Lens.lens (\CreateNetworkResponse' {networkId} -> networkId) (\s@CreateNetworkResponse' {} a -> s {networkId = a} :: CreateNetworkResponse)
+
+-- | The response's http status code.
+createNetworkResponse_httpStatus :: Lens.Lens' CreateNetworkResponse Prelude.Int
+createNetworkResponse_httpStatus = Lens.lens (\CreateNetworkResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkResponse' {} a -> s {httpStatus = a} :: CreateNetworkResponse)
+
+instance Prelude.NFData CreateNetworkResponse where
+  rnf CreateNetworkResponse' {..} =
+    Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/CreateNode.hs b/gen/Amazonka/ManagedBlockChain/CreateNode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/CreateNode.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.CreateNode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a node on the specified blockchain network.
+--
+-- Applies to Hyperledger Fabric and Ethereum.
+module Amazonka.ManagedBlockChain.CreateNode
+  ( -- * Creating a Request
+    CreateNode (..),
+    newCreateNode,
+
+    -- * Request Lenses
+    createNode_memberId,
+    createNode_tags,
+    createNode_clientRequestToken,
+    createNode_networkId,
+    createNode_nodeConfiguration,
+
+    -- * Destructuring the Response
+    CreateNodeResponse (..),
+    newCreateNodeResponse,
+
+    -- * Response Lenses
+    createNodeResponse_nodeId,
+    createNodeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNode' smart constructor.
+data CreateNode = CreateNode'
+  { -- | The unique identifier of the member that owns this node.
+    --
+    -- Applies only to Hyperledger Fabric.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | Tags to assign to the node. Each tag consists of a key and optional
+    -- value.
+    --
+    -- When specifying tags during creation, you can specify multiple key-value
+    -- pairs in a single request, with an overall maximum of 50 tags added to
+    -- each resource.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the operation. An idempotent operation completes no more
+    -- than one time. This identifier is required only if you make a service
+    -- request directly using an HTTP client. It is generated automatically if
+    -- you use an Amazon Web Services SDK or the CLI.
+    clientRequestToken :: Prelude.Text,
+    -- | The unique identifier of the network for the node.
+    --
+    -- Ethereum public networks have the following @NetworkId@s:
+    --
+    -- -   @n-ethereum-mainnet@
+    --
+    -- -   @n-ethereum-goerli@
+    --
+    -- -   @n-ethereum-rinkeby@
+    --
+    -- -   @n-ethereum-ropsten@
+    networkId :: Prelude.Text,
+    -- | The properties of a node configuration.
+    nodeConfiguration :: NodeConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'createNode_memberId' - The unique identifier of the member that owns this node.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- 'tags', 'createNode_tags' - Tags to assign to the node. Each tag consists of a key and optional
+-- value.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- 'clientRequestToken', 'createNode_clientRequestToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the operation. An idempotent operation completes no more
+-- than one time. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the CLI.
+--
+-- 'networkId', 'createNode_networkId' - The unique identifier of the network for the node.
+--
+-- Ethereum public networks have the following @NetworkId@s:
+--
+-- -   @n-ethereum-mainnet@
+--
+-- -   @n-ethereum-goerli@
+--
+-- -   @n-ethereum-rinkeby@
+--
+-- -   @n-ethereum-ropsten@
+--
+-- 'nodeConfiguration', 'createNode_nodeConfiguration' - The properties of a node configuration.
+newCreateNode ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'nodeConfiguration'
+  NodeConfiguration ->
+  CreateNode
+newCreateNode
+  pClientRequestToken_
+  pNetworkId_
+  pNodeConfiguration_ =
+    CreateNode'
+      { memberId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        clientRequestToken = pClientRequestToken_,
+        networkId = pNetworkId_,
+        nodeConfiguration = pNodeConfiguration_
+      }
+
+-- | The unique identifier of the member that owns this node.
+--
+-- Applies only to Hyperledger Fabric.
+createNode_memberId :: Lens.Lens' CreateNode (Prelude.Maybe Prelude.Text)
+createNode_memberId = Lens.lens (\CreateNode' {memberId} -> memberId) (\s@CreateNode' {} a -> s {memberId = a} :: CreateNode)
+
+-- | Tags to assign to the node. Each tag consists of a key and optional
+-- value.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+createNode_tags :: Lens.Lens' CreateNode (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createNode_tags = Lens.lens (\CreateNode' {tags} -> tags) (\s@CreateNode' {} a -> s {tags = a} :: CreateNode) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the operation. An idempotent operation completes no more
+-- than one time. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the CLI.
+createNode_clientRequestToken :: Lens.Lens' CreateNode Prelude.Text
+createNode_clientRequestToken = Lens.lens (\CreateNode' {clientRequestToken} -> clientRequestToken) (\s@CreateNode' {} a -> s {clientRequestToken = a} :: CreateNode)
+
+-- | The unique identifier of the network for the node.
+--
+-- Ethereum public networks have the following @NetworkId@s:
+--
+-- -   @n-ethereum-mainnet@
+--
+-- -   @n-ethereum-goerli@
+--
+-- -   @n-ethereum-rinkeby@
+--
+-- -   @n-ethereum-ropsten@
+createNode_networkId :: Lens.Lens' CreateNode Prelude.Text
+createNode_networkId = Lens.lens (\CreateNode' {networkId} -> networkId) (\s@CreateNode' {} a -> s {networkId = a} :: CreateNode)
+
+-- | The properties of a node configuration.
+createNode_nodeConfiguration :: Lens.Lens' CreateNode NodeConfiguration
+createNode_nodeConfiguration = Lens.lens (\CreateNode' {nodeConfiguration} -> nodeConfiguration) (\s@CreateNode' {} a -> s {nodeConfiguration = a} :: CreateNode)
+
+instance Core.AWSRequest CreateNode where
+  type AWSResponse CreateNode = CreateNodeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateNodeResponse'
+            Prelude.<$> (x Data..?> "NodeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNode where
+  hashWithSalt _salt CreateNode' {..} =
+    _salt
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` nodeConfiguration
+
+instance Prelude.NFData CreateNode where
+  rnf CreateNode' {..} =
+    Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf nodeConfiguration
+
+instance Data.ToHeaders CreateNode where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateNode where
+  toJSON CreateNode' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MemberId" Data..=) Prelude.<$> memberId,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just
+              ("NodeConfiguration" Data..= nodeConfiguration)
+          ]
+      )
+
+instance Data.ToPath CreateNode where
+  toPath CreateNode' {..} =
+    Prelude.mconcat
+      ["/networks/", Data.toBS networkId, "/nodes"]
+
+instance Data.ToQuery CreateNode where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateNodeResponse' smart constructor.
+data CreateNodeResponse = CreateNodeResponse'
+  { -- | The unique identifier of the node.
+    nodeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNodeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nodeId', 'createNodeResponse_nodeId' - The unique identifier of the node.
+--
+-- 'httpStatus', 'createNodeResponse_httpStatus' - The response's http status code.
+newCreateNodeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNodeResponse
+newCreateNodeResponse pHttpStatus_ =
+  CreateNodeResponse'
+    { nodeId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the node.
+createNodeResponse_nodeId :: Lens.Lens' CreateNodeResponse (Prelude.Maybe Prelude.Text)
+createNodeResponse_nodeId = Lens.lens (\CreateNodeResponse' {nodeId} -> nodeId) (\s@CreateNodeResponse' {} a -> s {nodeId = a} :: CreateNodeResponse)
+
+-- | The response's http status code.
+createNodeResponse_httpStatus :: Lens.Lens' CreateNodeResponse Prelude.Int
+createNodeResponse_httpStatus = Lens.lens (\CreateNodeResponse' {httpStatus} -> httpStatus) (\s@CreateNodeResponse' {} a -> s {httpStatus = a} :: CreateNodeResponse)
+
+instance Prelude.NFData CreateNodeResponse where
+  rnf CreateNodeResponse' {..} =
+    Prelude.rnf nodeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/CreateProposal.hs b/gen/Amazonka/ManagedBlockChain/CreateProposal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/CreateProposal.hs
@@ -0,0 +1,319 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.CreateProposal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a proposal for a change to the network that other members of the
+-- network can vote on, for example, a proposal to add a new member to the
+-- network. Any member can create a proposal.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.CreateProposal
+  ( -- * Creating a Request
+    CreateProposal (..),
+    newCreateProposal,
+
+    -- * Request Lenses
+    createProposal_description,
+    createProposal_tags,
+    createProposal_clientRequestToken,
+    createProposal_networkId,
+    createProposal_memberId,
+    createProposal_actions,
+
+    -- * Destructuring the Response
+    CreateProposalResponse (..),
+    newCreateProposalResponse,
+
+    -- * Response Lenses
+    createProposalResponse_proposalId,
+    createProposalResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateProposal' smart constructor.
+data CreateProposal = CreateProposal'
+  { -- | A description for the proposal that is visible to voting members, for
+    -- example, \"Proposal to add Example Corp. as member.\"
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Tags to assign to the proposal. Each tag consists of a key and optional
+    -- value.
+    --
+    -- When specifying tags during creation, you can specify multiple key-value
+    -- pairs in a single request, with an overall maximum of 50 tags added to
+    -- each resource. If the proposal is for a network invitation, the
+    -- invitation inherits the tags added to the proposal.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the operation. An idempotent operation completes no more
+    -- than one time. This identifier is required only if you make a service
+    -- request directly using an HTTP client. It is generated automatically if
+    -- you use an Amazon Web Services SDK or the CLI.
+    clientRequestToken :: Prelude.Text,
+    -- | The unique identifier of the network for which the proposal is made.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the member that is creating the proposal. This
+    -- identifier is especially useful for identifying the member making the
+    -- proposal when multiple members exist in a single Amazon Web Services
+    -- account.
+    memberId :: Prelude.Text,
+    -- | The type of actions proposed, such as inviting a member or removing a
+    -- member. The types of @Actions@ in a proposal are mutually exclusive. For
+    -- example, a proposal with @Invitations@ actions cannot also contain
+    -- @Removals@ actions.
+    actions :: ProposalActions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProposal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createProposal_description' - A description for the proposal that is visible to voting members, for
+-- example, \"Proposal to add Example Corp. as member.\"
+--
+-- 'tags', 'createProposal_tags' - Tags to assign to the proposal. Each tag consists of a key and optional
+-- value.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource. If the proposal is for a network invitation, the
+-- invitation inherits the tags added to the proposal.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- 'clientRequestToken', 'createProposal_clientRequestToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the operation. An idempotent operation completes no more
+-- than one time. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the CLI.
+--
+-- 'networkId', 'createProposal_networkId' - The unique identifier of the network for which the proposal is made.
+--
+-- 'memberId', 'createProposal_memberId' - The unique identifier of the member that is creating the proposal. This
+-- identifier is especially useful for identifying the member making the
+-- proposal when multiple members exist in a single Amazon Web Services
+-- account.
+--
+-- 'actions', 'createProposal_actions' - The type of actions proposed, such as inviting a member or removing a
+-- member. The types of @Actions@ in a proposal are mutually exclusive. For
+-- example, a proposal with @Invitations@ actions cannot also contain
+-- @Removals@ actions.
+newCreateProposal ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'memberId'
+  Prelude.Text ->
+  -- | 'actions'
+  ProposalActions ->
+  CreateProposal
+newCreateProposal
+  pClientRequestToken_
+  pNetworkId_
+  pMemberId_
+  pActions_ =
+    CreateProposal'
+      { description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        clientRequestToken = pClientRequestToken_,
+        networkId = pNetworkId_,
+        memberId = pMemberId_,
+        actions = pActions_
+      }
+
+-- | A description for the proposal that is visible to voting members, for
+-- example, \"Proposal to add Example Corp. as member.\"
+createProposal_description :: Lens.Lens' CreateProposal (Prelude.Maybe Prelude.Text)
+createProposal_description = Lens.lens (\CreateProposal' {description} -> description) (\s@CreateProposal' {} a -> s {description = a} :: CreateProposal)
+
+-- | Tags to assign to the proposal. Each tag consists of a key and optional
+-- value.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource. If the proposal is for a network invitation, the
+-- invitation inherits the tags added to the proposal.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+createProposal_tags :: Lens.Lens' CreateProposal (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createProposal_tags = Lens.lens (\CreateProposal' {tags} -> tags) (\s@CreateProposal' {} a -> s {tags = a} :: CreateProposal) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the operation. An idempotent operation completes no more
+-- than one time. This identifier is required only if you make a service
+-- request directly using an HTTP client. It is generated automatically if
+-- you use an Amazon Web Services SDK or the CLI.
+createProposal_clientRequestToken :: Lens.Lens' CreateProposal Prelude.Text
+createProposal_clientRequestToken = Lens.lens (\CreateProposal' {clientRequestToken} -> clientRequestToken) (\s@CreateProposal' {} a -> s {clientRequestToken = a} :: CreateProposal)
+
+-- | The unique identifier of the network for which the proposal is made.
+createProposal_networkId :: Lens.Lens' CreateProposal Prelude.Text
+createProposal_networkId = Lens.lens (\CreateProposal' {networkId} -> networkId) (\s@CreateProposal' {} a -> s {networkId = a} :: CreateProposal)
+
+-- | The unique identifier of the member that is creating the proposal. This
+-- identifier is especially useful for identifying the member making the
+-- proposal when multiple members exist in a single Amazon Web Services
+-- account.
+createProposal_memberId :: Lens.Lens' CreateProposal Prelude.Text
+createProposal_memberId = Lens.lens (\CreateProposal' {memberId} -> memberId) (\s@CreateProposal' {} a -> s {memberId = a} :: CreateProposal)
+
+-- | The type of actions proposed, such as inviting a member or removing a
+-- member. The types of @Actions@ in a proposal are mutually exclusive. For
+-- example, a proposal with @Invitations@ actions cannot also contain
+-- @Removals@ actions.
+createProposal_actions :: Lens.Lens' CreateProposal ProposalActions
+createProposal_actions = Lens.lens (\CreateProposal' {actions} -> actions) (\s@CreateProposal' {} a -> s {actions = a} :: CreateProposal)
+
+instance Core.AWSRequest CreateProposal where
+  type
+    AWSResponse CreateProposal =
+      CreateProposalResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProposalResponse'
+            Prelude.<$> (x Data..?> "ProposalId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateProposal where
+  hashWithSalt _salt CreateProposal' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` actions
+
+instance Prelude.NFData CreateProposal where
+  rnf CreateProposal' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf actions
+
+instance Data.ToHeaders CreateProposal where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateProposal where
+  toJSON CreateProposal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just ("MemberId" Data..= memberId),
+            Prelude.Just ("Actions" Data..= actions)
+          ]
+      )
+
+instance Data.ToPath CreateProposal where
+  toPath CreateProposal' {..} =
+    Prelude.mconcat
+      ["/networks/", Data.toBS networkId, "/proposals"]
+
+instance Data.ToQuery CreateProposal where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateProposalResponse' smart constructor.
+data CreateProposalResponse = CreateProposalResponse'
+  { -- | The unique identifier of the proposal.
+    proposalId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProposalResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'proposalId', 'createProposalResponse_proposalId' - The unique identifier of the proposal.
+--
+-- 'httpStatus', 'createProposalResponse_httpStatus' - The response's http status code.
+newCreateProposalResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateProposalResponse
+newCreateProposalResponse pHttpStatus_ =
+  CreateProposalResponse'
+    { proposalId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the proposal.
+createProposalResponse_proposalId :: Lens.Lens' CreateProposalResponse (Prelude.Maybe Prelude.Text)
+createProposalResponse_proposalId = Lens.lens (\CreateProposalResponse' {proposalId} -> proposalId) (\s@CreateProposalResponse' {} a -> s {proposalId = a} :: CreateProposalResponse)
+
+-- | The response's http status code.
+createProposalResponse_httpStatus :: Lens.Lens' CreateProposalResponse Prelude.Int
+createProposalResponse_httpStatus = Lens.lens (\CreateProposalResponse' {httpStatus} -> httpStatus) (\s@CreateProposalResponse' {} a -> s {httpStatus = a} :: CreateProposalResponse)
+
+instance Prelude.NFData CreateProposalResponse where
+  rnf CreateProposalResponse' {..} =
+    Prelude.rnf proposalId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/DeleteAccessor.hs b/gen/Amazonka/ManagedBlockChain/DeleteAccessor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/DeleteAccessor.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.DeleteAccessor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The token based access feature is in preview release for Ethereum on
+-- Amazon Managed Blockchain and is subject to change. We recommend that
+-- you use this feature only with test scenarios, and not in production
+-- environments.
+--
+-- Deletes an accessor that your Amazon Web Services account owns. An
+-- accessor object is a container that has the information required for
+-- token based access to your Ethereum nodes including, the
+-- @BILLING_TOKEN@. After an accessor is deleted, the status of the
+-- accessor changes from @AVAILABLE@ to @PENDING_DELETION@. An accessor in
+-- the @PENDING_DELETION@ state can’t be used for new WebSocket requests or
+-- HTTP requests. However, WebSocket connections that were initiated while
+-- the accessor was in the @AVAILABLE@ state remain open until they expire
+-- (up to 2 hours).
+module Amazonka.ManagedBlockChain.DeleteAccessor
+  ( -- * Creating a Request
+    DeleteAccessor (..),
+    newDeleteAccessor,
+
+    -- * Request Lenses
+    deleteAccessor_accessorId,
+
+    -- * Destructuring the Response
+    DeleteAccessorResponse (..),
+    newDeleteAccessorResponse,
+
+    -- * Response Lenses
+    deleteAccessorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAccessor' smart constructor.
+data DeleteAccessor = DeleteAccessor'
+  { -- | The unique identifier of the accessor.
+    accessorId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessorId', 'deleteAccessor_accessorId' - The unique identifier of the accessor.
+newDeleteAccessor ::
+  -- | 'accessorId'
+  Prelude.Text ->
+  DeleteAccessor
+newDeleteAccessor pAccessorId_ =
+  DeleteAccessor' {accessorId = pAccessorId_}
+
+-- | The unique identifier of the accessor.
+deleteAccessor_accessorId :: Lens.Lens' DeleteAccessor Prelude.Text
+deleteAccessor_accessorId = Lens.lens (\DeleteAccessor' {accessorId} -> accessorId) (\s@DeleteAccessor' {} a -> s {accessorId = a} :: DeleteAccessor)
+
+instance Core.AWSRequest DeleteAccessor where
+  type
+    AWSResponse DeleteAccessor =
+      DeleteAccessorResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAccessorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAccessor where
+  hashWithSalt _salt DeleteAccessor' {..} =
+    _salt `Prelude.hashWithSalt` accessorId
+
+instance Prelude.NFData DeleteAccessor where
+  rnf DeleteAccessor' {..} = Prelude.rnf accessorId
+
+instance Data.ToHeaders DeleteAccessor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAccessor where
+  toPath DeleteAccessor' {..} =
+    Prelude.mconcat
+      ["/accessors/", Data.toBS accessorId]
+
+instance Data.ToQuery DeleteAccessor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAccessorResponse' smart constructor.
+data DeleteAccessorResponse = DeleteAccessorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteAccessorResponse_httpStatus' - The response's http status code.
+newDeleteAccessorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAccessorResponse
+newDeleteAccessorResponse pHttpStatus_ =
+  DeleteAccessorResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAccessorResponse_httpStatus :: Lens.Lens' DeleteAccessorResponse Prelude.Int
+deleteAccessorResponse_httpStatus = Lens.lens (\DeleteAccessorResponse' {httpStatus} -> httpStatus) (\s@DeleteAccessorResponse' {} a -> s {httpStatus = a} :: DeleteAccessorResponse)
+
+instance Prelude.NFData DeleteAccessorResponse where
+  rnf DeleteAccessorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/DeleteMember.hs b/gen/Amazonka/ManagedBlockChain/DeleteMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/DeleteMember.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.DeleteMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a member. Deleting a member removes the member and all
+-- associated resources from the network. @DeleteMember@ can only be called
+-- for a specified @MemberId@ if the principal performing the action is
+-- associated with the Amazon Web Services account that owns the member. In
+-- all other cases, the @DeleteMember@ action is carried out as the result
+-- of an approved proposal to remove a member. If @MemberId@ is the last
+-- member in a network specified by the last Amazon Web Services account,
+-- the network is deleted also.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.DeleteMember
+  ( -- * Creating a Request
+    DeleteMember (..),
+    newDeleteMember,
+
+    -- * Request Lenses
+    deleteMember_networkId,
+    deleteMember_memberId,
+
+    -- * Destructuring the Response
+    DeleteMemberResponse (..),
+    newDeleteMemberResponse,
+
+    -- * Response Lenses
+    deleteMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteMember' smart constructor.
+data DeleteMember = DeleteMember'
+  { -- | The unique identifier of the network from which the member is removed.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the member to remove.
+    memberId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkId', 'deleteMember_networkId' - The unique identifier of the network from which the member is removed.
+--
+-- 'memberId', 'deleteMember_memberId' - The unique identifier of the member to remove.
+newDeleteMember ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'memberId'
+  Prelude.Text ->
+  DeleteMember
+newDeleteMember pNetworkId_ pMemberId_ =
+  DeleteMember'
+    { networkId = pNetworkId_,
+      memberId = pMemberId_
+    }
+
+-- | The unique identifier of the network from which the member is removed.
+deleteMember_networkId :: Lens.Lens' DeleteMember Prelude.Text
+deleteMember_networkId = Lens.lens (\DeleteMember' {networkId} -> networkId) (\s@DeleteMember' {} a -> s {networkId = a} :: DeleteMember)
+
+-- | The unique identifier of the member to remove.
+deleteMember_memberId :: Lens.Lens' DeleteMember Prelude.Text
+deleteMember_memberId = Lens.lens (\DeleteMember' {memberId} -> memberId) (\s@DeleteMember' {} a -> s {memberId = a} :: DeleteMember)
+
+instance Core.AWSRequest DeleteMember where
+  type AWSResponse DeleteMember = DeleteMemberResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteMemberResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteMember where
+  hashWithSalt _salt DeleteMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` memberId
+
+instance Prelude.NFData DeleteMember where
+  rnf DeleteMember' {..} =
+    Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf memberId
+
+instance Data.ToHeaders DeleteMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteMember where
+  toPath DeleteMember' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/members/",
+        Data.toBS memberId
+      ]
+
+instance Data.ToQuery DeleteMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMemberResponse' smart constructor.
+data DeleteMemberResponse = DeleteMemberResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteMemberResponse_httpStatus' - The response's http status code.
+newDeleteMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteMemberResponse
+newDeleteMemberResponse pHttpStatus_ =
+  DeleteMemberResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteMemberResponse_httpStatus :: Lens.Lens' DeleteMemberResponse Prelude.Int
+deleteMemberResponse_httpStatus = Lens.lens (\DeleteMemberResponse' {httpStatus} -> httpStatus) (\s@DeleteMemberResponse' {} a -> s {httpStatus = a} :: DeleteMemberResponse)
+
+instance Prelude.NFData DeleteMemberResponse where
+  rnf DeleteMemberResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/DeleteNode.hs b/gen/Amazonka/ManagedBlockChain/DeleteNode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/DeleteNode.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.DeleteNode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a node that your Amazon Web Services account owns. All data on
+-- the node is lost and cannot be recovered.
+--
+-- Applies to Hyperledger Fabric and Ethereum.
+module Amazonka.ManagedBlockChain.DeleteNode
+  ( -- * Creating a Request
+    DeleteNode (..),
+    newDeleteNode,
+
+    -- * Request Lenses
+    deleteNode_memberId,
+    deleteNode_networkId,
+    deleteNode_nodeId,
+
+    -- * Destructuring the Response
+    DeleteNodeResponse (..),
+    newDeleteNodeResponse,
+
+    -- * Response Lenses
+    deleteNodeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNode' smart constructor.
+data DeleteNode = DeleteNode'
+  { -- | The unique identifier of the member that owns this node.
+    --
+    -- Applies only to Hyperledger Fabric and is required for Hyperledger
+    -- Fabric.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network that the node is on.
+    --
+    -- Ethereum public networks have the following @NetworkId@s:
+    --
+    -- -   @n-ethereum-mainnet@
+    --
+    -- -   @n-ethereum-goerli@
+    --
+    -- -   @n-ethereum-rinkeby@
+    --
+    -- -   @n-ethereum-ropsten@
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the node.
+    nodeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'deleteNode_memberId' - The unique identifier of the member that owns this node.
+--
+-- Applies only to Hyperledger Fabric and is required for Hyperledger
+-- Fabric.
+--
+-- 'networkId', 'deleteNode_networkId' - The unique identifier of the network that the node is on.
+--
+-- Ethereum public networks have the following @NetworkId@s:
+--
+-- -   @n-ethereum-mainnet@
+--
+-- -   @n-ethereum-goerli@
+--
+-- -   @n-ethereum-rinkeby@
+--
+-- -   @n-ethereum-ropsten@
+--
+-- 'nodeId', 'deleteNode_nodeId' - The unique identifier of the node.
+newDeleteNode ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'nodeId'
+  Prelude.Text ->
+  DeleteNode
+newDeleteNode pNetworkId_ pNodeId_ =
+  DeleteNode'
+    { memberId = Prelude.Nothing,
+      networkId = pNetworkId_,
+      nodeId = pNodeId_
+    }
+
+-- | The unique identifier of the member that owns this node.
+--
+-- Applies only to Hyperledger Fabric and is required for Hyperledger
+-- Fabric.
+deleteNode_memberId :: Lens.Lens' DeleteNode (Prelude.Maybe Prelude.Text)
+deleteNode_memberId = Lens.lens (\DeleteNode' {memberId} -> memberId) (\s@DeleteNode' {} a -> s {memberId = a} :: DeleteNode)
+
+-- | The unique identifier of the network that the node is on.
+--
+-- Ethereum public networks have the following @NetworkId@s:
+--
+-- -   @n-ethereum-mainnet@
+--
+-- -   @n-ethereum-goerli@
+--
+-- -   @n-ethereum-rinkeby@
+--
+-- -   @n-ethereum-ropsten@
+deleteNode_networkId :: Lens.Lens' DeleteNode Prelude.Text
+deleteNode_networkId = Lens.lens (\DeleteNode' {networkId} -> networkId) (\s@DeleteNode' {} a -> s {networkId = a} :: DeleteNode)
+
+-- | The unique identifier of the node.
+deleteNode_nodeId :: Lens.Lens' DeleteNode Prelude.Text
+deleteNode_nodeId = Lens.lens (\DeleteNode' {nodeId} -> nodeId) (\s@DeleteNode' {} a -> s {nodeId = a} :: DeleteNode)
+
+instance Core.AWSRequest DeleteNode where
+  type AWSResponse DeleteNode = DeleteNodeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteNodeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteNode where
+  hashWithSalt _salt DeleteNode' {..} =
+    _salt
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` nodeId
+
+instance Prelude.NFData DeleteNode where
+  rnf DeleteNode' {..} =
+    Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf nodeId
+
+instance Data.ToHeaders DeleteNode where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteNode where
+  toPath DeleteNode' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/nodes/",
+        Data.toBS nodeId
+      ]
+
+instance Data.ToQuery DeleteNode where
+  toQuery DeleteNode' {..} =
+    Prelude.mconcat ["memberId" Data.=: memberId]
+
+-- | /See:/ 'newDeleteNodeResponse' smart constructor.
+data DeleteNodeResponse = DeleteNodeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNodeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteNodeResponse_httpStatus' - The response's http status code.
+newDeleteNodeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNodeResponse
+newDeleteNodeResponse pHttpStatus_ =
+  DeleteNodeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteNodeResponse_httpStatus :: Lens.Lens' DeleteNodeResponse Prelude.Int
+deleteNodeResponse_httpStatus = Lens.lens (\DeleteNodeResponse' {httpStatus} -> httpStatus) (\s@DeleteNodeResponse' {} a -> s {httpStatus = a} :: DeleteNodeResponse)
+
+instance Prelude.NFData DeleteNodeResponse where
+  rnf DeleteNodeResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/GetAccessor.hs b/gen/Amazonka/ManagedBlockChain/GetAccessor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/GetAccessor.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.GetAccessor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The token based access feature is in preview release for Ethereum on
+-- Amazon Managed Blockchain and is subject to change. We recommend that
+-- you use this feature only with test scenarios, and not in production
+-- environments.
+--
+-- Returns detailed information about an accessor. An accessor object is a
+-- container that has the information required for token based access to
+-- your Ethereum nodes.
+module Amazonka.ManagedBlockChain.GetAccessor
+  ( -- * Creating a Request
+    GetAccessor (..),
+    newGetAccessor,
+
+    -- * Request Lenses
+    getAccessor_accessorId,
+
+    -- * Destructuring the Response
+    GetAccessorResponse (..),
+    newGetAccessorResponse,
+
+    -- * Response Lenses
+    getAccessorResponse_accessor,
+    getAccessorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAccessor' smart constructor.
+data GetAccessor = GetAccessor'
+  { -- | The unique identifier of the accessor.
+    accessorId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccessor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessorId', 'getAccessor_accessorId' - The unique identifier of the accessor.
+newGetAccessor ::
+  -- | 'accessorId'
+  Prelude.Text ->
+  GetAccessor
+newGetAccessor pAccessorId_ =
+  GetAccessor' {accessorId = pAccessorId_}
+
+-- | The unique identifier of the accessor.
+getAccessor_accessorId :: Lens.Lens' GetAccessor Prelude.Text
+getAccessor_accessorId = Lens.lens (\GetAccessor' {accessorId} -> accessorId) (\s@GetAccessor' {} a -> s {accessorId = a} :: GetAccessor)
+
+instance Core.AWSRequest GetAccessor where
+  type AWSResponse GetAccessor = GetAccessorResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAccessorResponse'
+            Prelude.<$> (x Data..?> "Accessor")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAccessor where
+  hashWithSalt _salt GetAccessor' {..} =
+    _salt `Prelude.hashWithSalt` accessorId
+
+instance Prelude.NFData GetAccessor where
+  rnf GetAccessor' {..} = Prelude.rnf accessorId
+
+instance Data.ToHeaders GetAccessor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAccessor where
+  toPath GetAccessor' {..} =
+    Prelude.mconcat
+      ["/accessors/", Data.toBS accessorId]
+
+instance Data.ToQuery GetAccessor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAccessorResponse' smart constructor.
+data GetAccessorResponse = GetAccessorResponse'
+  { -- | The properties of the accessor.
+    accessor :: Prelude.Maybe Accessor,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccessorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessor', 'getAccessorResponse_accessor' - The properties of the accessor.
+--
+-- 'httpStatus', 'getAccessorResponse_httpStatus' - The response's http status code.
+newGetAccessorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAccessorResponse
+newGetAccessorResponse pHttpStatus_ =
+  GetAccessorResponse'
+    { accessor = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The properties of the accessor.
+getAccessorResponse_accessor :: Lens.Lens' GetAccessorResponse (Prelude.Maybe Accessor)
+getAccessorResponse_accessor = Lens.lens (\GetAccessorResponse' {accessor} -> accessor) (\s@GetAccessorResponse' {} a -> s {accessor = a} :: GetAccessorResponse)
+
+-- | The response's http status code.
+getAccessorResponse_httpStatus :: Lens.Lens' GetAccessorResponse Prelude.Int
+getAccessorResponse_httpStatus = Lens.lens (\GetAccessorResponse' {httpStatus} -> httpStatus) (\s@GetAccessorResponse' {} a -> s {httpStatus = a} :: GetAccessorResponse)
+
+instance Prelude.NFData GetAccessorResponse where
+  rnf GetAccessorResponse' {..} =
+    Prelude.rnf accessor
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/GetMember.hs b/gen/Amazonka/ManagedBlockChain/GetMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/GetMember.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.GetMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns detailed information about a member.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.GetMember
+  ( -- * Creating a Request
+    GetMember (..),
+    newGetMember,
+
+    -- * Request Lenses
+    getMember_networkId,
+    getMember_memberId,
+
+    -- * Destructuring the Response
+    GetMemberResponse (..),
+    newGetMemberResponse,
+
+    -- * Response Lenses
+    getMemberResponse_member,
+    getMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMember' smart constructor.
+data GetMember = GetMember'
+  { -- | The unique identifier of the network to which the member belongs.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the member.
+    memberId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkId', 'getMember_networkId' - The unique identifier of the network to which the member belongs.
+--
+-- 'memberId', 'getMember_memberId' - The unique identifier of the member.
+newGetMember ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'memberId'
+  Prelude.Text ->
+  GetMember
+newGetMember pNetworkId_ pMemberId_ =
+  GetMember'
+    { networkId = pNetworkId_,
+      memberId = pMemberId_
+    }
+
+-- | The unique identifier of the network to which the member belongs.
+getMember_networkId :: Lens.Lens' GetMember Prelude.Text
+getMember_networkId = Lens.lens (\GetMember' {networkId} -> networkId) (\s@GetMember' {} a -> s {networkId = a} :: GetMember)
+
+-- | The unique identifier of the member.
+getMember_memberId :: Lens.Lens' GetMember Prelude.Text
+getMember_memberId = Lens.lens (\GetMember' {memberId} -> memberId) (\s@GetMember' {} a -> s {memberId = a} :: GetMember)
+
+instance Core.AWSRequest GetMember where
+  type AWSResponse GetMember = GetMemberResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMemberResponse'
+            Prelude.<$> (x Data..?> "Member")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMember where
+  hashWithSalt _salt GetMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` memberId
+
+instance Prelude.NFData GetMember where
+  rnf GetMember' {..} =
+    Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf memberId
+
+instance Data.ToHeaders GetMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMember where
+  toPath GetMember' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/members/",
+        Data.toBS memberId
+      ]
+
+instance Data.ToQuery GetMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMemberResponse' smart constructor.
+data GetMemberResponse = GetMemberResponse'
+  { -- | The properties of a member.
+    member :: Prelude.Maybe Member,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'member', 'getMemberResponse_member' - The properties of a member.
+--
+-- 'httpStatus', 'getMemberResponse_httpStatus' - The response's http status code.
+newGetMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMemberResponse
+newGetMemberResponse pHttpStatus_ =
+  GetMemberResponse'
+    { member = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The properties of a member.
+getMemberResponse_member :: Lens.Lens' GetMemberResponse (Prelude.Maybe Member)
+getMemberResponse_member = Lens.lens (\GetMemberResponse' {member} -> member) (\s@GetMemberResponse' {} a -> s {member = a} :: GetMemberResponse)
+
+-- | The response's http status code.
+getMemberResponse_httpStatus :: Lens.Lens' GetMemberResponse Prelude.Int
+getMemberResponse_httpStatus = Lens.lens (\GetMemberResponse' {httpStatus} -> httpStatus) (\s@GetMemberResponse' {} a -> s {httpStatus = a} :: GetMemberResponse)
+
+instance Prelude.NFData GetMemberResponse where
+  rnf GetMemberResponse' {..} =
+    Prelude.rnf member
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/GetNetwork.hs b/gen/Amazonka/ManagedBlockChain/GetNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/GetNetwork.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.GetNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns detailed information about a network.
+--
+-- Applies to Hyperledger Fabric and Ethereum.
+module Amazonka.ManagedBlockChain.GetNetwork
+  ( -- * Creating a Request
+    GetNetwork (..),
+    newGetNetwork,
+
+    -- * Request Lenses
+    getNetwork_networkId,
+
+    -- * Destructuring the Response
+    GetNetworkResponse (..),
+    newGetNetworkResponse,
+
+    -- * Response Lenses
+    getNetworkResponse_network,
+    getNetworkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetNetwork' smart constructor.
+data GetNetwork = GetNetwork'
+  { -- | The unique identifier of the network to get information about.
+    networkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkId', 'getNetwork_networkId' - The unique identifier of the network to get information about.
+newGetNetwork ::
+  -- | 'networkId'
+  Prelude.Text ->
+  GetNetwork
+newGetNetwork pNetworkId_ =
+  GetNetwork' {networkId = pNetworkId_}
+
+-- | The unique identifier of the network to get information about.
+getNetwork_networkId :: Lens.Lens' GetNetwork Prelude.Text
+getNetwork_networkId = Lens.lens (\GetNetwork' {networkId} -> networkId) (\s@GetNetwork' {} a -> s {networkId = a} :: GetNetwork)
+
+instance Core.AWSRequest GetNetwork where
+  type AWSResponse GetNetwork = GetNetworkResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetNetworkResponse'
+            Prelude.<$> (x Data..?> "Network")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetNetwork where
+  hashWithSalt _salt GetNetwork' {..} =
+    _salt `Prelude.hashWithSalt` networkId
+
+instance Prelude.NFData GetNetwork where
+  rnf GetNetwork' {..} = Prelude.rnf networkId
+
+instance Data.ToHeaders GetNetwork where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetNetwork where
+  toPath GetNetwork' {..} =
+    Prelude.mconcat ["/networks/", Data.toBS networkId]
+
+instance Data.ToQuery GetNetwork where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetNetworkResponse' smart constructor.
+data GetNetworkResponse = GetNetworkResponse'
+  { -- | An object containing network configuration parameters.
+    network :: Prelude.Maybe Network,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'network', 'getNetworkResponse_network' - An object containing network configuration parameters.
+--
+-- 'httpStatus', 'getNetworkResponse_httpStatus' - The response's http status code.
+newGetNetworkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetNetworkResponse
+newGetNetworkResponse pHttpStatus_ =
+  GetNetworkResponse'
+    { network = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An object containing network configuration parameters.
+getNetworkResponse_network :: Lens.Lens' GetNetworkResponse (Prelude.Maybe Network)
+getNetworkResponse_network = Lens.lens (\GetNetworkResponse' {network} -> network) (\s@GetNetworkResponse' {} a -> s {network = a} :: GetNetworkResponse)
+
+-- | The response's http status code.
+getNetworkResponse_httpStatus :: Lens.Lens' GetNetworkResponse Prelude.Int
+getNetworkResponse_httpStatus = Lens.lens (\GetNetworkResponse' {httpStatus} -> httpStatus) (\s@GetNetworkResponse' {} a -> s {httpStatus = a} :: GetNetworkResponse)
+
+instance Prelude.NFData GetNetworkResponse where
+  rnf GetNetworkResponse' {..} =
+    Prelude.rnf network
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/GetNode.hs b/gen/Amazonka/ManagedBlockChain/GetNode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/GetNode.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.GetNode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns detailed information about a node.
+--
+-- Applies to Hyperledger Fabric and Ethereum.
+module Amazonka.ManagedBlockChain.GetNode
+  ( -- * Creating a Request
+    GetNode (..),
+    newGetNode,
+
+    -- * Request Lenses
+    getNode_memberId,
+    getNode_networkId,
+    getNode_nodeId,
+
+    -- * Destructuring the Response
+    GetNodeResponse (..),
+    newGetNodeResponse,
+
+    -- * Response Lenses
+    getNodeResponse_node,
+    getNodeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetNode' smart constructor.
+data GetNode = GetNode'
+  { -- | The unique identifier of the member that owns the node.
+    --
+    -- Applies only to Hyperledger Fabric and is required for Hyperledger
+    -- Fabric.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network that the node is on.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the node.
+    nodeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'getNode_memberId' - The unique identifier of the member that owns the node.
+--
+-- Applies only to Hyperledger Fabric and is required for Hyperledger
+-- Fabric.
+--
+-- 'networkId', 'getNode_networkId' - The unique identifier of the network that the node is on.
+--
+-- 'nodeId', 'getNode_nodeId' - The unique identifier of the node.
+newGetNode ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'nodeId'
+  Prelude.Text ->
+  GetNode
+newGetNode pNetworkId_ pNodeId_ =
+  GetNode'
+    { memberId = Prelude.Nothing,
+      networkId = pNetworkId_,
+      nodeId = pNodeId_
+    }
+
+-- | The unique identifier of the member that owns the node.
+--
+-- Applies only to Hyperledger Fabric and is required for Hyperledger
+-- Fabric.
+getNode_memberId :: Lens.Lens' GetNode (Prelude.Maybe Prelude.Text)
+getNode_memberId = Lens.lens (\GetNode' {memberId} -> memberId) (\s@GetNode' {} a -> s {memberId = a} :: GetNode)
+
+-- | The unique identifier of the network that the node is on.
+getNode_networkId :: Lens.Lens' GetNode Prelude.Text
+getNode_networkId = Lens.lens (\GetNode' {networkId} -> networkId) (\s@GetNode' {} a -> s {networkId = a} :: GetNode)
+
+-- | The unique identifier of the node.
+getNode_nodeId :: Lens.Lens' GetNode Prelude.Text
+getNode_nodeId = Lens.lens (\GetNode' {nodeId} -> nodeId) (\s@GetNode' {} a -> s {nodeId = a} :: GetNode)
+
+instance Core.AWSRequest GetNode where
+  type AWSResponse GetNode = GetNodeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetNodeResponse'
+            Prelude.<$> (x Data..?> "Node")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetNode where
+  hashWithSalt _salt GetNode' {..} =
+    _salt
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` nodeId
+
+instance Prelude.NFData GetNode where
+  rnf GetNode' {..} =
+    Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf nodeId
+
+instance Data.ToHeaders GetNode where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetNode where
+  toPath GetNode' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/nodes/",
+        Data.toBS nodeId
+      ]
+
+instance Data.ToQuery GetNode where
+  toQuery GetNode' {..} =
+    Prelude.mconcat ["memberId" Data.=: memberId]
+
+-- | /See:/ 'newGetNodeResponse' smart constructor.
+data GetNodeResponse = GetNodeResponse'
+  { -- | Properties of the node configuration.
+    node :: Prelude.Maybe Node,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNodeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'node', 'getNodeResponse_node' - Properties of the node configuration.
+--
+-- 'httpStatus', 'getNodeResponse_httpStatus' - The response's http status code.
+newGetNodeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetNodeResponse
+newGetNodeResponse pHttpStatus_ =
+  GetNodeResponse'
+    { node = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Properties of the node configuration.
+getNodeResponse_node :: Lens.Lens' GetNodeResponse (Prelude.Maybe Node)
+getNodeResponse_node = Lens.lens (\GetNodeResponse' {node} -> node) (\s@GetNodeResponse' {} a -> s {node = a} :: GetNodeResponse)
+
+-- | The response's http status code.
+getNodeResponse_httpStatus :: Lens.Lens' GetNodeResponse Prelude.Int
+getNodeResponse_httpStatus = Lens.lens (\GetNodeResponse' {httpStatus} -> httpStatus) (\s@GetNodeResponse' {} a -> s {httpStatus = a} :: GetNodeResponse)
+
+instance Prelude.NFData GetNodeResponse where
+  rnf GetNodeResponse' {..} =
+    Prelude.rnf node
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/GetProposal.hs b/gen/Amazonka/ManagedBlockChain/GetProposal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/GetProposal.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.GetProposal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns detailed information about a proposal.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.GetProposal
+  ( -- * Creating a Request
+    GetProposal (..),
+    newGetProposal,
+
+    -- * Request Lenses
+    getProposal_networkId,
+    getProposal_proposalId,
+
+    -- * Destructuring the Response
+    GetProposalResponse (..),
+    newGetProposalResponse,
+
+    -- * Response Lenses
+    getProposalResponse_proposal,
+    getProposalResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetProposal' smart constructor.
+data GetProposal = GetProposal'
+  { -- | The unique identifier of the network for which the proposal is made.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the proposal.
+    proposalId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProposal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkId', 'getProposal_networkId' - The unique identifier of the network for which the proposal is made.
+--
+-- 'proposalId', 'getProposal_proposalId' - The unique identifier of the proposal.
+newGetProposal ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'proposalId'
+  Prelude.Text ->
+  GetProposal
+newGetProposal pNetworkId_ pProposalId_ =
+  GetProposal'
+    { networkId = pNetworkId_,
+      proposalId = pProposalId_
+    }
+
+-- | The unique identifier of the network for which the proposal is made.
+getProposal_networkId :: Lens.Lens' GetProposal Prelude.Text
+getProposal_networkId = Lens.lens (\GetProposal' {networkId} -> networkId) (\s@GetProposal' {} a -> s {networkId = a} :: GetProposal)
+
+-- | The unique identifier of the proposal.
+getProposal_proposalId :: Lens.Lens' GetProposal Prelude.Text
+getProposal_proposalId = Lens.lens (\GetProposal' {proposalId} -> proposalId) (\s@GetProposal' {} a -> s {proposalId = a} :: GetProposal)
+
+instance Core.AWSRequest GetProposal where
+  type AWSResponse GetProposal = GetProposalResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetProposalResponse'
+            Prelude.<$> (x Data..?> "Proposal")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetProposal where
+  hashWithSalt _salt GetProposal' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` proposalId
+
+instance Prelude.NFData GetProposal where
+  rnf GetProposal' {..} =
+    Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf proposalId
+
+instance Data.ToHeaders GetProposal where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetProposal where
+  toPath GetProposal' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/proposals/",
+        Data.toBS proposalId
+      ]
+
+instance Data.ToQuery GetProposal where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetProposalResponse' smart constructor.
+data GetProposalResponse = GetProposalResponse'
+  { -- | Information about a proposal.
+    proposal :: Prelude.Maybe Proposal,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProposalResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'proposal', 'getProposalResponse_proposal' - Information about a proposal.
+--
+-- 'httpStatus', 'getProposalResponse_httpStatus' - The response's http status code.
+newGetProposalResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetProposalResponse
+newGetProposalResponse pHttpStatus_ =
+  GetProposalResponse'
+    { proposal = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about a proposal.
+getProposalResponse_proposal :: Lens.Lens' GetProposalResponse (Prelude.Maybe Proposal)
+getProposalResponse_proposal = Lens.lens (\GetProposalResponse' {proposal} -> proposal) (\s@GetProposalResponse' {} a -> s {proposal = a} :: GetProposalResponse)
+
+-- | The response's http status code.
+getProposalResponse_httpStatus :: Lens.Lens' GetProposalResponse Prelude.Int
+getProposalResponse_httpStatus = Lens.lens (\GetProposalResponse' {httpStatus} -> httpStatus) (\s@GetProposalResponse' {} a -> s {httpStatus = a} :: GetProposalResponse)
+
+instance Prelude.NFData GetProposalResponse where
+  rnf GetProposalResponse' {..} =
+    Prelude.rnf proposal
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/Lens.hs b/gen/Amazonka/ManagedBlockChain/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Lens.hs
@@ -0,0 +1,494 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Lens
+  ( -- * Operations
+
+    -- ** CreateAccessor
+    createAccessor_clientRequestToken,
+    createAccessor_accessorType,
+    createAccessorResponse_accessorId,
+    createAccessorResponse_billingToken,
+    createAccessorResponse_httpStatus,
+
+    -- ** CreateMember
+    createMember_clientRequestToken,
+    createMember_invitationId,
+    createMember_networkId,
+    createMember_memberConfiguration,
+    createMemberResponse_memberId,
+    createMemberResponse_httpStatus,
+
+    -- ** CreateNetwork
+    createNetwork_description,
+    createNetwork_frameworkConfiguration,
+    createNetwork_tags,
+    createNetwork_clientRequestToken,
+    createNetwork_name,
+    createNetwork_framework,
+    createNetwork_frameworkVersion,
+    createNetwork_votingPolicy,
+    createNetwork_memberConfiguration,
+    createNetworkResponse_memberId,
+    createNetworkResponse_networkId,
+    createNetworkResponse_httpStatus,
+
+    -- ** CreateNode
+    createNode_memberId,
+    createNode_tags,
+    createNode_clientRequestToken,
+    createNode_networkId,
+    createNode_nodeConfiguration,
+    createNodeResponse_nodeId,
+    createNodeResponse_httpStatus,
+
+    -- ** CreateProposal
+    createProposal_description,
+    createProposal_tags,
+    createProposal_clientRequestToken,
+    createProposal_networkId,
+    createProposal_memberId,
+    createProposal_actions,
+    createProposalResponse_proposalId,
+    createProposalResponse_httpStatus,
+
+    -- ** DeleteAccessor
+    deleteAccessor_accessorId,
+    deleteAccessorResponse_httpStatus,
+
+    -- ** DeleteMember
+    deleteMember_networkId,
+    deleteMember_memberId,
+    deleteMemberResponse_httpStatus,
+
+    -- ** DeleteNode
+    deleteNode_memberId,
+    deleteNode_networkId,
+    deleteNode_nodeId,
+    deleteNodeResponse_httpStatus,
+
+    -- ** GetAccessor
+    getAccessor_accessorId,
+    getAccessorResponse_accessor,
+    getAccessorResponse_httpStatus,
+
+    -- ** GetMember
+    getMember_networkId,
+    getMember_memberId,
+    getMemberResponse_member,
+    getMemberResponse_httpStatus,
+
+    -- ** GetNetwork
+    getNetwork_networkId,
+    getNetworkResponse_network,
+    getNetworkResponse_httpStatus,
+
+    -- ** GetNode
+    getNode_memberId,
+    getNode_networkId,
+    getNode_nodeId,
+    getNodeResponse_node,
+    getNodeResponse_httpStatus,
+
+    -- ** GetProposal
+    getProposal_networkId,
+    getProposal_proposalId,
+    getProposalResponse_proposal,
+    getProposalResponse_httpStatus,
+
+    -- ** ListAccessors
+    listAccessors_maxResults,
+    listAccessors_nextToken,
+    listAccessorsResponse_accessors,
+    listAccessorsResponse_nextToken,
+    listAccessorsResponse_httpStatus,
+
+    -- ** ListInvitations
+    listInvitations_maxResults,
+    listInvitations_nextToken,
+    listInvitationsResponse_invitations,
+    listInvitationsResponse_nextToken,
+    listInvitationsResponse_httpStatus,
+
+    -- ** ListMembers
+    listMembers_isOwned,
+    listMembers_maxResults,
+    listMembers_name,
+    listMembers_nextToken,
+    listMembers_status,
+    listMembers_networkId,
+    listMembersResponse_members,
+    listMembersResponse_nextToken,
+    listMembersResponse_httpStatus,
+
+    -- ** ListNetworks
+    listNetworks_framework,
+    listNetworks_maxResults,
+    listNetworks_name,
+    listNetworks_nextToken,
+    listNetworks_status,
+    listNetworksResponse_networks,
+    listNetworksResponse_nextToken,
+    listNetworksResponse_httpStatus,
+
+    -- ** ListNodes
+    listNodes_maxResults,
+    listNodes_memberId,
+    listNodes_nextToken,
+    listNodes_status,
+    listNodes_networkId,
+    listNodesResponse_nextToken,
+    listNodesResponse_nodes,
+    listNodesResponse_httpStatus,
+
+    -- ** ListProposalVotes
+    listProposalVotes_maxResults,
+    listProposalVotes_nextToken,
+    listProposalVotes_networkId,
+    listProposalVotes_proposalId,
+    listProposalVotesResponse_nextToken,
+    listProposalVotesResponse_proposalVotes,
+    listProposalVotesResponse_httpStatus,
+
+    -- ** ListProposals
+    listProposals_maxResults,
+    listProposals_nextToken,
+    listProposals_networkId,
+    listProposalsResponse_nextToken,
+    listProposalsResponse_proposals,
+    listProposalsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** RejectInvitation
+    rejectInvitation_invitationId,
+    rejectInvitationResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateMember
+    updateMember_logPublishingConfiguration,
+    updateMember_networkId,
+    updateMember_memberId,
+    updateMemberResponse_httpStatus,
+
+    -- ** UpdateNode
+    updateNode_logPublishingConfiguration,
+    updateNode_memberId,
+    updateNode_networkId,
+    updateNode_nodeId,
+    updateNodeResponse_httpStatus,
+
+    -- ** VoteOnProposal
+    voteOnProposal_networkId,
+    voteOnProposal_proposalId,
+    voteOnProposal_voterMemberId,
+    voteOnProposal_vote,
+    voteOnProposalResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Accessor
+    accessor_arn,
+    accessor_billingToken,
+    accessor_creationDate,
+    accessor_id,
+    accessor_status,
+    accessor_type,
+
+    -- ** AccessorSummary
+    accessorSummary_arn,
+    accessorSummary_creationDate,
+    accessorSummary_id,
+    accessorSummary_status,
+    accessorSummary_type,
+
+    -- ** ApprovalThresholdPolicy
+    approvalThresholdPolicy_proposalDurationInHours,
+    approvalThresholdPolicy_thresholdComparator,
+    approvalThresholdPolicy_thresholdPercentage,
+
+    -- ** Invitation
+    invitation_arn,
+    invitation_creationDate,
+    invitation_expirationDate,
+    invitation_invitationId,
+    invitation_networkSummary,
+    invitation_status,
+
+    -- ** InviteAction
+    inviteAction_principal,
+
+    -- ** LogConfiguration
+    logConfiguration_enabled,
+
+    -- ** LogConfigurations
+    logConfigurations_cloudwatch,
+
+    -- ** Member
+    member_arn,
+    member_creationDate,
+    member_description,
+    member_frameworkAttributes,
+    member_id,
+    member_kmsKeyArn,
+    member_logPublishingConfiguration,
+    member_name,
+    member_networkId,
+    member_status,
+    member_tags,
+
+    -- ** MemberConfiguration
+    memberConfiguration_description,
+    memberConfiguration_kmsKeyArn,
+    memberConfiguration_logPublishingConfiguration,
+    memberConfiguration_tags,
+    memberConfiguration_name,
+    memberConfiguration_frameworkConfiguration,
+
+    -- ** MemberFabricAttributes
+    memberFabricAttributes_adminUsername,
+    memberFabricAttributes_caEndpoint,
+
+    -- ** MemberFabricConfiguration
+    memberFabricConfiguration_adminUsername,
+    memberFabricConfiguration_adminPassword,
+
+    -- ** MemberFabricLogPublishingConfiguration
+    memberFabricLogPublishingConfiguration_caLogs,
+
+    -- ** MemberFrameworkAttributes
+    memberFrameworkAttributes_fabric,
+
+    -- ** MemberFrameworkConfiguration
+    memberFrameworkConfiguration_fabric,
+
+    -- ** MemberLogPublishingConfiguration
+    memberLogPublishingConfiguration_fabric,
+
+    -- ** MemberSummary
+    memberSummary_arn,
+    memberSummary_creationDate,
+    memberSummary_description,
+    memberSummary_id,
+    memberSummary_isOwned,
+    memberSummary_name,
+    memberSummary_status,
+
+    -- ** Network
+    network_arn,
+    network_creationDate,
+    network_description,
+    network_framework,
+    network_frameworkAttributes,
+    network_frameworkVersion,
+    network_id,
+    network_name,
+    network_status,
+    network_tags,
+    network_votingPolicy,
+    network_vpcEndpointServiceName,
+
+    -- ** NetworkEthereumAttributes
+    networkEthereumAttributes_chainId,
+
+    -- ** NetworkFabricAttributes
+    networkFabricAttributes_edition,
+    networkFabricAttributes_orderingServiceEndpoint,
+
+    -- ** NetworkFabricConfiguration
+    networkFabricConfiguration_edition,
+
+    -- ** NetworkFrameworkAttributes
+    networkFrameworkAttributes_ethereum,
+    networkFrameworkAttributes_fabric,
+
+    -- ** NetworkFrameworkConfiguration
+    networkFrameworkConfiguration_fabric,
+
+    -- ** NetworkSummary
+    networkSummary_arn,
+    networkSummary_creationDate,
+    networkSummary_description,
+    networkSummary_framework,
+    networkSummary_frameworkVersion,
+    networkSummary_id,
+    networkSummary_name,
+    networkSummary_status,
+
+    -- ** Node
+    node_arn,
+    node_availabilityZone,
+    node_creationDate,
+    node_frameworkAttributes,
+    node_id,
+    node_instanceType,
+    node_kmsKeyArn,
+    node_logPublishingConfiguration,
+    node_memberId,
+    node_networkId,
+    node_stateDB,
+    node_status,
+    node_tags,
+
+    -- ** NodeConfiguration
+    nodeConfiguration_availabilityZone,
+    nodeConfiguration_logPublishingConfiguration,
+    nodeConfiguration_stateDB,
+    nodeConfiguration_instanceType,
+
+    -- ** NodeEthereumAttributes
+    nodeEthereumAttributes_httpEndpoint,
+    nodeEthereumAttributes_webSocketEndpoint,
+
+    -- ** NodeFabricAttributes
+    nodeFabricAttributes_peerEndpoint,
+    nodeFabricAttributes_peerEventEndpoint,
+
+    -- ** NodeFabricLogPublishingConfiguration
+    nodeFabricLogPublishingConfiguration_chaincodeLogs,
+    nodeFabricLogPublishingConfiguration_peerLogs,
+
+    -- ** NodeFrameworkAttributes
+    nodeFrameworkAttributes_ethereum,
+    nodeFrameworkAttributes_fabric,
+
+    -- ** NodeLogPublishingConfiguration
+    nodeLogPublishingConfiguration_fabric,
+
+    -- ** NodeSummary
+    nodeSummary_arn,
+    nodeSummary_availabilityZone,
+    nodeSummary_creationDate,
+    nodeSummary_id,
+    nodeSummary_instanceType,
+    nodeSummary_status,
+
+    -- ** Proposal
+    proposal_actions,
+    proposal_arn,
+    proposal_creationDate,
+    proposal_description,
+    proposal_expirationDate,
+    proposal_networkId,
+    proposal_noVoteCount,
+    proposal_outstandingVoteCount,
+    proposal_proposalId,
+    proposal_proposedByMemberId,
+    proposal_proposedByMemberName,
+    proposal_status,
+    proposal_tags,
+    proposal_yesVoteCount,
+
+    -- ** ProposalActions
+    proposalActions_invitations,
+    proposalActions_removals,
+
+    -- ** ProposalSummary
+    proposalSummary_arn,
+    proposalSummary_creationDate,
+    proposalSummary_description,
+    proposalSummary_expirationDate,
+    proposalSummary_proposalId,
+    proposalSummary_proposedByMemberId,
+    proposalSummary_proposedByMemberName,
+    proposalSummary_status,
+
+    -- ** RemoveAction
+    removeAction_memberId,
+
+    -- ** VoteSummary
+    voteSummary_memberId,
+    voteSummary_memberName,
+    voteSummary_vote,
+
+    -- ** VotingPolicy
+    votingPolicy_approvalThresholdPolicy,
+  )
+where
+
+import Amazonka.ManagedBlockChain.CreateAccessor
+import Amazonka.ManagedBlockChain.CreateMember
+import Amazonka.ManagedBlockChain.CreateNetwork
+import Amazonka.ManagedBlockChain.CreateNode
+import Amazonka.ManagedBlockChain.CreateProposal
+import Amazonka.ManagedBlockChain.DeleteAccessor
+import Amazonka.ManagedBlockChain.DeleteMember
+import Amazonka.ManagedBlockChain.DeleteNode
+import Amazonka.ManagedBlockChain.GetAccessor
+import Amazonka.ManagedBlockChain.GetMember
+import Amazonka.ManagedBlockChain.GetNetwork
+import Amazonka.ManagedBlockChain.GetNode
+import Amazonka.ManagedBlockChain.GetProposal
+import Amazonka.ManagedBlockChain.ListAccessors
+import Amazonka.ManagedBlockChain.ListInvitations
+import Amazonka.ManagedBlockChain.ListMembers
+import Amazonka.ManagedBlockChain.ListNetworks
+import Amazonka.ManagedBlockChain.ListNodes
+import Amazonka.ManagedBlockChain.ListProposalVotes
+import Amazonka.ManagedBlockChain.ListProposals
+import Amazonka.ManagedBlockChain.ListTagsForResource
+import Amazonka.ManagedBlockChain.RejectInvitation
+import Amazonka.ManagedBlockChain.TagResource
+import Amazonka.ManagedBlockChain.Types.Accessor
+import Amazonka.ManagedBlockChain.Types.AccessorSummary
+import Amazonka.ManagedBlockChain.Types.ApprovalThresholdPolicy
+import Amazonka.ManagedBlockChain.Types.Invitation
+import Amazonka.ManagedBlockChain.Types.InviteAction
+import Amazonka.ManagedBlockChain.Types.LogConfiguration
+import Amazonka.ManagedBlockChain.Types.LogConfigurations
+import Amazonka.ManagedBlockChain.Types.Member
+import Amazonka.ManagedBlockChain.Types.MemberConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberFabricAttributes
+import Amazonka.ManagedBlockChain.Types.MemberFabricConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberFabricLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.MemberFrameworkConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberSummary
+import Amazonka.ManagedBlockChain.Types.Network
+import Amazonka.ManagedBlockChain.Types.NetworkEthereumAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFabricAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFabricConfiguration
+import Amazonka.ManagedBlockChain.Types.NetworkFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFrameworkConfiguration
+import Amazonka.ManagedBlockChain.Types.NetworkSummary
+import Amazonka.ManagedBlockChain.Types.Node
+import Amazonka.ManagedBlockChain.Types.NodeConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeEthereumAttributes
+import Amazonka.ManagedBlockChain.Types.NodeFabricAttributes
+import Amazonka.ManagedBlockChain.Types.NodeFabricLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeSummary
+import Amazonka.ManagedBlockChain.Types.Proposal
+import Amazonka.ManagedBlockChain.Types.ProposalActions
+import Amazonka.ManagedBlockChain.Types.ProposalSummary
+import Amazonka.ManagedBlockChain.Types.RemoveAction
+import Amazonka.ManagedBlockChain.Types.VoteSummary
+import Amazonka.ManagedBlockChain.Types.VotingPolicy
+import Amazonka.ManagedBlockChain.UntagResource
+import Amazonka.ManagedBlockChain.UpdateMember
+import Amazonka.ManagedBlockChain.UpdateNode
+import Amazonka.ManagedBlockChain.VoteOnProposal
diff --git a/gen/Amazonka/ManagedBlockChain/ListAccessors.hs b/gen/Amazonka/ManagedBlockChain/ListAccessors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListAccessors.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListAccessors
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The token based access feature is in preview release for Ethereum on
+-- Amazon Managed Blockchain and is subject to change. We recommend that
+-- you use this feature only with test scenarios, and not in production
+-- environments.
+--
+-- Returns a list of the accessors and their properties. Accessor objects
+-- are containers that have the information required for token based access
+-- to your Ethereum nodes.
+--
+-- This operation returns paginated results.
+module Amazonka.ManagedBlockChain.ListAccessors
+  ( -- * Creating a Request
+    ListAccessors (..),
+    newListAccessors,
+
+    -- * Request Lenses
+    listAccessors_maxResults,
+    listAccessors_nextToken,
+
+    -- * Destructuring the Response
+    ListAccessorsResponse (..),
+    newListAccessorsResponse,
+
+    -- * Response Lenses
+    listAccessorsResponse_accessors,
+    listAccessorsResponse_nextToken,
+    listAccessorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAccessors' smart constructor.
+data ListAccessors = ListAccessors'
+  { -- | The maximum number of accessors to list.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccessors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listAccessors_maxResults' - The maximum number of accessors to list.
+--
+-- 'nextToken', 'listAccessors_nextToken' - The pagination token that indicates the next set of results to retrieve.
+newListAccessors ::
+  ListAccessors
+newListAccessors =
+  ListAccessors'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of accessors to list.
+listAccessors_maxResults :: Lens.Lens' ListAccessors (Prelude.Maybe Prelude.Natural)
+listAccessors_maxResults = Lens.lens (\ListAccessors' {maxResults} -> maxResults) (\s@ListAccessors' {} a -> s {maxResults = a} :: ListAccessors)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listAccessors_nextToken :: Lens.Lens' ListAccessors (Prelude.Maybe Prelude.Text)
+listAccessors_nextToken = Lens.lens (\ListAccessors' {nextToken} -> nextToken) (\s@ListAccessors' {} a -> s {nextToken = a} :: ListAccessors)
+
+instance Core.AWSPager ListAccessors where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAccessorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAccessorsResponse_accessors
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAccessors_nextToken
+          Lens..~ rs
+          Lens.^? listAccessorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAccessors where
+  type
+    AWSResponse ListAccessors =
+      ListAccessorsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAccessorsResponse'
+            Prelude.<$> (x Data..?> "Accessors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAccessors where
+  hashWithSalt _salt ListAccessors' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAccessors where
+  rnf ListAccessors' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAccessors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAccessors where
+  toPath = Prelude.const "/accessors"
+
+instance Data.ToQuery ListAccessors where
+  toQuery ListAccessors' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAccessorsResponse' smart constructor.
+data ListAccessorsResponse = ListAccessorsResponse'
+  { -- | An array of AccessorSummary objects that contain configuration
+    -- properties for each accessor.
+    accessors :: Prelude.Maybe [AccessorSummary],
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccessorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessors', 'listAccessorsResponse_accessors' - An array of AccessorSummary objects that contain configuration
+-- properties for each accessor.
+--
+-- 'nextToken', 'listAccessorsResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'httpStatus', 'listAccessorsResponse_httpStatus' - The response's http status code.
+newListAccessorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAccessorsResponse
+newListAccessorsResponse pHttpStatus_ =
+  ListAccessorsResponse'
+    { accessors = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of AccessorSummary objects that contain configuration
+-- properties for each accessor.
+listAccessorsResponse_accessors :: Lens.Lens' ListAccessorsResponse (Prelude.Maybe [AccessorSummary])
+listAccessorsResponse_accessors = Lens.lens (\ListAccessorsResponse' {accessors} -> accessors) (\s@ListAccessorsResponse' {} a -> s {accessors = a} :: ListAccessorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listAccessorsResponse_nextToken :: Lens.Lens' ListAccessorsResponse (Prelude.Maybe Prelude.Text)
+listAccessorsResponse_nextToken = Lens.lens (\ListAccessorsResponse' {nextToken} -> nextToken) (\s@ListAccessorsResponse' {} a -> s {nextToken = a} :: ListAccessorsResponse)
+
+-- | The response's http status code.
+listAccessorsResponse_httpStatus :: Lens.Lens' ListAccessorsResponse Prelude.Int
+listAccessorsResponse_httpStatus = Lens.lens (\ListAccessorsResponse' {httpStatus} -> httpStatus) (\s@ListAccessorsResponse' {} a -> s {httpStatus = a} :: ListAccessorsResponse)
+
+instance Prelude.NFData ListAccessorsResponse where
+  rnf ListAccessorsResponse' {..} =
+    Prelude.rnf accessors
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListInvitations.hs b/gen/Amazonka/ManagedBlockChain/ListInvitations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListInvitations.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListInvitations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of all invitations for the current Amazon Web Services
+-- account.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.ListInvitations
+  ( -- * Creating a Request
+    ListInvitations (..),
+    newListInvitations,
+
+    -- * Request Lenses
+    listInvitations_maxResults,
+    listInvitations_nextToken,
+
+    -- * Destructuring the Response
+    ListInvitationsResponse (..),
+    newListInvitationsResponse,
+
+    -- * Response Lenses
+    listInvitationsResponse_invitations,
+    listInvitationsResponse_nextToken,
+    listInvitationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListInvitations' smart constructor.
+data ListInvitations = ListInvitations'
+  { -- | The maximum number of invitations to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInvitations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listInvitations_maxResults' - The maximum number of invitations to return.
+--
+-- 'nextToken', 'listInvitations_nextToken' - The pagination token that indicates the next set of results to retrieve.
+newListInvitations ::
+  ListInvitations
+newListInvitations =
+  ListInvitations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of invitations to return.
+listInvitations_maxResults :: Lens.Lens' ListInvitations (Prelude.Maybe Prelude.Natural)
+listInvitations_maxResults = Lens.lens (\ListInvitations' {maxResults} -> maxResults) (\s@ListInvitations' {} a -> s {maxResults = a} :: ListInvitations)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listInvitations_nextToken :: Lens.Lens' ListInvitations (Prelude.Maybe Prelude.Text)
+listInvitations_nextToken = Lens.lens (\ListInvitations' {nextToken} -> nextToken) (\s@ListInvitations' {} a -> s {nextToken = a} :: ListInvitations)
+
+instance Core.AWSRequest ListInvitations where
+  type
+    AWSResponse ListInvitations =
+      ListInvitationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListInvitationsResponse'
+            Prelude.<$> (x Data..?> "Invitations" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListInvitations where
+  hashWithSalt _salt ListInvitations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListInvitations where
+  rnf ListInvitations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListInvitations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListInvitations where
+  toPath = Prelude.const "/invitations"
+
+instance Data.ToQuery ListInvitations where
+  toQuery ListInvitations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListInvitationsResponse' smart constructor.
+data ListInvitationsResponse = ListInvitationsResponse'
+  { -- | The invitations for the network.
+    invitations :: Prelude.Maybe [Invitation],
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListInvitationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invitations', 'listInvitationsResponse_invitations' - The invitations for the network.
+--
+-- 'nextToken', 'listInvitationsResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'httpStatus', 'listInvitationsResponse_httpStatus' - The response's http status code.
+newListInvitationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListInvitationsResponse
+newListInvitationsResponse pHttpStatus_ =
+  ListInvitationsResponse'
+    { invitations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The invitations for the network.
+listInvitationsResponse_invitations :: Lens.Lens' ListInvitationsResponse (Prelude.Maybe [Invitation])
+listInvitationsResponse_invitations = Lens.lens (\ListInvitationsResponse' {invitations} -> invitations) (\s@ListInvitationsResponse' {} a -> s {invitations = a} :: ListInvitationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listInvitationsResponse_nextToken :: Lens.Lens' ListInvitationsResponse (Prelude.Maybe Prelude.Text)
+listInvitationsResponse_nextToken = Lens.lens (\ListInvitationsResponse' {nextToken} -> nextToken) (\s@ListInvitationsResponse' {} a -> s {nextToken = a} :: ListInvitationsResponse)
+
+-- | The response's http status code.
+listInvitationsResponse_httpStatus :: Lens.Lens' ListInvitationsResponse Prelude.Int
+listInvitationsResponse_httpStatus = Lens.lens (\ListInvitationsResponse' {httpStatus} -> httpStatus) (\s@ListInvitationsResponse' {} a -> s {httpStatus = a} :: ListInvitationsResponse)
+
+instance Prelude.NFData ListInvitationsResponse where
+  rnf ListInvitationsResponse' {..} =
+    Prelude.rnf invitations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListMembers.hs b/gen/Amazonka/ManagedBlockChain/ListMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListMembers.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the members in a network and properties of their
+-- configurations.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.ListMembers
+  ( -- * Creating a Request
+    ListMembers (..),
+    newListMembers,
+
+    -- * Request Lenses
+    listMembers_isOwned,
+    listMembers_maxResults,
+    listMembers_name,
+    listMembers_nextToken,
+    listMembers_status,
+    listMembers_networkId,
+
+    -- * Destructuring the Response
+    ListMembersResponse (..),
+    newListMembersResponse,
+
+    -- * Response Lenses
+    listMembersResponse_members,
+    listMembersResponse_nextToken,
+    listMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMembers' smart constructor.
+data ListMembers = ListMembers'
+  { -- | An optional Boolean value. If provided, the request is limited either to
+    -- members that the current Amazon Web Services account owns (@true@) or
+    -- that other Amazon Web Services accountsn own (@false@). If omitted, all
+    -- members are listed.
+    isOwned :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of members to return in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The optional name of the member to list.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An optional status specifier. If provided, only members currently in
+    -- this status are listed.
+    status :: Prelude.Maybe MemberStatus,
+    -- | The unique identifier of the network for which to list members.
+    networkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isOwned', 'listMembers_isOwned' - An optional Boolean value. If provided, the request is limited either to
+-- members that the current Amazon Web Services account owns (@true@) or
+-- that other Amazon Web Services accountsn own (@false@). If omitted, all
+-- members are listed.
+--
+-- 'maxResults', 'listMembers_maxResults' - The maximum number of members to return in the request.
+--
+-- 'name', 'listMembers_name' - The optional name of the member to list.
+--
+-- 'nextToken', 'listMembers_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'status', 'listMembers_status' - An optional status specifier. If provided, only members currently in
+-- this status are listed.
+--
+-- 'networkId', 'listMembers_networkId' - The unique identifier of the network for which to list members.
+newListMembers ::
+  -- | 'networkId'
+  Prelude.Text ->
+  ListMembers
+newListMembers pNetworkId_ =
+  ListMembers'
+    { isOwned = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing,
+      networkId = pNetworkId_
+    }
+
+-- | An optional Boolean value. If provided, the request is limited either to
+-- members that the current Amazon Web Services account owns (@true@) or
+-- that other Amazon Web Services accountsn own (@false@). If omitted, all
+-- members are listed.
+listMembers_isOwned :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Bool)
+listMembers_isOwned = Lens.lens (\ListMembers' {isOwned} -> isOwned) (\s@ListMembers' {} a -> s {isOwned = a} :: ListMembers)
+
+-- | The maximum number of members to return in the request.
+listMembers_maxResults :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Natural)
+listMembers_maxResults = Lens.lens (\ListMembers' {maxResults} -> maxResults) (\s@ListMembers' {} a -> s {maxResults = a} :: ListMembers)
+
+-- | The optional name of the member to list.
+listMembers_name :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Text)
+listMembers_name = Lens.lens (\ListMembers' {name} -> name) (\s@ListMembers' {} a -> s {name = a} :: ListMembers)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listMembers_nextToken :: Lens.Lens' ListMembers (Prelude.Maybe Prelude.Text)
+listMembers_nextToken = Lens.lens (\ListMembers' {nextToken} -> nextToken) (\s@ListMembers' {} a -> s {nextToken = a} :: ListMembers)
+
+-- | An optional status specifier. If provided, only members currently in
+-- this status are listed.
+listMembers_status :: Lens.Lens' ListMembers (Prelude.Maybe MemberStatus)
+listMembers_status = Lens.lens (\ListMembers' {status} -> status) (\s@ListMembers' {} a -> s {status = a} :: ListMembers)
+
+-- | The unique identifier of the network for which to list members.
+listMembers_networkId :: Lens.Lens' ListMembers Prelude.Text
+listMembers_networkId = Lens.lens (\ListMembers' {networkId} -> networkId) (\s@ListMembers' {} a -> s {networkId = a} :: ListMembers)
+
+instance Core.AWSRequest ListMembers where
+  type AWSResponse ListMembers = ListMembersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMembersResponse'
+            Prelude.<$> (x Data..?> "Members" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListMembers where
+  hashWithSalt _salt ListMembers' {..} =
+    _salt
+      `Prelude.hashWithSalt` isOwned
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` networkId
+
+instance Prelude.NFData ListMembers where
+  rnf ListMembers' {..} =
+    Prelude.rnf isOwned
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf networkId
+
+instance Data.ToHeaders ListMembers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListMembers where
+  toPath ListMembers' {..} =
+    Prelude.mconcat
+      ["/networks/", Data.toBS networkId, "/members"]
+
+instance Data.ToQuery ListMembers where
+  toQuery ListMembers' {..} =
+    Prelude.mconcat
+      [ "isOwned" Data.=: isOwned,
+        "maxResults" Data.=: maxResults,
+        "name" Data.=: name,
+        "nextToken" Data.=: nextToken,
+        "status" Data.=: status
+      ]
+
+-- | /See:/ 'newListMembersResponse' smart constructor.
+data ListMembersResponse = ListMembersResponse'
+  { -- | An array of @MemberSummary@ objects. Each object contains details about
+    -- a network member.
+    members :: Prelude.Maybe [MemberSummary],
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'members', 'listMembersResponse_members' - An array of @MemberSummary@ objects. Each object contains details about
+-- a network member.
+--
+-- 'nextToken', 'listMembersResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'httpStatus', 'listMembersResponse_httpStatus' - The response's http status code.
+newListMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMembersResponse
+newListMembersResponse pHttpStatus_ =
+  ListMembersResponse'
+    { members = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of @MemberSummary@ objects. Each object contains details about
+-- a network member.
+listMembersResponse_members :: Lens.Lens' ListMembersResponse (Prelude.Maybe [MemberSummary])
+listMembersResponse_members = Lens.lens (\ListMembersResponse' {members} -> members) (\s@ListMembersResponse' {} a -> s {members = a} :: ListMembersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listMembersResponse_nextToken :: Lens.Lens' ListMembersResponse (Prelude.Maybe Prelude.Text)
+listMembersResponse_nextToken = Lens.lens (\ListMembersResponse' {nextToken} -> nextToken) (\s@ListMembersResponse' {} a -> s {nextToken = a} :: ListMembersResponse)
+
+-- | The response's http status code.
+listMembersResponse_httpStatus :: Lens.Lens' ListMembersResponse Prelude.Int
+listMembersResponse_httpStatus = Lens.lens (\ListMembersResponse' {httpStatus} -> httpStatus) (\s@ListMembersResponse' {} a -> s {httpStatus = a} :: ListMembersResponse)
+
+instance Prelude.NFData ListMembersResponse where
+  rnf ListMembersResponse' {..} =
+    Prelude.rnf members
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListNetworks.hs b/gen/Amazonka/ManagedBlockChain/ListNetworks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListNetworks.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListNetworks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about the networks in which the current Amazon Web
+-- Services account participates.
+--
+-- Applies to Hyperledger Fabric and Ethereum.
+module Amazonka.ManagedBlockChain.ListNetworks
+  ( -- * Creating a Request
+    ListNetworks (..),
+    newListNetworks,
+
+    -- * Request Lenses
+    listNetworks_framework,
+    listNetworks_maxResults,
+    listNetworks_name,
+    listNetworks_nextToken,
+    listNetworks_status,
+
+    -- * Destructuring the Response
+    ListNetworksResponse (..),
+    newListNetworksResponse,
+
+    -- * Response Lenses
+    listNetworksResponse_networks,
+    listNetworksResponse_nextToken,
+    listNetworksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListNetworks' smart constructor.
+data ListNetworks = ListNetworks'
+  { -- | An optional framework specifier. If provided, only networks of this
+    -- framework type are listed.
+    framework :: Prelude.Maybe Framework,
+    -- | The maximum number of networks to list.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the network.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An optional status specifier. If provided, only networks currently in
+    -- this status are listed.
+    --
+    -- Applies only to Hyperledger Fabric.
+    status :: Prelude.Maybe NetworkStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNetworks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'framework', 'listNetworks_framework' - An optional framework specifier. If provided, only networks of this
+-- framework type are listed.
+--
+-- 'maxResults', 'listNetworks_maxResults' - The maximum number of networks to list.
+--
+-- 'name', 'listNetworks_name' - The name of the network.
+--
+-- 'nextToken', 'listNetworks_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'status', 'listNetworks_status' - An optional status specifier. If provided, only networks currently in
+-- this status are listed.
+--
+-- Applies only to Hyperledger Fabric.
+newListNetworks ::
+  ListNetworks
+newListNetworks =
+  ListNetworks'
+    { framework = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | An optional framework specifier. If provided, only networks of this
+-- framework type are listed.
+listNetworks_framework :: Lens.Lens' ListNetworks (Prelude.Maybe Framework)
+listNetworks_framework = Lens.lens (\ListNetworks' {framework} -> framework) (\s@ListNetworks' {} a -> s {framework = a} :: ListNetworks)
+
+-- | The maximum number of networks to list.
+listNetworks_maxResults :: Lens.Lens' ListNetworks (Prelude.Maybe Prelude.Natural)
+listNetworks_maxResults = Lens.lens (\ListNetworks' {maxResults} -> maxResults) (\s@ListNetworks' {} a -> s {maxResults = a} :: ListNetworks)
+
+-- | The name of the network.
+listNetworks_name :: Lens.Lens' ListNetworks (Prelude.Maybe Prelude.Text)
+listNetworks_name = Lens.lens (\ListNetworks' {name} -> name) (\s@ListNetworks' {} a -> s {name = a} :: ListNetworks)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listNetworks_nextToken :: Lens.Lens' ListNetworks (Prelude.Maybe Prelude.Text)
+listNetworks_nextToken = Lens.lens (\ListNetworks' {nextToken} -> nextToken) (\s@ListNetworks' {} a -> s {nextToken = a} :: ListNetworks)
+
+-- | An optional status specifier. If provided, only networks currently in
+-- this status are listed.
+--
+-- Applies only to Hyperledger Fabric.
+listNetworks_status :: Lens.Lens' ListNetworks (Prelude.Maybe NetworkStatus)
+listNetworks_status = Lens.lens (\ListNetworks' {status} -> status) (\s@ListNetworks' {} a -> s {status = a} :: ListNetworks)
+
+instance Core.AWSRequest ListNetworks where
+  type AWSResponse ListNetworks = ListNetworksResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListNetworksResponse'
+            Prelude.<$> (x Data..?> "Networks" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListNetworks where
+  hashWithSalt _salt ListNetworks' {..} =
+    _salt
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ListNetworks where
+  rnf ListNetworks' {..} =
+    Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders ListNetworks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListNetworks where
+  toPath = Prelude.const "/networks"
+
+instance Data.ToQuery ListNetworks where
+  toQuery ListNetworks' {..} =
+    Prelude.mconcat
+      [ "framework" Data.=: framework,
+        "maxResults" Data.=: maxResults,
+        "name" Data.=: name,
+        "nextToken" Data.=: nextToken,
+        "status" Data.=: status
+      ]
+
+-- | /See:/ 'newListNetworksResponse' smart constructor.
+data ListNetworksResponse = ListNetworksResponse'
+  { -- | An array of @NetworkSummary@ objects that contain configuration
+    -- properties for each network.
+    networks :: Prelude.Maybe [NetworkSummary],
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNetworksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networks', 'listNetworksResponse_networks' - An array of @NetworkSummary@ objects that contain configuration
+-- properties for each network.
+--
+-- 'nextToken', 'listNetworksResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'httpStatus', 'listNetworksResponse_httpStatus' - The response's http status code.
+newListNetworksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListNetworksResponse
+newListNetworksResponse pHttpStatus_ =
+  ListNetworksResponse'
+    { networks = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of @NetworkSummary@ objects that contain configuration
+-- properties for each network.
+listNetworksResponse_networks :: Lens.Lens' ListNetworksResponse (Prelude.Maybe [NetworkSummary])
+listNetworksResponse_networks = Lens.lens (\ListNetworksResponse' {networks} -> networks) (\s@ListNetworksResponse' {} a -> s {networks = a} :: ListNetworksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listNetworksResponse_nextToken :: Lens.Lens' ListNetworksResponse (Prelude.Maybe Prelude.Text)
+listNetworksResponse_nextToken = Lens.lens (\ListNetworksResponse' {nextToken} -> nextToken) (\s@ListNetworksResponse' {} a -> s {nextToken = a} :: ListNetworksResponse)
+
+-- | The response's http status code.
+listNetworksResponse_httpStatus :: Lens.Lens' ListNetworksResponse Prelude.Int
+listNetworksResponse_httpStatus = Lens.lens (\ListNetworksResponse' {httpStatus} -> httpStatus) (\s@ListNetworksResponse' {} a -> s {httpStatus = a} :: ListNetworksResponse)
+
+instance Prelude.NFData ListNetworksResponse where
+  rnf ListNetworksResponse' {..} =
+    Prelude.rnf networks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListNodes.hs b/gen/Amazonka/ManagedBlockChain/ListNodes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListNodes.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListNodes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about the nodes within a network.
+--
+-- Applies to Hyperledger Fabric and Ethereum.
+module Amazonka.ManagedBlockChain.ListNodes
+  ( -- * Creating a Request
+    ListNodes (..),
+    newListNodes,
+
+    -- * Request Lenses
+    listNodes_maxResults,
+    listNodes_memberId,
+    listNodes_nextToken,
+    listNodes_status,
+    listNodes_networkId,
+
+    -- * Destructuring the Response
+    ListNodesResponse (..),
+    newListNodesResponse,
+
+    -- * Response Lenses
+    listNodesResponse_nextToken,
+    listNodesResponse_nodes,
+    listNodesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListNodes' smart constructor.
+data ListNodes = ListNodes'
+  { -- | The maximum number of nodes to list.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The unique identifier of the member who owns the nodes to list.
+    --
+    -- Applies only to Hyperledger Fabric and is required for Hyperledger
+    -- Fabric.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An optional status specifier. If provided, only nodes currently in this
+    -- status are listed.
+    status :: Prelude.Maybe NodeStatus,
+    -- | The unique identifier of the network for which to list nodes.
+    networkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNodes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listNodes_maxResults' - The maximum number of nodes to list.
+--
+-- 'memberId', 'listNodes_memberId' - The unique identifier of the member who owns the nodes to list.
+--
+-- Applies only to Hyperledger Fabric and is required for Hyperledger
+-- Fabric.
+--
+-- 'nextToken', 'listNodes_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'status', 'listNodes_status' - An optional status specifier. If provided, only nodes currently in this
+-- status are listed.
+--
+-- 'networkId', 'listNodes_networkId' - The unique identifier of the network for which to list nodes.
+newListNodes ::
+  -- | 'networkId'
+  Prelude.Text ->
+  ListNodes
+newListNodes pNetworkId_ =
+  ListNodes'
+    { maxResults = Prelude.Nothing,
+      memberId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing,
+      networkId = pNetworkId_
+    }
+
+-- | The maximum number of nodes to list.
+listNodes_maxResults :: Lens.Lens' ListNodes (Prelude.Maybe Prelude.Natural)
+listNodes_maxResults = Lens.lens (\ListNodes' {maxResults} -> maxResults) (\s@ListNodes' {} a -> s {maxResults = a} :: ListNodes)
+
+-- | The unique identifier of the member who owns the nodes to list.
+--
+-- Applies only to Hyperledger Fabric and is required for Hyperledger
+-- Fabric.
+listNodes_memberId :: Lens.Lens' ListNodes (Prelude.Maybe Prelude.Text)
+listNodes_memberId = Lens.lens (\ListNodes' {memberId} -> memberId) (\s@ListNodes' {} a -> s {memberId = a} :: ListNodes)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listNodes_nextToken :: Lens.Lens' ListNodes (Prelude.Maybe Prelude.Text)
+listNodes_nextToken = Lens.lens (\ListNodes' {nextToken} -> nextToken) (\s@ListNodes' {} a -> s {nextToken = a} :: ListNodes)
+
+-- | An optional status specifier. If provided, only nodes currently in this
+-- status are listed.
+listNodes_status :: Lens.Lens' ListNodes (Prelude.Maybe NodeStatus)
+listNodes_status = Lens.lens (\ListNodes' {status} -> status) (\s@ListNodes' {} a -> s {status = a} :: ListNodes)
+
+-- | The unique identifier of the network for which to list nodes.
+listNodes_networkId :: Lens.Lens' ListNodes Prelude.Text
+listNodes_networkId = Lens.lens (\ListNodes' {networkId} -> networkId) (\s@ListNodes' {} a -> s {networkId = a} :: ListNodes)
+
+instance Core.AWSRequest ListNodes where
+  type AWSResponse ListNodes = ListNodesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListNodesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Nodes" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListNodes where
+  hashWithSalt _salt ListNodes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` networkId
+
+instance Prelude.NFData ListNodes where
+  rnf ListNodes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf networkId
+
+instance Data.ToHeaders ListNodes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListNodes where
+  toPath ListNodes' {..} =
+    Prelude.mconcat
+      ["/networks/", Data.toBS networkId, "/nodes"]
+
+instance Data.ToQuery ListNodes where
+  toQuery ListNodes' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "memberId" Data.=: memberId,
+        "nextToken" Data.=: nextToken,
+        "status" Data.=: status
+      ]
+
+-- | /See:/ 'newListNodesResponse' smart constructor.
+data ListNodesResponse = ListNodesResponse'
+  { -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @NodeSummary@ objects that contain configuration properties
+    -- for each node.
+    nodes :: Prelude.Maybe [NodeSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNodesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listNodesResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'nodes', 'listNodesResponse_nodes' - An array of @NodeSummary@ objects that contain configuration properties
+-- for each node.
+--
+-- 'httpStatus', 'listNodesResponse_httpStatus' - The response's http status code.
+newListNodesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListNodesResponse
+newListNodesResponse pHttpStatus_ =
+  ListNodesResponse'
+    { nextToken = Prelude.Nothing,
+      nodes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listNodesResponse_nextToken :: Lens.Lens' ListNodesResponse (Prelude.Maybe Prelude.Text)
+listNodesResponse_nextToken = Lens.lens (\ListNodesResponse' {nextToken} -> nextToken) (\s@ListNodesResponse' {} a -> s {nextToken = a} :: ListNodesResponse)
+
+-- | An array of @NodeSummary@ objects that contain configuration properties
+-- for each node.
+listNodesResponse_nodes :: Lens.Lens' ListNodesResponse (Prelude.Maybe [NodeSummary])
+listNodesResponse_nodes = Lens.lens (\ListNodesResponse' {nodes} -> nodes) (\s@ListNodesResponse' {} a -> s {nodes = a} :: ListNodesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listNodesResponse_httpStatus :: Lens.Lens' ListNodesResponse Prelude.Int
+listNodesResponse_httpStatus = Lens.lens (\ListNodesResponse' {httpStatus} -> httpStatus) (\s@ListNodesResponse' {} a -> s {httpStatus = a} :: ListNodesResponse)
+
+instance Prelude.NFData ListNodesResponse where
+  rnf ListNodesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf nodes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListProposalVotes.hs b/gen/Amazonka/ManagedBlockChain/ListProposalVotes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListProposalVotes.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListProposalVotes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the list of votes for a specified proposal, including the value
+-- of each vote and the unique identifier of the member that cast the vote.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.ListProposalVotes
+  ( -- * Creating a Request
+    ListProposalVotes (..),
+    newListProposalVotes,
+
+    -- * Request Lenses
+    listProposalVotes_maxResults,
+    listProposalVotes_nextToken,
+    listProposalVotes_networkId,
+    listProposalVotes_proposalId,
+
+    -- * Destructuring the Response
+    ListProposalVotesResponse (..),
+    newListProposalVotesResponse,
+
+    -- * Response Lenses
+    listProposalVotesResponse_nextToken,
+    listProposalVotesResponse_proposalVotes,
+    listProposalVotesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListProposalVotes' smart constructor.
+data ListProposalVotes = ListProposalVotes'
+  { -- | The maximum number of votes to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the proposal.
+    proposalId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProposalVotes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listProposalVotes_maxResults' - The maximum number of votes to return.
+--
+-- 'nextToken', 'listProposalVotes_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'networkId', 'listProposalVotes_networkId' - The unique identifier of the network.
+--
+-- 'proposalId', 'listProposalVotes_proposalId' - The unique identifier of the proposal.
+newListProposalVotes ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'proposalId'
+  Prelude.Text ->
+  ListProposalVotes
+newListProposalVotes pNetworkId_ pProposalId_ =
+  ListProposalVotes'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      networkId = pNetworkId_,
+      proposalId = pProposalId_
+    }
+
+-- | The maximum number of votes to return.
+listProposalVotes_maxResults :: Lens.Lens' ListProposalVotes (Prelude.Maybe Prelude.Natural)
+listProposalVotes_maxResults = Lens.lens (\ListProposalVotes' {maxResults} -> maxResults) (\s@ListProposalVotes' {} a -> s {maxResults = a} :: ListProposalVotes)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listProposalVotes_nextToken :: Lens.Lens' ListProposalVotes (Prelude.Maybe Prelude.Text)
+listProposalVotes_nextToken = Lens.lens (\ListProposalVotes' {nextToken} -> nextToken) (\s@ListProposalVotes' {} a -> s {nextToken = a} :: ListProposalVotes)
+
+-- | The unique identifier of the network.
+listProposalVotes_networkId :: Lens.Lens' ListProposalVotes Prelude.Text
+listProposalVotes_networkId = Lens.lens (\ListProposalVotes' {networkId} -> networkId) (\s@ListProposalVotes' {} a -> s {networkId = a} :: ListProposalVotes)
+
+-- | The unique identifier of the proposal.
+listProposalVotes_proposalId :: Lens.Lens' ListProposalVotes Prelude.Text
+listProposalVotes_proposalId = Lens.lens (\ListProposalVotes' {proposalId} -> proposalId) (\s@ListProposalVotes' {} a -> s {proposalId = a} :: ListProposalVotes)
+
+instance Core.AWSRequest ListProposalVotes where
+  type
+    AWSResponse ListProposalVotes =
+      ListProposalVotesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProposalVotesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "ProposalVotes" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListProposalVotes where
+  hashWithSalt _salt ListProposalVotes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` proposalId
+
+instance Prelude.NFData ListProposalVotes where
+  rnf ListProposalVotes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf proposalId
+
+instance Data.ToHeaders ListProposalVotes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProposalVotes where
+  toPath ListProposalVotes' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/proposals/",
+        Data.toBS proposalId,
+        "/votes"
+      ]
+
+instance Data.ToQuery ListProposalVotes where
+  toQuery ListProposalVotes' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListProposalVotesResponse' smart constructor.
+data ListProposalVotesResponse = ListProposalVotesResponse'
+  { -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of votes.
+    proposalVotes :: Prelude.Maybe [VoteSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProposalVotesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listProposalVotesResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'proposalVotes', 'listProposalVotesResponse_proposalVotes' - The list of votes.
+--
+-- 'httpStatus', 'listProposalVotesResponse_httpStatus' - The response's http status code.
+newListProposalVotesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProposalVotesResponse
+newListProposalVotesResponse pHttpStatus_ =
+  ListProposalVotesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      proposalVotes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listProposalVotesResponse_nextToken :: Lens.Lens' ListProposalVotesResponse (Prelude.Maybe Prelude.Text)
+listProposalVotesResponse_nextToken = Lens.lens (\ListProposalVotesResponse' {nextToken} -> nextToken) (\s@ListProposalVotesResponse' {} a -> s {nextToken = a} :: ListProposalVotesResponse)
+
+-- | The list of votes.
+listProposalVotesResponse_proposalVotes :: Lens.Lens' ListProposalVotesResponse (Prelude.Maybe [VoteSummary])
+listProposalVotesResponse_proposalVotes = Lens.lens (\ListProposalVotesResponse' {proposalVotes} -> proposalVotes) (\s@ListProposalVotesResponse' {} a -> s {proposalVotes = a} :: ListProposalVotesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listProposalVotesResponse_httpStatus :: Lens.Lens' ListProposalVotesResponse Prelude.Int
+listProposalVotesResponse_httpStatus = Lens.lens (\ListProposalVotesResponse' {httpStatus} -> httpStatus) (\s@ListProposalVotesResponse' {} a -> s {httpStatus = a} :: ListProposalVotesResponse)
+
+instance Prelude.NFData ListProposalVotesResponse where
+  rnf ListProposalVotesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proposalVotes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListProposals.hs b/gen/Amazonka/ManagedBlockChain/ListProposals.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListProposals.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListProposals
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of proposals for the network.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.ListProposals
+  ( -- * Creating a Request
+    ListProposals (..),
+    newListProposals,
+
+    -- * Request Lenses
+    listProposals_maxResults,
+    listProposals_nextToken,
+    listProposals_networkId,
+
+    -- * Destructuring the Response
+    ListProposalsResponse (..),
+    newListProposalsResponse,
+
+    -- * Response Lenses
+    listProposalsResponse_nextToken,
+    listProposalsResponse_proposals,
+    listProposalsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListProposals' smart constructor.
+data ListProposals = ListProposals'
+  { -- | The maximum number of proposals to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network.
+    networkId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProposals' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listProposals_maxResults' - The maximum number of proposals to return.
+--
+-- 'nextToken', 'listProposals_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'networkId', 'listProposals_networkId' - The unique identifier of the network.
+newListProposals ::
+  -- | 'networkId'
+  Prelude.Text ->
+  ListProposals
+newListProposals pNetworkId_ =
+  ListProposals'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      networkId = pNetworkId_
+    }
+
+-- | The maximum number of proposals to return.
+listProposals_maxResults :: Lens.Lens' ListProposals (Prelude.Maybe Prelude.Natural)
+listProposals_maxResults = Lens.lens (\ListProposals' {maxResults} -> maxResults) (\s@ListProposals' {} a -> s {maxResults = a} :: ListProposals)
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listProposals_nextToken :: Lens.Lens' ListProposals (Prelude.Maybe Prelude.Text)
+listProposals_nextToken = Lens.lens (\ListProposals' {nextToken} -> nextToken) (\s@ListProposals' {} a -> s {nextToken = a} :: ListProposals)
+
+-- | The unique identifier of the network.
+listProposals_networkId :: Lens.Lens' ListProposals Prelude.Text
+listProposals_networkId = Lens.lens (\ListProposals' {networkId} -> networkId) (\s@ListProposals' {} a -> s {networkId = a} :: ListProposals)
+
+instance Core.AWSRequest ListProposals where
+  type
+    AWSResponse ListProposals =
+      ListProposalsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProposalsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Proposals" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListProposals where
+  hashWithSalt _salt ListProposals' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` networkId
+
+instance Prelude.NFData ListProposals where
+  rnf ListProposals' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf networkId
+
+instance Data.ToHeaders ListProposals where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProposals where
+  toPath ListProposals' {..} =
+    Prelude.mconcat
+      ["/networks/", Data.toBS networkId, "/proposals"]
+
+instance Data.ToQuery ListProposals where
+  toQuery ListProposals' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListProposalsResponse' smart constructor.
+data ListProposalsResponse = ListProposalsResponse'
+  { -- | The pagination token that indicates the next set of results to retrieve.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The summary of each proposal made on the network.
+    proposals :: Prelude.Maybe [ProposalSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProposalsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listProposalsResponse_nextToken' - The pagination token that indicates the next set of results to retrieve.
+--
+-- 'proposals', 'listProposalsResponse_proposals' - The summary of each proposal made on the network.
+--
+-- 'httpStatus', 'listProposalsResponse_httpStatus' - The response's http status code.
+newListProposalsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProposalsResponse
+newListProposalsResponse pHttpStatus_ =
+  ListProposalsResponse'
+    { nextToken = Prelude.Nothing,
+      proposals = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token that indicates the next set of results to retrieve.
+listProposalsResponse_nextToken :: Lens.Lens' ListProposalsResponse (Prelude.Maybe Prelude.Text)
+listProposalsResponse_nextToken = Lens.lens (\ListProposalsResponse' {nextToken} -> nextToken) (\s@ListProposalsResponse' {} a -> s {nextToken = a} :: ListProposalsResponse)
+
+-- | The summary of each proposal made on the network.
+listProposalsResponse_proposals :: Lens.Lens' ListProposalsResponse (Prelude.Maybe [ProposalSummary])
+listProposalsResponse_proposals = Lens.lens (\ListProposalsResponse' {proposals} -> proposals) (\s@ListProposalsResponse' {} a -> s {proposals = a} :: ListProposalsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listProposalsResponse_httpStatus :: Lens.Lens' ListProposalsResponse Prelude.Int
+listProposalsResponse_httpStatus = Lens.lens (\ListProposalsResponse' {httpStatus} -> httpStatus) (\s@ListProposalsResponse' {} a -> s {httpStatus = a} :: ListProposalsResponse)
+
+instance Prelude.NFData ListProposalsResponse where
+  rnf ListProposalsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf proposals
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/ListTagsForResource.hs b/gen/Amazonka/ManagedBlockChain/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/ListTagsForResource.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of tags for the specified resource. Each tag consists of
+-- a key and optional value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+module Amazonka.ManagedBlockChain.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags assigned to the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags assigned to the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags assigned to the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/RejectInvitation.hs b/gen/Amazonka/ManagedBlockChain/RejectInvitation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/RejectInvitation.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.RejectInvitation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rejects an invitation to join a network. This action can be called by a
+-- principal in an Amazon Web Services account that has received an
+-- invitation to create a member and join a network.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.RejectInvitation
+  ( -- * Creating a Request
+    RejectInvitation (..),
+    newRejectInvitation,
+
+    -- * Request Lenses
+    rejectInvitation_invitationId,
+
+    -- * Destructuring the Response
+    RejectInvitationResponse (..),
+    newRejectInvitationResponse,
+
+    -- * Response Lenses
+    rejectInvitationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectInvitation' smart constructor.
+data RejectInvitation = RejectInvitation'
+  { -- | The unique identifier of the invitation to reject.
+    invitationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectInvitation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invitationId', 'rejectInvitation_invitationId' - The unique identifier of the invitation to reject.
+newRejectInvitation ::
+  -- | 'invitationId'
+  Prelude.Text ->
+  RejectInvitation
+newRejectInvitation pInvitationId_ =
+  RejectInvitation' {invitationId = pInvitationId_}
+
+-- | The unique identifier of the invitation to reject.
+rejectInvitation_invitationId :: Lens.Lens' RejectInvitation Prelude.Text
+rejectInvitation_invitationId = Lens.lens (\RejectInvitation' {invitationId} -> invitationId) (\s@RejectInvitation' {} a -> s {invitationId = a} :: RejectInvitation)
+
+instance Core.AWSRequest RejectInvitation where
+  type
+    AWSResponse RejectInvitation =
+      RejectInvitationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RejectInvitationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RejectInvitation where
+  hashWithSalt _salt RejectInvitation' {..} =
+    _salt `Prelude.hashWithSalt` invitationId
+
+instance Prelude.NFData RejectInvitation where
+  rnf RejectInvitation' {..} = Prelude.rnf invitationId
+
+instance Data.ToHeaders RejectInvitation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RejectInvitation where
+  toPath RejectInvitation' {..} =
+    Prelude.mconcat
+      ["/invitations/", Data.toBS invitationId]
+
+instance Data.ToQuery RejectInvitation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRejectInvitationResponse' smart constructor.
+data RejectInvitationResponse = RejectInvitationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectInvitationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'rejectInvitationResponse_httpStatus' - The response's http status code.
+newRejectInvitationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectInvitationResponse
+newRejectInvitationResponse pHttpStatus_ =
+  RejectInvitationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+rejectInvitationResponse_httpStatus :: Lens.Lens' RejectInvitationResponse Prelude.Int
+rejectInvitationResponse_httpStatus = Lens.lens (\RejectInvitationResponse' {httpStatus} -> httpStatus) (\s@RejectInvitationResponse' {} a -> s {httpStatus = a} :: RejectInvitationResponse)
+
+instance Prelude.NFData RejectInvitationResponse where
+  rnf RejectInvitationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/TagResource.hs b/gen/Amazonka/ManagedBlockChain/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/TagResource.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or overwrites the specified tags for the specified Amazon Managed
+-- Blockchain resource. Each tag consists of a key and optional value.
+--
+-- When you specify a tag key that already exists, the tag value is
+-- overwritten with the new value. Use @UntagResource@ to remove tag keys.
+--
+-- A resource can have up to 50 tags. If you try to create more than 50
+-- tags for a resource, your request fails and returns an error.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+module Amazonka.ManagedBlockChain.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    resourceArn :: Prelude.Text,
+    -- | The tags to assign to the specified resource. Tag values can be empty,
+    -- for example, @\"MyTagKey\" : \"\"@. You can specify multiple key-value
+    -- pairs in a single request, with an overall maximum of 50 tags added to
+    -- each resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'tags', 'tagResource_tags' - The tags to assign to the specified resource. Tag values can be empty,
+-- for example, @\"MyTagKey\" : \"\"@. You can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to assign to the specified resource. Tag values can be empty,
+-- for example, @\"MyTagKey\" : \"\"@. You can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/Types.hs b/gen/Amazonka/ManagedBlockChain/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types.hs
@@ -0,0 +1,570 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _IllegalActionException,
+    _InternalServiceErrorException,
+    _InvalidRequestException,
+    _ResourceAlreadyExistsException,
+    _ResourceLimitExceededException,
+    _ResourceNotFoundException,
+    _ResourceNotReadyException,
+    _ThrottlingException,
+    _TooManyTagsException,
+
+    -- * AccessorStatus
+    AccessorStatus (..),
+
+    -- * AccessorType
+    AccessorType (..),
+
+    -- * Edition
+    Edition (..),
+
+    -- * Framework
+    Framework (..),
+
+    -- * InvitationStatus
+    InvitationStatus (..),
+
+    -- * MemberStatus
+    MemberStatus (..),
+
+    -- * NetworkStatus
+    NetworkStatus (..),
+
+    -- * NodeStatus
+    NodeStatus (..),
+
+    -- * ProposalStatus
+    ProposalStatus (..),
+
+    -- * StateDBType
+    StateDBType (..),
+
+    -- * ThresholdComparator
+    ThresholdComparator (..),
+
+    -- * VoteValue
+    VoteValue (..),
+
+    -- * Accessor
+    Accessor (..),
+    newAccessor,
+    accessor_arn,
+    accessor_billingToken,
+    accessor_creationDate,
+    accessor_id,
+    accessor_status,
+    accessor_type,
+
+    -- * AccessorSummary
+    AccessorSummary (..),
+    newAccessorSummary,
+    accessorSummary_arn,
+    accessorSummary_creationDate,
+    accessorSummary_id,
+    accessorSummary_status,
+    accessorSummary_type,
+
+    -- * ApprovalThresholdPolicy
+    ApprovalThresholdPolicy (..),
+    newApprovalThresholdPolicy,
+    approvalThresholdPolicy_proposalDurationInHours,
+    approvalThresholdPolicy_thresholdComparator,
+    approvalThresholdPolicy_thresholdPercentage,
+
+    -- * Invitation
+    Invitation (..),
+    newInvitation,
+    invitation_arn,
+    invitation_creationDate,
+    invitation_expirationDate,
+    invitation_invitationId,
+    invitation_networkSummary,
+    invitation_status,
+
+    -- * InviteAction
+    InviteAction (..),
+    newInviteAction,
+    inviteAction_principal,
+
+    -- * LogConfiguration
+    LogConfiguration (..),
+    newLogConfiguration,
+    logConfiguration_enabled,
+
+    -- * LogConfigurations
+    LogConfigurations (..),
+    newLogConfigurations,
+    logConfigurations_cloudwatch,
+
+    -- * Member
+    Member (..),
+    newMember,
+    member_arn,
+    member_creationDate,
+    member_description,
+    member_frameworkAttributes,
+    member_id,
+    member_kmsKeyArn,
+    member_logPublishingConfiguration,
+    member_name,
+    member_networkId,
+    member_status,
+    member_tags,
+
+    -- * MemberConfiguration
+    MemberConfiguration (..),
+    newMemberConfiguration,
+    memberConfiguration_description,
+    memberConfiguration_kmsKeyArn,
+    memberConfiguration_logPublishingConfiguration,
+    memberConfiguration_tags,
+    memberConfiguration_name,
+    memberConfiguration_frameworkConfiguration,
+
+    -- * MemberFabricAttributes
+    MemberFabricAttributes (..),
+    newMemberFabricAttributes,
+    memberFabricAttributes_adminUsername,
+    memberFabricAttributes_caEndpoint,
+
+    -- * MemberFabricConfiguration
+    MemberFabricConfiguration (..),
+    newMemberFabricConfiguration,
+    memberFabricConfiguration_adminUsername,
+    memberFabricConfiguration_adminPassword,
+
+    -- * MemberFabricLogPublishingConfiguration
+    MemberFabricLogPublishingConfiguration (..),
+    newMemberFabricLogPublishingConfiguration,
+    memberFabricLogPublishingConfiguration_caLogs,
+
+    -- * MemberFrameworkAttributes
+    MemberFrameworkAttributes (..),
+    newMemberFrameworkAttributes,
+    memberFrameworkAttributes_fabric,
+
+    -- * MemberFrameworkConfiguration
+    MemberFrameworkConfiguration (..),
+    newMemberFrameworkConfiguration,
+    memberFrameworkConfiguration_fabric,
+
+    -- * MemberLogPublishingConfiguration
+    MemberLogPublishingConfiguration (..),
+    newMemberLogPublishingConfiguration,
+    memberLogPublishingConfiguration_fabric,
+
+    -- * MemberSummary
+    MemberSummary (..),
+    newMemberSummary,
+    memberSummary_arn,
+    memberSummary_creationDate,
+    memberSummary_description,
+    memberSummary_id,
+    memberSummary_isOwned,
+    memberSummary_name,
+    memberSummary_status,
+
+    -- * Network
+    Network (..),
+    newNetwork,
+    network_arn,
+    network_creationDate,
+    network_description,
+    network_framework,
+    network_frameworkAttributes,
+    network_frameworkVersion,
+    network_id,
+    network_name,
+    network_status,
+    network_tags,
+    network_votingPolicy,
+    network_vpcEndpointServiceName,
+
+    -- * NetworkEthereumAttributes
+    NetworkEthereumAttributes (..),
+    newNetworkEthereumAttributes,
+    networkEthereumAttributes_chainId,
+
+    -- * NetworkFabricAttributes
+    NetworkFabricAttributes (..),
+    newNetworkFabricAttributes,
+    networkFabricAttributes_edition,
+    networkFabricAttributes_orderingServiceEndpoint,
+
+    -- * NetworkFabricConfiguration
+    NetworkFabricConfiguration (..),
+    newNetworkFabricConfiguration,
+    networkFabricConfiguration_edition,
+
+    -- * NetworkFrameworkAttributes
+    NetworkFrameworkAttributes (..),
+    newNetworkFrameworkAttributes,
+    networkFrameworkAttributes_ethereum,
+    networkFrameworkAttributes_fabric,
+
+    -- * NetworkFrameworkConfiguration
+    NetworkFrameworkConfiguration (..),
+    newNetworkFrameworkConfiguration,
+    networkFrameworkConfiguration_fabric,
+
+    -- * NetworkSummary
+    NetworkSummary (..),
+    newNetworkSummary,
+    networkSummary_arn,
+    networkSummary_creationDate,
+    networkSummary_description,
+    networkSummary_framework,
+    networkSummary_frameworkVersion,
+    networkSummary_id,
+    networkSummary_name,
+    networkSummary_status,
+
+    -- * Node
+    Node (..),
+    newNode,
+    node_arn,
+    node_availabilityZone,
+    node_creationDate,
+    node_frameworkAttributes,
+    node_id,
+    node_instanceType,
+    node_kmsKeyArn,
+    node_logPublishingConfiguration,
+    node_memberId,
+    node_networkId,
+    node_stateDB,
+    node_status,
+    node_tags,
+
+    -- * NodeConfiguration
+    NodeConfiguration (..),
+    newNodeConfiguration,
+    nodeConfiguration_availabilityZone,
+    nodeConfiguration_logPublishingConfiguration,
+    nodeConfiguration_stateDB,
+    nodeConfiguration_instanceType,
+
+    -- * NodeEthereumAttributes
+    NodeEthereumAttributes (..),
+    newNodeEthereumAttributes,
+    nodeEthereumAttributes_httpEndpoint,
+    nodeEthereumAttributes_webSocketEndpoint,
+
+    -- * NodeFabricAttributes
+    NodeFabricAttributes (..),
+    newNodeFabricAttributes,
+    nodeFabricAttributes_peerEndpoint,
+    nodeFabricAttributes_peerEventEndpoint,
+
+    -- * NodeFabricLogPublishingConfiguration
+    NodeFabricLogPublishingConfiguration (..),
+    newNodeFabricLogPublishingConfiguration,
+    nodeFabricLogPublishingConfiguration_chaincodeLogs,
+    nodeFabricLogPublishingConfiguration_peerLogs,
+
+    -- * NodeFrameworkAttributes
+    NodeFrameworkAttributes (..),
+    newNodeFrameworkAttributes,
+    nodeFrameworkAttributes_ethereum,
+    nodeFrameworkAttributes_fabric,
+
+    -- * NodeLogPublishingConfiguration
+    NodeLogPublishingConfiguration (..),
+    newNodeLogPublishingConfiguration,
+    nodeLogPublishingConfiguration_fabric,
+
+    -- * NodeSummary
+    NodeSummary (..),
+    newNodeSummary,
+    nodeSummary_arn,
+    nodeSummary_availabilityZone,
+    nodeSummary_creationDate,
+    nodeSummary_id,
+    nodeSummary_instanceType,
+    nodeSummary_status,
+
+    -- * Proposal
+    Proposal (..),
+    newProposal,
+    proposal_actions,
+    proposal_arn,
+    proposal_creationDate,
+    proposal_description,
+    proposal_expirationDate,
+    proposal_networkId,
+    proposal_noVoteCount,
+    proposal_outstandingVoteCount,
+    proposal_proposalId,
+    proposal_proposedByMemberId,
+    proposal_proposedByMemberName,
+    proposal_status,
+    proposal_tags,
+    proposal_yesVoteCount,
+
+    -- * ProposalActions
+    ProposalActions (..),
+    newProposalActions,
+    proposalActions_invitations,
+    proposalActions_removals,
+
+    -- * ProposalSummary
+    ProposalSummary (..),
+    newProposalSummary,
+    proposalSummary_arn,
+    proposalSummary_creationDate,
+    proposalSummary_description,
+    proposalSummary_expirationDate,
+    proposalSummary_proposalId,
+    proposalSummary_proposedByMemberId,
+    proposalSummary_proposedByMemberName,
+    proposalSummary_status,
+
+    -- * RemoveAction
+    RemoveAction (..),
+    newRemoveAction,
+    removeAction_memberId,
+
+    -- * VoteSummary
+    VoteSummary (..),
+    newVoteSummary,
+    voteSummary_memberId,
+    voteSummary_memberName,
+    voteSummary_vote,
+
+    -- * VotingPolicy
+    VotingPolicy (..),
+    newVotingPolicy,
+    votingPolicy_approvalThresholdPolicy,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.ManagedBlockChain.Types.Accessor
+import Amazonka.ManagedBlockChain.Types.AccessorStatus
+import Amazonka.ManagedBlockChain.Types.AccessorSummary
+import Amazonka.ManagedBlockChain.Types.AccessorType
+import Amazonka.ManagedBlockChain.Types.ApprovalThresholdPolicy
+import Amazonka.ManagedBlockChain.Types.Edition
+import Amazonka.ManagedBlockChain.Types.Framework
+import Amazonka.ManagedBlockChain.Types.Invitation
+import Amazonka.ManagedBlockChain.Types.InvitationStatus
+import Amazonka.ManagedBlockChain.Types.InviteAction
+import Amazonka.ManagedBlockChain.Types.LogConfiguration
+import Amazonka.ManagedBlockChain.Types.LogConfigurations
+import Amazonka.ManagedBlockChain.Types.Member
+import Amazonka.ManagedBlockChain.Types.MemberConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberFabricAttributes
+import Amazonka.ManagedBlockChain.Types.MemberFabricConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberFabricLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.MemberFrameworkConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberStatus
+import Amazonka.ManagedBlockChain.Types.MemberSummary
+import Amazonka.ManagedBlockChain.Types.Network
+import Amazonka.ManagedBlockChain.Types.NetworkEthereumAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFabricAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFabricConfiguration
+import Amazonka.ManagedBlockChain.Types.NetworkFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFrameworkConfiguration
+import Amazonka.ManagedBlockChain.Types.NetworkStatus
+import Amazonka.ManagedBlockChain.Types.NetworkSummary
+import Amazonka.ManagedBlockChain.Types.Node
+import Amazonka.ManagedBlockChain.Types.NodeConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeEthereumAttributes
+import Amazonka.ManagedBlockChain.Types.NodeFabricAttributes
+import Amazonka.ManagedBlockChain.Types.NodeFabricLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeStatus
+import Amazonka.ManagedBlockChain.Types.NodeSummary
+import Amazonka.ManagedBlockChain.Types.Proposal
+import Amazonka.ManagedBlockChain.Types.ProposalActions
+import Amazonka.ManagedBlockChain.Types.ProposalStatus
+import Amazonka.ManagedBlockChain.Types.ProposalSummary
+import Amazonka.ManagedBlockChain.Types.RemoveAction
+import Amazonka.ManagedBlockChain.Types.StateDBType
+import Amazonka.ManagedBlockChain.Types.ThresholdComparator
+import Amazonka.ManagedBlockChain.Types.VoteSummary
+import Amazonka.ManagedBlockChain.Types.VoteValue
+import Amazonka.ManagedBlockChain.Types.VotingPolicy
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-09-24@ of the Amazon Managed Blockchain SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ManagedBlockChain",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "managedblockchain",
+      Core.signingName = "managedblockchain",
+      Core.version = "2018-09-24",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ManagedBlockChain",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You don\'t have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+_IllegalActionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_IllegalActionException =
+  Core._MatchServiceError
+    defaultService
+    "IllegalActionException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request processing has failed because of an unknown error, exception
+-- or failure.
+_InternalServiceErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | The action or operation requested is invalid. Verify that the action is
+-- typed correctly.
+_InvalidRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRequestException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | A resource request is issued for a resource that already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+    Prelude.. Core.hasStatus 409
+
+-- | The maximum number of resources of that type already exist. Ensure the
+-- resources requested are within the boundaries of the service edition and
+-- your account limits.
+_ResourceLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceLimitExceededException"
+    Prelude.. Core.hasStatus 429
+
+-- | A requested resource doesn\'t exist. It may have been deleted or
+-- referenced incorrectly.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The requested resource exists but isn\'t in a status that can complete
+-- the operation.
+_ResourceNotReadyException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotReadyException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotReadyException"
+    Prelude.. Core.hasStatus 409
+
+-- | The request or operation couldn\'t be performed because a service is
+-- throttling requests. The most common source of throttling errors is
+-- creating resources that exceed your service limit for this resource
+-- type. Request a limit increase or delete unused resources if possible.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+_TooManyTagsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyTagsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyTagsException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Accessor.hs b/gen/Amazonka/ManagedBlockChain/Types/Accessor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Accessor.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Accessor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Accessor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.AccessorStatus
+import Amazonka.ManagedBlockChain.Types.AccessorType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The token based access feature is in preview release for Ethereum on
+-- Amazon Managed Blockchain and is subject to change. We recommend that
+-- you use this feature only with test scenarios, and not in production
+-- environments.
+--
+-- The properties of the Accessor.
+--
+-- /See:/ 'newAccessor' smart constructor.
+data Accessor = Accessor'
+  { -- | The Amazon Resource Name (ARN) of the accessor. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The billing token is a property of the accessor. Use this token to make
+    -- Ethereum API calls to your Ethereum node. The billing token is used to
+    -- track your accessor object for billing Ethereum API requests made to
+    -- your Ethereum nodes.
+    billingToken :: Prelude.Maybe Prelude.Text,
+    -- | The creation date and time of the accessor.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier of the accessor.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the accessor.
+    status :: Prelude.Maybe AccessorStatus,
+    -- | The type of the accessor.
+    --
+    -- Currently accessor type is restricted to @BILLING_TOKEN@.
+    type' :: Prelude.Maybe AccessorType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Accessor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'accessor_arn' - The Amazon Resource Name (ARN) of the accessor. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'billingToken', 'accessor_billingToken' - The billing token is a property of the accessor. Use this token to make
+-- Ethereum API calls to your Ethereum node. The billing token is used to
+-- track your accessor object for billing Ethereum API requests made to
+-- your Ethereum nodes.
+--
+-- 'creationDate', 'accessor_creationDate' - The creation date and time of the accessor.
+--
+-- 'id', 'accessor_id' - The unique identifier of the accessor.
+--
+-- 'status', 'accessor_status' - The current status of the accessor.
+--
+-- 'type'', 'accessor_type' - The type of the accessor.
+--
+-- Currently accessor type is restricted to @BILLING_TOKEN@.
+newAccessor ::
+  Accessor
+newAccessor =
+  Accessor'
+    { arn = Prelude.Nothing,
+      billingToken = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      id = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the accessor. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+accessor_arn :: Lens.Lens' Accessor (Prelude.Maybe Prelude.Text)
+accessor_arn = Lens.lens (\Accessor' {arn} -> arn) (\s@Accessor' {} a -> s {arn = a} :: Accessor)
+
+-- | The billing token is a property of the accessor. Use this token to make
+-- Ethereum API calls to your Ethereum node. The billing token is used to
+-- track your accessor object for billing Ethereum API requests made to
+-- your Ethereum nodes.
+accessor_billingToken :: Lens.Lens' Accessor (Prelude.Maybe Prelude.Text)
+accessor_billingToken = Lens.lens (\Accessor' {billingToken} -> billingToken) (\s@Accessor' {} a -> s {billingToken = a} :: Accessor)
+
+-- | The creation date and time of the accessor.
+accessor_creationDate :: Lens.Lens' Accessor (Prelude.Maybe Prelude.UTCTime)
+accessor_creationDate = Lens.lens (\Accessor' {creationDate} -> creationDate) (\s@Accessor' {} a -> s {creationDate = a} :: Accessor) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the accessor.
+accessor_id :: Lens.Lens' Accessor (Prelude.Maybe Prelude.Text)
+accessor_id = Lens.lens (\Accessor' {id} -> id) (\s@Accessor' {} a -> s {id = a} :: Accessor)
+
+-- | The current status of the accessor.
+accessor_status :: Lens.Lens' Accessor (Prelude.Maybe AccessorStatus)
+accessor_status = Lens.lens (\Accessor' {status} -> status) (\s@Accessor' {} a -> s {status = a} :: Accessor)
+
+-- | The type of the accessor.
+--
+-- Currently accessor type is restricted to @BILLING_TOKEN@.
+accessor_type :: Lens.Lens' Accessor (Prelude.Maybe AccessorType)
+accessor_type = Lens.lens (\Accessor' {type'} -> type') (\s@Accessor' {} a -> s {type' = a} :: Accessor)
+
+instance Data.FromJSON Accessor where
+  parseJSON =
+    Data.withObject
+      "Accessor"
+      ( \x ->
+          Accessor'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "BillingToken")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable Accessor where
+  hashWithSalt _salt Accessor' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` billingToken
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Accessor where
+  rnf Accessor' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf billingToken
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ManagedBlockChain/Types/AccessorStatus.hs b/gen/Amazonka/ManagedBlockChain/Types/AccessorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/AccessorStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.AccessorStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.AccessorStatus
+  ( AccessorStatus
+      ( ..,
+        AccessorStatus_AVAILABLE,
+        AccessorStatus_DELETED,
+        AccessorStatus_PENDING_DELETION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccessorStatus = AccessorStatus'
+  { fromAccessorStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AccessorStatus_AVAILABLE :: AccessorStatus
+pattern AccessorStatus_AVAILABLE = AccessorStatus' "AVAILABLE"
+
+pattern AccessorStatus_DELETED :: AccessorStatus
+pattern AccessorStatus_DELETED = AccessorStatus' "DELETED"
+
+pattern AccessorStatus_PENDING_DELETION :: AccessorStatus
+pattern AccessorStatus_PENDING_DELETION = AccessorStatus' "PENDING_DELETION"
+
+{-# COMPLETE
+  AccessorStatus_AVAILABLE,
+  AccessorStatus_DELETED,
+  AccessorStatus_PENDING_DELETION,
+  AccessorStatus'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/AccessorSummary.hs b/gen/Amazonka/ManagedBlockChain/Types/AccessorSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/AccessorSummary.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.AccessorSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.AccessorSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.AccessorStatus
+import Amazonka.ManagedBlockChain.Types.AccessorType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The token based access feature is in preview release for Ethereum on
+-- Amazon Managed Blockchain and is subject to change. We recommend that
+-- you use this feature only with test scenarios, and not in production
+-- environments.
+--
+-- A summary of accessor properties.
+--
+-- /See:/ 'newAccessorSummary' smart constructor.
+data AccessorSummary = AccessorSummary'
+  { -- | The Amazon Resource Name (ARN) of the accessor. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The creation date and time of the accessor.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier of the accessor.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the accessor.
+    status :: Prelude.Maybe AccessorStatus,
+    -- | The type of the accessor.
+    --
+    -- Currently accessor type is restricted to @BILLING_TOKEN@.
+    type' :: Prelude.Maybe AccessorType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessorSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'accessorSummary_arn' - The Amazon Resource Name (ARN) of the accessor. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'accessorSummary_creationDate' - The creation date and time of the accessor.
+--
+-- 'id', 'accessorSummary_id' - The unique identifier of the accessor.
+--
+-- 'status', 'accessorSummary_status' - The current status of the accessor.
+--
+-- 'type'', 'accessorSummary_type' - The type of the accessor.
+--
+-- Currently accessor type is restricted to @BILLING_TOKEN@.
+newAccessorSummary ::
+  AccessorSummary
+newAccessorSummary =
+  AccessorSummary'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      id = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the accessor. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+accessorSummary_arn :: Lens.Lens' AccessorSummary (Prelude.Maybe Prelude.Text)
+accessorSummary_arn = Lens.lens (\AccessorSummary' {arn} -> arn) (\s@AccessorSummary' {} a -> s {arn = a} :: AccessorSummary)
+
+-- | The creation date and time of the accessor.
+accessorSummary_creationDate :: Lens.Lens' AccessorSummary (Prelude.Maybe Prelude.UTCTime)
+accessorSummary_creationDate = Lens.lens (\AccessorSummary' {creationDate} -> creationDate) (\s@AccessorSummary' {} a -> s {creationDate = a} :: AccessorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the accessor.
+accessorSummary_id :: Lens.Lens' AccessorSummary (Prelude.Maybe Prelude.Text)
+accessorSummary_id = Lens.lens (\AccessorSummary' {id} -> id) (\s@AccessorSummary' {} a -> s {id = a} :: AccessorSummary)
+
+-- | The current status of the accessor.
+accessorSummary_status :: Lens.Lens' AccessorSummary (Prelude.Maybe AccessorStatus)
+accessorSummary_status = Lens.lens (\AccessorSummary' {status} -> status) (\s@AccessorSummary' {} a -> s {status = a} :: AccessorSummary)
+
+-- | The type of the accessor.
+--
+-- Currently accessor type is restricted to @BILLING_TOKEN@.
+accessorSummary_type :: Lens.Lens' AccessorSummary (Prelude.Maybe AccessorType)
+accessorSummary_type = Lens.lens (\AccessorSummary' {type'} -> type') (\s@AccessorSummary' {} a -> s {type' = a} :: AccessorSummary)
+
+instance Data.FromJSON AccessorSummary where
+  parseJSON =
+    Data.withObject
+      "AccessorSummary"
+      ( \x ->
+          AccessorSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable AccessorSummary where
+  hashWithSalt _salt AccessorSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AccessorSummary where
+  rnf AccessorSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ManagedBlockChain/Types/AccessorType.hs b/gen/Amazonka/ManagedBlockChain/Types/AccessorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/AccessorType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.AccessorType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.AccessorType
+  ( AccessorType
+      ( ..,
+        AccessorType_BILLING_TOKEN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccessorType = AccessorType'
+  { fromAccessorType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AccessorType_BILLING_TOKEN :: AccessorType
+pattern AccessorType_BILLING_TOKEN = AccessorType' "BILLING_TOKEN"
+
+{-# COMPLETE
+  AccessorType_BILLING_TOKEN,
+  AccessorType'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/ApprovalThresholdPolicy.hs b/gen/Amazonka/ManagedBlockChain/Types/ApprovalThresholdPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/ApprovalThresholdPolicy.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.ApprovalThresholdPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.ApprovalThresholdPolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.ThresholdComparator
+import qualified Amazonka.Prelude as Prelude
+
+-- | A policy type that defines the voting rules for the network. The rules
+-- decide if a proposal is approved. Approval may be based on criteria such
+-- as the percentage of @YES@ votes and the duration of the proposal. The
+-- policy applies to all proposals and is specified when the network is
+-- created.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newApprovalThresholdPolicy' smart constructor.
+data ApprovalThresholdPolicy = ApprovalThresholdPolicy'
+  { -- | The duration from the time that a proposal is created until it expires.
+    -- If members cast neither the required number of @YES@ votes to approve
+    -- the proposal nor the number of @NO@ votes required to reject it before
+    -- the duration expires, the proposal is @EXPIRED@ and @ProposalActions@
+    -- aren\'t carried out.
+    proposalDurationInHours :: Prelude.Maybe Prelude.Natural,
+    -- | Determines whether the vote percentage must be greater than the
+    -- @ThresholdPercentage@ or must be greater than or equal to the
+    -- @ThreholdPercentage@ to be approved.
+    thresholdComparator :: Prelude.Maybe ThresholdComparator,
+    -- | The percentage of votes among all members that must be @YES@ for a
+    -- proposal to be approved. For example, a @ThresholdPercentage@ value of
+    -- @50@ indicates 50%. The @ThresholdComparator@ determines the precise
+    -- comparison. If a @ThresholdPercentage@ value of @50@ is specified on a
+    -- network with 10 members, along with a @ThresholdComparator@ value of
+    -- @GREATER_THAN@, this indicates that 6 @YES@ votes are required for the
+    -- proposal to be approved.
+    thresholdPercentage :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApprovalThresholdPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'proposalDurationInHours', 'approvalThresholdPolicy_proposalDurationInHours' - The duration from the time that a proposal is created until it expires.
+-- If members cast neither the required number of @YES@ votes to approve
+-- the proposal nor the number of @NO@ votes required to reject it before
+-- the duration expires, the proposal is @EXPIRED@ and @ProposalActions@
+-- aren\'t carried out.
+--
+-- 'thresholdComparator', 'approvalThresholdPolicy_thresholdComparator' - Determines whether the vote percentage must be greater than the
+-- @ThresholdPercentage@ or must be greater than or equal to the
+-- @ThreholdPercentage@ to be approved.
+--
+-- 'thresholdPercentage', 'approvalThresholdPolicy_thresholdPercentage' - The percentage of votes among all members that must be @YES@ for a
+-- proposal to be approved. For example, a @ThresholdPercentage@ value of
+-- @50@ indicates 50%. The @ThresholdComparator@ determines the precise
+-- comparison. If a @ThresholdPercentage@ value of @50@ is specified on a
+-- network with 10 members, along with a @ThresholdComparator@ value of
+-- @GREATER_THAN@, this indicates that 6 @YES@ votes are required for the
+-- proposal to be approved.
+newApprovalThresholdPolicy ::
+  ApprovalThresholdPolicy
+newApprovalThresholdPolicy =
+  ApprovalThresholdPolicy'
+    { proposalDurationInHours =
+        Prelude.Nothing,
+      thresholdComparator = Prelude.Nothing,
+      thresholdPercentage = Prelude.Nothing
+    }
+
+-- | The duration from the time that a proposal is created until it expires.
+-- If members cast neither the required number of @YES@ votes to approve
+-- the proposal nor the number of @NO@ votes required to reject it before
+-- the duration expires, the proposal is @EXPIRED@ and @ProposalActions@
+-- aren\'t carried out.
+approvalThresholdPolicy_proposalDurationInHours :: Lens.Lens' ApprovalThresholdPolicy (Prelude.Maybe Prelude.Natural)
+approvalThresholdPolicy_proposalDurationInHours = Lens.lens (\ApprovalThresholdPolicy' {proposalDurationInHours} -> proposalDurationInHours) (\s@ApprovalThresholdPolicy' {} a -> s {proposalDurationInHours = a} :: ApprovalThresholdPolicy)
+
+-- | Determines whether the vote percentage must be greater than the
+-- @ThresholdPercentage@ or must be greater than or equal to the
+-- @ThreholdPercentage@ to be approved.
+approvalThresholdPolicy_thresholdComparator :: Lens.Lens' ApprovalThresholdPolicy (Prelude.Maybe ThresholdComparator)
+approvalThresholdPolicy_thresholdComparator = Lens.lens (\ApprovalThresholdPolicy' {thresholdComparator} -> thresholdComparator) (\s@ApprovalThresholdPolicy' {} a -> s {thresholdComparator = a} :: ApprovalThresholdPolicy)
+
+-- | The percentage of votes among all members that must be @YES@ for a
+-- proposal to be approved. For example, a @ThresholdPercentage@ value of
+-- @50@ indicates 50%. The @ThresholdComparator@ determines the precise
+-- comparison. If a @ThresholdPercentage@ value of @50@ is specified on a
+-- network with 10 members, along with a @ThresholdComparator@ value of
+-- @GREATER_THAN@, this indicates that 6 @YES@ votes are required for the
+-- proposal to be approved.
+approvalThresholdPolicy_thresholdPercentage :: Lens.Lens' ApprovalThresholdPolicy (Prelude.Maybe Prelude.Natural)
+approvalThresholdPolicy_thresholdPercentage = Lens.lens (\ApprovalThresholdPolicy' {thresholdPercentage} -> thresholdPercentage) (\s@ApprovalThresholdPolicy' {} a -> s {thresholdPercentage = a} :: ApprovalThresholdPolicy)
+
+instance Data.FromJSON ApprovalThresholdPolicy where
+  parseJSON =
+    Data.withObject
+      "ApprovalThresholdPolicy"
+      ( \x ->
+          ApprovalThresholdPolicy'
+            Prelude.<$> (x Data..:? "ProposalDurationInHours")
+            Prelude.<*> (x Data..:? "ThresholdComparator")
+            Prelude.<*> (x Data..:? "ThresholdPercentage")
+      )
+
+instance Prelude.Hashable ApprovalThresholdPolicy where
+  hashWithSalt _salt ApprovalThresholdPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` proposalDurationInHours
+      `Prelude.hashWithSalt` thresholdComparator
+      `Prelude.hashWithSalt` thresholdPercentage
+
+instance Prelude.NFData ApprovalThresholdPolicy where
+  rnf ApprovalThresholdPolicy' {..} =
+    Prelude.rnf proposalDurationInHours
+      `Prelude.seq` Prelude.rnf thresholdComparator
+      `Prelude.seq` Prelude.rnf thresholdPercentage
+
+instance Data.ToJSON ApprovalThresholdPolicy where
+  toJSON ApprovalThresholdPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ProposalDurationInHours" Data..=)
+              Prelude.<$> proposalDurationInHours,
+            ("ThresholdComparator" Data..=)
+              Prelude.<$> thresholdComparator,
+            ("ThresholdPercentage" Data..=)
+              Prelude.<$> thresholdPercentage
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Edition.hs b/gen/Amazonka/ManagedBlockChain/Types/Edition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Edition.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Edition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Edition
+  ( Edition
+      ( ..,
+        Edition_STANDARD,
+        Edition_STARTER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Edition = Edition' {fromEdition :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Edition_STANDARD :: Edition
+pattern Edition_STANDARD = Edition' "STANDARD"
+
+pattern Edition_STARTER :: Edition
+pattern Edition_STARTER = Edition' "STARTER"
+
+{-# COMPLETE
+  Edition_STANDARD,
+  Edition_STARTER,
+  Edition'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Framework.hs b/gen/Amazonka/ManagedBlockChain/Types/Framework.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Framework.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Framework
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Framework
+  ( Framework
+      ( ..,
+        Framework_ETHEREUM,
+        Framework_HYPERLEDGER_FABRIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Framework = Framework'
+  { fromFramework ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Framework_ETHEREUM :: Framework
+pattern Framework_ETHEREUM = Framework' "ETHEREUM"
+
+pattern Framework_HYPERLEDGER_FABRIC :: Framework
+pattern Framework_HYPERLEDGER_FABRIC = Framework' "HYPERLEDGER_FABRIC"
+
+{-# COMPLETE
+  Framework_ETHEREUM,
+  Framework_HYPERLEDGER_FABRIC,
+  Framework'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Invitation.hs b/gen/Amazonka/ManagedBlockChain/Types/Invitation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Invitation.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Invitation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Invitation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.InvitationStatus
+import Amazonka.ManagedBlockChain.Types.NetworkSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | An invitation to an Amazon Web Services account to create a member and
+-- join the network.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newInvitation' smart constructor.
+data Invitation = Invitation'
+  { -- | The Amazon Resource Name (ARN) of the invitation. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the invitation was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time that the invitation expires. This is the
+    -- @CreationDate@ plus the @ProposalDurationInHours@ that is specified in
+    -- the @ProposalThresholdPolicy@. After this date and time, the invitee can
+    -- no longer create a member and join the network using this
+    -- @InvitationId@.
+    expirationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the invitation.
+    invitationId :: Prelude.Maybe Prelude.Text,
+    networkSummary :: Prelude.Maybe NetworkSummary,
+    -- | The status of the invitation:
+    --
+    -- -   @PENDING@ - The invitee hasn\'t created a member to join the
+    --     network, and the invitation hasn\'t yet expired.
+    --
+    -- -   @ACCEPTING@ - The invitee has begun creating a member, and creation
+    --     hasn\'t yet completed.
+    --
+    -- -   @ACCEPTED@ - The invitee created a member and joined the network
+    --     using the @InvitationID@.
+    --
+    -- -   @REJECTED@ - The invitee rejected the invitation.
+    --
+    -- -   @EXPIRED@ - The invitee neither created a member nor rejected the
+    --     invitation before the @ExpirationDate@.
+    status :: Prelude.Maybe InvitationStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Invitation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'invitation_arn' - The Amazon Resource Name (ARN) of the invitation. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'invitation_creationDate' - The date and time that the invitation was created.
+--
+-- 'expirationDate', 'invitation_expirationDate' - The date and time that the invitation expires. This is the
+-- @CreationDate@ plus the @ProposalDurationInHours@ that is specified in
+-- the @ProposalThresholdPolicy@. After this date and time, the invitee can
+-- no longer create a member and join the network using this
+-- @InvitationId@.
+--
+-- 'invitationId', 'invitation_invitationId' - The unique identifier for the invitation.
+--
+-- 'networkSummary', 'invitation_networkSummary' - Undocumented member.
+--
+-- 'status', 'invitation_status' - The status of the invitation:
+--
+-- -   @PENDING@ - The invitee hasn\'t created a member to join the
+--     network, and the invitation hasn\'t yet expired.
+--
+-- -   @ACCEPTING@ - The invitee has begun creating a member, and creation
+--     hasn\'t yet completed.
+--
+-- -   @ACCEPTED@ - The invitee created a member and joined the network
+--     using the @InvitationID@.
+--
+-- -   @REJECTED@ - The invitee rejected the invitation.
+--
+-- -   @EXPIRED@ - The invitee neither created a member nor rejected the
+--     invitation before the @ExpirationDate@.
+newInvitation ::
+  Invitation
+newInvitation =
+  Invitation'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      expirationDate = Prelude.Nothing,
+      invitationId = Prelude.Nothing,
+      networkSummary = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the invitation. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+invitation_arn :: Lens.Lens' Invitation (Prelude.Maybe Prelude.Text)
+invitation_arn = Lens.lens (\Invitation' {arn} -> arn) (\s@Invitation' {} a -> s {arn = a} :: Invitation)
+
+-- | The date and time that the invitation was created.
+invitation_creationDate :: Lens.Lens' Invitation (Prelude.Maybe Prelude.UTCTime)
+invitation_creationDate = Lens.lens (\Invitation' {creationDate} -> creationDate) (\s@Invitation' {} a -> s {creationDate = a} :: Invitation) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time that the invitation expires. This is the
+-- @CreationDate@ plus the @ProposalDurationInHours@ that is specified in
+-- the @ProposalThresholdPolicy@. After this date and time, the invitee can
+-- no longer create a member and join the network using this
+-- @InvitationId@.
+invitation_expirationDate :: Lens.Lens' Invitation (Prelude.Maybe Prelude.UTCTime)
+invitation_expirationDate = Lens.lens (\Invitation' {expirationDate} -> expirationDate) (\s@Invitation' {} a -> s {expirationDate = a} :: Invitation) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the invitation.
+invitation_invitationId :: Lens.Lens' Invitation (Prelude.Maybe Prelude.Text)
+invitation_invitationId = Lens.lens (\Invitation' {invitationId} -> invitationId) (\s@Invitation' {} a -> s {invitationId = a} :: Invitation)
+
+-- | Undocumented member.
+invitation_networkSummary :: Lens.Lens' Invitation (Prelude.Maybe NetworkSummary)
+invitation_networkSummary = Lens.lens (\Invitation' {networkSummary} -> networkSummary) (\s@Invitation' {} a -> s {networkSummary = a} :: Invitation)
+
+-- | The status of the invitation:
+--
+-- -   @PENDING@ - The invitee hasn\'t created a member to join the
+--     network, and the invitation hasn\'t yet expired.
+--
+-- -   @ACCEPTING@ - The invitee has begun creating a member, and creation
+--     hasn\'t yet completed.
+--
+-- -   @ACCEPTED@ - The invitee created a member and joined the network
+--     using the @InvitationID@.
+--
+-- -   @REJECTED@ - The invitee rejected the invitation.
+--
+-- -   @EXPIRED@ - The invitee neither created a member nor rejected the
+--     invitation before the @ExpirationDate@.
+invitation_status :: Lens.Lens' Invitation (Prelude.Maybe InvitationStatus)
+invitation_status = Lens.lens (\Invitation' {status} -> status) (\s@Invitation' {} a -> s {status = a} :: Invitation)
+
+instance Data.FromJSON Invitation where
+  parseJSON =
+    Data.withObject
+      "Invitation"
+      ( \x ->
+          Invitation'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "ExpirationDate")
+            Prelude.<*> (x Data..:? "InvitationId")
+            Prelude.<*> (x Data..:? "NetworkSummary")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable Invitation where
+  hashWithSalt _salt Invitation' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` expirationDate
+      `Prelude.hashWithSalt` invitationId
+      `Prelude.hashWithSalt` networkSummary
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData Invitation where
+  rnf Invitation' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf expirationDate
+      `Prelude.seq` Prelude.rnf invitationId
+      `Prelude.seq` Prelude.rnf networkSummary
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ManagedBlockChain/Types/InvitationStatus.hs b/gen/Amazonka/ManagedBlockChain/Types/InvitationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/InvitationStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.InvitationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.InvitationStatus
+  ( InvitationStatus
+      ( ..,
+        InvitationStatus_ACCEPTED,
+        InvitationStatus_ACCEPTING,
+        InvitationStatus_EXPIRED,
+        InvitationStatus_PENDING,
+        InvitationStatus_REJECTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype InvitationStatus = InvitationStatus'
+  { fromInvitationStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InvitationStatus_ACCEPTED :: InvitationStatus
+pattern InvitationStatus_ACCEPTED = InvitationStatus' "ACCEPTED"
+
+pattern InvitationStatus_ACCEPTING :: InvitationStatus
+pattern InvitationStatus_ACCEPTING = InvitationStatus' "ACCEPTING"
+
+pattern InvitationStatus_EXPIRED :: InvitationStatus
+pattern InvitationStatus_EXPIRED = InvitationStatus' "EXPIRED"
+
+pattern InvitationStatus_PENDING :: InvitationStatus
+pattern InvitationStatus_PENDING = InvitationStatus' "PENDING"
+
+pattern InvitationStatus_REJECTED :: InvitationStatus
+pattern InvitationStatus_REJECTED = InvitationStatus' "REJECTED"
+
+{-# COMPLETE
+  InvitationStatus_ACCEPTED,
+  InvitationStatus_ACCEPTING,
+  InvitationStatus_EXPIRED,
+  InvitationStatus_PENDING,
+  InvitationStatus_REJECTED,
+  InvitationStatus'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/InviteAction.hs b/gen/Amazonka/ManagedBlockChain/Types/InviteAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/InviteAction.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.InviteAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.InviteAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An action to invite a specific Amazon Web Services account to create a
+-- member and join the network. The @InviteAction@ is carried out when a
+-- @Proposal@ is @APPROVED@.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newInviteAction' smart constructor.
+data InviteAction = InviteAction'
+  { -- | The Amazon Web Services account ID to invite.
+    principal :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InviteAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'principal', 'inviteAction_principal' - The Amazon Web Services account ID to invite.
+newInviteAction ::
+  -- | 'principal'
+  Prelude.Text ->
+  InviteAction
+newInviteAction pPrincipal_ =
+  InviteAction' {principal = pPrincipal_}
+
+-- | The Amazon Web Services account ID to invite.
+inviteAction_principal :: Lens.Lens' InviteAction Prelude.Text
+inviteAction_principal = Lens.lens (\InviteAction' {principal} -> principal) (\s@InviteAction' {} a -> s {principal = a} :: InviteAction)
+
+instance Data.FromJSON InviteAction where
+  parseJSON =
+    Data.withObject
+      "InviteAction"
+      ( \x ->
+          InviteAction' Prelude.<$> (x Data..: "Principal")
+      )
+
+instance Prelude.Hashable InviteAction where
+  hashWithSalt _salt InviteAction' {..} =
+    _salt `Prelude.hashWithSalt` principal
+
+instance Prelude.NFData InviteAction where
+  rnf InviteAction' {..} = Prelude.rnf principal
+
+instance Data.ToJSON InviteAction where
+  toJSON InviteAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Principal" Data..= principal)]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/LogConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/LogConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/LogConfiguration.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.LogConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.LogConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A configuration for logging events.
+--
+-- /See:/ 'newLogConfiguration' smart constructor.
+data LogConfiguration = LogConfiguration'
+  { -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'logConfiguration_enabled' - Indicates whether logging is enabled.
+newLogConfiguration ::
+  LogConfiguration
+newLogConfiguration =
+  LogConfiguration' {enabled = Prelude.Nothing}
+
+-- | Indicates whether logging is enabled.
+logConfiguration_enabled :: Lens.Lens' LogConfiguration (Prelude.Maybe Prelude.Bool)
+logConfiguration_enabled = Lens.lens (\LogConfiguration' {enabled} -> enabled) (\s@LogConfiguration' {} a -> s {enabled = a} :: LogConfiguration)
+
+instance Data.FromJSON LogConfiguration where
+  parseJSON =
+    Data.withObject
+      "LogConfiguration"
+      ( \x ->
+          LogConfiguration' Prelude.<$> (x Data..:? "Enabled")
+      )
+
+instance Prelude.Hashable LogConfiguration where
+  hashWithSalt _salt LogConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData LogConfiguration where
+  rnf LogConfiguration' {..} = Prelude.rnf enabled
+
+instance Data.ToJSON LogConfiguration where
+  toJSON LogConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Enabled" Data..=) Prelude.<$> enabled]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/LogConfigurations.hs b/gen/Amazonka/ManagedBlockChain/Types/LogConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/LogConfigurations.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.LogConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.LogConfigurations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.LogConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | A collection of log configurations.
+--
+-- /See:/ 'newLogConfigurations' smart constructor.
+data LogConfigurations = LogConfigurations'
+  { -- | Parameters for publishing logs to Amazon CloudWatch Logs.
+    cloudwatch :: Prelude.Maybe LogConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LogConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudwatch', 'logConfigurations_cloudwatch' - Parameters for publishing logs to Amazon CloudWatch Logs.
+newLogConfigurations ::
+  LogConfigurations
+newLogConfigurations =
+  LogConfigurations' {cloudwatch = Prelude.Nothing}
+
+-- | Parameters for publishing logs to Amazon CloudWatch Logs.
+logConfigurations_cloudwatch :: Lens.Lens' LogConfigurations (Prelude.Maybe LogConfiguration)
+logConfigurations_cloudwatch = Lens.lens (\LogConfigurations' {cloudwatch} -> cloudwatch) (\s@LogConfigurations' {} a -> s {cloudwatch = a} :: LogConfigurations)
+
+instance Data.FromJSON LogConfigurations where
+  parseJSON =
+    Data.withObject
+      "LogConfigurations"
+      ( \x ->
+          LogConfigurations'
+            Prelude.<$> (x Data..:? "Cloudwatch")
+      )
+
+instance Prelude.Hashable LogConfigurations where
+  hashWithSalt _salt LogConfigurations' {..} =
+    _salt `Prelude.hashWithSalt` cloudwatch
+
+instance Prelude.NFData LogConfigurations where
+  rnf LogConfigurations' {..} = Prelude.rnf cloudwatch
+
+instance Data.ToJSON LogConfigurations where
+  toJSON LogConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Cloudwatch" Data..=) Prelude.<$> cloudwatch]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Member.hs b/gen/Amazonka/ManagedBlockChain/Types/Member.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Member.hs
@@ -0,0 +1,338 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Member
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Member where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.MemberFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Member configuration properties.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newMember' smart constructor.
+data Member = Member'
+  { -- | The Amazon Resource Name (ARN) of the member. For more information about
+    -- ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the member was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | An optional description for the member.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Attributes relevant to a member for the blockchain framework that the
+    -- Managed Blockchain network uses.
+    frameworkAttributes :: Prelude.Maybe MemberFrameworkAttributes,
+    -- | The unique identifier of the member.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the customer managed key in Key
+    -- Management Service (KMS) that the member uses for encryption at rest. If
+    -- the value of this parameter is @\"AWS Owned KMS Key\"@, the member uses
+    -- an Amazon Web Services owned KMS key for encryption. This parameter is
+    -- inherited by the nodes that this member owns.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Configuration properties for logging events associated with a member.
+    logPublishingConfiguration :: Prelude.Maybe MemberLogPublishingConfiguration,
+    -- | The name of the member.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network to which the member belongs.
+    networkId :: Prelude.Maybe Prelude.Text,
+    -- | The status of a member.
+    --
+    -- -   @CREATING@ - The Amazon Web Services account is in the process of
+    --     creating a member.
+    --
+    -- -   @AVAILABLE@ - The member has been created and can participate in the
+    --     network.
+    --
+    -- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+    --     create a member and creation failed.
+    --
+    -- -   @UPDATING@ - The member is in the process of being updated.
+    --
+    -- -   @DELETING@ - The member and all associated resources are in the
+    --     process of being deleted. Either the Amazon Web Services account
+    --     that owns the member deleted it, or the member is being deleted as
+    --     the result of an @APPROVED@ @PROPOSAL@ to remove the member.
+    --
+    -- -   @DELETED@ - The member can no longer participate on the network and
+    --     all associated resources are deleted. Either the Amazon Web Services
+    --     account that owns the member deleted it, or the member is being
+    --     deleted as the result of an @APPROVED@ @PROPOSAL@ to remove the
+    --     member.
+    --
+    -- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The member is impaired and might not
+    --     function as expected because it cannot access the specified customer
+    --     managed key in KMS for encryption at rest. Either the KMS key was
+    --     disabled or deleted, or the grants on the key were revoked.
+    --
+    --     The effect of disabling or deleting a key or of revoking a grant
+    --     isn\'t immediate. It might take some time for the member resource to
+    --     discover that the key is inaccessible. When a resource is in this
+    --     state, we recommend deleting and recreating the resource.
+    status :: Prelude.Maybe MemberStatus,
+    -- | Tags assigned to the member. Tags consist of a key and optional value.
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Member' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'member_arn' - The Amazon Resource Name (ARN) of the member. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'member_creationDate' - The date and time that the member was created.
+--
+-- 'description', 'member_description' - An optional description for the member.
+--
+-- 'frameworkAttributes', 'member_frameworkAttributes' - Attributes relevant to a member for the blockchain framework that the
+-- Managed Blockchain network uses.
+--
+-- 'id', 'member_id' - The unique identifier of the member.
+--
+-- 'kmsKeyArn', 'member_kmsKeyArn' - The Amazon Resource Name (ARN) of the customer managed key in Key
+-- Management Service (KMS) that the member uses for encryption at rest. If
+-- the value of this parameter is @\"AWS Owned KMS Key\"@, the member uses
+-- an Amazon Web Services owned KMS key for encryption. This parameter is
+-- inherited by the nodes that this member owns.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- 'logPublishingConfiguration', 'member_logPublishingConfiguration' - Configuration properties for logging events associated with a member.
+--
+-- 'name', 'member_name' - The name of the member.
+--
+-- 'networkId', 'member_networkId' - The unique identifier of the network to which the member belongs.
+--
+-- 'status', 'member_status' - The status of a member.
+--
+-- -   @CREATING@ - The Amazon Web Services account is in the process of
+--     creating a member.
+--
+-- -   @AVAILABLE@ - The member has been created and can participate in the
+--     network.
+--
+-- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+--     create a member and creation failed.
+--
+-- -   @UPDATING@ - The member is in the process of being updated.
+--
+-- -   @DELETING@ - The member and all associated resources are in the
+--     process of being deleted. Either the Amazon Web Services account
+--     that owns the member deleted it, or the member is being deleted as
+--     the result of an @APPROVED@ @PROPOSAL@ to remove the member.
+--
+-- -   @DELETED@ - The member can no longer participate on the network and
+--     all associated resources are deleted. Either the Amazon Web Services
+--     account that owns the member deleted it, or the member is being
+--     deleted as the result of an @APPROVED@ @PROPOSAL@ to remove the
+--     member.
+--
+-- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The member is impaired and might not
+--     function as expected because it cannot access the specified customer
+--     managed key in KMS for encryption at rest. Either the KMS key was
+--     disabled or deleted, or the grants on the key were revoked.
+--
+--     The effect of disabling or deleting a key or of revoking a grant
+--     isn\'t immediate. It might take some time for the member resource to
+--     discover that the key is inaccessible. When a resource is in this
+--     state, we recommend deleting and recreating the resource.
+--
+-- 'tags', 'member_tags' - Tags assigned to the member. Tags consist of a key and optional value.
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+newMember ::
+  Member
+newMember =
+  Member'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      frameworkAttributes = Prelude.Nothing,
+      id = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing,
+      logPublishingConfiguration = Prelude.Nothing,
+      name = Prelude.Nothing,
+      networkId = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the member. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+member_arn :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_arn = Lens.lens (\Member' {arn} -> arn) (\s@Member' {} a -> s {arn = a} :: Member)
+
+-- | The date and time that the member was created.
+member_creationDate :: Lens.Lens' Member (Prelude.Maybe Prelude.UTCTime)
+member_creationDate = Lens.lens (\Member' {creationDate} -> creationDate) (\s@Member' {} a -> s {creationDate = a} :: Member) Prelude.. Lens.mapping Data._Time
+
+-- | An optional description for the member.
+member_description :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_description = Lens.lens (\Member' {description} -> description) (\s@Member' {} a -> s {description = a} :: Member)
+
+-- | Attributes relevant to a member for the blockchain framework that the
+-- Managed Blockchain network uses.
+member_frameworkAttributes :: Lens.Lens' Member (Prelude.Maybe MemberFrameworkAttributes)
+member_frameworkAttributes = Lens.lens (\Member' {frameworkAttributes} -> frameworkAttributes) (\s@Member' {} a -> s {frameworkAttributes = a} :: Member)
+
+-- | The unique identifier of the member.
+member_id :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_id = Lens.lens (\Member' {id} -> id) (\s@Member' {} a -> s {id = a} :: Member)
+
+-- | The Amazon Resource Name (ARN) of the customer managed key in Key
+-- Management Service (KMS) that the member uses for encryption at rest. If
+-- the value of this parameter is @\"AWS Owned KMS Key\"@, the member uses
+-- an Amazon Web Services owned KMS key for encryption. This parameter is
+-- inherited by the nodes that this member owns.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+member_kmsKeyArn :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_kmsKeyArn = Lens.lens (\Member' {kmsKeyArn} -> kmsKeyArn) (\s@Member' {} a -> s {kmsKeyArn = a} :: Member)
+
+-- | Configuration properties for logging events associated with a member.
+member_logPublishingConfiguration :: Lens.Lens' Member (Prelude.Maybe MemberLogPublishingConfiguration)
+member_logPublishingConfiguration = Lens.lens (\Member' {logPublishingConfiguration} -> logPublishingConfiguration) (\s@Member' {} a -> s {logPublishingConfiguration = a} :: Member)
+
+-- | The name of the member.
+member_name :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_name = Lens.lens (\Member' {name} -> name) (\s@Member' {} a -> s {name = a} :: Member)
+
+-- | The unique identifier of the network to which the member belongs.
+member_networkId :: Lens.Lens' Member (Prelude.Maybe Prelude.Text)
+member_networkId = Lens.lens (\Member' {networkId} -> networkId) (\s@Member' {} a -> s {networkId = a} :: Member)
+
+-- | The status of a member.
+--
+-- -   @CREATING@ - The Amazon Web Services account is in the process of
+--     creating a member.
+--
+-- -   @AVAILABLE@ - The member has been created and can participate in the
+--     network.
+--
+-- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+--     create a member and creation failed.
+--
+-- -   @UPDATING@ - The member is in the process of being updated.
+--
+-- -   @DELETING@ - The member and all associated resources are in the
+--     process of being deleted. Either the Amazon Web Services account
+--     that owns the member deleted it, or the member is being deleted as
+--     the result of an @APPROVED@ @PROPOSAL@ to remove the member.
+--
+-- -   @DELETED@ - The member can no longer participate on the network and
+--     all associated resources are deleted. Either the Amazon Web Services
+--     account that owns the member deleted it, or the member is being
+--     deleted as the result of an @APPROVED@ @PROPOSAL@ to remove the
+--     member.
+--
+-- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The member is impaired and might not
+--     function as expected because it cannot access the specified customer
+--     managed key in KMS for encryption at rest. Either the KMS key was
+--     disabled or deleted, or the grants on the key were revoked.
+--
+--     The effect of disabling or deleting a key or of revoking a grant
+--     isn\'t immediate. It might take some time for the member resource to
+--     discover that the key is inaccessible. When a resource is in this
+--     state, we recommend deleting and recreating the resource.
+member_status :: Lens.Lens' Member (Prelude.Maybe MemberStatus)
+member_status = Lens.lens (\Member' {status} -> status) (\s@Member' {} a -> s {status = a} :: Member)
+
+-- | Tags assigned to the member. Tags consist of a key and optional value.
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+member_tags :: Lens.Lens' Member (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+member_tags = Lens.lens (\Member' {tags} -> tags) (\s@Member' {} a -> s {tags = a} :: Member) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Member where
+  parseJSON =
+    Data.withObject
+      "Member"
+      ( \x ->
+          Member'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "FrameworkAttributes")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "KmsKeyArn")
+            Prelude.<*> (x Data..:? "LogPublishingConfiguration")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "NetworkId")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Member where
+  hashWithSalt _salt Member' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` frameworkAttributes
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` logPublishingConfiguration
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Member where
+  rnf Member' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf frameworkAttributes
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf logPublishingConfiguration
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberConfiguration.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.MemberFrameworkConfiguration
+import Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties of the member.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newMemberConfiguration' smart constructor.
+data MemberConfiguration = MemberConfiguration'
+  { -- | An optional description of the member.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the customer managed key in Key
+    -- Management Service (KMS) to use for encryption at rest in the member.
+    -- This parameter is inherited by any nodes that this member creates. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    --
+    -- Use one of the following options to specify this parameter:
+    --
+    -- -   __Undefined or empty string__ - By default, use an KMS key that is
+    --     owned and managed by Amazon Web Services on your behalf.
+    --
+    -- -   __A valid symmetric customer managed KMS key__ - Use the specified
+    --     KMS key in your account that you create, own, and manage.
+    --
+    --     Amazon Managed Blockchain doesn\'t support asymmetric keys. For more
+    --     information, see
+    --     <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using symmetric and asymmetric keys>
+    --     in the /Key Management Service Developer Guide/.
+    --
+    --     The following is an example of a KMS key ARN:
+    --     @arn:aws:kms:us-east-2:111122223333:key\/1234abcd-12ab-34cd-56ef-1234567890ab@
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Configuration properties for logging events associated with a member of
+    -- a Managed Blockchain network.
+    logPublishingConfiguration :: Prelude.Maybe MemberLogPublishingConfiguration,
+    -- | Tags assigned to the member. Tags consist of a key and optional value.
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    --
+    -- When specifying tags during creation, you can specify multiple key-value
+    -- pairs in a single request, with an overall maximum of 50 tags added to
+    -- each resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the member.
+    name :: Prelude.Text,
+    -- | Configuration properties of the blockchain framework relevant to the
+    -- member.
+    frameworkConfiguration :: MemberFrameworkConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'memberConfiguration_description' - An optional description of the member.
+--
+-- 'kmsKeyArn', 'memberConfiguration_kmsKeyArn' - The Amazon Resource Name (ARN) of the customer managed key in Key
+-- Management Service (KMS) to use for encryption at rest in the member.
+-- This parameter is inherited by any nodes that this member creates. For
+-- more information, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- Use one of the following options to specify this parameter:
+--
+-- -   __Undefined or empty string__ - By default, use an KMS key that is
+--     owned and managed by Amazon Web Services on your behalf.
+--
+-- -   __A valid symmetric customer managed KMS key__ - Use the specified
+--     KMS key in your account that you create, own, and manage.
+--
+--     Amazon Managed Blockchain doesn\'t support asymmetric keys. For more
+--     information, see
+--     <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using symmetric and asymmetric keys>
+--     in the /Key Management Service Developer Guide/.
+--
+--     The following is an example of a KMS key ARN:
+--     @arn:aws:kms:us-east-2:111122223333:key\/1234abcd-12ab-34cd-56ef-1234567890ab@
+--
+-- 'logPublishingConfiguration', 'memberConfiguration_logPublishingConfiguration' - Configuration properties for logging events associated with a member of
+-- a Managed Blockchain network.
+--
+-- 'tags', 'memberConfiguration_tags' - Tags assigned to the member. Tags consist of a key and optional value.
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+--
+-- 'name', 'memberConfiguration_name' - The name of the member.
+--
+-- 'frameworkConfiguration', 'memberConfiguration_frameworkConfiguration' - Configuration properties of the blockchain framework relevant to the
+-- member.
+newMemberConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'frameworkConfiguration'
+  MemberFrameworkConfiguration ->
+  MemberConfiguration
+newMemberConfiguration
+  pName_
+  pFrameworkConfiguration_ =
+    MemberConfiguration'
+      { description = Prelude.Nothing,
+        kmsKeyArn = Prelude.Nothing,
+        logPublishingConfiguration = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        frameworkConfiguration = pFrameworkConfiguration_
+      }
+
+-- | An optional description of the member.
+memberConfiguration_description :: Lens.Lens' MemberConfiguration (Prelude.Maybe Prelude.Text)
+memberConfiguration_description = Lens.lens (\MemberConfiguration' {description} -> description) (\s@MemberConfiguration' {} a -> s {description = a} :: MemberConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the customer managed key in Key
+-- Management Service (KMS) to use for encryption at rest in the member.
+-- This parameter is inherited by any nodes that this member creates. For
+-- more information, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- Use one of the following options to specify this parameter:
+--
+-- -   __Undefined or empty string__ - By default, use an KMS key that is
+--     owned and managed by Amazon Web Services on your behalf.
+--
+-- -   __A valid symmetric customer managed KMS key__ - Use the specified
+--     KMS key in your account that you create, own, and manage.
+--
+--     Amazon Managed Blockchain doesn\'t support asymmetric keys. For more
+--     information, see
+--     <https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html Using symmetric and asymmetric keys>
+--     in the /Key Management Service Developer Guide/.
+--
+--     The following is an example of a KMS key ARN:
+--     @arn:aws:kms:us-east-2:111122223333:key\/1234abcd-12ab-34cd-56ef-1234567890ab@
+memberConfiguration_kmsKeyArn :: Lens.Lens' MemberConfiguration (Prelude.Maybe Prelude.Text)
+memberConfiguration_kmsKeyArn = Lens.lens (\MemberConfiguration' {kmsKeyArn} -> kmsKeyArn) (\s@MemberConfiguration' {} a -> s {kmsKeyArn = a} :: MemberConfiguration)
+
+-- | Configuration properties for logging events associated with a member of
+-- a Managed Blockchain network.
+memberConfiguration_logPublishingConfiguration :: Lens.Lens' MemberConfiguration (Prelude.Maybe MemberLogPublishingConfiguration)
+memberConfiguration_logPublishingConfiguration = Lens.lens (\MemberConfiguration' {logPublishingConfiguration} -> logPublishingConfiguration) (\s@MemberConfiguration' {} a -> s {logPublishingConfiguration = a} :: MemberConfiguration)
+
+-- | Tags assigned to the member. Tags consist of a key and optional value.
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- When specifying tags during creation, you can specify multiple key-value
+-- pairs in a single request, with an overall maximum of 50 tags added to
+-- each resource.
+memberConfiguration_tags :: Lens.Lens' MemberConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+memberConfiguration_tags = Lens.lens (\MemberConfiguration' {tags} -> tags) (\s@MemberConfiguration' {} a -> s {tags = a} :: MemberConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the member.
+memberConfiguration_name :: Lens.Lens' MemberConfiguration Prelude.Text
+memberConfiguration_name = Lens.lens (\MemberConfiguration' {name} -> name) (\s@MemberConfiguration' {} a -> s {name = a} :: MemberConfiguration)
+
+-- | Configuration properties of the blockchain framework relevant to the
+-- member.
+memberConfiguration_frameworkConfiguration :: Lens.Lens' MemberConfiguration MemberFrameworkConfiguration
+memberConfiguration_frameworkConfiguration = Lens.lens (\MemberConfiguration' {frameworkConfiguration} -> frameworkConfiguration) (\s@MemberConfiguration' {} a -> s {frameworkConfiguration = a} :: MemberConfiguration)
+
+instance Prelude.Hashable MemberConfiguration where
+  hashWithSalt _salt MemberConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` logPublishingConfiguration
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` frameworkConfiguration
+
+instance Prelude.NFData MemberConfiguration where
+  rnf MemberConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf logPublishingConfiguration
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf frameworkConfiguration
+
+instance Data.ToJSON MemberConfiguration where
+  toJSON MemberConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("KmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            ("LogPublishingConfiguration" Data..=)
+              Prelude.<$> logPublishingConfiguration,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ( "FrameworkConfiguration"
+                  Data..= frameworkConfiguration
+              )
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberFabricAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberFabricAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberFabricAttributes.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberFabricAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberFabricAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of Hyperledger Fabric for a member in a Managed Blockchain
+-- network using the Hyperledger Fabric framework.
+--
+-- /See:/ 'newMemberFabricAttributes' smart constructor.
+data MemberFabricAttributes = MemberFabricAttributes'
+  { -- | The user name for the initial administrator user for the member.
+    adminUsername :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint used to access the member\'s certificate authority.
+    caEndpoint :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberFabricAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adminUsername', 'memberFabricAttributes_adminUsername' - The user name for the initial administrator user for the member.
+--
+-- 'caEndpoint', 'memberFabricAttributes_caEndpoint' - The endpoint used to access the member\'s certificate authority.
+newMemberFabricAttributes ::
+  MemberFabricAttributes
+newMemberFabricAttributes =
+  MemberFabricAttributes'
+    { adminUsername =
+        Prelude.Nothing,
+      caEndpoint = Prelude.Nothing
+    }
+
+-- | The user name for the initial administrator user for the member.
+memberFabricAttributes_adminUsername :: Lens.Lens' MemberFabricAttributes (Prelude.Maybe Prelude.Text)
+memberFabricAttributes_adminUsername = Lens.lens (\MemberFabricAttributes' {adminUsername} -> adminUsername) (\s@MemberFabricAttributes' {} a -> s {adminUsername = a} :: MemberFabricAttributes)
+
+-- | The endpoint used to access the member\'s certificate authority.
+memberFabricAttributes_caEndpoint :: Lens.Lens' MemberFabricAttributes (Prelude.Maybe Prelude.Text)
+memberFabricAttributes_caEndpoint = Lens.lens (\MemberFabricAttributes' {caEndpoint} -> caEndpoint) (\s@MemberFabricAttributes' {} a -> s {caEndpoint = a} :: MemberFabricAttributes)
+
+instance Data.FromJSON MemberFabricAttributes where
+  parseJSON =
+    Data.withObject
+      "MemberFabricAttributes"
+      ( \x ->
+          MemberFabricAttributes'
+            Prelude.<$> (x Data..:? "AdminUsername")
+            Prelude.<*> (x Data..:? "CaEndpoint")
+      )
+
+instance Prelude.Hashable MemberFabricAttributes where
+  hashWithSalt _salt MemberFabricAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` adminUsername
+      `Prelude.hashWithSalt` caEndpoint
+
+instance Prelude.NFData MemberFabricAttributes where
+  rnf MemberFabricAttributes' {..} =
+    Prelude.rnf adminUsername
+      `Prelude.seq` Prelude.rnf caEndpoint
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberFabricConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberFabricConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberFabricConfiguration.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberFabricConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberFabricConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties for Hyperledger Fabric for a member in a
+-- Managed Blockchain network using the Hyperledger Fabric framework.
+--
+-- /See:/ 'newMemberFabricConfiguration' smart constructor.
+data MemberFabricConfiguration = MemberFabricConfiguration'
+  { -- | The user name for the member\'s initial administrative user.
+    adminUsername :: Prelude.Text,
+    -- | The password for the member\'s initial administrative user. The
+    -- @AdminPassword@ must be at least eight characters long and no more than
+    -- 32 characters. It must contain at least one uppercase letter, one
+    -- lowercase letter, and one digit. It cannot have a single quotation mark
+    -- (‘), a double quotation marks (“), a forward slash(\/), a backward
+    -- slash(\\), \@, or a space.
+    adminPassword :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberFabricConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'adminUsername', 'memberFabricConfiguration_adminUsername' - The user name for the member\'s initial administrative user.
+--
+-- 'adminPassword', 'memberFabricConfiguration_adminPassword' - The password for the member\'s initial administrative user. The
+-- @AdminPassword@ must be at least eight characters long and no more than
+-- 32 characters. It must contain at least one uppercase letter, one
+-- lowercase letter, and one digit. It cannot have a single quotation mark
+-- (‘), a double quotation marks (“), a forward slash(\/), a backward
+-- slash(\\), \@, or a space.
+newMemberFabricConfiguration ::
+  -- | 'adminUsername'
+  Prelude.Text ->
+  -- | 'adminPassword'
+  Prelude.Text ->
+  MemberFabricConfiguration
+newMemberFabricConfiguration
+  pAdminUsername_
+  pAdminPassword_ =
+    MemberFabricConfiguration'
+      { adminUsername =
+          pAdminUsername_,
+        adminPassword =
+          Data._Sensitive Lens.# pAdminPassword_
+      }
+
+-- | The user name for the member\'s initial administrative user.
+memberFabricConfiguration_adminUsername :: Lens.Lens' MemberFabricConfiguration Prelude.Text
+memberFabricConfiguration_adminUsername = Lens.lens (\MemberFabricConfiguration' {adminUsername} -> adminUsername) (\s@MemberFabricConfiguration' {} a -> s {adminUsername = a} :: MemberFabricConfiguration)
+
+-- | The password for the member\'s initial administrative user. The
+-- @AdminPassword@ must be at least eight characters long and no more than
+-- 32 characters. It must contain at least one uppercase letter, one
+-- lowercase letter, and one digit. It cannot have a single quotation mark
+-- (‘), a double quotation marks (“), a forward slash(\/), a backward
+-- slash(\\), \@, or a space.
+memberFabricConfiguration_adminPassword :: Lens.Lens' MemberFabricConfiguration Prelude.Text
+memberFabricConfiguration_adminPassword = Lens.lens (\MemberFabricConfiguration' {adminPassword} -> adminPassword) (\s@MemberFabricConfiguration' {} a -> s {adminPassword = a} :: MemberFabricConfiguration) Prelude.. Data._Sensitive
+
+instance Prelude.Hashable MemberFabricConfiguration where
+  hashWithSalt _salt MemberFabricConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` adminUsername
+      `Prelude.hashWithSalt` adminPassword
+
+instance Prelude.NFData MemberFabricConfiguration where
+  rnf MemberFabricConfiguration' {..} =
+    Prelude.rnf adminUsername
+      `Prelude.seq` Prelude.rnf adminPassword
+
+instance Data.ToJSON MemberFabricConfiguration where
+  toJSON MemberFabricConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AdminUsername" Data..= adminUsername),
+            Prelude.Just
+              ("AdminPassword" Data..= adminPassword)
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberFabricLogPublishingConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberFabricLogPublishingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberFabricLogPublishingConfiguration.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberFabricLogPublishingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberFabricLogPublishingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.LogConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties for logging events associated with a member of
+-- a Managed Blockchain network using the Hyperledger Fabric framework.
+--
+-- /See:/ 'newMemberFabricLogPublishingConfiguration' smart constructor.
+data MemberFabricLogPublishingConfiguration = MemberFabricLogPublishingConfiguration'
+  { -- | Configuration properties for logging events associated with a member\'s
+    -- Certificate Authority (CA). CA logs help you determine when a member in
+    -- your account joins the network, or when new peers register with a member
+    -- CA.
+    caLogs :: Prelude.Maybe LogConfigurations
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberFabricLogPublishingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'caLogs', 'memberFabricLogPublishingConfiguration_caLogs' - Configuration properties for logging events associated with a member\'s
+-- Certificate Authority (CA). CA logs help you determine when a member in
+-- your account joins the network, or when new peers register with a member
+-- CA.
+newMemberFabricLogPublishingConfiguration ::
+  MemberFabricLogPublishingConfiguration
+newMemberFabricLogPublishingConfiguration =
+  MemberFabricLogPublishingConfiguration'
+    { caLogs =
+        Prelude.Nothing
+    }
+
+-- | Configuration properties for logging events associated with a member\'s
+-- Certificate Authority (CA). CA logs help you determine when a member in
+-- your account joins the network, or when new peers register with a member
+-- CA.
+memberFabricLogPublishingConfiguration_caLogs :: Lens.Lens' MemberFabricLogPublishingConfiguration (Prelude.Maybe LogConfigurations)
+memberFabricLogPublishingConfiguration_caLogs = Lens.lens (\MemberFabricLogPublishingConfiguration' {caLogs} -> caLogs) (\s@MemberFabricLogPublishingConfiguration' {} a -> s {caLogs = a} :: MemberFabricLogPublishingConfiguration)
+
+instance
+  Data.FromJSON
+    MemberFabricLogPublishingConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "MemberFabricLogPublishingConfiguration"
+      ( \x ->
+          MemberFabricLogPublishingConfiguration'
+            Prelude.<$> (x Data..:? "CaLogs")
+      )
+
+instance
+  Prelude.Hashable
+    MemberFabricLogPublishingConfiguration
+  where
+  hashWithSalt
+    _salt
+    MemberFabricLogPublishingConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` caLogs
+
+instance
+  Prelude.NFData
+    MemberFabricLogPublishingConfiguration
+  where
+  rnf MemberFabricLogPublishingConfiguration' {..} =
+    Prelude.rnf caLogs
+
+instance
+  Data.ToJSON
+    MemberFabricLogPublishingConfiguration
+  where
+  toJSON MemberFabricLogPublishingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("CaLogs" Data..=) Prelude.<$> caLogs]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberFrameworkAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberFrameworkAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberFrameworkAttributes.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberFrameworkAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberFrameworkAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.MemberFabricAttributes
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes relevant to a member for the blockchain framework that the
+-- Managed Blockchain network uses.
+--
+-- /See:/ 'newMemberFrameworkAttributes' smart constructor.
+data MemberFrameworkAttributes = MemberFrameworkAttributes'
+  { -- | Attributes of Hyperledger Fabric relevant to a member on a Managed
+    -- Blockchain network that uses Hyperledger Fabric.
+    fabric :: Prelude.Maybe MemberFabricAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberFrameworkAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fabric', 'memberFrameworkAttributes_fabric' - Attributes of Hyperledger Fabric relevant to a member on a Managed
+-- Blockchain network that uses Hyperledger Fabric.
+newMemberFrameworkAttributes ::
+  MemberFrameworkAttributes
+newMemberFrameworkAttributes =
+  MemberFrameworkAttributes'
+    { fabric =
+        Prelude.Nothing
+    }
+
+-- | Attributes of Hyperledger Fabric relevant to a member on a Managed
+-- Blockchain network that uses Hyperledger Fabric.
+memberFrameworkAttributes_fabric :: Lens.Lens' MemberFrameworkAttributes (Prelude.Maybe MemberFabricAttributes)
+memberFrameworkAttributes_fabric = Lens.lens (\MemberFrameworkAttributes' {fabric} -> fabric) (\s@MemberFrameworkAttributes' {} a -> s {fabric = a} :: MemberFrameworkAttributes)
+
+instance Data.FromJSON MemberFrameworkAttributes where
+  parseJSON =
+    Data.withObject
+      "MemberFrameworkAttributes"
+      ( \x ->
+          MemberFrameworkAttributes'
+            Prelude.<$> (x Data..:? "Fabric")
+      )
+
+instance Prelude.Hashable MemberFrameworkAttributes where
+  hashWithSalt _salt MemberFrameworkAttributes' {..} =
+    _salt `Prelude.hashWithSalt` fabric
+
+instance Prelude.NFData MemberFrameworkAttributes where
+  rnf MemberFrameworkAttributes' {..} =
+    Prelude.rnf fabric
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberFrameworkConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberFrameworkConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberFrameworkConfiguration.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberFrameworkConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberFrameworkConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.MemberFabricConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties relevant to a member for the blockchain
+-- framework that the Managed Blockchain network uses.
+--
+-- /See:/ 'newMemberFrameworkConfiguration' smart constructor.
+data MemberFrameworkConfiguration = MemberFrameworkConfiguration'
+  { -- | Attributes of Hyperledger Fabric for a member on a Managed Blockchain
+    -- network that uses Hyperledger Fabric.
+    fabric :: Prelude.Maybe MemberFabricConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberFrameworkConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fabric', 'memberFrameworkConfiguration_fabric' - Attributes of Hyperledger Fabric for a member on a Managed Blockchain
+-- network that uses Hyperledger Fabric.
+newMemberFrameworkConfiguration ::
+  MemberFrameworkConfiguration
+newMemberFrameworkConfiguration =
+  MemberFrameworkConfiguration'
+    { fabric =
+        Prelude.Nothing
+    }
+
+-- | Attributes of Hyperledger Fabric for a member on a Managed Blockchain
+-- network that uses Hyperledger Fabric.
+memberFrameworkConfiguration_fabric :: Lens.Lens' MemberFrameworkConfiguration (Prelude.Maybe MemberFabricConfiguration)
+memberFrameworkConfiguration_fabric = Lens.lens (\MemberFrameworkConfiguration' {fabric} -> fabric) (\s@MemberFrameworkConfiguration' {} a -> s {fabric = a} :: MemberFrameworkConfiguration)
+
+instance
+  Prelude.Hashable
+    MemberFrameworkConfiguration
+  where
+  hashWithSalt _salt MemberFrameworkConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` fabric
+
+instance Prelude.NFData MemberFrameworkConfiguration where
+  rnf MemberFrameworkConfiguration' {..} =
+    Prelude.rnf fabric
+
+instance Data.ToJSON MemberFrameworkConfiguration where
+  toJSON MemberFrameworkConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Fabric" Data..=) Prelude.<$> fabric]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberLogPublishingConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberLogPublishingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberLogPublishingConfiguration.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberLogPublishingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.MemberFabricLogPublishingConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties for logging events associated with a member of
+-- a Managed Blockchain network.
+--
+-- /See:/ 'newMemberLogPublishingConfiguration' smart constructor.
+data MemberLogPublishingConfiguration = MemberLogPublishingConfiguration'
+  { -- | Configuration properties for logging events associated with a member of
+    -- a Managed Blockchain network using the Hyperledger Fabric framework.
+    fabric :: Prelude.Maybe MemberFabricLogPublishingConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberLogPublishingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fabric', 'memberLogPublishingConfiguration_fabric' - Configuration properties for logging events associated with a member of
+-- a Managed Blockchain network using the Hyperledger Fabric framework.
+newMemberLogPublishingConfiguration ::
+  MemberLogPublishingConfiguration
+newMemberLogPublishingConfiguration =
+  MemberLogPublishingConfiguration'
+    { fabric =
+        Prelude.Nothing
+    }
+
+-- | Configuration properties for logging events associated with a member of
+-- a Managed Blockchain network using the Hyperledger Fabric framework.
+memberLogPublishingConfiguration_fabric :: Lens.Lens' MemberLogPublishingConfiguration (Prelude.Maybe MemberFabricLogPublishingConfiguration)
+memberLogPublishingConfiguration_fabric = Lens.lens (\MemberLogPublishingConfiguration' {fabric} -> fabric) (\s@MemberLogPublishingConfiguration' {} a -> s {fabric = a} :: MemberLogPublishingConfiguration)
+
+instance
+  Data.FromJSON
+    MemberLogPublishingConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "MemberLogPublishingConfiguration"
+      ( \x ->
+          MemberLogPublishingConfiguration'
+            Prelude.<$> (x Data..:? "Fabric")
+      )
+
+instance
+  Prelude.Hashable
+    MemberLogPublishingConfiguration
+  where
+  hashWithSalt
+    _salt
+    MemberLogPublishingConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` fabric
+
+instance
+  Prelude.NFData
+    MemberLogPublishingConfiguration
+  where
+  rnf MemberLogPublishingConfiguration' {..} =
+    Prelude.rnf fabric
+
+instance Data.ToJSON MemberLogPublishingConfiguration where
+  toJSON MemberLogPublishingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Fabric" Data..=) Prelude.<$> fabric]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberStatus.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberStatus
+  ( MemberStatus
+      ( ..,
+        MemberStatus_AVAILABLE,
+        MemberStatus_CREATE_FAILED,
+        MemberStatus_CREATING,
+        MemberStatus_DELETED,
+        MemberStatus_DELETING,
+        MemberStatus_INACCESSIBLE_ENCRYPTION_KEY,
+        MemberStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MemberStatus = MemberStatus'
+  { fromMemberStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MemberStatus_AVAILABLE :: MemberStatus
+pattern MemberStatus_AVAILABLE = MemberStatus' "AVAILABLE"
+
+pattern MemberStatus_CREATE_FAILED :: MemberStatus
+pattern MemberStatus_CREATE_FAILED = MemberStatus' "CREATE_FAILED"
+
+pattern MemberStatus_CREATING :: MemberStatus
+pattern MemberStatus_CREATING = MemberStatus' "CREATING"
+
+pattern MemberStatus_DELETED :: MemberStatus
+pattern MemberStatus_DELETED = MemberStatus' "DELETED"
+
+pattern MemberStatus_DELETING :: MemberStatus
+pattern MemberStatus_DELETING = MemberStatus' "DELETING"
+
+pattern MemberStatus_INACCESSIBLE_ENCRYPTION_KEY :: MemberStatus
+pattern MemberStatus_INACCESSIBLE_ENCRYPTION_KEY = MemberStatus' "INACCESSIBLE_ENCRYPTION_KEY"
+
+pattern MemberStatus_UPDATING :: MemberStatus
+pattern MemberStatus_UPDATING = MemberStatus' "UPDATING"
+
+{-# COMPLETE
+  MemberStatus_AVAILABLE,
+  MemberStatus_CREATE_FAILED,
+  MemberStatus_CREATING,
+  MemberStatus_DELETED,
+  MemberStatus_DELETING,
+  MemberStatus_INACCESSIBLE_ENCRYPTION_KEY,
+  MemberStatus_UPDATING,
+  MemberStatus'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/MemberSummary.hs b/gen/Amazonka/ManagedBlockChain/Types/MemberSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/MemberSummary.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.MemberSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.MemberSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.MemberStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of configuration properties for a member.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newMemberSummary' smart constructor.
+data MemberSummary = MemberSummary'
+  { -- | The Amazon Resource Name (ARN) of the member. For more information about
+    -- ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the member was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | An optional description of the member.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the member.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | An indicator of whether the member is owned by your Amazon Web Services
+    -- account or a different Amazon Web Services account.
+    isOwned :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the member.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The status of the member.
+    --
+    -- -   @CREATING@ - The Amazon Web Services account is in the process of
+    --     creating a member.
+    --
+    -- -   @AVAILABLE@ - The member has been created and can participate in the
+    --     network.
+    --
+    -- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+    --     create a member and creation failed.
+    --
+    -- -   @UPDATING@ - The member is in the process of being updated.
+    --
+    -- -   @DELETING@ - The member and all associated resources are in the
+    --     process of being deleted. Either the Amazon Web Services account
+    --     that owns the member deleted it, or the member is being deleted as
+    --     the result of an @APPROVED@ @PROPOSAL@ to remove the member.
+    --
+    -- -   @DELETED@ - The member can no longer participate on the network and
+    --     all associated resources are deleted. Either the Amazon Web Services
+    --     account that owns the member deleted it, or the member is being
+    --     deleted as the result of an @APPROVED@ @PROPOSAL@ to remove the
+    --     member.
+    --
+    -- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The member is impaired and might not
+    --     function as expected because it cannot access the specified customer
+    --     managed key in Key Management Service (KMS) for encryption at rest.
+    --     Either the KMS key was disabled or deleted, or the grants on the key
+    --     were revoked.
+    --
+    --     The effect of disabling or deleting a key or of revoking a grant
+    --     isn\'t immediate. It might take some time for the member resource to
+    --     discover that the key is inaccessible. When a resource is in this
+    --     state, we recommend deleting and recreating the resource.
+    status :: Prelude.Maybe MemberStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemberSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'memberSummary_arn' - The Amazon Resource Name (ARN) of the member. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'memberSummary_creationDate' - The date and time that the member was created.
+--
+-- 'description', 'memberSummary_description' - An optional description of the member.
+--
+-- 'id', 'memberSummary_id' - The unique identifier of the member.
+--
+-- 'isOwned', 'memberSummary_isOwned' - An indicator of whether the member is owned by your Amazon Web Services
+-- account or a different Amazon Web Services account.
+--
+-- 'name', 'memberSummary_name' - The name of the member.
+--
+-- 'status', 'memberSummary_status' - The status of the member.
+--
+-- -   @CREATING@ - The Amazon Web Services account is in the process of
+--     creating a member.
+--
+-- -   @AVAILABLE@ - The member has been created and can participate in the
+--     network.
+--
+-- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+--     create a member and creation failed.
+--
+-- -   @UPDATING@ - The member is in the process of being updated.
+--
+-- -   @DELETING@ - The member and all associated resources are in the
+--     process of being deleted. Either the Amazon Web Services account
+--     that owns the member deleted it, or the member is being deleted as
+--     the result of an @APPROVED@ @PROPOSAL@ to remove the member.
+--
+-- -   @DELETED@ - The member can no longer participate on the network and
+--     all associated resources are deleted. Either the Amazon Web Services
+--     account that owns the member deleted it, or the member is being
+--     deleted as the result of an @APPROVED@ @PROPOSAL@ to remove the
+--     member.
+--
+-- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The member is impaired and might not
+--     function as expected because it cannot access the specified customer
+--     managed key in Key Management Service (KMS) for encryption at rest.
+--     Either the KMS key was disabled or deleted, or the grants on the key
+--     were revoked.
+--
+--     The effect of disabling or deleting a key or of revoking a grant
+--     isn\'t immediate. It might take some time for the member resource to
+--     discover that the key is inaccessible. When a resource is in this
+--     state, we recommend deleting and recreating the resource.
+newMemberSummary ::
+  MemberSummary
+newMemberSummary =
+  MemberSummary'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      isOwned = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the member. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+memberSummary_arn :: Lens.Lens' MemberSummary (Prelude.Maybe Prelude.Text)
+memberSummary_arn = Lens.lens (\MemberSummary' {arn} -> arn) (\s@MemberSummary' {} a -> s {arn = a} :: MemberSummary)
+
+-- | The date and time that the member was created.
+memberSummary_creationDate :: Lens.Lens' MemberSummary (Prelude.Maybe Prelude.UTCTime)
+memberSummary_creationDate = Lens.lens (\MemberSummary' {creationDate} -> creationDate) (\s@MemberSummary' {} a -> s {creationDate = a} :: MemberSummary) Prelude.. Lens.mapping Data._Time
+
+-- | An optional description of the member.
+memberSummary_description :: Lens.Lens' MemberSummary (Prelude.Maybe Prelude.Text)
+memberSummary_description = Lens.lens (\MemberSummary' {description} -> description) (\s@MemberSummary' {} a -> s {description = a} :: MemberSummary)
+
+-- | The unique identifier of the member.
+memberSummary_id :: Lens.Lens' MemberSummary (Prelude.Maybe Prelude.Text)
+memberSummary_id = Lens.lens (\MemberSummary' {id} -> id) (\s@MemberSummary' {} a -> s {id = a} :: MemberSummary)
+
+-- | An indicator of whether the member is owned by your Amazon Web Services
+-- account or a different Amazon Web Services account.
+memberSummary_isOwned :: Lens.Lens' MemberSummary (Prelude.Maybe Prelude.Bool)
+memberSummary_isOwned = Lens.lens (\MemberSummary' {isOwned} -> isOwned) (\s@MemberSummary' {} a -> s {isOwned = a} :: MemberSummary)
+
+-- | The name of the member.
+memberSummary_name :: Lens.Lens' MemberSummary (Prelude.Maybe Prelude.Text)
+memberSummary_name = Lens.lens (\MemberSummary' {name} -> name) (\s@MemberSummary' {} a -> s {name = a} :: MemberSummary)
+
+-- | The status of the member.
+--
+-- -   @CREATING@ - The Amazon Web Services account is in the process of
+--     creating a member.
+--
+-- -   @AVAILABLE@ - The member has been created and can participate in the
+--     network.
+--
+-- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+--     create a member and creation failed.
+--
+-- -   @UPDATING@ - The member is in the process of being updated.
+--
+-- -   @DELETING@ - The member and all associated resources are in the
+--     process of being deleted. Either the Amazon Web Services account
+--     that owns the member deleted it, or the member is being deleted as
+--     the result of an @APPROVED@ @PROPOSAL@ to remove the member.
+--
+-- -   @DELETED@ - The member can no longer participate on the network and
+--     all associated resources are deleted. Either the Amazon Web Services
+--     account that owns the member deleted it, or the member is being
+--     deleted as the result of an @APPROVED@ @PROPOSAL@ to remove the
+--     member.
+--
+-- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The member is impaired and might not
+--     function as expected because it cannot access the specified customer
+--     managed key in Key Management Service (KMS) for encryption at rest.
+--     Either the KMS key was disabled or deleted, or the grants on the key
+--     were revoked.
+--
+--     The effect of disabling or deleting a key or of revoking a grant
+--     isn\'t immediate. It might take some time for the member resource to
+--     discover that the key is inaccessible. When a resource is in this
+--     state, we recommend deleting and recreating the resource.
+memberSummary_status :: Lens.Lens' MemberSummary (Prelude.Maybe MemberStatus)
+memberSummary_status = Lens.lens (\MemberSummary' {status} -> status) (\s@MemberSummary' {} a -> s {status = a} :: MemberSummary)
+
+instance Data.FromJSON MemberSummary where
+  parseJSON =
+    Data.withObject
+      "MemberSummary"
+      ( \x ->
+          MemberSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "IsOwned")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable MemberSummary where
+  hashWithSalt _salt MemberSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` isOwned
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData MemberSummary where
+  rnf MemberSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf isOwned
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Network.hs b/gen/Amazonka/ManagedBlockChain/Types/Network.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Network.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Network
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Network where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.Framework
+import Amazonka.ManagedBlockChain.Types.NetworkFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkStatus
+import Amazonka.ManagedBlockChain.Types.VotingPolicy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Network configuration properties.
+--
+-- /See:/ 'newNetwork' smart constructor.
+data Network = Network'
+  { -- | The Amazon Resource Name (ARN) of the network. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the network was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | Attributes of the blockchain framework for the network.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The blockchain framework that the network uses.
+    framework :: Prelude.Maybe Framework,
+    -- | Attributes of the blockchain framework that the network uses.
+    frameworkAttributes :: Prelude.Maybe NetworkFrameworkAttributes,
+    -- | The version of the blockchain framework that the network uses.
+    frameworkVersion :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the network.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the network.
+    status :: Prelude.Maybe NetworkStatus,
+    -- | Tags assigned to the network. Each tag consists of a key and optional
+    -- value.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The voting rules for the network to decide if a proposal is accepted.
+    votingPolicy :: Prelude.Maybe VotingPolicy,
+    -- | The VPC endpoint service name of the VPC endpoint service of the
+    -- network. Members use the VPC endpoint service name to create a VPC
+    -- endpoint to access network resources.
+    vpcEndpointServiceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Network' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'network_arn' - The Amazon Resource Name (ARN) of the network. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'network_creationDate' - The date and time that the network was created.
+--
+-- 'description', 'network_description' - Attributes of the blockchain framework for the network.
+--
+-- 'framework', 'network_framework' - The blockchain framework that the network uses.
+--
+-- 'frameworkAttributes', 'network_frameworkAttributes' - Attributes of the blockchain framework that the network uses.
+--
+-- 'frameworkVersion', 'network_frameworkVersion' - The version of the blockchain framework that the network uses.
+--
+-- 'id', 'network_id' - The unique identifier of the network.
+--
+-- 'name', 'network_name' - The name of the network.
+--
+-- 'status', 'network_status' - The current status of the network.
+--
+-- 'tags', 'network_tags' - Tags assigned to the network. Each tag consists of a key and optional
+-- value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- 'votingPolicy', 'network_votingPolicy' - The voting rules for the network to decide if a proposal is accepted.
+--
+-- 'vpcEndpointServiceName', 'network_vpcEndpointServiceName' - The VPC endpoint service name of the VPC endpoint service of the
+-- network. Members use the VPC endpoint service name to create a VPC
+-- endpoint to access network resources.
+newNetwork ::
+  Network
+newNetwork =
+  Network'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      framework = Prelude.Nothing,
+      frameworkAttributes = Prelude.Nothing,
+      frameworkVersion = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      votingPolicy = Prelude.Nothing,
+      vpcEndpointServiceName = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the network. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+network_arn :: Lens.Lens' Network (Prelude.Maybe Prelude.Text)
+network_arn = Lens.lens (\Network' {arn} -> arn) (\s@Network' {} a -> s {arn = a} :: Network)
+
+-- | The date and time that the network was created.
+network_creationDate :: Lens.Lens' Network (Prelude.Maybe Prelude.UTCTime)
+network_creationDate = Lens.lens (\Network' {creationDate} -> creationDate) (\s@Network' {} a -> s {creationDate = a} :: Network) Prelude.. Lens.mapping Data._Time
+
+-- | Attributes of the blockchain framework for the network.
+network_description :: Lens.Lens' Network (Prelude.Maybe Prelude.Text)
+network_description = Lens.lens (\Network' {description} -> description) (\s@Network' {} a -> s {description = a} :: Network)
+
+-- | The blockchain framework that the network uses.
+network_framework :: Lens.Lens' Network (Prelude.Maybe Framework)
+network_framework = Lens.lens (\Network' {framework} -> framework) (\s@Network' {} a -> s {framework = a} :: Network)
+
+-- | Attributes of the blockchain framework that the network uses.
+network_frameworkAttributes :: Lens.Lens' Network (Prelude.Maybe NetworkFrameworkAttributes)
+network_frameworkAttributes = Lens.lens (\Network' {frameworkAttributes} -> frameworkAttributes) (\s@Network' {} a -> s {frameworkAttributes = a} :: Network)
+
+-- | The version of the blockchain framework that the network uses.
+network_frameworkVersion :: Lens.Lens' Network (Prelude.Maybe Prelude.Text)
+network_frameworkVersion = Lens.lens (\Network' {frameworkVersion} -> frameworkVersion) (\s@Network' {} a -> s {frameworkVersion = a} :: Network)
+
+-- | The unique identifier of the network.
+network_id :: Lens.Lens' Network (Prelude.Maybe Prelude.Text)
+network_id = Lens.lens (\Network' {id} -> id) (\s@Network' {} a -> s {id = a} :: Network)
+
+-- | The name of the network.
+network_name :: Lens.Lens' Network (Prelude.Maybe Prelude.Text)
+network_name = Lens.lens (\Network' {name} -> name) (\s@Network' {} a -> s {name = a} :: Network)
+
+-- | The current status of the network.
+network_status :: Lens.Lens' Network (Prelude.Maybe NetworkStatus)
+network_status = Lens.lens (\Network' {status} -> status) (\s@Network' {} a -> s {status = a} :: Network)
+
+-- | Tags assigned to the network. Each tag consists of a key and optional
+-- value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+network_tags :: Lens.Lens' Network (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+network_tags = Lens.lens (\Network' {tags} -> tags) (\s@Network' {} a -> s {tags = a} :: Network) Prelude.. Lens.mapping Lens.coerced
+
+-- | The voting rules for the network to decide if a proposal is accepted.
+network_votingPolicy :: Lens.Lens' Network (Prelude.Maybe VotingPolicy)
+network_votingPolicy = Lens.lens (\Network' {votingPolicy} -> votingPolicy) (\s@Network' {} a -> s {votingPolicy = a} :: Network)
+
+-- | The VPC endpoint service name of the VPC endpoint service of the
+-- network. Members use the VPC endpoint service name to create a VPC
+-- endpoint to access network resources.
+network_vpcEndpointServiceName :: Lens.Lens' Network (Prelude.Maybe Prelude.Text)
+network_vpcEndpointServiceName = Lens.lens (\Network' {vpcEndpointServiceName} -> vpcEndpointServiceName) (\s@Network' {} a -> s {vpcEndpointServiceName = a} :: Network)
+
+instance Data.FromJSON Network where
+  parseJSON =
+    Data.withObject
+      "Network"
+      ( \x ->
+          Network'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Framework")
+            Prelude.<*> (x Data..:? "FrameworkAttributes")
+            Prelude.<*> (x Data..:? "FrameworkVersion")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "VotingPolicy")
+            Prelude.<*> (x Data..:? "VpcEndpointServiceName")
+      )
+
+instance Prelude.Hashable Network where
+  hashWithSalt _salt Network' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` frameworkAttributes
+      `Prelude.hashWithSalt` frameworkVersion
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` votingPolicy
+      `Prelude.hashWithSalt` vpcEndpointServiceName
+
+instance Prelude.NFData Network where
+  rnf Network' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf frameworkAttributes
+      `Prelude.seq` Prelude.rnf frameworkVersion
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf votingPolicy
+      `Prelude.seq` Prelude.rnf vpcEndpointServiceName
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkEthereumAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkEthereumAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkEthereumAttributes.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkEthereumAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkEthereumAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of Ethereum for a network.
+--
+-- /See:/ 'newNetworkEthereumAttributes' smart constructor.
+data NetworkEthereumAttributes = NetworkEthereumAttributes'
+  { -- | The Ethereum @CHAIN_ID@ associated with the Ethereum network. Chain IDs
+    -- are as follows:
+    --
+    -- -   mainnet = @1@
+    --
+    -- -   goerli = @5@
+    --
+    -- -   rinkeby = @4@
+    --
+    -- -   ropsten = @3@
+    chainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkEthereumAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'chainId', 'networkEthereumAttributes_chainId' - The Ethereum @CHAIN_ID@ associated with the Ethereum network. Chain IDs
+-- are as follows:
+--
+-- -   mainnet = @1@
+--
+-- -   goerli = @5@
+--
+-- -   rinkeby = @4@
+--
+-- -   ropsten = @3@
+newNetworkEthereumAttributes ::
+  NetworkEthereumAttributes
+newNetworkEthereumAttributes =
+  NetworkEthereumAttributes'
+    { chainId =
+        Prelude.Nothing
+    }
+
+-- | The Ethereum @CHAIN_ID@ associated with the Ethereum network. Chain IDs
+-- are as follows:
+--
+-- -   mainnet = @1@
+--
+-- -   goerli = @5@
+--
+-- -   rinkeby = @4@
+--
+-- -   ropsten = @3@
+networkEthereumAttributes_chainId :: Lens.Lens' NetworkEthereumAttributes (Prelude.Maybe Prelude.Text)
+networkEthereumAttributes_chainId = Lens.lens (\NetworkEthereumAttributes' {chainId} -> chainId) (\s@NetworkEthereumAttributes' {} a -> s {chainId = a} :: NetworkEthereumAttributes)
+
+instance Data.FromJSON NetworkEthereumAttributes where
+  parseJSON =
+    Data.withObject
+      "NetworkEthereumAttributes"
+      ( \x ->
+          NetworkEthereumAttributes'
+            Prelude.<$> (x Data..:? "ChainId")
+      )
+
+instance Prelude.Hashable NetworkEthereumAttributes where
+  hashWithSalt _salt NetworkEthereumAttributes' {..} =
+    _salt `Prelude.hashWithSalt` chainId
+
+instance Prelude.NFData NetworkEthereumAttributes where
+  rnf NetworkEthereumAttributes' {..} =
+    Prelude.rnf chainId
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkFabricAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkFabricAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkFabricAttributes.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkFabricAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkFabricAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.Edition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of Hyperledger Fabric for a network.
+--
+-- /See:/ 'newNetworkFabricAttributes' smart constructor.
+data NetworkFabricAttributes = NetworkFabricAttributes'
+  { -- | The edition of Amazon Managed Blockchain that Hyperledger Fabric uses.
+    -- For more information, see
+    -- <http://aws.amazon.com/managed-blockchain/pricing/ Amazon Managed Blockchain Pricing>.
+    edition :: Prelude.Maybe Edition,
+    -- | The endpoint of the ordering service for the network.
+    orderingServiceEndpoint :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkFabricAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'edition', 'networkFabricAttributes_edition' - The edition of Amazon Managed Blockchain that Hyperledger Fabric uses.
+-- For more information, see
+-- <http://aws.amazon.com/managed-blockchain/pricing/ Amazon Managed Blockchain Pricing>.
+--
+-- 'orderingServiceEndpoint', 'networkFabricAttributes_orderingServiceEndpoint' - The endpoint of the ordering service for the network.
+newNetworkFabricAttributes ::
+  NetworkFabricAttributes
+newNetworkFabricAttributes =
+  NetworkFabricAttributes'
+    { edition = Prelude.Nothing,
+      orderingServiceEndpoint = Prelude.Nothing
+    }
+
+-- | The edition of Amazon Managed Blockchain that Hyperledger Fabric uses.
+-- For more information, see
+-- <http://aws.amazon.com/managed-blockchain/pricing/ Amazon Managed Blockchain Pricing>.
+networkFabricAttributes_edition :: Lens.Lens' NetworkFabricAttributes (Prelude.Maybe Edition)
+networkFabricAttributes_edition = Lens.lens (\NetworkFabricAttributes' {edition} -> edition) (\s@NetworkFabricAttributes' {} a -> s {edition = a} :: NetworkFabricAttributes)
+
+-- | The endpoint of the ordering service for the network.
+networkFabricAttributes_orderingServiceEndpoint :: Lens.Lens' NetworkFabricAttributes (Prelude.Maybe Prelude.Text)
+networkFabricAttributes_orderingServiceEndpoint = Lens.lens (\NetworkFabricAttributes' {orderingServiceEndpoint} -> orderingServiceEndpoint) (\s@NetworkFabricAttributes' {} a -> s {orderingServiceEndpoint = a} :: NetworkFabricAttributes)
+
+instance Data.FromJSON NetworkFabricAttributes where
+  parseJSON =
+    Data.withObject
+      "NetworkFabricAttributes"
+      ( \x ->
+          NetworkFabricAttributes'
+            Prelude.<$> (x Data..:? "Edition")
+            Prelude.<*> (x Data..:? "OrderingServiceEndpoint")
+      )
+
+instance Prelude.Hashable NetworkFabricAttributes where
+  hashWithSalt _salt NetworkFabricAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` edition
+      `Prelude.hashWithSalt` orderingServiceEndpoint
+
+instance Prelude.NFData NetworkFabricAttributes where
+  rnf NetworkFabricAttributes' {..} =
+    Prelude.rnf edition
+      `Prelude.seq` Prelude.rnf orderingServiceEndpoint
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkFabricConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkFabricConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkFabricConfiguration.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkFabricConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkFabricConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.Edition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Hyperledger Fabric configuration properties for the network.
+--
+-- /See:/ 'newNetworkFabricConfiguration' smart constructor.
+data NetworkFabricConfiguration = NetworkFabricConfiguration'
+  { -- | The edition of Amazon Managed Blockchain that the network uses. For more
+    -- information, see
+    -- <http://aws.amazon.com/managed-blockchain/pricing/ Amazon Managed Blockchain Pricing>.
+    edition :: Edition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkFabricConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'edition', 'networkFabricConfiguration_edition' - The edition of Amazon Managed Blockchain that the network uses. For more
+-- information, see
+-- <http://aws.amazon.com/managed-blockchain/pricing/ Amazon Managed Blockchain Pricing>.
+newNetworkFabricConfiguration ::
+  -- | 'edition'
+  Edition ->
+  NetworkFabricConfiguration
+newNetworkFabricConfiguration pEdition_ =
+  NetworkFabricConfiguration' {edition = pEdition_}
+
+-- | The edition of Amazon Managed Blockchain that the network uses. For more
+-- information, see
+-- <http://aws.amazon.com/managed-blockchain/pricing/ Amazon Managed Blockchain Pricing>.
+networkFabricConfiguration_edition :: Lens.Lens' NetworkFabricConfiguration Edition
+networkFabricConfiguration_edition = Lens.lens (\NetworkFabricConfiguration' {edition} -> edition) (\s@NetworkFabricConfiguration' {} a -> s {edition = a} :: NetworkFabricConfiguration)
+
+instance Prelude.Hashable NetworkFabricConfiguration where
+  hashWithSalt _salt NetworkFabricConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` edition
+
+instance Prelude.NFData NetworkFabricConfiguration where
+  rnf NetworkFabricConfiguration' {..} =
+    Prelude.rnf edition
+
+instance Data.ToJSON NetworkFabricConfiguration where
+  toJSON NetworkFabricConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Edition" Data..= edition)]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkFrameworkAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkFrameworkAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkFrameworkAttributes.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkFrameworkAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkFrameworkAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NetworkEthereumAttributes
+import Amazonka.ManagedBlockChain.Types.NetworkFabricAttributes
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes relevant to the network for the blockchain framework that the
+-- network uses.
+--
+-- /See:/ 'newNetworkFrameworkAttributes' smart constructor.
+data NetworkFrameworkAttributes = NetworkFrameworkAttributes'
+  { -- | Attributes of an Ethereum network for Managed Blockchain resources
+    -- participating in an Ethereum network.
+    ethereum :: Prelude.Maybe NetworkEthereumAttributes,
+    -- | Attributes of Hyperledger Fabric for a Managed Blockchain network that
+    -- uses Hyperledger Fabric.
+    fabric :: Prelude.Maybe NetworkFabricAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkFrameworkAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ethereum', 'networkFrameworkAttributes_ethereum' - Attributes of an Ethereum network for Managed Blockchain resources
+-- participating in an Ethereum network.
+--
+-- 'fabric', 'networkFrameworkAttributes_fabric' - Attributes of Hyperledger Fabric for a Managed Blockchain network that
+-- uses Hyperledger Fabric.
+newNetworkFrameworkAttributes ::
+  NetworkFrameworkAttributes
+newNetworkFrameworkAttributes =
+  NetworkFrameworkAttributes'
+    { ethereum =
+        Prelude.Nothing,
+      fabric = Prelude.Nothing
+    }
+
+-- | Attributes of an Ethereum network for Managed Blockchain resources
+-- participating in an Ethereum network.
+networkFrameworkAttributes_ethereum :: Lens.Lens' NetworkFrameworkAttributes (Prelude.Maybe NetworkEthereumAttributes)
+networkFrameworkAttributes_ethereum = Lens.lens (\NetworkFrameworkAttributes' {ethereum} -> ethereum) (\s@NetworkFrameworkAttributes' {} a -> s {ethereum = a} :: NetworkFrameworkAttributes)
+
+-- | Attributes of Hyperledger Fabric for a Managed Blockchain network that
+-- uses Hyperledger Fabric.
+networkFrameworkAttributes_fabric :: Lens.Lens' NetworkFrameworkAttributes (Prelude.Maybe NetworkFabricAttributes)
+networkFrameworkAttributes_fabric = Lens.lens (\NetworkFrameworkAttributes' {fabric} -> fabric) (\s@NetworkFrameworkAttributes' {} a -> s {fabric = a} :: NetworkFrameworkAttributes)
+
+instance Data.FromJSON NetworkFrameworkAttributes where
+  parseJSON =
+    Data.withObject
+      "NetworkFrameworkAttributes"
+      ( \x ->
+          NetworkFrameworkAttributes'
+            Prelude.<$> (x Data..:? "Ethereum")
+            Prelude.<*> (x Data..:? "Fabric")
+      )
+
+instance Prelude.Hashable NetworkFrameworkAttributes where
+  hashWithSalt _salt NetworkFrameworkAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` ethereum
+      `Prelude.hashWithSalt` fabric
+
+instance Prelude.NFData NetworkFrameworkAttributes where
+  rnf NetworkFrameworkAttributes' {..} =
+    Prelude.rnf ethereum
+      `Prelude.seq` Prelude.rnf fabric
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkFrameworkConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkFrameworkConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkFrameworkConfiguration.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkFrameworkConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkFrameworkConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NetworkFabricConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties relevant to the network for the blockchain
+-- framework that the network uses.
+--
+-- /See:/ 'newNetworkFrameworkConfiguration' smart constructor.
+data NetworkFrameworkConfiguration = NetworkFrameworkConfiguration'
+  { -- | Hyperledger Fabric configuration properties for a Managed Blockchain
+    -- network that uses Hyperledger Fabric.
+    fabric :: Prelude.Maybe NetworkFabricConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkFrameworkConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fabric', 'networkFrameworkConfiguration_fabric' - Hyperledger Fabric configuration properties for a Managed Blockchain
+-- network that uses Hyperledger Fabric.
+newNetworkFrameworkConfiguration ::
+  NetworkFrameworkConfiguration
+newNetworkFrameworkConfiguration =
+  NetworkFrameworkConfiguration'
+    { fabric =
+        Prelude.Nothing
+    }
+
+-- | Hyperledger Fabric configuration properties for a Managed Blockchain
+-- network that uses Hyperledger Fabric.
+networkFrameworkConfiguration_fabric :: Lens.Lens' NetworkFrameworkConfiguration (Prelude.Maybe NetworkFabricConfiguration)
+networkFrameworkConfiguration_fabric = Lens.lens (\NetworkFrameworkConfiguration' {fabric} -> fabric) (\s@NetworkFrameworkConfiguration' {} a -> s {fabric = a} :: NetworkFrameworkConfiguration)
+
+instance
+  Prelude.Hashable
+    NetworkFrameworkConfiguration
+  where
+  hashWithSalt _salt NetworkFrameworkConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` fabric
+
+instance Prelude.NFData NetworkFrameworkConfiguration where
+  rnf NetworkFrameworkConfiguration' {..} =
+    Prelude.rnf fabric
+
+instance Data.ToJSON NetworkFrameworkConfiguration where
+  toJSON NetworkFrameworkConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Fabric" Data..=) Prelude.<$> fabric]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkStatus.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkStatus
+  ( NetworkStatus
+      ( ..,
+        NetworkStatus_AVAILABLE,
+        NetworkStatus_CREATE_FAILED,
+        NetworkStatus_CREATING,
+        NetworkStatus_DELETED,
+        NetworkStatus_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkStatus = NetworkStatus'
+  { fromNetworkStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkStatus_AVAILABLE :: NetworkStatus
+pattern NetworkStatus_AVAILABLE = NetworkStatus' "AVAILABLE"
+
+pattern NetworkStatus_CREATE_FAILED :: NetworkStatus
+pattern NetworkStatus_CREATE_FAILED = NetworkStatus' "CREATE_FAILED"
+
+pattern NetworkStatus_CREATING :: NetworkStatus
+pattern NetworkStatus_CREATING = NetworkStatus' "CREATING"
+
+pattern NetworkStatus_DELETED :: NetworkStatus
+pattern NetworkStatus_DELETED = NetworkStatus' "DELETED"
+
+pattern NetworkStatus_DELETING :: NetworkStatus
+pattern NetworkStatus_DELETING = NetworkStatus' "DELETING"
+
+{-# COMPLETE
+  NetworkStatus_AVAILABLE,
+  NetworkStatus_CREATE_FAILED,
+  NetworkStatus_CREATING,
+  NetworkStatus_DELETED,
+  NetworkStatus_DELETING,
+  NetworkStatus'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NetworkSummary.hs b/gen/Amazonka/ManagedBlockChain/Types/NetworkSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NetworkSummary.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NetworkSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NetworkSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.Framework
+import Amazonka.ManagedBlockChain.Types.NetworkStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of network configuration properties.
+--
+-- /See:/ 'newNetworkSummary' smart constructor.
+data NetworkSummary = NetworkSummary'
+  { -- | The Amazon Resource Name (ARN) of the network. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the network was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | An optional description of the network.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The blockchain framework that the network uses.
+    framework :: Prelude.Maybe Framework,
+    -- | The version of the blockchain framework that the network uses.
+    frameworkVersion :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the network.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the network.
+    status :: Prelude.Maybe NetworkStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'networkSummary_arn' - The Amazon Resource Name (ARN) of the network. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'networkSummary_creationDate' - The date and time that the network was created.
+--
+-- 'description', 'networkSummary_description' - An optional description of the network.
+--
+-- 'framework', 'networkSummary_framework' - The blockchain framework that the network uses.
+--
+-- 'frameworkVersion', 'networkSummary_frameworkVersion' - The version of the blockchain framework that the network uses.
+--
+-- 'id', 'networkSummary_id' - The unique identifier of the network.
+--
+-- 'name', 'networkSummary_name' - The name of the network.
+--
+-- 'status', 'networkSummary_status' - The current status of the network.
+newNetworkSummary ::
+  NetworkSummary
+newNetworkSummary =
+  NetworkSummary'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      framework = Prelude.Nothing,
+      frameworkVersion = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the network. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+networkSummary_arn :: Lens.Lens' NetworkSummary (Prelude.Maybe Prelude.Text)
+networkSummary_arn = Lens.lens (\NetworkSummary' {arn} -> arn) (\s@NetworkSummary' {} a -> s {arn = a} :: NetworkSummary)
+
+-- | The date and time that the network was created.
+networkSummary_creationDate :: Lens.Lens' NetworkSummary (Prelude.Maybe Prelude.UTCTime)
+networkSummary_creationDate = Lens.lens (\NetworkSummary' {creationDate} -> creationDate) (\s@NetworkSummary' {} a -> s {creationDate = a} :: NetworkSummary) Prelude.. Lens.mapping Data._Time
+
+-- | An optional description of the network.
+networkSummary_description :: Lens.Lens' NetworkSummary (Prelude.Maybe Prelude.Text)
+networkSummary_description = Lens.lens (\NetworkSummary' {description} -> description) (\s@NetworkSummary' {} a -> s {description = a} :: NetworkSummary)
+
+-- | The blockchain framework that the network uses.
+networkSummary_framework :: Lens.Lens' NetworkSummary (Prelude.Maybe Framework)
+networkSummary_framework = Lens.lens (\NetworkSummary' {framework} -> framework) (\s@NetworkSummary' {} a -> s {framework = a} :: NetworkSummary)
+
+-- | The version of the blockchain framework that the network uses.
+networkSummary_frameworkVersion :: Lens.Lens' NetworkSummary (Prelude.Maybe Prelude.Text)
+networkSummary_frameworkVersion = Lens.lens (\NetworkSummary' {frameworkVersion} -> frameworkVersion) (\s@NetworkSummary' {} a -> s {frameworkVersion = a} :: NetworkSummary)
+
+-- | The unique identifier of the network.
+networkSummary_id :: Lens.Lens' NetworkSummary (Prelude.Maybe Prelude.Text)
+networkSummary_id = Lens.lens (\NetworkSummary' {id} -> id) (\s@NetworkSummary' {} a -> s {id = a} :: NetworkSummary)
+
+-- | The name of the network.
+networkSummary_name :: Lens.Lens' NetworkSummary (Prelude.Maybe Prelude.Text)
+networkSummary_name = Lens.lens (\NetworkSummary' {name} -> name) (\s@NetworkSummary' {} a -> s {name = a} :: NetworkSummary)
+
+-- | The current status of the network.
+networkSummary_status :: Lens.Lens' NetworkSummary (Prelude.Maybe NetworkStatus)
+networkSummary_status = Lens.lens (\NetworkSummary' {status} -> status) (\s@NetworkSummary' {} a -> s {status = a} :: NetworkSummary)
+
+instance Data.FromJSON NetworkSummary where
+  parseJSON =
+    Data.withObject
+      "NetworkSummary"
+      ( \x ->
+          NetworkSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Framework")
+            Prelude.<*> (x Data..:? "FrameworkVersion")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable NetworkSummary where
+  hashWithSalt _salt NetworkSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` framework
+      `Prelude.hashWithSalt` frameworkVersion
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData NetworkSummary where
+  rnf NetworkSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf framework
+      `Prelude.seq` Prelude.rnf frameworkVersion
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Node.hs b/gen/Amazonka/ManagedBlockChain/Types/Node.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Node.hs
@@ -0,0 +1,400 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Node
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Node where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NodeFrameworkAttributes
+import Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.NodeStatus
+import Amazonka.ManagedBlockChain.Types.StateDBType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties of a node.
+--
+-- /See:/ 'newNode' smart constructor.
+data Node = Node'
+  { -- | The Amazon Resource Name (ARN) of the node. For more information about
+    -- ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone in which the node exists. Required for Ethereum
+    -- nodes.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the node was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | Attributes of the blockchain framework being used.
+    frameworkAttributes :: Prelude.Maybe NodeFrameworkAttributes,
+    -- | The unique identifier of the node.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The instance type of the node.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the customer managed key in Key
+    -- Management Service (KMS) that the node uses for encryption at rest. If
+    -- the value of this parameter is @\"AWS Owned KMS Key\"@, the node uses an
+    -- Amazon Web Services owned KMS key for encryption. The node inherits this
+    -- parameter from the member that it belongs to.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    --
+    -- Applies only to Hyperledger Fabric.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | Configuration properties for logging events associated with a peer node
+    -- on a Hyperledger Fabric network on Managed Blockchain.
+    logPublishingConfiguration :: Prelude.Maybe NodeLogPublishingConfiguration,
+    -- | The unique identifier of the member to which the node belongs.
+    --
+    -- Applies only to Hyperledger Fabric.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network that the node is on.
+    networkId :: Prelude.Maybe Prelude.Text,
+    -- | The state database that the node uses. Values are @LevelDB@ or
+    -- @CouchDB@.
+    --
+    -- Applies only to Hyperledger Fabric.
+    stateDB :: Prelude.Maybe StateDBType,
+    -- | The status of the node.
+    --
+    -- -   @CREATING@ - The Amazon Web Services account is in the process of
+    --     creating a node.
+    --
+    -- -   @AVAILABLE@ - The node has been created and can participate in the
+    --     network.
+    --
+    -- -   @UNHEALTHY@ - The node is impaired and might not function as
+    --     expected. Amazon Managed Blockchain automatically finds nodes in
+    --     this state and tries to recover them. If a node is recoverable, it
+    --     returns to @AVAILABLE@. Otherwise, it moves to @FAILED@ status.
+    --
+    -- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+    --     create a node and creation failed.
+    --
+    -- -   @UPDATING@ - The node is in the process of being updated.
+    --
+    -- -   @DELETING@ - The node is in the process of being deleted.
+    --
+    -- -   @DELETED@ - The node can no longer participate on the network.
+    --
+    -- -   @FAILED@ - The node is no longer functional, cannot be recovered,
+    --     and must be deleted.
+    --
+    -- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The node is impaired and might not
+    --     function as expected because it cannot access the specified customer
+    --     managed key in KMS for encryption at rest. Either the KMS key was
+    --     disabled or deleted, or the grants on the key were revoked.
+    --
+    --     The effect of disabling or deleting a key or of revoking a grant
+    --     isn\'t immediate. It might take some time for the node resource to
+    --     discover that the key is inaccessible. When a resource is in this
+    --     state, we recommend deleting and recreating the resource.
+    status :: Prelude.Maybe NodeStatus,
+    -- | Tags assigned to the node. Each tag consists of a key and optional
+    -- value.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Node' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'node_arn' - The Amazon Resource Name (ARN) of the node. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'availabilityZone', 'node_availabilityZone' - The Availability Zone in which the node exists. Required for Ethereum
+-- nodes.
+--
+-- 'creationDate', 'node_creationDate' - The date and time that the node was created.
+--
+-- 'frameworkAttributes', 'node_frameworkAttributes' - Attributes of the blockchain framework being used.
+--
+-- 'id', 'node_id' - The unique identifier of the node.
+--
+-- 'instanceType', 'node_instanceType' - The instance type of the node.
+--
+-- 'kmsKeyArn', 'node_kmsKeyArn' - The Amazon Resource Name (ARN) of the customer managed key in Key
+-- Management Service (KMS) that the node uses for encryption at rest. If
+-- the value of this parameter is @\"AWS Owned KMS Key\"@, the node uses an
+-- Amazon Web Services owned KMS key for encryption. The node inherits this
+-- parameter from the member that it belongs to.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- 'logPublishingConfiguration', 'node_logPublishingConfiguration' - Configuration properties for logging events associated with a peer node
+-- on a Hyperledger Fabric network on Managed Blockchain.
+--
+-- 'memberId', 'node_memberId' - The unique identifier of the member to which the node belongs.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- 'networkId', 'node_networkId' - The unique identifier of the network that the node is on.
+--
+-- 'stateDB', 'node_stateDB' - The state database that the node uses. Values are @LevelDB@ or
+-- @CouchDB@.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- 'status', 'node_status' - The status of the node.
+--
+-- -   @CREATING@ - The Amazon Web Services account is in the process of
+--     creating a node.
+--
+-- -   @AVAILABLE@ - The node has been created and can participate in the
+--     network.
+--
+-- -   @UNHEALTHY@ - The node is impaired and might not function as
+--     expected. Amazon Managed Blockchain automatically finds nodes in
+--     this state and tries to recover them. If a node is recoverable, it
+--     returns to @AVAILABLE@. Otherwise, it moves to @FAILED@ status.
+--
+-- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+--     create a node and creation failed.
+--
+-- -   @UPDATING@ - The node is in the process of being updated.
+--
+-- -   @DELETING@ - The node is in the process of being deleted.
+--
+-- -   @DELETED@ - The node can no longer participate on the network.
+--
+-- -   @FAILED@ - The node is no longer functional, cannot be recovered,
+--     and must be deleted.
+--
+-- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The node is impaired and might not
+--     function as expected because it cannot access the specified customer
+--     managed key in KMS for encryption at rest. Either the KMS key was
+--     disabled or deleted, or the grants on the key were revoked.
+--
+--     The effect of disabling or deleting a key or of revoking a grant
+--     isn\'t immediate. It might take some time for the node resource to
+--     discover that the key is inaccessible. When a resource is in this
+--     state, we recommend deleting and recreating the resource.
+--
+-- 'tags', 'node_tags' - Tags assigned to the node. Each tag consists of a key and optional
+-- value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+newNode ::
+  Node
+newNode =
+  Node'
+    { arn = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      frameworkAttributes = Prelude.Nothing,
+      id = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing,
+      logPublishingConfiguration = Prelude.Nothing,
+      memberId = Prelude.Nothing,
+      networkId = Prelude.Nothing,
+      stateDB = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the node. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+node_arn :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_arn = Lens.lens (\Node' {arn} -> arn) (\s@Node' {} a -> s {arn = a} :: Node)
+
+-- | The Availability Zone in which the node exists. Required for Ethereum
+-- nodes.
+node_availabilityZone :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_availabilityZone = Lens.lens (\Node' {availabilityZone} -> availabilityZone) (\s@Node' {} a -> s {availabilityZone = a} :: Node)
+
+-- | The date and time that the node was created.
+node_creationDate :: Lens.Lens' Node (Prelude.Maybe Prelude.UTCTime)
+node_creationDate = Lens.lens (\Node' {creationDate} -> creationDate) (\s@Node' {} a -> s {creationDate = a} :: Node) Prelude.. Lens.mapping Data._Time
+
+-- | Attributes of the blockchain framework being used.
+node_frameworkAttributes :: Lens.Lens' Node (Prelude.Maybe NodeFrameworkAttributes)
+node_frameworkAttributes = Lens.lens (\Node' {frameworkAttributes} -> frameworkAttributes) (\s@Node' {} a -> s {frameworkAttributes = a} :: Node)
+
+-- | The unique identifier of the node.
+node_id :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_id = Lens.lens (\Node' {id} -> id) (\s@Node' {} a -> s {id = a} :: Node)
+
+-- | The instance type of the node.
+node_instanceType :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_instanceType = Lens.lens (\Node' {instanceType} -> instanceType) (\s@Node' {} a -> s {instanceType = a} :: Node)
+
+-- | The Amazon Resource Name (ARN) of the customer managed key in Key
+-- Management Service (KMS) that the node uses for encryption at rest. If
+-- the value of this parameter is @\"AWS Owned KMS Key\"@, the node uses an
+-- Amazon Web Services owned KMS key for encryption. The node inherits this
+-- parameter from the member that it belongs to.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/managed-blockchain-encryption-at-rest.html Encryption at Rest>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- Applies only to Hyperledger Fabric.
+node_kmsKeyArn :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_kmsKeyArn = Lens.lens (\Node' {kmsKeyArn} -> kmsKeyArn) (\s@Node' {} a -> s {kmsKeyArn = a} :: Node)
+
+-- | Configuration properties for logging events associated with a peer node
+-- on a Hyperledger Fabric network on Managed Blockchain.
+node_logPublishingConfiguration :: Lens.Lens' Node (Prelude.Maybe NodeLogPublishingConfiguration)
+node_logPublishingConfiguration = Lens.lens (\Node' {logPublishingConfiguration} -> logPublishingConfiguration) (\s@Node' {} a -> s {logPublishingConfiguration = a} :: Node)
+
+-- | The unique identifier of the member to which the node belongs.
+--
+-- Applies only to Hyperledger Fabric.
+node_memberId :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_memberId = Lens.lens (\Node' {memberId} -> memberId) (\s@Node' {} a -> s {memberId = a} :: Node)
+
+-- | The unique identifier of the network that the node is on.
+node_networkId :: Lens.Lens' Node (Prelude.Maybe Prelude.Text)
+node_networkId = Lens.lens (\Node' {networkId} -> networkId) (\s@Node' {} a -> s {networkId = a} :: Node)
+
+-- | The state database that the node uses. Values are @LevelDB@ or
+-- @CouchDB@.
+--
+-- Applies only to Hyperledger Fabric.
+node_stateDB :: Lens.Lens' Node (Prelude.Maybe StateDBType)
+node_stateDB = Lens.lens (\Node' {stateDB} -> stateDB) (\s@Node' {} a -> s {stateDB = a} :: Node)
+
+-- | The status of the node.
+--
+-- -   @CREATING@ - The Amazon Web Services account is in the process of
+--     creating a node.
+--
+-- -   @AVAILABLE@ - The node has been created and can participate in the
+--     network.
+--
+-- -   @UNHEALTHY@ - The node is impaired and might not function as
+--     expected. Amazon Managed Blockchain automatically finds nodes in
+--     this state and tries to recover them. If a node is recoverable, it
+--     returns to @AVAILABLE@. Otherwise, it moves to @FAILED@ status.
+--
+-- -   @CREATE_FAILED@ - The Amazon Web Services account attempted to
+--     create a node and creation failed.
+--
+-- -   @UPDATING@ - The node is in the process of being updated.
+--
+-- -   @DELETING@ - The node is in the process of being deleted.
+--
+-- -   @DELETED@ - The node can no longer participate on the network.
+--
+-- -   @FAILED@ - The node is no longer functional, cannot be recovered,
+--     and must be deleted.
+--
+-- -   @INACCESSIBLE_ENCRYPTION_KEY@ - The node is impaired and might not
+--     function as expected because it cannot access the specified customer
+--     managed key in KMS for encryption at rest. Either the KMS key was
+--     disabled or deleted, or the grants on the key were revoked.
+--
+--     The effect of disabling or deleting a key or of revoking a grant
+--     isn\'t immediate. It might take some time for the node resource to
+--     discover that the key is inaccessible. When a resource is in this
+--     state, we recommend deleting and recreating the resource.
+node_status :: Lens.Lens' Node (Prelude.Maybe NodeStatus)
+node_status = Lens.lens (\Node' {status} -> status) (\s@Node' {} a -> s {status = a} :: Node)
+
+-- | Tags assigned to the node. Each tag consists of a key and optional
+-- value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+node_tags :: Lens.Lens' Node (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+node_tags = Lens.lens (\Node' {tags} -> tags) (\s@Node' {} a -> s {tags = a} :: Node) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Node where
+  parseJSON =
+    Data.withObject
+      "Node"
+      ( \x ->
+          Node'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "AvailabilityZone")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "FrameworkAttributes")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InstanceType")
+            Prelude.<*> (x Data..:? "KmsKeyArn")
+            Prelude.<*> (x Data..:? "LogPublishingConfiguration")
+            Prelude.<*> (x Data..:? "MemberId")
+            Prelude.<*> (x Data..:? "NetworkId")
+            Prelude.<*> (x Data..:? "StateDB")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Node where
+  hashWithSalt _salt Node' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` frameworkAttributes
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` logPublishingConfiguration
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` stateDB
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Node where
+  rnf Node' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf frameworkAttributes
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf logPublishingConfiguration
+      `Prelude.seq` Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf stateDB
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeConfiguration.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration
+import Amazonka.ManagedBlockChain.Types.StateDBType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties of a node.
+--
+-- /See:/ 'newNodeConfiguration' smart constructor.
+data NodeConfiguration = NodeConfiguration'
+  { -- | The Availability Zone in which the node exists. Required for Ethereum
+    -- nodes.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Configuration properties for logging events associated with a peer node
+    -- on a Hyperledger Fabric network on Managed Blockchain.
+    logPublishingConfiguration :: Prelude.Maybe NodeLogPublishingConfiguration,
+    -- | The state database that the node uses. Values are @LevelDB@ or
+    -- @CouchDB@. When using an Amazon Managed Blockchain network with
+    -- Hyperledger Fabric version 1.4 or later, the default is @CouchDB@.
+    --
+    -- Applies only to Hyperledger Fabric.
+    stateDB :: Prelude.Maybe StateDBType,
+    -- | The Amazon Managed Blockchain instance type for the node.
+    instanceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'nodeConfiguration_availabilityZone' - The Availability Zone in which the node exists. Required for Ethereum
+-- nodes.
+--
+-- 'logPublishingConfiguration', 'nodeConfiguration_logPublishingConfiguration' - Configuration properties for logging events associated with a peer node
+-- on a Hyperledger Fabric network on Managed Blockchain.
+--
+-- 'stateDB', 'nodeConfiguration_stateDB' - The state database that the node uses. Values are @LevelDB@ or
+-- @CouchDB@. When using an Amazon Managed Blockchain network with
+-- Hyperledger Fabric version 1.4 or later, the default is @CouchDB@.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- 'instanceType', 'nodeConfiguration_instanceType' - The Amazon Managed Blockchain instance type for the node.
+newNodeConfiguration ::
+  -- | 'instanceType'
+  Prelude.Text ->
+  NodeConfiguration
+newNodeConfiguration pInstanceType_ =
+  NodeConfiguration'
+    { availabilityZone =
+        Prelude.Nothing,
+      logPublishingConfiguration = Prelude.Nothing,
+      stateDB = Prelude.Nothing,
+      instanceType = pInstanceType_
+    }
+
+-- | The Availability Zone in which the node exists. Required for Ethereum
+-- nodes.
+nodeConfiguration_availabilityZone :: Lens.Lens' NodeConfiguration (Prelude.Maybe Prelude.Text)
+nodeConfiguration_availabilityZone = Lens.lens (\NodeConfiguration' {availabilityZone} -> availabilityZone) (\s@NodeConfiguration' {} a -> s {availabilityZone = a} :: NodeConfiguration)
+
+-- | Configuration properties for logging events associated with a peer node
+-- on a Hyperledger Fabric network on Managed Blockchain.
+nodeConfiguration_logPublishingConfiguration :: Lens.Lens' NodeConfiguration (Prelude.Maybe NodeLogPublishingConfiguration)
+nodeConfiguration_logPublishingConfiguration = Lens.lens (\NodeConfiguration' {logPublishingConfiguration} -> logPublishingConfiguration) (\s@NodeConfiguration' {} a -> s {logPublishingConfiguration = a} :: NodeConfiguration)
+
+-- | The state database that the node uses. Values are @LevelDB@ or
+-- @CouchDB@. When using an Amazon Managed Blockchain network with
+-- Hyperledger Fabric version 1.4 or later, the default is @CouchDB@.
+--
+-- Applies only to Hyperledger Fabric.
+nodeConfiguration_stateDB :: Lens.Lens' NodeConfiguration (Prelude.Maybe StateDBType)
+nodeConfiguration_stateDB = Lens.lens (\NodeConfiguration' {stateDB} -> stateDB) (\s@NodeConfiguration' {} a -> s {stateDB = a} :: NodeConfiguration)
+
+-- | The Amazon Managed Blockchain instance type for the node.
+nodeConfiguration_instanceType :: Lens.Lens' NodeConfiguration Prelude.Text
+nodeConfiguration_instanceType = Lens.lens (\NodeConfiguration' {instanceType} -> instanceType) (\s@NodeConfiguration' {} a -> s {instanceType = a} :: NodeConfiguration)
+
+instance Prelude.Hashable NodeConfiguration where
+  hashWithSalt _salt NodeConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` logPublishingConfiguration
+      `Prelude.hashWithSalt` stateDB
+      `Prelude.hashWithSalt` instanceType
+
+instance Prelude.NFData NodeConfiguration where
+  rnf NodeConfiguration' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf logPublishingConfiguration
+      `Prelude.seq` Prelude.rnf stateDB
+      `Prelude.seq` Prelude.rnf instanceType
+
+instance Data.ToJSON NodeConfiguration where
+  toJSON NodeConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AvailabilityZone" Data..=)
+              Prelude.<$> availabilityZone,
+            ("LogPublishingConfiguration" Data..=)
+              Prelude.<$> logPublishingConfiguration,
+            ("StateDB" Data..=) Prelude.<$> stateDB,
+            Prelude.Just ("InstanceType" Data..= instanceType)
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeEthereumAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeEthereumAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeEthereumAttributes.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeEthereumAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeEthereumAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of an Ethereum node.
+--
+-- /See:/ 'newNodeEthereumAttributes' smart constructor.
+data NodeEthereumAttributes = NodeEthereumAttributes'
+  { -- | The endpoint on which the Ethereum node listens to run Ethereum API
+    -- methods over HTTP connections from a client. Use this endpoint in client
+    -- code for smart contracts when using an HTTP connection. Connections to
+    -- this endpoint are authenticated using
+    -- <https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+    httpEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint on which the Ethereum node listens to run Ethereum JSON-RPC
+    -- methods over WebSocket connections from a client. Use this endpoint in
+    -- client code for smart contracts when using a WebSocket connection.
+    -- Connections to this endpoint are authenticated using
+    -- <https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+    webSocketEndpoint :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeEthereumAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpEndpoint', 'nodeEthereumAttributes_httpEndpoint' - The endpoint on which the Ethereum node listens to run Ethereum API
+-- methods over HTTP connections from a client. Use this endpoint in client
+-- code for smart contracts when using an HTTP connection. Connections to
+-- this endpoint are authenticated using
+-- <https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+--
+-- 'webSocketEndpoint', 'nodeEthereumAttributes_webSocketEndpoint' - The endpoint on which the Ethereum node listens to run Ethereum JSON-RPC
+-- methods over WebSocket connections from a client. Use this endpoint in
+-- client code for smart contracts when using a WebSocket connection.
+-- Connections to this endpoint are authenticated using
+-- <https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+newNodeEthereumAttributes ::
+  NodeEthereumAttributes
+newNodeEthereumAttributes =
+  NodeEthereumAttributes'
+    { httpEndpoint =
+        Prelude.Nothing,
+      webSocketEndpoint = Prelude.Nothing
+    }
+
+-- | The endpoint on which the Ethereum node listens to run Ethereum API
+-- methods over HTTP connections from a client. Use this endpoint in client
+-- code for smart contracts when using an HTTP connection. Connections to
+-- this endpoint are authenticated using
+-- <https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+nodeEthereumAttributes_httpEndpoint :: Lens.Lens' NodeEthereumAttributes (Prelude.Maybe Prelude.Text)
+nodeEthereumAttributes_httpEndpoint = Lens.lens (\NodeEthereumAttributes' {httpEndpoint} -> httpEndpoint) (\s@NodeEthereumAttributes' {} a -> s {httpEndpoint = a} :: NodeEthereumAttributes)
+
+-- | The endpoint on which the Ethereum node listens to run Ethereum JSON-RPC
+-- methods over WebSocket connections from a client. Use this endpoint in
+-- client code for smart contracts when using a WebSocket connection.
+-- Connections to this endpoint are authenticated using
+-- <https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html Signature Version 4>.
+nodeEthereumAttributes_webSocketEndpoint :: Lens.Lens' NodeEthereumAttributes (Prelude.Maybe Prelude.Text)
+nodeEthereumAttributes_webSocketEndpoint = Lens.lens (\NodeEthereumAttributes' {webSocketEndpoint} -> webSocketEndpoint) (\s@NodeEthereumAttributes' {} a -> s {webSocketEndpoint = a} :: NodeEthereumAttributes)
+
+instance Data.FromJSON NodeEthereumAttributes where
+  parseJSON =
+    Data.withObject
+      "NodeEthereumAttributes"
+      ( \x ->
+          NodeEthereumAttributes'
+            Prelude.<$> (x Data..:? "HttpEndpoint")
+            Prelude.<*> (x Data..:? "WebSocketEndpoint")
+      )
+
+instance Prelude.Hashable NodeEthereumAttributes where
+  hashWithSalt _salt NodeEthereumAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` httpEndpoint
+      `Prelude.hashWithSalt` webSocketEndpoint
+
+instance Prelude.NFData NodeEthereumAttributes where
+  rnf NodeEthereumAttributes' {..} =
+    Prelude.rnf httpEndpoint
+      `Prelude.seq` Prelude.rnf webSocketEndpoint
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeFabricAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeFabricAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeFabricAttributes.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeFabricAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeFabricAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes of Hyperledger Fabric for a peer node on a Hyperledger Fabric
+-- network on Managed Blockchain.
+--
+-- /See:/ 'newNodeFabricAttributes' smart constructor.
+data NodeFabricAttributes = NodeFabricAttributes'
+  { -- | The endpoint that identifies the peer node for all services except peer
+    -- channel-based event services.
+    peerEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint that identifies the peer node for peer channel-based event
+    -- services.
+    peerEventEndpoint :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeFabricAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'peerEndpoint', 'nodeFabricAttributes_peerEndpoint' - The endpoint that identifies the peer node for all services except peer
+-- channel-based event services.
+--
+-- 'peerEventEndpoint', 'nodeFabricAttributes_peerEventEndpoint' - The endpoint that identifies the peer node for peer channel-based event
+-- services.
+newNodeFabricAttributes ::
+  NodeFabricAttributes
+newNodeFabricAttributes =
+  NodeFabricAttributes'
+    { peerEndpoint =
+        Prelude.Nothing,
+      peerEventEndpoint = Prelude.Nothing
+    }
+
+-- | The endpoint that identifies the peer node for all services except peer
+-- channel-based event services.
+nodeFabricAttributes_peerEndpoint :: Lens.Lens' NodeFabricAttributes (Prelude.Maybe Prelude.Text)
+nodeFabricAttributes_peerEndpoint = Lens.lens (\NodeFabricAttributes' {peerEndpoint} -> peerEndpoint) (\s@NodeFabricAttributes' {} a -> s {peerEndpoint = a} :: NodeFabricAttributes)
+
+-- | The endpoint that identifies the peer node for peer channel-based event
+-- services.
+nodeFabricAttributes_peerEventEndpoint :: Lens.Lens' NodeFabricAttributes (Prelude.Maybe Prelude.Text)
+nodeFabricAttributes_peerEventEndpoint = Lens.lens (\NodeFabricAttributes' {peerEventEndpoint} -> peerEventEndpoint) (\s@NodeFabricAttributes' {} a -> s {peerEventEndpoint = a} :: NodeFabricAttributes)
+
+instance Data.FromJSON NodeFabricAttributes where
+  parseJSON =
+    Data.withObject
+      "NodeFabricAttributes"
+      ( \x ->
+          NodeFabricAttributes'
+            Prelude.<$> (x Data..:? "PeerEndpoint")
+            Prelude.<*> (x Data..:? "PeerEventEndpoint")
+      )
+
+instance Prelude.Hashable NodeFabricAttributes where
+  hashWithSalt _salt NodeFabricAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` peerEndpoint
+      `Prelude.hashWithSalt` peerEventEndpoint
+
+instance Prelude.NFData NodeFabricAttributes where
+  rnf NodeFabricAttributes' {..} =
+    Prelude.rnf peerEndpoint
+      `Prelude.seq` Prelude.rnf peerEventEndpoint
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeFabricLogPublishingConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeFabricLogPublishingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeFabricLogPublishingConfiguration.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeFabricLogPublishingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeFabricLogPublishingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.LogConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties for logging events associated with a peer node
+-- owned by a member in a Managed Blockchain network.
+--
+-- /See:/ 'newNodeFabricLogPublishingConfiguration' smart constructor.
+data NodeFabricLogPublishingConfiguration = NodeFabricLogPublishingConfiguration'
+  { -- | Configuration properties for logging events associated with chaincode
+    -- execution on a peer node. Chaincode logs contain the results of
+    -- instantiating, invoking, and querying the chaincode. A peer can run
+    -- multiple instances of chaincode. When enabled, a log stream is created
+    -- for all chaincodes, with an individual log stream for each chaincode.
+    chaincodeLogs :: Prelude.Maybe LogConfigurations,
+    -- | Configuration properties for a peer node log. Peer node logs contain
+    -- messages generated when your client submits transaction proposals to
+    -- peer nodes, requests to join channels, enrolls an admin peer, and lists
+    -- the chaincode instances on a peer node.
+    peerLogs :: Prelude.Maybe LogConfigurations
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeFabricLogPublishingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'chaincodeLogs', 'nodeFabricLogPublishingConfiguration_chaincodeLogs' - Configuration properties for logging events associated with chaincode
+-- execution on a peer node. Chaincode logs contain the results of
+-- instantiating, invoking, and querying the chaincode. A peer can run
+-- multiple instances of chaincode. When enabled, a log stream is created
+-- for all chaincodes, with an individual log stream for each chaincode.
+--
+-- 'peerLogs', 'nodeFabricLogPublishingConfiguration_peerLogs' - Configuration properties for a peer node log. Peer node logs contain
+-- messages generated when your client submits transaction proposals to
+-- peer nodes, requests to join channels, enrolls an admin peer, and lists
+-- the chaincode instances on a peer node.
+newNodeFabricLogPublishingConfiguration ::
+  NodeFabricLogPublishingConfiguration
+newNodeFabricLogPublishingConfiguration =
+  NodeFabricLogPublishingConfiguration'
+    { chaincodeLogs =
+        Prelude.Nothing,
+      peerLogs = Prelude.Nothing
+    }
+
+-- | Configuration properties for logging events associated with chaincode
+-- execution on a peer node. Chaincode logs contain the results of
+-- instantiating, invoking, and querying the chaincode. A peer can run
+-- multiple instances of chaincode. When enabled, a log stream is created
+-- for all chaincodes, with an individual log stream for each chaincode.
+nodeFabricLogPublishingConfiguration_chaincodeLogs :: Lens.Lens' NodeFabricLogPublishingConfiguration (Prelude.Maybe LogConfigurations)
+nodeFabricLogPublishingConfiguration_chaincodeLogs = Lens.lens (\NodeFabricLogPublishingConfiguration' {chaincodeLogs} -> chaincodeLogs) (\s@NodeFabricLogPublishingConfiguration' {} a -> s {chaincodeLogs = a} :: NodeFabricLogPublishingConfiguration)
+
+-- | Configuration properties for a peer node log. Peer node logs contain
+-- messages generated when your client submits transaction proposals to
+-- peer nodes, requests to join channels, enrolls an admin peer, and lists
+-- the chaincode instances on a peer node.
+nodeFabricLogPublishingConfiguration_peerLogs :: Lens.Lens' NodeFabricLogPublishingConfiguration (Prelude.Maybe LogConfigurations)
+nodeFabricLogPublishingConfiguration_peerLogs = Lens.lens (\NodeFabricLogPublishingConfiguration' {peerLogs} -> peerLogs) (\s@NodeFabricLogPublishingConfiguration' {} a -> s {peerLogs = a} :: NodeFabricLogPublishingConfiguration)
+
+instance
+  Data.FromJSON
+    NodeFabricLogPublishingConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "NodeFabricLogPublishingConfiguration"
+      ( \x ->
+          NodeFabricLogPublishingConfiguration'
+            Prelude.<$> (x Data..:? "ChaincodeLogs")
+            Prelude.<*> (x Data..:? "PeerLogs")
+      )
+
+instance
+  Prelude.Hashable
+    NodeFabricLogPublishingConfiguration
+  where
+  hashWithSalt
+    _salt
+    NodeFabricLogPublishingConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` chaincodeLogs
+        `Prelude.hashWithSalt` peerLogs
+
+instance
+  Prelude.NFData
+    NodeFabricLogPublishingConfiguration
+  where
+  rnf NodeFabricLogPublishingConfiguration' {..} =
+    Prelude.rnf chaincodeLogs
+      `Prelude.seq` Prelude.rnf peerLogs
+
+instance
+  Data.ToJSON
+    NodeFabricLogPublishingConfiguration
+  where
+  toJSON NodeFabricLogPublishingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ChaincodeLogs" Data..=) Prelude.<$> chaincodeLogs,
+            ("PeerLogs" Data..=) Prelude.<$> peerLogs
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeFrameworkAttributes.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeFrameworkAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeFrameworkAttributes.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeFrameworkAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeFrameworkAttributes where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NodeEthereumAttributes
+import Amazonka.ManagedBlockChain.Types.NodeFabricAttributes
+import qualified Amazonka.Prelude as Prelude
+
+-- | Attributes relevant to a node on a Managed Blockchain network for the
+-- blockchain framework that the network uses.
+--
+-- /See:/ 'newNodeFrameworkAttributes' smart constructor.
+data NodeFrameworkAttributes = NodeFrameworkAttributes'
+  { -- | Attributes of Ethereum for a node on a Managed Blockchain network that
+    -- uses Ethereum.
+    ethereum :: Prelude.Maybe NodeEthereumAttributes,
+    -- | Attributes of Hyperledger Fabric for a peer node on a Managed Blockchain
+    -- network that uses Hyperledger Fabric.
+    fabric :: Prelude.Maybe NodeFabricAttributes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeFrameworkAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ethereum', 'nodeFrameworkAttributes_ethereum' - Attributes of Ethereum for a node on a Managed Blockchain network that
+-- uses Ethereum.
+--
+-- 'fabric', 'nodeFrameworkAttributes_fabric' - Attributes of Hyperledger Fabric for a peer node on a Managed Blockchain
+-- network that uses Hyperledger Fabric.
+newNodeFrameworkAttributes ::
+  NodeFrameworkAttributes
+newNodeFrameworkAttributes =
+  NodeFrameworkAttributes'
+    { ethereum =
+        Prelude.Nothing,
+      fabric = Prelude.Nothing
+    }
+
+-- | Attributes of Ethereum for a node on a Managed Blockchain network that
+-- uses Ethereum.
+nodeFrameworkAttributes_ethereum :: Lens.Lens' NodeFrameworkAttributes (Prelude.Maybe NodeEthereumAttributes)
+nodeFrameworkAttributes_ethereum = Lens.lens (\NodeFrameworkAttributes' {ethereum} -> ethereum) (\s@NodeFrameworkAttributes' {} a -> s {ethereum = a} :: NodeFrameworkAttributes)
+
+-- | Attributes of Hyperledger Fabric for a peer node on a Managed Blockchain
+-- network that uses Hyperledger Fabric.
+nodeFrameworkAttributes_fabric :: Lens.Lens' NodeFrameworkAttributes (Prelude.Maybe NodeFabricAttributes)
+nodeFrameworkAttributes_fabric = Lens.lens (\NodeFrameworkAttributes' {fabric} -> fabric) (\s@NodeFrameworkAttributes' {} a -> s {fabric = a} :: NodeFrameworkAttributes)
+
+instance Data.FromJSON NodeFrameworkAttributes where
+  parseJSON =
+    Data.withObject
+      "NodeFrameworkAttributes"
+      ( \x ->
+          NodeFrameworkAttributes'
+            Prelude.<$> (x Data..:? "Ethereum")
+            Prelude.<*> (x Data..:? "Fabric")
+      )
+
+instance Prelude.Hashable NodeFrameworkAttributes where
+  hashWithSalt _salt NodeFrameworkAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` ethereum
+      `Prelude.hashWithSalt` fabric
+
+instance Prelude.NFData NodeFrameworkAttributes where
+  rnf NodeFrameworkAttributes' {..} =
+    Prelude.rnf ethereum
+      `Prelude.seq` Prelude.rnf fabric
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeLogPublishingConfiguration.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeLogPublishingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeLogPublishingConfiguration.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeLogPublishingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NodeFabricLogPublishingConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration properties for logging events associated with a peer node
+-- on a Hyperledger Fabric network on Managed Blockchain.
+--
+-- /See:/ 'newNodeLogPublishingConfiguration' smart constructor.
+data NodeLogPublishingConfiguration = NodeLogPublishingConfiguration'
+  { -- | Configuration properties for logging events associated with a node that
+    -- is owned by a member of a Managed Blockchain network using the
+    -- Hyperledger Fabric framework.
+    fabric :: Prelude.Maybe NodeFabricLogPublishingConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeLogPublishingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fabric', 'nodeLogPublishingConfiguration_fabric' - Configuration properties for logging events associated with a node that
+-- is owned by a member of a Managed Blockchain network using the
+-- Hyperledger Fabric framework.
+newNodeLogPublishingConfiguration ::
+  NodeLogPublishingConfiguration
+newNodeLogPublishingConfiguration =
+  NodeLogPublishingConfiguration'
+    { fabric =
+        Prelude.Nothing
+    }
+
+-- | Configuration properties for logging events associated with a node that
+-- is owned by a member of a Managed Blockchain network using the
+-- Hyperledger Fabric framework.
+nodeLogPublishingConfiguration_fabric :: Lens.Lens' NodeLogPublishingConfiguration (Prelude.Maybe NodeFabricLogPublishingConfiguration)
+nodeLogPublishingConfiguration_fabric = Lens.lens (\NodeLogPublishingConfiguration' {fabric} -> fabric) (\s@NodeLogPublishingConfiguration' {} a -> s {fabric = a} :: NodeLogPublishingConfiguration)
+
+instance Data.FromJSON NodeLogPublishingConfiguration where
+  parseJSON =
+    Data.withObject
+      "NodeLogPublishingConfiguration"
+      ( \x ->
+          NodeLogPublishingConfiguration'
+            Prelude.<$> (x Data..:? "Fabric")
+      )
+
+instance
+  Prelude.Hashable
+    NodeLogPublishingConfiguration
+  where
+  hashWithSalt
+    _salt
+    NodeLogPublishingConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` fabric
+
+instance
+  Prelude.NFData
+    NodeLogPublishingConfiguration
+  where
+  rnf NodeLogPublishingConfiguration' {..} =
+    Prelude.rnf fabric
+
+instance Data.ToJSON NodeLogPublishingConfiguration where
+  toJSON NodeLogPublishingConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Fabric" Data..=) Prelude.<$> fabric]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeStatus.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeStatus.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeStatus
+  ( NodeStatus
+      ( ..,
+        NodeStatus_AVAILABLE,
+        NodeStatus_CREATE_FAILED,
+        NodeStatus_CREATING,
+        NodeStatus_DELETED,
+        NodeStatus_DELETING,
+        NodeStatus_FAILED,
+        NodeStatus_INACCESSIBLE_ENCRYPTION_KEY,
+        NodeStatus_UNHEALTHY,
+        NodeStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NodeStatus = NodeStatus'
+  { fromNodeStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NodeStatus_AVAILABLE :: NodeStatus
+pattern NodeStatus_AVAILABLE = NodeStatus' "AVAILABLE"
+
+pattern NodeStatus_CREATE_FAILED :: NodeStatus
+pattern NodeStatus_CREATE_FAILED = NodeStatus' "CREATE_FAILED"
+
+pattern NodeStatus_CREATING :: NodeStatus
+pattern NodeStatus_CREATING = NodeStatus' "CREATING"
+
+pattern NodeStatus_DELETED :: NodeStatus
+pattern NodeStatus_DELETED = NodeStatus' "DELETED"
+
+pattern NodeStatus_DELETING :: NodeStatus
+pattern NodeStatus_DELETING = NodeStatus' "DELETING"
+
+pattern NodeStatus_FAILED :: NodeStatus
+pattern NodeStatus_FAILED = NodeStatus' "FAILED"
+
+pattern NodeStatus_INACCESSIBLE_ENCRYPTION_KEY :: NodeStatus
+pattern NodeStatus_INACCESSIBLE_ENCRYPTION_KEY = NodeStatus' "INACCESSIBLE_ENCRYPTION_KEY"
+
+pattern NodeStatus_UNHEALTHY :: NodeStatus
+pattern NodeStatus_UNHEALTHY = NodeStatus' "UNHEALTHY"
+
+pattern NodeStatus_UPDATING :: NodeStatus
+pattern NodeStatus_UPDATING = NodeStatus' "UPDATING"
+
+{-# COMPLETE
+  NodeStatus_AVAILABLE,
+  NodeStatus_CREATE_FAILED,
+  NodeStatus_CREATING,
+  NodeStatus_DELETED,
+  NodeStatus_DELETING,
+  NodeStatus_FAILED,
+  NodeStatus_INACCESSIBLE_ENCRYPTION_KEY,
+  NodeStatus_UNHEALTHY,
+  NodeStatus_UPDATING,
+  NodeStatus'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/NodeSummary.hs b/gen/Amazonka/ManagedBlockChain/Types/NodeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/NodeSummary.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.NodeSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.NodeSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.NodeStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of configuration properties for a node.
+--
+-- /See:/ 'newNodeSummary' smart constructor.
+data NodeSummary = NodeSummary'
+  { -- | The Amazon Resource Name (ARN) of the node. For more information about
+    -- ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone in which the node exists.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the node was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier of the node.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The EC2 instance type for the node.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The status of the node.
+    status :: Prelude.Maybe NodeStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'nodeSummary_arn' - The Amazon Resource Name (ARN) of the node. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'availabilityZone', 'nodeSummary_availabilityZone' - The Availability Zone in which the node exists.
+--
+-- 'creationDate', 'nodeSummary_creationDate' - The date and time that the node was created.
+--
+-- 'id', 'nodeSummary_id' - The unique identifier of the node.
+--
+-- 'instanceType', 'nodeSummary_instanceType' - The EC2 instance type for the node.
+--
+-- 'status', 'nodeSummary_status' - The status of the node.
+newNodeSummary ::
+  NodeSummary
+newNodeSummary =
+  NodeSummary'
+    { arn = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      id = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the node. For more information about
+-- ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+nodeSummary_arn :: Lens.Lens' NodeSummary (Prelude.Maybe Prelude.Text)
+nodeSummary_arn = Lens.lens (\NodeSummary' {arn} -> arn) (\s@NodeSummary' {} a -> s {arn = a} :: NodeSummary)
+
+-- | The Availability Zone in which the node exists.
+nodeSummary_availabilityZone :: Lens.Lens' NodeSummary (Prelude.Maybe Prelude.Text)
+nodeSummary_availabilityZone = Lens.lens (\NodeSummary' {availabilityZone} -> availabilityZone) (\s@NodeSummary' {} a -> s {availabilityZone = a} :: NodeSummary)
+
+-- | The date and time that the node was created.
+nodeSummary_creationDate :: Lens.Lens' NodeSummary (Prelude.Maybe Prelude.UTCTime)
+nodeSummary_creationDate = Lens.lens (\NodeSummary' {creationDate} -> creationDate) (\s@NodeSummary' {} a -> s {creationDate = a} :: NodeSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the node.
+nodeSummary_id :: Lens.Lens' NodeSummary (Prelude.Maybe Prelude.Text)
+nodeSummary_id = Lens.lens (\NodeSummary' {id} -> id) (\s@NodeSummary' {} a -> s {id = a} :: NodeSummary)
+
+-- | The EC2 instance type for the node.
+nodeSummary_instanceType :: Lens.Lens' NodeSummary (Prelude.Maybe Prelude.Text)
+nodeSummary_instanceType = Lens.lens (\NodeSummary' {instanceType} -> instanceType) (\s@NodeSummary' {} a -> s {instanceType = a} :: NodeSummary)
+
+-- | The status of the node.
+nodeSummary_status :: Lens.Lens' NodeSummary (Prelude.Maybe NodeStatus)
+nodeSummary_status = Lens.lens (\NodeSummary' {status} -> status) (\s@NodeSummary' {} a -> s {status = a} :: NodeSummary)
+
+instance Data.FromJSON NodeSummary where
+  parseJSON =
+    Data.withObject
+      "NodeSummary"
+      ( \x ->
+          NodeSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "AvailabilityZone")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "InstanceType")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable NodeSummary where
+  hashWithSalt _salt NodeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData NodeSummary where
+  rnf NodeSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ManagedBlockChain/Types/Proposal.hs b/gen/Amazonka/ManagedBlockChain/Types/Proposal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/Proposal.hs
@@ -0,0 +1,337 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.Proposal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.Proposal where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.ProposalActions
+import Amazonka.ManagedBlockChain.Types.ProposalStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of a proposal on a Managed Blockchain network.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newProposal' smart constructor.
+data Proposal = Proposal'
+  { -- | The actions to perform on the network if the proposal is @APPROVED@.
+    actions :: Prelude.Maybe ProposalActions,
+    -- | The Amazon Resource Name (ARN) of the proposal. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the proposal was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the proposal.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the proposal expires. This is the @CreationDate@
+    -- plus the @ProposalDurationInHours@ that is specified in the
+    -- @ProposalThresholdPolicy@. After this date and time, if members haven\'t
+    -- cast enough votes to determine the outcome according to the voting
+    -- policy, the proposal is @EXPIRED@ and @Actions@ aren\'t carried out.
+    expirationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier of the network for which the proposal is made.
+    networkId :: Prelude.Maybe Prelude.Text,
+    -- | The current total of @NO@ votes cast on the proposal by members.
+    noVoteCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of votes remaining to be cast on the proposal by members. In
+    -- other words, the number of members minus the sum of @YES@ votes and @NO@
+    -- votes.
+    outstandingVoteCount :: Prelude.Maybe Prelude.Int,
+    -- | The unique identifier of the proposal.
+    proposalId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the member that created the proposal.
+    proposedByMemberId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the member that created the proposal.
+    proposedByMemberName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the proposal. Values are as follows:
+    --
+    -- -   @IN_PROGRESS@ - The proposal is active and open for member voting.
+    --
+    -- -   @APPROVED@ - The proposal was approved with sufficient @YES@ votes
+    --     among members according to the @VotingPolicy@ specified for the
+    --     @Network@. The specified proposal actions are carried out.
+    --
+    -- -   @REJECTED@ - The proposal was rejected with insufficient @YES@ votes
+    --     among members according to the @VotingPolicy@ specified for the
+    --     @Network@. The specified @ProposalActions@ aren\'t carried out.
+    --
+    -- -   @EXPIRED@ - Members didn\'t cast the number of votes required to
+    --     determine the proposal outcome before the proposal expired. The
+    --     specified @ProposalActions@ aren\'t carried out.
+    --
+    -- -   @ACTION_FAILED@ - One or more of the specified @ProposalActions@ in
+    --     a proposal that was approved couldn\'t be completed because of an
+    --     error. The @ACTION_FAILED@ status occurs even if only one
+    --     ProposalAction fails and other actions are successful.
+    status :: Prelude.Maybe ProposalStatus,
+    -- | Tags assigned to the proposal. Each tag consists of a key and optional
+    -- value.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+    -- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+    -- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The current total of @YES@ votes cast on the proposal by members.
+    yesVoteCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Proposal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actions', 'proposal_actions' - The actions to perform on the network if the proposal is @APPROVED@.
+--
+-- 'arn', 'proposal_arn' - The Amazon Resource Name (ARN) of the proposal. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'proposal_creationDate' - The date and time that the proposal was created.
+--
+-- 'description', 'proposal_description' - The description of the proposal.
+--
+-- 'expirationDate', 'proposal_expirationDate' - The date and time that the proposal expires. This is the @CreationDate@
+-- plus the @ProposalDurationInHours@ that is specified in the
+-- @ProposalThresholdPolicy@. After this date and time, if members haven\'t
+-- cast enough votes to determine the outcome according to the voting
+-- policy, the proposal is @EXPIRED@ and @Actions@ aren\'t carried out.
+--
+-- 'networkId', 'proposal_networkId' - The unique identifier of the network for which the proposal is made.
+--
+-- 'noVoteCount', 'proposal_noVoteCount' - The current total of @NO@ votes cast on the proposal by members.
+--
+-- 'outstandingVoteCount', 'proposal_outstandingVoteCount' - The number of votes remaining to be cast on the proposal by members. In
+-- other words, the number of members minus the sum of @YES@ votes and @NO@
+-- votes.
+--
+-- 'proposalId', 'proposal_proposalId' - The unique identifier of the proposal.
+--
+-- 'proposedByMemberId', 'proposal_proposedByMemberId' - The unique identifier of the member that created the proposal.
+--
+-- 'proposedByMemberName', 'proposal_proposedByMemberName' - The name of the member that created the proposal.
+--
+-- 'status', 'proposal_status' - The status of the proposal. Values are as follows:
+--
+-- -   @IN_PROGRESS@ - The proposal is active and open for member voting.
+--
+-- -   @APPROVED@ - The proposal was approved with sufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified proposal actions are carried out.
+--
+-- -   @REJECTED@ - The proposal was rejected with insufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @EXPIRED@ - Members didn\'t cast the number of votes required to
+--     determine the proposal outcome before the proposal expired. The
+--     specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @ACTION_FAILED@ - One or more of the specified @ProposalActions@ in
+--     a proposal that was approved couldn\'t be completed because of an
+--     error. The @ACTION_FAILED@ status occurs even if only one
+--     ProposalAction fails and other actions are successful.
+--
+-- 'tags', 'proposal_tags' - Tags assigned to the proposal. Each tag consists of a key and optional
+-- value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+--
+-- 'yesVoteCount', 'proposal_yesVoteCount' - The current total of @YES@ votes cast on the proposal by members.
+newProposal ::
+  Proposal
+newProposal =
+  Proposal'
+    { actions = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      expirationDate = Prelude.Nothing,
+      networkId = Prelude.Nothing,
+      noVoteCount = Prelude.Nothing,
+      outstandingVoteCount = Prelude.Nothing,
+      proposalId = Prelude.Nothing,
+      proposedByMemberId = Prelude.Nothing,
+      proposedByMemberName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      yesVoteCount = Prelude.Nothing
+    }
+
+-- | The actions to perform on the network if the proposal is @APPROVED@.
+proposal_actions :: Lens.Lens' Proposal (Prelude.Maybe ProposalActions)
+proposal_actions = Lens.lens (\Proposal' {actions} -> actions) (\s@Proposal' {} a -> s {actions = a} :: Proposal)
+
+-- | The Amazon Resource Name (ARN) of the proposal. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+proposal_arn :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Text)
+proposal_arn = Lens.lens (\Proposal' {arn} -> arn) (\s@Proposal' {} a -> s {arn = a} :: Proposal)
+
+-- | The date and time that the proposal was created.
+proposal_creationDate :: Lens.Lens' Proposal (Prelude.Maybe Prelude.UTCTime)
+proposal_creationDate = Lens.lens (\Proposal' {creationDate} -> creationDate) (\s@Proposal' {} a -> s {creationDate = a} :: Proposal) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the proposal.
+proposal_description :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Text)
+proposal_description = Lens.lens (\Proposal' {description} -> description) (\s@Proposal' {} a -> s {description = a} :: Proposal)
+
+-- | The date and time that the proposal expires. This is the @CreationDate@
+-- plus the @ProposalDurationInHours@ that is specified in the
+-- @ProposalThresholdPolicy@. After this date and time, if members haven\'t
+-- cast enough votes to determine the outcome according to the voting
+-- policy, the proposal is @EXPIRED@ and @Actions@ aren\'t carried out.
+proposal_expirationDate :: Lens.Lens' Proposal (Prelude.Maybe Prelude.UTCTime)
+proposal_expirationDate = Lens.lens (\Proposal' {expirationDate} -> expirationDate) (\s@Proposal' {} a -> s {expirationDate = a} :: Proposal) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the network for which the proposal is made.
+proposal_networkId :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Text)
+proposal_networkId = Lens.lens (\Proposal' {networkId} -> networkId) (\s@Proposal' {} a -> s {networkId = a} :: Proposal)
+
+-- | The current total of @NO@ votes cast on the proposal by members.
+proposal_noVoteCount :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Int)
+proposal_noVoteCount = Lens.lens (\Proposal' {noVoteCount} -> noVoteCount) (\s@Proposal' {} a -> s {noVoteCount = a} :: Proposal)
+
+-- | The number of votes remaining to be cast on the proposal by members. In
+-- other words, the number of members minus the sum of @YES@ votes and @NO@
+-- votes.
+proposal_outstandingVoteCount :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Int)
+proposal_outstandingVoteCount = Lens.lens (\Proposal' {outstandingVoteCount} -> outstandingVoteCount) (\s@Proposal' {} a -> s {outstandingVoteCount = a} :: Proposal)
+
+-- | The unique identifier of the proposal.
+proposal_proposalId :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Text)
+proposal_proposalId = Lens.lens (\Proposal' {proposalId} -> proposalId) (\s@Proposal' {} a -> s {proposalId = a} :: Proposal)
+
+-- | The unique identifier of the member that created the proposal.
+proposal_proposedByMemberId :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Text)
+proposal_proposedByMemberId = Lens.lens (\Proposal' {proposedByMemberId} -> proposedByMemberId) (\s@Proposal' {} a -> s {proposedByMemberId = a} :: Proposal)
+
+-- | The name of the member that created the proposal.
+proposal_proposedByMemberName :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Text)
+proposal_proposedByMemberName = Lens.lens (\Proposal' {proposedByMemberName} -> proposedByMemberName) (\s@Proposal' {} a -> s {proposedByMemberName = a} :: Proposal)
+
+-- | The status of the proposal. Values are as follows:
+--
+-- -   @IN_PROGRESS@ - The proposal is active and open for member voting.
+--
+-- -   @APPROVED@ - The proposal was approved with sufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified proposal actions are carried out.
+--
+-- -   @REJECTED@ - The proposal was rejected with insufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @EXPIRED@ - Members didn\'t cast the number of votes required to
+--     determine the proposal outcome before the proposal expired. The
+--     specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @ACTION_FAILED@ - One or more of the specified @ProposalActions@ in
+--     a proposal that was approved couldn\'t be completed because of an
+--     error. The @ACTION_FAILED@ status occurs even if only one
+--     ProposalAction fails and other actions are successful.
+proposal_status :: Lens.Lens' Proposal (Prelude.Maybe ProposalStatus)
+proposal_status = Lens.lens (\Proposal' {status} -> status) (\s@Proposal' {} a -> s {status = a} :: Proposal)
+
+-- | Tags assigned to the proposal. Each tag consists of a key and optional
+-- value.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+proposal_tags :: Lens.Lens' Proposal (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+proposal_tags = Lens.lens (\Proposal' {tags} -> tags) (\s@Proposal' {} a -> s {tags = a} :: Proposal) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current total of @YES@ votes cast on the proposal by members.
+proposal_yesVoteCount :: Lens.Lens' Proposal (Prelude.Maybe Prelude.Int)
+proposal_yesVoteCount = Lens.lens (\Proposal' {yesVoteCount} -> yesVoteCount) (\s@Proposal' {} a -> s {yesVoteCount = a} :: Proposal)
+
+instance Data.FromJSON Proposal where
+  parseJSON =
+    Data.withObject
+      "Proposal"
+      ( \x ->
+          Proposal'
+            Prelude.<$> (x Data..:? "Actions")
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ExpirationDate")
+            Prelude.<*> (x Data..:? "NetworkId")
+            Prelude.<*> (x Data..:? "NoVoteCount")
+            Prelude.<*> (x Data..:? "OutstandingVoteCount")
+            Prelude.<*> (x Data..:? "ProposalId")
+            Prelude.<*> (x Data..:? "ProposedByMemberId")
+            Prelude.<*> (x Data..:? "ProposedByMemberName")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "YesVoteCount")
+      )
+
+instance Prelude.Hashable Proposal where
+  hashWithSalt _salt Proposal' {..} =
+    _salt
+      `Prelude.hashWithSalt` actions
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` expirationDate
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` noVoteCount
+      `Prelude.hashWithSalt` outstandingVoteCount
+      `Prelude.hashWithSalt` proposalId
+      `Prelude.hashWithSalt` proposedByMemberId
+      `Prelude.hashWithSalt` proposedByMemberName
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` yesVoteCount
+
+instance Prelude.NFData Proposal where
+  rnf Proposal' {..} =
+    Prelude.rnf actions
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf expirationDate
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf noVoteCount
+      `Prelude.seq` Prelude.rnf outstandingVoteCount
+      `Prelude.seq` Prelude.rnf proposalId
+      `Prelude.seq` Prelude.rnf proposedByMemberId
+      `Prelude.seq` Prelude.rnf proposedByMemberName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf yesVoteCount
diff --git a/gen/Amazonka/ManagedBlockChain/Types/ProposalActions.hs b/gen/Amazonka/ManagedBlockChain/Types/ProposalActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/ProposalActions.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.ProposalActions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.ProposalActions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.InviteAction
+import Amazonka.ManagedBlockChain.Types.RemoveAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | The actions to carry out if a proposal is @APPROVED@.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newProposalActions' smart constructor.
+data ProposalActions = ProposalActions'
+  { -- | The actions to perform for an @APPROVED@ proposal to invite an Amazon
+    -- Web Services account to create a member and join the network.
+    invitations :: Prelude.Maybe [InviteAction],
+    -- | The actions to perform for an @APPROVED@ proposal to remove a member
+    -- from the network, which deletes the member and all associated member
+    -- resources from the network.
+    removals :: Prelude.Maybe [RemoveAction]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProposalActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'invitations', 'proposalActions_invitations' - The actions to perform for an @APPROVED@ proposal to invite an Amazon
+-- Web Services account to create a member and join the network.
+--
+-- 'removals', 'proposalActions_removals' - The actions to perform for an @APPROVED@ proposal to remove a member
+-- from the network, which deletes the member and all associated member
+-- resources from the network.
+newProposalActions ::
+  ProposalActions
+newProposalActions =
+  ProposalActions'
+    { invitations = Prelude.Nothing,
+      removals = Prelude.Nothing
+    }
+
+-- | The actions to perform for an @APPROVED@ proposal to invite an Amazon
+-- Web Services account to create a member and join the network.
+proposalActions_invitations :: Lens.Lens' ProposalActions (Prelude.Maybe [InviteAction])
+proposalActions_invitations = Lens.lens (\ProposalActions' {invitations} -> invitations) (\s@ProposalActions' {} a -> s {invitations = a} :: ProposalActions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The actions to perform for an @APPROVED@ proposal to remove a member
+-- from the network, which deletes the member and all associated member
+-- resources from the network.
+proposalActions_removals :: Lens.Lens' ProposalActions (Prelude.Maybe [RemoveAction])
+proposalActions_removals = Lens.lens (\ProposalActions' {removals} -> removals) (\s@ProposalActions' {} a -> s {removals = a} :: ProposalActions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ProposalActions where
+  parseJSON =
+    Data.withObject
+      "ProposalActions"
+      ( \x ->
+          ProposalActions'
+            Prelude.<$> (x Data..:? "Invitations" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Removals" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ProposalActions where
+  hashWithSalt _salt ProposalActions' {..} =
+    _salt
+      `Prelude.hashWithSalt` invitations
+      `Prelude.hashWithSalt` removals
+
+instance Prelude.NFData ProposalActions where
+  rnf ProposalActions' {..} =
+    Prelude.rnf invitations
+      `Prelude.seq` Prelude.rnf removals
+
+instance Data.ToJSON ProposalActions where
+  toJSON ProposalActions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Invitations" Data..=) Prelude.<$> invitations,
+            ("Removals" Data..=) Prelude.<$> removals
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/ProposalStatus.hs b/gen/Amazonka/ManagedBlockChain/Types/ProposalStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/ProposalStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.ProposalStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.ProposalStatus
+  ( ProposalStatus
+      ( ..,
+        ProposalStatus_ACTION_FAILED,
+        ProposalStatus_APPROVED,
+        ProposalStatus_EXPIRED,
+        ProposalStatus_IN_PROGRESS,
+        ProposalStatus_REJECTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ProposalStatus = ProposalStatus'
+  { fromProposalStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ProposalStatus_ACTION_FAILED :: ProposalStatus
+pattern ProposalStatus_ACTION_FAILED = ProposalStatus' "ACTION_FAILED"
+
+pattern ProposalStatus_APPROVED :: ProposalStatus
+pattern ProposalStatus_APPROVED = ProposalStatus' "APPROVED"
+
+pattern ProposalStatus_EXPIRED :: ProposalStatus
+pattern ProposalStatus_EXPIRED = ProposalStatus' "EXPIRED"
+
+pattern ProposalStatus_IN_PROGRESS :: ProposalStatus
+pattern ProposalStatus_IN_PROGRESS = ProposalStatus' "IN_PROGRESS"
+
+pattern ProposalStatus_REJECTED :: ProposalStatus
+pattern ProposalStatus_REJECTED = ProposalStatus' "REJECTED"
+
+{-# COMPLETE
+  ProposalStatus_ACTION_FAILED,
+  ProposalStatus_APPROVED,
+  ProposalStatus_EXPIRED,
+  ProposalStatus_IN_PROGRESS,
+  ProposalStatus_REJECTED,
+  ProposalStatus'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/ProposalSummary.hs b/gen/Amazonka/ManagedBlockChain/Types/ProposalSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/ProposalSummary.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.ProposalSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.ProposalSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.ProposalStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of a proposal.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newProposalSummary' smart constructor.
+data ProposalSummary = ProposalSummary'
+  { -- | The Amazon Resource Name (ARN) of the proposal. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the proposal was created.
+    creationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the proposal.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the proposal expires. This is the @CreationDate@
+    -- plus the @ProposalDurationInHours@ that is specified in the
+    -- @ProposalThresholdPolicy@. After this date and time, if members haven\'t
+    -- cast enough votes to determine the outcome according to the voting
+    -- policy, the proposal is @EXPIRED@ and @Actions@ aren\'t carried out.
+    expirationDate :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier of the proposal.
+    proposalId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the member that created the proposal.
+    proposedByMemberId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the member that created the proposal.
+    proposedByMemberName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the proposal. Values are as follows:
+    --
+    -- -   @IN_PROGRESS@ - The proposal is active and open for member voting.
+    --
+    -- -   @APPROVED@ - The proposal was approved with sufficient @YES@ votes
+    --     among members according to the @VotingPolicy@ specified for the
+    --     @Network@. The specified proposal actions are carried out.
+    --
+    -- -   @REJECTED@ - The proposal was rejected with insufficient @YES@ votes
+    --     among members according to the @VotingPolicy@ specified for the
+    --     @Network@. The specified @ProposalActions@ aren\'t carried out.
+    --
+    -- -   @EXPIRED@ - Members didn\'t cast the number of votes required to
+    --     determine the proposal outcome before the proposal expired. The
+    --     specified @ProposalActions@ aren\'t carried out.
+    --
+    -- -   @ACTION_FAILED@ - One or more of the specified @ProposalActions@ in
+    --     a proposal that was approved couldn\'t be completed because of an
+    --     error.
+    status :: Prelude.Maybe ProposalStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProposalSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'proposalSummary_arn' - The Amazon Resource Name (ARN) of the proposal. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'creationDate', 'proposalSummary_creationDate' - The date and time that the proposal was created.
+--
+-- 'description', 'proposalSummary_description' - The description of the proposal.
+--
+-- 'expirationDate', 'proposalSummary_expirationDate' - The date and time that the proposal expires. This is the @CreationDate@
+-- plus the @ProposalDurationInHours@ that is specified in the
+-- @ProposalThresholdPolicy@. After this date and time, if members haven\'t
+-- cast enough votes to determine the outcome according to the voting
+-- policy, the proposal is @EXPIRED@ and @Actions@ aren\'t carried out.
+--
+-- 'proposalId', 'proposalSummary_proposalId' - The unique identifier of the proposal.
+--
+-- 'proposedByMemberId', 'proposalSummary_proposedByMemberId' - The unique identifier of the member that created the proposal.
+--
+-- 'proposedByMemberName', 'proposalSummary_proposedByMemberName' - The name of the member that created the proposal.
+--
+-- 'status', 'proposalSummary_status' - The status of the proposal. Values are as follows:
+--
+-- -   @IN_PROGRESS@ - The proposal is active and open for member voting.
+--
+-- -   @APPROVED@ - The proposal was approved with sufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified proposal actions are carried out.
+--
+-- -   @REJECTED@ - The proposal was rejected with insufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @EXPIRED@ - Members didn\'t cast the number of votes required to
+--     determine the proposal outcome before the proposal expired. The
+--     specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @ACTION_FAILED@ - One or more of the specified @ProposalActions@ in
+--     a proposal that was approved couldn\'t be completed because of an
+--     error.
+newProposalSummary ::
+  ProposalSummary
+newProposalSummary =
+  ProposalSummary'
+    { arn = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      expirationDate = Prelude.Nothing,
+      proposalId = Prelude.Nothing,
+      proposedByMemberId = Prelude.Nothing,
+      proposedByMemberName = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the proposal. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+proposalSummary_arn :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.Text)
+proposalSummary_arn = Lens.lens (\ProposalSummary' {arn} -> arn) (\s@ProposalSummary' {} a -> s {arn = a} :: ProposalSummary)
+
+-- | The date and time that the proposal was created.
+proposalSummary_creationDate :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.UTCTime)
+proposalSummary_creationDate = Lens.lens (\ProposalSummary' {creationDate} -> creationDate) (\s@ProposalSummary' {} a -> s {creationDate = a} :: ProposalSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the proposal.
+proposalSummary_description :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.Text)
+proposalSummary_description = Lens.lens (\ProposalSummary' {description} -> description) (\s@ProposalSummary' {} a -> s {description = a} :: ProposalSummary)
+
+-- | The date and time that the proposal expires. This is the @CreationDate@
+-- plus the @ProposalDurationInHours@ that is specified in the
+-- @ProposalThresholdPolicy@. After this date and time, if members haven\'t
+-- cast enough votes to determine the outcome according to the voting
+-- policy, the proposal is @EXPIRED@ and @Actions@ aren\'t carried out.
+proposalSummary_expirationDate :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.UTCTime)
+proposalSummary_expirationDate = Lens.lens (\ProposalSummary' {expirationDate} -> expirationDate) (\s@ProposalSummary' {} a -> s {expirationDate = a} :: ProposalSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the proposal.
+proposalSummary_proposalId :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.Text)
+proposalSummary_proposalId = Lens.lens (\ProposalSummary' {proposalId} -> proposalId) (\s@ProposalSummary' {} a -> s {proposalId = a} :: ProposalSummary)
+
+-- | The unique identifier of the member that created the proposal.
+proposalSummary_proposedByMemberId :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.Text)
+proposalSummary_proposedByMemberId = Lens.lens (\ProposalSummary' {proposedByMemberId} -> proposedByMemberId) (\s@ProposalSummary' {} a -> s {proposedByMemberId = a} :: ProposalSummary)
+
+-- | The name of the member that created the proposal.
+proposalSummary_proposedByMemberName :: Lens.Lens' ProposalSummary (Prelude.Maybe Prelude.Text)
+proposalSummary_proposedByMemberName = Lens.lens (\ProposalSummary' {proposedByMemberName} -> proposedByMemberName) (\s@ProposalSummary' {} a -> s {proposedByMemberName = a} :: ProposalSummary)
+
+-- | The status of the proposal. Values are as follows:
+--
+-- -   @IN_PROGRESS@ - The proposal is active and open for member voting.
+--
+-- -   @APPROVED@ - The proposal was approved with sufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified proposal actions are carried out.
+--
+-- -   @REJECTED@ - The proposal was rejected with insufficient @YES@ votes
+--     among members according to the @VotingPolicy@ specified for the
+--     @Network@. The specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @EXPIRED@ - Members didn\'t cast the number of votes required to
+--     determine the proposal outcome before the proposal expired. The
+--     specified @ProposalActions@ aren\'t carried out.
+--
+-- -   @ACTION_FAILED@ - One or more of the specified @ProposalActions@ in
+--     a proposal that was approved couldn\'t be completed because of an
+--     error.
+proposalSummary_status :: Lens.Lens' ProposalSummary (Prelude.Maybe ProposalStatus)
+proposalSummary_status = Lens.lens (\ProposalSummary' {status} -> status) (\s@ProposalSummary' {} a -> s {status = a} :: ProposalSummary)
+
+instance Data.FromJSON ProposalSummary where
+  parseJSON =
+    Data.withObject
+      "ProposalSummary"
+      ( \x ->
+          ProposalSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ExpirationDate")
+            Prelude.<*> (x Data..:? "ProposalId")
+            Prelude.<*> (x Data..:? "ProposedByMemberId")
+            Prelude.<*> (x Data..:? "ProposedByMemberName")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ProposalSummary where
+  hashWithSalt _salt ProposalSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` expirationDate
+      `Prelude.hashWithSalt` proposalId
+      `Prelude.hashWithSalt` proposedByMemberId
+      `Prelude.hashWithSalt` proposedByMemberName
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ProposalSummary where
+  rnf ProposalSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf expirationDate
+      `Prelude.seq` Prelude.rnf proposalId
+      `Prelude.seq` Prelude.rnf proposedByMemberId
+      `Prelude.seq` Prelude.rnf proposedByMemberName
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ManagedBlockChain/Types/RemoveAction.hs b/gen/Amazonka/ManagedBlockChain/Types/RemoveAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/RemoveAction.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.RemoveAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.RemoveAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An action to remove a member from a Managed Blockchain network as the
+-- result of a removal proposal that is @APPROVED@. The member and all
+-- associated resources are deleted from the network.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newRemoveAction' smart constructor.
+data RemoveAction = RemoveAction'
+  { -- | The unique identifier of the member to remove.
+    memberId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'removeAction_memberId' - The unique identifier of the member to remove.
+newRemoveAction ::
+  -- | 'memberId'
+  Prelude.Text ->
+  RemoveAction
+newRemoveAction pMemberId_ =
+  RemoveAction' {memberId = pMemberId_}
+
+-- | The unique identifier of the member to remove.
+removeAction_memberId :: Lens.Lens' RemoveAction Prelude.Text
+removeAction_memberId = Lens.lens (\RemoveAction' {memberId} -> memberId) (\s@RemoveAction' {} a -> s {memberId = a} :: RemoveAction)
+
+instance Data.FromJSON RemoveAction where
+  parseJSON =
+    Data.withObject
+      "RemoveAction"
+      ( \x ->
+          RemoveAction' Prelude.<$> (x Data..: "MemberId")
+      )
+
+instance Prelude.Hashable RemoveAction where
+  hashWithSalt _salt RemoveAction' {..} =
+    _salt `Prelude.hashWithSalt` memberId
+
+instance Prelude.NFData RemoveAction where
+  rnf RemoveAction' {..} = Prelude.rnf memberId
+
+instance Data.ToJSON RemoveAction where
+  toJSON RemoveAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("MemberId" Data..= memberId)]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/Types/StateDBType.hs b/gen/Amazonka/ManagedBlockChain/Types/StateDBType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/StateDBType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.StateDBType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.StateDBType
+  ( StateDBType
+      ( ..,
+        StateDBType_CouchDB,
+        StateDBType_LevelDB
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StateDBType = StateDBType'
+  { fromStateDBType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StateDBType_CouchDB :: StateDBType
+pattern StateDBType_CouchDB = StateDBType' "CouchDB"
+
+pattern StateDBType_LevelDB :: StateDBType
+pattern StateDBType_LevelDB = StateDBType' "LevelDB"
+
+{-# COMPLETE
+  StateDBType_CouchDB,
+  StateDBType_LevelDB,
+  StateDBType'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/ThresholdComparator.hs b/gen/Amazonka/ManagedBlockChain/Types/ThresholdComparator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/ThresholdComparator.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.ThresholdComparator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.ThresholdComparator
+  ( ThresholdComparator
+      ( ..,
+        ThresholdComparator_GREATER_THAN,
+        ThresholdComparator_GREATER_THAN_OR_EQUAL_TO
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ThresholdComparator = ThresholdComparator'
+  { fromThresholdComparator ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ThresholdComparator_GREATER_THAN :: ThresholdComparator
+pattern ThresholdComparator_GREATER_THAN = ThresholdComparator' "GREATER_THAN"
+
+pattern ThresholdComparator_GREATER_THAN_OR_EQUAL_TO :: ThresholdComparator
+pattern ThresholdComparator_GREATER_THAN_OR_EQUAL_TO = ThresholdComparator' "GREATER_THAN_OR_EQUAL_TO"
+
+{-# COMPLETE
+  ThresholdComparator_GREATER_THAN,
+  ThresholdComparator_GREATER_THAN_OR_EQUAL_TO,
+  ThresholdComparator'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/VoteSummary.hs b/gen/Amazonka/ManagedBlockChain/Types/VoteSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/VoteSummary.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.VoteSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.VoteSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.VoteValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Properties of an individual vote that a member cast for a proposal.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newVoteSummary' smart constructor.
+data VoteSummary = VoteSummary'
+  { -- | The unique identifier of the member that cast the vote.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the member that cast the vote.
+    memberName :: Prelude.Maybe Prelude.Text,
+    -- | The vote value, either @YES@ or @NO@.
+    vote :: Prelude.Maybe VoteValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VoteSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberId', 'voteSummary_memberId' - The unique identifier of the member that cast the vote.
+--
+-- 'memberName', 'voteSummary_memberName' - The name of the member that cast the vote.
+--
+-- 'vote', 'voteSummary_vote' - The vote value, either @YES@ or @NO@.
+newVoteSummary ::
+  VoteSummary
+newVoteSummary =
+  VoteSummary'
+    { memberId = Prelude.Nothing,
+      memberName = Prelude.Nothing,
+      vote = Prelude.Nothing
+    }
+
+-- | The unique identifier of the member that cast the vote.
+voteSummary_memberId :: Lens.Lens' VoteSummary (Prelude.Maybe Prelude.Text)
+voteSummary_memberId = Lens.lens (\VoteSummary' {memberId} -> memberId) (\s@VoteSummary' {} a -> s {memberId = a} :: VoteSummary)
+
+-- | The name of the member that cast the vote.
+voteSummary_memberName :: Lens.Lens' VoteSummary (Prelude.Maybe Prelude.Text)
+voteSummary_memberName = Lens.lens (\VoteSummary' {memberName} -> memberName) (\s@VoteSummary' {} a -> s {memberName = a} :: VoteSummary)
+
+-- | The vote value, either @YES@ or @NO@.
+voteSummary_vote :: Lens.Lens' VoteSummary (Prelude.Maybe VoteValue)
+voteSummary_vote = Lens.lens (\VoteSummary' {vote} -> vote) (\s@VoteSummary' {} a -> s {vote = a} :: VoteSummary)
+
+instance Data.FromJSON VoteSummary where
+  parseJSON =
+    Data.withObject
+      "VoteSummary"
+      ( \x ->
+          VoteSummary'
+            Prelude.<$> (x Data..:? "MemberId")
+            Prelude.<*> (x Data..:? "MemberName")
+            Prelude.<*> (x Data..:? "Vote")
+      )
+
+instance Prelude.Hashable VoteSummary where
+  hashWithSalt _salt VoteSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` memberName
+      `Prelude.hashWithSalt` vote
+
+instance Prelude.NFData VoteSummary where
+  rnf VoteSummary' {..} =
+    Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf memberName
+      `Prelude.seq` Prelude.rnf vote
diff --git a/gen/Amazonka/ManagedBlockChain/Types/VoteValue.hs b/gen/Amazonka/ManagedBlockChain/Types/VoteValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/VoteValue.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.VoteValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.VoteValue
+  ( VoteValue
+      ( ..,
+        VoteValue_NO,
+        VoteValue_YES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VoteValue = VoteValue'
+  { fromVoteValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VoteValue_NO :: VoteValue
+pattern VoteValue_NO = VoteValue' "NO"
+
+pattern VoteValue_YES :: VoteValue
+pattern VoteValue_YES = VoteValue' "YES"
+
+{-# COMPLETE
+  VoteValue_NO,
+  VoteValue_YES,
+  VoteValue'
+  #-}
diff --git a/gen/Amazonka/ManagedBlockChain/Types/VotingPolicy.hs b/gen/Amazonka/ManagedBlockChain/Types/VotingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Types/VotingPolicy.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Types.VotingPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Types.VotingPolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types.ApprovalThresholdPolicy
+import qualified Amazonka.Prelude as Prelude
+
+-- | The voting rules for the network to decide if a proposal is accepted
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- /See:/ 'newVotingPolicy' smart constructor.
+data VotingPolicy = VotingPolicy'
+  { -- | Defines the rules for the network for voting on proposals, such as the
+    -- percentage of @YES@ votes required for the proposal to be approved and
+    -- the duration of the proposal. The policy applies to all proposals and is
+    -- specified when the network is created.
+    approvalThresholdPolicy :: Prelude.Maybe ApprovalThresholdPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VotingPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'approvalThresholdPolicy', 'votingPolicy_approvalThresholdPolicy' - Defines the rules for the network for voting on proposals, such as the
+-- percentage of @YES@ votes required for the proposal to be approved and
+-- the duration of the proposal. The policy applies to all proposals and is
+-- specified when the network is created.
+newVotingPolicy ::
+  VotingPolicy
+newVotingPolicy =
+  VotingPolicy'
+    { approvalThresholdPolicy =
+        Prelude.Nothing
+    }
+
+-- | Defines the rules for the network for voting on proposals, such as the
+-- percentage of @YES@ votes required for the proposal to be approved and
+-- the duration of the proposal. The policy applies to all proposals and is
+-- specified when the network is created.
+votingPolicy_approvalThresholdPolicy :: Lens.Lens' VotingPolicy (Prelude.Maybe ApprovalThresholdPolicy)
+votingPolicy_approvalThresholdPolicy = Lens.lens (\VotingPolicy' {approvalThresholdPolicy} -> approvalThresholdPolicy) (\s@VotingPolicy' {} a -> s {approvalThresholdPolicy = a} :: VotingPolicy)
+
+instance Data.FromJSON VotingPolicy where
+  parseJSON =
+    Data.withObject
+      "VotingPolicy"
+      ( \x ->
+          VotingPolicy'
+            Prelude.<$> (x Data..:? "ApprovalThresholdPolicy")
+      )
+
+instance Prelude.Hashable VotingPolicy where
+  hashWithSalt _salt VotingPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` approvalThresholdPolicy
+
+instance Prelude.NFData VotingPolicy where
+  rnf VotingPolicy' {..} =
+    Prelude.rnf approvalThresholdPolicy
+
+instance Data.ToJSON VotingPolicy where
+  toJSON VotingPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ApprovalThresholdPolicy" Data..=)
+              Prelude.<$> approvalThresholdPolicy
+          ]
+      )
diff --git a/gen/Amazonka/ManagedBlockChain/UntagResource.hs b/gen/Amazonka/ManagedBlockChain/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/UntagResource.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified tags from the Amazon Managed Blockchain resource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/ethereum-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Ethereum Developer Guide/, or
+-- <https://docs.aws.amazon.com/managed-blockchain/latest/hyperledger-fabric-dev/tagging-resources.html Tagging Resources>
+-- in the /Amazon Managed Blockchain Hyperledger Fabric Developer Guide/.
+module Amazonka.ManagedBlockChain.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource. For more information
+    -- about ARNs and their format, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+    -- in the /Amazon Web Services General Reference/.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource. For more information
+-- about ARNs and their format, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
+-- in the /Amazon Web Services General Reference/.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/UpdateMember.hs b/gen/Amazonka/ManagedBlockChain/UpdateMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/UpdateMember.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.UpdateMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a member configuration with new parameters.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.UpdateMember
+  ( -- * Creating a Request
+    UpdateMember (..),
+    newUpdateMember,
+
+    -- * Request Lenses
+    updateMember_logPublishingConfiguration,
+    updateMember_networkId,
+    updateMember_memberId,
+
+    -- * Destructuring the Response
+    UpdateMemberResponse (..),
+    newUpdateMemberResponse,
+
+    -- * Response Lenses
+    updateMemberResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateMember' smart constructor.
+data UpdateMember = UpdateMember'
+  { -- | Configuration properties for publishing to Amazon CloudWatch Logs.
+    logPublishingConfiguration :: Prelude.Maybe MemberLogPublishingConfiguration,
+    -- | The unique identifier of the Managed Blockchain network to which the
+    -- member belongs.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the member.
+    memberId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logPublishingConfiguration', 'updateMember_logPublishingConfiguration' - Configuration properties for publishing to Amazon CloudWatch Logs.
+--
+-- 'networkId', 'updateMember_networkId' - The unique identifier of the Managed Blockchain network to which the
+-- member belongs.
+--
+-- 'memberId', 'updateMember_memberId' - The unique identifier of the member.
+newUpdateMember ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'memberId'
+  Prelude.Text ->
+  UpdateMember
+newUpdateMember pNetworkId_ pMemberId_ =
+  UpdateMember'
+    { logPublishingConfiguration =
+        Prelude.Nothing,
+      networkId = pNetworkId_,
+      memberId = pMemberId_
+    }
+
+-- | Configuration properties for publishing to Amazon CloudWatch Logs.
+updateMember_logPublishingConfiguration :: Lens.Lens' UpdateMember (Prelude.Maybe MemberLogPublishingConfiguration)
+updateMember_logPublishingConfiguration = Lens.lens (\UpdateMember' {logPublishingConfiguration} -> logPublishingConfiguration) (\s@UpdateMember' {} a -> s {logPublishingConfiguration = a} :: UpdateMember)
+
+-- | The unique identifier of the Managed Blockchain network to which the
+-- member belongs.
+updateMember_networkId :: Lens.Lens' UpdateMember Prelude.Text
+updateMember_networkId = Lens.lens (\UpdateMember' {networkId} -> networkId) (\s@UpdateMember' {} a -> s {networkId = a} :: UpdateMember)
+
+-- | The unique identifier of the member.
+updateMember_memberId :: Lens.Lens' UpdateMember Prelude.Text
+updateMember_memberId = Lens.lens (\UpdateMember' {memberId} -> memberId) (\s@UpdateMember' {} a -> s {memberId = a} :: UpdateMember)
+
+instance Core.AWSRequest UpdateMember where
+  type AWSResponse UpdateMember = UpdateMemberResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateMemberResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateMember where
+  hashWithSalt _salt UpdateMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` logPublishingConfiguration
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` memberId
+
+instance Prelude.NFData UpdateMember where
+  rnf UpdateMember' {..} =
+    Prelude.rnf logPublishingConfiguration
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf memberId
+
+instance Data.ToHeaders UpdateMember where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateMember where
+  toJSON UpdateMember' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LogPublishingConfiguration" Data..=)
+              Prelude.<$> logPublishingConfiguration
+          ]
+      )
+
+instance Data.ToPath UpdateMember where
+  toPath UpdateMember' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/members/",
+        Data.toBS memberId
+      ]
+
+instance Data.ToQuery UpdateMember where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateMemberResponse' smart constructor.
+data UpdateMemberResponse = UpdateMemberResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMemberResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateMemberResponse_httpStatus' - The response's http status code.
+newUpdateMemberResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateMemberResponse
+newUpdateMemberResponse pHttpStatus_ =
+  UpdateMemberResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateMemberResponse_httpStatus :: Lens.Lens' UpdateMemberResponse Prelude.Int
+updateMemberResponse_httpStatus = Lens.lens (\UpdateMemberResponse' {httpStatus} -> httpStatus) (\s@UpdateMemberResponse' {} a -> s {httpStatus = a} :: UpdateMemberResponse)
+
+instance Prelude.NFData UpdateMemberResponse where
+  rnf UpdateMemberResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/UpdateNode.hs b/gen/Amazonka/ManagedBlockChain/UpdateNode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/UpdateNode.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.UpdateNode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a node configuration with new parameters.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.UpdateNode
+  ( -- * Creating a Request
+    UpdateNode (..),
+    newUpdateNode,
+
+    -- * Request Lenses
+    updateNode_logPublishingConfiguration,
+    updateNode_memberId,
+    updateNode_networkId,
+    updateNode_nodeId,
+
+    -- * Destructuring the Response
+    UpdateNodeResponse (..),
+    newUpdateNodeResponse,
+
+    -- * Response Lenses
+    updateNodeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateNode' smart constructor.
+data UpdateNode = UpdateNode'
+  { -- | Configuration properties for publishing to Amazon CloudWatch Logs.
+    logPublishingConfiguration :: Prelude.Maybe NodeLogPublishingConfiguration,
+    -- | The unique identifier of the member that owns the node.
+    --
+    -- Applies only to Hyperledger Fabric.
+    memberId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the network that the node is on.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the node.
+    nodeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logPublishingConfiguration', 'updateNode_logPublishingConfiguration' - Configuration properties for publishing to Amazon CloudWatch Logs.
+--
+-- 'memberId', 'updateNode_memberId' - The unique identifier of the member that owns the node.
+--
+-- Applies only to Hyperledger Fabric.
+--
+-- 'networkId', 'updateNode_networkId' - The unique identifier of the network that the node is on.
+--
+-- 'nodeId', 'updateNode_nodeId' - The unique identifier of the node.
+newUpdateNode ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'nodeId'
+  Prelude.Text ->
+  UpdateNode
+newUpdateNode pNetworkId_ pNodeId_ =
+  UpdateNode'
+    { logPublishingConfiguration =
+        Prelude.Nothing,
+      memberId = Prelude.Nothing,
+      networkId = pNetworkId_,
+      nodeId = pNodeId_
+    }
+
+-- | Configuration properties for publishing to Amazon CloudWatch Logs.
+updateNode_logPublishingConfiguration :: Lens.Lens' UpdateNode (Prelude.Maybe NodeLogPublishingConfiguration)
+updateNode_logPublishingConfiguration = Lens.lens (\UpdateNode' {logPublishingConfiguration} -> logPublishingConfiguration) (\s@UpdateNode' {} a -> s {logPublishingConfiguration = a} :: UpdateNode)
+
+-- | The unique identifier of the member that owns the node.
+--
+-- Applies only to Hyperledger Fabric.
+updateNode_memberId :: Lens.Lens' UpdateNode (Prelude.Maybe Prelude.Text)
+updateNode_memberId = Lens.lens (\UpdateNode' {memberId} -> memberId) (\s@UpdateNode' {} a -> s {memberId = a} :: UpdateNode)
+
+-- | The unique identifier of the network that the node is on.
+updateNode_networkId :: Lens.Lens' UpdateNode Prelude.Text
+updateNode_networkId = Lens.lens (\UpdateNode' {networkId} -> networkId) (\s@UpdateNode' {} a -> s {networkId = a} :: UpdateNode)
+
+-- | The unique identifier of the node.
+updateNode_nodeId :: Lens.Lens' UpdateNode Prelude.Text
+updateNode_nodeId = Lens.lens (\UpdateNode' {nodeId} -> nodeId) (\s@UpdateNode' {} a -> s {nodeId = a} :: UpdateNode)
+
+instance Core.AWSRequest UpdateNode where
+  type AWSResponse UpdateNode = UpdateNodeResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateNodeResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateNode where
+  hashWithSalt _salt UpdateNode' {..} =
+    _salt
+      `Prelude.hashWithSalt` logPublishingConfiguration
+      `Prelude.hashWithSalt` memberId
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` nodeId
+
+instance Prelude.NFData UpdateNode where
+  rnf UpdateNode' {..} =
+    Prelude.rnf logPublishingConfiguration
+      `Prelude.seq` Prelude.rnf memberId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf nodeId
+
+instance Data.ToHeaders UpdateNode where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateNode where
+  toJSON UpdateNode' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LogPublishingConfiguration" Data..=)
+              Prelude.<$> logPublishingConfiguration,
+            ("MemberId" Data..=) Prelude.<$> memberId
+          ]
+      )
+
+instance Data.ToPath UpdateNode where
+  toPath UpdateNode' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/nodes/",
+        Data.toBS nodeId
+      ]
+
+instance Data.ToQuery UpdateNode where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateNodeResponse' smart constructor.
+data UpdateNodeResponse = UpdateNodeResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNodeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateNodeResponse_httpStatus' - The response's http status code.
+newUpdateNodeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateNodeResponse
+newUpdateNodeResponse pHttpStatus_ =
+  UpdateNodeResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateNodeResponse_httpStatus :: Lens.Lens' UpdateNodeResponse Prelude.Int
+updateNodeResponse_httpStatus = Lens.lens (\UpdateNodeResponse' {httpStatus} -> httpStatus) (\s@UpdateNodeResponse' {} a -> s {httpStatus = a} :: UpdateNodeResponse)
+
+instance Prelude.NFData UpdateNodeResponse where
+  rnf UpdateNodeResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/VoteOnProposal.hs b/gen/Amazonka/ManagedBlockChain/VoteOnProposal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/VoteOnProposal.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.VoteOnProposal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Casts a vote for a specified @ProposalId@ on behalf of a member. The
+-- member to vote as, specified by @VoterMemberId@, must be in the same
+-- Amazon Web Services account as the principal that calls the action.
+--
+-- Applies only to Hyperledger Fabric.
+module Amazonka.ManagedBlockChain.VoteOnProposal
+  ( -- * Creating a Request
+    VoteOnProposal (..),
+    newVoteOnProposal,
+
+    -- * Request Lenses
+    voteOnProposal_networkId,
+    voteOnProposal_proposalId,
+    voteOnProposal_voterMemberId,
+    voteOnProposal_vote,
+
+    -- * Destructuring the Response
+    VoteOnProposalResponse (..),
+    newVoteOnProposalResponse,
+
+    -- * Response Lenses
+    voteOnProposalResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newVoteOnProposal' smart constructor.
+data VoteOnProposal = VoteOnProposal'
+  { -- | The unique identifier of the network.
+    networkId :: Prelude.Text,
+    -- | The unique identifier of the proposal.
+    proposalId :: Prelude.Text,
+    -- | The unique identifier of the member casting the vote.
+    voterMemberId :: Prelude.Text,
+    -- | The value of the vote.
+    vote :: VoteValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VoteOnProposal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkId', 'voteOnProposal_networkId' - The unique identifier of the network.
+--
+-- 'proposalId', 'voteOnProposal_proposalId' - The unique identifier of the proposal.
+--
+-- 'voterMemberId', 'voteOnProposal_voterMemberId' - The unique identifier of the member casting the vote.
+--
+-- 'vote', 'voteOnProposal_vote' - The value of the vote.
+newVoteOnProposal ::
+  -- | 'networkId'
+  Prelude.Text ->
+  -- | 'proposalId'
+  Prelude.Text ->
+  -- | 'voterMemberId'
+  Prelude.Text ->
+  -- | 'vote'
+  VoteValue ->
+  VoteOnProposal
+newVoteOnProposal
+  pNetworkId_
+  pProposalId_
+  pVoterMemberId_
+  pVote_ =
+    VoteOnProposal'
+      { networkId = pNetworkId_,
+        proposalId = pProposalId_,
+        voterMemberId = pVoterMemberId_,
+        vote = pVote_
+      }
+
+-- | The unique identifier of the network.
+voteOnProposal_networkId :: Lens.Lens' VoteOnProposal Prelude.Text
+voteOnProposal_networkId = Lens.lens (\VoteOnProposal' {networkId} -> networkId) (\s@VoteOnProposal' {} a -> s {networkId = a} :: VoteOnProposal)
+
+-- | The unique identifier of the proposal.
+voteOnProposal_proposalId :: Lens.Lens' VoteOnProposal Prelude.Text
+voteOnProposal_proposalId = Lens.lens (\VoteOnProposal' {proposalId} -> proposalId) (\s@VoteOnProposal' {} a -> s {proposalId = a} :: VoteOnProposal)
+
+-- | The unique identifier of the member casting the vote.
+voteOnProposal_voterMemberId :: Lens.Lens' VoteOnProposal Prelude.Text
+voteOnProposal_voterMemberId = Lens.lens (\VoteOnProposal' {voterMemberId} -> voterMemberId) (\s@VoteOnProposal' {} a -> s {voterMemberId = a} :: VoteOnProposal)
+
+-- | The value of the vote.
+voteOnProposal_vote :: Lens.Lens' VoteOnProposal VoteValue
+voteOnProposal_vote = Lens.lens (\VoteOnProposal' {vote} -> vote) (\s@VoteOnProposal' {} a -> s {vote = a} :: VoteOnProposal)
+
+instance Core.AWSRequest VoteOnProposal where
+  type
+    AWSResponse VoteOnProposal =
+      VoteOnProposalResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          VoteOnProposalResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable VoteOnProposal where
+  hashWithSalt _salt VoteOnProposal' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` proposalId
+      `Prelude.hashWithSalt` voterMemberId
+      `Prelude.hashWithSalt` vote
+
+instance Prelude.NFData VoteOnProposal where
+  rnf VoteOnProposal' {..} =
+    Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf proposalId
+      `Prelude.seq` Prelude.rnf voterMemberId
+      `Prelude.seq` Prelude.rnf vote
+
+instance Data.ToHeaders VoteOnProposal where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON VoteOnProposal where
+  toJSON VoteOnProposal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("VoterMemberId" Data..= voterMemberId),
+            Prelude.Just ("Vote" Data..= vote)
+          ]
+      )
+
+instance Data.ToPath VoteOnProposal where
+  toPath VoteOnProposal' {..} =
+    Prelude.mconcat
+      [ "/networks/",
+        Data.toBS networkId,
+        "/proposals/",
+        Data.toBS proposalId,
+        "/votes"
+      ]
+
+instance Data.ToQuery VoteOnProposal where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newVoteOnProposalResponse' smart constructor.
+data VoteOnProposalResponse = VoteOnProposalResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VoteOnProposalResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'voteOnProposalResponse_httpStatus' - The response's http status code.
+newVoteOnProposalResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  VoteOnProposalResponse
+newVoteOnProposalResponse pHttpStatus_ =
+  VoteOnProposalResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+voteOnProposalResponse_httpStatus :: Lens.Lens' VoteOnProposalResponse Prelude.Int
+voteOnProposalResponse_httpStatus = Lens.lens (\VoteOnProposalResponse' {httpStatus} -> httpStatus) (\s@VoteOnProposalResponse' {} a -> s {httpStatus = a} :: VoteOnProposalResponse)
+
+instance Prelude.NFData VoteOnProposalResponse where
+  rnf VoteOnProposalResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ManagedBlockChain/Waiters.hs b/gen/Amazonka/ManagedBlockChain/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ManagedBlockChain/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ManagedBlockChain.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ManagedBlockChain.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.ManagedBlockChain.Lens
+import Amazonka.ManagedBlockChain.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.ManagedBlockChain
+import Test.Amazonka.ManagedBlockChain.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ManagedBlockChain"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/ManagedBlockChain.hs b/test/Test/Amazonka/Gen/ManagedBlockChain.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ManagedBlockChain.hs
@@ -0,0 +1,578 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.ManagedBlockChain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.ManagedBlockChain where
+
+import Amazonka.ManagedBlockChain
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.ManagedBlockChain.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateAccessor $
+--             newCreateAccessor
+--
+--         , requestCreateMember $
+--             newCreateMember
+--
+--         , requestCreateNetwork $
+--             newCreateNetwork
+--
+--         , requestCreateNode $
+--             newCreateNode
+--
+--         , requestCreateProposal $
+--             newCreateProposal
+--
+--         , requestDeleteAccessor $
+--             newDeleteAccessor
+--
+--         , requestDeleteMember $
+--             newDeleteMember
+--
+--         , requestDeleteNode $
+--             newDeleteNode
+--
+--         , requestGetAccessor $
+--             newGetAccessor
+--
+--         , requestGetMember $
+--             newGetMember
+--
+--         , requestGetNetwork $
+--             newGetNetwork
+--
+--         , requestGetNode $
+--             newGetNode
+--
+--         , requestGetProposal $
+--             newGetProposal
+--
+--         , requestListAccessors $
+--             newListAccessors
+--
+--         , requestListInvitations $
+--             newListInvitations
+--
+--         , requestListMembers $
+--             newListMembers
+--
+--         , requestListNetworks $
+--             newListNetworks
+--
+--         , requestListNodes $
+--             newListNodes
+--
+--         , requestListProposalVotes $
+--             newListProposalVotes
+--
+--         , requestListProposals $
+--             newListProposals
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestRejectInvitation $
+--             newRejectInvitation
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateMember $
+--             newUpdateMember
+--
+--         , requestUpdateNode $
+--             newUpdateNode
+--
+--         , requestVoteOnProposal $
+--             newVoteOnProposal
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateAccessor $
+--             newCreateAccessorResponse
+--
+--         , responseCreateMember $
+--             newCreateMemberResponse
+--
+--         , responseCreateNetwork $
+--             newCreateNetworkResponse
+--
+--         , responseCreateNode $
+--             newCreateNodeResponse
+--
+--         , responseCreateProposal $
+--             newCreateProposalResponse
+--
+--         , responseDeleteAccessor $
+--             newDeleteAccessorResponse
+--
+--         , responseDeleteMember $
+--             newDeleteMemberResponse
+--
+--         , responseDeleteNode $
+--             newDeleteNodeResponse
+--
+--         , responseGetAccessor $
+--             newGetAccessorResponse
+--
+--         , responseGetMember $
+--             newGetMemberResponse
+--
+--         , responseGetNetwork $
+--             newGetNetworkResponse
+--
+--         , responseGetNode $
+--             newGetNodeResponse
+--
+--         , responseGetProposal $
+--             newGetProposalResponse
+--
+--         , responseListAccessors $
+--             newListAccessorsResponse
+--
+--         , responseListInvitations $
+--             newListInvitationsResponse
+--
+--         , responseListMembers $
+--             newListMembersResponse
+--
+--         , responseListNetworks $
+--             newListNetworksResponse
+--
+--         , responseListNodes $
+--             newListNodesResponse
+--
+--         , responseListProposalVotes $
+--             newListProposalVotesResponse
+--
+--         , responseListProposals $
+--             newListProposalsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseRejectInvitation $
+--             newRejectInvitationResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateMember $
+--             newUpdateMemberResponse
+--
+--         , responseUpdateNode $
+--             newUpdateNodeResponse
+--
+--         , responseVoteOnProposal $
+--             newVoteOnProposalResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateAccessor :: CreateAccessor -> TestTree
+requestCreateAccessor =
+  req
+    "CreateAccessor"
+    "fixture/CreateAccessor.yaml"
+
+requestCreateMember :: CreateMember -> TestTree
+requestCreateMember =
+  req
+    "CreateMember"
+    "fixture/CreateMember.yaml"
+
+requestCreateNetwork :: CreateNetwork -> TestTree
+requestCreateNetwork =
+  req
+    "CreateNetwork"
+    "fixture/CreateNetwork.yaml"
+
+requestCreateNode :: CreateNode -> TestTree
+requestCreateNode =
+  req
+    "CreateNode"
+    "fixture/CreateNode.yaml"
+
+requestCreateProposal :: CreateProposal -> TestTree
+requestCreateProposal =
+  req
+    "CreateProposal"
+    "fixture/CreateProposal.yaml"
+
+requestDeleteAccessor :: DeleteAccessor -> TestTree
+requestDeleteAccessor =
+  req
+    "DeleteAccessor"
+    "fixture/DeleteAccessor.yaml"
+
+requestDeleteMember :: DeleteMember -> TestTree
+requestDeleteMember =
+  req
+    "DeleteMember"
+    "fixture/DeleteMember.yaml"
+
+requestDeleteNode :: DeleteNode -> TestTree
+requestDeleteNode =
+  req
+    "DeleteNode"
+    "fixture/DeleteNode.yaml"
+
+requestGetAccessor :: GetAccessor -> TestTree
+requestGetAccessor =
+  req
+    "GetAccessor"
+    "fixture/GetAccessor.yaml"
+
+requestGetMember :: GetMember -> TestTree
+requestGetMember =
+  req
+    "GetMember"
+    "fixture/GetMember.yaml"
+
+requestGetNetwork :: GetNetwork -> TestTree
+requestGetNetwork =
+  req
+    "GetNetwork"
+    "fixture/GetNetwork.yaml"
+
+requestGetNode :: GetNode -> TestTree
+requestGetNode =
+  req
+    "GetNode"
+    "fixture/GetNode.yaml"
+
+requestGetProposal :: GetProposal -> TestTree
+requestGetProposal =
+  req
+    "GetProposal"
+    "fixture/GetProposal.yaml"
+
+requestListAccessors :: ListAccessors -> TestTree
+requestListAccessors =
+  req
+    "ListAccessors"
+    "fixture/ListAccessors.yaml"
+
+requestListInvitations :: ListInvitations -> TestTree
+requestListInvitations =
+  req
+    "ListInvitations"
+    "fixture/ListInvitations.yaml"
+
+requestListMembers :: ListMembers -> TestTree
+requestListMembers =
+  req
+    "ListMembers"
+    "fixture/ListMembers.yaml"
+
+requestListNetworks :: ListNetworks -> TestTree
+requestListNetworks =
+  req
+    "ListNetworks"
+    "fixture/ListNetworks.yaml"
+
+requestListNodes :: ListNodes -> TestTree
+requestListNodes =
+  req
+    "ListNodes"
+    "fixture/ListNodes.yaml"
+
+requestListProposalVotes :: ListProposalVotes -> TestTree
+requestListProposalVotes =
+  req
+    "ListProposalVotes"
+    "fixture/ListProposalVotes.yaml"
+
+requestListProposals :: ListProposals -> TestTree
+requestListProposals =
+  req
+    "ListProposals"
+    "fixture/ListProposals.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestRejectInvitation :: RejectInvitation -> TestTree
+requestRejectInvitation =
+  req
+    "RejectInvitation"
+    "fixture/RejectInvitation.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateMember :: UpdateMember -> TestTree
+requestUpdateMember =
+  req
+    "UpdateMember"
+    "fixture/UpdateMember.yaml"
+
+requestUpdateNode :: UpdateNode -> TestTree
+requestUpdateNode =
+  req
+    "UpdateNode"
+    "fixture/UpdateNode.yaml"
+
+requestVoteOnProposal :: VoteOnProposal -> TestTree
+requestVoteOnProposal =
+  req
+    "VoteOnProposal"
+    "fixture/VoteOnProposal.yaml"
+
+-- Responses
+
+responseCreateAccessor :: CreateAccessorResponse -> TestTree
+responseCreateAccessor =
+  res
+    "CreateAccessorResponse"
+    "fixture/CreateAccessorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAccessor)
+
+responseCreateMember :: CreateMemberResponse -> TestTree
+responseCreateMember =
+  res
+    "CreateMemberResponse"
+    "fixture/CreateMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMember)
+
+responseCreateNetwork :: CreateNetworkResponse -> TestTree
+responseCreateNetwork =
+  res
+    "CreateNetworkResponse"
+    "fixture/CreateNetworkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetwork)
+
+responseCreateNode :: CreateNodeResponse -> TestTree
+responseCreateNode =
+  res
+    "CreateNodeResponse"
+    "fixture/CreateNodeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNode)
+
+responseCreateProposal :: CreateProposalResponse -> TestTree
+responseCreateProposal =
+  res
+    "CreateProposalResponse"
+    "fixture/CreateProposalResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProposal)
+
+responseDeleteAccessor :: DeleteAccessorResponse -> TestTree
+responseDeleteAccessor =
+  res
+    "DeleteAccessorResponse"
+    "fixture/DeleteAccessorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAccessor)
+
+responseDeleteMember :: DeleteMemberResponse -> TestTree
+responseDeleteMember =
+  res
+    "DeleteMemberResponse"
+    "fixture/DeleteMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMember)
+
+responseDeleteNode :: DeleteNodeResponse -> TestTree
+responseDeleteNode =
+  res
+    "DeleteNodeResponse"
+    "fixture/DeleteNodeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNode)
+
+responseGetAccessor :: GetAccessorResponse -> TestTree
+responseGetAccessor =
+  res
+    "GetAccessorResponse"
+    "fixture/GetAccessorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAccessor)
+
+responseGetMember :: GetMemberResponse -> TestTree
+responseGetMember =
+  res
+    "GetMemberResponse"
+    "fixture/GetMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMember)
+
+responseGetNetwork :: GetNetworkResponse -> TestTree
+responseGetNetwork =
+  res
+    "GetNetworkResponse"
+    "fixture/GetNetworkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetNetwork)
+
+responseGetNode :: GetNodeResponse -> TestTree
+responseGetNode =
+  res
+    "GetNodeResponse"
+    "fixture/GetNodeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetNode)
+
+responseGetProposal :: GetProposalResponse -> TestTree
+responseGetProposal =
+  res
+    "GetProposalResponse"
+    "fixture/GetProposalResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetProposal)
+
+responseListAccessors :: ListAccessorsResponse -> TestTree
+responseListAccessors =
+  res
+    "ListAccessorsResponse"
+    "fixture/ListAccessorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAccessors)
+
+responseListInvitations :: ListInvitationsResponse -> TestTree
+responseListInvitations =
+  res
+    "ListInvitationsResponse"
+    "fixture/ListInvitationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListInvitations)
+
+responseListMembers :: ListMembersResponse -> TestTree
+responseListMembers =
+  res
+    "ListMembersResponse"
+    "fixture/ListMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMembers)
+
+responseListNetworks :: ListNetworksResponse -> TestTree
+responseListNetworks =
+  res
+    "ListNetworksResponse"
+    "fixture/ListNetworksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListNetworks)
+
+responseListNodes :: ListNodesResponse -> TestTree
+responseListNodes =
+  res
+    "ListNodesResponse"
+    "fixture/ListNodesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListNodes)
+
+responseListProposalVotes :: ListProposalVotesResponse -> TestTree
+responseListProposalVotes =
+  res
+    "ListProposalVotesResponse"
+    "fixture/ListProposalVotesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProposalVotes)
+
+responseListProposals :: ListProposalsResponse -> TestTree
+responseListProposals =
+  res
+    "ListProposalsResponse"
+    "fixture/ListProposalsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProposals)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseRejectInvitation :: RejectInvitationResponse -> TestTree
+responseRejectInvitation =
+  res
+    "RejectInvitationResponse"
+    "fixture/RejectInvitationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectInvitation)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateMember :: UpdateMemberResponse -> TestTree
+responseUpdateMember =
+  res
+    "UpdateMemberResponse"
+    "fixture/UpdateMemberResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateMember)
+
+responseUpdateNode :: UpdateNodeResponse -> TestTree
+responseUpdateNode =
+  res
+    "UpdateNodeResponse"
+    "fixture/UpdateNodeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateNode)
+
+responseVoteOnProposal :: VoteOnProposalResponse -> TestTree
+responseVoteOnProposal =
+  res
+    "VoteOnProposalResponse"
+    "fixture/VoteOnProposalResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy VoteOnProposal)
diff --git a/test/Test/Amazonka/ManagedBlockChain.hs b/test/Test/Amazonka/ManagedBlockChain.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ManagedBlockChain.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ManagedBlockChain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.ManagedBlockChain
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ManagedBlockChain/Internal.hs b/test/Test/Amazonka/ManagedBlockChain/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ManagedBlockChain/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ManagedBlockChain.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.ManagedBlockChain.Internal where
