Это мое текущее состояние композитора.Ничего особенного ...
Файл сценария:
* global getAssetRegistry getFactory emit */
/**
* Sample transaction processor function.
* @param {org.example.basic.SampleTransaction} tx The sample transaction instance.
* @transaction
*/
async function sampleTransaction(tx) { // eslint-disable-line no-unused-vars
// 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.SecretAsset');
// 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);
}
/**
*
* @param {org.example.basic.SetupDemo} setupDemo - SetupDemo instance
* @transaction
*/
async function setupDemo(setupDemo) { // eslint-disable-line no-unused-vars
const factory = getFactory();
const NS = 'org.example.basic';
const MPC_Participant = [
factory.newResource(NS, 'MPC_Participant', 'P1'),
factory.newResource(NS, 'MPC_Participant', 'P2'),
factory.newResource(NS, 'MPC_Participant', 'P3'),
factory.newResource(NS, 'MPC_Participant', 'P4'),
];
MPC_Participant.forEach(function(MPC_Participant) {
MPC_Participant.participantId = MPC_Participant.getIdentifier();
MPC_Participant.number = String(Math.floor(Math.random() * (20 - 10 + 1)) + 10);
});
const MPC_ParticipantRegistry = await getParticipantRegistry(NS + '.MPC_Participant');
await MPC_ParticipantRegistry.addAll(MPC_Participant);
//add asset to each participant
const SecretAsset = [
factory.newResource(NS, 'SecretAsset', 'I1'),
factory.newResource(NS, 'SecretAsset', 'I2'),
factory.newResource(NS, 'SecretAsset', 'I3'),
factory.newResource(NS, 'SecretAsset', 'I4'),
];
SecretAsset.forEach(function(SecretAsset, index) {
const par = 'P' + (index + 1);
SecretAsset.assetId = SecretAsset.assetId;
SecretAsset.owner = factory.newRelationship(NS, 'MPC_Participant', par);
SecretAsset.value = String(Math.floor(Math.random() * (20 - 10 + 1)) + 10);
});
const SecretAssetRegistry = await getAssetRegistry(NS + '.SecretAsset');
await SecretAssetRegistry.addAll(SecretAsset);
}
Модель:
/**
* Sample business network definition.
*/
namespace org.example.basic
asset SecretAsset identified by assetId {
o String assetId
--> MPC_Participant owner
o String value
}
participant MPC_Participant identified by participantId {
o String participantId
o String number
}
transaction SampleTransaction {
--> SecretAsset asset
o String newValue
}
transaction SetupDemo {
}
event SampleEvent {
--> SecretAsset asset
o String oldValue
o String newValue
}
Теперь я хочу реализовать что-то вроде этого:
Участник 1 отправляет свой актив Участнику 2, как добавляется, и после того, как этот Участник 2 отправляет это значение Partizipant 3 ... и т. Д.
Каков наилучший способ реализации подобных вещей?Есть ли примеры? .. Я не хочу добавлять все эти транзакции вручную ... как мой SetupDemo ...
Как это возможно, что все эти транзакции могут быть отображены в журнале транзакций... Что-то вроде транзакции, которая выполняет все остальные транзакции отдельно.
с помощью моего noobie blockchain в Java Я сделал что-то вроде этого:
int sum = 0;
for(int i = 0; i < numberParticipants; i++){
Block block = new Block(getLastBlock().hash);
for(int n = 0; n < numberParticipants; n++){
sum += participants.get(n).getValue(n);
if(n+1 !=numberParticipants){
block.addTransaction(participants.get(n).sendValue(participants.get(n+1).publicKey, sum));
else{
block.addTransaction(participants.get(n).sendValue(participants.get(0).publicKey, sum));
}
addBlock(block);
}
Есть идеи, примеры?