* Fix creating channel when ${PWD} contains space.
If the path of the project contains spaces, the "test-network/scripts/envVar.sh" script sets the value of "$ORDERER_CA" to a value containg "${PWD}" which, in turn, contains space(s).
When the variable used in "test-network/scripts/createChannel.sh", The first part of the value (before the first space) is handled as the whole value for "--cafile". Other parts are considered to be part of the command!
I tried putting (escaped) quotes in the "test-network/scripts/envVar.sh" definition for the variable "$ORDERER_CA" to make the fix more general, but the quotation marks were sometime interpreted to be part of the path that consisted of concatenated parts somewhere and it did not work.
While this edit will fix this issue, I belive this is just a work around. I expect that there is a better way to solve the root cause of the problem instead of just fixing it in one place. Moreover, All variables/paths that may include spaces should be properly handled as well.
Thanks
Signed-off-by: Waleed Mortaja <waleedmortaja@protonmail.com>
* Double quote variables evaluations that depends on $PWD
I tried to handle most (if not all) of the variables evaluations in the project that depends on $PWD by wrapping them in double-quotations to avoid values that contains white spaces.
Some lines I was not sure if they are Okay or not but I left them as they are. Samples (not all lines) as follows:
- commercial-paper/network-clean.sh:15:DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
- commercial-paper/network-starter.sh:15:DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
- asset-transfer-basic/chaincode-javascript/node_modules/fabric-shim/coverage/fabric-shim/lib/chaincode.js.html:997: optsCpy.pem = fs.readFileSync(process.env.CORE_PEER_TLS_ROOTCERT_FILE).toString();
- commercial-paper/organization/digibank/digibank.sh:29:export PEER_PARMS="${PEER_CONN_PARMS##*( )}"
The next sample I was not really sure, but still edited it:
- test-network/addOrg3/fabric-ca/registerEnroll.sh:68: cp ${PWD}/../organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/tlscacerts/* ${PWD}/../organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt
I deliberately ignored some lines because I think they are not problem. These lines include:
- `export` sentences
- assignment sentences like: test-network/scripts/createChannel.sh:48: FABRIC_CFG_PATH=$PWD/../config/
- gradlew files: the line SAVED="`pwd`"
- gradlew files: the line APP_HOME="`pwd -P`"
- gradlew files: the line CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
Signed-off-by: Waleed Mortaja <waleedmortaja@protonmail.com>
* remove unnecessary leading space trimming
Signed-off-by: Waleed Mortaja <waleedmortaja@protonmail.com>
* resolved conflict with master
Co-authored-by: Arnaud J Le Hors <lehors@us.ibm.com>
|
||
|---|---|---|
| .github | ||
| asset-transfer-abac | ||
| asset-transfer-basic | ||
| asset-transfer-events | ||
| asset-transfer-ledger-queries | ||
| asset-transfer-private-data | ||
| asset-transfer-sbe | ||
| asset-transfer-secured-agreement | ||
| auction | ||
| chaincode | ||
| ci | ||
| commercial-paper | ||
| fabcar | ||
| high-throughput | ||
| interest_rate_swaps | ||
| off_chain_data | ||
| scripts | ||
| test-application/javascript | ||
| test-network | ||
| token-erc-20 | ||
| token-utxo | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CODEOWNERS | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| MAINTAINERS.md | ||
| README.md | ||
| SECURITY.md | ||
Hyperledger Fabric Samples
You can use Fabric samples to get started working with Hyperledger Fabric, explore important Fabric features, and learn how to build applications that can interact with blockchain networks using the Fabric SDKs. To learn more about Hyperledger Fabric, visit the Fabric documentation.
Getting started with the Fabric samples
To use the Fabric samples, you need to download the Fabric Docker images and the Fabric CLI tools. First, make sure that you have installed all of the Fabric prerequisites. You can then follow the instructions to Install the Fabric Samples, Binaries, and Docker Images in the Fabric documentation. In addition to downloading the Fabric images and tool binaries, the Fabric samples will also be cloned to your local machine.
Test network
The Fabric test network in the samples repository provides a Docker Compose based test network with two Organization peers and an ordering service node. You can use it on your local machine to run the samples listed below. You can also use it to deploy and test your own Fabric chaincodes and applications. To get started, see the test network tutorial.
Asset transfer samples and tutorials
The asset transfer series provides a series of sample smart contracts and applications to demonstrate how to store and transfer assets using Hyperledger Fabric. Each sample and associated tutorial in the series demonstrates a different core capability in Hyperledger Fabric. The Basic sample provides an introduction on how to write smart contracts and how to interact with a Fabric network using the Fabric SDKs. The Ledger queries, Private data, and State-based endorsement samples demonstrate these additional capabilities. Finally, the Secured agreement sample demonstrates how to bring all the capabilities together to securely transfer an asset in a more realistic transfer scenario.
| Smart Contract | Description | Tutorial | Smart contract languages | Application languages |
|---|---|---|---|---|
| Basic | The Basic sample smart contract that allows you to create and transfer an asset by putting data on the ledger and retrieving it. This sample is recommended for new Fabric users. | Writing your first application | Go, JavaScript, TypeScript, Java | Go, JavaScript, TypeScript, Java |
| Ledger queries | The ledger queries sample demonstrates range queries and transaction updates using range queries (applicable for both LevelDB and CouchDB state databases), and how to deploy an index with your chaincode to support JSON queries (applicable for CouchDB state database only). | Using CouchDB | Go, JavaScript | Java, JavaScript |
| Private data | This sample demonstrates the use of private data collections, how to manage private data collections with the chaincode lifecycle, and how the private data hash can be used to verify private data on the ledger. It also demonstrates how to control asset updates and transfers using client-based ownership and access control. | Using Private Data | Go, Java | JavaScript |
| State-Based Endorsement | This sample demonstrates how to override the chaincode-level endorsement policy to set endorsement policies at the key-level (data/asset level). | Using State-based endorsement | Java, TypeScript | JavaScript |
| Secured agreement | Smart contract that uses implicit private data collections, state-based endorsement, and organization-based ownership and access control to keep data private and securely transfer an asset with the consent of both the current owner and buyer. | Secured asset transfer | Go | JavaScript |
| Events | The events sample demonstrates how smart contracts can emit events that are read by the applications interacting with the network. | README | JavaScript, Java | JavaScript |
| Attribute-based access control | Demonstrates the use of attribute and identity based access control using a simple asset transfer scenario | README | Go | None |
Additional samples
Additional samples demonstrate various Fabric use cases and application patterns.
| Sample | Description | Documentation |
|---|---|---|
| Commercial paper | Explore a use case and detailed application development tutorial in which two organizations use a blockchain network to trade commercial paper. | Commercial paper tutorial |
| Off chain data | Learn how to use the Peer channel-based event services to build an off-chain database for reporting and analytics. | Peer channel-based event services |
| Token ERC-20 | Smart contract demonstrating how to create and transfer fungible tokens using an account-based model. | README |
| Token UTXO | Smart contract demonstrating how to create and transfer fungible tokens using a UTXO (unspent transaction output) model. | README |
| High throughput | Learn how you can design your smart contract to avoid transaction collisions in high volume environments. | README |
| Auction | Run an auction where bids are kept private until the auction is closed, after which users can reveal their bid | README |
| Chaincode | A set of other sample smart contracts, many of which were used in tutorials prior to the asset transfer sample series. | |
| Interest rate swaps | Deprecated in favor of state based endorsement asset transfer sample | |
| Fabcar | Deprecated in favor of basic asset transfer sample |
License
Hyperledger Project source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the LICENSE file. Hyperledger Project documentation files are made available under the Creative Commons Attribution 4.0 International License (CC-BY-4.0), available at http://creativecommons.org/licenses/by/4.0/.