Автоматически выполнять транзакции в Hyperledger Composer - PullRequest
0 голосов
/ 25 мая 2018

Это мое текущее состояние композитора.Ничего особенного ...

Файл сценария:

* 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);    
            }

Есть идеи, примеры?

1 Ответ

0 голосов
/ 27 мая 2018

Вы можете переместить несколько активов за одну транзакцию, но у вас будет одна запись в реестре Historian (список всех транзакций).Или вы можете иметь бэкэнд, выполняющий несколько транзакций.Но вы не можете иметь транзакцию, создающую другую транзакцию, насколько я понимаю.Выполнение транзакции является сложной процедурой, с одобрениями и консенсусом и всем прочим, поэтому выполнение других транзакций было бы слишком много.

...