@avail-project/ca-common 1.0.0-beta.1
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/dist/cjs/balances/ub-api.js +25 -0
- package/dist/cjs/cosmos/index.js +31 -0
- package/dist/cjs/data/chaindata.js +680 -0
- package/dist/cjs/data/chainid.js +91 -0
- package/dist/cjs/data/currency.js +77 -0
- package/dist/cjs/data/index.js +7 -0
- package/dist/cjs/data/utils.js +44 -0
- package/dist/cjs/evmabi/erc20.abi.js +349 -0
- package/dist/cjs/evmabi/index.js +6 -0
- package/dist/cjs/evmabi/vault.abi.js +1021 -0
- package/dist/cjs/evmabi/yakaggregator.abi.js +275 -0
- package/dist/cjs/fuelcontracts/ArcanaVault.js +2407 -0
- package/dist/cjs/fuelcontracts/ArcanaVaultFactory.js +18 -0
- package/dist/cjs/fuelcontracts/common.js +3 -0
- package/dist/cjs/fuelcontracts/index.js +5 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/permitutils/index.js +186 -0
- package/dist/cjs/proto/definition.js +4263 -0
- package/dist/cjs/proto/grpc.js +303 -0
- package/dist/cjs/rff/fuel.js +27 -0
- package/dist/cjs/rff/rff.js +77 -0
- package/dist/cjs/types/binarytypes.js +2 -0
- package/dist/cjs/types/index.js +5 -0
- package/dist/cjs/types/msgpack-axios.js +22 -0
- package/dist/cjs/vaultcontracts/index.js +4 -0
- package/dist/cjs/vaultcontracts/vaultcontracts.js +145 -0
- package/dist/cjs/xcs/autochoice.js +374 -0
- package/dist/cjs/xcs/bebop-agg.js +128 -0
- package/dist/cjs/xcs/iface.js +13 -0
- package/dist/cjs/xcs/index.js +8 -0
- package/dist/cjs/xcs/lifi-agg.js +104 -0
- package/dist/cjs/xcs/yieldyak-agg.js +113 -0
- package/dist/esm/balances/ub-api.js +21 -0
- package/dist/esm/cosmos/index.js +26 -0
- package/dist/esm/data/chaindata.js +677 -0
- package/dist/esm/data/chainid.js +85 -0
- package/dist/esm/data/currency.js +72 -0
- package/dist/esm/data/index.js +4 -0
- package/dist/esm/data/utils.js +34 -0
- package/dist/esm/evmabi/erc20.abi.js +346 -0
- package/dist/esm/evmabi/index.js +3 -0
- package/dist/esm/evmabi/vault.abi.js +1018 -0
- package/dist/esm/evmabi/yakaggregator.abi.js +272 -0
- package/dist/esm/fuelcontracts/ArcanaVault.js +2402 -0
- package/dist/esm/fuelcontracts/ArcanaVaultFactory.js +14 -0
- package/dist/esm/fuelcontracts/common.js +2 -0
- package/dist/esm/fuelcontracts/index.js +2 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/permitutils/index.js +181 -0
- package/dist/esm/proto/definition.js +4255 -0
- package/dist/esm/proto/grpc.js +297 -0
- package/dist/esm/rff/fuel.js +23 -0
- package/dist/esm/rff/rff.js +73 -0
- package/dist/esm/types/binarytypes.js +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/msgpack-axios.js +18 -0
- package/dist/esm/vaultcontracts/index.js +1 -0
- package/dist/esm/vaultcontracts/vaultcontracts.js +141 -0
- package/dist/esm/xcs/autochoice.js +364 -0
- package/dist/esm/xcs/bebop-agg.js +123 -0
- package/dist/esm/xcs/iface.js +10 -0
- package/dist/esm/xcs/index.js +5 -0
- package/dist/esm/xcs/lifi-agg.js +99 -0
- package/dist/esm/xcs/yieldyak-agg.js +109 -0
- package/dist/types/balances/ub-api.d.ts +14 -0
- package/dist/types/cosmos/index.d.ts +6 -0
- package/dist/types/data/chaindata.d.ts +20 -0
- package/dist/types/data/chainid.d.ts +31 -0
- package/dist/types/data/currency.d.ts +29 -0
- package/dist/types/data/index.d.ts +4 -0
- package/dist/types/data/utils.d.ts +10 -0
- package/dist/types/evmabi/erc20.abi.d.ts +264 -0
- package/dist/types/evmabi/index.d.ts +3 -0
- package/dist/types/evmabi/vault.abi.d.ts +785 -0
- package/dist/types/evmabi/yakaggregator.abi.d.ts +298 -0
- package/dist/types/fuelcontracts/ArcanaVault.d.ts +448 -0
- package/dist/types/fuelcontracts/ArcanaVaultFactory.d.ts +8 -0
- package/dist/types/fuelcontracts/common.d.ts +23 -0
- package/dist/types/fuelcontracts/index.d.ts +2 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/permitutils/index.d.ts +13 -0
- package/dist/types/proto/definition.d.ts +373 -0
- package/dist/types/proto/grpc.d.ts +75 -0
- package/dist/types/rff/fuel.d.ts +4 -0
- package/dist/types/rff/rff.d.ts +12 -0
- package/dist/types/types/binarytypes.d.ts +1 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/msgpack-axios.d.ts +1 -0
- package/dist/types/vaultcontracts/index.d.ts +22 -0
- package/dist/types/vaultcontracts/vaultcontracts.d.ts +8 -0
- package/dist/types/xcs/autochoice.d.ts +57 -0
- package/dist/types/xcs/bebop-agg.d.ts +104 -0
- package/dist/types/xcs/iface.d.ts +36 -0
- package/dist/types/xcs/index.d.ts +5 -0
- package/dist/types/xcs/lifi-agg.d.ts +35 -0
- package/dist/types/xcs/yieldyak-agg.d.ts +21 -0
- package/package.json +63 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.YieldYakAggregator = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const es_toolkit_1 = require("es-toolkit");
|
|
6
|
+
const iface_1 = require("./iface");
|
|
7
|
+
const data_1 = require("../data");
|
|
8
|
+
const definition_1 = require("../proto/definition");
|
|
9
|
+
const yakaggregator_abi_1 = require("../evmabi/yakaggregator.abi");
|
|
10
|
+
const YakAggregatorAddresses = new Map([
|
|
11
|
+
[(0, data_1.encodeChainID36)(definition_1.Universe.ETHEREUM, 42161), '0xb32C79a25291265eF240Eb32E9faBbc6DcEE3cE3'],
|
|
12
|
+
[(0, data_1.encodeChainID36)(definition_1.Universe.ETHEREUM, 10), '0xCd887F78c77b36B0b541E77AfD6F91C0253182A2'],
|
|
13
|
+
[(0, data_1.encodeChainID36)(definition_1.Universe.ETHEREUM, 43114), '0xC4729E56b831d74bBc18797e0e17A295fA77488c'],
|
|
14
|
+
].map(([chainID, addr]) => {
|
|
15
|
+
return [(0, viem_1.bytesToHex)(chainID), addr];
|
|
16
|
+
}));
|
|
17
|
+
class YieldYakAggregator {
|
|
18
|
+
clients = new Map();
|
|
19
|
+
constructor(clients) {
|
|
20
|
+
for (const client of clients) {
|
|
21
|
+
const chainIDHex = (0, viem_1.bytesToHex)(client.chainID.toBytes());
|
|
22
|
+
const aggAddr = YakAggregatorAddresses.get(chainIDHex);
|
|
23
|
+
if (aggAddr == null) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
this.clients.set(chainIDHex, {
|
|
27
|
+
chainID: client.chainID,
|
|
28
|
+
client: client.client,
|
|
29
|
+
aggregatorAddress: aggAddr
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async getQuotes(_requests) {
|
|
34
|
+
const requestsWithOriginalIndexes = _requests.map((r, rid) => {
|
|
35
|
+
return {
|
|
36
|
+
req: r,
|
|
37
|
+
idx: rid,
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
const responses = new Array(_requests.length).fill(null);
|
|
41
|
+
// it's so sad that JS doesn't have a proper binary data type
|
|
42
|
+
const groupedByChainID = (0, es_toolkit_1.groupBy)(requestsWithOriginalIndexes, r => (0, viem_1.bytesToHex)(r.req.chain.toBytes()));
|
|
43
|
+
await Promise.all(Array.from(Object.entries(groupedByChainID)).map(async ([chainIDHex, requests]) => {
|
|
44
|
+
const config = this.clients.get(chainIDHex);
|
|
45
|
+
if (config == null) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const reverseIndexes = [];
|
|
49
|
+
const mc3calls = [];
|
|
50
|
+
for (const req of requests) {
|
|
51
|
+
const inputTokenHex = (0, viem_1.bytesToHex)(req.req.inputToken.subarray(12));
|
|
52
|
+
const outputTokenHex = (0, viem_1.bytesToHex)(req.req.outputToken.subarray(12));
|
|
53
|
+
let args;
|
|
54
|
+
switch (req.req.type) {
|
|
55
|
+
case iface_1.QuoteType.EXACT_IN: {
|
|
56
|
+
args = [req.req.inputAmount, inputTokenHex, outputTokenHex, 0, 1];
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case iface_1.QuoteType.EXACT_OUT: {
|
|
60
|
+
args = [req.req.outputAmount, outputTokenHex, inputTokenHex, 0, 1];
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const indexes = [];
|
|
65
|
+
for (let steps = 1; steps !== 5; steps++) {
|
|
66
|
+
const clonedArgs = (0, es_toolkit_1.clone)(args);
|
|
67
|
+
clonedArgs[3] = steps;
|
|
68
|
+
const idx = mc3calls.push({
|
|
69
|
+
address: config.aggregatorAddress,
|
|
70
|
+
abi: yakaggregator_abi_1.YakAggregatorABI,
|
|
71
|
+
functionName: 'findBestPathWithGas',
|
|
72
|
+
args: clonedArgs
|
|
73
|
+
});
|
|
74
|
+
indexes.push(idx - 1);
|
|
75
|
+
}
|
|
76
|
+
reverseIndexes.push([req, indexes]);
|
|
77
|
+
}
|
|
78
|
+
const _final = await config.client.multicall({
|
|
79
|
+
allowFailure: false,
|
|
80
|
+
contracts: mc3calls,
|
|
81
|
+
multicallAddress: '0xcA11bde05977b3631167028862bE2a173976CA11'
|
|
82
|
+
});
|
|
83
|
+
for (const [req, indexes] of reverseIndexes) {
|
|
84
|
+
const collected = [];
|
|
85
|
+
for (const index of indexes) {
|
|
86
|
+
collected.push(_final[index]);
|
|
87
|
+
}
|
|
88
|
+
// @ts-expect-error the typing in maxBy is wrong, it can work with anything that is comparable
|
|
89
|
+
const optimalChoice = (0, es_toolkit_1.maxBy)(collected, route => (0, es_toolkit_1.last)(route.amounts));
|
|
90
|
+
if (optimalChoice.path.length === 0) {
|
|
91
|
+
responses[req.idx] = null;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// we have to reverse everything
|
|
95
|
+
if (req.req.type === iface_1.QuoteType.EXACT_OUT) {
|
|
96
|
+
optimalChoice.adapters.reverse();
|
|
97
|
+
optimalChoice.amounts.reverse();
|
|
98
|
+
optimalChoice.path.reverse();
|
|
99
|
+
}
|
|
100
|
+
const output = (0, es_toolkit_1.last)(optimalChoice.amounts);
|
|
101
|
+
responses[req.idx] = {
|
|
102
|
+
type: req.req.type,
|
|
103
|
+
inputAmount: optimalChoice.amounts[0],
|
|
104
|
+
outputAmountLikely: output,
|
|
105
|
+
outputAmountMinimum: output,
|
|
106
|
+
offer: optimalChoice
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
return responses;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.YieldYakAggregator = YieldYakAggregator;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Decimal from "decimal.js";
|
|
2
|
+
import { Universe } from "../proto/definition";
|
|
3
|
+
import { msgpackableAxios } from "../types";
|
|
4
|
+
import { OmniversalChainID } from "../data";
|
|
5
|
+
import { bytesToHex } from "viem";
|
|
6
|
+
export async function getBalances(vscURL, universe, address) {
|
|
7
|
+
const resp = await msgpackableAxios({
|
|
8
|
+
baseURL: vscURL,
|
|
9
|
+
url: `/api/v1/get-balance/${Universe[universe]}/${bytesToHex(address)}`,
|
|
10
|
+
});
|
|
11
|
+
const { data } = resp;
|
|
12
|
+
return data.balances.map(bal => ({
|
|
13
|
+
chainID: new OmniversalChainID(bal.universe, bal.chain_id),
|
|
14
|
+
totalValue: new Decimal(bal.total_usd),
|
|
15
|
+
currencywise: bal.currencies.map(cur => ({
|
|
16
|
+
tokenAddress: cur.token_address,
|
|
17
|
+
amount: new Decimal(cur.balance),
|
|
18
|
+
value: new Decimal(cur.value)
|
|
19
|
+
}))
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Registry as CosmosRegistry, DirectSecp256k1Wallet, } from "@cosmjs/proto-signing";
|
|
2
|
+
import { defaultRegistryTypes, SigningStargateClient, } from "@cosmjs/stargate";
|
|
3
|
+
import { hexToBytes } from "viem";
|
|
4
|
+
import { MsgCreateRequestForFunds, MsgCreateRequestForFundsResponse, MsgCreateSolverData, MsgCreateSolverDataResponse, MsgDoubleCheckTx, MsgRefundReq, MsgRefundReqResponse, MsgUpdateSolverData, } from "../proto/definition";
|
|
5
|
+
export const Registry = new CosmosRegistry(defaultRegistryTypes);
|
|
6
|
+
{
|
|
7
|
+
Registry.register("/xarchain.chainabstraction.MsgCreateSolverData", MsgCreateSolverData);
|
|
8
|
+
Registry.register("/xarchain.chainabstraction.MsgCreateSolverDataResponse", MsgCreateSolverDataResponse);
|
|
9
|
+
Registry.register("/xarchain.chainabstraction.MsgUpdateSolverData", MsgUpdateSolverData);
|
|
10
|
+
Registry.register("/xarchain.chainabstraction.MsgUpdateSolverDataResponse", MsgCreateSolverDataResponse);
|
|
11
|
+
Registry.register("/xarchain.chainabstraction.MsgCreateRequestForFunds", MsgCreateRequestForFunds);
|
|
12
|
+
Registry.register("/xarchain.chainabstraction.MsgCreateRequestForFundsResponse", MsgCreateRequestForFundsResponse);
|
|
13
|
+
Registry.register("/xarchain.chainabstraction.MsgRefundReq", MsgRefundReq);
|
|
14
|
+
Registry.register("/xarchain.chainabstraction.MsgRefundReqResponse", MsgRefundReqResponse);
|
|
15
|
+
Registry.register("/xarchain.chainabstraction.MsgDoubleCheckTx", MsgDoubleCheckTx);
|
|
16
|
+
}
|
|
17
|
+
export function createCosmosWallet(privateKey) {
|
|
18
|
+
const pkBytes = typeof privateKey === "string" ? hexToBytes(privateKey) : privateKey;
|
|
19
|
+
return DirectSecp256k1Wallet.fromKey(pkBytes, "arcana");
|
|
20
|
+
}
|
|
21
|
+
export function createCosmosClient(signer, endpoint, options) {
|
|
22
|
+
return SigningStargateClient.connectWithSigner(endpoint, signer, {
|
|
23
|
+
registry: Registry,
|
|
24
|
+
...options,
|
|
25
|
+
});
|
|
26
|
+
}
|