/* Autogenerated file, do not edit! */
import { EventSelector, loadContractArtifact, loadContractArtifactForPublic } from '@aztec/aztec.js/abi';
import { Contract, ContractBase, DeployMethod } from '@aztec/aztec.js/contracts';
import { Fr } from '@aztec/aztec.js/fields';
import MultiTokenContractArtifactJson from '../../target/multitoken_contract-MultiToken.json' with { type: 'json' };
export const MultiTokenContractArtifact = loadContractArtifact(MultiTokenContractArtifactJson);
/**
 * Type-safe interface for contract MultiToken;
 */
export class MultiTokenContract extends ContractBase {
    constructor(address, wallet) {
        super(address, MultiTokenContractArtifact, wallet);
    }
    /**
     * Creates a contract instance.
     * @param address - The deployed contract's address.
     * @param wallet - The wallet to use when interacting with the contract.
     * @returns A new Contract instance.
     */
    static at(address, wallet) {
        return Contract.at(address, MultiTokenContract.artifact, wallet);
    }
    /**
     * Creates a tx to deploy a new instance of this contract.
     * @param instantiation - Optional address-affecting parameters (salt, deployer / universalDeploy, publicKeys).
     *                       Salt defaults to a random value; the deployer is locked lazily from the first send-time `from`.
     */
    static deploy(wallet, name, symbol, minter, auth_contract, instantiation) {
        return DeployMethod.create(wallet, {
            artifact: MultiTokenContractArtifact,
            postDeployCtor: (instance, wallet) => MultiTokenContract.at(instance.address, wallet),
            args: [name, symbol, minter, auth_contract],
        }, instantiation);
    }
    /**
     * Creates a tx to deploy a new instance of this contract using the specified constructor method.
     */
    static deployWithOpts(opts, ...args) {
        return DeployMethod.create(opts.wallet, {
            artifact: MultiTokenContractArtifact,
            postDeployCtor: (instance, wallet) => MultiTokenContract.at(instance.address, wallet),
            args,
            constructorNameOrArtifact: opts.method ?? 'constructor',
        }, opts.instantiation);
    }
    /**
     * Returns this contract's artifact.
     */
    static get artifact() {
        return MultiTokenContractArtifact;
    }
    /**
     * Returns this contract's artifact with public bytecode.
     */
    static get artifactForPublic() {
        return loadContractArtifactForPublic(MultiTokenContractArtifactJson);
    }
    static get storage() {
        return {
            name: {
                slot: new Fr(1n),
            },
            symbol: {
                slot: new Fr(3n),
            },
            private_balances: {
                slot: new Fr(5n),
            },
            public_balances: {
                slot: new Fr(6n),
            },
            minter: {
                slot: new Fr(7n),
            },
            auth_contract: {
                slot: new Fr(9n),
            }
        };
    }
    static get events() {
        return {
            TransferSingle: {
                abiType: {
                    "kind": "struct",
                    "fields": [
                        {
                            "name": "from",
                            "type": {
                                "kind": "struct",
                                "fields": [
                                    {
                                        "name": "inner",
                                        "type": {
                                            "kind": "field"
                                        }
                                    }
                                ],
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                        },
                        {
                            "name": "to",
                            "type": {
                                "kind": "struct",
                                "fields": [
                                    {
                                        "name": "inner",
                                        "type": {
                                            "kind": "field"
                                        }
                                    }
                                ],
                                "path": "aztec::protocol_types::address::aztec_address::AztecAddress"
                            }
                        },
                        {
                            "name": "id",
                            "type": {
                                "kind": "field"
                            }
                        },
                        {
                            "name": "amount",
                            "type": {
                                "kind": "integer",
                                "sign": "unsigned",
                                "width": 128
                            }
                        }
                    ],
                    "path": "MultiToken::TransferSingle"
                },
                eventSelector: EventSelector.fromString("0x2429b477"),
                fieldNames: ["from", "to", "id", "amount"],
            }
        };
    }
}
