({sequence, variables, wallet})
| 298 | } |
| 299 | |
| 300 | static encodeSequence({sequence, variables, wallet}) { |
| 301 | const isAdvanced = sequence.some(({ actionScript, resultsToApply }) => ( |
| 302 | !!resultsToApply && resultsToApply.length > 0 || |
| 303 | Validator.isAdvanced(actionScript) |
| 304 | )); |
| 305 | |
| 306 | let sequenceCallIndex = 0; |
| 307 | const encoded = []; |
| 308 | const sequenceKnownCallResultVariables = []; |
| 309 | const sequenceCallIndices = []; |
| 310 | let calls = []; |
| 311 | for (const { actionScript, resultsToApply } of sequence) { |
| 312 | const encoder = new Encoder( |
| 313 | actionScript, variables, wallet, isAdvanced |
| 314 | ); |
| 315 | |
| 316 | encoder.parseActionScriptDefinitions(); |
| 317 | encoder.callIndex = sequenceCallIndex; |
| 318 | encoder.calls = calls; |
| 319 | sequenceCallIndices.push(sequenceCallIndex); |
| 320 | |
| 321 | for (const { sequenceIndex, result, variable } of resultsToApply) { |
| 322 | const resultToApply = sequenceKnownCallResultVariables[sequenceIndex][result]; |
| 323 | encoder.knownCallResultVariables[variable] = resultToApply; |
| 324 | } |
| 325 | |
| 326 | encoded.push(encoder.encode()); |
| 327 | calls = encoder.calls; |
| 328 | sequenceCallIndex = encoder.callIndex; |
| 329 | sequenceKnownCallResultVariables.push(encoder.knownCallResultVariables); |
| 330 | } |
| 331 | |
| 332 | const callABIs = [].concat(...encoded.map(x => x.callABIs)); |
| 333 | const resultToParse = encoded |
| 334 | .map(x => x.resultToParse) |
| 335 | .reduce((result, obj) => Object.assign({}, result, obj), {}); |
| 336 | |
| 337 | return { |
| 338 | calls, |
| 339 | callABIs, |
| 340 | resultToParse, |
| 341 | isAdvanced, |
| 342 | sequenceCallIndices, |
| 343 | }; |
| 344 | } |
| 345 | |
| 346 | static typeSizes(type) { |
| 347 | if (typeof type !== "string") { |
no test coverage detected