Этот вопрос основан на моей попытке адаптировать образец 'скоропортящаяся сеть' (https://github.com/hyperledger/composer-sample-networks/tree/master/packages/perishable-network) для моей работы.
Предположим, у меня есть актив компилятора hyperledger, который называется ShippingContract. Теперь я хотел быхотел бы записать время создания контракта в этом активе (скажем, когда вызывается функция createContract ()). Как я могу этого добиться? Я использовал элемент DateTime, который был задан в коде цепи.
Несколько статей/ posts (некоторые о самом SO), которые говорят об этом, предполагают, что мы не должны хранить случайное / текущее время в объекте DateTime через цепной код, поскольку во время консенсуса каждый подтверждающий / фиксирующий узел будет иметь различное значение и приводить к неудаче транзакции!
В образце скоропортящейся сети используется переменная-член DateTime, но она задается с использованием значения метки времени транзакции setupdemo в самом коде транзакции setupDemo!
const tomorrow = setupDemo.timestamp;
tomorrow.setDate(tomorrow.getDate() + 1);
contract.arrivalDateTime = tomorrow;
Первый вопрос: как это возможноОбратитесь к метке времени транзакции внутри самой транзакции?эта временная метка установлена, когда индоссанты впервые подтверждают транзакцию?
Второй вопрос: я думал, что вместо переменной-члена DateTime, возможно, было бы лучше использовать переменную String и установить для нее новое Date (). toString ()(Функция Javascript), а затем передайте его в качестве параметра в функцию процессора транзакций (вместо вычисления в времени выполнения внутри функции).Таким образом, поскольку я передаю фиксированное значение вместо того, чтобы цепной код вычислял его динамически, я надеюсь преодолеть любые проблемы с консенсусом.
Это хороший подход?Есть ли в этом какие-либо проблемы?Есть ли лучший способ сделать это?