@xgamesfun/solana 0.26.3 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/js/approve/live-check.mjs +106 -1
- package/js/approve/page.html +1 -1
- package/js/approve/page.js +19 -5
- package/js/approve/server.mjs +192 -33
- package/js/chain/metadata.js +92 -0
- package/js/client/compressed.js +12 -5
- package/js/client/idl/loot.js +1 -1
- package/js/client/idl/loot.json +53 -7
- package/js/client/ix.js +44 -9
- package/js/economy/check.mjs +12 -4
- package/js/economy/cost.mjs +6 -5
- package/js/economy/explain.mjs +3 -2
- package/js/economy/guide.mjs +2 -2
- package/js/economy/live.mjs +27 -7
- package/js/economy/model.mjs +13 -2
- package/js/economy/plan.mjs +84 -27
- package/js/economy/schema.json +7 -1
- package/js/mcp/tools.mjs +31 -11
- package/js/play/index.js +519 -193
- package/package.json +1 -1
- package/release.json +5 -5
- package/skills/xsolana-economy/SKILL.md +4 -4
- package/skills/xsolana-economy/references/apps.md +6 -0
- package/skills/xsolana-economy/references/telling-the-person.md +4 -2
- package/skills/xsolana-economy/references/trust-and-cheating.md +4 -3
- package/types/chain/metadata.d.ts +45 -0
- package/types/client/compressed.d.ts +5 -2
- package/types/client/ix.d.ts +38 -7
- package/types/economy/cost.d.mts +11 -3
- package/types/economy/live.d.mts +29 -5
- package/types/economy/model.d.mts +6 -0
- package/types/economy/plan.d.mts +22 -5
- package/types/play/index.d.ts +214 -129
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xgamesfun/solana",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"mcpName": "io.github.XGamesFun/solana-kit",
|
|
5
5
|
"description": "Loot boxes, gacha, shops, lotteries, auctions, NFT staking, crafting and rewards on Solana without writing a smart contract: one shared program, its JS client, a CLI, and an MCP server and skill so Claude Code, Codex or any AI agent can design, check, simulate and launch an economy.",
|
|
6
6
|
"license": "Apache-2.0",
|
package/release.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.27.0",
|
|
3
3
|
"programId": "9cwqM1TXytPnFZsLfmUyv2dg4uW6Ch9C6UJVPns7NFQ",
|
|
4
|
-
"sbfBytes":
|
|
5
|
-
"sbfSha256": "
|
|
6
|
-
"idlSha256": "
|
|
7
|
-
"clientSha256": "
|
|
4
|
+
"sbfBytes": 1794664,
|
|
5
|
+
"sbfSha256": "3b11c460548a4fec865fd902431a94ac13a71c3a1013e4516783515e5d266bd6",
|
|
6
|
+
"idlSha256": "62364c5fd5be8aa001f4d72fb87b121b045dea07668f9b5ec9856d323d6cf445",
|
|
7
|
+
"clientSha256": "179b7ff59398a39cce70df059c1781e91a3d0366791797b368d8030169a507ad"
|
|
8
8
|
}
|
|
@@ -9,9 +9,9 @@ An economy is one JSON spec (`xsolana.json` in the project) on **loot**, a Solan
|
|
|
9
9
|
writes or deploys a contract: the spec is checked, simulated and priced by the `xsolana_*` tools, and the project's
|
|
10
10
|
owner puts it live by approving in their own wallet. It runs on **devnet** until the program is audited.
|
|
11
11
|
|
|
12
|
-
The tools are the `xsolana_*` MCP tools. Without MCP, the same from a terminal: `npx -y @xgamesfun/solana@0.
|
|
13
|
-
`npx -y @xgamesfun/solana@0.
|
|
14
|
-
or `npx -y @xgamesfun/solana@0.
|
|
12
|
+
The tools are the `xsolana_*` MCP tools. Without MCP, the same from a terminal: `npx -y @xgamesfun/solana@0.27.0 <guide|examples|check|simulate|cost|explain|review|publish|status> [xsolana.json]`,
|
|
13
|
+
`npx -y @xgamesfun/solana@0.27.0 token <mint>` for a coin made elsewhere,
|
|
14
|
+
or `npx -y @xgamesfun/solana@0.27.0 tool <name> '<json>'` for any tool (always with the exact version).
|
|
15
15
|
|
|
16
16
|
## Rules (always)
|
|
17
17
|
|
|
@@ -123,7 +123,7 @@ or `npx -y @xgamesfun/solana@0.26.3 tool <name> '<json>'` for any tool (always w
|
|
|
123
123
|
level would cost. Run it again after every change that touches a route that pays.
|
|
124
124
|
9. **When they say "put it live"**: `xsolana_publish` lists every step and its cost and gives the command. Tell them to
|
|
125
125
|
run it themselves in the project folder, exactly as `xsolana_publish` gives it (it names the exact version:
|
|
126
|
-
`npx -y @xgamesfun/solana@0.
|
|
126
|
+
`npx -y @xgamesfun/solana@0.27.0 approve xsolana.json`; never drop the version). It opens a page on their computer where
|
|
127
127
|
they connect a devnet wallet and approve; what lands is written back into `xsolana.json`. You publish nothing.
|
|
128
128
|
10. **After it is live**: `xsolana_status` shows each part on chain; read it before acting on what the person says
|
|
129
129
|
happened. A later change is the same loop: save, publish, and the approval sends only what changed. What only the
|
|
@@ -178,6 +178,12 @@ assetId, tree }` after a `loot.proveLeafIx` in the same transaction. `app.stakeN
|
|
|
178
178
|
of its `mint`), then `app.repay(asset, due, { repay })` pays exactly that, in the payer's one prompt (a loan whose
|
|
179
179
|
debt changed since is refused); a throwaway key that transaction funds sends the NFT home to its borrower, a pNFT's
|
|
180
180
|
or a compressed NFT's too (one prompt). A lender sees an overdue unpaid loan in `claims()` (`release`, to them).
|
|
181
|
+
- **An NFT its collection took back.** Whoever controls a collection the project does not can take an NFT out of a
|
|
182
|
+
hold, a loan or a listing, or burn it there. `claims()` then lists that hold or loan, for its player and for its
|
|
183
|
+
lender, as a `release` flagged `gone`: show `c.says` (closing it sends nothing, and a loan ends unpaid) and let
|
|
184
|
+
`app.claim(c)` close it. `app.listing(asset)` and `app.listings()` flag such a listing `gone`: show it as not for
|
|
185
|
+
sale. Its maker's `app.unlist` closes it, and `app.closeGone(asset)` lets anyone close it. Before a deposit, the
|
|
186
|
+
play module closes what an earlier owner left of the NFT, in the same prompt.
|
|
181
187
|
- **A grant that pays by rank**: a voucher with an `amount` (base units of the grant's token) pays that much, up to
|
|
182
188
|
the grant's; `app.claimGrant(key, { voucher })` passes it, and `{ proof, round, personHash, amount }` for a list.
|
|
183
189
|
- **The price the player saw is the most they pay**: `app.buy` and `app.openBox` need the listing `shop()` or
|
|
@@ -122,8 +122,10 @@ Don'ts:
|
|
|
122
122
|
- **A token the setup makes is named on chain as it goes live**: its `name`, its `symbol` and its `uri` (a link to a
|
|
123
123
|
JSON file the project hosts, `{ "name", "symbol", "image": "https://…" }`), which is what wallets and explorers show.
|
|
124
124
|
Ask for the name, the ticker and a picture before going live: with no `uri` it shows by name and ticker with no
|
|
125
|
-
picture. Only the owner's wallet can change the three later (Token Metadata's rule, not loot's)
|
|
126
|
-
|
|
125
|
+
picture. Only the owner's wallet can change the three later (Token Metadata's rule, not loot's): change them in the
|
|
126
|
+
spec and approve again, and the record is written again for the price of a transaction (approving reads the record
|
|
127
|
+
first: one its owner handed to another wallet, made unchangeable or gave a royalty or creators outside these tools
|
|
128
|
+
is left as it is, and the page says so at each approve until the spec gives the old name back). The record costs about 0.014 SOL (`xsolana_cost` says it:
|
|
127
129
|
rent, and 0.01 SOL Token Metadata keeps). A token that went live before the tools wrote one has none and
|
|
128
130
|
can't be given one: only a mint's own authority can name it, and its minting was handed on or turned off.
|
|
129
131
|
- **NFTs the project has no authority over** (any collection but its own): they count as they are. Say that
|
|
@@ -119,9 +119,10 @@ Run `xsolana_review` and go through what it reports; these are the points behind
|
|
|
119
119
|
enter: keep contests for results the server decides, or that anyone can check outside the game. A prize to each
|
|
120
120
|
winning entry with no stake and no gate pays one person with many wallets once a wallet.
|
|
121
121
|
15. **NFTs the project doesn't control.** The creator of an NFT with a permanent delegate can pull it back out of a
|
|
122
|
-
hold, a stake, a loan or a listing,
|
|
123
|
-
|
|
124
|
-
project
|
|
122
|
+
hold, a stake, a loan or a listing, or burn it there. Its record then closes without it (anyone may, and nothing
|
|
123
|
+
is paid: a lender is out what they lent), and `js/play` closes what an earlier owner left before the next owner's
|
|
124
|
+
deposit. A collection the project is only an update delegate of lets its owner and every other delegate mint NFTs
|
|
125
|
+
that read as the project's own items. Name only collections whose every writer the project trusts.
|
|
125
126
|
|
|
126
127
|
## Telling the person
|
|
127
128
|
|
|
@@ -36,5 +36,50 @@ export declare function createFungibleMetadataIx({ mint, authority, payer, name,
|
|
|
36
36
|
}[];
|
|
37
37
|
data: Uint8Array<any>;
|
|
38
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* Token Metadata's UpdateMetadataAccountV2 for a fungible token's record: a new name, ticker and link ('' for none),
|
|
41
|
+
* all three written as given. `authority` is the record's update authority (for a token a setup made: the project's
|
|
42
|
+
* owner) and signs; it stays the update authority, and the record stays changeable. The record's words are written
|
|
43
|
+
* whole, with no royalty, creators, collection or uses: as a record a setup made has them. One that was given any of
|
|
44
|
+
* those outside these tools would lose them (or refuse the write), so the approval sends this only to a record that
|
|
45
|
+
* has none (`parseRecord`'s `plain`; approve/live-check.mjs readRenames). The mint is untouched, and it costs only the
|
|
46
|
+
* transaction: the record keeps its size.
|
|
47
|
+
*/
|
|
48
|
+
export declare function updateFungibleMetadataIx({ mint, authority, name, symbol, uri }: {
|
|
49
|
+
authority: any;
|
|
50
|
+
mint: any;
|
|
51
|
+
name: any;
|
|
52
|
+
symbol: any;
|
|
53
|
+
uri?: string | undefined;
|
|
54
|
+
}): {
|
|
55
|
+
programId: string;
|
|
56
|
+
keys: {
|
|
57
|
+
pubkey: any;
|
|
58
|
+
isSigner: any;
|
|
59
|
+
isWritable: any;
|
|
60
|
+
}[];
|
|
61
|
+
data: Uint8Array<any>;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* A Token Metadata record as the chain holds it, or null when the data is not one (its first byte says a metadata
|
|
65
|
+
* record; the strings are padded with NULs to their full length):
|
|
66
|
+
* { updateAuthority, mint, name, symbol, uri, royalty, creators, mutable, collection, uses, plain }.
|
|
67
|
+
* `royalty`: its resale royalty, in hundredths of a percent. `creators`: how many it lists. `mutable`: its update
|
|
68
|
+
* authority can still change it. `collection`, `uses`: whether it names one. `plain`: none of royalty, creators,
|
|
69
|
+
* collection or uses, as a setup's own record is: writing its words again changes nothing else of it.
|
|
70
|
+
*/
|
|
71
|
+
export declare function parseRecord(data: any): {
|
|
72
|
+
updateAuthority: string;
|
|
73
|
+
mint: string;
|
|
74
|
+
name: string;
|
|
75
|
+
symbol: string;
|
|
76
|
+
uri: string;
|
|
77
|
+
royalty: number;
|
|
78
|
+
creators: number;
|
|
79
|
+
mutable: boolean;
|
|
80
|
+
collection: boolean;
|
|
81
|
+
uses: boolean;
|
|
82
|
+
plain: boolean;
|
|
83
|
+
} | null;
|
|
39
84
|
/** The update authority a Token Metadata record names (who can change its name, ticker and link). */
|
|
40
85
|
export declare const metadataUpdateAuthority: (data: any) => string | null;
|
|
@@ -6,8 +6,10 @@ export declare function proofLength(treeData: any): number;
|
|
|
6
6
|
/**
|
|
7
7
|
* A compressed NFT from an indexer's answers: `asset` (DAS `getAsset`), `proof` (DAS `getAssetProof`) and the tree
|
|
8
8
|
* account's bytes (`treeData`, for how much of the proof to pass). Returns { id, tree, nonce, owner, delegate,
|
|
9
|
-
* collection (or null), dataHash, creatorHash, assetDataHash (or null), flags, root, proof: [node, …] }. The
|
|
10
|
-
* must be against the tree's current root when it lands: fetch it just before sending.
|
|
9
|
+
* collection (or null), dataHash, creatorHash, assetDataHash (or null), flags, root, proof: [node, …], burnt }. The
|
|
10
|
+
* proof must be against the tree's current root when it lands: fetch it just before sending. A burned NFT (DAS says
|
|
11
|
+
* `burnt`) is described as the program takes one: a data hash of all zeros, which `proveLeafIx` then proves against
|
|
12
|
+
* the leaf's empty slot, so its record names no owner (a record that holds it lets go of it on that proof).
|
|
11
13
|
*/
|
|
12
14
|
export declare function compressedFromDas({ asset, proof, treeData }: {
|
|
13
15
|
asset: any;
|
|
@@ -26,4 +28,5 @@ export declare function compressedFromDas({ asset, proof, treeData }: {
|
|
|
26
28
|
flags: number;
|
|
27
29
|
root: Uint8Array<ArrayBuffer> | null;
|
|
28
30
|
proof: any;
|
|
31
|
+
burnt: boolean;
|
|
29
32
|
};
|
package/types/client/ix.d.ts
CHANGED
|
@@ -3877,6 +3877,10 @@ export declare const SETTLE_LAST = 4294967295;
|
|
|
3877
3877
|
* them (one its collection won't let move). `giveUp`: the places in `won` of tokens or collectibles the player,
|
|
3878
3878
|
* signing, gives up because they can't receive them (an account its issuer froze, a collection that refuses the mint),
|
|
3879
3879
|
* so the rest of the order is not held up: tokens given up stay in the project's vault (`PrizeForgone` says which).
|
|
3880
|
+
* An NFT proven gone from the project is passed over the same way, with no choice of the player's (`piece`: the Core
|
|
3881
|
+
* asset itself, `tokenMetadata.evidence` in its kind, a compressed NFT's record proven again): the NFT the order rolled
|
|
3882
|
+
* on is not sent back, burned, given or stashed (`NftGone`), and a stash's NFT it won is not given (`PrizeForgone`
|
|
3883
|
+
* for it beside `NftGone`: read it as not given); everything else settles as rolled.
|
|
3880
3884
|
* `handBack`: the wallet the box's fate gives the NFT rolled on to
|
|
3881
3885
|
* (`receiverOf`) is an account of the loot program (`handsBack` of it as read), so the program gives it back to the
|
|
3882
3886
|
* player, and a Token Metadata NFT's `token` is the player's. `extra`: a hook's or a memo's accounts.
|
|
@@ -3931,6 +3935,8 @@ export declare const INCINERATOR = "1nc1nerator11111111111111111111111111111111"
|
|
|
3931
3935
|
* (`orderRefundable`). A purchase counted against a box's limit for each
|
|
3932
3936
|
* wallet is given back. A purchase that counts its draws in its box's `in_flight` (`order.reserved`, a box that stops
|
|
3933
3937
|
* selling when an entry runs out) names the box, whose count it leaves. `extra`: a hook's or a memo's accounts.
|
|
3938
|
+
* An NFT the order holds that is proven gone from the project (`subject`, as `piece` takes it) is not looked for: the
|
|
3939
|
+
* whole payment goes back all the same (`NftGone` beside `OrderRefunded`).
|
|
3934
3940
|
*/
|
|
3935
3941
|
export declare function refundIx({ signer, orderAddress, order, subject, programs, extra }: {
|
|
3936
3942
|
extra?: never[] | undefined;
|
|
@@ -4083,6 +4089,10 @@ export declare const madeAssets: (project: any, item: any, itemState: any, count
|
|
|
4083
4089
|
* NFT is any kind
|
|
4084
4090
|
* (`piece`): `asset` and `collection` for a Core asset, with `tokenMetadata` for a Token Metadata NFT, or `compressed`
|
|
4085
4091
|
* (after a `proveLeafIx`).
|
|
4092
|
+
* A hold whose NFT is proven gone from the project (`piece`: the Core asset itself, `tokenMetadata.evidence`, a
|
|
4093
|
+
* compressed NFT's record proven again) closes instead: anyone sends it, at any time, also while the hold runs and for
|
|
4094
|
+
* a loan before it is due, for no project fee. Nothing moves and `to` is not read; the hold's rent goes to whoever paid
|
|
4095
|
+
* it, and a loan's debt ends unpaid. Its receipt is `NftGone`, with no `Released`.
|
|
4086
4096
|
*/
|
|
4087
4097
|
export declare function releaseIx({ signer, project, collection, asset, tokenMetadata: tm, compressed, hold, address, to, treasury, reference: ref, more, }: {
|
|
4088
4098
|
address?: null | undefined;
|
|
@@ -4344,6 +4354,8 @@ export declare function pullAssigns(r: any, stash: any, upto: any): number;
|
|
|
4344
4354
|
* close, and the next carries on. Every pull of one entry's places names the same `nonce`: a place's roll is made at
|
|
4345
4355
|
* `prizeRollNonce(nonce + place)`, so a later pull with another nonce can land on an order an earlier pull made and fail
|
|
4346
4356
|
* ("already in use"). js/play names `prizeNonce(round, entry)` for every pull of an entry, whoever sends it.
|
|
4357
|
+
* An NFT ticket proven gone from the project (`ticket`, as `piece` takes it) goes nowhere: its part settles and
|
|
4358
|
+
* nothing moves (`LotteryPulled` with amount 0 beside `NftGone`).
|
|
4347
4359
|
*/
|
|
4348
4360
|
export declare function pullIx({ payer, project, roundAddress: key, round: r, entry, part, projectState, ticket, handBack, hold, nonce, prize, holders, toTreasury, lotteryClosed, programs, extra, }: {
|
|
4349
4361
|
entry?: number | undefined;
|
|
@@ -4424,14 +4436,17 @@ export declare const farmKeepsEnds: (args: any) => any;
|
|
|
4424
4436
|
* little compute, so a farm idle past many ends may leave a move no room: `farmNeedsWalk`.
|
|
4425
4437
|
*/
|
|
4426
4438
|
export declare function endsToWalk(farm: any, ends: any, now: any): any;
|
|
4427
|
-
/** How many ends `walk_farm` walks in one transaction at `WALK_COMPUTE_UNITS`: an end takes
|
|
4428
|
-
* halving rate (`js/test/farm-ends.test.mjs`
|
|
4429
|
-
|
|
4439
|
+
/** How many ends `walk_farm` walks in one transaction at `WALK_COMPUTE_UNITS`: an end takes up to some 3,150 units at
|
|
4440
|
+
* the dearest farm, a halving rate and seats of 4 × 10^16 base units at a ×100 tier (`js/test/farm-ends.test.mjs`
|
|
4441
|
+
* measures it: 400 ends take 1,260,730 units, 2,270 an end with light seats). Since loot 0.27 each end walked also
|
|
4442
|
+
* frees the leaving weight's share of the carry, some 300 units more at that farm; it was 500 until then, measured
|
|
4443
|
+
* with light seats only. */
|
|
4444
|
+
export declare const WALK_PER_TX = 400;
|
|
4430
4445
|
/** The compute units a transaction that walks ends asks for: `walk_farm`, or a move with ends to walk first. */
|
|
4431
4446
|
export declare const WALK_COMPUTE_UNITS = 1400000;
|
|
4432
|
-
/** How many ends a move can walk first at `WALK_COMPUTE_UNITS` and still do its own work
|
|
4433
|
-
* first (`farmNeedsWalk`). */
|
|
4434
|
-
export declare const MOVE_WALK_ROOM =
|
|
4447
|
+
/** How many ends a move can walk first at `WALK_COMPUTE_UNITS` and still do its own work (some 400,000 units are left
|
|
4448
|
+
* for it at the dearest farm): past this, the farm is walked first (`farmNeedsWalk`). 400 until loot 0.27. */
|
|
4449
|
+
export declare const MOVE_WALK_ROOM = 300;
|
|
4435
4450
|
/**
|
|
4436
4451
|
* Whether a farm has passed more ends than a move can walk in its own transaction (`endsToWalk`, `MOVE_WALK_ROOM`): such
|
|
4437
4452
|
* a move fails on compute until `walk_farm` has caught the farm up. Nothing is lost by waiting: what a seat earned by
|
|
@@ -4553,6 +4568,11 @@ export declare const AUTH_RULES_PROGRAM = "auth9SigNpDKz4sJJ1DfCTuZrZNSAgh9sFD3r
|
|
|
4553
4568
|
* token account of `wallet` (its holder, or whoever the project sends it to) and the project's own;
|
|
4554
4569
|
* a compressed NFT (`compressed`, from `compressedFromDas`), proven by a `proveLeafIx` earlier in the transaction.
|
|
4555
4570
|
* A Token Metadata or compressed NFT passes its Sheet: the project writes nothing on it.
|
|
4571
|
+
* An NFT proven gone from the project (whoever controls its collection took it out of the project's hands or burned
|
|
4572
|
+
* it) is let go by the record that holds it, on these same accounts (loot 0.27, receipt `NftGone`): a Core asset shows
|
|
4573
|
+
* it by itself; a compressed NFT by its record, proven again as the leaf is now; a Token Metadata NFT by
|
|
4574
|
+
* `tokenMetadata.evidence`, the token account that holds it now, or its mint when it was burned, which goes in the
|
|
4575
|
+
* place of `wallet`'s token account. Anything else shows nothing, and the route goes its usual way.
|
|
4556
4576
|
* What the route does with it, so only the accounts it takes are passed (each true when left out):
|
|
4557
4577
|
* `moves`: hands it to the project or sends it on; `locks`: locks or unlocks it in its wallet; `writes`: writes on it;
|
|
4558
4578
|
* `burns`: burns a Core asset (false when left out); `reads`: reads its Sheet; `held`: reads it in the project's token
|
|
@@ -5062,6 +5082,10 @@ export declare function holdIx({ player, project, collection, asset, tokenMetada
|
|
|
5062
5082
|
* by, and gets back the rent it no longer needs. `drop`: the NFT leaves the stash and stays where it is, owed to the
|
|
5063
5083
|
* treasury in its hold (`["hold", nft, 0]`, the signer paying its rent until anyone `release`s it to the treasury, one
|
|
5064
5084
|
* NFT a call). `out` is never the project's own address nor another account of the program (`ToTheProject`).
|
|
5085
|
+
* Taking out of a project's stash an NFT proven gone from the project (`piece`: the Core asset itself,
|
|
5086
|
+
* `tokenMetadata.evidence`, a compressed NFT's record proven again) only takes its row off the list: anyone may send
|
|
5087
|
+
* it (`signer`), for no fee, nothing moves and no hold is made (`NftGone`, no `Stashed`); the rent the stash no longer
|
|
5088
|
+
* needs goes to the signer only when it is one of the project's keys. A lottery's own stash stays the project's keys'.
|
|
5065
5089
|
*/
|
|
5066
5090
|
export declare function stashIx({ signer, project, id, lottery, lotteryState, asset, out, drop, weight, collection, tokenMetadata: tm, compressed, more, }: {
|
|
5067
5091
|
asset: any;
|
|
@@ -5444,6 +5468,10 @@ export declare function openListingIx({ maker, project, asset, mint, deal, share
|
|
|
5444
5468
|
* takes none of the NFT's accounts but its address. `holders`, `programs`, `treasury` as for any split. After the
|
|
5445
5469
|
* take's own accounts come a sale's compressed NFT's proof, then the shares' accounts, then (in `extra`) Core's
|
|
5446
5470
|
* transfer adapters and any transfer hook's accounts, which the program finds by address after the shares'.
|
|
5471
|
+
* A listing whose NFT is proven gone from the project (`piece`: the Core asset itself, `tokenMetadata.evidence`, a
|
|
5472
|
+
* compressed NFT's record proven again) closes instead, whoever sends this: the taker pays nothing and no fee, the
|
|
5473
|
+
* listing's rent goes to its maker, and the receipt is `NftGone`. It is refused while a rental runs (`Rented`), and
|
|
5474
|
+
* closes once the rental has run.
|
|
5447
5475
|
*/
|
|
5448
5476
|
export declare function takeListingIx({ taker, project, projectState, listing, periods, collection, hasAuthority, tokenMetadata: tm, compressed, holders, programs, takerToken, extra, }: {
|
|
5449
5477
|
collection: any;
|
|
@@ -5466,7 +5494,10 @@ export declare function takeListingIx({ taker, project, projectState, listing, p
|
|
|
5466
5494
|
};
|
|
5467
5495
|
/**
|
|
5468
5496
|
* Its maker closes a listing (`listing` the decoded Listing): the NFT goes home. While a rental runs it only stops (no
|
|
5469
|
-
* renter takes it again), and the same call once the rental is over takes it home. Free.
|
|
5497
|
+
* renter takes it again), and the same call once the rental is over takes it home. Free. A listing whose NFT is proven
|
|
5498
|
+
* gone from the project (`piece`: the Core asset itself, `tokenMetadata.evidence`, a compressed NFT's record proven
|
|
5499
|
+
* again) closes without it once no rental runs, its rent to its maker (`NftGone`, no `Unlisted`); anyone else closes
|
|
5500
|
+
* such a listing with `takeListingIx`.
|
|
5470
5501
|
*/
|
|
5471
5502
|
export declare function closeListingIx({ maker, project, listing, collection, hasAuthority, tokenMetadata: tm, compressed, extra, }: {
|
|
5472
5503
|
collection: any;
|
package/types/economy/cost.d.mts
CHANGED
|
@@ -19,10 +19,11 @@ export declare function setupCost(plan: any, economy: any): {
|
|
|
19
19
|
export declare function actionCosts(economy: any, { now }?: Readonly<Record<string, any>>): any[];
|
|
20
20
|
/** Setup and play costs for a spec, or its refusals. */
|
|
21
21
|
/** `only` and `live`: a change to a live economy, priced as only what it publishes (live.mjs `changedParts`). */
|
|
22
|
-
export declare function cost(economy: any, { now, only, live }?: {
|
|
22
|
+
export declare function cost(economy: any, { now, only, live, renames }?: {
|
|
23
23
|
live?: null | undefined;
|
|
24
24
|
now?: number | undefined;
|
|
25
25
|
only?: null | undefined;
|
|
26
|
+
renames?: null | undefined;
|
|
26
27
|
}): {
|
|
27
28
|
ok: boolean;
|
|
28
29
|
refusals: any[];
|
|
@@ -35,7 +36,14 @@ export declare function cost(economy: any, { now, only, live }?: {
|
|
|
35
36
|
refusals?: undefined;
|
|
36
37
|
ok: boolean;
|
|
37
38
|
warnings: any[];
|
|
38
|
-
steps:
|
|
39
|
+
steps: {
|
|
40
|
+
creates: never[];
|
|
41
|
+
signers: string[];
|
|
42
|
+
id: string;
|
|
43
|
+
part: string;
|
|
44
|
+
says: string;
|
|
45
|
+
build: {};
|
|
46
|
+
}[];
|
|
39
47
|
transactions: {
|
|
40
48
|
signer: string;
|
|
41
49
|
steps: any[];
|
|
@@ -46,7 +54,7 @@ export declare function cost(economy: any, { now, only, live }?: {
|
|
|
46
54
|
alone: boolean;
|
|
47
55
|
}[];
|
|
48
56
|
approvals: number;
|
|
49
|
-
freshKeys:
|
|
57
|
+
freshKeys: string[];
|
|
50
58
|
} | {
|
|
51
59
|
ok: boolean;
|
|
52
60
|
setup: {
|
package/types/economy/live.d.mts
CHANGED
|
@@ -7,12 +7,13 @@ export declare function freshAddresses(names: any, random?: typeof randomBytes):
|
|
|
7
7
|
* The transactions that put `economy` live for `owner`, with `keys` the addresses of the fresh accounts (each signs
|
|
8
8
|
* the transaction that creates it). `live`: what is already live (a change publishes only what differs).
|
|
9
9
|
*/
|
|
10
|
-
export declare function prepare(economy: any, { owner, keys, live, now, rent, only, slot }: {
|
|
10
|
+
export declare function prepare(economy: any, { owner, keys, live, now, rent, only, slot, renames }: {
|
|
11
11
|
keys: any;
|
|
12
12
|
live?: null | undefined;
|
|
13
13
|
now?: number | undefined;
|
|
14
14
|
only?: null | undefined;
|
|
15
15
|
owner: any;
|
|
16
|
+
renames?: null | undefined;
|
|
16
17
|
rent: any;
|
|
17
18
|
slot?: null | undefined;
|
|
18
19
|
}): {
|
|
@@ -27,7 +28,14 @@ export declare function prepare(economy: any, { owner, keys, live, now, rent, on
|
|
|
27
28
|
refusals?: undefined;
|
|
28
29
|
ok: boolean;
|
|
29
30
|
warnings: any[];
|
|
30
|
-
steps:
|
|
31
|
+
steps: {
|
|
32
|
+
creates: never[];
|
|
33
|
+
signers: string[];
|
|
34
|
+
id: string;
|
|
35
|
+
part: string;
|
|
36
|
+
says: string;
|
|
37
|
+
build: {};
|
|
38
|
+
}[];
|
|
31
39
|
transactions: {
|
|
32
40
|
signer: string;
|
|
33
41
|
steps: any[];
|
|
@@ -38,7 +46,7 @@ export declare function prepare(economy: any, { owner, keys, live, now, rent, on
|
|
|
38
46
|
alone: boolean;
|
|
39
47
|
}[];
|
|
40
48
|
approvals: number;
|
|
41
|
-
freshKeys:
|
|
49
|
+
freshKeys: string[];
|
|
42
50
|
} | {
|
|
43
51
|
ok: boolean;
|
|
44
52
|
refusals: any[];
|
|
@@ -55,6 +63,7 @@ export declare function prepare(economy: any, { owner, keys, live, now, rent, on
|
|
|
55
63
|
project: any;
|
|
56
64
|
treasury: any;
|
|
57
65
|
mints: {};
|
|
66
|
+
tables: any;
|
|
58
67
|
keys: any;
|
|
59
68
|
rent: any;
|
|
60
69
|
slot: null;
|
|
@@ -63,7 +72,14 @@ export declare function prepare(economy: any, { owner, keys, live, now, rent, on
|
|
|
63
72
|
refusals?: undefined;
|
|
64
73
|
ok: boolean;
|
|
65
74
|
warnings: any[];
|
|
66
|
-
steps:
|
|
75
|
+
steps: {
|
|
76
|
+
creates: never[];
|
|
77
|
+
signers: string[];
|
|
78
|
+
id: string;
|
|
79
|
+
part: string;
|
|
80
|
+
says: string;
|
|
81
|
+
build: {};
|
|
82
|
+
}[];
|
|
67
83
|
transactions: {
|
|
68
84
|
signer: string;
|
|
69
85
|
steps: any[];
|
|
@@ -74,7 +90,7 @@ export declare function prepare(economy: any, { owner, keys, live, now, rent, on
|
|
|
74
90
|
alone: boolean;
|
|
75
91
|
}[];
|
|
76
92
|
approvals: number;
|
|
77
|
-
freshKeys:
|
|
93
|
+
freshKeys: string[];
|
|
78
94
|
ctx: {
|
|
79
95
|
owner: any;
|
|
80
96
|
authority: any;
|
|
@@ -83,6 +99,7 @@ export declare function prepare(economy: any, { owner, keys, live, now, rent, on
|
|
|
83
99
|
project: any;
|
|
84
100
|
treasury: any;
|
|
85
101
|
mints: {};
|
|
102
|
+
tables: any;
|
|
86
103
|
keys: any;
|
|
87
104
|
rent: any;
|
|
88
105
|
slot: null;
|
|
@@ -118,9 +135,16 @@ export declare function changedParts(economy: any): {
|
|
|
118
135
|
fixed: never[];
|
|
119
136
|
removed: never[];
|
|
120
137
|
settings: never[];
|
|
138
|
+
renames: never[];
|
|
121
139
|
} | {
|
|
122
140
|
only: Set<any>;
|
|
123
141
|
fixed: string[];
|
|
124
142
|
removed: string[];
|
|
125
143
|
settings: string[];
|
|
144
|
+
renames: any[];
|
|
126
145
|
};
|
|
146
|
+
/**
|
|
147
|
+
* In words, for a tool that does not read the chain: the spec changes what these tokens are called, and what becomes
|
|
148
|
+
* of that is decided when the change is approved.
|
|
149
|
+
*/
|
|
150
|
+
export declare const renamesNote: (renames: any) => string;
|
|
@@ -196,6 +196,12 @@ export declare const spendOf: (then: any, m: any) => "Burn" | {
|
|
|
196
196
|
Stash?: undefined;
|
|
197
197
|
Give: any[];
|
|
198
198
|
};
|
|
199
|
+
/**
|
|
200
|
+
* What a token the setup makes is called on chain, from its entry in a spec as written: [name, ticker, link], with
|
|
201
|
+
* the names it gets when the spec gives none (`tokenOf`: its key in capitals for a ticker, its ticker or key for a
|
|
202
|
+
* name). Two entries with the same labels write the same record, however they are spelled.
|
|
203
|
+
*/
|
|
204
|
+
export declare function tokenLabels(t: any): any[];
|
|
199
205
|
/**
|
|
200
206
|
* The spec with references resolved and ids given. Unknown references stay as they are (the checker reports
|
|
201
207
|
* them); call `check` first when it matters.
|
package/types/economy/plan.d.mts
CHANGED
|
@@ -929,12 +929,20 @@ export declare function grantArgs(g: any, m: any): {
|
|
|
929
929
|
* seats there as it is released, its clock stopped while nobody is in. A seed that lands
|
|
930
930
|
* before the first stake or after it is released the same way from that stake on, so seeding first would change nothing.
|
|
931
931
|
*/
|
|
932
|
-
export declare function setupSteps(economy: any, { now, only, live: given }?: {
|
|
932
|
+
export declare function setupSteps(economy: any, { now, only, live: given, renames }?: {
|
|
933
933
|
live?: null | undefined;
|
|
934
934
|
now?: number | undefined;
|
|
935
935
|
only?: null | undefined;
|
|
936
|
+
renames?: null | undefined;
|
|
936
937
|
}): {
|
|
937
|
-
steps:
|
|
938
|
+
steps: {
|
|
939
|
+
creates: never[];
|
|
940
|
+
signers: string[];
|
|
941
|
+
id: string;
|
|
942
|
+
part: string;
|
|
943
|
+
says: string;
|
|
944
|
+
build: {};
|
|
945
|
+
}[];
|
|
938
946
|
model: {
|
|
939
947
|
now: number;
|
|
940
948
|
name: any;
|
|
@@ -1026,6 +1034,7 @@ export declare function setupContext(m: any, { owner: ownerKey, keys, live: give
|
|
|
1026
1034
|
project: any;
|
|
1027
1035
|
treasury: any;
|
|
1028
1036
|
mints: {};
|
|
1037
|
+
tables: any;
|
|
1029
1038
|
keys: any;
|
|
1030
1039
|
rent: any;
|
|
1031
1040
|
};
|
|
@@ -1051,11 +1060,12 @@ export declare function pack(steps: any, ctx: any): {
|
|
|
1051
1060
|
* The plan for a spec: refusals, or every step packed into transactions. With `ctx` the transactions carry the
|
|
1052
1061
|
* real instructions; without it they are built on stand-in addresses (for sizing, cost and showing).
|
|
1053
1062
|
*/
|
|
1054
|
-
export declare function plan(economy: any, { now, ctx, only, live }?: {
|
|
1063
|
+
export declare function plan(economy: any, { now, ctx, only, live, renames }?: {
|
|
1055
1064
|
ctx?: null | undefined;
|
|
1056
1065
|
live?: null | undefined;
|
|
1057
1066
|
now?: number | undefined;
|
|
1058
1067
|
only?: null | undefined;
|
|
1068
|
+
renames?: null | undefined;
|
|
1059
1069
|
}): {
|
|
1060
1070
|
ok: boolean;
|
|
1061
1071
|
refusals: any[];
|
|
@@ -1068,7 +1078,14 @@ export declare function plan(economy: any, { now, ctx, only, live }?: {
|
|
|
1068
1078
|
refusals?: undefined;
|
|
1069
1079
|
ok: boolean;
|
|
1070
1080
|
warnings: any[];
|
|
1071
|
-
steps:
|
|
1081
|
+
steps: {
|
|
1082
|
+
creates: never[];
|
|
1083
|
+
signers: string[];
|
|
1084
|
+
id: string;
|
|
1085
|
+
part: string;
|
|
1086
|
+
says: string;
|
|
1087
|
+
build: {};
|
|
1088
|
+
}[];
|
|
1072
1089
|
transactions: {
|
|
1073
1090
|
signer: string;
|
|
1074
1091
|
steps: any[];
|
|
@@ -1079,7 +1096,7 @@ export declare function plan(economy: any, { now, ctx, only, live }?: {
|
|
|
1079
1096
|
alone: boolean;
|
|
1080
1097
|
}[];
|
|
1081
1098
|
approvals: number;
|
|
1082
|
-
freshKeys:
|
|
1099
|
+
freshKeys: string[];
|
|
1083
1100
|
};
|
|
1084
1101
|
/** What each part needs while the economy runs: the instruction, and who signs it. */
|
|
1085
1102
|
export declare function playSteps(economy: any): any[];
|