在交易期间修改资源(参与者)的数组属性

Modifying an array property of a resource (participant) during a transaction

我想修改参与者的 属性,它是交易期间的一系列关系。

让我们假设我有一个用户持有一组键,如下所示:

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

documentation 中,我看到了一个名为 addArrayValue() 的方法,它向数组添加一个元素。现在我不确定我是否打算像我的例子那样在传统的数组操作上使用它。

这个 addArrayValue() 方法的目的是什么?通过 keys.pop()keys 中删除元素,还是仅限于像文档建议的那样添加新元素?

如果愿意,您可以使用常规 (push/pop)(就像您在数组上所做的那样),但是 newKey 需要使用 newRelationship()

这里有一个类似于您要实现的有用示例 -> Composer 示例网络中的 https://github.com/hyperledger/composer-sample-networks/blob/master/packages/fund-clearing-network/lib/clearing.js#L151 - addArrayValue() 也在验证它不违反模型