Class PurchaseBundler

Hierarchy

Constructors

Methods

  • Parameters

    • __namedParameters: {
          repaymentCalldata: `0x${string}`;
          price: bigint;
      }
      • repaymentCalldata: `0x${string}`
      • price: bigint

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<TransactionReceipt>);
    }>

  • Parameters

    • data: `0x${string}`

    Returns Promise<{
        txHash: `0x${string}`;
        waitTxInBlock: (() => Promise<TransactionReceipt>);
    }>

Properties

EXECUTION_INFO: {
    name: "executionInfo";
    type: "tuple";
    components: readonly [{
        name: "reservoirExecutionInfo";
        type: "tuple";
        components: readonly [{
            name: "module";
            type: "address";
        }, {
            name: "data";
            type: "bytes";
        }, {
            name: "value";
            type: "uint256";
        }];
    }, {
        name: "contractMustBeOwner";
        type: "bool";
    }];
} = ...

Type declaration

  • Readonly name: "executionInfo"
  • Readonly type: "tuple"
  • Readonly components: readonly [{
        name: "reservoirExecutionInfo";
        type: "tuple";
        components: readonly [{
            name: "module";
            type: "address";
        }, {
            name: "data";
            type: "bytes";
        }, {
            name: "value";
            type: "uint256";
        }];
    }, {
        name: "contractMustBeOwner";
        type: "bool";
    }]
msl: MslV6 | MslV5
abi: readonly [{
    type: "constructor";
    inputs: readonly [{
        name: "_multiSourceLoanAddress";
        type: "address";
        internalType: "address";
    }, {
        name: "_marketplaceContracts";
        type: "address";
        internalType: "address";
    }, {
        name: "_wethAddress";
        type: "address";
        internalType: "address payable";
    }, {
        name: "_punkMarketAddress";
        type: "address";
        internalType: "address payable";
    }, {
        name: "_wrappedPunkAddress";
        type: "address";
        internalType: "address payable";
    }, {
        name: "__taxes";
        type: "tuple";
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }, {
        name: "_minWaitTime";
        type: "uint256";
        internalType: "uint256";
    }, {
        name: "__protocolFee";
        type: "tuple";
        internalType: "struct WithProtocolFee.ProtocolFee";
        components: readonly [{
            name: "recipient";
            type: "address";
            internalType: "address";
        }, {
            name: "fraction";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    stateMutability: "nonpayable";
}, {
    type: "fallback";
    stateMutability: "payable";
}, {
    type: "receive";
    stateMutability: "payable";
}, {
    type: "function";
    name: "FEE_UPDATE_NOTICE";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "uint256";
        internalType: "uint256";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "MIN_WAIT_TIME";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "uint256";
        internalType: "uint256";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "TAX_UPDATE_NOTICE";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "uint256";
        internalType: "uint256";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "afterNFTTransfer";
    inputs: readonly [{
        name: "_loan";
        type: "tuple";
        internalType: "struct IMultiSourceLoan.Loan";
        components: readonly [{
            name: "borrower";
            type: "address";
            internalType: "address";
        }, {
            name: "nftCollateralTokenId";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "nftCollateralAddress";
            type: "address";
            internalType: "address";
        }, {
            name: "principalAddress";
            type: "address";
            internalType: "address";
        }, {
            name: "principalAmount";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "startTime";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "duration";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "tranche";
            type: "tuple[]";
            internalType: "struct IMultiSourceLoan.Tranche[]";
            components: readonly [{
                name: "loanId";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "floor";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "principalAmount";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "lender";
                type: "address";
                internalType: "address";
            }, {
                name: "accruedInterest";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "startTime";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "aprBps";
                type: "uint256";
                internalType: "uint256";
            }];
        }, {
            name: "protocolFee";
            type: "uint256";
            internalType: "uint256";
        }];
    }, {
        name: "_executionData";
        type: "bytes";
        internalType: "bytes";
    }];
    outputs: readonly [{
        name: "";
        type: "bytes4";
        internalType: "bytes4";
    }];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "afterPrincipalTransfer";
    inputs: readonly [{
        name: "_loan";
        type: "tuple";
        internalType: "struct IMultiSourceLoan.Loan";
        components: readonly [{
            name: "borrower";
            type: "address";
            internalType: "address";
        }, {
            name: "nftCollateralTokenId";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "nftCollateralAddress";
            type: "address";
            internalType: "address";
        }, {
            name: "principalAddress";
            type: "address";
            internalType: "address";
        }, {
            name: "principalAmount";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "startTime";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "duration";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "tranche";
            type: "tuple[]";
            internalType: "struct IMultiSourceLoan.Tranche[]";
            components: readonly [{
                name: "loanId";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "floor";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "principalAmount";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "lender";
                type: "address";
                internalType: "address";
            }, {
                name: "accruedInterest";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "startTime";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "aprBps";
                type: "uint256";
                internalType: "uint256";
            }];
        }, {
            name: "protocolFee";
            type: "uint256";
            internalType: "uint256";
        }];
    }, {
        name: "_fee";
        type: "uint256";
        internalType: "uint256";
    }, {
        name: "_executionData";
        type: "bytes";
        internalType: "bytes";
    }];
    outputs: readonly [{
        name: "";
        type: "bytes4";
        internalType: "bytes4";
    }];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "buy";
    inputs: readonly [{
        name: "_executionData";
        type: "bytes[]";
        internalType: "bytes[]";
    }];
    outputs: readonly [{
        name: "";
        type: "uint256[]";
        internalType: "uint256[]";
    }, {
        name: "";
        type: "tuple[]";
        internalType: "struct IMultiSourceLoan.Loan[]";
        components: readonly [{
            name: "borrower";
            type: "address";
            internalType: "address";
        }, {
            name: "nftCollateralTokenId";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "nftCollateralAddress";
            type: "address";
            internalType: "address";
        }, {
            name: "principalAddress";
            type: "address";
            internalType: "address";
        }, {
            name: "principalAmount";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "startTime";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "duration";
            type: "uint256";
            internalType: "uint256";
        }, {
            name: "tranche";
            type: "tuple[]";
            internalType: "struct IMultiSourceLoan.Tranche[]";
            components: readonly [{
                name: "loanId";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "floor";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "principalAmount";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "lender";
                type: "address";
                internalType: "address";
            }, {
                name: "accruedInterest";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "startTime";
                type: "uint256";
                internalType: "uint256";
            }, {
                name: "aprBps";
                type: "uint256";
                internalType: "uint256";
            }];
        }, {
            name: "protocolFee";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    stateMutability: "payable";
}, {
    type: "function";
    name: "executeSell";
    inputs: readonly [{
        name: "_currencies";
        type: "address[]";
        internalType: "contract ERC20[]";
    }, {
        name: "_currencyAmounts";
        type: "uint256[]";
        internalType: "uint256[]";
    }, {
        name: "_collections";
        type: "address[]";
        internalType: "contract ERC721[]";
    }, {
        name: "_tokenIds";
        type: "uint256[]";
        internalType: "uint256[]";
    }, {
        name: "_marketPlace";
        type: "address";
        internalType: "address";
    }, {
        name: "_executionData";
        type: "bytes[]";
        internalType: "bytes[]";
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "finalUpdateMultiSourceLoanAddress";
    inputs: readonly [{
        name: "_newAddress";
        type: "address";
        internalType: "address";
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "getMultiSourceLoanAddress";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "address";
        internalType: "address";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "getPendingProtocolFee";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "tuple";
        internalType: "struct WithProtocolFee.ProtocolFee";
        components: readonly [{
            name: "recipient";
            type: "address";
            internalType: "address";
        }, {
            name: "fraction";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "getPendingProtocolFeeSetTime";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "uint256";
        internalType: "uint256";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "getPendingTaxes";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "tuple";
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "getPendingTaxesSetTime";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "uint256";
        internalType: "uint256";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "getProtocolFee";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "tuple";
        internalType: "struct WithProtocolFee.ProtocolFee";
        components: readonly [{
            name: "recipient";
            type: "address";
            internalType: "address";
        }, {
            name: "fraction";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "getTaxes";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "tuple";
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "onERC721Received";
    inputs: readonly [{
        name: "";
        type: "address";
        internalType: "address";
    }, {
        name: "";
        type: "address";
        internalType: "address";
    }, {
        name: "";
        type: "uint256";
        internalType: "uint256";
    }, {
        name: "";
        type: "bytes";
        internalType: "bytes";
    }];
    outputs: readonly [{
        name: "";
        type: "bytes4";
        internalType: "bytes4";
    }];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "owner";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "address";
        internalType: "address";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "pendingOwner";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "address";
        internalType: "address";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "pendingOwnerTime";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "uint256";
        internalType: "uint256";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "requestTransferOwner";
    inputs: readonly [{
        name: "_newOwner";
        type: "address";
        internalType: "address";
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "sell";
    inputs: readonly [{
        name: "_executionData";
        type: "bytes[]";
        internalType: "bytes[]";
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "setProtocolFee";
    inputs: readonly [];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "setTaxes";
    inputs: readonly [];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "transferOwnership";
    inputs: readonly [];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "transferOwnership";
    inputs: readonly [{
        name: "newOwner";
        type: "address";
        internalType: "address";
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "updateMultiSourceLoanAddressFirst";
    inputs: readonly [{
        name: "_newAddress";
        type: "address";
        internalType: "address";
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "updateProtocolFee";
    inputs: readonly [{
        name: "_newProtocolFee";
        type: "tuple";
        internalType: "struct WithProtocolFee.ProtocolFee";
        components: readonly [{
            name: "recipient";
            type: "address";
            internalType: "address";
        }, {
            name: "fraction";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "updateTaxes";
    inputs: readonly [{
        name: "_newTaxes";
        type: "tuple";
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }];
    outputs: readonly [];
    stateMutability: "nonpayable";
}, {
    type: "event";
    name: "BNPLLoansStarted";
    inputs: readonly [{
        name: "loanIds";
        type: "uint256[]";
        indexed: false;
        internalType: "uint256[]";
    }];
    anonymous: false;
}, {
    type: "event";
    name: "MultiSourceLoanPendingUpdate";
    inputs: readonly [{
        name: "newAddress";
        type: "address";
        indexed: false;
        internalType: "address";
    }];
    anonymous: false;
}, {
    type: "event";
    name: "MultiSourceLoanUpdated";
    inputs: readonly [{
        name: "newAddress";
        type: "address";
        indexed: false;
        internalType: "address";
    }];
    anonymous: false;
}, {
    type: "event";
    name: "OwnershipTransferred";
    inputs: readonly [{
        name: "user";
        type: "address";
        indexed: true;
        internalType: "address";
    }, {
        name: "newOwner";
        type: "address";
        indexed: true;
        internalType: "address";
    }];
    anonymous: false;
}, {
    type: "event";
    name: "ProtocolFeePendingUpdate";
    inputs: readonly [{
        name: "fee";
        type: "tuple";
        indexed: false;
        internalType: "struct WithProtocolFee.ProtocolFee";
        components: readonly [{
            name: "recipient";
            type: "address";
            internalType: "address";
        }, {
            name: "fraction";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    anonymous: false;
}, {
    type: "event";
    name: "ProtocolFeeUpdated";
    inputs: readonly [{
        name: "fee";
        type: "tuple";
        indexed: false;
        internalType: "struct WithProtocolFee.ProtocolFee";
        components: readonly [{
            name: "recipient";
            type: "address";
            internalType: "address";
        }, {
            name: "fraction";
            type: "uint256";
            internalType: "uint256";
        }];
    }];
    anonymous: false;
}, {
    type: "event";
    name: "SellAndRepayExecuted";
    inputs: readonly [{
        name: "loanIds";
        type: "uint256[]";
        indexed: false;
        internalType: "uint256[]";
    }];
    anonymous: false;
}, {
    type: "event";
    name: "TaxesPendingUpdate";
    inputs: readonly [{
        name: "newTaxes";
        type: "tuple";
        indexed: false;
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }];
    anonymous: false;
}, {
    type: "event";
    name: "TaxesUpdated";
    inputs: readonly [{
        name: "taxes";
        type: "tuple";
        indexed: false;
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }];
    anonymous: false;
}, {
    type: "event";
    name: "TransferOwnerRequested";
    inputs: readonly [{
        name: "newOwner";
        type: "address";
        indexed: false;
        internalType: "address";
    }];
    anonymous: false;
}, {
    type: "error";
    name: "AddressZeroError";
    inputs: readonly [];
}, {
    type: "error";
    name: "CouldNotReturnEthError";
    inputs: readonly [];
}, {
    type: "error";
    name: "InvalidAddressUpdateError";
    inputs: readonly [];
}, {
    type: "error";
    name: "InvalidCallbackError";
    inputs: readonly [];
}, {
    type: "error";
    name: "InvalidInputError";
    inputs: readonly [];
}, {
    type: "error";
    name: "InvalidTaxesError";
    inputs: readonly [{
        name: "newTaxes";
        type: "tuple";
        internalType: "struct IPurchaseBundler.Taxes";
        components: readonly [{
            name: "buyTax";
            type: "uint128";
            internalType: "uint128";
        }, {
            name: "sellTax";
            type: "uint128";
            internalType: "uint128";
        }];
    }];
}, {
    type: "error";
    name: "MarketplaceAddressNotWhitelisted";
    inputs: readonly [];
}, {
    type: "error";
    name: "OnlyLoanCallableError";
    inputs: readonly [];
}, {
    type: "error";
    name: "OnlyWethSupportedError";
    inputs: readonly [];
}, {
    type: "error";
    name: "TooEarlyError";
    inputs: readonly [{
        name: "_pendingProtocolFeeSetTime";
        type: "uint256";
        internalType: "uint256";
    }];
}, {
    type: "error";
    name: "TooSoonError";
    inputs: readonly [];
}]
address: `0x${string}`
bcClient: {}

Type declaration

    wallet: {}

    Type declaration

      contract: GetContractReturnType<readonly [{
          type: "constructor";
          inputs: readonly [{
              name: "_multiSourceLoanAddress";
              type: "address";
              internalType: "address";
          }, {
              name: "_marketplaceContracts";
              type: "address";
              internalType: "address";
          }, {
              name: "_wethAddress";
              type: "address";
              internalType: "address payable";
          }, {
              name: "_punkMarketAddress";
              type: "address";
              internalType: "address payable";
          }, {
              name: "_wrappedPunkAddress";
              type: "address";
              internalType: "address payable";
          }, {
              name: "__taxes";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }, {
              name: "_minWaitTime";
              type: "uint256";
              internalType: "uint256";
          }, {
              name: "__protocolFee";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "nonpayable";
      }, {
          type: "fallback";
          stateMutability: "payable";
      }, {
          type: "receive";
          stateMutability: "payable";
      }, {
          type: "function";
          name: "FEE_UPDATE_NOTICE";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "MIN_WAIT_TIME";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "TAX_UPDATE_NOTICE";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "afterNFTTransfer";
          inputs: readonly [{
              name: "_loan";
              type: "tuple";
              internalType: "struct IMultiSourceLoan.Loan";
              components: readonly [{
                  name: "borrower";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "nftCollateralTokenId";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAmount";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "startTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "duration";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "tranche";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Tranche[]";
                  components: readonly [{
                      name: "loanId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "floor";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "lender";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "accruedInterest";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "aprBps";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "protocolFee";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              name: "_executionData";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bytes4";
              internalType: "bytes4";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "afterPrincipalTransfer";
          inputs: readonly [{
              name: "_loan";
              type: "tuple";
              internalType: "struct IMultiSourceLoan.Loan";
              components: readonly [{
                  name: "borrower";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "nftCollateralTokenId";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAmount";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "startTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "duration";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "tranche";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Tranche[]";
                  components: readonly [{
                      name: "loanId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "floor";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "lender";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "accruedInterest";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "aprBps";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "protocolFee";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              name: "_fee";
              type: "uint256";
              internalType: "uint256";
          }, {
              name: "_executionData";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bytes4";
              internalType: "bytes4";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "buy";
          inputs: readonly [{
              name: "_executionData";
              type: "bytes[]";
              internalType: "bytes[]";
          }];
          outputs: readonly [{
              name: "";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "";
              type: "tuple[]";
              internalType: "struct IMultiSourceLoan.Loan[]";
              components: readonly [{
                  name: "borrower";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "nftCollateralTokenId";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAmount";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "startTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "duration";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "tranche";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Tranche[]";
                  components: readonly [{
                      name: "loanId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "floor";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "lender";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "accruedInterest";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "aprBps";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "protocolFee";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "payable";
      }, {
          type: "function";
          name: "executeSell";
          inputs: readonly [{
              name: "_currencies";
              type: "address[]";
              internalType: "contract ERC20[]";
          }, {
              name: "_currencyAmounts";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "_collections";
              type: "address[]";
              internalType: "contract ERC721[]";
          }, {
              name: "_tokenIds";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "_marketPlace";
              type: "address";
              internalType: "address";
          }, {
              name: "_executionData";
              type: "bytes[]";
              internalType: "bytes[]";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "finalUpdateMultiSourceLoanAddress";
          inputs: readonly [{
              name: "_newAddress";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "getMultiSourceLoanAddress";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingProtocolFee";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingProtocolFeeSetTime";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingTaxes";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingTaxesSetTime";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getProtocolFee";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getTaxes";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "onERC721Received";
          inputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }, {
              name: "";
              type: "address";
              internalType: "address";
          }, {
              name: "";
              type: "uint256";
              internalType: "uint256";
          }, {
              name: "";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bytes4";
              internalType: "bytes4";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "owner";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "pendingOwner";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "pendingOwnerTime";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "requestTransferOwner";
          inputs: readonly [{
              name: "_newOwner";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "sell";
          inputs: readonly [{
              name: "_executionData";
              type: "bytes[]";
              internalType: "bytes[]";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "setProtocolFee";
          inputs: readonly [];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "setTaxes";
          inputs: readonly [];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "transferOwnership";
          inputs: readonly [];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "transferOwnership";
          inputs: readonly [{
              name: "newOwner";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "updateMultiSourceLoanAddressFirst";
          inputs: readonly [{
              name: "_newAddress";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "updateProtocolFee";
          inputs: readonly [{
              name: "_newProtocolFee";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "updateTaxes";
          inputs: readonly [{
              name: "_newTaxes";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "event";
          name: "BNPLLoansStarted";
          inputs: readonly [{
              name: "loanIds";
              type: "uint256[]";
              indexed: false;
              internalType: "uint256[]";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "MultiSourceLoanPendingUpdate";
          inputs: readonly [{
              name: "newAddress";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "MultiSourceLoanUpdated";
          inputs: readonly [{
              name: "newAddress";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "OwnershipTransferred";
          inputs: readonly [{
              name: "user";
              type: "address";
              indexed: true;
              internalType: "address";
          }, {
              name: "newOwner";
              type: "address";
              indexed: true;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "ProtocolFeePendingUpdate";
          inputs: readonly [{
              name: "fee";
              type: "tuple";
              indexed: false;
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "ProtocolFeeUpdated";
          inputs: readonly [{
              name: "fee";
              type: "tuple";
              indexed: false;
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "SellAndRepayExecuted";
          inputs: readonly [{
              name: "loanIds";
              type: "uint256[]";
              indexed: false;
              internalType: "uint256[]";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "TaxesPendingUpdate";
          inputs: readonly [{
              name: "newTaxes";
              type: "tuple";
              indexed: false;
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "TaxesUpdated";
          inputs: readonly [{
              name: "taxes";
              type: "tuple";
              indexed: false;
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "TransferOwnerRequested";
          inputs: readonly [{
              name: "newOwner";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "error";
          name: "AddressZeroError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "CouldNotReturnEthError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidAddressUpdateError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidCallbackError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidInputError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidTaxesError";
          inputs: readonly [{
              name: "newTaxes";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
      }, {
          type: "error";
          name: "MarketplaceAddressNotWhitelisted";
          inputs: readonly [];
      }, {
          type: "error";
          name: "OnlyLoanCallableError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "OnlyWethSupportedError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "TooEarlyError";
          inputs: readonly [{
              name: "_pendingProtocolFeeSetTime";
              type: "uint256";
              internalType: "uint256";
          }];
      }, {
          type: "error";
          name: "TooSoonError";
          inputs: readonly [];
      }], {} | {}>
      safeContractWrite: {
          transferOwnership: ((args, options?) => Promise<`0x${string}`>);
          onERC721Received: ((args, options?) => Promise<`0x${string}`>);
          setProtocolFee: ((args, options?) => Promise<`0x${string}`>);
          updateProtocolFee: ((args, options?) => Promise<`0x${string}`>);
          afterNFTTransfer: ((args, options?) => Promise<`0x${string}`>);
          afterPrincipalTransfer: ((args, options?) => Promise<`0x${string}`>);
          buy: ((args, options?) => Promise<`0x${string}`>);
          finalUpdateMultiSourceLoanAddress: ((args, options?) => Promise<`0x${string}`>);
          sell: ((args, options?) => Promise<`0x${string}`>);
          updateMultiSourceLoanAddressFirst: ((args, options?) => Promise<`0x${string}`>);
          requestTransferOwner: ((args, options?) => Promise<`0x${string}`>);
          executeSell: ((args, options?) => Promise<`0x${string}`>);
          setTaxes: ((args, options?) => Promise<`0x${string}`>);
          updateTaxes: ((args, options?) => Promise<`0x${string}`>);
      }

      Type declaration

      • transferOwnership: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: undefined | readonly [] | readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • onERC721Received: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`, `0x${string}`, bigint, `0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • setProtocolFee: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: undefined | readonly []
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateProtocolFee: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  recipient: `0x${string}`;
                  fraction: bigint;
              }] | readonly [{
                  recipient: `0x${string}`;
                  fraction: bigint;
              }] & readonly [{
                  recipient: `0x${string}`;
                  fraction: bigint;
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • afterNFTTransfer: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  tranche: readonly ({ loanId: bigint; floor: bigint; principalAmount: bigint; lender: `0x${string}`; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                  protocolFee: bigint;
              }, `0x${string}`] | readonly [{
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  tranche: readonly ({ loanId: bigint; floor: bigint; principalAmount: bigint; lender: `0x${string}`; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                  protocolFee: bigint;
              }, `0x${string}`] & readonly [{
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  tranche: readonly ({ loanId: bigint; floor: bigint; principalAmount: bigint; lender: `0x${string}`; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                  protocolFee: bigint;
              }, `0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • afterPrincipalTransfer: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  tranche: readonly ({ loanId: bigint; floor: bigint; principalAmount: bigint; lender: `0x${string}`; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                  protocolFee: bigint;
              }, bigint, `0x${string}`] | readonly [{
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  tranche: readonly ({ loanId: bigint; floor: bigint; principalAmount: bigint; lender: `0x${string}`; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                  protocolFee: bigint;
              }, bigint, `0x${string}`] & readonly [{
                  borrower: `0x${string}`;
                  nftCollateralTokenId: bigint;
                  nftCollateralAddress: `0x${string}`;
                  principalAddress: `0x${string}`;
                  principalAmount: bigint;
                  startTime: bigint;
                  duration: bigint;
                  tranche: readonly ({ loanId: bigint; floor: bigint; principalAmount: bigint; lender: `0x${string}`; accruedInterest: bigint; startTime: bigint; aprBps: bigint; })[];
                  protocolFee: bigint;
              }, bigint, `0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • buy: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [readonly `0x${string}`[]] | readonly [readonly `0x${string}`[]] & readonly [readonly `0x${string}`[]]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • finalUpdateMultiSourceLoanAddress: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • sell: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [readonly `0x${string}`[]] | readonly [readonly `0x${string}`[]] & readonly [readonly `0x${string}`[]]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateMultiSourceLoanAddressFirst: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • requestTransferOwner: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [`0x${string}`]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • executeSell: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [readonly `0x${string}`[], readonly bigint[], readonly `0x${string}`[], readonly bigint[], `0x${string}`, readonly `0x${string}`[]] | readonly [readonly `0x${string}`[], readonly bigint[], readonly `0x${string}`[], readonly bigint[], `0x${string}`, readonly `0x${string}`[]] & readonly [readonly `0x${string}`[], readonly bigint[], readonly `0x${string}`[], readonly bigint[], `0x${string}`, readonly `0x${string}`[]]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • setTaxes: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: undefined | readonly []
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      • updateTaxes: ((args, options?) => Promise<`0x${string}`>)
          • (args, options?): Promise<`0x${string}`>
          • Parameters

            • args: readonly [{
                  buyTax: bigint;
                  sellTax: bigint;
              }] | readonly [{
                  buyTax: bigint;
                  sellTax: bigint;
              }] & readonly [{
                  buyTax: bigint;
                  sellTax: bigint;
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

            Returns Promise<`0x${string}`>

      parseEventLogs: (<TFunctionName>(eventName, logs) => ParseEventLogsReturnType<readonly [{
          type: "constructor";
          inputs: readonly [{
              name: "_multiSourceLoanAddress";
              type: "address";
              internalType: "address";
          }, {
              name: "_marketplaceContracts";
              type: "address";
              internalType: "address";
          }, {
              name: "_wethAddress";
              type: "address";
              internalType: "address payable";
          }, {
              name: "_punkMarketAddress";
              type: "address";
              internalType: "address payable";
          }, {
              name: "_wrappedPunkAddress";
              type: "address";
              internalType: "address payable";
          }, {
              name: "__taxes";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }, {
              name: "_minWaitTime";
              type: "uint256";
              internalType: "uint256";
          }, {
              name: "__protocolFee";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "nonpayable";
      }, {
          type: "fallback";
          stateMutability: "payable";
      }, {
          type: "receive";
          stateMutability: "payable";
      }, {
          type: "function";
          name: "FEE_UPDATE_NOTICE";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "MIN_WAIT_TIME";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "TAX_UPDATE_NOTICE";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "afterNFTTransfer";
          inputs: readonly [{
              name: "_loan";
              type: "tuple";
              internalType: "struct IMultiSourceLoan.Loan";
              components: readonly [{
                  name: "borrower";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "nftCollateralTokenId";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAmount";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "startTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "duration";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "tranche";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Tranche[]";
                  components: readonly [{
                      name: "loanId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "floor";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "lender";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "accruedInterest";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "aprBps";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "protocolFee";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              name: "_executionData";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bytes4";
              internalType: "bytes4";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "afterPrincipalTransfer";
          inputs: readonly [{
              name: "_loan";
              type: "tuple";
              internalType: "struct IMultiSourceLoan.Loan";
              components: readonly [{
                  name: "borrower";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "nftCollateralTokenId";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAmount";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "startTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "duration";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "tranche";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Tranche[]";
                  components: readonly [{
                      name: "loanId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "floor";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "lender";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "accruedInterest";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "aprBps";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "protocolFee";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              name: "_fee";
              type: "uint256";
              internalType: "uint256";
          }, {
              name: "_executionData";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bytes4";
              internalType: "bytes4";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "buy";
          inputs: readonly [{
              name: "_executionData";
              type: "bytes[]";
              internalType: "bytes[]";
          }];
          outputs: readonly [{
              name: "";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "";
              type: "tuple[]";
              internalType: "struct IMultiSourceLoan.Loan[]";
              components: readonly [{
                  name: "borrower";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "nftCollateralTokenId";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "nftCollateralAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "principalAmount";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "startTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "duration";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "tranche";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Tranche[]";
                  components: readonly [{
                      name: "loanId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "floor";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "lender";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "accruedInterest";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "aprBps";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "protocolFee";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "payable";
      }, {
          type: "function";
          name: "executeSell";
          inputs: readonly [{
              name: "_currencies";
              type: "address[]";
              internalType: "contract ERC20[]";
          }, {
              name: "_currencyAmounts";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "_collections";
              type: "address[]";
              internalType: "contract ERC721[]";
          }, {
              name: "_tokenIds";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "_marketPlace";
              type: "address";
              internalType: "address";
          }, {
              name: "_executionData";
              type: "bytes[]";
              internalType: "bytes[]";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "finalUpdateMultiSourceLoanAddress";
          inputs: readonly [{
              name: "_newAddress";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "getMultiSourceLoanAddress";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingProtocolFee";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingProtocolFeeSetTime";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingTaxes";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getPendingTaxesSetTime";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getProtocolFee";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "getTaxes";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "onERC721Received";
          inputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }, {
              name: "";
              type: "address";
              internalType: "address";
          }, {
              name: "";
              type: "uint256";
              internalType: "uint256";
          }, {
              name: "";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bytes4";
              internalType: "bytes4";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "owner";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "pendingOwner";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "address";
              internalType: "address";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "pendingOwnerTime";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "uint256";
              internalType: "uint256";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "requestTransferOwner";
          inputs: readonly [{
              name: "_newOwner";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "sell";
          inputs: readonly [{
              name: "_executionData";
              type: "bytes[]";
              internalType: "bytes[]";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "setProtocolFee";
          inputs: readonly [];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "setTaxes";
          inputs: readonly [];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "transferOwnership";
          inputs: readonly [];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "transferOwnership";
          inputs: readonly [{
              name: "newOwner";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "updateMultiSourceLoanAddressFirst";
          inputs: readonly [{
              name: "_newAddress";
              type: "address";
              internalType: "address";
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "updateProtocolFee";
          inputs: readonly [{
              name: "_newProtocolFee";
              type: "tuple";
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "updateTaxes";
          inputs: readonly [{
              name: "_newTaxes";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          outputs: readonly [];
          stateMutability: "nonpayable";
      }, {
          type: "event";
          name: "BNPLLoansStarted";
          inputs: readonly [{
              name: "loanIds";
              type: "uint256[]";
              indexed: false;
              internalType: "uint256[]";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "MultiSourceLoanPendingUpdate";
          inputs: readonly [{
              name: "newAddress";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "MultiSourceLoanUpdated";
          inputs: readonly [{
              name: "newAddress";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "OwnershipTransferred";
          inputs: readonly [{
              name: "user";
              type: "address";
              indexed: true;
              internalType: "address";
          }, {
              name: "newOwner";
              type: "address";
              indexed: true;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "ProtocolFeePendingUpdate";
          inputs: readonly [{
              name: "fee";
              type: "tuple";
              indexed: false;
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "ProtocolFeeUpdated";
          inputs: readonly [{
              name: "fee";
              type: "tuple";
              indexed: false;
              internalType: "struct WithProtocolFee.ProtocolFee";
              components: readonly [{
                  name: "recipient";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "fraction";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "SellAndRepayExecuted";
          inputs: readonly [{
              name: "loanIds";
              type: "uint256[]";
              indexed: false;
              internalType: "uint256[]";
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "TaxesPendingUpdate";
          inputs: readonly [{
              name: "newTaxes";
              type: "tuple";
              indexed: false;
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "TaxesUpdated";
          inputs: readonly [{
              name: "taxes";
              type: "tuple";
              indexed: false;
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
          anonymous: false;
      }, {
          type: "event";
          name: "TransferOwnerRequested";
          inputs: readonly [{
              name: "newOwner";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "error";
          name: "AddressZeroError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "CouldNotReturnEthError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidAddressUpdateError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidCallbackError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidInputError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "InvalidTaxesError";
          inputs: readonly [{
              name: "newTaxes";
              type: "tuple";
              internalType: "struct IPurchaseBundler.Taxes";
              components: readonly [{
                  name: "buyTax";
                  type: "uint128";
                  internalType: "uint128";
              }, {
                  name: "sellTax";
                  type: "uint128";
                  internalType: "uint128";
              }];
          }];
      }, {
          type: "error";
          name: "MarketplaceAddressNotWhitelisted";
          inputs: readonly [];
      }, {
          type: "error";
          name: "OnlyLoanCallableError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "OnlyWethSupportedError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "TooEarlyError";
          inputs: readonly [{
              name: "_pendingProtocolFeeSetTime";
              type: "uint256";
              internalType: "uint256";
          }];
      }, {
          type: "error";
          name: "TooSoonError";
          inputs: readonly [];
      }], TFunctionName, true, TFunctionName extends ("OwnershipTransferred" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "BNPLLoansStarted" | "MultiSourceLoanPendingUpdate" | "MultiSourceLoanUpdated" | "SellAndRepayExecuted" | "TransferOwnerRequested" | "TaxesPendingUpdate" | "TaxesUpdated")[]
          ? TFunctionName[number]
          : TFunctionName>)

      Type declaration

        • <TFunctionName>(eventName, logs): ParseEventLogsReturnType<readonly [{
              type: "constructor";
              inputs: readonly [{
                  name: "_multiSourceLoanAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "_marketplaceContracts";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "_wethAddress";
                  type: "address";
                  internalType: "address payable";
              }, {
                  name: "_punkMarketAddress";
                  type: "address";
                  internalType: "address payable";
              }, {
                  name: "_wrappedPunkAddress";
                  type: "address";
                  internalType: "address payable";
              }, {
                  name: "__taxes";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }, {
                  name: "_minWaitTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "__protocolFee";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "nonpayable";
          }, {
              type: "fallback";
              stateMutability: "payable";
          }, {
              type: "receive";
              stateMutability: "payable";
          }, {
              type: "function";
              name: "FEE_UPDATE_NOTICE";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "MIN_WAIT_TIME";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "TAX_UPDATE_NOTICE";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "afterNFTTransfer";
              inputs: readonly [{
                  name: "_loan";
                  type: "tuple";
                  internalType: "struct IMultiSourceLoan.Loan";
                  components: readonly [{
                      name: "borrower";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "duration";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "tranche";
                      type: "tuple[]";
                      internalType: "struct IMultiSourceLoan.Tranche[]";
                      components: readonly [{
                          name: "loanId";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "floor";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "principalAmount";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "lender";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "accruedInterest";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "startTime";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "aprBps";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "protocolFee";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "_executionData";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bytes4";
                  internalType: "bytes4";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "afterPrincipalTransfer";
              inputs: readonly [{
                  name: "_loan";
                  type: "tuple";
                  internalType: "struct IMultiSourceLoan.Loan";
                  components: readonly [{
                      name: "borrower";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "duration";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "tranche";
                      type: "tuple[]";
                      internalType: "struct IMultiSourceLoan.Tranche[]";
                      components: readonly [{
                          name: "loanId";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "floor";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "principalAmount";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "lender";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "accruedInterest";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "startTime";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "aprBps";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "protocolFee";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "_fee";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "_executionData";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bytes4";
                  internalType: "bytes4";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "buy";
              inputs: readonly [{
                  name: "_executionData";
                  type: "bytes[]";
                  internalType: "bytes[]";
              }];
              outputs: readonly [{
                  name: "";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Loan[]";
                  components: readonly [{
                      name: "borrower";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "duration";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "tranche";
                      type: "tuple[]";
                      internalType: "struct IMultiSourceLoan.Tranche[]";
                      components: readonly [{
                          name: "loanId";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "floor";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "principalAmount";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "lender";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "accruedInterest";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "startTime";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "aprBps";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "protocolFee";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "payable";
          }, {
              type: "function";
              name: "executeSell";
              inputs: readonly [{
                  name: "_currencies";
                  type: "address[]";
                  internalType: "contract ERC20[]";
              }, {
                  name: "_currencyAmounts";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "_collections";
                  type: "address[]";
                  internalType: "contract ERC721[]";
              }, {
                  name: "_tokenIds";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "_marketPlace";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "_executionData";
                  type: "bytes[]";
                  internalType: "bytes[]";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "finalUpdateMultiSourceLoanAddress";
              inputs: readonly [{
                  name: "_newAddress";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "getMultiSourceLoanAddress";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingProtocolFee";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingProtocolFeeSetTime";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingTaxes";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingTaxesSetTime";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getProtocolFee";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getTaxes";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "onERC721Received";
              inputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bytes4";
                  internalType: "bytes4";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "owner";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "pendingOwner";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "pendingOwnerTime";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "requestTransferOwner";
              inputs: readonly [{
                  name: "_newOwner";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "sell";
              inputs: readonly [{
                  name: "_executionData";
                  type: "bytes[]";
                  internalType: "bytes[]";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "setProtocolFee";
              inputs: readonly [];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "setTaxes";
              inputs: readonly [];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "transferOwnership";
              inputs: readonly [];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "transferOwnership";
              inputs: readonly [{
                  name: "newOwner";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "updateMultiSourceLoanAddressFirst";
              inputs: readonly [{
                  name: "_newAddress";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "updateProtocolFee";
              inputs: readonly [{
                  name: "_newProtocolFee";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "updateTaxes";
              inputs: readonly [{
                  name: "_newTaxes";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "event";
              name: "BNPLLoansStarted";
              inputs: readonly [{
                  name: "loanIds";
                  type: "uint256[]";
                  indexed: false;
                  internalType: "uint256[]";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "MultiSourceLoanPendingUpdate";
              inputs: readonly [{
                  name: "newAddress";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "MultiSourceLoanUpdated";
              inputs: readonly [{
                  name: "newAddress";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "OwnershipTransferred";
              inputs: readonly [{
                  name: "user";
                  type: "address";
                  indexed: true;
                  internalType: "address";
              }, {
                  name: "newOwner";
                  type: "address";
                  indexed: true;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "ProtocolFeePendingUpdate";
              inputs: readonly [{
                  name: "fee";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "ProtocolFeeUpdated";
              inputs: readonly [{
                  name: "fee";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "SellAndRepayExecuted";
              inputs: readonly [{
                  name: "loanIds";
                  type: "uint256[]";
                  indexed: false;
                  internalType: "uint256[]";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "TaxesPendingUpdate";
              inputs: readonly [{
                  name: "newTaxes";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "TaxesUpdated";
              inputs: readonly [{
                  name: "taxes";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "TransferOwnerRequested";
              inputs: readonly [{
                  name: "newOwner";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "error";
              name: "AddressZeroError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "CouldNotReturnEthError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidAddressUpdateError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidCallbackError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidInputError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidTaxesError";
              inputs: readonly [{
                  name: "newTaxes";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
          }, {
              type: "error";
              name: "MarketplaceAddressNotWhitelisted";
              inputs: readonly [];
          }, {
              type: "error";
              name: "OnlyLoanCallableError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "OnlyWethSupportedError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "TooEarlyError";
              inputs: readonly [{
                  name: "_pendingProtocolFeeSetTime";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              type: "error";
              name: "TooSoonError";
              inputs: readonly [];
          }], TFunctionName, true, TFunctionName extends ("OwnershipTransferred" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "BNPLLoansStarted" | "MultiSourceLoanPendingUpdate" | "MultiSourceLoanUpdated" | "SellAndRepayExecuted" | "TransferOwnerRequested" | "TaxesPendingUpdate" | "TaxesUpdated")[]
              ? TFunctionName[number]
              : TFunctionName>
        • Type Parameters

          • TFunctionName extends "OwnershipTransferred" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "BNPLLoansStarted" | "MultiSourceLoanPendingUpdate" | "MultiSourceLoanUpdated" | "SellAndRepayExecuted" | "TransferOwnerRequested" | "TaxesPendingUpdate" | "TaxesUpdated"

          Parameters

          • eventName: TFunctionName
          • logs: Log<bigint, number, false>[]

          Returns ParseEventLogsReturnType<readonly [{
              type: "constructor";
              inputs: readonly [{
                  name: "_multiSourceLoanAddress";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "_marketplaceContracts";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "_wethAddress";
                  type: "address";
                  internalType: "address payable";
              }, {
                  name: "_punkMarketAddress";
                  type: "address";
                  internalType: "address payable";
              }, {
                  name: "_wrappedPunkAddress";
                  type: "address";
                  internalType: "address payable";
              }, {
                  name: "__taxes";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }, {
                  name: "_minWaitTime";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "__protocolFee";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "nonpayable";
          }, {
              type: "fallback";
              stateMutability: "payable";
          }, {
              type: "receive";
              stateMutability: "payable";
          }, {
              type: "function";
              name: "FEE_UPDATE_NOTICE";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "MIN_WAIT_TIME";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "TAX_UPDATE_NOTICE";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "afterNFTTransfer";
              inputs: readonly [{
                  name: "_loan";
                  type: "tuple";
                  internalType: "struct IMultiSourceLoan.Loan";
                  components: readonly [{
                      name: "borrower";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "duration";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "tranche";
                      type: "tuple[]";
                      internalType: "struct IMultiSourceLoan.Tranche[]";
                      components: readonly [{
                          name: "loanId";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "floor";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "principalAmount";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "lender";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "accruedInterest";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "startTime";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "aprBps";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "protocolFee";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "_executionData";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bytes4";
                  internalType: "bytes4";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "afterPrincipalTransfer";
              inputs: readonly [{
                  name: "_loan";
                  type: "tuple";
                  internalType: "struct IMultiSourceLoan.Loan";
                  components: readonly [{
                      name: "borrower";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "duration";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "tranche";
                      type: "tuple[]";
                      internalType: "struct IMultiSourceLoan.Tranche[]";
                      components: readonly [{
                          name: "loanId";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "floor";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "principalAmount";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "lender";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "accruedInterest";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "startTime";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "aprBps";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "protocolFee";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }, {
                  name: "_fee";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "_executionData";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bytes4";
                  internalType: "bytes4";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "buy";
              inputs: readonly [{
                  name: "_executionData";
                  type: "bytes[]";
                  internalType: "bytes[]";
              }];
              outputs: readonly [{
                  name: "";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "";
                  type: "tuple[]";
                  internalType: "struct IMultiSourceLoan.Loan[]";
                  components: readonly [{
                      name: "borrower";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "nftCollateralTokenId";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "nftCollateralAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAddress";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "principalAmount";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "startTime";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "duration";
                      type: "uint256";
                      internalType: "uint256";
                  }, {
                      name: "tranche";
                      type: "tuple[]";
                      internalType: "struct IMultiSourceLoan.Tranche[]";
                      components: readonly [{
                          name: "loanId";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "floor";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "principalAmount";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "lender";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "accruedInterest";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "startTime";
                          type: "uint256";
                          internalType: "uint256";
                      }, {
                          name: "aprBps";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "protocolFee";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "payable";
          }, {
              type: "function";
              name: "executeSell";
              inputs: readonly [{
                  name: "_currencies";
                  type: "address[]";
                  internalType: "contract ERC20[]";
              }, {
                  name: "_currencyAmounts";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "_collections";
                  type: "address[]";
                  internalType: "contract ERC721[]";
              }, {
                  name: "_tokenIds";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "_marketPlace";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "_executionData";
                  type: "bytes[]";
                  internalType: "bytes[]";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "finalUpdateMultiSourceLoanAddress";
              inputs: readonly [{
                  name: "_newAddress";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "getMultiSourceLoanAddress";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingProtocolFee";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingProtocolFeeSetTime";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingTaxes";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getPendingTaxesSetTime";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getProtocolFee";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "getTaxes";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "onERC721Received";
              inputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }, {
                  name: "";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bytes4";
                  internalType: "bytes4";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "owner";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "pendingOwner";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "address";
                  internalType: "address";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "pendingOwnerTime";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "uint256";
                  internalType: "uint256";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "requestTransferOwner";
              inputs: readonly [{
                  name: "_newOwner";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "sell";
              inputs: readonly [{
                  name: "_executionData";
                  type: "bytes[]";
                  internalType: "bytes[]";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "setProtocolFee";
              inputs: readonly [];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "setTaxes";
              inputs: readonly [];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "transferOwnership";
              inputs: readonly [];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "transferOwnership";
              inputs: readonly [{
                  name: "newOwner";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "updateMultiSourceLoanAddressFirst";
              inputs: readonly [{
                  name: "_newAddress";
                  type: "address";
                  internalType: "address";
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "updateProtocolFee";
              inputs: readonly [{
                  name: "_newProtocolFee";
                  type: "tuple";
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "updateTaxes";
              inputs: readonly [{
                  name: "_newTaxes";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              outputs: readonly [];
              stateMutability: "nonpayable";
          }, {
              type: "event";
              name: "BNPLLoansStarted";
              inputs: readonly [{
                  name: "loanIds";
                  type: "uint256[]";
                  indexed: false;
                  internalType: "uint256[]";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "MultiSourceLoanPendingUpdate";
              inputs: readonly [{
                  name: "newAddress";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "MultiSourceLoanUpdated";
              inputs: readonly [{
                  name: "newAddress";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "OwnershipTransferred";
              inputs: readonly [{
                  name: "user";
                  type: "address";
                  indexed: true;
                  internalType: "address";
              }, {
                  name: "newOwner";
                  type: "address";
                  indexed: true;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "ProtocolFeePendingUpdate";
              inputs: readonly [{
                  name: "fee";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "ProtocolFeeUpdated";
              inputs: readonly [{
                  name: "fee";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct WithProtocolFee.ProtocolFee";
                  components: readonly [{
                      name: "recipient";
                      type: "address";
                      internalType: "address";
                  }, {
                      name: "fraction";
                      type: "uint256";
                      internalType: "uint256";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "SellAndRepayExecuted";
              inputs: readonly [{
                  name: "loanIds";
                  type: "uint256[]";
                  indexed: false;
                  internalType: "uint256[]";
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "TaxesPendingUpdate";
              inputs: readonly [{
                  name: "newTaxes";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "TaxesUpdated";
              inputs: readonly [{
                  name: "taxes";
                  type: "tuple";
                  indexed: false;
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
              anonymous: false;
          }, {
              type: "event";
              name: "TransferOwnerRequested";
              inputs: readonly [{
                  name: "newOwner";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "error";
              name: "AddressZeroError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "CouldNotReturnEthError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidAddressUpdateError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidCallbackError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidInputError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "InvalidTaxesError";
              inputs: readonly [{
                  name: "newTaxes";
                  type: "tuple";
                  internalType: "struct IPurchaseBundler.Taxes";
                  components: readonly [{
                      name: "buyTax";
                      type: "uint128";
                      internalType: "uint128";
                  }, {
                      name: "sellTax";
                      type: "uint128";
                      internalType: "uint128";
                  }];
              }];
          }, {
              type: "error";
              name: "MarketplaceAddressNotWhitelisted";
              inputs: readonly [];
          }, {
              type: "error";
              name: "OnlyLoanCallableError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "OnlyWethSupportedError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "TooEarlyError";
              inputs: readonly [{
                  name: "_pendingProtocolFeeSetTime";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              type: "error";
              name: "TooSoonError";
              inputs: readonly [];
          }], TFunctionName, true, TFunctionName extends ("OwnershipTransferred" | "ProtocolFeePendingUpdate" | "ProtocolFeeUpdated" | "BNPLLoansStarted" | "MultiSourceLoanPendingUpdate" | "MultiSourceLoanUpdated" | "SellAndRepayExecuted" | "TransferOwnerRequested" | "TaxesPendingUpdate" | "TaxesUpdated")[]
              ? TFunctionName[number]
              : TFunctionName>