PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@hashgraph/sdk/src/contract

Просмотр файла: ContractFunctionParameters.js

/*-
 * ‌
 * Hedera JavaScript SDK
 * ​
 * Copyright (C) 2020 - 2022 Hedera Hashgraph, LLC
 * ​
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ‍
 */

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";

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} value
     * @returns {ContractFunctionParameters}
     */
    addInt8(value) {
        this._selector.addInt8();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint8(value) {
        this._selector.addUint8();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addInt16(value) {
        this._selector.addInt16();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint16(value) {
        this._selector.addUint16();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addInt24(value) {
        this._selector.addInt24();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint24(value) {
        this._selector.addUint24();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addInt32(value) {
        this._selector.addInt32();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint32(value) {
        this._selector.addUint32();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addInt40(value) {
        this._selector.addInt40();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint40(value) {
        this._selector.addUint40();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addInt48(value) {
        this._selector.addInt48();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint48(value) {
        this._selector.addUint48();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addInt56(value) {
        this._selector.addInt56();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number} value
     * @returns {ContractFunctionParameters}
     */
    addUint56(value) {
        this._selector.addUint56();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt64(value) {
        this._selector.addInt64();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint64(value) {
        this._selector.addUint64();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt72(value) {
        this._selector.addInt72();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint72(value) {
        this._selector.addUint72();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt80(value) {
        this._selector.addInt80();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint80(value) {
        this._selector.addUint80();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt88(value) {
        this._selector.addInt88();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint88(value) {
        this._selector.addUint88();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt96(value) {
        this._selector.addInt96();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint96(value) {
        this._selector.addUint96();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt104(value) {
        this._selector.addInt104();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint104(value) {
        this._selector.addUint104();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt112(value) {
        this._selector.addInt112();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint112(value) {
        this._selector.addUint112();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt120(value) {
        this._selector.addInt120();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint120(value) {
        this._selector.addUint120();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt128(value) {
        this._selector.addInt128();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint128(value) {
        this._selector.addUint128();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt136(value) {
        this._selector.addInt136();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint136(value) {
        this._selector.addUint136();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt144(value) {
        this._selector.addInt144();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint144(value) {
        this._selector.addUint144();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt152(value) {
        this._selector.addInt152();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint152(value) {
        this._selector.addUint152();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt160(value) {
        this._selector.addInt160();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint160(value) {
        this._selector.addUint160();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt168(value) {
        this._selector.addInt168();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint168(value) {
        this._selector.addUint168();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt176(value) {
        this._selector.addInt176();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint176(value) {
        this._selector.addUint176();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt184(value) {
        this._selector.addInt184();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint184(value) {
        this._selector.addUint184();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt192(value) {
        this._selector.addInt192();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint192(value) {
        this._selector.addUint192();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt200(value) {
        this._selector.addInt200();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint200(value) {
        this._selector.addUint200();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt208(value) {
        this._selector.addInt208();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint208(value) {
        this._selector.addUint208();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt216(value) {
        this._selector.addInt216();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint216(value) {
        this._selector.addUint216();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt224(value) {
        this._selector.addInt224();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint224(value) {
        this._selector.addUint224();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt232(value) {
        this._selector.addInt232();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint232(value) {
        this._selector.addUint232();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt240(value) {
        this._selector.addInt240();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint240(value) {
        this._selector.addUint240();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt248(value) {
        this._selector.addInt248();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addUint248(value) {
        this._selector.addUint248();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber} value
     * @returns {ContractFunctionParameters}
     */
    addInt256(value) {
        this._selector.addInt256();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {BigNumber | number} value
     * @returns {ContractFunctionParameters}
     */
    addUint256(value) {
        this._selector.addUint256();
        return this._addParam(util.convertToBigNumber(value), false);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt8Array(value) {
        this._selector.addInt8Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint8Array(value) {
        this._selector.addUint8Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt16Array(value) {
        this._selector.addInt16Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint16Array(value) {
        this._selector.addUint16Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt24Array(value) {
        this._selector.addInt24Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint24Array(value) {
        this._selector.addUint24Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt32Array(value) {
        this._selector.addInt32Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint32Array(value) {
        this._selector.addUint32Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt40Array(value) {
        this._selector.addInt40Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint40Array(value) {
        this._selector.addUint40Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt48Array(value) {
        this._selector.addInt48Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint48Array(value) {
        this._selector.addUint48Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt56Array(value) {
        this._selector.addInt56Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint56Array(value) {
        this._selector.addUint56Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt64Array(value) {
        this._selector.addInt64Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint64Array(value) {
        this._selector.addUint64Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt72Array(value) {
        this._selector.addInt72Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint72Array(value) {
        this._selector.addUint72Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt80Array(value) {
        this._selector.addInt80Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint80Array(value) {
        this._selector.addUint80Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt88Array(value) {
        this._selector.addInt88Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint88Array(value) {
        this._selector.addUint88Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt96Array(value) {
        this._selector.addInt96Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint96Array(value) {
        this._selector.addUint96Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt104Array(value) {
        this._selector.addInt104Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint104Array(value) {
        this._selector.addUint104Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt112Array(value) {
        this._selector.addInt112Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint112Array(value) {
        this._selector.addUint112Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt120Array(value) {
        this._selector.addInt120Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint120Array(value) {
        this._selector.addUint120Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt128Array(value) {
        this._selector.addInt128Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint128Array(value) {
        this._selector.addUint128Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt136Array(value) {
        this._selector.addInt136Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint136Array(value) {
        this._selector.addUint136Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt144Array(value) {
        this._selector.addInt144Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint144Array(value) {
        this._selector.addUint144Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt152Array(value) {
        this._selector.addInt152Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint152Array(value) {
        this._selector.addUint152Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt160Array(value) {
        this._selector.addInt160Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint160Array(value) {
        this._selector.addUint160Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt168Array(value) {
        this._selector.addInt168Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint168Array(value) {
        this._selector.addUint168Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt176Array(value) {
        this._selector.addInt176Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint176Array(value) {
        this._selector.addUint176Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt184Array(value) {
        this._selector.addInt184Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint184Array(value) {
        this._selector.addUint184Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt192Array(value) {
        this._selector.addInt192Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint192Array(value) {
        this._selector.addUint192Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt200Array(value) {
        this._selector.addInt200Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint200Array(value) {
        this._selector.addUint200Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt208Array(value) {
        this._selector.addInt208Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint208Array(value) {
        this._selector.addUint208Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt216Array(value) {
        this._selector.addInt216Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint216Array(value) {
        this._selector.addUint216Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt224Array(value) {
        this._selector.addInt224Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint224Array(value) {
        this._selector.addUint224Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt232Array(value) {
        this._selector.addInt232Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint232Array(value) {
        this._selector.addUint232Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt240Array(value) {
        this._selector.addInt240Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint240Array(value) {
        this._selector.addUint240Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt248Array(value) {
        this._selector.addInt248Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint248Array(value) {
        this._selector.addUint248Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addInt256Array(value) {
        this._selector.addInt256Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {number[]} value
     * @returns {ContractFunctionParameters}
     */
    addUint256Array(value) {
        this._selector.addUint256Array();
        return this._addParam(util.convertToBigNumberArray(value), true);
    }

    /**
     * @param {string} value
     * @returns {ContractFunctionParameters}
     */
    addAddress(value) {
        // Allow `0x` prefix
        if (value.length !== 40 && value.length !== 42) {
            throw new Error(
                "`address` type requires parameter to be 40 or 42 characters"
            );
        }

        const par =
            value.length === 40
                ? hex.decode(value)
                : hex.decode(value.substring(2));

        this._selector.addAddress();

        return this._addParam(par, false);
    }

    /**
     * @param {string[]} value
     * @returns {ContractFunctionParameters}
     */
    addAddressArray(value) {
        /**
         * @type {Uint8Array[]}
         */
        const par = [];

        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        for (const [_, entry] of value.entries()) {
            if (entry.length !== 40 && entry.length !== 42) {
                throw new Error(
                    "`address` type requires parameter to be 40 or 42 characters"
                );
            }

            const buf =
                entry.length === 40
                    ? hex.decode(entry)
                    : hex.decode(entry.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);

        switch (ty.ty) {
            case ArgumentType.uint8:
            case ArgumentType.int8:
            case ArgumentType.uint16:
            case ArgumentType.int16:
            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.uint224:
        case ArgumentType.int224:
        case ArgumentType.uint232:
        case ArgumentType.int232:
        case ArgumentType.uint240:
        case ArgumentType.int240:
        case ArgumentType.uint248:
        case ArgumentType.int248:
        case ArgumentType.int256:
        case ArgumentType.uint256: {
            let paramToHex = param.toString(16);

            if (param > 0) {
                paramToHex = "0x" + paramToHex;
            } else {
                paramToHex =
                    paramToHex.slice(0, 1) + "0x" + paramToHex.slice(1);
            }

            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
            const encodedData = defaultAbiCoder.encode(
                [solidityTypeToString(ty)],
                [paramToHex]
            );

            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
            const dataToArrayify = arrayify(encodedData);
            return dataToArrayify;
        }
        case ArgumentType.address:
            value.set(/** @type {Uint8Array} */ (param), 32 - 20);
            return value;
        case ArgumentType.bool:
            value[31] = /** @type {boolean} */ (param) ? 1 : 0;
            return value;
        case ArgumentType.func:
            value.set(/** @type {Uint8Array} */ (param), 32 - 24);
            return value;
        case ArgumentType.bytes32:
            value.set(/** @type {Uint8Array} */ (param), 0);
            return value;
        // Bytes should have not the length already encoded
        // JS String type is encoded as UTF-16 whilst Solidity `string` type is UTF-8 encoded.
        // So if will assume is already correctly updated to being a Uint8Array of UTF-8 string
        case ArgumentType.bytes:
        case ArgumentType.string: {
            // If value is of type string, encode it in UTF-8 format and conver it to Uint8Array
            // Required because JS Strings are UTF-16
            // eslint-disable-next-line no-case-declarations
            par =
                param instanceof Uint8Array
                    ? param
                    : utf8.encode(/** @type {string} */ (param));

            // Resize value to a 32 byte boundary if needed
            if (Math.floor(par.length / 32) >= 0) {
                if (Math.floor(par.length % 32) !== 0) {
                    value = new Uint8Array(
                        (Math.floor(par.length / 32) + 1) * 32 + 32
                    );
                } else {
                    value = new Uint8Array(
                        Math.floor(par.length / 32) * 32 + 32
                    );
                }
            } else {
                value = new Uint8Array(64);
            }

            value.set(par, 32);

            valueView = util.safeView(value, 28);
            valueView.setUint32(0, par.length);
            return value;
        }
        default:
            throw new Error(`Unsupported argument type: ${ty.toString()}`);
    }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!