Как видно из приведенного ниже примера из документа солидности, мы можем отправить байтовый массив в конструктор
constructor(bytes32[] memory proposalNames) public {
chairperson = msg.sender;
voters[chairperson].weight = 1;
// For each of the provided proposal names,
// create a new proposal object and add it
// to the end of the array.
for (uint i = 0; i < proposalNames.length; i++) {
// `Proposal({...})` creates a temporary
// Proposal object and `proposals.push(...)`
// appends it to the end of `proposals`.
proposals.push(Proposal({
name: proposalNames[i],
voteCount: 0
}));
}
}
Если вы пытаетесь отправить данные строки / объекта конкретно, то лучше отделить методы и вызвать каждый методотдельно или внутри друг друга, так как в настоящее время солидность не поддерживает это (использование ABIencodere v2 является исключительным, поскольку рекомендуется только для целей разработки - согласно дате написания этого ответа)
struct A{
uint date,
B[] b
}
Вы можете отделить этона
struct A{
uint date
}
struct B{
string goods,
uint quantity
}
, так что теперь за 1 А вы можете позвонить в NB из вашего сервиса.Используйте сопоставление для связывания обоих (если зависит).
В текущей ситуации лучше разработать контракт, который не принимает объемные входные данные или не выдает объемные выходные данные.Однако контракты предназначены не для хранения огромных данных, а для хранения связанных данных, которые соответствуют соглашению сторон