@ickb/sdk 1000.0.26 → 1000.0.40
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/index.d.ts +15 -17
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +76 -131
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.d.ts +15 -17
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +77 -132
- package/dist/esm/index.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +111 -191
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { ccc, type Epoch } from "@ckb-ccc/core";
|
|
2
2
|
import { SmartTransaction, type ScriptDeps, type UdtCell, type CapacityCell } from "@ickb/utils";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { IckbUdtManager, LogicManager, OwnedOwnerManager, type IckbDepositCell, type ReceiptCell, type WithdrawalGroups } from "@ickb/core";
|
|
4
|
+
import { DaoManager, type DaoCell } from "@ickb/dao";
|
|
5
|
+
import { OrderManager, type OrderCell, type OrderGroup, type RatioLike } from "@ickb/order";
|
|
5
6
|
export declare class IckbController {
|
|
6
|
-
|
|
7
|
-
logicManager: LogicManager;
|
|
8
|
-
ownedOwnerManager: OwnedOwnerManager;
|
|
9
|
-
orderManager: OrderManager;
|
|
10
|
-
|
|
7
|
+
readonly ickbUdtManager: IckbUdtManager;
|
|
8
|
+
readonly logicManager: LogicManager;
|
|
9
|
+
readonly ownedOwnerManager: OwnedOwnerManager;
|
|
10
|
+
readonly orderManager: OrderManager;
|
|
11
|
+
readonly daoManager: DaoManager;
|
|
12
|
+
constructor(ickbUdtManager: IckbUdtManager, logicManager: LogicManager, ownedOwnerManager: OwnedOwnerManager, orderManager: OrderManager, daoManager: DaoManager);
|
|
11
13
|
static fromDeps({ xudt, dao, ickbLogic, ownedOwner, order, }: {
|
|
12
14
|
xudt: ScriptDeps;
|
|
13
15
|
dao: ScriptDeps;
|
|
@@ -15,15 +17,9 @@ export declare class IckbController {
|
|
|
15
17
|
ownedOwner: ScriptDeps;
|
|
16
18
|
order: ScriptDeps;
|
|
17
19
|
}): IckbController;
|
|
18
|
-
previewConversion(isCkb2Udt: boolean, amount: ccc.FixedPoint,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
tip: ccc.ClientBlockHeader;
|
|
22
|
-
}) & {
|
|
23
|
-
fee?: {
|
|
24
|
-
numerator: ccc.Num;
|
|
25
|
-
denominator: ccc.Num;
|
|
26
|
-
};
|
|
20
|
+
previewConversion(isCkb2Udt: boolean, amount: ccc.FixedPoint, rate: RatioLike | ccc.ClientBlockHeader, fee?: {
|
|
21
|
+
numerator: ccc.Num;
|
|
22
|
+
denominator: ccc.Num;
|
|
27
23
|
}): ccc.FixedPoint;
|
|
28
24
|
convert(options: {
|
|
29
25
|
signer: ccc.Signer;
|
|
@@ -39,7 +35,7 @@ export declare class IckbController {
|
|
|
39
35
|
};
|
|
40
36
|
}): Promise<Conversion | undefined>;
|
|
41
37
|
private attemptConversion;
|
|
42
|
-
getL1State(client: ccc.Client, locks: ccc.
|
|
38
|
+
getL1State(client: ccc.Client, locks: ccc.Script[], options?: {
|
|
43
39
|
minLockUp?: ccc.Epoch;
|
|
44
40
|
maxLockUp?: ccc.Epoch;
|
|
45
41
|
}): Promise<{
|
|
@@ -72,6 +68,8 @@ export interface UserCells {
|
|
|
72
68
|
receipts: ReceiptCell[];
|
|
73
69
|
withdrawalGroups: WithdrawalGroups[];
|
|
74
70
|
orders: OrderGroup[];
|
|
71
|
+
deposits: DaoCell[];
|
|
72
|
+
withdrawalRequests: DaoCell[];
|
|
75
73
|
}
|
|
76
74
|
export interface Conversion {
|
|
77
75
|
tx: SmartTransaction;
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAIL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAIL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,YAAY,EAIlB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAEL,YAAY,EAEZ,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAc;aAEP,cAAc,EAAE,cAAc;aAC9B,YAAY,EAAE,YAAY;aAC1B,iBAAiB,EAAE,iBAAiB;aACpC,YAAY,EAAE,YAAY;aAC1B,UAAU,EAAE,UAAU;gBAJtB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU;IAGxC,MAAM,CAAC,QAAQ,CAAC,EACd,IAAI,EACJ,GAAG,EACH,SAAS,EACT,UAAU,EACV,KAAK,GACN,EAAE;QACD,IAAI,EAAE,UAAU,CAAC;QACjB,GAAG,EAAE,UAAU,CAAC;QAChB,SAAS,EAAE,UAAU,CAAC;QACtB,UAAU,EAAE,UAAU,CAAC;QACvB,KAAK,EAAE,UAAU,CAAC;KACnB,GAAG,cAAc;IA0BlB,iBAAiB,CACf,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,GAAG,CAAC,UAAU,EACtB,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,iBAAiB,EACvC,GAAG,CAAC,EAAE;QACJ,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC;QACnB,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;KACtB,GACA,GAAG,CAAC,UAAU;IAYX,OAAO,CAAC,OAAO,EAAE;QACrB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;QACvB,SAAS,EAAE,SAAS,CAAC;QACrB,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC;QAC7B,MAAM,EAAE,WAAW,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,CAAC,EAAE;YACJ,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC;YACnB,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;SACtB,CAAC;KACH,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;YAuBrB,iBAAiB;IAqGzB,UAAU,CACd,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,EACnB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;QACtB,SAAS,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;KACvB,GACA,OAAO,CAAC;QACT,MAAM,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,SAAS,CAAC;KACjB,CAAC;IAyEF,MAAM,CAAC,UAAU,CAAC,EAChB,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,MAAM,GACP,EAAE,SAAS,GAAG,OAAO;CAuBvB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC;IACpB,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC,iBAAiB,CAAC;IAC3B,aAAa,EAAE;QACb,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;QAClB,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC;KACnB,CAAC;IACF,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAC9B,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC;IAC9B,QAAQ,EAAE,CAAC,eAAe,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAC1D,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,kBAAkB,EAAE,OAAO,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,gBAAgB,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;CACjB"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -7,11 +7,12 @@ const core_2 = require("@ickb/core");
|
|
|
7
7
|
const dao_1 = require("@ickb/dao");
|
|
8
8
|
const order_1 = require("@ickb/order");
|
|
9
9
|
class IckbController {
|
|
10
|
-
constructor(
|
|
11
|
-
this.
|
|
10
|
+
constructor(ickbUdtManager, logicManager, ownedOwnerManager, orderManager, daoManager) {
|
|
11
|
+
this.ickbUdtManager = ickbUdtManager;
|
|
12
12
|
this.logicManager = logicManager;
|
|
13
13
|
this.ownedOwnerManager = ownedOwnerManager;
|
|
14
14
|
this.orderManager = orderManager;
|
|
15
|
+
this.daoManager = daoManager;
|
|
15
16
|
}
|
|
16
17
|
static fromDeps({ xudt, dao, ickbLogic, ownedOwner, order, }) {
|
|
17
18
|
const daoManager = dao_1.DaoManager.fromDeps(dao);
|
|
@@ -20,17 +21,13 @@ class IckbController {
|
|
|
20
21
|
script: new core_1.ccc.Script(codeHash, hashType, [ickbLogic.script.hash(), "00000080"].join("")),
|
|
21
22
|
cellDeps,
|
|
22
23
|
};
|
|
23
|
-
const
|
|
24
|
-
return new IckbController(
|
|
24
|
+
const ickbUdtManager = core_2.IckbUdtManager.fromDeps(ickbXudt, daoManager);
|
|
25
|
+
return new IckbController(ickbUdtManager, core_2.LogicManager.fromDeps(ickbLogic, daoManager, ickbUdtManager), core_2.OwnedOwnerManager.fromDeps(ownedOwner, daoManager, ickbUdtManager), order_1.OrderManager.fromDeps(order, ickbUdtManager), daoManager);
|
|
25
26
|
}
|
|
26
|
-
previewConversion(isCkb2Udt, amount,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
? (amount * ckbScale) / udtScale
|
|
31
|
-
: (amount * udtScale) / ckbScale;
|
|
32
|
-
if (options.fee) {
|
|
33
|
-
const { numerator, denominator } = options.fee;
|
|
27
|
+
previewConversion(isCkb2Udt, amount, rate, fee) {
|
|
28
|
+
let convertedAmount = (0, core_2.convert)(isCkb2Udt, amount, rate);
|
|
29
|
+
if (fee) {
|
|
30
|
+
const { numerator, denominator } = fee;
|
|
34
31
|
convertedAmount -= (convertedAmount * numerator) / denominator;
|
|
35
32
|
}
|
|
36
33
|
return convertedAmount;
|
|
@@ -51,96 +48,89 @@ class IckbController {
|
|
|
51
48
|
return (cache[n] =
|
|
52
49
|
cache[n] ?? this.attemptConversion(n, info, address, options));
|
|
53
50
|
};
|
|
54
|
-
return attempt(await asyncBinarySearch(N, async (n) => (await attempt(n)) !== undefined));
|
|
51
|
+
return attempt(await (0, utils_1.asyncBinarySearch)(N, async (n) => (await attempt(n)) !== undefined));
|
|
55
52
|
}
|
|
56
53
|
async attemptConversion(n, info, address, { signer, isCkb2Udt, amount, userCells, system: { feeRate, tip, deposits, ckbDepositCap, exchangeRatio }, }) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
try {
|
|
55
|
+
const tx = utils_1.SmartTransaction.default();
|
|
56
|
+
const maturities = [];
|
|
57
|
+
let ckbFee = core_1.ccc.Zero;
|
|
58
|
+
if (n > 0) {
|
|
59
|
+
if (isCkb2Udt) {
|
|
60
|
+
amount -= ckbDepositCap * BigInt(n);
|
|
61
|
+
if (amount < 0n) {
|
|
62
|
+
// Too many Deposits respectfully to the amount
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
this.logicManager.deposit(tx, n, ckbDepositCap, address.script);
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
else {
|
|
68
|
+
const myDeposits = deposits.slice(0, n);
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
70
|
+
amount -= myDeposits.slice(-1)[0].udtCumulative;
|
|
71
|
+
if (amount < 0n) {
|
|
72
|
+
// Too many Withdrawal Requests respectfully to the amount
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
this.ownedOwnerManager.requestWithdrawal(tx, myDeposits, address.script);
|
|
76
|
+
maturities.push(...myDeposits.map((d) => d.maturity));
|
|
76
77
|
}
|
|
77
|
-
this.ownedOwnerManager.requestWithdrawal(tx, myDeposits, address.script);
|
|
78
|
-
maturities.push(...myDeposits.map((d) => d.maturity));
|
|
79
78
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (10n * (feeRate - ckbFee) > ckbFee) {
|
|
95
|
-
return undefined;
|
|
96
|
-
}
|
|
97
|
-
const { receipts, withdrawalGroups, orders, udts, capacities } = userCells;
|
|
98
|
-
this.logicManager.completeDeposit(tx, receipts);
|
|
99
|
-
this.ownedOwnerManager.withdraw(tx, withdrawalGroups); //TODO: ignore not isReady cells in method!!!
|
|
100
|
-
for (const order of orders) {
|
|
101
|
-
this.orderManager.melt(tx, order); //TODO: allow melting multiple groups and give choices!!!
|
|
102
|
-
}
|
|
103
|
-
// const outputLen = tx.inputs.length;??
|
|
104
|
-
// Give choice that let user add this cells the way he prefer!! (Either here or at completeFeeBy)
|
|
105
|
-
this.ickbManager.addUdts(tx, udts);
|
|
106
|
-
utils_1.CapacityManager.addCapacities(tx, capacities);
|
|
107
|
-
const outputLen = tx.outputs.length;
|
|
108
|
-
try {
|
|
109
|
-
await tx.completeFeeBy(signer, feeRate);
|
|
110
|
-
// TODO: check in SmartTransaction for 64 output cells in DAO transactions
|
|
111
|
-
if (tx.outputs.length > 64) {
|
|
79
|
+
if (amount > 0n) {
|
|
80
|
+
this.orderManager.mint(tx, address.script, info, isCkb2Udt ? amount : core_1.ccc.Zero, isCkb2Udt ? core_1.ccc.Zero : amount);
|
|
81
|
+
const ratio = isCkb2Udt ? info.ckbToUdt : info.udtToCkb;
|
|
82
|
+
const convertedAmount = (0, core_2.convert)(isCkb2Udt, amount, ratio);
|
|
83
|
+
ckbFee = isCkb2Udt
|
|
84
|
+
? amount - (0, core_2.convert)(false, convertedAmount, exchangeRatio)
|
|
85
|
+
: (0, core_2.convert)(true, amount, exchangeRatio) - convertedAmount;
|
|
86
|
+
maturities.push(
|
|
87
|
+
// TODO: use real world data from deposits, open orders and bot balances
|
|
88
|
+
orderMaturityEstimate(isCkb2Udt, amount, tip));
|
|
89
|
+
}
|
|
90
|
+
// Check that order provides enough fee to the bot for being matched
|
|
91
|
+
// feeRate is a good approximation of the bot tx size matching the order
|
|
92
|
+
if (10n * (feeRate - ckbFee) > ckbFee) {
|
|
112
93
|
return undefined;
|
|
113
94
|
}
|
|
95
|
+
const { receipts, withdrawalGroups, orders, udts, capacities } = userCells;
|
|
96
|
+
this.logicManager.completeDeposit(tx, receipts);
|
|
97
|
+
this.ownedOwnerManager.withdraw(tx, withdrawalGroups, {
|
|
98
|
+
isReadyOnly: true,
|
|
99
|
+
});
|
|
100
|
+
this.orderManager.melt(tx, orders);
|
|
101
|
+
this.ickbUdtManager.addUdts(tx, udts);
|
|
102
|
+
utils_1.CapacityManager.addCapacities(tx, capacities);
|
|
103
|
+
// Throw an error if inputs do not cover for outputs
|
|
104
|
+
await new utils_1.RestrictedTransaction(tx).completeFeeBy(signer, feeRate);
|
|
105
|
+
// Find the maturity most distant in the future
|
|
106
|
+
const maturity = maturities.reduce((a, b) => (0, utils_1.epochCompare)(a, b) === -1 ? b : a);
|
|
107
|
+
return {
|
|
108
|
+
tx,
|
|
109
|
+
ckbFee,
|
|
110
|
+
maturity,
|
|
111
|
+
};
|
|
114
112
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
115
113
|
}
|
|
116
114
|
catch (_) {
|
|
117
115
|
return undefined;
|
|
118
116
|
}
|
|
119
|
-
// Revert any change cells
|
|
120
|
-
tx.outputs = tx.outputs.slice(outputLen);
|
|
121
|
-
tx = utils_1.SmartTransaction.from(tx);
|
|
122
|
-
const maturity = maturities.reduce((a, b) => (0, utils_1.epochCompare)(a, b) === -1 ? b : a);
|
|
123
|
-
return {
|
|
124
|
-
tx,
|
|
125
|
-
ckbFee,
|
|
126
|
-
maturity,
|
|
127
|
-
};
|
|
128
117
|
}
|
|
129
118
|
// TODO: Allow filtering which cells are fetched
|
|
130
119
|
async getL1State(client, locks, options) {
|
|
131
120
|
const tip = await client.getTipHeader();
|
|
132
121
|
const onChain = true;
|
|
133
122
|
const opts = { ...options, tip, onChain };
|
|
134
|
-
const [feeRate, depositPool, capacities, udts, receipts, withdrawalGroups, orders,] = await Promise.all([
|
|
135
|
-
// TODO: fetch user NervosDAO cells
|
|
136
|
-
// TODO: fetch bot cells for estimating timings
|
|
123
|
+
const [feeRate, depositPool, capacities, udts, receipts, withdrawalGroups, orders, deposits, withdrawalRequests,] = await Promise.all([
|
|
137
124
|
client.getFeeRate(),
|
|
138
|
-
(0, utils_1.
|
|
139
|
-
(0, utils_1.
|
|
140
|
-
(0, utils_1.
|
|
141
|
-
(0, utils_1.
|
|
142
|
-
(0, utils_1.
|
|
143
|
-
this.orderManager.findOrders(client),
|
|
125
|
+
(0, utils_1.collect)(this.logicManager.findDeposits(client, opts)),
|
|
126
|
+
(0, utils_1.collect)(utils_1.CapacityManager.findCapacities(client, locks, opts)),
|
|
127
|
+
(0, utils_1.collect)(this.ickbUdtManager.findUdts(client, locks, opts)),
|
|
128
|
+
(0, utils_1.collect)(this.logicManager.findReceipts(client, locks, opts)),
|
|
129
|
+
(0, utils_1.collect)(this.ownedOwnerManager.findWithdrawalGroups(client, locks, opts)),
|
|
130
|
+
(0, utils_1.collect)(this.orderManager.findOrders(client)),
|
|
131
|
+
(0, utils_1.collect)(this.daoManager.findDeposits(client, locks, opts)),
|
|
132
|
+
(0, utils_1.collect)(this.daoManager.findWithdrawalRequests(client, locks, opts)),
|
|
133
|
+
// TODO: fetch bot cells for estimating timings
|
|
144
134
|
]);
|
|
145
135
|
// Sort depositPool by maturity
|
|
146
136
|
depositPool.sort((a, b) => (0, utils_1.epochCompare)(a.maturity, b.maturity));
|
|
@@ -162,7 +152,7 @@ class IckbController {
|
|
|
162
152
|
}
|
|
163
153
|
}
|
|
164
154
|
const exchangeRatio = (0, core_2.ickbExchangeRatio)(tip);
|
|
165
|
-
const ckbDepositCap = (0, core_2.convert)(false, core_2.ICKB_DEPOSIT_CAP, exchangeRatio);
|
|
155
|
+
const ckbDepositCap = (0, core_2.convert)(false, core_2.ICKB_DEPOSIT_CAP, exchangeRatio);
|
|
166
156
|
return {
|
|
167
157
|
system: {
|
|
168
158
|
feeRate,
|
|
@@ -179,6 +169,8 @@ class IckbController {
|
|
|
179
169
|
receipts,
|
|
180
170
|
withdrawalGroups,
|
|
181
171
|
orders: userOrders,
|
|
172
|
+
deposits,
|
|
173
|
+
withdrawalRequests,
|
|
182
174
|
},
|
|
183
175
|
};
|
|
184
176
|
}
|
|
@@ -218,51 +210,4 @@ function orderMaturityEstimate(isCkb2Udt, amount, tip) {
|
|
|
218
210
|
4n * 60n,
|
|
219
211
|
]);
|
|
220
212
|
}
|
|
221
|
-
class OfflineTransaction extends utils_1.SmartTransaction {
|
|
222
|
-
clone() {
|
|
223
|
-
const result = super.clone();
|
|
224
|
-
// Keep inputs metadata when cloning, so it will not refetch that data
|
|
225
|
-
result.inputs = [...this.inputs];
|
|
226
|
-
return new OfflineTransaction(result);
|
|
227
|
-
}
|
|
228
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
229
|
-
async completeInputs(_0, _1, _2, init) {
|
|
230
|
-
// Disable completeInputs, so it will not fetch additional cells
|
|
231
|
-
return {
|
|
232
|
-
addedCount: 0,
|
|
233
|
-
accumulated: init,
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
// Reimplement the rest of transformations
|
|
237
|
-
constructor(tx) {
|
|
238
|
-
super(tx.version, tx.cellDeps, tx.headerDeps, tx.inputs, tx.outputs, tx.outputsData, tx.witnesses, tx.udtHandlers, tx.headers);
|
|
239
|
-
}
|
|
240
|
-
static default() {
|
|
241
|
-
return new OfflineTransaction(super.default());
|
|
242
|
-
}
|
|
243
|
-
static fromLumosSkeleton(skeleton) {
|
|
244
|
-
return new OfflineTransaction(super.fromLumosSkeleton(skeleton));
|
|
245
|
-
}
|
|
246
|
-
static from(txLike) {
|
|
247
|
-
return new OfflineTransaction(utils_1.SmartTransaction.from(txLike));
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
// TODO: utils.binarySearch is sync, need an async one for await the result!!!!!!!!!!!!
|
|
251
|
-
async function asyncBinarySearch(n, f) {
|
|
252
|
-
// Define f(-1) == false and f(n) == true.
|
|
253
|
-
// Invariant: f(i-1) == false, f(j) == true.
|
|
254
|
-
let [i, j] = [0, n];
|
|
255
|
-
while (i < j) {
|
|
256
|
-
const h = Math.trunc((i + j) / 2);
|
|
257
|
-
// i ≤ h < j
|
|
258
|
-
if (!(await f(h))) {
|
|
259
|
-
i = h + 1; // preserves f(i-1) == false
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
j = h; // preserves f(j) == true
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
// i == j, f(i-1) == false, and f(j) (= f(i)) == true => answer is i.
|
|
266
|
-
return i;
|
|
267
|
-
}
|
|
268
213
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,wCAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { ccc, type Epoch } from "@ckb-ccc/core";
|
|
2
2
|
import { SmartTransaction, type ScriptDeps, type UdtCell, type CapacityCell } from "@ickb/utils";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { IckbUdtManager, LogicManager, OwnedOwnerManager, type IckbDepositCell, type ReceiptCell, type WithdrawalGroups } from "@ickb/core";
|
|
4
|
+
import { DaoManager, type DaoCell } from "@ickb/dao";
|
|
5
|
+
import { OrderManager, type OrderCell, type OrderGroup, type RatioLike } from "@ickb/order";
|
|
5
6
|
export declare class IckbController {
|
|
6
|
-
|
|
7
|
-
logicManager: LogicManager;
|
|
8
|
-
ownedOwnerManager: OwnedOwnerManager;
|
|
9
|
-
orderManager: OrderManager;
|
|
10
|
-
|
|
7
|
+
readonly ickbUdtManager: IckbUdtManager;
|
|
8
|
+
readonly logicManager: LogicManager;
|
|
9
|
+
readonly ownedOwnerManager: OwnedOwnerManager;
|
|
10
|
+
readonly orderManager: OrderManager;
|
|
11
|
+
readonly daoManager: DaoManager;
|
|
12
|
+
constructor(ickbUdtManager: IckbUdtManager, logicManager: LogicManager, ownedOwnerManager: OwnedOwnerManager, orderManager: OrderManager, daoManager: DaoManager);
|
|
11
13
|
static fromDeps({ xudt, dao, ickbLogic, ownedOwner, order, }: {
|
|
12
14
|
xudt: ScriptDeps;
|
|
13
15
|
dao: ScriptDeps;
|
|
@@ -15,15 +17,9 @@ export declare class IckbController {
|
|
|
15
17
|
ownedOwner: ScriptDeps;
|
|
16
18
|
order: ScriptDeps;
|
|
17
19
|
}): IckbController;
|
|
18
|
-
previewConversion(isCkb2Udt: boolean, amount: ccc.FixedPoint,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
tip: ccc.ClientBlockHeader;
|
|
22
|
-
}) & {
|
|
23
|
-
fee?: {
|
|
24
|
-
numerator: ccc.Num;
|
|
25
|
-
denominator: ccc.Num;
|
|
26
|
-
};
|
|
20
|
+
previewConversion(isCkb2Udt: boolean, amount: ccc.FixedPoint, rate: RatioLike | ccc.ClientBlockHeader, fee?: {
|
|
21
|
+
numerator: ccc.Num;
|
|
22
|
+
denominator: ccc.Num;
|
|
27
23
|
}): ccc.FixedPoint;
|
|
28
24
|
convert(options: {
|
|
29
25
|
signer: ccc.Signer;
|
|
@@ -39,7 +35,7 @@ export declare class IckbController {
|
|
|
39
35
|
};
|
|
40
36
|
}): Promise<Conversion | undefined>;
|
|
41
37
|
private attemptConversion;
|
|
42
|
-
getL1State(client: ccc.Client, locks: ccc.
|
|
38
|
+
getL1State(client: ccc.Client, locks: ccc.Script[], options?: {
|
|
43
39
|
minLockUp?: ccc.Epoch;
|
|
44
40
|
maxLockUp?: ccc.Epoch;
|
|
45
41
|
}): Promise<{
|
|
@@ -72,6 +68,8 @@ export interface UserCells {
|
|
|
72
68
|
receipts: ReceiptCell[];
|
|
73
69
|
withdrawalGroups: WithdrawalGroups[];
|
|
74
70
|
orders: OrderGroup[];
|
|
71
|
+
deposits: DaoCell[];
|
|
72
|
+
withdrawalRequests: DaoCell[];
|
|
75
73
|
}
|
|
76
74
|
export interface Conversion {
|
|
77
75
|
tx: SmartTransaction;
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAIL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { ccc } from "@ckb-ccc/core";
|
|
2
|
-
import {
|
|
3
|
-
import { convert, ICKB_DEPOSIT_CAP, ickbExchangeRatio,
|
|
2
|
+
import { collect, epochCompare, CapacityManager, SmartTransaction, epochAdd, asyncBinarySearch, RestrictedTransaction, } from "@ickb/utils";
|
|
3
|
+
import { convert, ICKB_DEPOSIT_CAP, ickbExchangeRatio, IckbUdtManager, LogicManager, OwnedOwnerManager, } from "@ickb/core";
|
|
4
4
|
import { DaoManager } from "@ickb/dao";
|
|
5
5
|
import { Info, OrderManager, Ratio, } from "@ickb/order";
|
|
6
6
|
export class IckbController {
|
|
7
|
-
constructor(
|
|
8
|
-
this.
|
|
7
|
+
constructor(ickbUdtManager, logicManager, ownedOwnerManager, orderManager, daoManager) {
|
|
8
|
+
this.ickbUdtManager = ickbUdtManager;
|
|
9
9
|
this.logicManager = logicManager;
|
|
10
10
|
this.ownedOwnerManager = ownedOwnerManager;
|
|
11
11
|
this.orderManager = orderManager;
|
|
12
|
+
this.daoManager = daoManager;
|
|
12
13
|
}
|
|
13
14
|
static fromDeps({ xudt, dao, ickbLogic, ownedOwner, order, }) {
|
|
14
15
|
const daoManager = DaoManager.fromDeps(dao);
|
|
@@ -17,17 +18,13 @@ export class IckbController {
|
|
|
17
18
|
script: new ccc.Script(codeHash, hashType, [ickbLogic.script.hash(), "00000080"].join("")),
|
|
18
19
|
cellDeps,
|
|
19
20
|
};
|
|
20
|
-
const
|
|
21
|
-
return new IckbController(
|
|
21
|
+
const ickbUdtManager = IckbUdtManager.fromDeps(ickbXudt, daoManager);
|
|
22
|
+
return new IckbController(ickbUdtManager, LogicManager.fromDeps(ickbLogic, daoManager, ickbUdtManager), OwnedOwnerManager.fromDeps(ownedOwner, daoManager, ickbUdtManager), OrderManager.fromDeps(order, ickbUdtManager), daoManager);
|
|
22
23
|
}
|
|
23
|
-
previewConversion(isCkb2Udt, amount,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
? (amount * ckbScale) / udtScale
|
|
28
|
-
: (amount * udtScale) / ckbScale;
|
|
29
|
-
if (options.fee) {
|
|
30
|
-
const { numerator, denominator } = options.fee;
|
|
24
|
+
previewConversion(isCkb2Udt, amount, rate, fee) {
|
|
25
|
+
let convertedAmount = convert(isCkb2Udt, amount, rate);
|
|
26
|
+
if (fee) {
|
|
27
|
+
const { numerator, denominator } = fee;
|
|
31
28
|
convertedAmount -= (convertedAmount * numerator) / denominator;
|
|
32
29
|
}
|
|
33
30
|
return convertedAmount;
|
|
@@ -51,93 +48,86 @@ export class IckbController {
|
|
|
51
48
|
return attempt(await asyncBinarySearch(N, async (n) => (await attempt(n)) !== undefined));
|
|
52
49
|
}
|
|
53
50
|
async attemptConversion(n, info, address, { signer, isCkb2Udt, amount, userCells, system: { feeRate, tip, deposits, ckbDepositCap, exchangeRatio }, }) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
51
|
+
try {
|
|
52
|
+
const tx = SmartTransaction.default();
|
|
53
|
+
const maturities = [];
|
|
54
|
+
let ckbFee = ccc.Zero;
|
|
55
|
+
if (n > 0) {
|
|
56
|
+
if (isCkb2Udt) {
|
|
57
|
+
amount -= ckbDepositCap * BigInt(n);
|
|
58
|
+
if (amount < 0n) {
|
|
59
|
+
// Too many Deposits respectfully to the amount
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
this.logicManager.deposit(tx, n, ckbDepositCap, address.script);
|
|
63
63
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
64
|
+
else {
|
|
65
|
+
const myDeposits = deposits.slice(0, n);
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
67
|
+
amount -= myDeposits.slice(-1)[0].udtCumulative;
|
|
68
|
+
if (amount < 0n) {
|
|
69
|
+
// Too many Withdrawal Requests respectfully to the amount
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
this.ownedOwnerManager.requestWithdrawal(tx, myDeposits, address.script);
|
|
73
|
+
maturities.push(...myDeposits.map((d) => d.maturity));
|
|
73
74
|
}
|
|
74
|
-
this.ownedOwnerManager.requestWithdrawal(tx, myDeposits, address.script);
|
|
75
|
-
maturities.push(...myDeposits.map((d) => d.maturity));
|
|
76
75
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (10n * (feeRate - ckbFee) > ckbFee) {
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
const { receipts, withdrawalGroups, orders, udts, capacities } = userCells;
|
|
95
|
-
this.logicManager.completeDeposit(tx, receipts);
|
|
96
|
-
this.ownedOwnerManager.withdraw(tx, withdrawalGroups); //TODO: ignore not isReady cells in method!!!
|
|
97
|
-
for (const order of orders) {
|
|
98
|
-
this.orderManager.melt(tx, order); //TODO: allow melting multiple groups and give choices!!!
|
|
99
|
-
}
|
|
100
|
-
// const outputLen = tx.inputs.length;??
|
|
101
|
-
// Give choice that let user add this cells the way he prefer!! (Either here or at completeFeeBy)
|
|
102
|
-
this.ickbManager.addUdts(tx, udts);
|
|
103
|
-
CapacityManager.addCapacities(tx, capacities);
|
|
104
|
-
const outputLen = tx.outputs.length;
|
|
105
|
-
try {
|
|
106
|
-
await tx.completeFeeBy(signer, feeRate);
|
|
107
|
-
// TODO: check in SmartTransaction for 64 output cells in DAO transactions
|
|
108
|
-
if (tx.outputs.length > 64) {
|
|
76
|
+
if (amount > 0n) {
|
|
77
|
+
this.orderManager.mint(tx, address.script, info, isCkb2Udt ? amount : ccc.Zero, isCkb2Udt ? ccc.Zero : amount);
|
|
78
|
+
const ratio = isCkb2Udt ? info.ckbToUdt : info.udtToCkb;
|
|
79
|
+
const convertedAmount = convert(isCkb2Udt, amount, ratio);
|
|
80
|
+
ckbFee = isCkb2Udt
|
|
81
|
+
? amount - convert(false, convertedAmount, exchangeRatio)
|
|
82
|
+
: convert(true, amount, exchangeRatio) - convertedAmount;
|
|
83
|
+
maturities.push(
|
|
84
|
+
// TODO: use real world data from deposits, open orders and bot balances
|
|
85
|
+
orderMaturityEstimate(isCkb2Udt, amount, tip));
|
|
86
|
+
}
|
|
87
|
+
// Check that order provides enough fee to the bot for being matched
|
|
88
|
+
// feeRate is a good approximation of the bot tx size matching the order
|
|
89
|
+
if (10n * (feeRate - ckbFee) > ckbFee) {
|
|
109
90
|
return undefined;
|
|
110
91
|
}
|
|
92
|
+
const { receipts, withdrawalGroups, orders, udts, capacities } = userCells;
|
|
93
|
+
this.logicManager.completeDeposit(tx, receipts);
|
|
94
|
+
this.ownedOwnerManager.withdraw(tx, withdrawalGroups, {
|
|
95
|
+
isReadyOnly: true,
|
|
96
|
+
});
|
|
97
|
+
this.orderManager.melt(tx, orders);
|
|
98
|
+
this.ickbUdtManager.addUdts(tx, udts);
|
|
99
|
+
CapacityManager.addCapacities(tx, capacities);
|
|
100
|
+
// Throw an error if inputs do not cover for outputs
|
|
101
|
+
await new RestrictedTransaction(tx).completeFeeBy(signer, feeRate);
|
|
102
|
+
// Find the maturity most distant in the future
|
|
103
|
+
const maturity = maturities.reduce((a, b) => epochCompare(a, b) === -1 ? b : a);
|
|
104
|
+
return {
|
|
105
|
+
tx,
|
|
106
|
+
ckbFee,
|
|
107
|
+
maturity,
|
|
108
|
+
};
|
|
111
109
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
112
110
|
}
|
|
113
111
|
catch (_) {
|
|
114
112
|
return undefined;
|
|
115
113
|
}
|
|
116
|
-
// Revert any change cells
|
|
117
|
-
tx.outputs = tx.outputs.slice(outputLen);
|
|
118
|
-
tx = SmartTransaction.from(tx);
|
|
119
|
-
const maturity = maturities.reduce((a, b) => epochCompare(a, b) === -1 ? b : a);
|
|
120
|
-
return {
|
|
121
|
-
tx,
|
|
122
|
-
ckbFee,
|
|
123
|
-
maturity,
|
|
124
|
-
};
|
|
125
114
|
}
|
|
126
115
|
// TODO: Allow filtering which cells are fetched
|
|
127
116
|
async getL1State(client, locks, options) {
|
|
128
117
|
const tip = await client.getTipHeader();
|
|
129
118
|
const onChain = true;
|
|
130
119
|
const opts = { ...options, tip, onChain };
|
|
131
|
-
const [feeRate, depositPool, capacities, udts, receipts, withdrawalGroups, orders,] = await Promise.all([
|
|
132
|
-
// TODO: fetch user NervosDAO cells
|
|
133
|
-
// TODO: fetch bot cells for estimating timings
|
|
120
|
+
const [feeRate, depositPool, capacities, udts, receipts, withdrawalGroups, orders, deposits, withdrawalRequests,] = await Promise.all([
|
|
134
121
|
client.getFeeRate(),
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
this.orderManager.findOrders(client),
|
|
122
|
+
collect(this.logicManager.findDeposits(client, opts)),
|
|
123
|
+
collect(CapacityManager.findCapacities(client, locks, opts)),
|
|
124
|
+
collect(this.ickbUdtManager.findUdts(client, locks, opts)),
|
|
125
|
+
collect(this.logicManager.findReceipts(client, locks, opts)),
|
|
126
|
+
collect(this.ownedOwnerManager.findWithdrawalGroups(client, locks, opts)),
|
|
127
|
+
collect(this.orderManager.findOrders(client)),
|
|
128
|
+
collect(this.daoManager.findDeposits(client, locks, opts)),
|
|
129
|
+
collect(this.daoManager.findWithdrawalRequests(client, locks, opts)),
|
|
130
|
+
// TODO: fetch bot cells for estimating timings
|
|
141
131
|
]);
|
|
142
132
|
// Sort depositPool by maturity
|
|
143
133
|
depositPool.sort((a, b) => epochCompare(a.maturity, b.maturity));
|
|
@@ -159,7 +149,7 @@ export class IckbController {
|
|
|
159
149
|
}
|
|
160
150
|
}
|
|
161
151
|
const exchangeRatio = ickbExchangeRatio(tip);
|
|
162
|
-
const ckbDepositCap = convert(false, ICKB_DEPOSIT_CAP, exchangeRatio);
|
|
152
|
+
const ckbDepositCap = convert(false, ICKB_DEPOSIT_CAP, exchangeRatio);
|
|
163
153
|
return {
|
|
164
154
|
system: {
|
|
165
155
|
feeRate,
|
|
@@ -176,6 +166,8 @@ export class IckbController {
|
|
|
176
166
|
receipts,
|
|
177
167
|
withdrawalGroups,
|
|
178
168
|
orders: userOrders,
|
|
169
|
+
deposits,
|
|
170
|
+
withdrawalRequests,
|
|
179
171
|
},
|
|
180
172
|
};
|
|
181
173
|
}
|
|
@@ -214,51 +206,4 @@ function orderMaturityEstimate(isCkb2Udt, amount, tip) {
|
|
|
214
206
|
4n * 60n,
|
|
215
207
|
]);
|
|
216
208
|
}
|
|
217
|
-
class OfflineTransaction extends SmartTransaction {
|
|
218
|
-
clone() {
|
|
219
|
-
const result = super.clone();
|
|
220
|
-
// Keep inputs metadata when cloning, so it will not refetch that data
|
|
221
|
-
result.inputs = [...this.inputs];
|
|
222
|
-
return new OfflineTransaction(result);
|
|
223
|
-
}
|
|
224
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
225
|
-
async completeInputs(_0, _1, _2, init) {
|
|
226
|
-
// Disable completeInputs, so it will not fetch additional cells
|
|
227
|
-
return {
|
|
228
|
-
addedCount: 0,
|
|
229
|
-
accumulated: init,
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
// Reimplement the rest of transformations
|
|
233
|
-
constructor(tx) {
|
|
234
|
-
super(tx.version, tx.cellDeps, tx.headerDeps, tx.inputs, tx.outputs, tx.outputsData, tx.witnesses, tx.udtHandlers, tx.headers);
|
|
235
|
-
}
|
|
236
|
-
static default() {
|
|
237
|
-
return new OfflineTransaction(super.default());
|
|
238
|
-
}
|
|
239
|
-
static fromLumosSkeleton(skeleton) {
|
|
240
|
-
return new OfflineTransaction(super.fromLumosSkeleton(skeleton));
|
|
241
|
-
}
|
|
242
|
-
static from(txLike) {
|
|
243
|
-
return new OfflineTransaction(SmartTransaction.from(txLike));
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
// TODO: utils.binarySearch is sync, need an async one for await the result!!!!!!!!!!!!
|
|
247
|
-
async function asyncBinarySearch(n, f) {
|
|
248
|
-
// Define f(-1) == false and f(n) == true.
|
|
249
|
-
// Invariant: f(i-1) == false, f(j) == true.
|
|
250
|
-
let [i, j] = [0, n];
|
|
251
|
-
while (i < j) {
|
|
252
|
-
const h = Math.trunc((i + j) / 2);
|
|
253
|
-
// i ≤ h < j
|
|
254
|
-
if (!(await f(h))) {
|
|
255
|
-
i = h + 1; // preserves f(i-1) == false
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
j = h; // preserves f(j) == true
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
// i == j, f(i-1) == false, and f(j) (= f(i)) == true => answer is i.
|
|
262
|
-
return i;
|
|
263
|
-
}
|
|
264
209
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ickb/sdk",
|
|
3
|
-
"version": "1000.0.
|
|
3
|
+
"version": "1000.0.40",
|
|
4
4
|
"description": "iCKB SDK built on top of CCC",
|
|
5
5
|
"author": "phroi",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@ckb-ccc/core": "^1.8.0",
|
|
34
|
-
"@ickb/core": "^1000.0.
|
|
35
|
-
"@ickb/dao": "^1000.0.
|
|
36
|
-
"@ickb/order": "^1000.0.
|
|
37
|
-
"@ickb/utils": "^1000.0.
|
|
34
|
+
"@ickb/core": "^1000.0.39",
|
|
35
|
+
"@ickb/dao": "^1000.0.35",
|
|
36
|
+
"@ickb/order": "^1000.0.36",
|
|
37
|
+
"@ickb/utils": "^1000.0.40"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
40
|
"build": "pnpm run build:esm && pnpm run build:cjs && node dist/cjs/index.js",
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ccc, type Epoch } from "@ckb-ccc/core";
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
collect,
|
|
4
4
|
epochCompare,
|
|
5
5
|
CapacityManager,
|
|
6
6
|
SmartTransaction,
|
|
@@ -8,34 +8,37 @@ import {
|
|
|
8
8
|
type UdtCell,
|
|
9
9
|
type CapacityCell,
|
|
10
10
|
epochAdd,
|
|
11
|
-
|
|
11
|
+
asyncBinarySearch,
|
|
12
|
+
RestrictedTransaction,
|
|
12
13
|
} from "@ickb/utils";
|
|
13
14
|
import {
|
|
14
15
|
convert,
|
|
15
16
|
ICKB_DEPOSIT_CAP,
|
|
16
17
|
ickbExchangeRatio,
|
|
17
|
-
|
|
18
|
+
IckbUdtManager,
|
|
18
19
|
LogicManager,
|
|
19
20
|
OwnedOwnerManager,
|
|
20
21
|
type IckbDepositCell,
|
|
21
22
|
type ReceiptCell,
|
|
22
23
|
type WithdrawalGroups,
|
|
23
24
|
} from "@ickb/core";
|
|
24
|
-
import { DaoManager } from "@ickb/dao";
|
|
25
|
+
import { DaoManager, type DaoCell } from "@ickb/dao";
|
|
25
26
|
import {
|
|
26
27
|
Info,
|
|
27
28
|
OrderManager,
|
|
28
29
|
Ratio,
|
|
29
30
|
type OrderCell,
|
|
30
31
|
type OrderGroup,
|
|
32
|
+
type RatioLike,
|
|
31
33
|
} from "@ickb/order";
|
|
32
34
|
|
|
33
35
|
export class IckbController {
|
|
34
36
|
constructor(
|
|
35
|
-
public
|
|
36
|
-
public logicManager: LogicManager,
|
|
37
|
-
public ownedOwnerManager: OwnedOwnerManager,
|
|
38
|
-
public orderManager: OrderManager,
|
|
37
|
+
public readonly ickbUdtManager: IckbUdtManager,
|
|
38
|
+
public readonly logicManager: LogicManager,
|
|
39
|
+
public readonly ownedOwnerManager: OwnedOwnerManager,
|
|
40
|
+
public readonly orderManager: OrderManager,
|
|
41
|
+
public readonly daoManager: DaoManager,
|
|
39
42
|
) {}
|
|
40
43
|
|
|
41
44
|
static fromDeps({
|
|
@@ -65,37 +68,30 @@ export class IckbController {
|
|
|
65
68
|
),
|
|
66
69
|
cellDeps,
|
|
67
70
|
};
|
|
68
|
-
const
|
|
71
|
+
const ickbUdtManager = IckbUdtManager.fromDeps(ickbXudt, daoManager);
|
|
69
72
|
|
|
70
73
|
return new IckbController(
|
|
71
|
-
|
|
72
|
-
LogicManager.fromDeps(ickbLogic, daoManager,
|
|
73
|
-
OwnedOwnerManager.fromDeps(ownedOwner, daoManager,
|
|
74
|
-
OrderManager.fromDeps(order,
|
|
74
|
+
ickbUdtManager,
|
|
75
|
+
LogicManager.fromDeps(ickbLogic, daoManager, ickbUdtManager),
|
|
76
|
+
OwnedOwnerManager.fromDeps(ownedOwner, daoManager, ickbUdtManager),
|
|
77
|
+
OrderManager.fromDeps(order, ickbUdtManager),
|
|
78
|
+
daoManager,
|
|
75
79
|
);
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
previewConversion(
|
|
79
83
|
isCkb2Udt: boolean,
|
|
80
84
|
amount: ccc.FixedPoint,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
};
|
|
85
|
+
rate: RatioLike | ccc.ClientBlockHeader,
|
|
86
|
+
fee?: {
|
|
87
|
+
numerator: ccc.Num;
|
|
88
|
+
denominator: ccc.Num;
|
|
86
89
|
},
|
|
87
90
|
): ccc.FixedPoint {
|
|
88
|
-
|
|
91
|
+
let convertedAmount = convert(isCkb2Udt, amount, rate);
|
|
89
92
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
let convertedAmount = isCkb2Udt
|
|
94
|
-
? (amount * ckbScale) / udtScale
|
|
95
|
-
: (amount * udtScale) / ckbScale;
|
|
96
|
-
|
|
97
|
-
if (options.fee) {
|
|
98
|
-
const { numerator, denominator } = options.fee;
|
|
93
|
+
if (fee) {
|
|
94
|
+
const { numerator, denominator } = fee;
|
|
99
95
|
convertedAmount -= (convertedAmount * numerator) / denominator;
|
|
100
96
|
}
|
|
101
97
|
|
|
@@ -150,105 +146,98 @@ export class IckbController {
|
|
|
150
146
|
system: { feeRate, tip, deposits, ckbDepositCap, exchangeRatio },
|
|
151
147
|
}: Parameters<IckbController["convert"]>[0],
|
|
152
148
|
): ReturnType<IckbController["convert"]> {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
149
|
+
try {
|
|
150
|
+
const tx = SmartTransaction.default();
|
|
151
|
+
const maturities: Epoch[] = [];
|
|
152
|
+
let ckbFee = ccc.Zero;
|
|
153
|
+
|
|
154
|
+
if (n > 0) {
|
|
155
|
+
if (isCkb2Udt) {
|
|
156
|
+
amount -= ckbDepositCap * BigInt(n);
|
|
157
|
+
if (amount < 0n) {
|
|
158
|
+
// Too many Deposits respectfully to the amount
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
this.logicManager.deposit(tx, n, ckbDepositCap, address.script);
|
|
162
|
+
} else {
|
|
163
|
+
const myDeposits = deposits.slice(0, n);
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
165
|
+
amount -= myDeposits.slice(-1)[0]!.udtCumulative;
|
|
166
|
+
if (amount < 0n) {
|
|
167
|
+
// Too many Withdrawal Requests respectfully to the amount
|
|
168
|
+
return undefined;
|
|
169
|
+
}
|
|
170
|
+
this.ownedOwnerManager.requestWithdrawal(
|
|
171
|
+
tx,
|
|
172
|
+
myDeposits,
|
|
173
|
+
address.script,
|
|
174
|
+
);
|
|
175
|
+
maturities.push(...myDeposits.map((d) => d.maturity));
|
|
172
176
|
}
|
|
173
|
-
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (amount > 0n) {
|
|
180
|
+
this.orderManager.mint(
|
|
174
181
|
tx,
|
|
175
|
-
myDeposits,
|
|
176
182
|
address.script,
|
|
183
|
+
info,
|
|
184
|
+
isCkb2Udt ? amount : ccc.Zero,
|
|
185
|
+
isCkb2Udt ? ccc.Zero : amount,
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
const ratio = isCkb2Udt ? info.ckbToUdt : info.udtToCkb;
|
|
189
|
+
const convertedAmount = convert(isCkb2Udt, amount, ratio);
|
|
190
|
+
ckbFee = isCkb2Udt
|
|
191
|
+
? amount - convert(false, convertedAmount, exchangeRatio)
|
|
192
|
+
: convert(true, amount, exchangeRatio) - convertedAmount;
|
|
193
|
+
|
|
194
|
+
maturities.push(
|
|
195
|
+
// TODO: use real world data from deposits, open orders and bot balances
|
|
196
|
+
orderMaturityEstimate(isCkb2Udt, amount, tip),
|
|
177
197
|
);
|
|
178
|
-
maturities.push(...myDeposits.map((d) => d.maturity));
|
|
179
198
|
}
|
|
180
|
-
}
|
|
181
199
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
isCkb2Udt ? amount : ccc.Zero,
|
|
188
|
-
isCkb2Udt ? ccc.Zero : amount,
|
|
189
|
-
);
|
|
200
|
+
// Check that order provides enough fee to the bot for being matched
|
|
201
|
+
// feeRate is a good approximation of the bot tx size matching the order
|
|
202
|
+
if (10n * (feeRate - ckbFee) > ckbFee) {
|
|
203
|
+
return undefined;
|
|
204
|
+
}
|
|
190
205
|
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
ckbFee = isCkb2Udt
|
|
194
|
-
? amount - convert(false, convertedAmount, exchangeRatio)
|
|
195
|
-
: convert(true, amount, exchangeRatio) - convertedAmount;
|
|
206
|
+
const { receipts, withdrawalGroups, orders, udts, capacities } =
|
|
207
|
+
userCells;
|
|
196
208
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
);
|
|
201
|
-
|
|
209
|
+
this.logicManager.completeDeposit(tx, receipts);
|
|
210
|
+
this.ownedOwnerManager.withdraw(tx, withdrawalGroups, {
|
|
211
|
+
isReadyOnly: true,
|
|
212
|
+
});
|
|
213
|
+
this.orderManager.melt(tx, orders);
|
|
214
|
+
this.ickbUdtManager.addUdts(tx, udts);
|
|
215
|
+
CapacityManager.addCapacities(tx, capacities);
|
|
202
216
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
if (10n * (feeRate - ckbFee) > ckbFee) {
|
|
206
|
-
return undefined;
|
|
207
|
-
}
|
|
217
|
+
// Throw an error if inputs do not cover for outputs
|
|
218
|
+
await new RestrictedTransaction(tx).completeFeeBy(signer, feeRate);
|
|
208
219
|
|
|
209
|
-
|
|
220
|
+
// Find the maturity most distant in the future
|
|
221
|
+
const maturity = maturities.reduce((a, b) =>
|
|
222
|
+
epochCompare(a, b) === -1 ? b : a,
|
|
223
|
+
);
|
|
210
224
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// const outputLen = tx.inputs.length;??
|
|
217
|
-
// Give choice that let user add this cells the way he prefer!! (Either here or at completeFeeBy)
|
|
218
|
-
this.ickbManager.addUdts(tx, udts);
|
|
219
|
-
CapacityManager.addCapacities(tx, capacities);
|
|
220
|
-
const outputLen = tx.outputs.length;
|
|
225
|
+
return {
|
|
226
|
+
tx,
|
|
227
|
+
ckbFee,
|
|
228
|
+
maturity,
|
|
229
|
+
};
|
|
221
230
|
|
|
222
|
-
try {
|
|
223
|
-
await tx.completeFeeBy(signer, feeRate);
|
|
224
|
-
// TODO: check in SmartTransaction for 64 output cells in DAO transactions
|
|
225
|
-
if (tx.outputs.length > 64) {
|
|
226
|
-
return undefined;
|
|
227
|
-
}
|
|
228
231
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
229
232
|
} catch (_) {
|
|
230
233
|
return undefined;
|
|
231
234
|
}
|
|
232
|
-
|
|
233
|
-
// Revert any change cells
|
|
234
|
-
tx.outputs = tx.outputs.slice(outputLen);
|
|
235
|
-
tx = SmartTransaction.from(tx);
|
|
236
|
-
|
|
237
|
-
const maturity = maturities.reduce((a, b) =>
|
|
238
|
-
epochCompare(a, b) === -1 ? b : a,
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
return {
|
|
242
|
-
tx,
|
|
243
|
-
ckbFee,
|
|
244
|
-
maturity,
|
|
245
|
-
};
|
|
246
235
|
}
|
|
247
236
|
|
|
248
237
|
// TODO: Allow filtering which cells are fetched
|
|
249
238
|
async getL1State(
|
|
250
239
|
client: ccc.Client,
|
|
251
|
-
locks: ccc.
|
|
240
|
+
locks: ccc.Script[],
|
|
252
241
|
options?: {
|
|
253
242
|
minLockUp?: ccc.Epoch;
|
|
254
243
|
maxLockUp?: ccc.Epoch;
|
|
@@ -268,18 +257,19 @@ export class IckbController {
|
|
|
268
257
|
receipts,
|
|
269
258
|
withdrawalGroups,
|
|
270
259
|
orders,
|
|
260
|
+
deposits,
|
|
261
|
+
withdrawalRequests,
|
|
271
262
|
] = await Promise.all([
|
|
272
|
-
// TODO: fetch user NervosDAO cells
|
|
273
|
-
// TODO: fetch bot cells for estimating timings
|
|
274
263
|
client.getFeeRate(),
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
),
|
|
282
|
-
this.
|
|
264
|
+
collect(this.logicManager.findDeposits(client, opts)),
|
|
265
|
+
collect(CapacityManager.findCapacities(client, locks, opts)),
|
|
266
|
+
collect(this.ickbUdtManager.findUdts(client, locks, opts)),
|
|
267
|
+
collect(this.logicManager.findReceipts(client, locks, opts)),
|
|
268
|
+
collect(this.ownedOwnerManager.findWithdrawalGroups(client, locks, opts)),
|
|
269
|
+
collect(this.orderManager.findOrders(client)),
|
|
270
|
+
collect(this.daoManager.findDeposits(client, locks, opts)),
|
|
271
|
+
collect(this.daoManager.findWithdrawalRequests(client, locks, opts)),
|
|
272
|
+
// TODO: fetch bot cells for estimating timings
|
|
283
273
|
]);
|
|
284
274
|
|
|
285
275
|
// Sort depositPool by maturity
|
|
@@ -303,7 +293,7 @@ export class IckbController {
|
|
|
303
293
|
}
|
|
304
294
|
|
|
305
295
|
const exchangeRatio = ickbExchangeRatio(tip);
|
|
306
|
-
const ckbDepositCap = convert(false, ICKB_DEPOSIT_CAP, exchangeRatio);
|
|
296
|
+
const ckbDepositCap = convert(false, ICKB_DEPOSIT_CAP, exchangeRatio);
|
|
307
297
|
|
|
308
298
|
return {
|
|
309
299
|
system: {
|
|
@@ -321,6 +311,8 @@ export class IckbController {
|
|
|
321
311
|
receipts,
|
|
322
312
|
withdrawalGroups,
|
|
323
313
|
orders: userOrders,
|
|
314
|
+
deposits,
|
|
315
|
+
withdrawalRequests,
|
|
324
316
|
},
|
|
325
317
|
};
|
|
326
318
|
}
|
|
@@ -381,6 +373,8 @@ export interface UserCells {
|
|
|
381
373
|
receipts: ReceiptCell[];
|
|
382
374
|
withdrawalGroups: WithdrawalGroups[];
|
|
383
375
|
orders: OrderGroup[];
|
|
376
|
+
deposits: DaoCell[];
|
|
377
|
+
withdrawalRequests: DaoCell[];
|
|
384
378
|
}
|
|
385
379
|
|
|
386
380
|
export interface Conversion {
|
|
@@ -403,77 +397,3 @@ function orderMaturityEstimate(
|
|
|
403
397
|
4n * 60n,
|
|
404
398
|
]);
|
|
405
399
|
}
|
|
406
|
-
|
|
407
|
-
class OfflineTransaction extends SmartTransaction {
|
|
408
|
-
override clone(): OfflineTransaction {
|
|
409
|
-
const result = super.clone();
|
|
410
|
-
// Keep inputs metadata when cloning, so it will not refetch that data
|
|
411
|
-
result.inputs = [...this.inputs];
|
|
412
|
-
return new OfflineTransaction(result);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
416
|
-
override async completeInputs<T>(
|
|
417
|
-
_0: never,
|
|
418
|
-
_1: never,
|
|
419
|
-
_2: never,
|
|
420
|
-
init: T,
|
|
421
|
-
): Promise<{ addedCount: number; accumulated?: T }> {
|
|
422
|
-
// Disable completeInputs, so it will not fetch additional cells
|
|
423
|
-
return {
|
|
424
|
-
addedCount: 0,
|
|
425
|
-
accumulated: init,
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// Reimplement the rest of transformations
|
|
430
|
-
|
|
431
|
-
constructor(tx: SmartTransaction) {
|
|
432
|
-
super(
|
|
433
|
-
tx.version,
|
|
434
|
-
tx.cellDeps,
|
|
435
|
-
tx.headerDeps,
|
|
436
|
-
tx.inputs,
|
|
437
|
-
tx.outputs,
|
|
438
|
-
tx.outputsData,
|
|
439
|
-
tx.witnesses,
|
|
440
|
-
tx.udtHandlers,
|
|
441
|
-
tx.headers,
|
|
442
|
-
);
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
static override default(): OfflineTransaction {
|
|
446
|
-
return new OfflineTransaction(super.default());
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
static override fromLumosSkeleton(
|
|
450
|
-
skeleton: ccc.LumosTransactionSkeletonType,
|
|
451
|
-
): OfflineTransaction {
|
|
452
|
-
return new OfflineTransaction(super.fromLumosSkeleton(skeleton));
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
static override from(txLike: SmartTransactionLike): OfflineTransaction {
|
|
456
|
-
return new OfflineTransaction(SmartTransaction.from(txLike));
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
// TODO: utils.binarySearch is sync, need an async one for await the result!!!!!!!!!!!!
|
|
461
|
-
async function asyncBinarySearch(
|
|
462
|
-
n: number,
|
|
463
|
-
f: (i: number) => Promise<boolean>,
|
|
464
|
-
): Promise<number> {
|
|
465
|
-
// Define f(-1) == false and f(n) == true.
|
|
466
|
-
// Invariant: f(i-1) == false, f(j) == true.
|
|
467
|
-
let [i, j] = [0, n];
|
|
468
|
-
while (i < j) {
|
|
469
|
-
const h = Math.trunc((i + j) / 2);
|
|
470
|
-
// i ≤ h < j
|
|
471
|
-
if (!(await f(h))) {
|
|
472
|
-
i = h + 1; // preserves f(i-1) == false
|
|
473
|
-
} else {
|
|
474
|
-
j = h; // preserves f(j) == true
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
// i == j, f(i-1) == false, and f(j) (= f(i)) == true => answer is i.
|
|
478
|
-
return i;
|
|
479
|
-
}
|