@interest-protocol/blast-partners-sdk 0.1.0 → 0.2.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/dist/events.d.ts +59 -6
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +68 -6
- package/dist/events.js.map +1 -1
- package/dist/reducer.d.ts +27 -5
- package/dist/reducer.d.ts.map +1 -1
- package/dist/reducer.js +63 -10
- package/dist/reducer.js.map +1 -1
- package/dist/state.d.ts +97 -13
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +50 -11
- package/dist/state.js.map +1 -1
- package/dist/transactions.d.ts +43 -4
- package/dist/transactions.d.ts.map +1 -1
- package/dist/transactions.js +68 -4
- package/dist/transactions.js.map +1 -1
- package/package.json +3 -3
- package/src/events.ts +88 -7
- package/src/reducer.ts +102 -15
- package/src/state.ts +67 -21
- package/src/transactions.ts +93 -5
package/dist/events.d.ts
CHANGED
|
@@ -1,19 +1,39 @@
|
|
|
1
|
+
import type { DecodedDelayedEvent } from "@interest-protocol/blast-admin-sdk/events";
|
|
1
2
|
import type { SuiEventPosition } from "@interest-protocol/blast-core/events";
|
|
2
3
|
import type { SuiClientTypes } from "@mysten/sui/client";
|
|
3
4
|
/** The `blast_partners` events, in Move field order. */
|
|
4
5
|
export declare const partnerEventBcs: {
|
|
5
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* At registration and on every recipient change: the partner's recipient.
|
|
8
|
+
* Share and cap terms are `blast_admin::delayed` events (`partnerDelayedKeys`).
|
|
9
|
+
*/
|
|
6
10
|
PartnerUpdated: import("@mysten/sui/bcs").BcsStruct<{
|
|
7
|
-
recipient: import("@mysten/sui/bcs").BcsType<string, string, "bytes[32]">;
|
|
8
|
-
share_bps: import("@mysten/sui/bcs").BcsType<import("@interest-protocol/blast-core/timelock").Timelocked<bigint>, import("@interest-protocol/blast-core/timelock").Timelocked<bigint>, string>;
|
|
9
|
-
cap_id: import("@mysten/sui/bcs").BcsType<import("@interest-protocol/blast-core/timelock").Timelocked<string>, import("@interest-protocol/blast-core/timelock").Timelocked<string>, string>;
|
|
10
11
|
partner_id: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
12
|
+
recipient: import("@mysten/sui/bcs").BcsType<string, string, "bytes[32]">;
|
|
11
13
|
}, string>;
|
|
12
14
|
/** `amount` of the event's coin type sent to the partner's recipient. */
|
|
13
15
|
PartnerPaid: import("@mysten/sui/bcs").BcsStruct<{
|
|
14
16
|
partner_id: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
15
17
|
amount: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
16
18
|
}, string>;
|
|
19
|
+
/**
|
|
20
|
+
* `partner_list::add`: the list owned by `parent` (a product configuration's
|
|
21
|
+
* ID) accepts `partner_id` without end.
|
|
22
|
+
*/
|
|
23
|
+
PartnerAdded: import("@mysten/sui/bcs").BcsStruct<{
|
|
24
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
25
|
+
partner_id: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
26
|
+
}, string>;
|
|
27
|
+
/** `partner_list::remove`: new sales stop naming the partner from `acceptance_ends_at_ms`. */
|
|
28
|
+
PartnerRemoved: import("@mysten/sui/bcs").BcsStruct<{
|
|
29
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
30
|
+
partner_id: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
31
|
+
acceptance_ends_at_ms: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
32
|
+
}, string>;
|
|
33
|
+
/** `partner_list::destroy`: the list owned by `parent` and its entries are gone. */
|
|
34
|
+
PartnerListDestroyed: import("@mysten/sui/bcs").BcsStruct<{
|
|
35
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
36
|
+
}, string>;
|
|
17
37
|
};
|
|
18
38
|
export type PartnerEventKind = keyof typeof partnerEventBcs;
|
|
19
39
|
export type PartnerEventPayloads = {
|
|
@@ -30,7 +50,40 @@ export type DecodedPartnerEvent = {
|
|
|
30
50
|
position: SuiEventPosition;
|
|
31
51
|
};
|
|
32
52
|
}[PartnerEventKind];
|
|
33
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Decodes one `<partnersPackageId>::blast_partners::<Kind>` or
|
|
55
|
+
* `<partnersPackageId>::partner_list::<Kind>` event.
|
|
56
|
+
*/
|
|
34
57
|
export declare function decodePartnerEvent(event: SuiClientTypes.EventEntry, partnersPackageId: string): DecodedPartnerEvent;
|
|
35
|
-
export declare function partnerEventId(event:
|
|
58
|
+
export declare function partnerEventId(event: {
|
|
59
|
+
position: SuiEventPosition;
|
|
60
|
+
}): string;
|
|
61
|
+
/**
|
|
62
|
+
* `blast_partners` keys of `blast_admin::delayed` settings, each owned by the
|
|
63
|
+
* partner: its share in basis points and its managing cap's ID. Registration
|
|
64
|
+
* emits `DelayedCreated` for both; a proposal changes nothing until
|
|
65
|
+
* `DelayedApplied`.
|
|
66
|
+
*/
|
|
67
|
+
export declare const partnerDelayedKeys: {
|
|
68
|
+
readonly Share: {
|
|
69
|
+
readonly key: "blast_partners::ShareKey";
|
|
70
|
+
readonly family: "setting";
|
|
71
|
+
readonly keyBcs: import("@mysten/sui/bcs").BcsType<null, null, string>;
|
|
72
|
+
readonly valueBcs: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
73
|
+
readonly valueType: "u64";
|
|
74
|
+
};
|
|
75
|
+
readonly Cap: {
|
|
76
|
+
readonly key: "blast_partners::CapKey";
|
|
77
|
+
readonly family: "setting";
|
|
78
|
+
readonly keyBcs: import("@mysten/sui/bcs").BcsType<null, null, string>;
|
|
79
|
+
readonly valueBcs: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
80
|
+
readonly valueType: "0x2::object::ID";
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
export type DecodedPartnerDelayedEvent = DecodedDelayedEvent<typeof partnerDelayedKeys>;
|
|
84
|
+
/** Decodes a `<adminPackageId>::delayed` event keyed by `blast_partners`. */
|
|
85
|
+
export declare function decodePartnerDelayedEvent(event: SuiClientTypes.EventEntry, packages: {
|
|
86
|
+
adminPackageId: string;
|
|
87
|
+
partnersPackageId: string;
|
|
88
|
+
}): DecodedPartnerDelayedEvent;
|
|
36
89
|
//# sourceMappingURL=events.d.ts.map
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,2CAA2C,CAAC;AAQnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAM7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOzD,wDAAwD;AACxD,eAAO,MAAM,eAAe;IAC1B;;;OAGG;IACH,cAAc;;;;IAId,yEAAyE;IACzE,WAAW;;;;IAIX;;;OAGG;IACH,YAAY;;;;IAIZ,8FAA8F;IAC9F,cAAc;;;;;IAKd,oFAAoF;IACpF,oBAAoB;;;CAGrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,CAAC;AAW5D,MAAM,MAAM,oBAAoB,GAAG;KAChC,IAAI,IAAI,gBAAgB,GAAG,UAAU,CACpC,CAAC,OAAO,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CACxC;CACF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;KAC/B,IAAI,IAAI,gBAAgB,GAAG;QAC1B,MAAM,EAAE,UAAU,CAAC;QACnB,IAAI,EAAE,IAAI,CAAC;QACX,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpC,kDAAkD;QAClD,QAAQ,EAAE,IAAI,SAAS,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC;QACrD,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,gBAAgB,CAAC;KAC5B;CACF,CAAC,gBAAgB,CAAC,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,CAAC,UAAU,EAChC,iBAAiB,EAAE,MAAM,GACxB,mBAAmB,CAqBrB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,gBAAgB,CAAA;CAAE,GAAG,MAAM,CAE5E;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;iBAE3B,GAAG,EAAE,0BAA0B;iBAC/B,MAAM,EAAE,SAAS;iBACjB,MAAM;iBACN,QAAQ;iBACR,SAAS,EAAE,KAAK;;;iBAGhB,GAAG,EAAE,wBAAwB;iBAC7B,MAAM,EAAE,SAAS;iBACjB,MAAM;iBACN,QAAQ;iBACR,SAAS,EAAE,iBAAiB;;CAEI,CAAC;AAErC,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,CAC1D,OAAO,kBAAkB,CAC1B,CAAC;AAEF,6EAA6E;AAC7E,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,cAAc,CAAC,UAAU,EAChC,QAAQ,EAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAC9D,0BAA0B,CAM5B"}
|
package/dist/events.js
CHANGED
|
@@ -1,29 +1,61 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { decodeDelayedEvent } from "@interest-protocol/blast-admin-sdk/events";
|
|
2
|
+
import { addressBcs, suiObjectIdBcs, u64Bcs, unitKeyBcs, } from "@interest-protocol/blast-core/bcs";
|
|
2
3
|
import { normalizeSuiEventPosition, suiEventId, } from "@interest-protocol/blast-core/events";
|
|
3
4
|
import { bcs } from "@mysten/sui/bcs";
|
|
4
5
|
import { normalizeStructTag, normalizeSuiAddress, parseStructTag, } from "@mysten/sui/utils";
|
|
5
|
-
import { partnerTermsBcs } from "./state.js";
|
|
6
6
|
/** The `blast_partners` events, in Move field order. */
|
|
7
7
|
export const partnerEventBcs = {
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* At registration and on every recipient change: the partner's recipient.
|
|
10
|
+
* Share and cap terms are `blast_admin::delayed` events (`partnerDelayedKeys`).
|
|
11
|
+
*/
|
|
9
12
|
PartnerUpdated: bcs.struct("PartnerUpdated", {
|
|
10
13
|
partner_id: suiObjectIdBcs,
|
|
11
|
-
|
|
14
|
+
recipient: addressBcs,
|
|
12
15
|
}),
|
|
13
16
|
/** `amount` of the event's coin type sent to the partner's recipient. */
|
|
14
17
|
PartnerPaid: bcs.struct("PartnerPaid", {
|
|
15
18
|
partner_id: suiObjectIdBcs,
|
|
16
19
|
amount: u64Bcs,
|
|
17
20
|
}),
|
|
21
|
+
/**
|
|
22
|
+
* `partner_list::add`: the list owned by `parent` (a product configuration's
|
|
23
|
+
* ID) accepts `partner_id` without end.
|
|
24
|
+
*/
|
|
25
|
+
PartnerAdded: bcs.struct("PartnerAdded", {
|
|
26
|
+
parent: suiObjectIdBcs,
|
|
27
|
+
partner_id: suiObjectIdBcs,
|
|
28
|
+
}),
|
|
29
|
+
/** `partner_list::remove`: new sales stop naming the partner from `acceptance_ends_at_ms`. */
|
|
30
|
+
PartnerRemoved: bcs.struct("PartnerRemoved", {
|
|
31
|
+
parent: suiObjectIdBcs,
|
|
32
|
+
partner_id: suiObjectIdBcs,
|
|
33
|
+
acceptance_ends_at_ms: u64Bcs,
|
|
34
|
+
}),
|
|
35
|
+
/** `partner_list::destroy`: the list owned by `parent` and its entries are gone. */
|
|
36
|
+
PartnerListDestroyed: bcs.struct("PartnerListDestroyed", {
|
|
37
|
+
parent: suiObjectIdBcs,
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
/** The module each event is defined in. */
|
|
41
|
+
const PARTNER_EVENT_MODULES = {
|
|
42
|
+
PartnerUpdated: "blast_partners",
|
|
43
|
+
PartnerPaid: "blast_partners",
|
|
44
|
+
PartnerAdded: "partner_list",
|
|
45
|
+
PartnerRemoved: "partner_list",
|
|
46
|
+
PartnerListDestroyed: "partner_list",
|
|
18
47
|
};
|
|
19
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Decodes one `<partnersPackageId>::blast_partners::<Kind>` or
|
|
50
|
+
* `<partnersPackageId>::partner_list::<Kind>` event.
|
|
51
|
+
*/
|
|
20
52
|
export function decodePartnerEvent(event, partnersPackageId) {
|
|
21
53
|
const tag = parseStructTag(event.eventType);
|
|
22
54
|
const kind = tag.name;
|
|
23
55
|
const [coinType = null, ...extra] = tag.typeParams;
|
|
24
56
|
if (tag.address !== normalizeSuiAddress(partnersPackageId) ||
|
|
25
|
-
tag.module !== "blast_partners" ||
|
|
26
57
|
!Object.hasOwn(partnerEventBcs, kind) ||
|
|
58
|
+
tag.module !== PARTNER_EVENT_MODULES[kind] ||
|
|
27
59
|
(coinType === null) === (kind === "PartnerPaid") ||
|
|
28
60
|
extra.length > 0) {
|
|
29
61
|
throw new TypeError(`unexpected partner event type ${event.eventType}`);
|
|
@@ -40,4 +72,34 @@ export function decodePartnerEvent(event, partnersPackageId) {
|
|
|
40
72
|
export function partnerEventId(event) {
|
|
41
73
|
return suiEventId(event.position);
|
|
42
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* `blast_partners` keys of `blast_admin::delayed` settings, each owned by the
|
|
77
|
+
* partner: its share in basis points and its managing cap's ID. Registration
|
|
78
|
+
* emits `DelayedCreated` for both; a proposal changes nothing until
|
|
79
|
+
* `DelayedApplied`.
|
|
80
|
+
*/
|
|
81
|
+
export const partnerDelayedKeys = {
|
|
82
|
+
Share: {
|
|
83
|
+
key: "blast_partners::ShareKey",
|
|
84
|
+
family: "setting",
|
|
85
|
+
keyBcs: unitKeyBcs,
|
|
86
|
+
valueBcs: u64Bcs,
|
|
87
|
+
valueType: "u64",
|
|
88
|
+
},
|
|
89
|
+
Cap: {
|
|
90
|
+
key: "blast_partners::CapKey",
|
|
91
|
+
family: "setting",
|
|
92
|
+
keyBcs: unitKeyBcs,
|
|
93
|
+
valueBcs: suiObjectIdBcs,
|
|
94
|
+
valueType: "0x2::object::ID",
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
/** Decodes a `<adminPackageId>::delayed` event keyed by `blast_partners`. */
|
|
98
|
+
export function decodePartnerDelayedEvent(event, packages) {
|
|
99
|
+
return decodeDelayedEvent(event, {
|
|
100
|
+
adminPackageId: packages.adminPackageId,
|
|
101
|
+
packageId: packages.partnersPackageId,
|
|
102
|
+
keys: partnerDelayedKeys,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
43
105
|
//# sourceMappingURL=events.js.map
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/reducer.d.ts
CHANGED
|
@@ -1,17 +1,39 @@
|
|
|
1
|
-
import type { DecodedPartnerEvent, PartnerEventKind } from "./events.ts";
|
|
2
|
-
|
|
3
|
-
export type
|
|
1
|
+
import type { DecodedPartnerDelayedEvent, DecodedPartnerEvent, PartnerEventKind } from "./events.ts";
|
|
2
|
+
/** A proposed share or cap: it applies only when someone applies it, at or after `readyAtMs`. */
|
|
3
|
+
export type PartnerProposal<T> = {
|
|
4
|
+
value: T;
|
|
5
|
+
readyAtMs: bigint;
|
|
6
|
+
};
|
|
7
|
+
export type PartnerProjection = {
|
|
4
8
|
partnerId: string;
|
|
9
|
+
/** Null until the partner's `PartnerUpdated`. */
|
|
10
|
+
recipient: string | null;
|
|
11
|
+
/** The applied share in basis points; null until its `DelayedCreated`. */
|
|
12
|
+
shareBps: bigint | null;
|
|
13
|
+
/** The applied managing cap; null until its `DelayedCreated`. */
|
|
14
|
+
capId: string | null;
|
|
15
|
+
pendingShare: PartnerProposal<bigint> | null;
|
|
16
|
+
pendingCap: PartnerProposal<string> | null;
|
|
5
17
|
/** Everything sent to the partner, by coin type. */
|
|
6
18
|
paid: Readonly<Record<string, bigint>>;
|
|
7
19
|
};
|
|
8
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Partners rebuilt from their events and their `blast_admin::delayed` events
|
|
22
|
+
* (`decodePartnerDelayedEvent`); terms match `PartnerState` once replayed.
|
|
23
|
+
*/
|
|
9
24
|
export type PartnersEventProjection = {
|
|
10
25
|
appliedEventIds: Readonly<Record<string, true>>;
|
|
26
|
+
/** Counts `blast_partners` events only. */
|
|
11
27
|
eventCounts: Readonly<Record<PartnerEventKind, number>>;
|
|
12
28
|
partners: Readonly<Record<string, PartnerProjection>>;
|
|
29
|
+
/**
|
|
30
|
+
* Each `PartnerList` by parent (the product configuration's ID): every
|
|
31
|
+
* partner it named and the millisecond its acceptance ends (`U64_MAX`
|
|
32
|
+
* while accepted without end). A destroyed list is removed.
|
|
33
|
+
*/
|
|
34
|
+
lists: Readonly<Record<string, Readonly<Record<string, bigint>>>>;
|
|
13
35
|
};
|
|
14
36
|
export declare function createPartnersEventProjection(): PartnersEventProjection;
|
|
15
37
|
/** Applies one event once; replaying an applied event returns `state` unchanged. */
|
|
16
|
-
export declare function reducePartnerEvent(state: PartnersEventProjection, event: DecodedPartnerEvent): PartnersEventProjection;
|
|
38
|
+
export declare function reducePartnerEvent(state: PartnersEventProjection, event: DecodedPartnerEvent | DecodedPartnerDelayedEvent): PartnersEventProjection;
|
|
17
39
|
//# sourceMappingURL=reducer.d.ts.map
|
package/dist/reducer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,iGAAiG;AACjG,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,iEAAiE;IACjE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC7C,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3C,oDAAoD;IACpD,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAChD,2CAA2C;IAC3C,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;CACnE,CAAC;AAEF,wBAAgB,6BAA6B,IAAI,uBAAuB,CASvE;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,mBAAmB,GAAG,0BAA0B,GACtD,uBAAuB,CAsDzB"}
|
package/dist/reducer.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { U64_MAX } from "@interest-protocol/blast-core/integers";
|
|
1
2
|
import { partnerEventBcs, partnerEventId } from "./events.js";
|
|
2
3
|
export function createPartnersEventProjection() {
|
|
3
4
|
return {
|
|
4
5
|
appliedEventIds: {},
|
|
5
6
|
eventCounts: Object.fromEntries(Object.keys(partnerEventBcs).map((kind) => [kind, 0])),
|
|
6
7
|
partners: {},
|
|
8
|
+
lists: {},
|
|
7
9
|
};
|
|
8
10
|
}
|
|
9
11
|
/** Applies one event once; replaying an applied event returns `state` unchanged. */
|
|
@@ -11,27 +13,44 @@ export function reducePartnerEvent(state, event) {
|
|
|
11
13
|
const eventId = partnerEventId(event);
|
|
12
14
|
if (state.appliedEventIds[eventId])
|
|
13
15
|
return state;
|
|
16
|
+
const applied = { ...state.appliedEventIds, [eventId]: true };
|
|
17
|
+
if (event.source === "delayed") {
|
|
18
|
+
const partnerId = event.payload.parent;
|
|
19
|
+
return withPartner({ ...state, appliedEventIds: applied }, reduceTerms(state.partners[partnerId] ?? empty(partnerId), event));
|
|
20
|
+
}
|
|
14
21
|
const next = {
|
|
15
22
|
...state,
|
|
16
|
-
appliedEventIds:
|
|
23
|
+
appliedEventIds: applied,
|
|
17
24
|
eventCounts: {
|
|
18
25
|
...state.eventCounts,
|
|
19
26
|
[event.kind]: state.eventCounts[event.kind] + 1,
|
|
20
27
|
},
|
|
21
28
|
};
|
|
29
|
+
if (event.kind === "PartnerListDestroyed") {
|
|
30
|
+
const { [event.payload.parent]: _, ...lists } = state.lists;
|
|
31
|
+
return { ...next, lists };
|
|
32
|
+
}
|
|
33
|
+
if (event.kind === "PartnerAdded" || event.kind === "PartnerRemoved") {
|
|
34
|
+
const { parent, partner_id } = event.payload;
|
|
35
|
+
const acceptanceEndsAtMs = event.kind === "PartnerAdded"
|
|
36
|
+
? U64_MAX
|
|
37
|
+
: event.payload.acceptance_ends_at_ms;
|
|
38
|
+
return {
|
|
39
|
+
...next,
|
|
40
|
+
lists: {
|
|
41
|
+
...state.lists,
|
|
42
|
+
[parent]: { ...state.lists[parent], [partner_id]: acceptanceEndsAtMs },
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
22
46
|
const partnerId = event.payload.partner_id;
|
|
23
47
|
const current = state.partners[partnerId];
|
|
24
|
-
if (event.kind === "PartnerUpdated")
|
|
25
|
-
const { recipient, share_bps, cap_id } = event.payload;
|
|
48
|
+
if (event.kind === "PartnerUpdated")
|
|
26
49
|
return withPartner(next, {
|
|
27
|
-
partnerId,
|
|
28
|
-
recipient,
|
|
29
|
-
shareBps: share_bps,
|
|
30
|
-
capId: cap_id,
|
|
31
|
-
paid: current?.paid ?? {},
|
|
50
|
+
...(current ?? empty(partnerId)),
|
|
51
|
+
recipient: event.payload.recipient,
|
|
32
52
|
});
|
|
33
|
-
|
|
34
|
-
// A partner is registered, with an update, before it can be paid.
|
|
53
|
+
// A partner is registered before it can be paid.
|
|
35
54
|
if (!current)
|
|
36
55
|
return next;
|
|
37
56
|
const coinType = event.coinType;
|
|
@@ -43,6 +62,40 @@ export function reducePartnerEvent(state, event) {
|
|
|
43
62
|
},
|
|
44
63
|
});
|
|
45
64
|
}
|
|
65
|
+
/** Applied and proposed terms; readiness alone changes nothing. */
|
|
66
|
+
function reduceTerms(partner, event) {
|
|
67
|
+
const [applied, pending] = event.name === "Share"
|
|
68
|
+
? ["shareBps", "pendingShare"]
|
|
69
|
+
: ["capId", "pendingCap"];
|
|
70
|
+
switch (event.kind) {
|
|
71
|
+
case "DelayedCreated":
|
|
72
|
+
case "DelayedApplied":
|
|
73
|
+
return { ...partner, [applied]: event.payload.value, [pending]: null };
|
|
74
|
+
case "DelayedScheduled":
|
|
75
|
+
return {
|
|
76
|
+
...partner,
|
|
77
|
+
[pending]: {
|
|
78
|
+
value: event.payload.value,
|
|
79
|
+
readyAtMs: event.payload.ready_at_ms,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
case "DelayedCancelled":
|
|
83
|
+
return { ...partner, [pending]: null };
|
|
84
|
+
default:
|
|
85
|
+
return partner;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function empty(partnerId) {
|
|
89
|
+
return {
|
|
90
|
+
partnerId,
|
|
91
|
+
recipient: null,
|
|
92
|
+
shareBps: null,
|
|
93
|
+
capId: null,
|
|
94
|
+
pendingShare: null,
|
|
95
|
+
pendingCap: null,
|
|
96
|
+
paid: {},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
46
99
|
function withPartner(state, partner) {
|
|
47
100
|
return {
|
|
48
101
|
...state,
|
package/dist/reducer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../src/reducer.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
CHANGED
|
@@ -1,26 +1,88 @@
|
|
|
1
|
+
import type { Delayed } from "@interest-protocol/blast-core/bcs";
|
|
1
2
|
import type { SharedObjectIdentity } from "@interest-protocol/blast-core/sui";
|
|
2
|
-
import type { Timelocked } from "@interest-protocol/blast-core/timelock";
|
|
3
3
|
import type { ClientWithCoreApi } from "@mysten/sui/client";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* `blast_partners::delay_ms`: the fixed notice before a share or cap Blast
|
|
6
|
+
* proposes can be applied.
|
|
7
|
+
*/
|
|
5
8
|
export declare const PARTNER_DELAY_MS = 604800000n;
|
|
6
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* The partner's recipient, share and managing cap, as Move stores them. A
|
|
11
|
+
* share or cap proposal changes nothing until someone applies it.
|
|
12
|
+
*/
|
|
7
13
|
export type PartnerTerms = {
|
|
8
14
|
recipient: string;
|
|
9
15
|
/** Basis points of Blast's fee on each trade naming the partner. */
|
|
10
|
-
shareBps:
|
|
16
|
+
shareBps: Delayed<null, bigint>;
|
|
11
17
|
/** The only `PartnerCap` that may set `recipient`. */
|
|
12
|
-
capId:
|
|
18
|
+
capId: Delayed<null, string>;
|
|
13
19
|
};
|
|
14
20
|
export declare const partnerTermsBcs: {
|
|
15
21
|
recipient: import("@mysten/sui/bcs").BcsType<string, string, "bytes[32]">;
|
|
16
|
-
share_bps: import("@mysten/sui/bcs").
|
|
17
|
-
|
|
22
|
+
share_bps: import("@mysten/sui/bcs").BcsStruct<{
|
|
23
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
24
|
+
key: import("@mysten/sui/bcs").BcsType<null, null, string>;
|
|
25
|
+
value: import("@mysten/sui/bcs").BcsType<bigint, bigint, string>;
|
|
26
|
+
delay_ms: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
27
|
+
pending: import("@mysten/sui/bcs").BcsType<{
|
|
28
|
+
value: bigint;
|
|
29
|
+
delay_ms: bigint;
|
|
30
|
+
ready_at_ms: bigint;
|
|
31
|
+
} | null, {
|
|
32
|
+
value: bigint;
|
|
33
|
+
delay_ms: bigint;
|
|
34
|
+
ready_at_ms: bigint;
|
|
35
|
+
} | null | undefined, `Option<${string}>`>;
|
|
36
|
+
}, string>;
|
|
37
|
+
cap_id: import("@mysten/sui/bcs").BcsStruct<{
|
|
38
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
39
|
+
key: import("@mysten/sui/bcs").BcsType<null, null, string>;
|
|
40
|
+
value: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
41
|
+
delay_ms: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
42
|
+
pending: import("@mysten/sui/bcs").BcsType<{
|
|
43
|
+
value: string;
|
|
44
|
+
delay_ms: bigint;
|
|
45
|
+
ready_at_ms: bigint;
|
|
46
|
+
} | null, {
|
|
47
|
+
value: string;
|
|
48
|
+
delay_ms: bigint;
|
|
49
|
+
ready_at_ms: bigint;
|
|
50
|
+
} | null | undefined, `Option<${string}>`>;
|
|
51
|
+
}, string>;
|
|
18
52
|
};
|
|
19
53
|
/** BCS layout of `blast_partners::blast_partners::Partner`. */
|
|
20
54
|
export declare const partnerBcs: import("@mysten/sui/bcs").BcsStruct<{
|
|
21
55
|
recipient: import("@mysten/sui/bcs").BcsType<string, string, "bytes[32]">;
|
|
22
|
-
share_bps: import("@mysten/sui/bcs").
|
|
23
|
-
|
|
56
|
+
share_bps: import("@mysten/sui/bcs").BcsStruct<{
|
|
57
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
58
|
+
key: import("@mysten/sui/bcs").BcsType<null, null, string>;
|
|
59
|
+
value: import("@mysten/sui/bcs").BcsType<bigint, bigint, string>;
|
|
60
|
+
delay_ms: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
61
|
+
pending: import("@mysten/sui/bcs").BcsType<{
|
|
62
|
+
value: bigint;
|
|
63
|
+
delay_ms: bigint;
|
|
64
|
+
ready_at_ms: bigint;
|
|
65
|
+
} | null, {
|
|
66
|
+
value: bigint;
|
|
67
|
+
delay_ms: bigint;
|
|
68
|
+
ready_at_ms: bigint;
|
|
69
|
+
} | null | undefined, `Option<${string}>`>;
|
|
70
|
+
}, string>;
|
|
71
|
+
cap_id: import("@mysten/sui/bcs").BcsStruct<{
|
|
72
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
73
|
+
key: import("@mysten/sui/bcs").BcsType<null, null, string>;
|
|
74
|
+
value: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
75
|
+
delay_ms: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
76
|
+
pending: import("@mysten/sui/bcs").BcsType<{
|
|
77
|
+
value: string;
|
|
78
|
+
delay_ms: bigint;
|
|
79
|
+
ready_at_ms: bigint;
|
|
80
|
+
} | null, {
|
|
81
|
+
value: string;
|
|
82
|
+
delay_ms: bigint;
|
|
83
|
+
ready_at_ms: bigint;
|
|
84
|
+
} | null | undefined, `Option<${string}>`>;
|
|
85
|
+
}, string>;
|
|
24
86
|
id: import("@mysten/sui/bcs").BcsStruct<{
|
|
25
87
|
id: import("@mysten/sui/bcs").BcsStruct<{
|
|
26
88
|
bytes: import("@mysten/sui/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
@@ -35,9 +97,31 @@ export type PartnerObject = SharedObjectIdentity & {
|
|
|
35
97
|
export declare function decodePartnerObject(object: PartnerObject, partnersPackageId: string): PartnerState;
|
|
36
98
|
export declare function getPartner(client: ClientWithCoreApi, objectId: string, partnersPackageId: string): Promise<PartnerState>;
|
|
37
99
|
/**
|
|
38
|
-
* Mirrors `blast_partners::pay`: the partner's share of `fee`
|
|
39
|
-
* one trade, in that coin's atoms)
|
|
40
|
-
* remainder.
|
|
100
|
+
* Mirrors `blast_partners::pay`: the partner's applied share of `fee`
|
|
101
|
+
* (Blast's fee on one trade, in that coin's atoms), rounded down; Blast keeps
|
|
102
|
+
* the remainder.
|
|
103
|
+
*/
|
|
104
|
+
export declare function partnerPayment(partner: Pick<PartnerTerms, "shareBps">, fee: bigint): bigint;
|
|
105
|
+
/**
|
|
106
|
+
* BCS layout of `blast_partners::partner_list::PartnerList`, embedded in a
|
|
107
|
+
* product's configuration (`LaunchConfig.partners`,
|
|
108
|
+
* `CreationPolicy.partners`). `parent` is that configuration's ID; each
|
|
109
|
+
* accepted partner is an entry of the `acceptance_ends_at_ms` table.
|
|
110
|
+
*/
|
|
111
|
+
export declare const partnerListBcs: import("@mysten/sui/bcs").BcsStruct<{
|
|
112
|
+
parent: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
113
|
+
acceptance_ends_at_ms: import("@mysten/sui/bcs").BcsStruct<{
|
|
114
|
+
id: import("@mysten/sui/bcs").BcsType<string, string, string>;
|
|
115
|
+
size: import("@mysten/sui/bcs").BcsType<bigint, bigint, "u64">;
|
|
116
|
+
}, string>;
|
|
117
|
+
}, string>;
|
|
118
|
+
export type PartnerList = ReturnType<typeof partnerListBcs.parse>;
|
|
119
|
+
/**
|
|
120
|
+
* Reads one entry of a `PartnerList`'s `acceptance_ends_at_ms` table (its
|
|
121
|
+
* `id`): the millisecond from which new sales stop naming `partnerId`, or
|
|
122
|
+
* `U64_MAX` while it is accepted without end. Null when the list never
|
|
123
|
+
* accepted the partner. A partner is accepted at `now` when `now` is before
|
|
124
|
+
* the returned time (`partner_list::is_accepted`).
|
|
41
125
|
*/
|
|
42
|
-
export declare function
|
|
126
|
+
export declare function getPartnerAcceptance(client: ClientWithCoreApi, listTableId: string, partnerId: string): Promise<bigint | null>;
|
|
43
127
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAejE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,aAAe,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,sDAAsD;IACtD,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,eAAe;IAC1B,SAAS;IACT,SAAS;;;;;;;;;;;;;;;IACT,MAAM;;;;;;;;;;;;;;;CACP,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAGrB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,oBAAoB,GAAG,YAAY,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,oBAAoB,GAAG;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,iBAAiB,EAAE,MAAM,GACxB,YAAY,CA4Bd;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,EACvC,GAAG,EAAE,MAAM,GACV,MAAM,CAER;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc;;;;;;UAGzB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAElE;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB"}
|
package/dist/state.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import { addressBcs, suiObjectIdBcs, suiUidBcs, u64Bcs, } from "@interest-protocol/blast-core/bcs";
|
|
1
|
+
import { addressBcs, delayedBcs, suiObjectIdBcs, suiUidBcs, tableBcs, u64Bcs, unitKeyBcs, } from "@interest-protocol/blast-core/bcs";
|
|
2
2
|
import { BASIS_POINTS_DENOMINATOR, mulDivDown, normalizePositiveU64, } from "@interest-protocol/blast-core/integers";
|
|
3
|
-
import { timelockedBcs, timelockedValue, } from "@interest-protocol/blast-core/timelock";
|
|
4
3
|
import { bcs } from "@mysten/sui/bcs";
|
|
4
|
+
import { ObjectError } from "@mysten/sui/client";
|
|
5
5
|
import { normalizeSuiObjectId, parseStructTag } from "@mysten/sui/utils";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* `blast_partners::delay_ms`: the fixed notice before a share or cap Blast
|
|
8
|
+
* proposes can be applied.
|
|
9
|
+
*/
|
|
7
10
|
export const PARTNER_DELAY_MS = 604800000n;
|
|
8
11
|
export const partnerTermsBcs = {
|
|
9
12
|
recipient: addressBcs,
|
|
10
|
-
share_bps:
|
|
11
|
-
cap_id:
|
|
13
|
+
share_bps: delayedBcs(unitKeyBcs, u64Bcs),
|
|
14
|
+
cap_id: delayedBcs(unitKeyBcs, suiObjectIdBcs),
|
|
12
15
|
};
|
|
13
16
|
/** BCS layout of `blast_partners::blast_partners::Partner`. */
|
|
14
17
|
export const partnerBcs = bcs.struct("Partner", {
|
|
@@ -24,7 +27,9 @@ export function decodePartnerObject(object, partnersPackageId) {
|
|
|
24
27
|
}
|
|
25
28
|
const parsed = partnerBcs.parse(object.content);
|
|
26
29
|
const objectId = normalizeSuiObjectId(object.objectId);
|
|
27
|
-
if (normalizeSuiObjectId(parsed.id.id.bytes) !== objectId
|
|
30
|
+
if (normalizeSuiObjectId(parsed.id.id.bytes) !== objectId ||
|
|
31
|
+
parsed.share_bps.parent !== objectId ||
|
|
32
|
+
parsed.cap_id.parent !== objectId) {
|
|
28
33
|
throw new TypeError(`partner ${object.objectId} has a mismatched UID`);
|
|
29
34
|
}
|
|
30
35
|
return {
|
|
@@ -51,11 +56,45 @@ export async function getPartner(client, objectId, partnersPackageId) {
|
|
|
51
56
|
}, partnersPackageId);
|
|
52
57
|
}
|
|
53
58
|
/**
|
|
54
|
-
* Mirrors `blast_partners::pay`: the partner's share of `fee`
|
|
55
|
-
* one trade, in that coin's atoms)
|
|
56
|
-
* remainder.
|
|
59
|
+
* Mirrors `blast_partners::pay`: the partner's applied share of `fee`
|
|
60
|
+
* (Blast's fee on one trade, in that coin's atoms), rounded down; Blast keeps
|
|
61
|
+
* the remainder.
|
|
62
|
+
*/
|
|
63
|
+
export function partnerPayment(partner, fee) {
|
|
64
|
+
return mulDivDown(fee, partner.shareBps.value, BASIS_POINTS_DENOMINATOR);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* BCS layout of `blast_partners::partner_list::PartnerList`, embedded in a
|
|
68
|
+
* product's configuration (`LaunchConfig.partners`,
|
|
69
|
+
* `CreationPolicy.partners`). `parent` is that configuration's ID; each
|
|
70
|
+
* accepted partner is an entry of the `acceptance_ends_at_ms` table.
|
|
57
71
|
*/
|
|
58
|
-
export
|
|
59
|
-
|
|
72
|
+
export const partnerListBcs = bcs.struct("PartnerList", {
|
|
73
|
+
parent: suiObjectIdBcs,
|
|
74
|
+
acceptance_ends_at_ms: tableBcs,
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* Reads one entry of a `PartnerList`'s `acceptance_ends_at_ms` table (its
|
|
78
|
+
* `id`): the millisecond from which new sales stop naming `partnerId`, or
|
|
79
|
+
* `U64_MAX` while it is accepted without end. Null when the list never
|
|
80
|
+
* accepted the partner. A partner is accepted at `now` when `now` is before
|
|
81
|
+
* the returned time (`partner_list::is_accepted`).
|
|
82
|
+
*/
|
|
83
|
+
export async function getPartnerAcceptance(client, listTableId, partnerId) {
|
|
84
|
+
try {
|
|
85
|
+
const { dynamicField } = await client.core.getDynamicField({
|
|
86
|
+
parentId: normalizeSuiObjectId(listTableId),
|
|
87
|
+
name: {
|
|
88
|
+
type: "0x2::object::ID",
|
|
89
|
+
bcs: suiObjectIdBcs.serialize(partnerId).toBytes(),
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
return u64Bcs.parse(dynamicField.value.bcs);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error instanceof ObjectError && error.reason === "notFound")
|
|
96
|
+
return null;
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
60
99
|
}
|
|
61
100
|
//# sourceMappingURL=state.js.map
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|