Class PositionMigrator

This contract allows migration from one position to another. We will use this to migrate V3.0 loans to V3.1 and also support capital efficient refinance from offers

Hierarchy

Constructors

Methods

  • Parameters

    • __namedParameters: {
          structToSign: {
              close: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; };
              open: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; };
              borrowArgs: { pool: `0x${string}`; recipient: `0x${string}`; assets: readonly `0x${string}`[]; amounts: readonly bigint[]; };
              migrator: `0x${string}`;
          };
      }
      • structToSign: {
            close: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; };
            open: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; };
            borrowArgs: { pool: `0x${string}`; recipient: `0x${string}`; assets: readonly `0x${string}`[]; amounts: readonly bigint[]; };
            migrator: `0x${string}`;
        }
        • close: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }
        • open: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }
        • borrowArgs: { pool: `0x${string}`; recipient: `0x${string}`; assets: readonly `0x${string}`[]; amounts: readonly bigint[]; }
        • migrator: `0x${string}`

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

  • Parameters

    • __namedParameters: {
          currentBalance: bigint;
          targetContract: `0x${string}`;
          repaymentCalldata: `0x${string}`;
          emitCalldata: `0x${string}`;
      }
      • currentBalance: bigint
      • targetContract: `0x${string}`
      • repaymentCalldata: `0x${string}`
      • emitCalldata: `0x${string}`

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

  • Parameters

    • data: `0x${string}`
    • Optional value: bigint

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

Properties

msl: MslV6
abi: readonly [{
    type: "constructor";
    inputs: readonly [{
        name: "_name";
        type: "string";
        internalType: "string";
    }];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "DOMAIN_SEPARATOR";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "bytes32";
        internalType: "bytes32";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "INITIAL_DOMAIN_SEPARATOR";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "bytes32";
        internalType: "bytes32";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "VERSION";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "bytes";
        internalType: "bytes";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "executeOperation";
    inputs: readonly [{
        name: "assets";
        type: "address[]";
        internalType: "address[]";
    }, {
        name: "amounts";
        type: "uint256[]";
        internalType: "uint256[]";
    }, {
        name: "premiums";
        type: "uint256[]";
        internalType: "uint256[]";
    }, {
        name: "";
        type: "address";
        internalType: "address";
    }, {
        name: "params";
        type: "bytes";
        internalType: "bytes";
    }];
    outputs: readonly [{
        name: "";
        type: "bool";
        internalType: "bool";
    }];
    stateMutability: "nonpayable";
}, {
    type: "function";
    name: "name";
    inputs: readonly [];
    outputs: readonly [{
        name: "";
        type: "string";
        internalType: "string";
    }];
    stateMutability: "view";
}, {
    type: "function";
    name: "smartMigrate";
    inputs: readonly [{
        name: "args";
        type: "tuple";
        internalType: "struct IFlashLoanRenegotiation.SmartMigrationArgs";
        components: readonly [{
            name: "migrationArgs";
            type: "tuple";
            internalType: "struct IFlashLoanRenegotiation.PositionMigrationArgs";
            components: readonly [{
                name: "close";
                type: "tuple";
                internalType: "struct IFlashLoanRenegotiation.Position";
                components: readonly [{
                    name: "contractAddress";
                    type: "address";
                    internalType: "address";
                }, {
                    name: "callData";
                    type: "bytes";
                    internalType: "bytes";
                }, {
                    name: "value";
                    type: "uint256";
                    internalType: "uint256";
                }];
            }, {
                name: "open";
                type: "tuple";
                internalType: "struct IFlashLoanRenegotiation.Position";
                components: readonly [{
                    name: "contractAddress";
                    type: "address";
                    internalType: "address";
                }, {
                    name: "callData";
                    type: "bytes";
                    internalType: "bytes";
                }, {
                    name: "value";
                    type: "uint256";
                    internalType: "uint256";
                }];
            }, {
                name: "borrowArgs";
                type: "tuple";
                internalType: "struct IFlashLoanRenegotiation.AaveBorrowArgs";
                components: readonly [{
                    name: "pool";
                    type: "address";
                    internalType: "contract IPool";
                }, {
                    name: "recipient";
                    type: "address";
                    internalType: "address";
                }, {
                    name: "assets";
                    type: "address[]";
                    internalType: "address[]";
                }, {
                    name: "amounts";
                    type: "uint256[]";
                    internalType: "uint256[]";
                }];
            }, {
                name: "migrator";
                type: "address";
                internalType: "address";
            }];
        }, {
            name: "migratorSignature";
            type: "bytes";
            internalType: "bytes";
        }];
    }];
    outputs: readonly [];
    stateMutability: "payable";
}, {
    type: "event";
    name: "SmartMigration";
    inputs: readonly [{
        name: "closeContract";
        type: "address";
        indexed: false;
        internalType: "address";
    }, {
        name: "openContract";
        type: "address";
        indexed: false;
        internalType: "address";
    }];
    anonymous: false;
}, {
    type: "error";
    name: "ECDSAInvalidSignature";
    inputs: readonly [];
}, {
    type: "error";
    name: "ECDSAInvalidSignatureLength";
    inputs: readonly [{
        name: "length";
        type: "uint256";
        internalType: "uint256";
    }];
}, {
    type: "error";
    name: "ECDSAInvalidSignatureS";
    inputs: readonly [{
        name: "s";
        type: "bytes32";
        internalType: "bytes32";
    }];
}, {
    type: "error";
    name: "InvalidSignatureError";
    inputs: readonly [];
}, {
    type: "error";
    name: "TargetContractCallFailed";
    inputs: readonly [];
}]
address: `0x${string}`
bcClient: {}

Type declaration

    wallet: {}

    Type declaration

      contract: GetContractReturnType<readonly [{
          type: "constructor";
          inputs: readonly [{
              name: "_name";
              type: "string";
              internalType: "string";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "DOMAIN_SEPARATOR";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "bytes32";
              internalType: "bytes32";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "INITIAL_DOMAIN_SEPARATOR";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "bytes32";
              internalType: "bytes32";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "VERSION";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "bytes";
              internalType: "bytes";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "executeOperation";
          inputs: readonly [{
              name: "assets";
              type: "address[]";
              internalType: "address[]";
          }, {
              name: "amounts";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "premiums";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "";
              type: "address";
              internalType: "address";
          }, {
              name: "params";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bool";
              internalType: "bool";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "name";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "string";
              internalType: "string";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "smartMigrate";
          inputs: readonly [{
              name: "args";
              type: "tuple";
              internalType: "struct IFlashLoanRenegotiation.SmartMigrationArgs";
              components: readonly [{
                  name: "migrationArgs";
                  type: "tuple";
                  internalType: "struct IFlashLoanRenegotiation.PositionMigrationArgs";
                  components: readonly [{
                      name: "close";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.Position";
                      components: readonly [{
                          name: "contractAddress";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "callData";
                          type: "bytes";
                          internalType: "bytes";
                      }, {
                          name: "value";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "open";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.Position";
                      components: readonly [{
                          name: "contractAddress";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "callData";
                          type: "bytes";
                          internalType: "bytes";
                      }, {
                          name: "value";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "borrowArgs";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.AaveBorrowArgs";
                      components: readonly [{
                          name: "pool";
                          type: "address";
                          internalType: "contract IPool";
                      }, {
                          name: "recipient";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "assets";
                          type: "address[]";
                          internalType: "address[]";
                      }, {
                          name: "amounts";
                          type: "uint256[]";
                          internalType: "uint256[]";
                      }];
                  }, {
                      name: "migrator";
                      type: "address";
                      internalType: "address";
                  }];
              }, {
                  name: "migratorSignature";
                  type: "bytes";
                  internalType: "bytes";
              }];
          }];
          outputs: readonly [];
          stateMutability: "payable";
      }, {
          type: "event";
          name: "SmartMigration";
          inputs: readonly [{
              name: "closeContract";
              type: "address";
              indexed: false;
              internalType: "address";
          }, {
              name: "openContract";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "error";
          name: "ECDSAInvalidSignature";
          inputs: readonly [];
      }, {
          type: "error";
          name: "ECDSAInvalidSignatureLength";
          inputs: readonly [{
              name: "length";
              type: "uint256";
              internalType: "uint256";
          }];
      }, {
          type: "error";
          name: "ECDSAInvalidSignatureS";
          inputs: readonly [{
              name: "s";
              type: "bytes32";
              internalType: "bytes32";
          }];
      }, {
          type: "error";
          name: "InvalidSignatureError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "TargetContractCallFailed";
          inputs: readonly [];
      }], {} | {}>
      safeContractWrite: {
          executeOperation: ((args, options?) => Promise<`0x${string}`>);
          smartMigrate: ((args, options?) => Promise<`0x${string}`>);
      }

      Type declaration

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

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

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

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

            • args: readonly [{
                  migrationArgs: { close: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }; open: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }; borrowArgs: { pool: `0x${string}`; recipient: `0x${string}`; assets: readonly `0x${string}`[]; amounts: readonly bigint[]; }; migrator: `0x${string}`; };
                  migratorSignature: `0x${string}`;
              }] | readonly [{
                  migrationArgs: { close: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }; open: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }; borrowArgs: { pool: `0x${string}`; recipient: `0x${string}`; assets: readonly `0x${string}`[]; amounts: readonly bigint[]; }; migrator: `0x${string}`; };
                  migratorSignature: `0x${string}`;
              }] & readonly [{
                  migrationArgs: { close: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }; open: { contractAddress: `0x${string}`; callData: `0x${string}`; value: bigint; }; borrowArgs: { pool: `0x${string}`; recipient: `0x${string}`; assets: readonly `0x${string}`[]; amounts: readonly bigint[]; }; migrator: `0x${string}`; };
                  migratorSignature: `0x${string}`;
              }]
            • Optional options: {
                  value?: bigint;
              }
              • Optional value?: bigint

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

      parseEventLogs: (<TFunctionName>(eventName, logs) => ParseEventLogsReturnType<readonly [{
          type: "constructor";
          inputs: readonly [{
              name: "_name";
              type: "string";
              internalType: "string";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "DOMAIN_SEPARATOR";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "bytes32";
              internalType: "bytes32";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "INITIAL_DOMAIN_SEPARATOR";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "bytes32";
              internalType: "bytes32";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "VERSION";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "bytes";
              internalType: "bytes";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "executeOperation";
          inputs: readonly [{
              name: "assets";
              type: "address[]";
              internalType: "address[]";
          }, {
              name: "amounts";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "premiums";
              type: "uint256[]";
              internalType: "uint256[]";
          }, {
              name: "";
              type: "address";
              internalType: "address";
          }, {
              name: "params";
              type: "bytes";
              internalType: "bytes";
          }];
          outputs: readonly [{
              name: "";
              type: "bool";
              internalType: "bool";
          }];
          stateMutability: "nonpayable";
      }, {
          type: "function";
          name: "name";
          inputs: readonly [];
          outputs: readonly [{
              name: "";
              type: "string";
              internalType: "string";
          }];
          stateMutability: "view";
      }, {
          type: "function";
          name: "smartMigrate";
          inputs: readonly [{
              name: "args";
              type: "tuple";
              internalType: "struct IFlashLoanRenegotiation.SmartMigrationArgs";
              components: readonly [{
                  name: "migrationArgs";
                  type: "tuple";
                  internalType: "struct IFlashLoanRenegotiation.PositionMigrationArgs";
                  components: readonly [{
                      name: "close";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.Position";
                      components: readonly [{
                          name: "contractAddress";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "callData";
                          type: "bytes";
                          internalType: "bytes";
                      }, {
                          name: "value";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "open";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.Position";
                      components: readonly [{
                          name: "contractAddress";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "callData";
                          type: "bytes";
                          internalType: "bytes";
                      }, {
                          name: "value";
                          type: "uint256";
                          internalType: "uint256";
                      }];
                  }, {
                      name: "borrowArgs";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.AaveBorrowArgs";
                      components: readonly [{
                          name: "pool";
                          type: "address";
                          internalType: "contract IPool";
                      }, {
                          name: "recipient";
                          type: "address";
                          internalType: "address";
                      }, {
                          name: "assets";
                          type: "address[]";
                          internalType: "address[]";
                      }, {
                          name: "amounts";
                          type: "uint256[]";
                          internalType: "uint256[]";
                      }];
                  }, {
                      name: "migrator";
                      type: "address";
                      internalType: "address";
                  }];
              }, {
                  name: "migratorSignature";
                  type: "bytes";
                  internalType: "bytes";
              }];
          }];
          outputs: readonly [];
          stateMutability: "payable";
      }, {
          type: "event";
          name: "SmartMigration";
          inputs: readonly [{
              name: "closeContract";
              type: "address";
              indexed: false;
              internalType: "address";
          }, {
              name: "openContract";
              type: "address";
              indexed: false;
              internalType: "address";
          }];
          anonymous: false;
      }, {
          type: "error";
          name: "ECDSAInvalidSignature";
          inputs: readonly [];
      }, {
          type: "error";
          name: "ECDSAInvalidSignatureLength";
          inputs: readonly [{
              name: "length";
              type: "uint256";
              internalType: "uint256";
          }];
      }, {
          type: "error";
          name: "ECDSAInvalidSignatureS";
          inputs: readonly [{
              name: "s";
              type: "bytes32";
              internalType: "bytes32";
          }];
      }, {
          type: "error";
          name: "InvalidSignatureError";
          inputs: readonly [];
      }, {
          type: "error";
          name: "TargetContractCallFailed";
          inputs: readonly [];
      }], TFunctionName, true, TFunctionName extends "SmartMigration"[]
          ? TFunctionName[number]
          : TFunctionName>)

      Type declaration

        • <TFunctionName>(eventName, logs): ParseEventLogsReturnType<readonly [{
              type: "constructor";
              inputs: readonly [{
                  name: "_name";
                  type: "string";
                  internalType: "string";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "DOMAIN_SEPARATOR";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "bytes32";
                  internalType: "bytes32";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "INITIAL_DOMAIN_SEPARATOR";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "bytes32";
                  internalType: "bytes32";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "VERSION";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "bytes";
                  internalType: "bytes";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "executeOperation";
              inputs: readonly [{
                  name: "assets";
                  type: "address[]";
                  internalType: "address[]";
              }, {
                  name: "amounts";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "premiums";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "params";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bool";
                  internalType: "bool";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "name";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "string";
                  internalType: "string";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "smartMigrate";
              inputs: readonly [{
                  name: "args";
                  type: "tuple";
                  internalType: "struct IFlashLoanRenegotiation.SmartMigrationArgs";
                  components: readonly [{
                      name: "migrationArgs";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.PositionMigrationArgs";
                      components: readonly [{
                          name: "close";
                          type: "tuple";
                          internalType: "struct IFlashLoanRenegotiation.Position";
                          components: readonly [{
                              name: "contractAddress";
                              type: "address";
                              internalType: "address";
                          }, {
                              name: "callData";
                              type: "bytes";
                              internalType: "bytes";
                          }, {
                              name: "value";
                              type: "uint256";
                              internalType: "uint256";
                          }];
                      }, {
                          name: "open";
                          type: "tuple";
                          internalType: "struct IFlashLoanRenegotiation.Position";
                          components: readonly [{
                              name: "contractAddress";
                              type: "address";
                              internalType: "address";
                          }, {
                              name: "callData";
                              type: "bytes";
                              internalType: "bytes";
                          }, {
                              name: "value";
                              type: "uint256";
                              internalType: "uint256";
                          }];
                      }, {
                          name: "borrowArgs";
                          type: "tuple";
                          internalType: "struct IFlashLoanRenegotiation.AaveBorrowArgs";
                          components: readonly [{
                              name: "pool";
                              type: "address";
                              internalType: "contract IPool";
                          }, {
                              name: "recipient";
                              type: "address";
                              internalType: "address";
                          }, {
                              name: "assets";
                              type: "address[]";
                              internalType: "address[]";
                          }, {
                              name: "amounts";
                              type: "uint256[]";
                              internalType: "uint256[]";
                          }];
                      }, {
                          name: "migrator";
                          type: "address";
                          internalType: "address";
                      }];
                  }, {
                      name: "migratorSignature";
                      type: "bytes";
                      internalType: "bytes";
                  }];
              }];
              outputs: readonly [];
              stateMutability: "payable";
          }, {
              type: "event";
              name: "SmartMigration";
              inputs: readonly [{
                  name: "closeContract";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }, {
                  name: "openContract";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "error";
              name: "ECDSAInvalidSignature";
              inputs: readonly [];
          }, {
              type: "error";
              name: "ECDSAInvalidSignatureLength";
              inputs: readonly [{
                  name: "length";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              type: "error";
              name: "ECDSAInvalidSignatureS";
              inputs: readonly [{
                  name: "s";
                  type: "bytes32";
                  internalType: "bytes32";
              }];
          }, {
              type: "error";
              name: "InvalidSignatureError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "TargetContractCallFailed";
              inputs: readonly [];
          }], TFunctionName, true, TFunctionName extends "SmartMigration"[]
              ? TFunctionName[number]
              : TFunctionName>
        • Type Parameters

          • TFunctionName extends "SmartMigration"

          Parameters

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

          Returns ParseEventLogsReturnType<readonly [{
              type: "constructor";
              inputs: readonly [{
                  name: "_name";
                  type: "string";
                  internalType: "string";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "DOMAIN_SEPARATOR";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "bytes32";
                  internalType: "bytes32";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "INITIAL_DOMAIN_SEPARATOR";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "bytes32";
                  internalType: "bytes32";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "VERSION";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "bytes";
                  internalType: "bytes";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "executeOperation";
              inputs: readonly [{
                  name: "assets";
                  type: "address[]";
                  internalType: "address[]";
              }, {
                  name: "amounts";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "premiums";
                  type: "uint256[]";
                  internalType: "uint256[]";
              }, {
                  name: "";
                  type: "address";
                  internalType: "address";
              }, {
                  name: "params";
                  type: "bytes";
                  internalType: "bytes";
              }];
              outputs: readonly [{
                  name: "";
                  type: "bool";
                  internalType: "bool";
              }];
              stateMutability: "nonpayable";
          }, {
              type: "function";
              name: "name";
              inputs: readonly [];
              outputs: readonly [{
                  name: "";
                  type: "string";
                  internalType: "string";
              }];
              stateMutability: "view";
          }, {
              type: "function";
              name: "smartMigrate";
              inputs: readonly [{
                  name: "args";
                  type: "tuple";
                  internalType: "struct IFlashLoanRenegotiation.SmartMigrationArgs";
                  components: readonly [{
                      name: "migrationArgs";
                      type: "tuple";
                      internalType: "struct IFlashLoanRenegotiation.PositionMigrationArgs";
                      components: readonly [{
                          name: "close";
                          type: "tuple";
                          internalType: "struct IFlashLoanRenegotiation.Position";
                          components: readonly [{
                              name: "contractAddress";
                              type: "address";
                              internalType: "address";
                          }, {
                              name: "callData";
                              type: "bytes";
                              internalType: "bytes";
                          }, {
                              name: "value";
                              type: "uint256";
                              internalType: "uint256";
                          }];
                      }, {
                          name: "open";
                          type: "tuple";
                          internalType: "struct IFlashLoanRenegotiation.Position";
                          components: readonly [{
                              name: "contractAddress";
                              type: "address";
                              internalType: "address";
                          }, {
                              name: "callData";
                              type: "bytes";
                              internalType: "bytes";
                          }, {
                              name: "value";
                              type: "uint256";
                              internalType: "uint256";
                          }];
                      }, {
                          name: "borrowArgs";
                          type: "tuple";
                          internalType: "struct IFlashLoanRenegotiation.AaveBorrowArgs";
                          components: readonly [{
                              name: "pool";
                              type: "address";
                              internalType: "contract IPool";
                          }, {
                              name: "recipient";
                              type: "address";
                              internalType: "address";
                          }, {
                              name: "assets";
                              type: "address[]";
                              internalType: "address[]";
                          }, {
                              name: "amounts";
                              type: "uint256[]";
                              internalType: "uint256[]";
                          }];
                      }, {
                          name: "migrator";
                          type: "address";
                          internalType: "address";
                      }];
                  }, {
                      name: "migratorSignature";
                      type: "bytes";
                      internalType: "bytes";
                  }];
              }];
              outputs: readonly [];
              stateMutability: "payable";
          }, {
              type: "event";
              name: "SmartMigration";
              inputs: readonly [{
                  name: "closeContract";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }, {
                  name: "openContract";
                  type: "address";
                  indexed: false;
                  internalType: "address";
              }];
              anonymous: false;
          }, {
              type: "error";
              name: "ECDSAInvalidSignature";
              inputs: readonly [];
          }, {
              type: "error";
              name: "ECDSAInvalidSignatureLength";
              inputs: readonly [{
                  name: "length";
                  type: "uint256";
                  internalType: "uint256";
              }];
          }, {
              type: "error";
              name: "ECDSAInvalidSignatureS";
              inputs: readonly [{
                  name: "s";
                  type: "bytes32";
                  internalType: "bytes32";
              }];
          }, {
              type: "error";
              name: "InvalidSignatureError";
              inputs: readonly [];
          }, {
              type: "error";
              name: "TargetContractCallFailed";
              inputs: readonly [];
          }], TFunctionName, true, TFunctionName extends "SmartMigration"[]
              ? TFunctionName[number]
              : TFunctionName>