@xgamesfun/solana 0.25.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/DISCLAIMER.md +1 -1
  2. package/NOTICE +4 -4
  3. package/README.md +33 -28
  4. package/bin/xsolana.mjs +9 -3
  5. package/examples/stakers-draw.json +1 -0
  6. package/js/client/random.js +1 -1
  7. package/js/economy/check.mjs +11 -0
  8. package/js/economy/cost.mjs +1 -1
  9. package/js/economy/explain.mjs +10 -3
  10. package/js/economy/guide.mjs +1 -1
  11. package/js/economy/live.mjs +2 -1
  12. package/js/economy/review.mjs +760 -0
  13. package/js/economy/schema.json +8 -4
  14. package/js/economy/trust.mjs +15 -0
  15. package/js/index.js +1 -0
  16. package/js/mcp/server.mjs +1 -1
  17. package/js/mcp/tools.mjs +26 -1
  18. package/js/results/index.js +2 -2
  19. package/package.json +1 -1
  20. package/release.json +1 -1
  21. package/skills/xsolana-economy/SKILL.md +29 -13
  22. package/skills/xsolana-economy/references/after-launch.md +2 -1
  23. package/skills/xsolana-economy/references/sentence-to-spec.md +1 -0
  24. package/skills/xsolana-economy/references/telling-the-person.md +6 -0
  25. package/skills/xsolana-economy/references/trust-and-cheating.md +126 -0
  26. package/types/economy/cost.d.mts +1 -1
  27. package/types/economy/explain.d.mts +3 -0
  28. package/types/economy/review.d.mts +45 -0
  29. package/types/economy/trust.d.mts +8 -0
  30. package/types/index.d.ts +1 -0
  31. package/types/mcp/tools.d.mts +62 -0
  32. package/types/play/index.d.ts +6 -6
  33. package/types/results/index.d.ts +1 -1
  34. package/examples/holder-den.json +0 -38
  35. package/examples/holders-drop.json +0 -105
  36. package/examples/match-predictions.json +0 -24
  37. package/examples/pack-league.json +0 -108
  38. package/examples/stride-sneakers.json +0 -164
@@ -735,18 +735,17 @@ export declare function solanaApp({ spec, rpcUrl, rpc, wallet, programs, now, ke
735
735
  * it (base units, as text). Pass one to `claim`.
736
736
  */
737
737
  claims(): Promise<({
738
- key?: undefined;
739
738
  tree?: undefined;
740
739
  kind: string;
741
740
  order: any;
742
741
  says: string;
743
742
  hold?: undefined;
743
+ key?: undefined;
744
744
  round?: undefined;
745
745
  pulls?: undefined;
746
746
  asset?: undefined;
747
747
  table?: undefined;
748
748
  } | {
749
- key?: undefined;
750
749
  tree?: undefined;
751
750
  order?: undefined;
752
751
  kind: string;
@@ -756,29 +755,30 @@ export declare function solanaApp({ spec, rpcUrl, rpc, wallet, programs, now, ke
756
755
  potUnits?: string | undefined;
757
756
  prizeUnits?: string | undefined;
758
757
  hold?: undefined;
758
+ key?: undefined;
759
759
  round?: undefined;
760
760
  pulls?: undefined;
761
761
  asset?: undefined;
762
762
  table?: undefined;
763
763
  } | {
764
- key?: undefined;
765
764
  tree?: undefined;
766
765
  order?: undefined;
767
766
  kind: string;
768
767
  asset: any;
769
768
  hold: any;
770
769
  says: string;
770
+ key?: undefined;
771
771
  round?: undefined;
772
772
  pulls?: undefined;
773
773
  table?: undefined;
774
774
  } | {
775
- key?: undefined;
776
775
  order?: undefined;
777
776
  hold?: undefined;
778
777
  kind: string;
779
778
  asset: string;
780
779
  tree: string;
781
780
  says: string;
781
+ key?: undefined;
782
782
  round?: undefined;
783
783
  pulls?: undefined;
784
784
  table?: undefined;
@@ -816,10 +816,10 @@ export declare function solanaApp({ spec, rpcUrl, rpc, wallet, programs, now, ke
816
816
  asset?: undefined;
817
817
  table?: undefined;
818
818
  } | {
819
- key?: undefined;
820
819
  tree?: undefined;
821
820
  order?: undefined;
822
821
  hold?: undefined;
822
+ key?: undefined;
823
823
  round?: undefined;
824
824
  pulls?: undefined;
825
825
  kind: string;
@@ -827,10 +827,10 @@ export declare function solanaApp({ spec, rpcUrl, rpc, wallet, programs, now, ke
827
827
  says: string;
828
828
  table?: undefined;
829
829
  } | {
830
- key?: undefined;
831
830
  tree?: undefined;
832
831
  order?: undefined;
833
832
  hold?: undefined;
833
+ key?: undefined;
834
834
  round?: undefined;
835
835
  pulls?: undefined;
836
836
  asset?: undefined;
@@ -1,5 +1,5 @@
1
1
  export { canonicalJson, CERT_KINDS, CLUSTERS, drawText, entryText, giveawayHostText, hostCertText, lockText, NO_GRANT, RESULT_DOMAIN, resultBytes, revokeGiveawayText, revokeText, rosterHash, } from './wire.js';
2
- /** games.fun's results server, on its play host (devnet until the program's audit). */
2
+ /** xgames.fun's results server, on its play host (devnet until the program's audit). */
3
3
  export declare const RESULTS_SERVER = "https://play.xgames.fun/xsolana";
4
4
  /** A fresh round id: 16 random bytes, in hex. Make it when the round starts. */
5
5
  export declare const newRound: () => string;
@@ -1,38 +0,0 @@
1
- {
2
- "version": 2,
3
- "network": "devnet",
4
- "name": "Holder Den",
5
- "prompt": "Holders of our NFT collection stake them without the NFT leaving their wallet and earn 10 DUST a day each. Locking for 30 days doubles it, 90 days triples it. NFTs with a gold background earn 25% more. Every day staked adds a point to the NFT, which the game shows as its rank.",
6
- "currency": "dust",
7
- "tokens": [{ "key": "dust", "source": "project", "name": "Den Dust", "symbol": "DUST", "decimals": 6 }],
8
- "collection": false,
9
- "farms": [
10
- {
11
- "key": "den",
12
- "name": "The Den",
13
- "stakes": "collectibles",
14
- "custody": "freeze",
15
- "gate": { "collection": "5N3f6KXYGvtX4zCVD3DeQoEGbzahifQiFtkxfTfEyiRz" },
16
- "rewards": "dust",
17
- "rate": { "perDay": 10, "minted": true },
18
- "tiers": [
19
- { "lock": "0d", "multiplier": 1 },
20
- { "lock": "30d", "multiplier": 2 },
21
- { "lock": "90d", "multiplier": 3 }
22
- ],
23
- "boosts": [
24
- {
25
- "when": {
26
- "collection": "5N3f6KXYGvtX4zCVD3DeQoEGbzahifQiFtkxfTfEyiRz",
27
- "attribute": "Background",
28
- "equals": "Gold"
29
- },
30
- "add": { "addPercent": 25 }
31
- }
32
- ],
33
- "maxBoostPercent": 25,
34
- "growth": { "attribute": "points", "perDay": 1 }
35
- }
36
- ],
37
- "scenario": { "days": 90, "perDay": { "farm:den": 30 }, "staked": { "den": 1500 } }
38
- }
@@ -1,105 +0,0 @@
1
- {
2
- "version": 2,
3
- "network": "devnet",
4
- "name": "Holders Drop",
5
- "prompt": "Only holders of our collection get in. They buy a holders' crate for 0.02 SOL with a chance at a limited relic, claim a free holder badge once, and enter a raffle for our one-of-one NFT at 0.005 SOL a ticket. The raffle draws in a week, and only if at least 50 tickets sold; the ticket money goes to the treasury.",
6
- "currency": "sol",
7
- "tokens": [
8
- {
9
- "key": "sol",
10
- "source": "sol"
11
- }
12
- ],
13
- "collection": {
14
- "name": "Holders Drop"
15
- },
16
- "items": [
17
- {
18
- "key": "trinket",
19
- "name": "Holder Trinket",
20
- "rarity": "Common"
21
- },
22
- {
23
- "key": "relic",
24
- "name": "Holder Relic",
25
- "rarity": "Epic",
26
- "supply": 50
27
- },
28
- {
29
- "key": "badge",
30
- "name": "Holder Badge",
31
- "soulbound": true
32
- }
33
- ],
34
- "boxes": [
35
- {
36
- "key": "crate",
37
- "name": "Holders' Crate",
38
- "price": 0.02,
39
- "gate": {
40
- "collection": "9gyC3T5ynfwHK2EwKrxvmayntaDXjgcbLTaPwMwdeYuh"
41
- },
42
- "perWalletEach": {
43
- "count": 3,
44
- "every": "1d"
45
- },
46
- "outcomes": [
47
- {
48
- "gives": "item",
49
- "item": "trinket",
50
- "chance": 95
51
- },
52
- {
53
- "gives": "item",
54
- "item": "relic",
55
- "chance": 5
56
- }
57
- ]
58
- }
59
- ],
60
- "grants": [
61
- {
62
- "key": "badge",
63
- "name": "Holder Badge",
64
- "prize": {
65
- "gives": "item",
66
- "item": "badge"
67
- },
68
- "gate": {
69
- "collection": "9gyC3T5ynfwHK2EwKrxvmayntaDXjgcbLTaPwMwdeYuh"
70
- },
71
- "limits": {
72
- "perWallet": 1,
73
- "total": 2000
74
- },
75
- "wallets": 2000,
76
- "fund": 0.2
77
- }
78
- ],
79
- "lotteries": [
80
- {
81
- "key": "raffle",
82
- "name": "One-of-one raffle",
83
- "price": 0.005,
84
- "raffle": {
85
- "nft": "2oguAYJzxA6isSBtu4b8kzNPExdnvCuSwKjnB9dRkdxg",
86
- "collection": "9gyC3T5ynfwHK2EwKrxvmayntaDXjgcbLTaPwMwdeYuh"
87
- },
88
- "minSold": 50,
89
- "firstDraw": "publish+7d",
90
- "gate": {
91
- "collection": "9gyC3T5ynfwHK2EwKrxvmayntaDXjgcbLTaPwMwdeYuh"
92
- },
93
- "perWallet": 20,
94
- "rest": "treasury"
95
- }
96
- ],
97
- "scenario": {
98
- "days": 7,
99
- "perDay": {
100
- "box:crate": 60,
101
- "grant:badge": 100,
102
- "lottery:raffle": 40
103
- }
104
- }
105
- }
@@ -1,24 +0,0 @@
1
- {
2
- "version": 2,
3
- "network": "devnet",
4
- "name": "Match Predictions",
5
- "prompt": "A prediction pool for each match: back home, draw or away with any amount of SOL. Entries close two days after it opens, and the result is due a day later or everyone gets their money back. Winners share the pot by stake, after a 5% rake to the treasury. Our results server signs the result.",
6
- "currency": "sol",
7
- "tokens": [{ "key": "sol", "source": "sol" }],
8
- "collection": false,
9
- "contests": [
10
- {
11
- "key": "match",
12
- "name": "Match pool",
13
- "sides": 3,
14
- "sideNames": ["Home", "Draw", "Away"],
15
- "entriesClose": "2d",
16
- "resultDue": "3d",
17
- "every": "1d",
18
- "split": [{ "to": "treasury", "percent": 5 }],
19
- "decidedBy": "the results server, from the match's final score",
20
- "deciders": ["GnUcZZf8bwSCj8CFkdVPeeu81ptCV4RxQvExdKjvStyd"]
21
- }
22
- ],
23
- "scenario": { "days": 30, "perDay": { "contest:match": 150 } }
24
- }
@@ -1,108 +0,0 @@
1
- {
2
- "version": 2,
3
- "network": "devnet",
4
- "name": "Pack League",
5
- "prompt": "A trading card game. A pack is 0.05 SOL for five cards, and the fifth card is always rare or better. A fifth of every pack goes into the weekly league pot. Card holders buy league tickets for 0.001 SOL, and each week the top three share the pot.",
6
- "currency": "sol",
7
- "tokens": [
8
- {
9
- "key": "sol",
10
- "source": "sol"
11
- }
12
- ],
13
- "collection": {
14
- "name": "Pack League"
15
- },
16
- "items": [
17
- {
18
- "key": "common",
19
- "name": "Common Card",
20
- "rarity": "Common"
21
- },
22
- {
23
- "key": "rare",
24
- "name": "Rare Card",
25
- "rarity": "Rare"
26
- },
27
- {
28
- "key": "epic",
29
- "name": "Epic Card",
30
- "rarity": "Epic",
31
- "supply": 3000
32
- },
33
- {
34
- "key": "legendary",
35
- "name": "Legendary Card",
36
- "rarity": "Legendary",
37
- "supply": 300
38
- }
39
- ],
40
- "boxes": [
41
- {
42
- "key": "pack",
43
- "name": "Card Pack",
44
- "price": 0.05,
45
- "split": [
46
- {
47
- "to": "lottery:league",
48
- "percent": 20
49
- }
50
- ],
51
- "outcomes": [
52
- {
53
- "gives": "item",
54
- "item": "common",
55
- "chance": 75
56
- },
57
- {
58
- "gives": "item",
59
- "item": "rare",
60
- "chance": 19
61
- },
62
- {
63
- "gives": "item",
64
- "item": "epic",
65
- "chance": 5
66
- },
67
- {
68
- "gives": "item",
69
- "item": "legendary",
70
- "chance": 1
71
- }
72
- ],
73
- "slots": [
74
- {
75
- "count": 4,
76
- "share": 70
77
- },
78
- {
79
- "count": 1,
80
- "from": [1, 2, 3],
81
- "share": 30
82
- }
83
- ]
84
- }
85
- ],
86
- "lotteries": [
87
- {
88
- "key": "league",
89
- "name": "Weekly League",
90
- "price": 0.001,
91
- "places": [50, 30, 20],
92
- "every": "7d",
93
- "firstDraw": "publish+7d",
94
- "gate": {
95
- "item": "common"
96
- },
97
- "perWallet": 100,
98
- "pot": 0
99
- }
100
- ],
101
- "scenario": {
102
- "days": 28,
103
- "perDay": {
104
- "box:pack": 100,
105
- "lottery:league": 200
106
- }
107
- }
108
- }
@@ -1,164 +0,0 @@
1
- {
2
- "version": 2,
3
- "network": "devnet",
4
- "name": "Stride Sneakers",
5
- "prompt": "A move-to-earn game. Players buy a shoebox for 0.1 SOL and get a sneaker with random efficiency and luck, or a rare golden one. Walking earns STRIDE: the app's server vouches for a day's steps, once a day per wallet. Two sneakers and 200 STRIDE mint a new shoebox, at most 7 times per sneaker. 50 STRIDE levels a sneaker up, to level 30. Sneakers can be rented out from the app.",
6
- "currency": "sol",
7
- "tokens": [
8
- {
9
- "key": "sol",
10
- "source": "sol"
11
- },
12
- {
13
- "key": "stride",
14
- "source": "project",
15
- "name": "Stride",
16
- "symbol": "STRIDE",
17
- "decimals": 6
18
- }
19
- ],
20
- "collection": {
21
- "name": "Stride Sneakers"
22
- },
23
- "items": [
24
- {
25
- "key": "sneaker",
26
- "name": "Sneaker",
27
- "drawn": [
28
- {
29
- "attribute": "efficiency",
30
- "min": 1,
31
- "max": 10
32
- },
33
- {
34
- "attribute": "luck",
35
- "min": 1,
36
- "max": 10
37
- }
38
- ]
39
- },
40
- {
41
- "key": "golden",
42
- "name": "Golden Sneaker",
43
- "rarity": "Legendary",
44
- "supply": 100
45
- }
46
- ],
47
- "boxes": [
48
- {
49
- "key": "shoebox",
50
- "name": "Shoebox",
51
- "price": 0.1,
52
- "outcomes": [
53
- {
54
- "gives": "item",
55
- "item": "sneaker",
56
- "chance": 98
57
- },
58
- {
59
- "gives": "item",
60
- "item": "golden",
61
- "chance": 2
62
- }
63
- ]
64
- }
65
- ],
66
- "recipes": [
67
- {
68
- "key": "mint",
69
- "name": "Mint a shoebox",
70
- "in": [
71
- {
72
- "takes": "use",
73
- "item": "sneaker"
74
- },
75
- {
76
- "takes": "use",
77
- "item": "sneaker"
78
- },
79
- {
80
- "takes": "pay",
81
- "amount": 200,
82
- "currency": "stride",
83
- "to": "burn"
84
- }
85
- ],
86
- "raises": [
87
- {
88
- "place": 0,
89
- "key": "mints",
90
- "by": 1,
91
- "upTo": 7
92
- },
93
- {
94
- "place": 1,
95
- "key": "mints",
96
- "by": 1,
97
- "upTo": 7
98
- }
99
- ],
100
- "out": [
101
- {
102
- "gives": "roll",
103
- "box": "shoebox"
104
- }
105
- ]
106
- },
107
- {
108
- "key": "level-up",
109
- "name": "Level up",
110
- "in": [
111
- {
112
- "takes": "use",
113
- "item": "sneaker"
114
- },
115
- {
116
- "takes": "pay",
117
- "amount": 50,
118
- "currency": "stride",
119
- "to": "burn"
120
- }
121
- ],
122
- "raises": [
123
- {
124
- "place": 0,
125
- "key": "level",
126
- "by": 1,
127
- "upTo": 30
128
- }
129
- ]
130
- }
131
- ],
132
- "grants": [
133
- {
134
- "key": "steps",
135
- "name": "Daily steps",
136
- "prize": {
137
- "gives": "tokens",
138
- "amount": 20,
139
- "currency": "stride",
140
- "from": "mint"
141
- },
142
- "vouchers": ["B8CrCHTMi223kknNgaJXXp8QGqNR9pwD1bfZVYvr5fmJ"],
143
- "limits": {
144
- "perWalletEach": {
145
- "count": 1,
146
- "every": "1d"
147
- },
148
- "perDay": 1000
149
- },
150
- "wallets": 1000,
151
- "rounds": 365,
152
- "fund": 0.5
153
- }
154
- ],
155
- "scenario": {
156
- "days": 30,
157
- "perDay": {
158
- "box:shoebox": 20,
159
- "grant:steps": 300,
160
- "recipe:mint": 15,
161
- "recipe:level-up": 60
162
- }
163
- }
164
- }