mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-22 01:25:10 +00:00
[FAB-16296] Fixes for interest rate sample
backporting fixes from master to v1.4 for interest rate sample Change-Id: If7648c91c53dff737103de178bd8a09556765951 Signed-off-by: NIKHIL E GUPTA <negupta@us.ibm.com>
This commit is contained in:
parent
e80379a06f
commit
3d364ed082
4 changed files with 316 additions and 59 deletions
|
|
@ -70,7 +70,7 @@ The interest-rate swap chaincode provides the following API:
|
||||||
given identifier and swap parameters among the two parties specified. This
|
given identifier and swap parameters among the two parties specified. This
|
||||||
function creates the entry for the swap and the corresponding payment. It
|
function creates the entry for the swap and the corresponding payment. It
|
||||||
also sets the key-level endorsement policies for both keys to the participants
|
also sets the key-level endorsement policies for both keys to the participants
|
||||||
to the swap. In case the swap's prinicpal amount exceeds a certain threshold,
|
to the swap. In case the swap's principal amount exceeds a certain threshold,
|
||||||
it adds an auditor to the endorsement policy for the keys.
|
it adds an auditor to the endorsement policy for the keys.
|
||||||
* `calculatePayment(swapID)` - calculate the net payment from party A to party
|
* `calculatePayment(swapID)` - calculate the net payment from party A to party
|
||||||
B and set the payment entry accordingly. If the payment information is negative,
|
B and set the payment entry accordingly. If the payment information is negative,
|
||||||
|
|
@ -107,22 +107,26 @@ for creating a swap.
|
||||||
The `network` subdirectory contains scripts that will launch a sample network
|
The `network` subdirectory contains scripts that will launch a sample network
|
||||||
and run a swap transaction flow from creation to settlement.
|
and run a swap transaction flow from creation to settlement.
|
||||||
|
|
||||||
### Prerequesites
|
### Prerequisites
|
||||||
|
|
||||||
The following prerequisites are needed to run this sample:
|
The following prerequisites are needed to run this sample:
|
||||||
|
* You need to run this sample from your GOPATH. If you have downloaded the
|
||||||
|
`fabric-samples` directory outside your GOPATH, then you need to copy or
|
||||||
|
move the interest rate sample into your GOPATH.
|
||||||
* Fabric docker images. By default the `network/network.sh` script will look for
|
* Fabric docker images. By default the `network/network.sh` script will look for
|
||||||
fabric images with the `latest` tag, this can be adapted with the `-i` command
|
fabric images with the `latest` tag, this can be adapted with the `-i` command
|
||||||
line parameter of the script.
|
line parameter of the script.
|
||||||
* A local installation of `configtxgen` and `cryptogen` in the `PATH` environment,
|
* A local installation of `configtxgen` and `cryptogen` in the `PATH` environment,
|
||||||
or included in `fabric-samples/bin` directory.
|
or included in `fabric-samples/bin` directory.
|
||||||
* Vendoring the chaincode. In the chaincode directory, run `govendor init` and
|
* Vendoring the chaincode. In the `chaincode` directory, run `govendor init` and
|
||||||
`govendor add +external` to vendor the shim from your local copy of fabric.
|
`govendor add +external` to vendor the shim from your local copy of fabric.
|
||||||
|
|
||||||
### Bringing up the network
|
### Bringing up the network
|
||||||
|
|
||||||
Simply run `network.sh up` to bring up the network. This will spawn docker
|
Navigate to the `network` folder. Run the command `./network.sh up` to bring up
|
||||||
containers running a network of 3 "regular" organizations, one auditor
|
the network. This will spawn docker containers running a network of 3 "regular"
|
||||||
organization and one reference rate provider as well as a solo orderer.
|
organizations, one auditor organization and one reference rate provider as well
|
||||||
|
as a solo orderer.
|
||||||
|
|
||||||
An additional CLI container will run `network/scripts/script.sh` to join the
|
An additional CLI container will run `network/scripts/script.sh` to join the
|
||||||
peers to the `irs` channel and deploy the chaincode. In the init parameters it
|
peers to the `irs` channel and deploy the chaincode. In the init parameters it
|
||||||
|
|
@ -136,7 +140,7 @@ commands in the following section.
|
||||||
|
|
||||||
The chaincode is instantiated as follows:
|
The chaincode is instantiated as follows:
|
||||||
```
|
```
|
||||||
peer chaincode instantiate -o irs-orderer:7050 -C irs -n irscc -l golang -v 0 -c '{"Args":["init","auditor","100000","rrprovider","myrr"]}' -P "AND(OR('partya.peer','partyb.peer','partyc.peer'), 'auditor.peer')"
|
peer chaincode instantiate -o irs-orderer:7050 -C irs -n irscc -l golang -v 0 -c '{"Args":["init","auditor","1000000","rrprovider","myrr"]}' -P "AND(OR('partya.peer','partyb.peer','partyc.peer'), 'auditor.peer')"
|
||||||
```
|
```
|
||||||
This sets an auditing threshold of 1M, above which the `auditor` organization
|
This sets an auditing threshold of 1M, above which the `auditor` organization
|
||||||
needs to be involved. It also specifies the `myrr` reference rate provided by
|
needs to be involved. It also specifies the `myrr` reference rate provided by
|
||||||
|
|
@ -144,16 +148,16 @@ the `rrprovider` organization.
|
||||||
|
|
||||||
To set a reference rate:
|
To set a reference rate:
|
||||||
```
|
```
|
||||||
peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc --peerAddresses irs-rrprovider:7051 -c '{"Args":["setReferenceRate","myrr","3"]}'
|
peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc --peerAddresses irs-rrprovider:7051 -c '{"Args":["setReferenceRate","myrr","300"]}'
|
||||||
```
|
```
|
||||||
Note that the transaction is endorsed by a peer of the organization we have
|
Note that the transaction is endorsed by a peer of the organization we have
|
||||||
specified as providing this reference rate in the init parameters.
|
specified as providing this reference rate in the init parameters.
|
||||||
|
|
||||||
To create a swap named "myswap":
|
To create a swap named "myswap":
|
||||||
```
|
```
|
||||||
peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc --peerAddresses irs-partya:7051 --peerAddresses irs-partyb:7051 --peerAddresses irs-auditor:7051 -c '{"Args":["createSwap","myswap","{\"StartDate\":\"2018-09-27T15:04:05Z\",\"EndDate\":\"2018-09-30T15:04:05Z\",\"PaymentInterval\":365,\"PrincipalAmount\":10000000,\"FixedRate\":4,\"FloatingRate\":5,\"ReferenceRate\":\"myrr\"}", "partya", "partyb"]}'
|
peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc --peerAddresses irs-partya:7051 --peerAddresses irs-partyb:7051 --peerAddresses irs-auditor:7051 -c '{"Args":["createSwap","myswap","{\"StartDate\":\"2018-09-27T15:04:05Z\",\"EndDate\":\"2018-09-30T15:04:05Z\",\"PaymentInterval\":395,\"PrincipalAmount\":100000,\"FixedRate\":400,\"FloatingRate\":500,\"ReferenceRate\":\"myrr\"}", "partya", "partyb"]}'
|
||||||
```
|
```
|
||||||
Note that the transaction is endorsed by both parties that are part of this
|
Note that the transaction is endorsed by both parties that are part of this
|
||||||
swap as well as the auditor. Since the principal amount in this case is lower
|
swap as well as the auditor. Since the principal amount in this case is lower
|
||||||
than the audit threshold we set as init parameters, no auditor will be required
|
than the audit threshold we set as init parameters, no auditor will be required
|
||||||
to endorse changes to the payment info or swap details.
|
to endorse changes to the payment info or swap details.
|
||||||
|
|
@ -173,4 +177,13 @@ peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc `--peer
|
||||||
As an exercise, try to create a new swap above the auditing threshold and see
|
As an exercise, try to create a new swap above the auditing threshold and see
|
||||||
how validation fails if the auditor is not involved in every operation on the
|
how validation fails if the auditor is not involved in every operation on the
|
||||||
swap. Also try to calculate payment info before settling a prior payment to a
|
swap. Also try to calculate payment info before settling a prior payment to a
|
||||||
swap.
|
swap. You can run the commands yourself using the CLI container by issuing the
|
||||||
|
command ``docker exec -it cli bash``. You will need to set the corresponding
|
||||||
|
environment variables for the organization issuing the command. You refer to the
|
||||||
|
`network/scripts/script.sh` file for more information.
|
||||||
|
|
||||||
|
## Clean up
|
||||||
|
|
||||||
|
When you are finished using the network, you can bring down the docker images
|
||||||
|
and remove any artifacts by running the command `./network.sh down` from the
|
||||||
|
`network` folder.
|
||||||
|
|
|
||||||
|
|
@ -3,27 +3,57 @@
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
|
|
||||||
|
---
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Section: Organizations
|
||||||
|
#
|
||||||
|
# - This section defines the different organizational identities which will
|
||||||
|
# be referenced later in the configuration.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
Organizations:
|
Organizations:
|
||||||
|
|
||||||
|
# SampleOrg defines an MSP using the sampleconfig. It should never be used
|
||||||
|
# in production but may be used as a template for other definitions
|
||||||
- &orderer
|
- &orderer
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
Name: orderer
|
Name: orderer
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
ID: orderer
|
ID: orderer
|
||||||
|
|
||||||
|
# MSPDir is the filesystem path which contains the MSP configuration
|
||||||
MSPDir: crypto-config/ordererOrganizations/example.com/msp
|
MSPDir: crypto-config/ordererOrganizations/example.com/msp
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For organization policies, their canonical path is usually
|
||||||
|
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('orderer.member')
|
Rule: "OR('orderer.member')"
|
||||||
Writers:
|
Writers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('orderer.member')
|
Rule: "OR('orderer.member')"
|
||||||
Admins:
|
Admins:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('orderer.admin')
|
Rule: "OR('orderer.admin')"
|
||||||
|
|
||||||
|
|
||||||
- &partya
|
- &partya
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
Name: partya
|
Name: partya
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
ID: partya
|
ID: partya
|
||||||
|
|
||||||
MSPDir: crypto-config/peerOrganizations/partya.example.com/msp
|
MSPDir: crypto-config/peerOrganizations/partya.example.com/msp
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For organization policies, their canonical path is usually
|
||||||
|
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
|
|
@ -34,14 +64,28 @@ Organizations:
|
||||||
Admins:
|
Admins:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('partya.admin')
|
Rule: OR('partya.admin')
|
||||||
|
|
||||||
|
# leave this flag set to true.
|
||||||
AnchorPeers:
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
- Host: irs-partya
|
- Host: irs-partya
|
||||||
Port: 7051
|
Port: 7051
|
||||||
|
|
||||||
- &partyb
|
- &partyb
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
Name: partyb
|
Name: partyb
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
ID: partyb
|
ID: partyb
|
||||||
|
|
||||||
MSPDir: crypto-config/peerOrganizations/partyb.example.com/msp
|
MSPDir: crypto-config/peerOrganizations/partyb.example.com/msp
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For organization policies, their canonical path is usually
|
||||||
|
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
|
|
@ -52,32 +96,61 @@ Organizations:
|
||||||
Admins:
|
Admins:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('partyb.admin')
|
Rule: OR('partyb.admin')
|
||||||
|
|
||||||
|
# leave this flag set to true.
|
||||||
AnchorPeers:
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
- Host: irs-partyb
|
- Host: irs-partyb
|
||||||
Port: 7051
|
Port: 7051
|
||||||
|
|
||||||
- &partyc
|
- &partyc
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
Name: partyc
|
Name: partyc
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
ID: partyc
|
ID: partyc
|
||||||
|
|
||||||
MSPDir: crypto-config/peerOrganizations/partyc.example.com/msp
|
MSPDir: crypto-config/peerOrganizations/partyc.example.com/msp
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For organization policies, their canonical path is usually
|
||||||
|
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('partyc.admin', 'partyc.peer', 'partyc.client')
|
Rule: "OR('partyc.admin', 'partyc.peer', 'partyc.client')"
|
||||||
Writers:
|
Writers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('partyc.admin', 'partyc.client')
|
Rule: "OR('partyc.admin', 'partyc.client')"
|
||||||
Admins:
|
Admins:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('partyc.admin')
|
Rule: "OR('partyc.admin')"
|
||||||
|
|
||||||
|
# leave this flag set to true.
|
||||||
AnchorPeers:
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
- Host: irs-partyc
|
- Host: irs-partyc
|
||||||
Port: 7051
|
Port: 7051
|
||||||
|
|
||||||
|
|
||||||
- &auditor
|
- &auditor
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
Name: auditor
|
Name: auditor
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
ID: auditor
|
ID: auditor
|
||||||
|
|
||||||
MSPDir: crypto-config/peerOrganizations/auditor.example.com/msp
|
MSPDir: crypto-config/peerOrganizations/auditor.example.com/msp
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For organization policies, their canonical path is usually
|
||||||
|
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
|
|
@ -88,90 +161,254 @@ Organizations:
|
||||||
Admins:
|
Admins:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('auditor.admin')
|
Rule: OR('auditor.admin')
|
||||||
|
|
||||||
|
# leave this flag set to true.
|
||||||
AnchorPeers:
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
- Host: irs-auditor
|
- Host: irs-auditor
|
||||||
Port: 7051
|
Port: 7051
|
||||||
|
|
||||||
- &rrprovider
|
- &rrprovider
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
Name: rrprovider
|
Name: rrprovider
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
ID: rrprovider
|
ID: rrprovider
|
||||||
|
|
||||||
MSPDir: crypto-config/peerOrganizations/rrprovider.example.com/msp
|
MSPDir: crypto-config/peerOrganizations/rrprovider.example.com/msp
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For organization policies, their canonical path is usually
|
||||||
|
# /Channel/<Application|Orderer>/<OrgName>/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('rrprovider.admin', 'rrprovider.peer', 'rrprovider.client')
|
Rule: "OR('rrprovider.admin', 'rrprovider.peer', 'rrprovider.client')"
|
||||||
Writers:
|
Writers:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('rrprovider.admin', 'rrprovider.client')
|
Rule: "OR('rrprovider.admin', 'rrprovider.client')"
|
||||||
Admins:
|
Admins:
|
||||||
Type: Signature
|
Type: Signature
|
||||||
Rule: OR('rrprovider.admin')
|
Rule: "OR('rrprovider.admin')"
|
||||||
|
|
||||||
|
# leave this flag set to true.
|
||||||
AnchorPeers:
|
AnchorPeers:
|
||||||
|
# AnchorPeers defines the location of peers which can be used
|
||||||
|
# for cross org gossip communication. Note, this value is only
|
||||||
|
# encoded in the genesis block in the Application section context
|
||||||
- Host: irs-rrprovider
|
- Host: irs-rrprovider
|
||||||
Port: 7051
|
Port: 7051
|
||||||
|
|
||||||
Channel: &ChannelDefaults
|
|
||||||
Capabilities:
|
################################################################################
|
||||||
V1_3: true
|
#
|
||||||
|
# SECTION: Capabilities
|
||||||
|
#
|
||||||
|
# - This section defines the capabilities of fabric network. This is a new
|
||||||
|
# concept as of v1.1.0 and should not be utilized in mixed networks with
|
||||||
|
# v1.0.x peers and orderers. Capabilities define features which must be
|
||||||
|
# present in a fabric binary for that binary to safely participate in the
|
||||||
|
# fabric network. For instance, if a new MSP type is added, newer binaries
|
||||||
|
# might recognize and validate the signatures from this type, while older
|
||||||
|
# binaries without this support would be unable to validate those
|
||||||
|
# transactions. This could lead to different versions of the fabric binaries
|
||||||
|
# having different world states. Instead, defining a capability for a channel
|
||||||
|
# informs those binaries without this capability that they must cease
|
||||||
|
# processing transactions until they have been upgraded. For v1.0.x if any
|
||||||
|
# capabilities are defined (including a map with all capabilities turned off)
|
||||||
|
# then the v1.0.x peer will deliberately crash.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Capabilities:
|
||||||
|
# Channel capabilities apply to both the orderers and the peers and must be
|
||||||
|
# supported by both.
|
||||||
|
# Set the value of the capability to true to require it.
|
||||||
|
Channel: &ChannelCapabilities
|
||||||
|
# V1.4.2 for Channel is a catchall flag for behavior which has been
|
||||||
|
# determined to be desired for all orderers and peers running at the v1.4.2
|
||||||
|
# level, but which would be incompatible with orderers and peers from
|
||||||
|
# prior releases.
|
||||||
|
# Prior to enabling V1.4.2 channel capabilities, ensure that all
|
||||||
|
# orderers and peers on a channel are at v1.4.2 or later.
|
||||||
|
V1_4_2: true
|
||||||
|
|
||||||
|
# Orderer capabilities apply only to the orderers, and may be safely
|
||||||
|
# used with prior release peers.
|
||||||
|
# Set the value of the capability to true to require it.
|
||||||
|
Orderer: &OrdererCapabilities
|
||||||
|
# V1.4.2 for Orderer is a catchall flag for behavior which has been
|
||||||
|
# determined to be desired for all orderers running at the v1.4.2
|
||||||
|
# level, but which would be incompatible with orderers from prior releases.
|
||||||
|
# Prior to enabling V1.4.2 orderer capabilities, ensure that all
|
||||||
|
# orderers on a channel are at v1.4.2 or later.
|
||||||
|
V1_4_2: true
|
||||||
|
|
||||||
|
# Application capabilities apply only to the peer network, and may be safely
|
||||||
|
# used with prior release orderers.
|
||||||
|
# Set the value of the capability to true to require it.
|
||||||
|
Application: &ApplicationCapabilities
|
||||||
|
# V1.4.2 for Application enables the new non-backwards compatible
|
||||||
|
# features and fixes of fabric v1.4.2.
|
||||||
|
V1_4_2: true
|
||||||
|
# V1.3 for Application enables the new non-backwards compatible
|
||||||
|
# features and fixes of fabric v1.3.
|
||||||
|
V1_3: false
|
||||||
|
# V1.2 for Application enables the new non-backwards compatible
|
||||||
|
# features and fixes of fabric v1.2 (note, this need not be set if
|
||||||
|
# later version capabilities are set)
|
||||||
|
V1_2: false
|
||||||
|
# V1.1 for Application enables the new non-backwards compatible
|
||||||
|
# features and fixes of fabric v1.1 (note, this need not be set if
|
||||||
|
# later version capabilities are set).
|
||||||
|
V1_1: false
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# SECTION: Application
|
||||||
|
#
|
||||||
|
# - This section defines the values to encode into a config transaction or
|
||||||
|
# genesis block for application related parameters
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Application: &ApplicationDefaults
|
||||||
|
|
||||||
|
# Organizations is the list of orgs which are defined as participants on
|
||||||
|
# the application side of the network
|
||||||
|
Organizations:
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For Application policies, their canonical path is
|
||||||
|
# /Channel/Application/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Readers
|
Rule: "ANY Readers"
|
||||||
Writers:
|
Writers:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Writers
|
Rule: "ANY Writers"
|
||||||
Admins:
|
Admins:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: MAJORITY Admins
|
Rule: "MAJORITY Admins"
|
||||||
|
|
||||||
Orderer: &OrdererDefaults
|
|
||||||
OrdererType: solo
|
|
||||||
Capabilities:
|
Capabilities:
|
||||||
V1_1: true
|
<<: *ApplicationCapabilities
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# SECTION: Orderer
|
||||||
|
#
|
||||||
|
# - This section defines the values to encode into a config transaction or
|
||||||
|
# genesis block for orderer related parameters
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Orderer: &OrdererDefaults
|
||||||
|
|
||||||
|
# Orderer Type: The orderer implementation to start
|
||||||
|
# Available types are "solo" and "kafka"
|
||||||
|
OrdererType: solo
|
||||||
|
|
||||||
Addresses:
|
Addresses:
|
||||||
- irs-orderer:7050
|
- irs-orderer:7050
|
||||||
|
|
||||||
|
# Batch Timeout: The amount of time to wait before creating a batch
|
||||||
BatchTimeout: 2s
|
BatchTimeout: 2s
|
||||||
|
|
||||||
|
# Batch Size: Controls the number of messages batched into a block
|
||||||
BatchSize:
|
BatchSize:
|
||||||
|
|
||||||
|
# Max Message Count: The maximum number of messages to permit in a batch
|
||||||
MaxMessageCount: 10
|
MaxMessageCount: 10
|
||||||
|
|
||||||
|
# Absolute Max Bytes: The absolute maximum number of bytes allowed for
|
||||||
|
# the serialized messages in a batch.
|
||||||
AbsoluteMaxBytes: 99 MB
|
AbsoluteMaxBytes: 99 MB
|
||||||
|
|
||||||
|
# Preferred Max Bytes: The preferred maximum number of bytes allowed for
|
||||||
|
# the serialized messages in a batch. A message larger than the preferred
|
||||||
|
# max bytes will result in a batch larger than preferred max bytes.
|
||||||
PreferredMaxBytes: 512 KB
|
PreferredMaxBytes: 512 KB
|
||||||
|
|
||||||
|
Kafka:
|
||||||
|
# Brokers: A list of Kafka brokers to which the orderer connects
|
||||||
|
# NOTE: Use IP:port notation
|
||||||
|
Brokers:
|
||||||
|
- 127.0.0.1:9092
|
||||||
|
|
||||||
|
# Organizations is the list of orgs which are defined as participants on
|
||||||
|
# the orderer side of the network
|
||||||
|
Organizations:
|
||||||
|
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For Orderer policies, their canonical path is
|
||||||
|
# /Channel/Orderer/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
Readers:
|
Readers:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Readers
|
Rule: "ANY Readers"
|
||||||
Writers:
|
Writers:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Writers
|
Rule: "ANY Writers"
|
||||||
Admins:
|
Admins:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: MAJORITY Admins
|
Rule: "MAJORITY Admins"
|
||||||
|
# BlockValidation specifies what signatures must be included in the block
|
||||||
|
# from the orderer for the peer to validate it.
|
||||||
BlockValidation:
|
BlockValidation:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Writers
|
Rule: "ANY Writers"
|
||||||
Organizations:
|
|
||||||
|
|
||||||
Application: &ApplicationDefaults
|
################################################################################
|
||||||
Capabilities:
|
#
|
||||||
V1_3: true
|
# CHANNEL
|
||||||
|
#
|
||||||
|
# This section defines the values to encode into a config transaction or
|
||||||
|
# genesis block for channel related parameters.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
Channel: &ChannelDefaults
|
||||||
|
# Policies defines the set of policies at this level of the config tree
|
||||||
|
# For Channel policies, their canonical path is
|
||||||
|
# /Channel/<PolicyName>
|
||||||
Policies:
|
Policies:
|
||||||
|
# Who may invoke the 'Deliver' API
|
||||||
Readers:
|
Readers:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Readers
|
Rule: "ANY Readers"
|
||||||
|
# Who may invoke the 'Broadcast' API
|
||||||
Writers:
|
Writers:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: ANY Writers
|
Rule: "ANY Writers"
|
||||||
|
# By default, who may modify elements at this config level
|
||||||
Admins:
|
Admins:
|
||||||
Type: ImplicitMeta
|
Type: ImplicitMeta
|
||||||
Rule: MAJORITY Admins
|
Rule: "MAJORITY Admins"
|
||||||
Organizations:
|
|
||||||
|
|
||||||
|
# Capabilities describes the channel level capabilities, see the
|
||||||
|
# dedicated Capabilities section elsewhere in this file for a full
|
||||||
|
# description
|
||||||
|
Capabilities:
|
||||||
|
<<: *ChannelCapabilities
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Profile
|
||||||
|
#
|
||||||
|
# - Different configuration profiles may be encoded here to be specified
|
||||||
|
# as parameters to the configtxgen tool
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
Profiles:
|
Profiles:
|
||||||
|
|
||||||
IRSNetGenesis:
|
IRSNetGenesis:
|
||||||
<<: *ChannelDefaults
|
<<: *ChannelDefaults
|
||||||
Orderer:
|
Orderer:
|
||||||
<<: *OrdererDefaults
|
<<: *OrdererDefaults
|
||||||
Organizations:
|
Organizations:
|
||||||
- *orderer
|
- *orderer
|
||||||
|
Capabilities:
|
||||||
|
<<: *OrdererCapabilities
|
||||||
Consortiums:
|
Consortiums:
|
||||||
SampleConsortium:
|
SampleConsortium:
|
||||||
Organizations:
|
Organizations:
|
||||||
|
|
@ -182,11 +419,21 @@ Profiles:
|
||||||
- *auditor
|
- *auditor
|
||||||
IRSChannel:
|
IRSChannel:
|
||||||
Consortium: SampleConsortium
|
Consortium: SampleConsortium
|
||||||
|
<<: *ChannelDefaults
|
||||||
Application:
|
Application:
|
||||||
<<: *ApplicationDefaults
|
<<: *ApplicationDefaults
|
||||||
Organizations:
|
Organizations:
|
||||||
- *partya
|
- *partya
|
||||||
- *partyb
|
- *partyb
|
||||||
- *partyc
|
- *partyc
|
||||||
- *rrprovider
|
- *rrprovider
|
||||||
- *auditor
|
- *auditor
|
||||||
|
Capabilities:
|
||||||
|
<<: *ApplicationCapabilities
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,7 @@ function generateChannelArtifacts() {
|
||||||
|
|
||||||
echo "######### Generating Orderer Genesis block ##############"
|
echo "######### Generating Orderer Genesis block ##############"
|
||||||
mkdir channel-artifacts
|
mkdir channel-artifacts
|
||||||
configtxgen -profile IRSNetGenesis -outputBlock ./channel-artifacts/genesis.block
|
configtxgen -profile IRSNetGenesis -outputBlock ./channel-artifacts/genesis.block -channelID system-channel
|
||||||
res=$?
|
res=$?
|
||||||
if [ $res -ne 0 ]; then
|
if [ $res -ne 0 ]; then
|
||||||
echo "Failed to generate orderer genesis block..."
|
echo "Failed to generate orderer genesis block..."
|
||||||
|
|
@ -184,9 +184,6 @@ function generateChannelArtifacts() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Obtain the OS and Architecture string that will be used to select the correct
|
|
||||||
# native binaries for your platform, e.g., darwin-amd64 or linux-amd64
|
|
||||||
OS_ARCH=$(echo "$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')
|
|
||||||
CHANNEL_NAME="irs"
|
CHANNEL_NAME="irs"
|
||||||
COMPOSE_FILE=docker-compose.yaml
|
COMPOSE_FILE=docker-compose.yaml
|
||||||
COMPOSE_PROJECT_NAME=fabric-irs
|
COMPOSE_PROJECT_NAME=fabric-irs
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ instantiateChaincode() {
|
||||||
CORE_PEER_ADDRESS=irs-partya:7051
|
CORE_PEER_ADDRESS=irs-partya:7051
|
||||||
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/partya.example.com/users/Admin@partya.example.com/msp
|
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/partya.example.com/users/Admin@partya.example.com/msp
|
||||||
echo "===================== Instantiating chaincode ===================== "
|
echo "===================== Instantiating chaincode ===================== "
|
||||||
peer chaincode instantiate -o irs-orderer:7050 -C irs -n irscc -l golang -v 0 -c '{"Args":["init","auditor","100000","rrprovider","myrr"]}' -P "AND(OR('partya.peer','partyb.peer','partyc.peer'), 'auditor.peer')"
|
peer chaincode instantiate -o irs-orderer:7050 -C irs -n irscc -l golang -v 0 -c '{"Args":["init","auditor","1000000","rrprovider","myrr"]}' -P "AND(OR('partya.peer','partyb.peer','partyc.peer'), 'auditor.peer')"
|
||||||
echo "===================== Chaincode instantiated ===================== "
|
echo "===================== Chaincode instantiated ===================== "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,7 +64,7 @@ createSwap() {
|
||||||
CORE_PEER_ADDRESS=irs-partya:7051
|
CORE_PEER_ADDRESS=irs-partya:7051
|
||||||
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/partya.example.com/users/User1@partya.example.com/msp
|
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/partya.example.com/users/User1@partya.example.com/msp
|
||||||
echo "===================== Invoking chaincode ===================== "
|
echo "===================== Invoking chaincode ===================== "
|
||||||
peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc --peerAddresses irs-partya:7051 --peerAddresses irs-partyb:7051 --peerAddresses irs-auditor:7051 -c '{"Args":["createSwap","myswap","{\"StartDate\":\"2018-09-27T15:04:05Z\",\"EndDate\":\"2018-09-30T15:04:05Z\",\"PaymentInterval\":395,\"PrincipalAmount\":10,\"FixedRate\":400,\"FloatingRate\":500,\"ReferenceRate\":\"myrr\"}", "partya", "partyb"]}'
|
peer chaincode invoke -o irs-orderer:7050 -C irs --waitForEvent -n irscc --peerAddresses irs-partya:7051 --peerAddresses irs-partyb:7051 --peerAddresses irs-auditor:7051 -c '{"Args":["createSwap","myswap","{\"StartDate\":\"2018-09-27T15:04:05Z\",\"EndDate\":\"2018-09-30T15:04:05Z\",\"PaymentInterval\":395,\"PrincipalAmount\":100000,\"FixedRate\":400,\"FloatingRate\":500,\"ReferenceRate\":\"myrr\"}", "partya", "partyb"]}'
|
||||||
echo "===================== Chaincode invoked ===================== "
|
echo "===================== Chaincode invoked ===================== "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue