- https://stackoverflow.com/questions/55358598/what-is-the-difference-between-a-cryptokeystore-and-a-wallet-in-hyperledger-fabr
- https://stackoverflow.com/questions/64202435/accessing-private-keys-in-hyperledger-fabric-2-0-from-a-webclient-using-javascri
- https://github.com/FahimDev/Private-Blockchain-SampleWallet
- https://github.com/IBM/fabric-postgres-wallet
- https://medium.com/coinmonks/the-secret-gem-of-hyperleder-fabric-fabtoken-aa5c37159247
- https://medium.com/@blockchain_simplified/creating-tokens-on-hyperledger-fabric-2-0-using-fabtoken-management-system-3c9689c0a99d
- https://medium.com/@jushuspace/hyperledger-fabric-event-listener-tutorial-2484614a9e4
- https://medium.com/coinmonks/tutorial-chaincode-event-listener-on-hyperledger-fabric-java-sdk-557304f1fe28
- https://stackoverflow.com/questions/48558344/hyperledger-fabric-chaincode-events
- https://stackoverflow.com/questions/46462151/how-to-listen-to-the-eventcommit-event-in-hyperledger-fabric
- https://ibm.github.io/hlf-internals/shim-architecture/interaction-flow/chaincode-events/
- https://stackoverflow.com/questions/54092643/when-does-blockevent-listener-being-triggered-during-the-lifecycle-of-the-transa
- https://stackoverflow.com/questions/51383181/listen-to-a-custom-chaincode-event-in-hyperledger-fabric/51406190#51406190
- https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/chaincodenamespace.html#cross-chaincode-access
- https://stackoverflow.com/questions/67070302/how-to-use-invokechaincode-api
- https://github.com/asararatnakar/fabric_v1_Chaincode_instructions/blob/master/call-chaincode-to-chaincode-nondefault-chain.md
- https://github.com/thaonguyentien/BC/blob/d1104a2ba5c9bb5b605d607e4c9f0d9317934524/fabric-k8s/chaincode/crosschaincode/crosschaincode.go
- https://stackoverflow.com/questions/58163924/is-there-a-best-practice-to-invoke-cross-channel-transaction
- https://arnabkaycee.github.io/fabric-cc-best-practices-golang/
- https://github.com/lushena/fabric-cross-agent
- https://jira.hyperledger.org/browse/FAB-1788
- https://www.blockchainexpert.uk/blog/external-chaincode-service-in-hyperledger-fabric
- https://hyperledger-fabric.readthedocs.io/en/release-2.2/cc_launcher.html
- https://github.com/vanitas92/fabric-external-chaincodes
- https://deeptiman.medium.com/offchain-storage-in-hyperledger-fabric-77e28bd99e0c
- https://hackernoon.com/making-a-case-for-offchain-storage-in-hyperledger-fabric-deep-dive-2f8g32v0
- https://blog.softwaremill.com/concurrent-smart-contracts-in-hyperledger-fabric-blockchain-part-1-bba32b2c0e08
- https://blog.softwaremill.com/concurrent-smart-contracts-in-hyperledger-fabric-blockchain-part-2-fc09af32e48d
- Reference >> https://ibm.github.io/hlf-internals/shim-architecture/interaction-flow/transaction-processing/
- Transaction proposals are executed asynchronously leaving main thread to process other requests
- Chaincode initialisation and transaction execution is handled differently
- Chaincode setup, gRPC communication, protocol execution, interfacing, configuration, business logic
- deserialisation (unmarshalling) of the ChaincodeInput instance from the ChaincodeMessage payload;
- creation of a new instance of the ChaincodeStub and configuration of the transaction context
- It comprises of channel identifier, transaction identifier, input (i.e. ChaincodeInput) and signed proposal;
- invocation of the Chaincode.Init(ChaincodeStub) or Chaincode.Invoke(ChaincodeStub) method.
- bidirectional communication stream with the peer
- The shim is responsible for starting and coordinating the interaction between the Chaincode implementation and the peer processes.
- Structs are required to be marshalled to JSON string before putting into chaincode state and unmarshalled after receiving from state.
- Once a peer is defined as an anchor peer for a channel - it automatically is anchor peer for all other channels that it participates in.
- The anchor tracking is being done at org msp level, even thouh it is defined at channel level.
- The Gateway runs as a gRPC server
- The client credentials are never passed to the Gateway
- Client applications are responsible for managaing their user keys
- Client applications can use the SDK Wallets for this purpose
- A set of files containing all the necessary information for OSN to join a channel from an arbitrary block.
- It is the construction of a snapshot of a channel at a particular block height
- Using this peers can join a channel using snapshot as a starting date
- This is the ability to bootstrap a peer from latest channel configurations
- a new operation to purge the private data via chaincode shim that allows the deletion of private data keys from the statedb
- It also enable purging of all the historical versions of the supplied keys from the private data store permanently.
- Range queries supported by fabric chaincode use Merkle trees to optimize storage of a range of keys read in a transaction.
- Hyperledger Fabric uses an Optimistic Locking Model while committing transactions.
- If you have access to your organization admin's private key and certificate, You can use these to load an identity to a Wallet.
- You can now use this admin identity to connect to the org CA and request to register and enroll more users as required.
- An identity object can be created from the credentials supplied to you by your administrator or certificate authority
- you have to distinguish a CA administrator from a organization administrator.
- You first enroll the CA administrator, otherwise you cannot register identities.
- An organization admin is simply an identity with role admin for the organization.