# equipment/v1.ts

    import { ethers } from "ethers";
    import { pad0xBegin } from "@evo/utils/common/utils";
    import { triggerContractByContractName } from "@evo/utils/ethers/contractHelper";
    import type { CallbackType } from "@evo/utils/ethers/contractHelper";
    import { LandId } from "@evo/config/constants";
    import { TransactionResponse } from "@ethersproject/providers";

    /**
     * Equipment transfer
     * @param landId Land Id
     * @param signer Signer
     * @param from Equipment owner
     * @param to Recipient
     * @param tokenId Equipment TokenId
     * @param callback Callback
     * @returns any
     */
    export const equipmentTransfer = (
      landId: LandId,
      signer: ethers.Signer,
      from: string,
      to: string,
      tokenId: string,
      callback?: CallbackType
    ): Promise<TransactionResponse> => {
      return triggerContractByContractName(
        landId,
        signer,
        "objectOwnership",
        "transferFrom",
        [from, to, pad0xBegin(tokenId)],
        callback
      );
    };

    /**
     * Divest the props on the index slot on the tokenid apostle
     * @param landId Land Id
     * @param signer Signer
     * @param tokenId Apostle token Id
     * @param index The index of slot
     * @param callback Callback
     * @returns any
     */
    export const equipmentUnequip = (
      landId: LandId,
      signer: ethers.Signer,
      tokenId: string,
      index: number,
      callback?: CallbackType
    ): Promise<TransactionResponse> => {
      return triggerContractByContractName(
        landId,
        signer,
        "apostleBaseV5",
        "divest",
        [pad0xBegin(tokenId), index],
        callback
      );
    };