@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/transactions.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { AdminCalls } from "@interest-protocol/blast-admin-sdk/transactions";
|
|
|
3
3
|
import type { SharedObjectReference } from "@interest-protocol/blast-core/sui";
|
|
4
4
|
import type { TransactionObjectArgument, TransactionObjectInput, TransactionResult } from "@mysten/sui/transactions";
|
|
5
5
|
import { Transaction } from "@mysten/sui/transactions";
|
|
6
|
-
/** The
|
|
6
|
+
/** The canonical `blast_partners` package (immutability deferred) and the ACL its `PartnerAdmin` signs in to. */
|
|
7
7
|
export type PartnersDeployment = {
|
|
8
8
|
packageId: string;
|
|
9
9
|
admin: AdminDeployment;
|
|
@@ -32,19 +32,44 @@ export declare class PartnersCalls {
|
|
|
32
32
|
recipient: string;
|
|
33
33
|
shareBps: bigint;
|
|
34
34
|
}): (tx: Transaction) => void;
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* `schedule_share` (`PartnerAdmin`): proposes the share, which `applyShare`
|
|
37
|
+
* applies once `PARTNER_DELAY_MS` has passed. A new proposal replaces a
|
|
38
|
+
* pending one and restarts the notice.
|
|
39
|
+
*/
|
|
36
40
|
scheduleShare(options: {
|
|
37
41
|
partner: SharedObjectReference<true>;
|
|
38
42
|
adminWitness: TransactionObjectInput;
|
|
39
43
|
shareBps: bigint;
|
|
40
44
|
}): (tx: Transaction) => void;
|
|
41
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `schedule_cap` (`PartnerAdmin`): proposes moving the partner to the cap
|
|
47
|
+
* `capId`, which `applyCap` applies once `PARTNER_DELAY_MS` has passed.
|
|
48
|
+
*/
|
|
42
49
|
scheduleCap(options: {
|
|
43
50
|
partner: SharedObjectReference<true>;
|
|
44
51
|
adminWitness: TransactionObjectInput;
|
|
45
52
|
capId: string;
|
|
46
53
|
}): (tx: Transaction) => void;
|
|
47
|
-
/** `
|
|
54
|
+
/** `apply_share`: anyone applies the proposed share once its notice has passed. */
|
|
55
|
+
applyShare(options: {
|
|
56
|
+
partner: SharedObjectReference<true>;
|
|
57
|
+
}): (tx: Transaction) => void;
|
|
58
|
+
/** `apply_cap`: anyone applies the proposed managing cap once its notice has passed. */
|
|
59
|
+
applyCap(options: {
|
|
60
|
+
partner: SharedObjectReference<true>;
|
|
61
|
+
}): (tx: Transaction) => void;
|
|
62
|
+
/** `cancel_share` (`PartnerAdmin`): discards the proposed share, even a ready one. */
|
|
63
|
+
cancelShare(options: {
|
|
64
|
+
partner: SharedObjectReference<true>;
|
|
65
|
+
adminWitness: TransactionObjectInput;
|
|
66
|
+
}): (tx: Transaction) => void;
|
|
67
|
+
/** `cancel_cap` (`PartnerAdmin`): discards the proposed managing cap, even a ready one. */
|
|
68
|
+
cancelCap(options: {
|
|
69
|
+
partner: SharedObjectReference<true>;
|
|
70
|
+
adminWitness: TransactionObjectInput;
|
|
71
|
+
}): (tx: Transaction) => void;
|
|
72
|
+
/** `set_recipient`: the partner's applied cap sets where it is paid, at once. */
|
|
48
73
|
setRecipient(options: {
|
|
49
74
|
partner: SharedObjectReference<true>;
|
|
50
75
|
partnerCap: TransactionObjectInput;
|
|
@@ -78,6 +103,20 @@ export declare class PartnersTransactions {
|
|
|
78
103
|
partner: SharedObjectReference<true>;
|
|
79
104
|
capId: string;
|
|
80
105
|
}): Transaction;
|
|
106
|
+
applyShare(options: {
|
|
107
|
+
partner: SharedObjectReference<true>;
|
|
108
|
+
}): Transaction;
|
|
109
|
+
applyCap(options: {
|
|
110
|
+
partner: SharedObjectReference<true>;
|
|
111
|
+
}): Transaction;
|
|
112
|
+
cancelShare(options: {
|
|
113
|
+
adminCapId: string;
|
|
114
|
+
partner: SharedObjectReference<true>;
|
|
115
|
+
}): Transaction;
|
|
116
|
+
cancelCap(options: {
|
|
117
|
+
adminCapId: string;
|
|
118
|
+
partner: SharedObjectReference<true>;
|
|
119
|
+
}): Transaction;
|
|
81
120
|
setRecipient(options: {
|
|
82
121
|
partner: SharedObjectReference<true>;
|
|
83
122
|
partnerCapId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AACvF,OAAO,EACL,UAAU,EAEX,MAAM,iDAAiD,CAAC;AAEzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"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"}
|
package/dist/transactions.js
CHANGED
|
@@ -49,7 +49,11 @@ export class PartnersCalls {
|
|
|
49
49
|
});
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* `schedule_share` (`PartnerAdmin`): proposes the share, which `applyShare`
|
|
54
|
+
* applies once `PARTNER_DELAY_MS` has passed. A new proposal replaces a
|
|
55
|
+
* pending one and restarts the notice.
|
|
56
|
+
*/
|
|
53
57
|
scheduleShare(options) {
|
|
54
58
|
const shareBps = requireBasisPoints("shareBps", options.shareBps);
|
|
55
59
|
return (tx) => {
|
|
@@ -64,7 +68,10 @@ export class PartnersCalls {
|
|
|
64
68
|
});
|
|
65
69
|
};
|
|
66
70
|
}
|
|
67
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* `schedule_cap` (`PartnerAdmin`): proposes moving the partner to the cap
|
|
73
|
+
* `capId`, which `applyCap` applies once `PARTNER_DELAY_MS` has passed.
|
|
74
|
+
*/
|
|
68
75
|
scheduleCap(options) {
|
|
69
76
|
const capId = normalizeSuiObjectId(options.capId);
|
|
70
77
|
return (tx) => {
|
|
@@ -79,7 +86,49 @@ export class PartnersCalls {
|
|
|
79
86
|
});
|
|
80
87
|
};
|
|
81
88
|
}
|
|
82
|
-
/** `
|
|
89
|
+
/** `apply_share`: anyone applies the proposed share once its notice has passed. */
|
|
90
|
+
applyShare(options) {
|
|
91
|
+
return (tx) => {
|
|
92
|
+
tx.moveCall({
|
|
93
|
+
target: this.#target("apply_share"),
|
|
94
|
+
arguments: [partner(tx, options.partner), tx.object.clock()],
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** `apply_cap`: anyone applies the proposed managing cap once its notice has passed. */
|
|
99
|
+
applyCap(options) {
|
|
100
|
+
return (tx) => {
|
|
101
|
+
tx.moveCall({
|
|
102
|
+
target: this.#target("apply_cap"),
|
|
103
|
+
arguments: [partner(tx, options.partner), tx.object.clock()],
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** `cancel_share` (`PartnerAdmin`): discards the proposed share, even a ready one. */
|
|
108
|
+
cancelShare(options) {
|
|
109
|
+
return (tx) => {
|
|
110
|
+
tx.moveCall({
|
|
111
|
+
target: this.#target("cancel_share"),
|
|
112
|
+
arguments: [
|
|
113
|
+
partner(tx, options.partner),
|
|
114
|
+
tx.object(options.adminWitness),
|
|
115
|
+
],
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** `cancel_cap` (`PartnerAdmin`): discards the proposed managing cap, even a ready one. */
|
|
120
|
+
cancelCap(options) {
|
|
121
|
+
return (tx) => {
|
|
122
|
+
tx.moveCall({
|
|
123
|
+
target: this.#target("cancel_cap"),
|
|
124
|
+
arguments: [
|
|
125
|
+
partner(tx, options.partner),
|
|
126
|
+
tx.object(options.adminWitness),
|
|
127
|
+
],
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/** `set_recipient`: the partner's applied cap sets where it is paid, at once. */
|
|
83
132
|
setRecipient(options) {
|
|
84
133
|
const recipient = normalizeSuiAddress(options.recipient);
|
|
85
134
|
return (tx) => {
|
|
@@ -89,7 +138,6 @@ export class PartnersCalls {
|
|
|
89
138
|
partner(tx, options.partner),
|
|
90
139
|
tx.object(options.partnerCap),
|
|
91
140
|
tx.pure.address(recipient),
|
|
92
|
-
tx.object.clock(),
|
|
93
141
|
],
|
|
94
142
|
});
|
|
95
143
|
};
|
|
@@ -127,6 +175,22 @@ export class PartnersTransactions {
|
|
|
127
175
|
scheduleCap(options) {
|
|
128
176
|
return this.#asPartnerAdmin(options.adminCapId, (adminWitness) => this.call.scheduleCap({ ...options, adminWitness }));
|
|
129
177
|
}
|
|
178
|
+
applyShare(options) {
|
|
179
|
+
const tx = new Transaction();
|
|
180
|
+
tx.add(this.call.applyShare(options));
|
|
181
|
+
return tx;
|
|
182
|
+
}
|
|
183
|
+
applyCap(options) {
|
|
184
|
+
const tx = new Transaction();
|
|
185
|
+
tx.add(this.call.applyCap(options));
|
|
186
|
+
return tx;
|
|
187
|
+
}
|
|
188
|
+
cancelShare(options) {
|
|
189
|
+
return this.#asPartnerAdmin(options.adminCapId, (adminWitness) => this.call.cancelShare({ ...options, adminWitness }));
|
|
190
|
+
}
|
|
191
|
+
cancelCap(options) {
|
|
192
|
+
return this.#asPartnerAdmin(options.adminCapId, (adminWitness) => this.call.cancelCap({ ...options, adminWitness }));
|
|
193
|
+
}
|
|
130
194
|
setRecipient(options) {
|
|
131
195
|
const tx = new Transaction();
|
|
132
196
|
tx.add(this.call.setRecipient({ ...options, partnerCap: options.partnerCapId }));
|
package/dist/transactions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,wBAAwB,GACzB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAE5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAMnF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAQ9E,8CAA8C;AAC9C,MAAM,OAAO,aAAa;IACf,UAAU,CAAqB;IAC/B,KAAK,CAAa;IAE3B,YAAY,UAA8B;QACxC,IAAI,CAAC,UAAU,GAAG;YAChB,SAAS,EAAE,oBAAoB,CAAC,UAAU,CAAC,SAAS,CAAC;YACrD,KAAK,EAAE,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC;SAClD,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,gEAAgE;IAChE,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,gCAAgC,CAAC;IACtE,CAAC;IAED,+CAA+C;IAC/C,MAAM,CAAC,OAA6C;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,MAAM;QACJ,OAAO,CAAC,EAAe,EAAqB,EAAE,CAC5C,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,OAKR;QACC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,CAAC,EAAe,EAAQ,EAAE;YAC/B,EAAE,CAAC,QAAQ,CAAC;gBACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAChC,SAAS,EAAE;oBACT,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;oBAC/B,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;oBACjB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;oBAC1B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;iBACtB;aACF,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interest-protocol/blast-partners-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Blast partners SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@interest-protocol/blast-admin-sdk": "0.
|
|
53
|
-
"@interest-protocol/blast-core": "0.
|
|
52
|
+
"@interest-protocol/blast-admin-sdk": "0.2.0",
|
|
53
|
+
"@interest-protocol/blast-core": "0.2.0"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@mysten/sui": "^2.26.2"
|
package/src/events.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {
|
|
2
|
+
DecodedDelayedEvent,
|
|
3
|
+
DelayedKeySpecs,
|
|
4
|
+
} from "@interest-protocol/blast-admin-sdk/events";
|
|
5
|
+
import { decodeDelayedEvent } from "@interest-protocol/blast-admin-sdk/events";
|
|
6
|
+
import {
|
|
7
|
+
addressBcs,
|
|
8
|
+
suiObjectIdBcs,
|
|
9
|
+
u64Bcs,
|
|
10
|
+
unitKeyBcs,
|
|
11
|
+
} from "@interest-protocol/blast-core/bcs";
|
|
2
12
|
import type { SuiEventPosition } from "@interest-protocol/blast-core/events";
|
|
3
13
|
import {
|
|
4
14
|
normalizeSuiEventPosition,
|
|
@@ -11,24 +21,53 @@ import {
|
|
|
11
21
|
normalizeSuiAddress,
|
|
12
22
|
parseStructTag,
|
|
13
23
|
} from "@mysten/sui/utils";
|
|
14
|
-
import { partnerTermsBcs } from "./state.ts";
|
|
15
24
|
|
|
16
25
|
/** The `blast_partners` events, in Move field order. */
|
|
17
26
|
export const partnerEventBcs = {
|
|
18
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* At registration and on every recipient change: the partner's recipient.
|
|
29
|
+
* Share and cap terms are `blast_admin::delayed` events (`partnerDelayedKeys`).
|
|
30
|
+
*/
|
|
19
31
|
PartnerUpdated: bcs.struct("PartnerUpdated", {
|
|
20
32
|
partner_id: suiObjectIdBcs,
|
|
21
|
-
|
|
33
|
+
recipient: addressBcs,
|
|
22
34
|
}),
|
|
23
35
|
/** `amount` of the event's coin type sent to the partner's recipient. */
|
|
24
36
|
PartnerPaid: bcs.struct("PartnerPaid", {
|
|
25
37
|
partner_id: suiObjectIdBcs,
|
|
26
38
|
amount: u64Bcs,
|
|
27
39
|
}),
|
|
40
|
+
/**
|
|
41
|
+
* `partner_list::add`: the list owned by `parent` (a product configuration's
|
|
42
|
+
* ID) accepts `partner_id` without end.
|
|
43
|
+
*/
|
|
44
|
+
PartnerAdded: bcs.struct("PartnerAdded", {
|
|
45
|
+
parent: suiObjectIdBcs,
|
|
46
|
+
partner_id: suiObjectIdBcs,
|
|
47
|
+
}),
|
|
48
|
+
/** `partner_list::remove`: new sales stop naming the partner from `acceptance_ends_at_ms`. */
|
|
49
|
+
PartnerRemoved: bcs.struct("PartnerRemoved", {
|
|
50
|
+
parent: suiObjectIdBcs,
|
|
51
|
+
partner_id: suiObjectIdBcs,
|
|
52
|
+
acceptance_ends_at_ms: u64Bcs,
|
|
53
|
+
}),
|
|
54
|
+
/** `partner_list::destroy`: the list owned by `parent` and its entries are gone. */
|
|
55
|
+
PartnerListDestroyed: bcs.struct("PartnerListDestroyed", {
|
|
56
|
+
parent: suiObjectIdBcs,
|
|
57
|
+
}),
|
|
28
58
|
};
|
|
29
59
|
|
|
30
60
|
export type PartnerEventKind = keyof typeof partnerEventBcs;
|
|
31
61
|
|
|
62
|
+
/** The module each event is defined in. */
|
|
63
|
+
const PARTNER_EVENT_MODULES: Record<PartnerEventKind, string> = {
|
|
64
|
+
PartnerUpdated: "blast_partners",
|
|
65
|
+
PartnerPaid: "blast_partners",
|
|
66
|
+
PartnerAdded: "partner_list",
|
|
67
|
+
PartnerRemoved: "partner_list",
|
|
68
|
+
PartnerListDestroyed: "partner_list",
|
|
69
|
+
};
|
|
70
|
+
|
|
32
71
|
export type PartnerEventPayloads = {
|
|
33
72
|
[Kind in PartnerEventKind]: ReturnType<
|
|
34
73
|
(typeof partnerEventBcs)[Kind]["parse"]
|
|
@@ -47,7 +86,10 @@ export type DecodedPartnerEvent = {
|
|
|
47
86
|
};
|
|
48
87
|
}[PartnerEventKind];
|
|
49
88
|
|
|
50
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Decodes one `<partnersPackageId>::blast_partners::<Kind>` or
|
|
91
|
+
* `<partnersPackageId>::partner_list::<Kind>` event.
|
|
92
|
+
*/
|
|
51
93
|
export function decodePartnerEvent(
|
|
52
94
|
event: SuiClientTypes.EventEntry,
|
|
53
95
|
partnersPackageId: string,
|
|
@@ -57,8 +99,8 @@ export function decodePartnerEvent(
|
|
|
57
99
|
const [coinType = null, ...extra] = tag.typeParams;
|
|
58
100
|
if (
|
|
59
101
|
tag.address !== normalizeSuiAddress(partnersPackageId) ||
|
|
60
|
-
tag.module !== "blast_partners" ||
|
|
61
102
|
!Object.hasOwn(partnerEventBcs, kind) ||
|
|
103
|
+
tag.module !== PARTNER_EVENT_MODULES[kind] ||
|
|
62
104
|
(coinType === null) === (kind === "PartnerPaid") ||
|
|
63
105
|
extra.length > 0
|
|
64
106
|
) {
|
|
@@ -74,6 +116,45 @@ export function decodePartnerEvent(
|
|
|
74
116
|
} as DecodedPartnerEvent;
|
|
75
117
|
}
|
|
76
118
|
|
|
77
|
-
export function partnerEventId(event:
|
|
119
|
+
export function partnerEventId(event: { position: SuiEventPosition }): string {
|
|
78
120
|
return suiEventId(event.position);
|
|
79
121
|
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* `blast_partners` keys of `blast_admin::delayed` settings, each owned by the
|
|
125
|
+
* partner: its share in basis points and its managing cap's ID. Registration
|
|
126
|
+
* emits `DelayedCreated` for both; a proposal changes nothing until
|
|
127
|
+
* `DelayedApplied`.
|
|
128
|
+
*/
|
|
129
|
+
export const partnerDelayedKeys = {
|
|
130
|
+
Share: {
|
|
131
|
+
key: "blast_partners::ShareKey",
|
|
132
|
+
family: "setting",
|
|
133
|
+
keyBcs: unitKeyBcs,
|
|
134
|
+
valueBcs: u64Bcs,
|
|
135
|
+
valueType: "u64",
|
|
136
|
+
},
|
|
137
|
+
Cap: {
|
|
138
|
+
key: "blast_partners::CapKey",
|
|
139
|
+
family: "setting",
|
|
140
|
+
keyBcs: unitKeyBcs,
|
|
141
|
+
valueBcs: suiObjectIdBcs,
|
|
142
|
+
valueType: "0x2::object::ID",
|
|
143
|
+
},
|
|
144
|
+
} as const satisfies DelayedKeySpecs;
|
|
145
|
+
|
|
146
|
+
export type DecodedPartnerDelayedEvent = DecodedDelayedEvent<
|
|
147
|
+
typeof partnerDelayedKeys
|
|
148
|
+
>;
|
|
149
|
+
|
|
150
|
+
/** Decodes a `<adminPackageId>::delayed` event keyed by `blast_partners`. */
|
|
151
|
+
export function decodePartnerDelayedEvent(
|
|
152
|
+
event: SuiClientTypes.EventEntry,
|
|
153
|
+
packages: { adminPackageId: string; partnersPackageId: string },
|
|
154
|
+
): DecodedPartnerDelayedEvent {
|
|
155
|
+
return decodeDelayedEvent(event, {
|
|
156
|
+
adminPackageId: packages.adminPackageId,
|
|
157
|
+
packageId: packages.partnersPackageId,
|
|
158
|
+
keys: partnerDelayedKeys,
|
|
159
|
+
});
|
|
160
|
+
}
|
package/src/reducer.ts
CHANGED
|
@@ -1,18 +1,43 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { U64_MAX } from "@interest-protocol/blast-core/integers";
|
|
2
|
+
import type {
|
|
3
|
+
DecodedPartnerDelayedEvent,
|
|
4
|
+
DecodedPartnerEvent,
|
|
5
|
+
PartnerEventKind,
|
|
6
|
+
} from "./events.ts";
|
|
2
7
|
import { partnerEventBcs, partnerEventId } from "./events.ts";
|
|
3
|
-
import type { PartnerTerms } from "./state.ts";
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
/** A proposed share or cap: it applies only when someone applies it, at or after `readyAtMs`. */
|
|
10
|
+
export type PartnerProposal<T> = { value: T; readyAtMs: bigint };
|
|
11
|
+
|
|
12
|
+
export type PartnerProjection = {
|
|
6
13
|
partnerId: string;
|
|
14
|
+
/** Null until the partner's `PartnerUpdated`. */
|
|
15
|
+
recipient: string | null;
|
|
16
|
+
/** The applied share in basis points; null until its `DelayedCreated`. */
|
|
17
|
+
shareBps: bigint | null;
|
|
18
|
+
/** The applied managing cap; null until its `DelayedCreated`. */
|
|
19
|
+
capId: string | null;
|
|
20
|
+
pendingShare: PartnerProposal<bigint> | null;
|
|
21
|
+
pendingCap: PartnerProposal<string> | null;
|
|
7
22
|
/** Everything sent to the partner, by coin type. */
|
|
8
23
|
paid: Readonly<Record<string, bigint>>;
|
|
9
24
|
};
|
|
10
25
|
|
|
11
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Partners rebuilt from their events and their `blast_admin::delayed` events
|
|
28
|
+
* (`decodePartnerDelayedEvent`); terms match `PartnerState` once replayed.
|
|
29
|
+
*/
|
|
12
30
|
export type PartnersEventProjection = {
|
|
13
31
|
appliedEventIds: Readonly<Record<string, true>>;
|
|
32
|
+
/** Counts `blast_partners` events only. */
|
|
14
33
|
eventCounts: Readonly<Record<PartnerEventKind, number>>;
|
|
15
34
|
partners: Readonly<Record<string, PartnerProjection>>;
|
|
35
|
+
/**
|
|
36
|
+
* Each `PartnerList` by parent (the product configuration's ID): every
|
|
37
|
+
* partner it named and the millisecond its acceptance ends (`U64_MAX`
|
|
38
|
+
* while accepted without end). A destroyed list is removed.
|
|
39
|
+
*/
|
|
40
|
+
lists: Readonly<Record<string, Readonly<Record<string, bigint>>>>;
|
|
16
41
|
};
|
|
17
42
|
|
|
18
43
|
export function createPartnersEventProjection(): PartnersEventProjection {
|
|
@@ -22,37 +47,59 @@ export function createPartnersEventProjection(): PartnersEventProjection {
|
|
|
22
47
|
Object.keys(partnerEventBcs).map((kind) => [kind, 0]),
|
|
23
48
|
) as Record<PartnerEventKind, number>,
|
|
24
49
|
partners: {},
|
|
50
|
+
lists: {},
|
|
25
51
|
};
|
|
26
52
|
}
|
|
27
53
|
|
|
28
54
|
/** Applies one event once; replaying an applied event returns `state` unchanged. */
|
|
29
55
|
export function reducePartnerEvent(
|
|
30
56
|
state: PartnersEventProjection,
|
|
31
|
-
event: DecodedPartnerEvent,
|
|
57
|
+
event: DecodedPartnerEvent | DecodedPartnerDelayedEvent,
|
|
32
58
|
): PartnersEventProjection {
|
|
33
59
|
const eventId = partnerEventId(event);
|
|
34
60
|
if (state.appliedEventIds[eventId]) return state;
|
|
61
|
+
const applied = { ...state.appliedEventIds, [eventId]: true as const };
|
|
62
|
+
if (event.source === "delayed") {
|
|
63
|
+
const partnerId = event.payload.parent;
|
|
64
|
+
return withPartner(
|
|
65
|
+
{ ...state, appliedEventIds: applied },
|
|
66
|
+
reduceTerms(state.partners[partnerId] ?? empty(partnerId), event),
|
|
67
|
+
);
|
|
68
|
+
}
|
|
35
69
|
const next: PartnersEventProjection = {
|
|
36
70
|
...state,
|
|
37
|
-
appliedEventIds:
|
|
71
|
+
appliedEventIds: applied,
|
|
38
72
|
eventCounts: {
|
|
39
73
|
...state.eventCounts,
|
|
40
74
|
[event.kind]: state.eventCounts[event.kind] + 1,
|
|
41
75
|
},
|
|
42
76
|
};
|
|
77
|
+
if (event.kind === "PartnerListDestroyed") {
|
|
78
|
+
const { [event.payload.parent]: _, ...lists } = state.lists;
|
|
79
|
+
return { ...next, lists };
|
|
80
|
+
}
|
|
81
|
+
if (event.kind === "PartnerAdded" || event.kind === "PartnerRemoved") {
|
|
82
|
+
const { parent, partner_id } = event.payload;
|
|
83
|
+
const acceptanceEndsAtMs =
|
|
84
|
+
event.kind === "PartnerAdded"
|
|
85
|
+
? U64_MAX
|
|
86
|
+
: event.payload.acceptance_ends_at_ms;
|
|
87
|
+
return {
|
|
88
|
+
...next,
|
|
89
|
+
lists: {
|
|
90
|
+
...state.lists,
|
|
91
|
+
[parent]: { ...state.lists[parent], [partner_id]: acceptanceEndsAtMs },
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
43
95
|
const partnerId = event.payload.partner_id;
|
|
44
96
|
const current = state.partners[partnerId];
|
|
45
|
-
if (event.kind === "PartnerUpdated")
|
|
46
|
-
const { recipient, share_bps, cap_id } = event.payload;
|
|
97
|
+
if (event.kind === "PartnerUpdated")
|
|
47
98
|
return withPartner(next, {
|
|
48
|
-
partnerId,
|
|
49
|
-
recipient,
|
|
50
|
-
shareBps: share_bps,
|
|
51
|
-
capId: cap_id,
|
|
52
|
-
paid: current?.paid ?? {},
|
|
99
|
+
...(current ?? empty(partnerId)),
|
|
100
|
+
recipient: event.payload.recipient,
|
|
53
101
|
});
|
|
54
|
-
|
|
55
|
-
// A partner is registered, with an update, before it can be paid.
|
|
102
|
+
// A partner is registered before it can be paid.
|
|
56
103
|
if (!current) return next;
|
|
57
104
|
const coinType = event.coinType;
|
|
58
105
|
return withPartner(next, {
|
|
@@ -64,6 +111,46 @@ export function reducePartnerEvent(
|
|
|
64
111
|
});
|
|
65
112
|
}
|
|
66
113
|
|
|
114
|
+
/** Applied and proposed terms; readiness alone changes nothing. */
|
|
115
|
+
function reduceTerms(
|
|
116
|
+
partner: PartnerProjection,
|
|
117
|
+
event: DecodedPartnerDelayedEvent,
|
|
118
|
+
): PartnerProjection {
|
|
119
|
+
const [applied, pending] =
|
|
120
|
+
event.name === "Share"
|
|
121
|
+
? (["shareBps", "pendingShare"] as const)
|
|
122
|
+
: (["capId", "pendingCap"] as const);
|
|
123
|
+
switch (event.kind) {
|
|
124
|
+
case "DelayedCreated":
|
|
125
|
+
case "DelayedApplied":
|
|
126
|
+
return { ...partner, [applied]: event.payload.value, [pending]: null };
|
|
127
|
+
case "DelayedScheduled":
|
|
128
|
+
return {
|
|
129
|
+
...partner,
|
|
130
|
+
[pending]: {
|
|
131
|
+
value: event.payload.value,
|
|
132
|
+
readyAtMs: event.payload.ready_at_ms,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
case "DelayedCancelled":
|
|
136
|
+
return { ...partner, [pending]: null };
|
|
137
|
+
default:
|
|
138
|
+
return partner;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function empty(partnerId: string): PartnerProjection {
|
|
143
|
+
return {
|
|
144
|
+
partnerId,
|
|
145
|
+
recipient: null,
|
|
146
|
+
shareBps: null,
|
|
147
|
+
capId: null,
|
|
148
|
+
pendingShare: null,
|
|
149
|
+
pendingCap: null,
|
|
150
|
+
paid: {},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
|
|
67
154
|
function withPartner(
|
|
68
155
|
state: PartnersEventProjection,
|
|
69
156
|
partner: PartnerProjection,
|