Изменение свойства массива ресурса (участника) во время транзакции - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу изменить свойство участника, которое представляет собой массив отношений во время транзакции.

Давайте предположим, что у меня есть пользователь, который содержит массив ключей, например:

participant User identified by userId {
    o String userId
    --> Key[] keys
}

asset Key identified by keyId {
    o String keyId
}

transaction modifyUserKeys {
    --> User user
}

Затем в функции процессора транзакций я изменяю массив (как при добавлении и удалении элементов в нем)и обновите участника:

function modifyUserKeys(tx) {
    let user = tx.user;

    // create a new key via factory 
    var newKey = ...

    user.keys.push(newKey);

    return getParticipantRegistry('com.sample.User')
    .then(function (participantRegistry) {
        return participantRegistry.update(user);
    });
}

В документации я увидел метод с именем addArrayValue(), который добавляет элемент в массив.Теперь я не уверен, собираюсь ли я использовать это вместо обычных манипуляций с массивами, как в моем примере.

Какую цель имеет этот метод addArrayValue(), и я могу, например, удалить элементы из keys через keys.pop() или он ограничен только добавлением новых элементов, как предполагает документация?

1 Ответ

0 голосов
/ 21 ноября 2018

вы можете использовать обычный (push / pop), если хотите (и как вы сделали с массивом), но newKey потребуется использовать newRelationship()

полезный пример, подобный тому, чтовы пытаетесь достичь здесь -> https://github.com/hyperledger/composer-sample-networks/blob/master/packages/fund-clearing-network/lib/clearing.js#L151 в примерах сетей Composer - addArrayValue() также подтверждает, что это не нарушает модель

...