rubic-sdk
Version:
Simplify dApp creation
990 lines (931 loc) • 11.5 MB
JavaScript
var RubicSDK;
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/@1inch/limit-order-protocol-utils/connector/private-key-provider.connector.js":
/*!****************************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/connector/private-key-provider.connector.js ***!
\****************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js")["Buffer"];
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.PrivateKeyProviderConnector = void 0;
const eth_sig_util_1 = __webpack_require__(/*! @metamask/eth-sig-util */ "./node_modules/@metamask/eth-sig-util/dist/index.js");
const limit_order_utils_1 = __webpack_require__(/*! ../utils/limit-order.utils */ "./node_modules/@1inch/limit-order-protocol-utils/utils/limit-order.utils.js");
class PrivateKeyProviderConnector {
constructor(privateKey, web3Provider) {
this.privateKey = privateKey;
this.web3Provider = web3Provider;
}
contractEncodeABI(abi, address, methodName, methodParams) {
const contract = new this.web3Provider.eth.Contract(abi, address === null ? undefined : address);
return contract.methods[methodName](...methodParams).encodeABI();
}
signTypedData(_walletAddress, typedData,
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
_typedDataHash = '') {
const result = eth_sig_util_1.signTypedData({
privateKey: Buffer.from(this.privateKey, 'hex'),
data: typedData,
version: eth_sig_util_1.SignTypedDataVersion.V4,
});
return Promise.resolve(result);
}
ethCall(contractAddress, callData) {
return this.web3Provider.eth.call({
to: contractAddress,
data: callData,
});
}
decodeABIParameter(type, hex) {
return this.web3Provider.eth.abi.decodeParameter(type, hex);
}
decodeABICallParameters(types, callData) {
const parameters = limit_order_utils_1.trim0x(callData).substring(8);
return this.web3Provider.eth.abi.decodeParameters([...types], parameters);
}
}
exports.PrivateKeyProviderConnector = PrivateKeyProviderConnector;
//# sourceMappingURL=private-key-provider.connector.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/connector/provider.connector.js":
/*!****************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/connector/provider.connector.js ***!
\****************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
//# sourceMappingURL=provider.connector.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/connector/web3-provider.connector.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/connector/web3-provider.connector.js ***!
\*********************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Web3ProviderConnector = void 0;
const limit_order_utils_1 = __webpack_require__(/*! ../utils/limit-order.utils */ "./node_modules/@1inch/limit-order-protocol-utils/utils/limit-order.utils.js");
class Web3ProviderConnector {
constructor(web3Provider) {
this.web3Provider = web3Provider;
}
contractEncodeABI(abi, address, methodName, methodParams) {
const contract = new this.web3Provider.eth.Contract(abi, address === null ? undefined : address);
return contract.methods[methodName](...methodParams).encodeABI();
}
signTypedData(walletAddress, typedData,
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
_typedDataHash) {
const extendedWeb3 = this.web3Provider.extend({
methods: [
{
name: 'signTypedDataV4',
call: 'eth_signTypedData_v4',
params: 2,
},
],
});
return extendedWeb3.signTypedDataV4(walletAddress, JSON.stringify(typedData));
}
ethCall(contractAddress, callData) {
return this.web3Provider.eth.call({
to: contractAddress,
data: callData,
});
}
decodeABIParameter(type, hex) {
return this.web3Provider.eth.abi.decodeParameter(type, hex);
}
decodeABICallParameters(types, callData) {
const parameters = limit_order_utils_1.trim0x(callData).substring(8);
return this.web3Provider.eth.abi.decodeParameters([...types], parameters);
}
}
exports.Web3ProviderConnector = Web3ProviderConnector;
//# sourceMappingURL=web3-provider.connector.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/erc20.facade.js":
/*!************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/erc20.facade.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Erc20Facade = exports.Erc20Methods = void 0;
const limit_order_protocol_const_1 = __webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js");
var Erc20Methods;
(function (Erc20Methods) {
Erc20Methods["transferFrom"] = "transferFrom";
Erc20Methods["balanceOf"] = "balanceOf";
})(Erc20Methods = exports.Erc20Methods || (exports.Erc20Methods = {}));
class Erc20Facade {
constructor(providerConnector) {
this.providerConnector = providerConnector;
}
balanceOf(tokenAddress, walletAddress) {
return this.providerConnector.contractEncodeABI(limit_order_protocol_const_1.ERC20_ABI, tokenAddress, Erc20Methods.balanceOf, [walletAddress]);
}
}
exports.Erc20Facade = Erc20Facade;
//# sourceMappingURL=erc20.facade.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/index.js":
/*!*****************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/index.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
tslib_1.__exportStar(__webpack_require__(/*! ./erc20.facade */ "./node_modules/@1inch/limit-order-protocol-utils/erc20.facade.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./limit-order.builder */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order.builder.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./limit-order-protocol.facade */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.facade.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./limit-order-predicate.builder */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-predicate.builder.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./limit-order.decoder */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order.decoder.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./limit-order-predicate.decoder */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-predicate.decoder.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./series-nonce-manager.const */ "./node_modules/@1inch/limit-order-protocol-utils/series-nonce-manager.const.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./series-nonce-manager.facade */ "./node_modules/@1inch/limit-order-protocol-utils/series-nonce-manager.facade.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./series-nonce-manager-predicate.builder */ "./node_modules/@1inch/limit-order-protocol-utils/series-nonce-manager-predicate.builder.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./connector/provider.connector */ "./node_modules/@1inch/limit-order-protocol-utils/connector/provider.connector.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./connector/web3-provider.connector */ "./node_modules/@1inch/limit-order-protocol-utils/connector/web3-provider.connector.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./connector/private-key-provider.connector */ "./node_modules/@1inch/limit-order-protocol-utils/connector/private-key-provider.connector.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./model/abi.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/abi.model.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./model/eip712.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/eip712.model.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./model/limit-order-protocol.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js"), exports);
tslib_1.__exportStar(__webpack_require__(/*! ./model/series-nonce-manager.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/series-nonce-manager.model.js"), exports);
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-predicate.builder.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/limit-order-predicate.builder.js ***!
\*****************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LimitOrderPredicateBuilder = void 0;
const limit_order_protocol_model_1 = __webpack_require__(/*! ./model/limit-order-protocol.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js");
const limit_order_protocol_const_1 = __webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js");
const abstract_facade_1 = __webpack_require__(/*! ./utils/abstract-facade */ "./node_modules/@1inch/limit-order-protocol-utils/utils/abstract-facade.js");
const limit_order_builder_1 = __webpack_require__(/*! ./limit-order.builder */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order.builder.js");
/**
* All methods is lambdas to preserve `this` context and allow DSL-like usage
*/
class LimitOrderPredicateBuilder {
constructor(facade) {
this.facade = facade;
this.and = (...predicates) => {
const { offsets, data } = limit_order_builder_1.LimitOrderBuilder.joinStaticCalls(predicates);
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.and, [
offsets,
data,
]);
};
this.or = (...predicates) => {
const { offsets, data } = limit_order_builder_1.LimitOrderBuilder.joinStaticCalls(predicates);
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.or, [
offsets,
data,
]);
};
this.eq = (value, callData) => {
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.eq, [
value,
callData,
]);
};
this.lt = (value, callData) => {
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.lt, [
value,
callData,
]);
};
this.gt = (value, callData) => {
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.gt, [
value,
callData,
]);
};
this.nonce = (makerAddress) => {
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.nonce, [makerAddress]);
};
this.nonceEquals = (makerAddress, makerNonce) => {
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.nonceEquals, [makerAddress, makerNonce]);
};
/**
* @param timestamp seconds unit
*/
this.timestampBelow = (timestamp) => {
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.timestampBelow, [limit_order_protocol_const_1.ZX + timestamp.toString(16)]);
};
/**
* @param timestamp seconds unit
*/
this.timestampBelowAndNonceEquals = (timestamp, nonce, address) => {
const predicateValue = BigInt(address)
+ (BigInt(nonce) << BigInt(160))
+ (BigInt(timestamp) << BigInt(208));
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.timestampBelowAndNonceEquals, [limit_order_protocol_const_1.ZX + predicateValue.toString(16)]);
};
this.arbitraryStaticCall = (target, callData) => {
const address = target instanceof abstract_facade_1.AbstractSmartcontractFacade
? target.contractAddress
: target;
if (address.toLowerCase() === this.facade.contractAddress.toLowerCase()) {
console.warn('Unnecessary arbitraryStaticCall(). '
+ 'Omit it when interacting with limit-order-protocol methods.');
return callData;
}
return this.facade.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.arbitraryStaticCall, [
address,
callData,
]);
};
}
}
exports.LimitOrderPredicateBuilder = LimitOrderPredicateBuilder;
//# sourceMappingURL=limit-order-predicate.builder.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-predicate.decoder.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/limit-order-predicate.decoder.js ***!
\*****************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LimitOrderPredicateDecoder = exports.PredicateFn = exports.PredicateBytes = exports.DecodableCall = void 0;
const limit_order_protocol_const_1 = __webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js");
const series_nonce_manager_const_1 = __webpack_require__(/*! ./series-nonce-manager.const */ "./node_modules/@1inch/limit-order-protocol-utils/series-nonce-manager.const.js");
const abi_1 = __webpack_require__(/*! @ethersproject/abi */ "./node_modules/@ethersproject/abi/lib.esm/index.js");
const limit_order_protocol_const_2 = __webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js");
const helpers_1 = __webpack_require__(/*! ./utils/helpers */ "./node_modules/@1inch/limit-order-protocol-utils/utils/helpers.js");
const limit_order_predicate_decoders_1 = __webpack_require__(/*! ./utils/decoders/limit-order-predicate-decoders */ "./node_modules/@1inch/limit-order-protocol-utils/utils/decoders/limit-order-predicate-decoders.js");
const series_nonce_manager_decoders_1 = __webpack_require__(/*! ./utils/decoders/series-nonce-manager-decoders */ "./node_modules/@1inch/limit-order-protocol-utils/utils/decoders/series-nonce-manager-decoders.js");
const limit_order_utils_1 = __webpack_require__(/*! ./utils/limit-order.utils */ "./node_modules/@1inch/limit-order-protocol-utils/utils/limit-order.utils.js");
class DecodableCall {
constructor(calldata, target) {
this.calldata = calldata;
this.target = target;
}
}
exports.DecodableCall = DecodableCall;
class PredicateBytes {
constructor(bytes, source) {
this.bytes = bytes;
this.type = "bytes";
this.meta = {
source,
};
}
}
exports.PredicateBytes = PredicateBytes;
class PredicateFn {
constructor(name, args, source) {
this.name = name;
this.args = args;
this.type = "function";
this.meta = {
source,
};
}
}
exports.PredicateFn = PredicateFn;
class LimitOrderPredicateDecoder {
constructor(chainId, decodableContracts = {}) {
this.chainId = chainId;
this.findFirstDFS = (tree, matcher) => {
if (matcher(tree))
return tree;
if (tree.args) {
const args = helpers_1.isIterable(tree.args)
? Array.from(tree.args)
: Object.values(tree.args);
for (const arg of args) {
const result = this.findFirstDFS(arg, matcher);
if (result)
return result;
}
}
return null;
};
// eslint-disable-next-line
this.parseCalldata = (calldata, address) => {
const sig = calldata.substring(0, 10);
const decodableIface = this.decodableInterfaces[address];
if (!decodableIface)
return new PredicateBytes(calldata, address);
let fn;
try {
fn = decodableIface.iface.getFunction(sig);
}
catch (e) {
console.warn(`Tried to decode unknown function with signature ${sig} on ${address}.`);
return new PredicateBytes(calldata, address);
}
const data = decodableIface.iface.decodeFunctionData(fn, calldata);
const decoder = (decodableIface.decoders[fn.name]
|| decodableIface.decoders[sig]
|| decodableIface.decoders[sig.substring(2)]);
if (!decoder)
return new PredicateBytes(calldata, address);
const decoded = decoder(fn, data, address);
const result = Object.assign({}, decoded);
const { args } = decoded;
if (args) {
if (helpers_1.isIterable(args)) {
result.args = Array.from(args).map(this.mapArgs);
}
else {
result.args = helpers_1.mapObject(args, this.mapArgs);
}
}
return result;
};
this.parseDecodableCall = (call) => {
return this.parseCalldata(limit_order_protocol_const_1.ZX + limit_order_utils_1.trim0x(call.calldata), call.target.toLowerCase());
};
this.mapArgs = (arg) => {
if (arg instanceof DecodableCall) {
return this.parseDecodableCall(arg);
}
return arg;
};
this.defaultAddress = limit_order_protocol_const_2.limirOrderProtocolAdresses[this.chainId].toLowerCase();
this.decodableInterfaces = {
[this.defaultAddress]: {
iface: new abi_1.Interface(limit_order_protocol_const_1.LIMIT_ORDER_PROTOCOL_ABI),
decoders: new limit_order_predicate_decoders_1.LimitOrderPredicateDecoders(),
},
[series_nonce_manager_const_1.seriesNonceManagerContractAddresses[this.chainId].toLowerCase()]: {
iface: new abi_1.Interface(series_nonce_manager_const_1.SERIES_NONCE_MANAGER_ABI),
decoders: new series_nonce_manager_decoders_1.SeriesNonceManagerDecoders(),
},
};
// User defined decoders
Object.assign(this.decodableInterfaces, this.decodableContractsToDecodableInterfaces(decodableContracts));
}
decode(calldata) {
return this.parseCalldata(calldata, this.defaultAddress);
}
decodableContractsToDecodableInterfaces(decodableContracts) {
return Object.assign({}, ...Object.entries(decodableContracts).map(([address, { abi, decoders }]) => {
return [
address.toLowerCase(),
{
iface: new abi_1.Interface(abi),
decoders,
}
];
}));
}
}
exports.LimitOrderPredicateDecoder = LimitOrderPredicateDecoder;
//# sourceMappingURL=limit-order-predicate.decoder.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js":
/*!**************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js ***!
\**************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.contractAddresses = exports.limirOrderProtocolAdresses = exports.RFQ_ORDER_STRUCTURE = exports.ORDER_STRUCTURE = exports.EIP712_DOMAIN = exports.ERC20_ABI = exports.LIMIT_ORDER_PROTOCOL_ABI = exports.CALL_RESULTS_PREFIX = exports.ZERO_ADDRESS = exports.ZX = exports.TypedDataVersion = exports.PROTOCOL_VERSION = exports.PROTOCOL_NAME = void 0;
const tslib_1 = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");
const LimitOrderProtocol_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ./abi/LimitOrderProtocol.json */ "./node_modules/@1inch/limit-order-protocol-utils/abi/LimitOrderProtocol.json"));
const ERC20ABI_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ./abi/ERC20ABI.json */ "./node_modules/@1inch/limit-order-protocol-utils/abi/ERC20ABI.json"));
const eth_sig_util_1 = __webpack_require__(/*! @metamask/eth-sig-util */ "./node_modules/@metamask/eth-sig-util/dist/index.js");
const limit_order_protocol_model_1 = __webpack_require__(/*! ./model/limit-order-protocol.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js");
exports.PROTOCOL_NAME = '1inch Aggregation Router';
exports.PROTOCOL_VERSION = '5';
exports.TypedDataVersion = eth_sig_util_1.SignTypedDataVersion.V4;
exports.ZX = '0x';
exports.ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
exports.CALL_RESULTS_PREFIX = 'CALL_RESULTS_';
exports.LIMIT_ORDER_PROTOCOL_ABI = LimitOrderProtocol_json_1.default;
exports.ERC20_ABI = ERC20ABI_json_1.default;
exports.EIP712_DOMAIN = [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' },
{ name: 'chainId', type: 'uint256' },
{ name: 'verifyingContract', type: 'address' },
];
exports.ORDER_STRUCTURE = [
{ name: 'salt', type: 'uint256' },
{ name: 'makerAsset', type: 'address' },
{ name: 'takerAsset', type: 'address' },
{ name: 'maker', type: 'address' },
{ name: 'receiver', type: 'address' },
{ name: 'allowedSender', type: 'address' },
{ name: 'makingAmount', type: 'uint256' },
{ name: 'takingAmount', type: 'uint256' },
{ name: 'offsets', type: 'uint256' },
{ name: 'interactions', type: 'bytes' },
];
exports.RFQ_ORDER_STRUCTURE = [
{ name: 'info', type: 'uint256' },
{ name: 'makerAsset', type: 'address' },
{ name: 'takerAsset', type: 'address' },
{ name: 'maker', type: 'address' },
{ name: 'allowedSender', type: 'address' },
{ name: 'makingAmount', type: 'uint256' },
{ name: 'takingAmount', type: 'uint256' },
];
exports.limirOrderProtocolAdresses = {
[limit_order_protocol_model_1.ChainId.etherumMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.binanceMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.polygonMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.optimismMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.arbitrumMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.auroraMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.gnosisMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.avalancheMainnet]: '0x1111111254eeb25477b68fb85ed929f73a960582',
[limit_order_protocol_model_1.ChainId.fantomMainnet]: '0x1111111254EEB25477B68fb85Ed929f73A960582',
[limit_order_protocol_model_1.ChainId.klaytnMainnet]: '0x1111111254EEB25477B68fb85Ed929f73A960582',
};
/**
* @deprecated Change to `limirOrderProtocolAdresses`
*/
exports.contractAddresses = exports.limirOrderProtocolAdresses;
//# sourceMappingURL=limit-order-protocol.const.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.facade.js":
/*!***************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.facade.js ***!
\***************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LimitOrderProtocolFacade = void 0;
const limit_order_protocol_const_1 = __webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js");
const limit_order_protocol_model_1 = __webpack_require__(/*! ./model/limit-order-protocol.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js");
const bignumber_1 = __webpack_require__(/*! @ethersproject/bignumber */ "./node_modules/@ethersproject/bignumber/lib.esm/index.js");
const limit_order_utils_1 = __webpack_require__(/*! ./utils/limit-order.utils */ "./node_modules/@1inch/limit-order-protocol-utils/utils/limit-order.utils.js");
const abi_1 = __webpack_require__(/*! ./utils/abi */ "./node_modules/@1inch/limit-order-protocol-utils/utils/abi.js");
const eth_sig_util_1 = __webpack_require__(/*! @metamask/eth-sig-util */ "./node_modules/@metamask/eth-sig-util/dist/index.js");
const abstract_facade_1 = __webpack_require__(/*! ./utils/abstract-facade */ "./node_modules/@1inch/limit-order-protocol-utils/utils/abstract-facade.js");
class LimitOrderProtocolFacade extends abstract_facade_1.AbstractSmartcontractFacade {
constructor() {
super(...arguments);
this.ABI = limit_order_protocol_const_1.LIMIT_ORDER_PROTOCOL_ABI;
}
fillLimitOrder(params) {
const { order, interaction = limit_order_protocol_const_1.ZX, signature, makingAmount, takingAmount, thresholdAmount, skipPermit = false, } = params;
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.fillOrder, [
order,
signature,
interaction,
makingAmount,
takingAmount,
// skipPermitAndThresholdAmount
limit_order_utils_1.packSkipPermitAndThresholdAmount(thresholdAmount, skipPermit),
]);
}
/**
* @param params.interaction pre-interaction in fact.
* @param params.skipPermit skip maker's permit evaluation if it was evaluated before.
* Useful if multiple orders was created with same nonce.
*
* Tip: you can just check if allowance exsists and then set it to `true`.
*/
fillOrderToWithPermit(params) {
const { order, signature, makingAmount, takingAmount, interaction = limit_order_protocol_const_1.ZX, thresholdAmount, skipPermit = false, targetAddress, permit, } = params;
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.fillOrderToWithPermit, [
order,
signature,
interaction,
makingAmount,
takingAmount,
// skipPermitAndThresholdAmount
limit_order_utils_1.packSkipPermitAndThresholdAmount(thresholdAmount, skipPermit),
targetAddress,
permit
]);
}
fillRFQOrder(order, signature, makingAmount, takingAmount) {
let flagsAndAmount = '0';
if (makingAmount) {
flagsAndAmount = limit_order_utils_1.getMakingAmountForRFQ(makingAmount);
}
else if (takingAmount) {
flagsAndAmount = takingAmount;
}
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.fillOrderRFQ, [order, signature, flagsAndAmount]);
}
cancelLimitOrder(order) {
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.cancelOrder, [
order,
]);
}
cancelRFQOrder(orderInfo) {
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.cancelOrderRFQ, [orderInfo]);
}
nonce(makerAddress) {
const callData = this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.nonce, [makerAddress]);
return this.providerConnector
.ethCall(this.contractAddress, callData)
.then((nonce) => BigInt(nonce));
}
advanceNonce(count) {
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.advanceNonce, [count]);
}
increaseNonce() {
return this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.increaseNonce);
}
checkPredicate(order) {
const callData = this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.checkPredicate, [order]);
return this.providerConnector
.ethCall(this.contractAddress, callData)
.catch((error) => {
console.error(error);
return false;
})
.then((result) => {
try {
return bignumber_1.BigNumber.from(result).toNumber() === 1;
}
catch (e) {
console.error(e);
return false;
}
});
}
remaining(orderHash) {
const callData = this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.remaining, [orderHash]);
return this.providerConnector
.ethCall(this.contractAddress, callData)
.then((result) => {
const response = this.parseRemainingResponse(result);
if (response !== null) {
return response;
}
return Promise.reject(result);
});
}
simulate(targetAddress, data) {
const callData = this.getContractCallData(limit_order_protocol_model_1.LimitOrderProtocolMethods.simulate, [targetAddress, data]);
return this.providerConnector
.ethCall(this.contractAddress, callData)
.then(() => {
throw new Error('call was successful but revert was expected');
})
.catch((result) => {
const parsedResult = this.parseSimulateTransferError(result);
if (parsedResult) {
return parsedResult;
}
throw { success: false, rawResult: result };
});
}
// https://github.com/1inch/limit-order-protocol/blob/v3-prerelease/test/helpers/eip712.js#L22
domainSeparator() {
const hex = '0x' + eth_sig_util_1.TypedDataUtils.hashStruct('EIP712Domain', {
name: limit_order_protocol_const_1.PROTOCOL_NAME,
version: limit_order_protocol_const_1.PROTOCOL_VERSION,
chainId: this.chainId,
verifyingContract: this.contractAddress,
}, { EIP712Domain: limit_order_protocol_const_1.EIP712_DOMAIN }, limit_order_protocol_const_1.TypedDataVersion).toString('hex');
return Promise.resolve(hex);
}
parseRemainingResponse(response) {
if (response.length === 66) {
return bignumber_1.BigNumber.from(response);
}
return null;
}
parseSimulateTransferError(error) {
const simulationResultsAbi = abi_1.getABIFor(limit_order_protocol_const_1.LIMIT_ORDER_PROTOCOL_ABI, 'SimulationResults');
const revertionData = limit_order_utils_1.extractWeb3OriginalErrorData(error);
if (simulationResultsAbi && revertionData) {
const parsed = this.providerConnector.decodeABICallParameters(simulationResultsAbi.inputs, revertionData);
const parsedResult = parsed.res;
const success = parsed.success
&& this.isSimulationResultResponseSuccessfull(parsedResult);
return {
success,
rawResult: parsed.res,
};
}
return null;
}
isSimulationResultResponseSuccessfull(res) {
if (!res || !res.length)
return true;
return this.providerConnector.decodeABIParameter('bool', res);
}
}
exports.LimitOrderProtocolFacade = LimitOrderProtocolFacade;
//# sourceMappingURL=limit-order-protocol.facade.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/limit-order.builder.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/limit-order.builder.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LimitOrderBuilder = exports.generateRFQOrderInfo = exports.generateOrderSalt = void 0;
const limit_order_protocol_const_1 = __webpack_require__(/*! ./limit-order-protocol.const */ "./node_modules/@1inch/limit-order-protocol-utils/limit-order-protocol.const.js");
const ethereumjs_util_1 = __webpack_require__(/*! ethereumjs-util */ "./node_modules/ethereumjs-util/dist.browser/index.js");
const eth_sig_util_1 = __webpack_require__(/*! @metamask/eth-sig-util */ "./node_modules/@metamask/eth-sig-util/dist/index.js");
const limit_order_utils_1 = __webpack_require__(/*! ./utils/limit-order.utils */ "./node_modules/@1inch/limit-order-protocol-utils/utils/limit-order.utils.js");
function generateOrderSalt() {
return Math.round(Math.random() * Date.now()) + '';
}
exports.generateOrderSalt = generateOrderSalt;
function generateRFQOrderInfo(id, expiresInTimestamp, wrapEth) {
const info = (BigInt(expiresInTimestamp) << BigInt(64)) | BigInt(id);
if (wrapEth) {
return (info | (BigInt(1) << BigInt(255))).toString(10);
}
return info.toString(10);
}
exports.generateRFQOrderInfo = generateRFQOrderInfo;
class LimitOrderBuilder {
constructor(contractAddress, chainId, providerConnector, generateSalt = generateOrderSalt) {
this.contractAddress = contractAddress;
this.chainId = chainId;
this.providerConnector = providerConnector;
this.generateSalt = generateSalt;
}
static packInteractions({ makerAssetData = limit_order_protocol_const_1.ZX, takerAssetData = limit_order_protocol_const_1.ZX, getMakingAmount = limit_order_protocol_const_1.ZX, getTakingAmount = limit_order_protocol_const_1.ZX, predicate = limit_order_protocol_const_1.ZX, permit = limit_order_protocol_const_1.ZX, preInteraction = limit_order_protocol_const_1.ZX, postInteraction = limit_order_protocol_const_1.ZX, }) {
const allInteractions = [
makerAssetData,
takerAssetData,
getMakingAmount,
getTakingAmount,
predicate,
permit,
preInteraction,
postInteraction,
];
const { offsets, data: interactions } = this.joinStaticCalls(allInteractions);
return { offsets, interactions };
}
static joinStaticCalls(data) {
const trimmed = data.map(limit_order_utils_1.trim0x);
return {
offsets: limit_order_utils_1.getOffsets(trimmed),
data: limit_order_protocol_const_1.ZX + trimmed.join(''),
};
}
buildOrderSignature(walletAddress, typedData) {
const dataHash = eth_sig_util_1.TypedDataUtils.hashStruct(typedData.primaryType, typedData.message, typedData.types, eth_sig_util_1.SignTypedDataVersion.V4).toString('hex');
return this.providerConnector.signTypedData(walletAddress, typedData, dataHash);
}
buildLimitOrderHash(orderTypedData) {
const message = orderTypedData;
const hash = ethereumjs_util_1.bufferToHex(eth_sig_util_1.TypedDataUtils.eip712Hash(message, eth_sig_util_1.SignTypedDataVersion.V4));
return limit_order_protocol_const_1.ZX + hash.substring(2);
}
buildLimitOrderTypedData(order, domainName = limit_order_protocol_const_1.PROTOCOL_NAME) {
return {
primaryType: 'Order',
types: {
EIP712Domain: limit_order_protocol_const_1.EIP712_DOMAIN,
Order: limit_order_protocol_const_1.ORDER_STRUCTURE,
},
domain: {
name: domainName,
version: limit_order_protocol_const_1.PROTOCOL_VERSION,
chainId: this.chainId,
verifyingContract: this.contractAddress,
},
message: order,
};
}
buildRFQOrderTypedData(order, domainName = limit_order_protocol_const_1.PROTOCOL_NAME) {
return {
primaryType: 'OrderRFQ',
types: {
EIP712Domain: limit_order_protocol_const_1.EIP712_DOMAIN,
OrderRFQ: limit_order_protocol_const_1.RFQ_ORDER_STRUCTURE,
},
domain: {
name: domainName,
version: limit_order_protocol_const_1.PROTOCOL_VERSION,
chainId: this.chainId,
verifyingContract: this.contractAddress,
},
message: Object.assign({}, order),
};
}
buildRFQOrder({ id, wrapEth = false, expiresInTimestamp, makerAssetAddress, takerAssetAddress, makerAddress, allowedSender = limit_order_protocol_const_1.ZERO_ADDRESS, makingAmount, takingAmount, }) {
return {
info: generateRFQOrderInfo(id, expiresInTimestamp, wrapEth),
makerAsset: makerAssetAddress,
takerAsset: takerAssetAddress,
maker: makerAddress,
allowedSender,
makingAmount,
takingAmount,
};
}
/**
* @param allowedSender formerly `takerAddress`
* @returns
*/
// eslint-disable-next-line max-lines-per-function
buildLimitOrder({ makerAssetAddress, takerAssetAddress, makerAddress, receiver = limit_order_protocol_const_1.ZERO_ADDRESS, allowedSender = limit_order_protocol_const_1.ZERO_ADDRESS, makingAmount, takingAmount, predicate = limit_order_protocol_const_1.ZX, permit = limit_order_protocol_const_1.ZX, getMakingAmount = limit_order_protocol_const_1.ZX, getTakingAmount = limit_order_protocol_const_1.ZX, preInteraction = limit_order_protocol_const_1.ZX, postInteraction = limit_order_protocol_const_1.ZX, salt = this.generateSalt(), }) {
const makerAssetData = limit_order_protocol_const_1.ZX;
const takerAssetData = limit_order_protocol_const_1.ZX;
const { offsets, interactions } = LimitOrderBuilder.packInteractions({
makerAssetData,
takerAssetData,
getMakingAmount,
getTakingAmount,
predicate,
permit,
preInteraction,
postInteraction,
});
return {
salt,
makerAsset: makerAssetAddress,
takerAsset: takerAssetAddress,
maker: makerAddress,
receiver,
allowedSender,
makingAmount,
takingAmount,
offsets,
interactions,
};
}
getContractCallData(methodName, methodParams = []) {
return this.providerConnector.contractEncodeABI(limit_order_protocol_const_1.LIMIT_ORDER_PROTOCOL_ABI, this.contractAddress, methodName, methodParams);
}
/**
* Get nonce from contract (nonce method) and put it to predicate on order creating
*/
getCustomAmountData(methodName, makingAmount, takingAmount, swapTakerAmount = '0') {
return this.getContractCallData(methodName, [
makingAmount,
takingAmount,
swapTakerAmount,
]).substr(0, 2 + 68 * 2);
}
}
exports.LimitOrderBuilder = LimitOrderBuilder;
//# sourceMappingURL=limit-order.builder.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/limit-order.decoder.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/limit-order.decoder.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LimitOrderDecoder = void 0;
const limit_order_protocol_model_1 = __webpack_require__(/*! ./model/limit-order-protocol.model */ "./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js");
const limit_order_utils_1 = __webpack_require__(/*! ./utils/limit-order.utils */ "./node_modules/@1inch/limit-order-protocol-utils/utils/limit-order.utils.js");
class LimitOrderDecoder {
static unpackInteractions(offsets, interactions) {
const offsetsBN = BigInt(offsets);
const parsedInteractions = {};
Object.entries(limit_order_protocol_model_1.InteractionsFields).forEach(([name, position]) => {
parsedInteractions[name] = limit_order_utils_1.parseInteractionForField(offsetsBN, interactions, position);
});
return parsedInteractions;
}
static unpackInteraction(order, name) {
return limit_order_utils_1.parseInteractionForField(BigInt(order.offsets), order.interactions, limit_order_protocol_model_1.InteractionsFields[name]);
}
/**
* @returns `true` if interaction value is empty of 0x
*/
static hasInteraction(order, name) {
const interaction = this.unpackInteraction(order, name);
return limit_order_utils_1.trim0x(interaction) !== '';
}
static unpackStaticCalls(offsets, interactions) {
const offsetsBI = BigInt(offsets);
const data = limit_order_utils_1.trim0x(interactions);
const result = [];
let previous = BigInt(0);
let current = BigInt(0);
// See PredicateHelper.and in limit-order-protocol
for (let i = BigInt(0); (current = (offsetsBI >> i) & limit_order_utils_1.UINT32_BITMASK); i += limit_order_utils_1.UINT32_BITS) {
const calldata = data.slice(Number(previous) * 2, Number(current) * 2);
result.push(calldata);
previous = current;
}
return result;
}
}
exports.LimitOrderDecoder = LimitOrderDecoder;
//# sourceMappingURL=limit-order.decoder.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/model/abi.model.js":
/*!***************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/model/abi.model.js ***!
\***************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
//# sourceMappingURL=abi.model.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/model/eip712.model.js":
/*!******************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/model/eip712.model.js ***!
\******************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
//# sourceMappingURL=eip712.model.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js":
/*!********************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/model/limit-order-protocol.model.js ***!
\********************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LimitOrderProtocolMethods = exports.InteractionsFields = exports.ChainId = void 0;
var ChainId;
(function (ChainId) {
ChainId[ChainId["etherumMainnet"] = 1] = "etherumMainnet";
ChainId[ChainId["binanceMainnet"] = 56] = "binanceMainnet";
ChainId[ChainId["polygonMainnet"] = 137] = "polygonMainnet";
ChainId[ChainId["optimismMainnet"] = 10] = "optimismMainnet";
ChainId[ChainId["arbitrumMainnet"] = 42161] = "arbitrumMainnet";
ChainId[ChainId["gnosisMainnet"] = 100] = "gnosisMainnet";
ChainId[ChainId["avalancheMainnet"] = 43114] = "avalancheMainnet";
ChainId[ChainId["fantomMainnet"] = 250] = "fantomMainnet";
ChainId[ChainId["auroraMainnet"] = 1313161554] = "auroraMainnet";
ChainId[ChainId["klaytnMainnet"] = 8217] = "klaytnMainnet";
})(ChainId = exports.ChainId || (exports.ChainId = {}));
exports.InteractionsFields = {
makerAssetData: 0,
takerAssetData: 1,
getMakingAmount: 2,
getTakingAmount: 3,
predicate: 4,
permit: 5,
preInteraction: 6,
postInteraction: 7,
// cuz enum has numeric keys also
};
var LimitOrderProtocolMethods;
(function (LimitOrderProtocolMethods) {
LimitOrderProtocolMethods["getMakingAmount"] = "getMakingAmount";
LimitOrderProtocolMethods["getTakingAmount"] = "getTakingAmount";
LimitOrderProtocolMethods["arbitraryStaticCall"] = "arbitraryStaticCall";
LimitOrderProtocolMethods["fillOrder"] = "fillOrder";
LimitOrderProtocolMethods["fillOrderToWithPermit"] = "fillOrderToWithPermit";
LimitOrderProtocolMethods["fillOrderRFQ"] = "fillOrderRFQ";
LimitOrderProtocolMethods["cancelOrder"] = "cancelOrder";
LimitOrderProtocolMethods["cancelOrderRFQ"] = "cancelOrderRFQ";
LimitOrderProtocolMethods["nonce"] = "nonce";
LimitOrderProtocolMethods["advanceNonce"] = "advanceNonce";
LimitOrderProtocolMethods["increaseNonce"] = "increaseNonce";
LimitOrderProtocolMethods["and"] = "and";
LimitOrderProtocolMethods["or"] = "or";
LimitOrderProtocolMethods["eq"] = "eq";
LimitOrderProtocolMethods["lt"] = "lt";
LimitOrderProtocolMethods["gt"] = "gt";
LimitOrderProtocolMethods["timestampBelow"] = "timestampBelow";
LimitOrderProtocolMethods["timestampBelowAndNonceEquals"] = "timestampBelowAndNonceEquals";
LimitOrderProtocolMethods["nonceEquals"] = "nonceEquals";
LimitOrderProtocolMethods["remaining"] = "remaining";
LimitOrderProtocolMethods["transferFrom"] = "transferFrom";
LimitOrderProtocolMethods["checkPredicate"] = "checkPredicate";
LimitOrderProtocolMethods["remainingsRaw"] = "remainingsRaw";
LimitOrderProtocolMethods["simulate"] = "simulate";
})(LimitOrderProtocolMethods = exports.LimitOrderProtocolMethods || (exports.LimitOrderProtocolMethods = {}));
//# sourceMappingURL=limit-order-protocol.model.js.map
/***/ }),
/***/ "./node_modules/@1inch/limit-order-protocol-utils/model/series-nonce-manager.model.js":
/*!********************************************************************************************!*\
!*** ./node_modules/@1inch/limit-order-protocol-utils/model/series-nonce-manager.model.js ***!
\********************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.SeriesNonceManagerMethods = exports.NonceSeriesV2 = exports.NonceSeriesLegacyV1 = void 0;
/**
* @deprecated
*/
exports.NonceSeriesLegacyV1 = {
P2Pv2: BigInt(1),
};
exports.NonceSeriesV2 = {
/**
* This is not a valid option.
*
* @deprecated Gasless should use main contract's built-in nonce manager
* to avoid arbitraryStaticCall() and save gas.
*/
GaslessV3: BigInt(-1),
// Those are valid
_GaslessV3: BigInt(-1),
LimitOrderV3: BigInt(0),
P2PV3: BigInt(1),
};
var SeriesNonceManagerMethods;
(function (SeriesNonceManagerMethods) {
SeriesNonceManagerMethods["nonce"] = "nonce";
SeriesNonceManagerMethods["advanceNonce"] = "advanceNonce";
SeriesNonceManagerMethods["increaseNonce"] = "increaseNonce";
SeriesNonceManagerMethods["nonceEquals"] = "nonceEquals";
// Don't expose