Resources Allowed for Certification
Hyperledger Fabric
Node.js / JavaScript
Begriffe
- Ref: https://hyperledger-fabric.readthedocs.io/en/latest/ledger/ledger.html#the-ledger
- Actor: Is an Participants like peers, users, orderers.
- Identity: Every actor has an identity certificate.
- Leger: Record all state transitions, result of chaincode invocations "transactions". One Leger per Channel. Ledger consists of (World-State/Blockchain)
- Blockchain: is a transaction log/history that records all the changes/modifications that have resulted in the current world-state. Is immutable (unchangeable).
- World-State: is a database that represent the current values of ledger states.
- Smart-Contract: Software-Program that defines business logic.
- Chaincode: A Smart-Contract packaged in a Chaincode then deployed to blockchain-network.
- Client-Application: interact with blockchain network on behalf of useres.
- Wallet: contains a sset of user identities to connects to a channel
- Gateway: manges the network interactions on behalf of application.
- Transaction:
- Wallet: contains a set of user identities. With these identities user connects to a channel and access a leger.
Components
- Ref: https://hyperledger-fabric.readthedocs.io/en/release-2.2/peers/peers.html
- Blockchain-Network:
- Channel: Each channel has a completely separate ledger. This means a completely separate blockchain, and completely separate world-states.
- CA (Certificate authorities): Issue identities by generating public and private key forming key-pair that can be used to prove an identity.
- MSP (Memberahip Service Provider): contains a list of permissioned identities (public keys).
- Peer: Is a Nodes that host a ledger and a Smart-Contract/Chaincode. Chaincodes generate transaction and access the leger.
- Orderer:
Chaincode Deployment/Upgrade
- Package the chaincode.
- Install the chaincode package.
- Approval the chaincode definition.
- Commit the chaincode defintion to a channel.
Commands
peer lifecycle chaincode package $PACKAGE_NAME.tar.gz --path $PATH_SOURCECODE --lang $LANG --label $LABEL
peer lifecycle chaincode install $PACKAGE_NAME.tat.gz
peer lifecycle chaincode queryinstalled
peer lifecycle chaincode approveformyorg --orderer $ORDERER --channelID $CHANNEL_ID --name $CHAINCOD_NAME --version 1.0 --package-id $PACKAGE_ID --sequence 1
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_ID --name $CHAINCOD_NAME --version 1.0 --sequence 1 --output json
peer lifecycle chaincode commit --orderer $ORDERER --channelID $CHANNEL_ID --name $CHAINCODE_NAME --version 1.0 --sequence 1 --peerAddresses $PEER_ADDRESSE
peer lifecycle chaincode querycommitted --channelID $CHANNEL_ID --name $CHAINCODE_NAME
peer chaincode invoke/query --orderer $ORDERER --channelID $CHANNEL_ID --name $CHAINCODE_NAME --ctor $MASSAGE
------------------------------------------------------------------------------------------------------------------
./network.sh deployCC -ccn $NAME -ccl javascript -ccp $PATH -ccv 1.0 -ccs 1 -cci init
Dev-Chaincode
ctx.stub.getState(key);
ctx.stub.deleteState(key);
ctx.stub.putState(key,value);
ctx.stub.getStateByRange(keyFrom, keyTo);
---------------------------------------------------------
ctx.stub.createCompositeKey(objType, [key]);
ctx.stub.splitCompositeKey(key);
ctx.stub.getStateByPartialCompositeKey(objType, []);
---------------------------------------------------------
ctx.stub.getQueryResult(queryString);
ctx.stub.getHistoryForKey(compositeKey);
---------------------------------------------------------
ctx.clientIdentity.getMSPID();
ctx.clientIdentity.getID();
---------------------------------------------------------
ctx.stub.invokeChaincode(chaincode, args, channel);
Dev-Application
- Interaction with blockchain-network (Channel & Chaincode) through a Gateway. (fabric-network)
- CA-Actions: Register user, enroll user, revoke a user. (fabric-ca-client)
- Wallet-Types: FileSystemWallet, InMemoryWallet, CouchDBWallet
- Gateway: Connection profile/configuration
await Wallets.newFileSystemWallet('./wallet');
await wallet.put(identityLabel, identity);
await wallet.get(identityLabel);
await wallet.remove(identityLabel);
await wallet.list();
-----------------------------------------------------
npm init -y
npm install
node addToWallet.js