UNPKG

@hiero-ledger/sdk

Version:
1,680 lines (1,505 loc) 53.1 kB
// SPDX-License-Identifier: Apache-2.0 import ContractFunctionSelector, { ArgumentType, solidityTypeToString, } from "./ContractFunctionSelector.js"; import * as utf8 from "../encoding/utf8.js"; import * as hex from "../encoding/hex.js"; // eslint-disable-next-line @typescript-eslint/no-unused-vars import BigNumber from "bignumber.js"; import * as util from "../util.js"; import { defaultAbiCoder } from "@ethersproject/abi"; import { arrayify } from "@ethersproject/bytes"; // eslint-disable-next-line @typescript-eslint/no-unused-vars import EvmAddress from "../EvmAddress.js"; /** * Class to help construct parameters for a Hedera smart contract function call. * * This class provides methods to add different types of parameters that will be passed to a smart contract function. * It supports all Solidity parameter types including basic types (uint/int of various sizes, bool, address), * arrays, strings, and bytes. * */ export default class ContractFunctionParameters { constructor() { /** * @type {ContractFunctionSelector} */ this._selector = new ContractFunctionSelector(); /** * @type {import("./ContractFunctionSelector.js").Argument[]} */ this._arguments = []; } /** * @param {string} value * @returns {ContractFunctionParameters} */ addString(value) { this._selector.addString(); return this._addParam(value, true); } /** * @param {string[]} value * @returns {ContractFunctionParameters} */ addStringArray(value) { this._selector.addStringArray(); return this._addParam(value, true); } /** * @param {Uint8Array} value * @returns {ContractFunctionParameters} */ addBytes(value) { this._selector.addBytes(); return this._addParam(value, true); } /** * @param {Uint8Array} value * @returns {ContractFunctionParameters} */ addBytes32(value) { if (value.length !== 32) { throw new Error( `addBytes32 expected array to be of length 32, but received ${value.length}`, ); } this._selector.addBytes32(); return this._addParam(value, false); } /** * @param {Uint8Array[]} value * @returns {ContractFunctionParameters} */ addBytesArray(value) { this._selector.addBytesArray(); return this._addParam(value, true); } /** * @param {Uint8Array[]} value * @returns {ContractFunctionParameters} */ addBytes32Array(value) { // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const [_, entry] of value.entries()) { if (entry.length !== 32) { throw new Error( `addBytes32 expected array to be of length 32, but received ${entry.length}`, ); } } this._selector.addBytes32Array(); return this._addParam(value, true); } /** * @param {boolean} value * @returns {ContractFunctionParameters} */ addBool(value) { this._selector.addBool(); return this._addParam(value, false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt8(value) { this._selector.addInt8(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint8(value) { this._selector.addUint8(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt16(value) { this._selector.addInt16(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint16(value) { this._selector.addUint16(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt24(value) { this._selector.addInt24(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint24(value) { this._selector.addUint24(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt32(value) { this._selector.addInt32(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint32(value) { this._selector.addUint32(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt40(value) { this._selector.addInt40(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint40(value) { this._selector.addUint40(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt48(value) { this._selector.addInt48(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint48(value) { this._selector.addUint48(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt56(value) { this._selector.addInt56(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint56(value) { this._selector.addUint56(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt64(value) { this._selector.addInt64(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint64(value) { this._selector.addUint64(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt72(value) { this._selector.addInt72(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint72(value) { this._selector.addUint72(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt80(value) { this._selector.addInt80(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint80(value) { this._selector.addUint80(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt88(value) { this._selector.addInt88(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint88(value) { this._selector.addUint88(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt96(value) { this._selector.addInt96(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint96(value) { this._selector.addUint96(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt104(value) { this._selector.addInt104(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint104(value) { this._selector.addUint104(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt112(value) { this._selector.addInt112(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint112(value) { this._selector.addUint112(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt120(value) { this._selector.addInt120(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint120(value) { this._selector.addUint120(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt128(value) { this._selector.addInt128(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint128(value) { this._selector.addUint128(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt136(value) { this._selector.addInt136(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint136(value) { this._selector.addUint136(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt144(value) { this._selector.addInt144(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint144(value) { this._selector.addUint144(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt152(value) { this._selector.addInt152(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint152(value) { this._selector.addUint152(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt160(value) { this._selector.addInt160(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint160(value) { this._selector.addUint160(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt168(value) { this._selector.addInt168(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint168(value) { this._selector.addUint168(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt176(value) { this._selector.addInt176(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint176(value) { this._selector.addUint176(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt184(value) { this._selector.addInt184(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint184(value) { this._selector.addUint184(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt192(value) { this._selector.addInt192(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint192(value) { this._selector.addUint192(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt200(value) { this._selector.addInt200(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint200(value) { this._selector.addUint200(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt208(value) { this._selector.addInt208(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint208(value) { this._selector.addUint208(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt216(value) { this._selector.addInt216(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint216(value) { this._selector.addUint216(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt224(value) { this._selector.addInt224(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint224(value) { this._selector.addUint224(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt232(value) { this._selector.addInt232(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint232(value) { this._selector.addUint232(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt240(value) { this._selector.addInt240(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint240(value) { this._selector.addUint240(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt248(value) { this._selector.addInt248(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint248(value) { this._selector.addUint248(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addInt256(value) { this._selector.addInt256(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number | BigNumber | Long} value * @returns {ContractFunctionParameters} */ addUint256(value) { this._selector.addUint256(); return this._addParam(util.convertToBigNumber(value), false); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt8Array(value) { this._selector.addInt8Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint8Array(value) { this._selector.addUint8Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt16Array(value) { this._selector.addInt16Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint16Array(value) { this._selector.addUint16Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt24Array(value) { this._selector.addInt24Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint24Array(value) { this._selector.addUint24Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt32Array(value) { this._selector.addInt32Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint32Array(value) { this._selector.addUint32Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt40Array(value) { this._selector.addInt40Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint40Array(value) { this._selector.addUint40Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt48Array(value) { this._selector.addInt48Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint48Array(value) { this._selector.addUint48Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt56Array(value) { this._selector.addInt56Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint56Array(value) { this._selector.addUint56Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt64Array(value) { this._selector.addInt64Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint64Array(value) { this._selector.addUint64Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt72Array(value) { this._selector.addInt72Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint72Array(value) { this._selector.addUint72Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt80Array(value) { this._selector.addInt80Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint80Array(value) { this._selector.addUint80Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt88Array(value) { this._selector.addInt88Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint88Array(value) { this._selector.addUint88Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt96Array(value) { this._selector.addInt96Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint96Array(value) { this._selector.addUint96Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt104Array(value) { this._selector.addInt104Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint104Array(value) { this._selector.addUint104Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt112Array(value) { this._selector.addInt112Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint112Array(value) { this._selector.addUint112Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt120Array(value) { this._selector.addInt120Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint120Array(value) { this._selector.addUint120Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt128Array(value) { this._selector.addInt128Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint128Array(value) { this._selector.addUint128Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt136Array(value) { this._selector.addInt136Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint136Array(value) { this._selector.addUint136Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt144Array(value) { this._selector.addInt144Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint144Array(value) { this._selector.addUint144Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt152Array(value) { this._selector.addInt152Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint152Array(value) { this._selector.addUint152Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt160Array(value) { this._selector.addInt160Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint160Array(value) { this._selector.addUint160Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt168Array(value) { this._selector.addInt168Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint168Array(value) { this._selector.addUint168Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt176Array(value) { this._selector.addInt176Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint176Array(value) { this._selector.addUint176Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt184Array(value) { this._selector.addInt184Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint184Array(value) { this._selector.addUint184Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt192Array(value) { this._selector.addInt192Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint192Array(value) { this._selector.addUint192Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt200Array(value) { this._selector.addInt200Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint200Array(value) { this._selector.addUint200Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt208Array(value) { this._selector.addInt208Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint208Array(value) { this._selector.addUint208Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt216Array(value) { this._selector.addInt216Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint216Array(value) { this._selector.addUint216Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt224Array(value) { this._selector.addInt224Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint224Array(value) { this._selector.addUint224Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt232Array(value) { this._selector.addInt232Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint232Array(value) { this._selector.addUint232Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt240Array(value) { this._selector.addInt240Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint240Array(value) { this._selector.addUint240Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt248Array(value) { this._selector.addInt248Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint248Array(value) { this._selector.addUint248Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addInt256Array(value) { this._selector.addInt256Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {number[] | BigNumber[] | Long[]} value * @returns {ContractFunctionParameters} */ addUint256Array(value) { this._selector.addUint256Array(); return this._addParam(util.convertToBigNumberArray(value), true); } /** * @param {string | EvmAddress} value * @returns {ContractFunctionParameters} */ addAddress(value) { let address; if (typeof value === "string") { // Allow `0x` prefix if (value.length !== 40 && value.length !== 42) { throw new Error( "`address` type requires parameter to be 40 or 42 characters", ); } address = value; } else { address = value.toString(); } const par = address.length === 40 ? hex.decode(address) : hex.decode(address.substring(2)); this._selector.addAddress(); return this._addParam(par, false); } /** * @param {string[] | EvmAddress[]} value * @returns {ContractFunctionParameters} */ addAddressArray(value) { /** * @type {Uint8Array[]} */ const par = []; // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const [_, entry] of value.entries()) { let address; if (typeof entry === "string") { if (entry.length !== 40 && entry.length !== 42) { throw new Error( "`address` type requires parameter to be 40 or 42 characters", ); } address = entry; } else { address = entry.toString(); } const buf = address.length === 40 ? hex.decode(address) : hex.decode(address.substring(2)); par.push(buf); } this._selector.addAddressArray(); return this._addParam(par, true); } /** * @param {string} address * @param {ContractFunctionSelector} selector * @returns {ContractFunctionParameters} */ addFunction(address, selector) { const addressParam = hex.decode(address); const functionSelector = selector._build(); if (addressParam.length !== 20) { throw new Error( "`function` type requires parameter `address` to be exactly 20 bytes", ); } this._selector.addFunction(); const proto = new Uint8Array(24); proto.set(addressParam, 0); proto.set(functionSelector, 20); return this._addParam(proto, false); } /** * @internal * @param {string | boolean | number | Uint8Array | BigNumber | string[] | boolean[] | number[] | Uint8Array[] | BigNumber[]} param * @param {boolean} dynamic * @returns {ContractFunctionParameters} */ _addParam(param, dynamic) { const index = this._selector._paramTypes.length - 1; const value = argumentToBytes(param, this._selector._paramTypes[index]); this._arguments.push({ dynamic, value }); return this; } /** * @internal * @param {string=} name * @returns {Uint8Array} */ _build(name) { const includeId = name != null; const nameOffset = includeId ? 4 : 0; const length = this._arguments.length === 0 ? nameOffset : this._arguments.length * 32 + this._arguments .map((arg) => (arg.dynamic ? arg.value.length : 0)) .reduce((sum, value) => sum + value) + nameOffset; const func = new Uint8Array(length); if (includeId) { func.set(this._selector._build(name), 0); } let offset = 32 * this._arguments.length; for (const [i, { dynamic, value }] of this._arguments.entries()) { if (dynamic) { const view = util.safeView(func, nameOffset + i * 32 + 28); view.setUint32(0, offset); func.set(value, view.getUint32(0) + nameOffset); offset += value.length; } else { func.set(value, nameOffset + i * 32); } } return func; } } /** * @param {string | boolean | number | Uint8Array | BigNumber | string[] | boolean[] | number[] | Uint8Array[] | BigNumber[]} param * @param {import("./ContractFunctionSelector.js").SolidityType} ty * @returns {Uint8Array} */ function argumentToBytes(param, ty) { let value = new Uint8Array(32); let valueView = util.safeView(value); /** @type {Uint8Array} */ let par; if (ty.array) { if (!Array.isArray(param)) { throw new TypeError( "SolidityType indicates type is array, but parameter is not an array", ); } /** * @type {Uint8Array[]} */ const values = []; // Generic over any type of array // Destructuring required so the first variable must be assigned // eslint-disable-next-line @typescript-eslint/no-unused-vars for (const [_, p] of param.entries()) { const arg = argumentToBytes(p, { ty: ty.ty, array: false }); values.push(arg); } const totalLengthOfValues = values .map((a) => a.length) .reduce((total, current) => total + current, 0); switch (ty.ty) { case ArgumentType.uint8: case ArgumentType.int8: case ArgumentType.uint16: case ArgumentType.int16: case ArgumentType.uint24: case ArgumentType.int24: case ArgumentType.uint32: case ArgumentType.int32: case ArgumentType.uint40: case ArgumentType.int40: case ArgumentType.uint48: case ArgumentType.int48: case ArgumentType.uint56: case ArgumentType.int56: case ArgumentType.uint64: case ArgumentType.int64: case ArgumentType.uint72: case ArgumentType.int72: case ArgumentType.uint80: case ArgumentType.int80: case ArgumentType.uint88: case ArgumentType.int88: case ArgumentType.uint96: case ArgumentType.int96: case ArgumentType.uint104: case ArgumentType.int104: case ArgumentType.uint112: case ArgumentType.int112: case ArgumentType.uint120: case ArgumentType.int120: case ArgumentType.uint128: case ArgumentType.int128: case ArgumentType.uint136: case ArgumentType.int136: case ArgumentType.uint144: case ArgumentType.int144: case ArgumentType.uint152: case ArgumentType.int152: case ArgumentType.uint160: case ArgumentType.int160: case ArgumentType.uint168: case ArgumentType.int168: case ArgumentType.uint176: case ArgumentType.int176: case ArgumentType.uint184: case ArgumentType.int184: case ArgumentType.uint192: case ArgumentType.int192: case ArgumentType.uint200: case ArgumentType.int200: case ArgumentType.uint208: case ArgumentType.int208: case ArgumentType.uint216: case ArgumentType.int216: case ArgumentType.uint224: case ArgumentType.int224: case ArgumentType.uint232: case ArgumentType.int232: case ArgumentType.uint240: case ArgumentType.int240: case ArgumentType.uint248: case ArgumentType.int248: case ArgumentType.uint256: case ArgumentType.int256: case ArgumentType.bool: case ArgumentType.bytes32: case ArgumentType.address: case ArgumentType.func: value = new Uint8Array(totalLengthOfValues + 32); break; case ArgumentType.bytes: case ArgumentType.string: value = new Uint8Array( values.length * 32 + totalLengthOfValues + 32, ); break; default: throw new TypeError( `Expected param type to be ArgumentType, but received ${ty.ty}`, ); } valueView = util.safeView(value, 28); valueView.setUint32(0, values.length); let offset = 32 * values.length; for (const [i, e] of values.entries()) { switch (ty.ty) { case ArgumentType.uint8: case ArgumentType.int8: case ArgumentType.uint16: case ArgumentType.int16: case ArgumentType.uint24: case ArgumentType.int24: case ArgumentType.uint32: case ArgumentType.int32: case ArgumentType.uint40: case ArgumentType.int40: case ArgumentType.uint48: case ArgumentType.int48: case ArgumentType.uint56: case ArgumentType.int56: case ArgumentType.uint64: case ArgumentType.int64: case ArgumentType.uint72: case ArgumentType.int72: case ArgumentType.uint80: case ArgumentType.int80: case ArgumentType.uint88: case ArgumentType.int88: case ArgumentType.uint96: case ArgumentType.int96: case ArgumentType.uint104: case ArgumentType.int104: case ArgumentType.uint112: case ArgumentType.int112: case ArgumentType.uint120: case ArgumentType.int120: case ArgumentType.uint128: case ArgumentType.int128: case ArgumentType.uint136: case ArgumentType.int136: case ArgumentType.uint144: case ArgumentType.int144: case ArgumentType.uint152: case ArgumentType.int152: case ArgumentType.uint160: case ArgumentType.int160: case ArgumentType.uint168: case ArgumentType.int168: case ArgumentType.uint176: case ArgumentType.int176: case ArgumentType.uint184: case ArgumentType.int184: case ArgumentType.uint192: case ArgumentType.int192: case ArgumentType.uint200: case ArgumentType.int200: case ArgumentType.uint208: case ArgumentType.int208: case ArgumentType.uint216: case ArgumentType.int216: case ArgumentType.uint224: case ArgumentType.int224: case ArgumentType.uint232: case ArgumentType.int232: case ArgumentType.uint240: case ArgumentType.int240: case ArgumentType.uint248: case ArgumentType.int248: case ArgumentType.uint256: case ArgumentType.int256: case ArgumentType.bool: case ArgumentType.bytes32: case ArgumentType.address: case ArgumentType.func: value.set(e, i * 32 + 32); break; case ArgumentType.bytes: case ArgumentType.string: // eslint-disable-next-line no-case-declarations const view = util.safeView(value, (i + 1) * 32 + 28); view.setUint32(0, offset); value.set(e, view.getUint32(0) + 32); offset += e.length; break; default: throw new TypeError( `Expected param type to be ArgumentType, but received ${ty.ty}`, ); } } return value; } switch (ty.ty) { case ArgumentType.uint8: case ArgumentType.int8: case ArgumentType.uint16: case ArgumentType.int16: case ArgumentType.uint24: case ArgumentType.int24: case ArgumentType.uint32: case ArgumentType.int32: case ArgumentType.uint40: case ArgumentType.int40: case ArgumentType.uint48: case ArgumentType.int48: case ArgumentType.uint56: case ArgumentType.int56: case ArgumentType.uint64: case ArgumentType.int64: case ArgumentType.uint72: case ArgumentType.int72: case ArgumentType.uint80: case ArgumentType.int80: case ArgumentType.uint88: case ArgumentType.int88: case ArgumentType.uint96: case ArgumentType.int96: case ArgumentType.uint104: case ArgumentType.int104: case ArgumentType.uint112: case ArgumentType.int112: case ArgumentType.uint120: case ArgumentType.int120: case ArgumentType.uint128: case ArgumentType.int128: case ArgumentType.uint136: case ArgumentType.int136: case ArgumentType.uint144: case ArgumentType.int144: case ArgumentType.uint152: case ArgumentType.int152: case ArgumentType.uint160: case ArgumentType.int160: case ArgumentType.uint168: case ArgumentType.int168: case ArgumentType.uint176: case ArgumentType.int176: case ArgumentType.uint184: case ArgumentType.int184: case ArgumentType.uint192: case ArgumentType.int192: case ArgumentType.uint200: case ArgumentType.int200: case ArgumentType.uint208: case ArgumentType.int208: case ArgumentType.uint216: case ArgumentType.int216: case ArgumentType.u