BNA for Basic CU
option
It will demonstrates the core functionality
of Hyperledger Composer by changing the value of an asset.
Participant - SampleParticipant
Asset -
SampleAsset
Transaction - SampleTransaction
Event - SampleEvent
SampleAssets are owned by a
SampleParticipant, and the value property on a SampleAsset can be modified by
submitting a SampleTransaction. The SampleTransaction emits a SampleEvent that
notifies applications of the old and new values for each modified SampleAsset.
Create a
SampleParticipant
participant:
{
"$class": "org.example.basic.SampleParticipant",
"participantId": "EMP1",
"firstName": "Manish",
"lastName": "Jain"
}
Create
a
SampleAsset
asset:
{
"$class": "org.example.basic.SampleAsset",
"assetId": "assetId:1",
"owner": "resource:org.example.basic.SampleParticipant#EMP1",
"value": "HP Laptop"
}
Submit
a
SampleTransaction
transaction:
{
"$class": "org.example.basic.SampleTransaction",
"asset":
"resource:org.example.basic.SampleAsset#assetId:1",
"newValue": "Dell Laptop"
}
After submitting this transaction, you should
now see the transaction in the Transaction Registry and that a
SampleEvent
has
been emitted. As a result, the value of the assetId:1
should
now be new value
in the Asset Registry.
'o' indicates has-a relationship
'-->'
indicates pass by reference
Models/Sample.cto
namespace org.example.basic
asset SampleAsset identified by assetId {
o
String assetId
--> SampleParticipant owner
o
String value
}
participant SampleParticipant identified by
participantId {
o
String participantId
o
String firstName
o
String lastName
}
transaction SampleTransaction {
--> SampleAsset asset
o
String newValue
}
event SampleEvent {
--> SampleAsset asset
o
String oldValue
o
String newValue
}
Lib/sample.js
async function sampleTransaction(tx) {
// Save the old
value of the asset.
const oldValue
= tx.asset.value;
// Update the
asset with the new value.
tx.asset.value
= tx.newValue;
// Get the
asset registry for the asset.
const
assetRegistry = await getAssetRegistry('org.example.basic.SampleAsset');
// Update the
asset in the asset registry.
await assetRegistry.update(tx.asset);
// Emit an
event for the modified asset.
let event =
getFactory().newEvent('org.example.basic', 'SampleEvent');
event.asset =
tx.asset;
event.oldValue
= oldValue;
event.newValue
= tx.newValue;
emit(event);
}
Permission.acl
rule EverybodyCanReadEverything {
description:
"Allow all participants read access to all resources"
participant:
"org.example.basic.SampleParticipant"
operation: READ
resource:
"org.example.basic.*"
action: ALLOW
}
rule EverybodyCanSubmitTransactions {
description:
"Allow all participants to submit transactions"
participant:
"org.example.basic.SampleParticipant"
operation:
CREATE
resource:
"org.example.basic.SampleTransaction"
action: ALLOW
}
rule OwnerHasFullAccessToTheirAssets {
description:
"Allow all participants full access to their assets"
participant(p):
"org.example.basic.SampleParticipant"
operation: ALL
resource(r):
"org.example.basic.SampleAsset"
condition:
(r.owner.getIdentifier() === p.getIdentifier())
action: ALLOW
}
rule SystemACL {
description:
"System ACL to permit all access"
participant:
"org.hyperledger.composer.system.Participant"
operation: ALL
resource:
"org.hyperledger.composer.system.**"
action: ALLOW
}
rule NetworkAdminUser {
description:
"Grant business network administrators full access to user resources"
participant:
"org.hyperledger.composer.system.NetworkAdmin"
operation: ALL
resource:
"**"
action: ALLOW
}
rule NetworkAdminSystem {
description:
"Grant business network administrators full access to system
resources"
participant:
"org.hyperledger.composer.system.NetworkAdmin"
operation: ALL
resource:
"org.hyperledger.composer.system.**"
action: ALLOW
}
No comments:
Post a Comment