@reyaxyz/sdk 0.121.0 → 0.122.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/services/encode.js +1 -1
- package/dist/services/encode.js.map +1 -1
- package/dist/services/swaps/encode.js +26 -5
- package/dist/services/swaps/encode.js.map +1 -1
- package/dist/services/swaps/simulation.js +52 -10
- package/dist/services/swaps/simulation.js.map +1 -1
- package/dist/services/swaps/types.js.map +1 -1
- package/dist/types/services/swaps/encode.d.ts +1 -0
- package/dist/types/services/swaps/encode.d.ts.map +1 -1
- package/dist/types/services/swaps/simulation.d.ts +2 -1
- package/dist/types/services/swaps/simulation.d.ts.map +1 -1
- package/dist/types/services/swaps/types.d.ts +4 -0
- package/dist/types/services/swaps/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/services/encode.ts +1 -1
- package/src/services/swaps/encode.ts +53 -3
- package/src/services/swaps/simulation.ts +65 -8
- package/src/services/swaps/types.ts +5 -0
package/README.md
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
|
|
7
7
|
| Statements | Branches | Functions | Lines |
|
|
8
8
|
| --------------------------- | ----------------------- | ------------------------- | ----------------- |
|
|
9
|
-
|  |  |  |  |
|
|
10
10
|
|
package/dist/services/encode.js
CHANGED
|
@@ -28,7 +28,7 @@ var encodeSingleTrade = function (counterpartyAccountIds, orderBase, orderPriceL
|
|
|
28
28
|
exports.encodeSingleTrade = encodeSingleTrade;
|
|
29
29
|
var encodeSingleSwap = function (amountIn, amountOut, path, adapters, recipients, marketId, exchangeId, multiAction) {
|
|
30
30
|
// Trade memory trade = abi.decode(command.inputs, (Trade));
|
|
31
|
-
multiAction.newAction((0, common_2.getCommand)(common_2.CommandType.
|
|
31
|
+
multiAction.newAction((0, common_2.getCommand)(common_2.CommandType.CAMELOT_SWAP, [[amountIn, amountOut, path, adapters, recipients]], marketId, exchangeId));
|
|
32
32
|
};
|
|
33
33
|
exports.encodeSingleSwap = encodeSingleSwap;
|
|
34
34
|
var encodeRouterCall = function (multiAction, accountId, nativeCurrencyValue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"/","sources":["services/encode.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAEzD,0CAAyE;AACzE,0CAA0D;AAC1D,iCAA6C;AAC7C,gBAAgB;AAChB,wGAAwG;AACxG,KAAK;AACE,IAAM,mBAAmB,GAAG,UACjC,KAAa,EACb,MAAc,EACd,WAAwB;IAExB,WAAW,CAAC,SAAS,CAAC,IAAA,mBAAU,EAAC,oBAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B;AAEK,IAAM,oBAAoB,GAAG,UAClC,KAAa,EACb,MAAc,EACd,WAAwB;IAExB,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EAAC,oBAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACxD,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,oBAAoB,wBAQ/B;AAEK,IAAM,0BAA0B,GAAG,UACxC,iBAAyB,EACzB,KAAa,EACb,MAAc,EACd,WAAwB;IAExB,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EACR,oBAAW,CAAC,uBAAuB,EACnC,CAAC,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EACpC,CAAC,EACD,CAAC,CACF,CACF,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,0BAA0B,8BAcrC;AAEK,IAAM,iBAAiB,GAAG,UAC/B,sBAAgC,EAChC,SAAiB,EACjB,eAAuB,EACvB,QAAgB,EAChB,UAAkB,EAClB,WAAwB;IAExB,wGAAwG;IACxG,IAAM,gBAAgB,GAAG,iBAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CACxD,CAAC,QAAQ,EAAE,SAAS,CAAC,EACrB,CAAC,SAAS,EAAE,eAAe,CAAC,CAC7B,CAAC;IAEF,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EACR,oBAAW,CAAC,WAAW,EACvB,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,EAC1C,QAAQ,EACR,UAAU,CACX,CACF,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,iBAAiB,qBAsB5B;AAEK,IAAM,gBAAgB,GAAG,UAC9B,QAAgB,EAChB,SAAiB,EACjB,IAAc,EACd,QAAkB,EAClB,UAAoB,EACpB,QAAgB,EAChB,UAAkB,EAClB,WAAwB;IAExB,4DAA4D;IAC5D,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EACR,oBAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"/","sources":["services/encode.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAEzD,0CAAyE;AACzE,0CAA0D;AAC1D,iCAA6C;AAC7C,gBAAgB;AAChB,wGAAwG;AACxG,KAAK;AACE,IAAM,mBAAmB,GAAG,UACjC,KAAa,EACb,MAAc,EACd,WAAwB;IAExB,WAAW,CAAC,SAAS,CAAC,IAAA,mBAAU,EAAC,oBAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B;AAEK,IAAM,oBAAoB,GAAG,UAClC,KAAa,EACb,MAAc,EACd,WAAwB;IAExB,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EAAC,oBAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACxD,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,oBAAoB,wBAQ/B;AAEK,IAAM,0BAA0B,GAAG,UACxC,iBAAyB,EACzB,KAAa,EACb,MAAc,EACd,WAAwB;IAExB,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EACR,oBAAW,CAAC,uBAAuB,EACnC,CAAC,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EACpC,CAAC,EACD,CAAC,CACF,CACF,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,0BAA0B,8BAcrC;AAEK,IAAM,iBAAiB,GAAG,UAC/B,sBAAgC,EAChC,SAAiB,EACjB,eAAuB,EACvB,QAAgB,EAChB,UAAkB,EAClB,WAAwB;IAExB,wGAAwG;IACxG,IAAM,gBAAgB,GAAG,iBAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CACxD,CAAC,QAAQ,EAAE,SAAS,CAAC,EACrB,CAAC,SAAS,EAAE,eAAe,CAAC,CAC7B,CAAC;IAEF,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EACR,oBAAW,CAAC,WAAW,EACvB,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,EAC1C,QAAQ,EACR,UAAU,CACX,CACF,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,iBAAiB,qBAsB5B;AAEK,IAAM,gBAAgB,GAAG,UAC9B,QAAgB,EAChB,SAAiB,EACjB,IAAc,EACd,QAAkB,EAClB,UAAoB,EACpB,QAAgB,EAChB,UAAkB,EAClB,WAAwB;IAExB,4DAA4D;IAC5D,WAAW,CAAC,SAAS,CACnB,IAAA,mBAAU,EACR,oBAAW,CAAC,YAAY,EACxB,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,EACnD,QAAQ,EACR,UAAU,CACX,CACF,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,gBAAgB,oBAmB3B;AAEK,IAAM,gBAAgB,GAAG,UAC9B,WAAwB,EACxB,SAAiB,EACjB,mBAA2B;IAE3B,IAAM,iBAAiB,GAAG,SAAS,CAAC;IACpC,IAAM,UAAU,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAM,SAAS,GAAG,IAAI,kBAAS,CAAC,gBAAO,CAAC,CAAC;IACzC,IAAM,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAC7E,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,gBAAgB,oBAc3B","sourcesContent":["//////////////////// ENCODE SINGLE ////////////////////\n\nimport { MethodParameters, MultiAction, CoreAbi } from '@reyaxyz/common';\nimport { CommandType, getCommand } from '@reyaxyz/common';\nimport { AbiCoder, Interface } from 'ethers';\n// const abi = [\n// 'function coreExecute(uint128 poolId, uint128 accountId, Command[] commands, EIP712Signature sig)',\n// ];\nexport const encodeSingleDeposit = (\n token: string,\n amount: bigint,\n multiAction: MultiAction,\n): void => {\n multiAction.newAction(getCommand(CommandType.DEPOSIT, [token, amount], 0, 0));\n};\n\nexport const encodeSingleWithdraw = (\n token: string,\n amount: bigint,\n multiAction: MultiAction,\n): void => {\n multiAction.newAction(\n getCommand(CommandType.WITHDRAW, [token, amount], 0, 0),\n );\n};\n\nexport const encodeSingleTransferMargin = (\n toMarginAccountId: number,\n token: string,\n amount: bigint,\n multiAction: MultiAction,\n): void => {\n multiAction.newAction(\n getCommand(\n CommandType.TRANSFER_MARGIN_ACCOUNT,\n [[toMarginAccountId, token, amount]],\n 0,\n 0,\n ),\n );\n};\n\nexport const encodeSingleTrade = (\n counterpartyAccountIds: number[],\n orderBase: bigint,\n orderPriceLimit: bigint,\n marketId: number,\n exchangeId: number,\n multiAction: MultiAction,\n): void => {\n // (int256 orderBase, UD60x18 orderPriceLimit) = abi.decode(matchOrderInputs.inputs, (int256, UD60x18));\n const encodedBasePrice = AbiCoder.defaultAbiCoder().encode(\n ['int256', 'uint256'],\n [orderBase, orderPriceLimit],\n );\n\n multiAction.newAction(\n getCommand(\n CommandType.MATCH_ORDER,\n [counterpartyAccountIds, encodedBasePrice],\n marketId,\n exchangeId,\n ),\n );\n};\n\nexport const encodeSingleSwap = (\n amountIn: number,\n amountOut: number,\n path: string[],\n adapters: string[],\n recipients: string[],\n marketId: number,\n exchangeId: number,\n multiAction: MultiAction,\n): void => {\n // Trade memory trade = abi.decode(command.inputs, (Trade));\n multiAction.newAction(\n getCommand(\n CommandType.CAMELOT_SWAP,\n [[amountIn, amountOut, path, adapters, recipients]],\n marketId,\n exchangeId,\n ),\n );\n};\n\nexport const encodeRouterCall = (\n multiAction: MultiAction,\n accountId: number,\n nativeCurrencyValue: bigint,\n): MethodParameters => {\n const functionSignature = 'execute';\n const parameters = [accountId, multiAction.commands];\n\n const INTERFACE = new Interface(CoreAbi);\n const calldata = INTERFACE.encodeFunctionData(functionSignature, parameters);\n return {\n calldata: calldata,\n value: BigInt(nativeCurrencyValue).toString(10),\n };\n};\n"]}
|
|
@@ -36,12 +36,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.encodeSwap = void 0;
|
|
39
|
+
exports.encodeSwapSimulation = exports.encodeSwap = void 0;
|
|
40
40
|
var ethers_1 = require("ethers");
|
|
41
41
|
var common_1 = require("@reyaxyz/common");
|
|
42
42
|
var encode_1 = require("../encode");
|
|
43
43
|
var encodeSwap = function (signer, chainId, coreSigNonce, accountId, amountIn, amountOut, path, adapters, recipients, marketId, exchangeId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
44
|
-
var multiAction, _a, eip712Signature, eip712Payload, value
|
|
44
|
+
var multiAction, _a, eip712Signature, eip712Payload, value;
|
|
45
45
|
return __generator(this, function (_b) {
|
|
46
46
|
switch (_b.label) {
|
|
47
47
|
case 0:
|
|
@@ -51,11 +51,32 @@ var encodeSwap = function (signer, chainId, coreSigNonce, accountId, amountIn, a
|
|
|
51
51
|
case 1:
|
|
52
52
|
_a = _b.sent(), eip712Signature = _a.signature, eip712Payload = _a.payload;
|
|
53
53
|
value = BigInt(0);
|
|
54
|
-
|
|
54
|
+
return [2 /*return*/, {
|
|
55
|
+
calldata: '', // not sending calldata to API anymore
|
|
56
|
+
value: BigInt(value).toString(10),
|
|
57
|
+
signature: eip712Signature,
|
|
58
|
+
payload: eip712Payload,
|
|
59
|
+
}];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}); };
|
|
63
|
+
exports.encodeSwap = encodeSwap;
|
|
64
|
+
var encodeSwapSimulation = function (signer, chainId, coreSigNonce, accountId, amountIn, amountOut, path, adapters, recipients, marketId, exchangeId, publisherAddress) { return __awaiter(void 0, void 0, void 0, function () {
|
|
65
|
+
var multiAction, _a, eip712Signature, eip712Payload, value, functionSignature, parameters, INTERFACE, calldata;
|
|
66
|
+
return __generator(this, function (_b) {
|
|
67
|
+
switch (_b.label) {
|
|
68
|
+
case 0:
|
|
69
|
+
multiAction = new common_1.MultiAction();
|
|
70
|
+
(0, encode_1.encodeSingleSwap)(amountIn, amountOut, path, adapters, recipients, marketId, exchangeId, multiAction);
|
|
71
|
+
return [4 /*yield*/, (0, common_1.signCoreCommands)(signer, chainId, (0, common_1.convertToAddress)(publisherAddress), accountId, multiAction.commands, coreSigNonce + 1, (0, common_1.getCurrentTimestampInSeconds)() + common_1.CORE_DEADLINE_IN_SECONDS, ethers_1.ethers.AbiCoder.defaultAbiCoder().encode([], []))];
|
|
72
|
+
case 1:
|
|
73
|
+
_a = _b.sent(), eip712Signature = _a.signature, eip712Payload = _a.payload;
|
|
74
|
+
value = BigInt(0);
|
|
75
|
+
functionSignature = 'executeBySig';
|
|
55
76
|
parameters = [
|
|
56
77
|
{ accountId: accountId, commands: multiAction.commands, sig: eip712Signature },
|
|
57
78
|
];
|
|
58
|
-
INTERFACE = new ethers_1.Interface(common_1.
|
|
79
|
+
INTERFACE = new ethers_1.Interface(common_1.CoreAbi);
|
|
59
80
|
calldata = INTERFACE.encodeFunctionData(functionSignature, parameters);
|
|
60
81
|
return [2 /*return*/, {
|
|
61
82
|
calldata: calldata,
|
|
@@ -66,5 +87,5 @@ var encodeSwap = function (signer, chainId, coreSigNonce, accountId, amountIn, a
|
|
|
66
87
|
}
|
|
67
88
|
});
|
|
68
89
|
}); };
|
|
69
|
-
exports.
|
|
90
|
+
exports.encodeSwapSimulation = encodeSwapSimulation;
|
|
70
91
|
//# sourceMappingURL=encode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"/","sources":["services/swaps/encode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmD;AAEnD,
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"/","sources":["services/swaps/encode.ts"],"names":[],"mappings":"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","sourcesContent":["import { ethers, Interface, Signer } from 'ethers';\nimport { MethodParametersAndEIP712Payload } from '../orders';\nimport {\n ContractType,\n convertToAddress,\n CoreAbi,\n CORE_DEADLINE_IN_SECONDS,\n getAddress,\n getCurrentTimestampInSeconds,\n MultiAction,\n signCoreCommands,\n} from '@reyaxyz/common';\nimport { encodeSingleSwap } from '../encode';\n\nexport const encodeSwap = async (\n signer: Signer,\n chainId: number,\n coreSigNonce: number,\n accountId: number,\n amountIn: number,\n amountOut: number,\n path: string[],\n adapters: string[],\n recipients: string[],\n marketId: number,\n exchangeId: number,\n): Promise<MethodParametersAndEIP712Payload> => {\n const multiAction = new MultiAction();\n\n encodeSingleSwap(\n amountIn,\n amountOut,\n path,\n adapters,\n recipients,\n marketId,\n exchangeId,\n multiAction,\n );\n\n const { signature: eip712Signature, payload: eip712Payload } =\n await signCoreCommands(\n signer,\n chainId,\n getAddress(chainId, ContractType.PERIPHERY_PROXY),\n accountId,\n multiAction.commands,\n coreSigNonce + 1,\n getCurrentTimestampInSeconds() + CORE_DEADLINE_IN_SECONDS,\n ethers.AbiCoder.defaultAbiCoder().encode([], []),\n );\n\n const value = BigInt(0);\n\n return {\n calldata: '', // not sending calldata to API anymore\n value: BigInt(value).toString(10),\n signature: eip712Signature,\n payload: eip712Payload,\n };\n};\n\nexport const encodeSwapSimulation = async (\n signer: Signer,\n chainId: number,\n coreSigNonce: number,\n accountId: number,\n amountIn: number,\n amountOut: number,\n path: string[],\n adapters: string[],\n recipients: string[],\n marketId: number,\n exchangeId: number,\n publisherAddress: string,\n): Promise<MethodParametersAndEIP712Payload> => {\n const multiAction = new MultiAction();\n\n encodeSingleSwap(\n amountIn,\n amountOut,\n path,\n adapters,\n recipients,\n marketId,\n exchangeId,\n multiAction,\n );\n\n const { signature: eip712Signature, payload: eip712Payload } =\n await signCoreCommands(\n signer,\n chainId,\n convertToAddress(publisherAddress),\n accountId,\n multiAction.commands,\n coreSigNonce + 1,\n getCurrentTimestampInSeconds() + CORE_DEADLINE_IN_SECONDS,\n ethers.AbiCoder.defaultAbiCoder().encode([], []), // @todo check this\n );\n\n const value = BigInt(0);\n\n const functionSignature = 'executeBySig';\n const parameters = [\n { accountId, commands: multiAction.commands, sig: eip712Signature },\n ];\n\n const INTERFACE = new Interface(CoreAbi);\n const calldata = INTERFACE.encodeFunctionData(functionSignature, parameters);\n return {\n calldata: calldata,\n value: BigInt(value).toString(10),\n signature: eip712Signature,\n payload: eip712Payload,\n };\n};\n"]}
|
|
@@ -35,12 +35,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
38
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.simulateSwap = void 0;
|
|
42
|
+
exports.simulateSwap = exports.findBestPath = void 0;
|
|
40
43
|
var common_1 = require("@reyaxyz/common");
|
|
41
44
|
var ethers_1 = require("ethers");
|
|
42
45
|
var config_1 = require("../../config");
|
|
43
|
-
var
|
|
46
|
+
var encode_1 = require("./encode");
|
|
47
|
+
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
48
|
+
var CamelotAbi = [
|
|
44
49
|
{
|
|
45
50
|
inputs: [
|
|
46
51
|
{
|
|
@@ -109,19 +114,19 @@ var abi = [
|
|
|
109
114
|
},
|
|
110
115
|
];
|
|
111
116
|
var findBestPath = function (amountFrom, tokenFrom, tokenTo, maxSteps) { return __awaiter(void 0, void 0, void 0, function () {
|
|
112
|
-
var env, chainId, provider,
|
|
117
|
+
var env, chainId, provider, camelotAddress, camelot, tokenInfoFrom, tokenInfoTo, amountFromScaled, result;
|
|
113
118
|
return __generator(this, function (_a) {
|
|
114
119
|
switch (_a.label) {
|
|
115
120
|
case 0:
|
|
116
121
|
env = (0, config_1.getSdkEnvironment)();
|
|
117
122
|
chainId = (0, common_1.getReyaNetwork)(env === 'production' ? 'production' : 'test');
|
|
118
123
|
provider = ethers_1.ethers.getDefaultProvider(common_1.reyaChainIdRPCMapper[chainId]);
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
camelotAddress = (0, common_1.getAddress)(chainId, common_1.ContractType.CAMELOT_YAK_ROUTER);
|
|
125
|
+
camelot = new ethers_1.Contract(camelotAddress, CamelotAbi, provider);
|
|
121
126
|
tokenInfoFrom = (0, common_1.getTokenInfoByAddress)(tokenFrom);
|
|
122
127
|
tokenInfoTo = (0, common_1.getTokenInfoByAddress)(tokenTo);
|
|
123
128
|
amountFromScaled = (0, common_1.scale)(tokenInfoFrom.decimals)(amountFrom);
|
|
124
|
-
return [4 /*yield*/,
|
|
129
|
+
return [4 /*yield*/, camelot.findBestPath(amountFromScaled, tokenFrom, tokenTo, [], maxSteps || 4)];
|
|
125
130
|
case 1:
|
|
126
131
|
result = _a.sent();
|
|
127
132
|
return [2 /*return*/, {
|
|
@@ -136,18 +141,55 @@ var findBestPath = function (amountFrom, tokenFrom, tokenTo, maxSteps) { return
|
|
|
136
141
|
}
|
|
137
142
|
});
|
|
138
143
|
}); };
|
|
144
|
+
exports.findBestPath = findBestPath;
|
|
145
|
+
// Simulates sending the swap directly to Core using the publisher as msg.sender
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
147
|
+
var simulateCoreCamelotSwap = function (params, bestPath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
148
|
+
var env, chainId, provider, data, tx, result, iface, decodedResult;
|
|
149
|
+
return __generator(this, function (_a) {
|
|
150
|
+
switch (_a.label) {
|
|
151
|
+
case 0:
|
|
152
|
+
env = (0, config_1.getSdkEnvironment)();
|
|
153
|
+
chainId = (0, common_1.getReyaNetwork)(env === 'production' ? 'production' : 'test');
|
|
154
|
+
provider = ethers_1.ethers.getDefaultProvider(common_1.reyaChainIdRPCMapper[chainId]);
|
|
155
|
+
return [4 /*yield*/, (0, encode_1.encodeSwapSimulation)(params.signer, chainId, params.owner.coreSigNonce, params.marginAccountId, bestPath.amountInBase, bestPath.amountOutBase, bestPath.path, bestPath.adapters, bestPath.recipients, 0, // 0 for marketID
|
|
156
|
+
0, // 0 for exchangeID
|
|
157
|
+
common_1.PUBLISHER_ACCOUNT)];
|
|
158
|
+
case 1:
|
|
159
|
+
data = (_a.sent()).calldata;
|
|
160
|
+
tx = {
|
|
161
|
+
from: common_1.PUBLISHER_ACCOUNT,
|
|
162
|
+
to: common_1.ContractType.CORE_PROXY,
|
|
163
|
+
data: data,
|
|
164
|
+
};
|
|
165
|
+
return [4 /*yield*/, provider.call(tx)];
|
|
166
|
+
case 2:
|
|
167
|
+
result = _a.sent();
|
|
168
|
+
iface = new ethers_1.ethers.Interface(common_1.PeripheryAbi);
|
|
169
|
+
decodedResult = iface.decodeFunctionResult('executeBySig', result);
|
|
170
|
+
return [2 /*return*/, {
|
|
171
|
+
marginRatio: (0, bignumber_js_1.default)(decodedResult.usdNodeMarginInfo.liquidationMarginRequirement)
|
|
172
|
+
.div(decodedResult.usdNodeMarginInfo.marginBalance)
|
|
173
|
+
.toNumber(),
|
|
174
|
+
executedPrice: Number(ethers_1.ethers.toBigInt(ethers_1.ethers.getBytes(decodedResult.output[0]))),
|
|
175
|
+
}];
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}); };
|
|
139
179
|
var simulateSwap = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
|
140
180
|
var bestPathResult;
|
|
141
181
|
return __generator(this, function (_a) {
|
|
142
182
|
switch (_a.label) {
|
|
143
|
-
case 0: return [4 /*yield*/, findBestPath(params.amountFrom, params.tokenFrom, params.tokenTo)];
|
|
183
|
+
case 0: return [4 /*yield*/, (0, exports.findBestPath)(params.amountFrom, params.tokenFrom, params.tokenTo)];
|
|
144
184
|
case 1:
|
|
145
185
|
bestPathResult = _a.sent();
|
|
186
|
+
// todo: uncomment after testing
|
|
187
|
+
// const simulation = await simulateCoreCamelotSwap(params, bestPathResult);
|
|
146
188
|
return [2 /*return*/, {
|
|
147
189
|
bestPath: bestPathResult,
|
|
148
|
-
estimatedSlippage: 0.013, // TODO:
|
|
149
|
-
marginRatio: 0.
|
|
150
|
-
marginRatioHealth: common_1.ExposureCommand.evaluateHealthStatus(0.
|
|
190
|
+
estimatedSlippage: 0.013, // TODO: IR
|
|
191
|
+
marginRatio: 0.013,
|
|
192
|
+
marginRatioHealth: common_1.ExposureCommand.evaluateHealthStatus(0.013),
|
|
151
193
|
}];
|
|
152
194
|
}
|
|
153
195
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulation.js","sourceRoot":"/","sources":["services/swaps/simulation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"simulation.js","sourceRoot":"/","sources":["services/swaps/simulation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ContractType,\n descale,\n getAddress,\n getReyaNetwork,\n getTokenInfoByAddress,\n scale,\n reyaChainIdRPCMapper,\n ExposureCommand,\n PeripheryAbi,\n PUBLISHER_ACCOUNT,\n} from '@reyaxyz/common';\nimport { Contract, ethers } from 'ethers';\nimport {\n FindBestPathResult,\n SimulateCoreCamelotSwapResult,\n SimulateSwapParams,\n SimulateSwapResult,\n} from './types';\nimport { getSdkEnvironment } from '../../config';\nimport { encodeSwapSimulation } from './encode';\nimport BigNumber from 'bignumber.js';\nconst CamelotAbi = [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_amountIn',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: '_tokenIn',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '_tokenOut',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: '_trustedTokens',\n type: 'address[]',\n },\n {\n internalType: 'uint256',\n name: '_maxSteps',\n type: 'uint256',\n },\n ],\n name: 'findBestPath',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256[]',\n name: 'amounts',\n type: 'uint256[]',\n },\n {\n internalType: 'address[]',\n name: 'adapters',\n type: 'address[]',\n },\n {\n internalType: 'address[]',\n name: 'path',\n type: 'address[]',\n },\n {\n internalType: 'address[]',\n name: 'recipients',\n type: 'address[]',\n },\n {\n internalType: 'uint256',\n name: 'gasEstimate',\n type: 'uint256',\n },\n ],\n internalType: 'struct FormattedOffer',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\nexport const findBestPath = async (\n amountFrom: number,\n tokenFrom: string,\n tokenTo: string,\n maxSteps?: number,\n): Promise<FindBestPathResult> => {\n const env = getSdkEnvironment();\n const chainId = getReyaNetwork(env === 'production' ? 'production' : 'test');\n const provider = ethers.getDefaultProvider(\n reyaChainIdRPCMapper[chainId] as string,\n );\n const camelotAddress = getAddress(chainId, ContractType.CAMELOT_YAK_ROUTER);\n const camelot = new Contract(camelotAddress, CamelotAbi, provider);\n\n const tokenInfoFrom = getTokenInfoByAddress(tokenFrom);\n const tokenInfoTo = getTokenInfoByAddress(tokenTo);\n const amountFromScaled = scale(tokenInfoFrom.decimals)(amountFrom);\n\n // amountFrom\n // tokenFrom\n // tokenTo\n // trustedTokens\n // maxSteps\n const result = await camelot.findBestPath(\n amountFromScaled,\n tokenFrom,\n tokenTo,\n [],\n maxSteps || 4,\n );\n return {\n amountFrom: descale(tokenInfoFrom.decimals)(result.amounts[0]),\n amountTo: descale(tokenInfoTo.decimals)(result.amounts[1]),\n amountInBase: result.amounts[0],\n amountOutBase: result.amounts[1],\n adapters: Array.from(result[1]),\n path: Array.from(result[2]),\n recipients: Array.from(result[3]),\n };\n};\n\n// Simulates sending the swap directly to Core using the publisher as msg.sender\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst simulateCoreCamelotSwap = async (\n params: SimulateSwapParams,\n bestPath: FindBestPathResult,\n): Promise<SimulateCoreCamelotSwapResult> => {\n const env = getSdkEnvironment();\n const chainId = getReyaNetwork(env === 'production' ? 'production' : 'test');\n const provider = ethers.getDefaultProvider(\n reyaChainIdRPCMapper[chainId] as string,\n );\n\n const { calldata: data } = await encodeSwapSimulation(\n params.signer,\n chainId,\n params.owner.coreSigNonce,\n params.marginAccountId,\n bestPath.amountInBase,\n bestPath.amountOutBase,\n bestPath.path,\n bestPath.adapters,\n bestPath.recipients,\n 0, // 0 for marketID\n 0, // 0 for exchangeID\n PUBLISHER_ACCOUNT, // publish\n );\n\n const tx = {\n from: PUBLISHER_ACCOUNT,\n to: ContractType.CORE_PROXY,\n data,\n };\n\n const result = await provider.call(tx);\n const iface = new ethers.Interface(PeripheryAbi);\n const decodedResult = iface.decodeFunctionResult('executeBySig', result);\n\n return {\n marginRatio: BigNumber(\n decodedResult.usdNodeMarginInfo.liquidationMarginRequirement,\n )\n .div(decodedResult.usdNodeMarginInfo.marginBalance)\n .toNumber(),\n executedPrice: Number(\n ethers.toBigInt(ethers.getBytes(decodedResult.output[0])),\n ),\n };\n};\n\nexport const simulateSwap = async (\n params: SimulateSwapParams,\n): Promise<SimulateSwapResult> => {\n const bestPathResult = await findBestPath(\n params.amountFrom,\n params.tokenFrom,\n params.tokenTo,\n );\n\n // todo: uncomment after testing\n // const simulation = await simulateCoreCamelotSwap(params, bestPathResult);\n\n return {\n bestPath: bestPathResult,\n estimatedSlippage: 0.013, // TODO: IR\n marginRatio: 0.013,\n marginRatioHealth: ExposureCommand.evaluateHealthStatus(0.013),\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/swaps/types.ts"],"names":[],"mappings":"","sourcesContent":["import { JsonRpcSigner, Signer } from 'ethers';\nimport { MarginAccountEntity, OwnerMetadataEntity } from '@reyaxyz/common';\n\nexport type SwapParams = {\n signer: Signer | JsonRpcSigner;\n owner: Pick<OwnerMetadataEntity, 'coreSigNonce'>;\n marginAccountId: MarginAccountEntity['id'];\n amountInBase: FindBestPathResult['amountInBase'];\n amountOutBase: FindBestPathResult['amountOutBase'];\n path: FindBestPathResult['path'];\n adapters: FindBestPathResult['adapters'];\n recipients: FindBestPathResult['recipients'];\n tradeSource?: 'reya' | 'rage' | 'other';\n slippage?: number;\n};\n\nexport type SwapResult = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type FindBestPathResult = {\n amountFrom: number;\n amountTo: number;\n amountInBase: SimulateSwapParams['amountFrom'];\n amountOutBase: SimulateSwapParams['amountFrom'];\n path: SimulateSwapParams['tokenFrom'][];\n adapters: string[];\n recipients: string[];\n};\n\nexport type SimulateSwapParams = {\n signer: Signer | JsonRpcSigner;\n owner: Pick<OwnerMetadataEntity, 'coreSigNonce'>;\n marginAccountId: MarginAccountEntity['id'];\n amountFrom: number;\n tokenFrom: string;\n tokenTo: string;\n};\n\nexport type SimulateSwapResult = {\n bestPath: FindBestPathResult;\n estimatedSlippage: number;\n marginRatio: number;\n marginRatioHealth: MarginAccountEntity['marginRatioHealth'];\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"/","sources":["services/swaps/types.ts"],"names":[],"mappings":"","sourcesContent":["import { JsonRpcSigner, Signer } from 'ethers';\nimport { MarginAccountEntity, OwnerMetadataEntity } from '@reyaxyz/common';\n\nexport type SwapParams = {\n signer: Signer | JsonRpcSigner;\n owner: Pick<OwnerMetadataEntity, 'coreSigNonce'>;\n marginAccountId: MarginAccountEntity['id'];\n amountInBase: FindBestPathResult['amountInBase'];\n amountOutBase: FindBestPathResult['amountOutBase'];\n path: FindBestPathResult['path'];\n adapters: FindBestPathResult['adapters'];\n recipients: FindBestPathResult['recipients'];\n tradeSource?: 'reya' | 'rage' | 'other';\n slippage?: number;\n};\n\nexport type SwapResult = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type FindBestPathResult = {\n amountFrom: number;\n amountTo: number;\n amountInBase: SimulateSwapParams['amountFrom'];\n amountOutBase: SimulateSwapParams['amountFrom'];\n path: SimulateSwapParams['tokenFrom'][];\n adapters: string[];\n recipients: string[];\n};\n\nexport type SimulateSwapParams = {\n signer: Signer | JsonRpcSigner;\n owner: Pick<OwnerMetadataEntity, 'coreSigNonce'>;\n marginAccountId: MarginAccountEntity['id'];\n amountFrom: number;\n tokenFrom: string;\n tokenTo: string;\n};\n\nexport type SimulateSwapResult = {\n bestPath: FindBestPathResult;\n estimatedSlippage: number;\n marginRatio: number;\n marginRatioHealth: MarginAccountEntity['marginRatioHealth'];\n};\n\nexport type SimulateCoreCamelotSwapResult = {\n marginRatio: number;\n executedPrice: number;\n};\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Signer } from 'ethers';
|
|
2
2
|
import { MethodParametersAndEIP712Payload } from '../orders';
|
|
3
3
|
export declare const encodeSwap: (signer: Signer, chainId: number, coreSigNonce: number, accountId: number, amountIn: number, amountOut: number, path: string[], adapters: string[], recipients: string[], marketId: number, exchangeId: number) => Promise<MethodParametersAndEIP712Payload>;
|
|
4
|
+
export declare const encodeSwapSimulation: (signer: Signer, chainId: number, coreSigNonce: number, accountId: number, amountIn: number, amountOut: number, path: string[], adapters: string[], recipients: string[], marketId: number, exchangeId: number, publisherAddress: string) => Promise<MethodParametersAndEIP712Payload>;
|
|
4
5
|
//# sourceMappingURL=encode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"/","sources":["services/swaps/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"/","sources":["services/swaps/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAC;AAa7D,eAAO,MAAM,UAAU,WACb,MAAM,WACL,MAAM,gBACD,MAAM,aACT,MAAM,YACP,MAAM,aACL,MAAM,QACX,MAAM,EAAE,YACJ,MAAM,EAAE,cACN,MAAM,EAAE,YACV,MAAM,cACJ,MAAM,KACjB,QAAQ,gCAAgC,CAkC1C,CAAC;AAEF,eAAO,MAAM,oBAAoB,WACvB,MAAM,WACL,MAAM,gBACD,MAAM,aACT,MAAM,YACP,MAAM,aACL,MAAM,QACX,MAAM,EAAE,YACJ,MAAM,EAAE,cACN,MAAM,EAAE,YACV,MAAM,cACJ,MAAM,oBACA,MAAM,KACvB,QAAQ,gCAAgC,CAyC1C,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { SimulateSwapParams, SimulateSwapResult } from './types';
|
|
1
|
+
import { FindBestPathResult, SimulateSwapParams, SimulateSwapResult } from './types';
|
|
2
|
+
export declare const findBestPath: (amountFrom: number, tokenFrom: string, tokenTo: string, maxSteps?: number) => Promise<FindBestPathResult>;
|
|
2
3
|
export declare const simulateSwap: (params: SimulateSwapParams) => Promise<SimulateSwapResult>;
|
|
3
4
|
//# sourceMappingURL=simulation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulation.d.ts","sourceRoot":"/","sources":["services/swaps/simulation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"simulation.d.ts","sourceRoot":"/","sources":["services/swaps/simulation.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,kBAAkB,EAElB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAyEjB,eAAO,MAAM,YAAY,eACX,MAAM,aACP,MAAM,WACR,MAAM,aACJ,MAAM,KAChB,QAAQ,kBAAkB,CAkC5B,CAAC;AAmDF,eAAO,MAAM,YAAY,WACf,kBAAkB,KACzB,QAAQ,kBAAkB,CAgB5B,CAAC"}
|
|
@@ -39,4 +39,8 @@ export type SimulateSwapResult = {
|
|
|
39
39
|
marginRatio: number;
|
|
40
40
|
marginRatioHealth: MarginAccountEntity['marginRatioHealth'];
|
|
41
41
|
};
|
|
42
|
+
export type SimulateCoreCamelotSwapResult = {
|
|
43
|
+
marginRatio: number;
|
|
44
|
+
executedPrice: number;
|
|
45
|
+
};
|
|
42
46
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/swaps/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACjD,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACjD,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACzC,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC/C,aAAa,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACjD,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;CAC7D,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/swaps/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACjD,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACjD,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACzC,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC/C,aAAa,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACjD,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;CAC7D,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reyaxyz/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.122.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"generate:coverage-badges": "npx istanbul-badges-readme --silent"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@reyaxyz/common": "0.
|
|
32
|
+
"@reyaxyz/common": "0.225.0",
|
|
33
33
|
"axios": "^1.6.2",
|
|
34
34
|
"bignumber.js": "^9.1.2",
|
|
35
35
|
"ethers": "6.9.0"
|
|
36
36
|
},
|
|
37
37
|
"packageManager": "pnpm@8.3.1",
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "40183aa8b374c7c7d7a15a7bbf860d6086847990"
|
|
39
39
|
}
|
package/src/services/encode.ts
CHANGED
|
@@ -77,7 +77,7 @@ export const encodeSingleSwap = (
|
|
|
77
77
|
// Trade memory trade = abi.decode(command.inputs, (Trade));
|
|
78
78
|
multiAction.newAction(
|
|
79
79
|
getCommand(
|
|
80
|
-
CommandType.
|
|
80
|
+
CommandType.CAMELOT_SWAP,
|
|
81
81
|
[[amountIn, amountOut, path, adapters, recipients]],
|
|
82
82
|
marketId,
|
|
83
83
|
exchangeId,
|
|
@@ -2,11 +2,12 @@ import { ethers, Interface, Signer } from 'ethers';
|
|
|
2
2
|
import { MethodParametersAndEIP712Payload } from '../orders';
|
|
3
3
|
import {
|
|
4
4
|
ContractType,
|
|
5
|
+
convertToAddress,
|
|
6
|
+
CoreAbi,
|
|
5
7
|
CORE_DEADLINE_IN_SECONDS,
|
|
6
8
|
getAddress,
|
|
7
9
|
getCurrentTimestampInSeconds,
|
|
8
10
|
MultiAction,
|
|
9
|
-
PeripheryAbi as abi,
|
|
10
11
|
signCoreCommands,
|
|
11
12
|
} from '@reyaxyz/common';
|
|
12
13
|
import { encodeSingleSwap } from '../encode';
|
|
@@ -46,17 +47,66 @@ export const encodeSwap = async (
|
|
|
46
47
|
multiAction.commands,
|
|
47
48
|
coreSigNonce + 1,
|
|
48
49
|
getCurrentTimestampInSeconds() + CORE_DEADLINE_IN_SECONDS,
|
|
50
|
+
ethers.AbiCoder.defaultAbiCoder().encode([], []),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const value = BigInt(0);
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
calldata: '', // not sending calldata to API anymore
|
|
57
|
+
value: BigInt(value).toString(10),
|
|
58
|
+
signature: eip712Signature,
|
|
59
|
+
payload: eip712Payload,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const encodeSwapSimulation = async (
|
|
64
|
+
signer: Signer,
|
|
65
|
+
chainId: number,
|
|
66
|
+
coreSigNonce: number,
|
|
67
|
+
accountId: number,
|
|
68
|
+
amountIn: number,
|
|
69
|
+
amountOut: number,
|
|
70
|
+
path: string[],
|
|
71
|
+
adapters: string[],
|
|
72
|
+
recipients: string[],
|
|
73
|
+
marketId: number,
|
|
74
|
+
exchangeId: number,
|
|
75
|
+
publisherAddress: string,
|
|
76
|
+
): Promise<MethodParametersAndEIP712Payload> => {
|
|
77
|
+
const multiAction = new MultiAction();
|
|
78
|
+
|
|
79
|
+
encodeSingleSwap(
|
|
80
|
+
amountIn,
|
|
81
|
+
amountOut,
|
|
82
|
+
path,
|
|
83
|
+
adapters,
|
|
84
|
+
recipients,
|
|
85
|
+
marketId,
|
|
86
|
+
exchangeId,
|
|
87
|
+
multiAction,
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
const { signature: eip712Signature, payload: eip712Payload } =
|
|
91
|
+
await signCoreCommands(
|
|
92
|
+
signer,
|
|
93
|
+
chainId,
|
|
94
|
+
convertToAddress(publisherAddress),
|
|
95
|
+
accountId,
|
|
96
|
+
multiAction.commands,
|
|
97
|
+
coreSigNonce + 1,
|
|
98
|
+
getCurrentTimestampInSeconds() + CORE_DEADLINE_IN_SECONDS,
|
|
49
99
|
ethers.AbiCoder.defaultAbiCoder().encode([], []), // @todo check this
|
|
50
100
|
);
|
|
51
101
|
|
|
52
102
|
const value = BigInt(0);
|
|
53
103
|
|
|
54
|
-
const functionSignature = '
|
|
104
|
+
const functionSignature = 'executeBySig';
|
|
55
105
|
const parameters = [
|
|
56
106
|
{ accountId, commands: multiAction.commands, sig: eip712Signature },
|
|
57
107
|
];
|
|
58
108
|
|
|
59
|
-
const INTERFACE = new Interface(
|
|
109
|
+
const INTERFACE = new Interface(CoreAbi);
|
|
60
110
|
const calldata = INTERFACE.encodeFunctionData(functionSignature, parameters);
|
|
61
111
|
return {
|
|
62
112
|
calldata: calldata,
|
|
@@ -7,15 +7,20 @@ import {
|
|
|
7
7
|
scale,
|
|
8
8
|
reyaChainIdRPCMapper,
|
|
9
9
|
ExposureCommand,
|
|
10
|
+
PeripheryAbi,
|
|
11
|
+
PUBLISHER_ACCOUNT,
|
|
10
12
|
} from '@reyaxyz/common';
|
|
11
13
|
import { Contract, ethers } from 'ethers';
|
|
12
14
|
import {
|
|
13
15
|
FindBestPathResult,
|
|
16
|
+
SimulateCoreCamelotSwapResult,
|
|
14
17
|
SimulateSwapParams,
|
|
15
18
|
SimulateSwapResult,
|
|
16
19
|
} from './types';
|
|
17
20
|
import { getSdkEnvironment } from '../../config';
|
|
18
|
-
|
|
21
|
+
import { encodeSwapSimulation } from './encode';
|
|
22
|
+
import BigNumber from 'bignumber.js';
|
|
23
|
+
const CamelotAbi = [
|
|
19
24
|
{
|
|
20
25
|
inputs: [
|
|
21
26
|
{
|
|
@@ -84,7 +89,7 @@ const abi = [
|
|
|
84
89
|
},
|
|
85
90
|
];
|
|
86
91
|
|
|
87
|
-
const findBestPath = async (
|
|
92
|
+
export const findBestPath = async (
|
|
88
93
|
amountFrom: number,
|
|
89
94
|
tokenFrom: string,
|
|
90
95
|
tokenTo: string,
|
|
@@ -95,8 +100,8 @@ const findBestPath = async (
|
|
|
95
100
|
const provider = ethers.getDefaultProvider(
|
|
96
101
|
reyaChainIdRPCMapper[chainId] as string,
|
|
97
102
|
);
|
|
98
|
-
const
|
|
99
|
-
const
|
|
103
|
+
const camelotAddress = getAddress(chainId, ContractType.CAMELOT_YAK_ROUTER);
|
|
104
|
+
const camelot = new Contract(camelotAddress, CamelotAbi, provider);
|
|
100
105
|
|
|
101
106
|
const tokenInfoFrom = getTokenInfoByAddress(tokenFrom);
|
|
102
107
|
const tokenInfoTo = getTokenInfoByAddress(tokenTo);
|
|
@@ -107,7 +112,7 @@ const findBestPath = async (
|
|
|
107
112
|
// tokenTo
|
|
108
113
|
// trustedTokens
|
|
109
114
|
// maxSteps
|
|
110
|
-
const result = await
|
|
115
|
+
const result = await camelot.findBestPath(
|
|
111
116
|
amountFromScaled,
|
|
112
117
|
tokenFrom,
|
|
113
118
|
tokenTo,
|
|
@@ -125,6 +130,55 @@ const findBestPath = async (
|
|
|
125
130
|
};
|
|
126
131
|
};
|
|
127
132
|
|
|
133
|
+
// Simulates sending the swap directly to Core using the publisher as msg.sender
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
135
|
+
const simulateCoreCamelotSwap = async (
|
|
136
|
+
params: SimulateSwapParams,
|
|
137
|
+
bestPath: FindBestPathResult,
|
|
138
|
+
): Promise<SimulateCoreCamelotSwapResult> => {
|
|
139
|
+
const env = getSdkEnvironment();
|
|
140
|
+
const chainId = getReyaNetwork(env === 'production' ? 'production' : 'test');
|
|
141
|
+
const provider = ethers.getDefaultProvider(
|
|
142
|
+
reyaChainIdRPCMapper[chainId] as string,
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
const { calldata: data } = await encodeSwapSimulation(
|
|
146
|
+
params.signer,
|
|
147
|
+
chainId,
|
|
148
|
+
params.owner.coreSigNonce,
|
|
149
|
+
params.marginAccountId,
|
|
150
|
+
bestPath.amountInBase,
|
|
151
|
+
bestPath.amountOutBase,
|
|
152
|
+
bestPath.path,
|
|
153
|
+
bestPath.adapters,
|
|
154
|
+
bestPath.recipients,
|
|
155
|
+
0, // 0 for marketID
|
|
156
|
+
0, // 0 for exchangeID
|
|
157
|
+
PUBLISHER_ACCOUNT, // publish
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
const tx = {
|
|
161
|
+
from: PUBLISHER_ACCOUNT,
|
|
162
|
+
to: ContractType.CORE_PROXY,
|
|
163
|
+
data,
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const result = await provider.call(tx);
|
|
167
|
+
const iface = new ethers.Interface(PeripheryAbi);
|
|
168
|
+
const decodedResult = iface.decodeFunctionResult('executeBySig', result);
|
|
169
|
+
|
|
170
|
+
return {
|
|
171
|
+
marginRatio: BigNumber(
|
|
172
|
+
decodedResult.usdNodeMarginInfo.liquidationMarginRequirement,
|
|
173
|
+
)
|
|
174
|
+
.div(decodedResult.usdNodeMarginInfo.marginBalance)
|
|
175
|
+
.toNumber(),
|
|
176
|
+
executedPrice: Number(
|
|
177
|
+
ethers.toBigInt(ethers.getBytes(decodedResult.output[0])),
|
|
178
|
+
),
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
|
|
128
182
|
export const simulateSwap = async (
|
|
129
183
|
params: SimulateSwapParams,
|
|
130
184
|
): Promise<SimulateSwapResult> => {
|
|
@@ -134,10 +188,13 @@ export const simulateSwap = async (
|
|
|
134
188
|
params.tokenTo,
|
|
135
189
|
);
|
|
136
190
|
|
|
191
|
+
// todo: uncomment after testing
|
|
192
|
+
// const simulation = await simulateCoreCamelotSwap(params, bestPathResult);
|
|
193
|
+
|
|
137
194
|
return {
|
|
138
195
|
bestPath: bestPathResult,
|
|
139
|
-
estimatedSlippage: 0.013, // TODO:
|
|
140
|
-
marginRatio: 0.
|
|
141
|
-
marginRatioHealth: ExposureCommand.evaluateHealthStatus(0.
|
|
196
|
+
estimatedSlippage: 0.013, // TODO: IR
|
|
197
|
+
marginRatio: 0.013,
|
|
198
|
+
marginRatioHealth: ExposureCommand.evaluateHealthStatus(0.013),
|
|
142
199
|
};
|
|
143
200
|
};
|