Передача данных массива в чейнкод в структуре Hyperledger

Я изменил пример fabcar для хранения моих собственных данных. Мне нужно сохранить данные json в блоки. Некоторые свойства объекта - это строки и массив. Но я не могу передать массив в чейнкод.

Вот мои данные json

{
key : '5e57b8dbb9b30e3575f45d75',
Thp_stRpPmp: '0',
Thp_stSprPmp: '0',
Thp_stArrFans: [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0],
Thp_bSpry: 'false',
}

При попытке отправить транзакцию я сталкиваюсь с такой ошибкой.

error inside await Error: Transaction arguments must be strings:     

Как решить эту проблему?


person divya sekaran    schedule 16.04.2020    source источник


Ответы (1)


Как говорится в ошибке, аргументы могут быть только строками.

Вы можете отправить свои аргументы в виде строки и демаршалировать их в цепном коде.

При работе со сложными данными я обычно отправляю только маршалированную строку JSON, которую я демарширую в своем цепном коде. Вы теряете в производительности при деактивации / маршалинге, но выигрываете в ремонтопригодности, если подходите к вашим программным моделям.

person kekomal    schedule 16.04.2020
comment
Если я упорядочу [false, false] в строку, она будет преобразована в false, false, что принимает два параметра при переходе к цепочному коду. Как передать его как одно значение - person divya sekaran; 17.04.2020
comment
Я не знаю (и не могу догадаться), как у вас дела. Я даже не знаю, какой SDK (язык программирования?) Вы используете. Вы используете Javascript JSON.stringify() или что? - person kekomal; 17.04.2020
comment
Да, я использую javascript SDK. Использование JSON.stringify () - person divya sekaran; 17.04.2020
comment
let response = await contract.submitTransaction('my_operation', JSON.stringify([false,false])); следует отправлять как единственную строку. - person kekomal; 17.04.2020
comment
@kekomal Привет! У меня такая же проблема, но я отправляю массив объектов вместе с другими переменными, как мне это сделать? (с использованием узла sdk) - person Pamuditha Navaratne; 23.04.2020
comment
@PamudithaNavaratne, вы можете использовать один параметр для каждой переменной (один для массива маршалированных объектов и по одному для каждой из других переменных) или встроить все переменные и массив в более крупный маршалированный объект JSON. Пока ваша операция цепного кода подготовлена ​​для демаршалинга полученных параметров, а ваш код чист и удобен в обслуживании, оба варианта действительны. Обычно лучше определять модели в вашем цепном коде для демаршалинга полученных данных, чем демаршалинга на общие карты или срезы. - person kekomal; 23.04.2020