MCPcopy Create free account
hub / github.com/wevm/viem / encodeArray

Function encodeArray

src/utils/abi/encodeAbiParameters.ts:239–284  ·  view source on GitHub ↗
(
  value: AbiParameterToPrimitiveType<param>,
  {
    length,
    param,
  }: {
    length: number | null
    param: param
  },
)

Source from the content-addressed store, hash-verified

237 | ErrorType
238
239function encodeArray<const param extends AbiParameter>(
240 value: AbiParameterToPrimitiveType<param>,
241 {
242 length,
243 param,
244 }: {
245 length: number | null
246 param: param
247 },
248): PreparedParam {
249 const dynamic = length === null
250
251 if (!Array.isArray(value)) throw new InvalidArrayError(value)
252 if (!dynamic && value.length !== length)
253 throw new AbiEncodingArrayLengthMismatchError({
254 expectedLength: length!,
255 givenLength: value.length,
256 type: `${param.type}[${length}]`,
257 })
258
259 // Zero-length fixed arrays of dynamic types (e.g. `string[0]`) are dynamic
260 // per the ABI spec, even though they have no elements to inspect.
261 let dynamicChild = value.length === 0 && isDynamicType(param)
262 const preparedParams: PreparedParam[] = []
263 for (let i = 0; i < value.length; i++) {
264 const preparedParam = prepareParam({ param, value: value[i] })
265 if (preparedParam.dynamic) dynamicChild = true
266 preparedParams.push(preparedParam)
267 }
268
269 if (dynamic || dynamicChild) {
270 const data = encodeParams(preparedParams)
271 if (dynamic) {
272 const length = numberToHex(preparedParams.length, { size: 32 })
273 return {
274 dynamic: true,
275 encoded: concatHex([length, data]),
276 }
277 }
278 if (dynamicChild) return { dynamic: true, encoded: data }
279 }
280 return {
281 dynamic: false,
282 encoded: concatHex(preparedParams.map(({ encoded }) => encoded)),
283 }
284}
285
286type EncodeBytesErrorType =
287 | AbiEncodingBytesSizeMismatchErrorType

Callers 1

prepareParamFunction · 0.85

Calls 5

isDynamicTypeFunction · 0.85
prepareParamFunction · 0.85
encodeParamsFunction · 0.85
numberToHexFunction · 0.85
concatHexFunction · 0.85

Tested by

no test coverage detected