@xgamesfun/solana 0.0.0-stage → 0.24.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.
Files changed (138) hide show
  1. package/DISCLAIMER.md +41 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +13 -0
  4. package/README.md +172 -2
  5. package/bin/xsolana.mjs +189 -0
  6. package/examples/artwork-auction.json +51 -0
  7. package/examples/blind-forge.json +128 -0
  8. package/examples/coin-flip-arena.json +103 -0
  9. package/examples/duel-arena.json +137 -0
  10. package/examples/elements-set.json +274 -0
  11. package/examples/event-badges.json +67 -0
  12. package/examples/expedition-guild.json +154 -0
  13. package/examples/fair-presale.json +48 -0
  14. package/examples/falling-drop.json +90 -0
  15. package/examples/guild-missions.json +137 -0
  16. package/examples/halving-seasons.json +107 -0
  17. package/examples/hero-trials.json +93 -0
  18. package/examples/ideas.json +789 -0
  19. package/examples/level-ladder.json +65 -0
  20. package/examples/merge-2048.json +128 -0
  21. package/examples/nft-raffle.json +33 -0
  22. package/examples/paper-hands-farm.json +44 -0
  23. package/examples/partner-vault.json +112 -0
  24. package/examples/sacrifice-raffle.json +118 -0
  25. package/examples/scorched-treasury.json +84 -0
  26. package/examples/shelter-fair.json +164 -0
  27. package/examples/spark-pity.json +153 -0
  28. package/examples/stakers-draw.json +118 -0
  29. package/examples/star-fleet.json +150 -0
  30. package/examples/starforce.json +116 -0
  31. package/examples/stud-farm.json +134 -0
  32. package/examples/team-vesting.json +70 -0
  33. package/examples/trade-in-shop.json +168 -0
  34. package/js/approve/details.mjs +263 -0
  35. package/js/approve/ed25519.mjs +36 -0
  36. package/js/approve/live-check.mjs +144 -0
  37. package/js/approve/page.html +86 -0
  38. package/js/approve/page.js +203 -0
  39. package/js/approve/server.mjs +726 -0
  40. package/js/chain/base58.js +73 -0
  41. package/js/chain/borsh.js +270 -0
  42. package/js/chain/bytes.js +141 -0
  43. package/js/chain/core.js +181 -0
  44. package/js/chain/curve.js +52 -0
  45. package/js/chain/lookup.js +279 -0
  46. package/js/chain/mint.js +96 -0
  47. package/js/chain/pda.js +66 -0
  48. package/js/chain/programs.js +102 -0
  49. package/js/chain/rpc.js +219 -0
  50. package/js/chain/sha256.js +68 -0
  51. package/js/chain/token.js +85 -0
  52. package/js/chain/token2022.js +247 -0
  53. package/js/chain/tx.js +224 -0
  54. package/js/client/accounts.js +679 -0
  55. package/js/client/compressed.js +46 -0
  56. package/js/client/grant.js +299 -0
  57. package/js/client/idl/loot.js +2 -0
  58. package/js/client/idl/loot.json +17206 -0
  59. package/js/client/index.js +10 -0
  60. package/js/client/ix.js +2887 -0
  61. package/js/client/pda.js +114 -0
  62. package/js/client/policy.js +69 -0
  63. package/js/client/random.js +70 -0
  64. package/js/client/sizes.js +297 -0
  65. package/js/client/traits.js +44 -0
  66. package/js/connect/connect.mjs +182 -0
  67. package/js/economy/check.mjs +2236 -0
  68. package/js/economy/cost.mjs +185 -0
  69. package/js/economy/examples.mjs +114 -0
  70. package/js/economy/explain.mjs +239 -0
  71. package/js/economy/guide.mjs +232 -0
  72. package/js/economy/legal.mjs +15 -0
  73. package/js/economy/live.mjs +130 -0
  74. package/js/economy/model.mjs +698 -0
  75. package/js/economy/plan.mjs +1155 -0
  76. package/js/economy/schema.json +3071 -0
  77. package/js/economy/secrets.mjs +60 -0
  78. package/js/economy/simulate.mjs +1019 -0
  79. package/js/economy/txsize.mjs +45 -0
  80. package/js/economy/validate.mjs +85 -0
  81. package/js/index.js +10 -0
  82. package/js/mcp/server.mjs +113 -0
  83. package/js/mcp/tools.mjs +485 -0
  84. package/js/play/index.js +2855 -0
  85. package/js/play/keys.js +167 -0
  86. package/js/results/index.js +184 -0
  87. package/js/results/wire.js +90 -0
  88. package/package.json +100 -4
  89. package/release.json +8 -0
  90. package/skills/xsolana-economy/SKILL.md +109 -0
  91. package/skills/xsolana-economy/references/after-launch.md +124 -0
  92. package/skills/xsolana-economy/references/apps.md +193 -0
  93. package/skills/xsolana-economy/references/sentence-to-spec.md +180 -0
  94. package/skills/xsolana-economy/references/telling-the-person.md +134 -0
  95. package/types/chain/base58.d.ts +10 -0
  96. package/types/chain/borsh.d.ts +23 -0
  97. package/types/chain/bytes.d.ts +45 -0
  98. package/types/chain/core.d.ts +52 -0
  99. package/types/chain/curve.d.ts +1 -0
  100. package/types/chain/lookup.d.ts +194 -0
  101. package/types/chain/mint.d.ts +25 -0
  102. package/types/chain/pda.d.ts +25 -0
  103. package/types/chain/programs.d.ts +65 -0
  104. package/types/chain/rpc.d.ts +68 -0
  105. package/types/chain/sha256.d.ts +1 -0
  106. package/types/chain/token.d.ts +141 -0
  107. package/types/chain/token2022.d.ts +53 -0
  108. package/types/chain/tx.d.ts +60 -0
  109. package/types/client/accounts.d.ts +318 -0
  110. package/types/client/compressed.d.ts +29 -0
  111. package/types/client/grant.d.ts +170 -0
  112. package/types/client/idl/loot.d.ts +4498 -0
  113. package/types/client/index.d.ts +9 -0
  114. package/types/client/ix.d.ts +5315 -0
  115. package/types/client/pda.d.ts +95 -0
  116. package/types/client/policy.d.ts +48 -0
  117. package/types/client/random.d.ts +26 -0
  118. package/types/client/sizes.d.ts +101 -0
  119. package/types/client/traits.d.ts +12 -0
  120. package/types/economy/check.d.mts +100 -0
  121. package/types/economy/cost.d.mts +69 -0
  122. package/types/economy/examples.d.mts +27 -0
  123. package/types/economy/explain.d.mts +19 -0
  124. package/types/economy/guide.d.mts +140 -0
  125. package/types/economy/legal.d.mts +12 -0
  126. package/types/economy/live.d.mts +124 -0
  127. package/types/economy/model.d.mts +431 -0
  128. package/types/economy/plan.d.mts +1014 -0
  129. package/types/economy/secrets.d.mts +4 -0
  130. package/types/economy/simulate.d.mts +164 -0
  131. package/types/economy/txsize.d.mts +17 -0
  132. package/types/economy/validate.d.mts +3 -0
  133. package/types/index.d.ts +9 -0
  134. package/types/mcp/tools.d.mts +635 -0
  135. package/types/play/index.d.ts +880 -0
  136. package/types/play/keys.d.ts +51 -0
  137. package/types/results/index.d.ts +155 -0
  138. package/types/results/wire.d.ts +122 -0
@@ -0,0 +1,51 @@
1
+ {
2
+ "version": 2,
3
+ "network": "devnet",
4
+ "name": "Sunset Auction",
5
+ "prompt": "I'm an artist selling a 1 of 1 piece. Highest bid after 24 hours wins it, in SOL, and anyone who is outbid gets their money back automatically. A late bid should give others ten more minutes. Each bid at least 5% over the last, and 10% of the sale goes to my collaborator.",
6
+ "currency": "sol",
7
+ "tokens": [
8
+ {
9
+ "key": "sol",
10
+ "source": "sol"
11
+ }
12
+ ],
13
+ "collection": {
14
+ "name": "Sunset Studio",
15
+ "royaltyPercent": 5
16
+ },
17
+ "items": [
18
+ {
19
+ "key": "sunset",
20
+ "name": "Sunset, 1 of 1",
21
+ "rarity": "Mythic",
22
+ "supply": 1,
23
+ "uri": "https://example.invalid/sunset.json"
24
+ }
25
+ ],
26
+ "auctions": [
27
+ {
28
+ "key": "sunset",
29
+ "name": "Sunset, 1 of 1",
30
+ "lot": {
31
+ "item": "sunset"
32
+ },
33
+ "reserve": 0.5,
34
+ "minRaise": 5,
35
+ "runs": "24h",
36
+ "extendBy": "10m",
37
+ "split": [
38
+ {
39
+ "to": "account:6U3XnmrzuZ5sDujScii8SmzwtRZ4skfKcH2TLiz1rmES",
40
+ "percent": 10
41
+ }
42
+ ]
43
+ }
44
+ ],
45
+ "scenario": {
46
+ "days": 1,
47
+ "perDay": {
48
+ "auction:sunset": 12
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,128 @@
1
+ {
2
+ "version": 2,
3
+ "network": "devnet",
4
+ "name": "Blind Forge",
5
+ "prompt": "A drop of mystery boxes with a 60 / 25 / 10 / 4 / 1 rarity table, priced on a curve (each box costs 0.5% more than the last); the mythic is 1-of-1 and leaves the table once pulled; each legendary's weight drops as it is minted. Priced in a Token-2022 coin with a 1% transfer fee, plus a weekly draw for buyers.",
6
+ "currency": "forge",
7
+ "tokens": [
8
+ {
9
+ "key": "forge",
10
+ "source": "existing",
11
+ "name": "Forge test coin",
12
+ "symbol": "FORGE",
13
+ "decimals": 6,
14
+ "program": "token-2022",
15
+ "mint": "7MJWx2uTWn8ZHFda1WUpW46SgWb5UyAjjFrYjjSsSYHA",
16
+ "venue": "other",
17
+ "powers": {
18
+ "mintAuthority": "someone else",
19
+ "freeze": false,
20
+ "transferFeePercent": 1
21
+ }
22
+ }
23
+ ],
24
+ "collection": {
25
+ "name": "Blind Forge",
26
+ "royaltyPercent": 5
27
+ },
28
+ "items": [
29
+ {
30
+ "key": "common-blade",
31
+ "name": "Common Blade",
32
+ "rarity": "Common",
33
+ "value": 2
34
+ },
35
+ {
36
+ "key": "uncommon-blade",
37
+ "name": "Uncommon Blade",
38
+ "rarity": "Uncommon",
39
+ "value": 5
40
+ },
41
+ {
42
+ "key": "rare-blade",
43
+ "name": "Rare Blade",
44
+ "rarity": "Rare",
45
+ "supply": 500,
46
+ "value": 20
47
+ },
48
+ {
49
+ "key": "epic-blade",
50
+ "name": "Epic Blade",
51
+ "rarity": "Epic",
52
+ "supply": 100,
53
+ "value": 60
54
+ },
55
+ {
56
+ "key": "mythic-blade",
57
+ "name": "Mythic Blade",
58
+ "rarity": "Mythic",
59
+ "supply": 1,
60
+ "value": 200
61
+ }
62
+ ],
63
+ "pools": [],
64
+ "boxes": [
65
+ {
66
+ "key": "forge-box",
67
+ "name": "Forge box",
68
+ "price": 10,
69
+ "rise": {
70
+ "growthPercent": 0.5
71
+ },
72
+ "stockOdds": true,
73
+ "split": [
74
+ {
75
+ "to": "lottery:buyers-draw",
76
+ "percent": 5
77
+ }
78
+ ],
79
+ "outcomes": [
80
+ {
81
+ "gives": "item",
82
+ "item": "common-blade",
83
+ "chance": 60
84
+ },
85
+ {
86
+ "gives": "item",
87
+ "item": "uncommon-blade",
88
+ "chance": 25
89
+ },
90
+ {
91
+ "gives": "item",
92
+ "item": "rare-blade",
93
+ "chance": 10
94
+ },
95
+ {
96
+ "gives": "item",
97
+ "item": "epic-blade",
98
+ "chance": 4
99
+ },
100
+ {
101
+ "gives": "item",
102
+ "item": "mythic-blade",
103
+ "chance": 1
104
+ }
105
+ ]
106
+ }
107
+ ],
108
+ "lotteries": [
109
+ {
110
+ "key": "buyers-draw",
111
+ "name": "Buyers' draw",
112
+ "price": 1,
113
+ "cutPercent": 5,
114
+ "places": [
115
+ 70,
116
+ 30
117
+ ],
118
+ "every": "7d"
119
+ }
120
+ ],
121
+ "scenario": {
122
+ "days": 30,
123
+ "perDay": {
124
+ "box:forge-box": 200,
125
+ "lottery:buyers-draw": 50
126
+ }
127
+ }
128
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "version": 2,
3
+ "network": "devnet",
4
+ "name": "Coin-flip arena",
5
+ "prompt": "Make me a coin-flip arena: 2% house edge to people who stake, and a weekly lottery with three places fed by 10% of every flip.",
6
+ "keys": {
7
+ "authority": "owner"
8
+ },
9
+ "currency": "sol",
10
+ "tokens": [
11
+ {
12
+ "key": "sol",
13
+ "source": "sol"
14
+ },
15
+ {
16
+ "key": "arena",
17
+ "source": "game",
18
+ "name": "Arena",
19
+ "symbol": "ARENA",
20
+ "decimals": 6
21
+ }
22
+ ],
23
+ "pools": [
24
+ {
25
+ "key": "house",
26
+ "currency": "sol",
27
+ "seed": 5,
28
+ "about": "Pays the winning flips. 88% of every flip comes back into it."
29
+ }
30
+ ],
31
+ "boxes": [
32
+ {
33
+ "key": "flip",
34
+ "name": "Coin flip",
35
+ "price": 0.1,
36
+ "split": [
37
+ {
38
+ "to": "pool:house",
39
+ "percent": 88
40
+ },
41
+ {
42
+ "to": "lottery:weekly",
43
+ "percent": 10
44
+ },
45
+ {
46
+ "to": "farm:backers",
47
+ "percent": 2
48
+ }
49
+ ],
50
+ "outcomes": [
51
+ {
52
+ "gives": "pay",
53
+ "chance": 50,
54
+ "pool": "house",
55
+ "amount": 0.176
56
+ },
57
+ {
58
+ "gives": "nothing",
59
+ "chance": 50
60
+ }
61
+ ]
62
+ }
63
+ ],
64
+ "lotteries": [
65
+ {
66
+ "key": "weekly",
67
+ "name": "Weekly draw",
68
+ "price": 0.01,
69
+ "places": [
70
+ 50,
71
+ 30,
72
+ 20
73
+ ],
74
+ "every": "7d",
75
+ "firstDraw": "publish+7d"
76
+ }
77
+ ],
78
+ "scenario": {
79
+ "days": 30,
80
+ "perDay": {
81
+ "box:flip": 1000,
82
+ "lottery:weekly": 100,
83
+ "farm:backers": 10
84
+ },
85
+ "staked": {
86
+ "backers": 1000000
87
+ }
88
+ },
89
+ "farms": [
90
+ {
91
+ "key": "backers",
92
+ "name": "Back the house",
93
+ "stakes": "arena",
94
+ "rewards": "sol",
95
+ "tiers": [
96
+ {
97
+ "lock": "1d",
98
+ "multiplier": 1
99
+ }
100
+ ]
101
+ }
102
+ ]
103
+ }
@@ -0,0 +1,137 @@
1
+ {
2
+ "version": 2,
3
+ "network": "devnet",
4
+ "name": "Duel Arena",
5
+ "prompt": "Two players each put up a stake and fight; the winner takes it, less a rake that goes to the arena's holder. Ships go on 6-hour missions held by the game: they come home with loot, or the authority sends them to the wreck yard; if it does not answer in time, anyone can send them home.",
6
+ "currency": "usdc",
7
+ "keys": {
8
+ "authority": "Hby5BFRb3qfaDyY2Fza4UtjfRn4aFmvdnMAouigMurAs"
9
+ },
10
+ "tokens": [
11
+ {
12
+ "key": "usdc",
13
+ "source": "existing",
14
+ "name": "USDC (devnet)",
15
+ "symbol": "USDC",
16
+ "decimals": 6,
17
+ "mint": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
18
+ "venue": "other",
19
+ "powers": {
20
+ "mintAuthority": "someone else",
21
+ "freeze": true
22
+ }
23
+ }
24
+ ],
25
+ "collection": {
26
+ "name": "Duel Arena"
27
+ },
28
+ "items": [
29
+ {
30
+ "key": "arena-deed",
31
+ "name": "Arena Deed",
32
+ "price": 100,
33
+ "supply": 1,
34
+ "rarity": "Legendary"
35
+ },
36
+ {
37
+ "key": "ship",
38
+ "name": "Scout Ship",
39
+ "price": 5,
40
+ "split": [
41
+ {
42
+ "to": "pool:mission-rewards",
43
+ "percent": 90
44
+ }
45
+ ]
46
+ }
47
+ ],
48
+ "pools": [
49
+ {
50
+ "key": "mission-rewards",
51
+ "currency": "usdc",
52
+ "seed": 100,
53
+ "about": "Pays missions that succeed; 90% of every ship sold fills it."
54
+ }
55
+ ],
56
+ "contests": [
57
+ {
58
+ "key": "duel",
59
+ "name": "Duel",
60
+ "currency": "usdc",
61
+ "sides": 2,
62
+ "sideNames": [
63
+ "Red",
64
+ "Blue"
65
+ ],
66
+ "entriesClose": "10m",
67
+ "resultDue": "1h",
68
+ "every": "1h",
69
+ "split": [
70
+ {
71
+ "to": "holder:9rAE9ZjQBaR7Gwqoh1nnbJMqNjJJYVnuptjQ8p4sV7VW",
72
+ "percent": 3
73
+ },
74
+ {
75
+ "to": "burn",
76
+ "percent": 2
77
+ }
78
+ ],
79
+ "decidedBy": "the game server, from the duel's result"
80
+ }
81
+ ],
82
+ "holds": [
83
+ {
84
+ "key": "mission",
85
+ "name": "Fleet mission",
86
+ "item": "ship",
87
+ "for": "6h",
88
+ "decidedBy": "the game server: home with loot, or the wreck yard"
89
+ }
90
+ ],
91
+ "decisions": [
92
+ {
93
+ "key": "open-duel",
94
+ "when": "two players queue for a duel",
95
+ "does": "open_contest",
96
+ "contest": "duel",
97
+ "signedBy": "server",
98
+ "perDay": 24
99
+ },
100
+ {
101
+ "key": "duel-result",
102
+ "when": "a duel ends",
103
+ "does": "decide",
104
+ "contest": "duel",
105
+ "signedBy": "server",
106
+ "perDay": 24
107
+ },
108
+ {
109
+ "key": "mission-end",
110
+ "when": "a mission ends",
111
+ "does": "award",
112
+ "hold": "mission",
113
+ "to": "the player, or the wreck yard",
114
+ "signedBy": "server",
115
+ "perDay": 40
116
+ },
117
+ {
118
+ "key": "mission-loot",
119
+ "when": "a mission succeeds",
120
+ "does": "payout",
121
+ "pool": "mission-rewards",
122
+ "amount": 2,
123
+ "to": "the ship's player",
124
+ "signedBy": "server",
125
+ "perDay": 20
126
+ }
127
+ ],
128
+ "scenario": {
129
+ "days": 30,
130
+ "perDay": {
131
+ "item:arena-deed": 0,
132
+ "item:ship": 10,
133
+ "hold:mission": 40,
134
+ "contest:duel": 48
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,274 @@
1
+ {
2
+ "version": 2,
3
+ "network": "devnet",
4
+ "name": "Elements",
5
+ "prompt": "Four elements, Fire, Water, Earth and Air, each earn 10 SPARK a day staked at the altar. A player who has all four staked binds them into an Elemental Badge, which earns 100 SPARK a day in the sanctum; while the badge exists the four stay staked, and a set makes one badge. Unbinding burns the badge and lets the four go.",
6
+ "currency": "sol",
7
+ "tokens": [
8
+ {
9
+ "key": "sol",
10
+ "source": "sol"
11
+ },
12
+ {
13
+ "key": "spark",
14
+ "source": "game",
15
+ "name": "Spark",
16
+ "symbol": "SPARK",
17
+ "decimals": 0
18
+ }
19
+ ],
20
+ "collection": {
21
+ "name": "Elements"
22
+ },
23
+ "items": [
24
+ {
25
+ "key": "fire",
26
+ "name": "Fire",
27
+ "price": 0.02
28
+ },
29
+ {
30
+ "key": "water",
31
+ "name": "Water",
32
+ "price": 0.02
33
+ },
34
+ {
35
+ "key": "earth",
36
+ "name": "Earth",
37
+ "price": 0.02
38
+ },
39
+ {
40
+ "key": "air",
41
+ "name": "Air",
42
+ "price": 0.02
43
+ },
44
+ {
45
+ "key": "badge",
46
+ "name": "Elemental Badge"
47
+ }
48
+ ],
49
+ "recipes": [
50
+ {
51
+ "key": "bind",
52
+ "name": "Bind the four",
53
+ "in": [
54
+ {
55
+ "takes": "staked",
56
+ "item": "fire",
57
+ "farm": "altar"
58
+ },
59
+ {
60
+ "takes": "staked",
61
+ "item": "water",
62
+ "farm": "altar"
63
+ },
64
+ {
65
+ "takes": "staked",
66
+ "item": "earth",
67
+ "farm": "altar"
68
+ },
69
+ {
70
+ "takes": "staked",
71
+ "item": "air",
72
+ "farm": "altar"
73
+ }
74
+ ],
75
+ "out": [
76
+ {
77
+ "gives": "item",
78
+ "item": "badge"
79
+ }
80
+ ],
81
+ "raises": [
82
+ {
83
+ "place": 0,
84
+ "key": "bound",
85
+ "by": 1,
86
+ "upTo": 1
87
+ },
88
+ {
89
+ "place": 0,
90
+ "key": "free_at",
91
+ "by": "20000d"
92
+ },
93
+ {
94
+ "place": 1,
95
+ "key": "bound",
96
+ "by": 1,
97
+ "upTo": 1
98
+ },
99
+ {
100
+ "place": 1,
101
+ "key": "free_at",
102
+ "by": "20000d"
103
+ },
104
+ {
105
+ "place": 2,
106
+ "key": "bound",
107
+ "by": 1,
108
+ "upTo": 1
109
+ },
110
+ {
111
+ "place": 2,
112
+ "key": "free_at",
113
+ "by": "20000d"
114
+ },
115
+ {
116
+ "place": 3,
117
+ "key": "bound",
118
+ "by": 1,
119
+ "upTo": 1
120
+ },
121
+ {
122
+ "place": 3,
123
+ "key": "free_at",
124
+ "by": "20000d"
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ "key": "unbind",
130
+ "name": "Unbind",
131
+ "in": [
132
+ {
133
+ "takes": "burn",
134
+ "item": "badge"
135
+ },
136
+ {
137
+ "takes": "staked",
138
+ "item": "fire",
139
+ "farm": "altar"
140
+ },
141
+ {
142
+ "takes": "staked",
143
+ "item": "water",
144
+ "farm": "altar"
145
+ },
146
+ {
147
+ "takes": "staked",
148
+ "item": "earth",
149
+ "farm": "altar"
150
+ },
151
+ {
152
+ "takes": "staked",
153
+ "item": "air",
154
+ "farm": "altar"
155
+ }
156
+ ],
157
+ "needs": [
158
+ {
159
+ "place": 1,
160
+ "key": "bound",
161
+ "atLeast": 1
162
+ },
163
+ {
164
+ "place": 2,
165
+ "key": "bound",
166
+ "atLeast": 1
167
+ },
168
+ {
169
+ "place": 3,
170
+ "key": "bound",
171
+ "atLeast": 1
172
+ },
173
+ {
174
+ "place": 4,
175
+ "key": "bound",
176
+ "atLeast": 1
177
+ }
178
+ ],
179
+ "raises": [
180
+ {
181
+ "place": 1,
182
+ "key": "bound",
183
+ "by": -1
184
+ },
185
+ {
186
+ "place": 1,
187
+ "key": "free_at",
188
+ "by": "-20000d"
189
+ },
190
+ {
191
+ "place": 2,
192
+ "key": "bound",
193
+ "by": -1
194
+ },
195
+ {
196
+ "place": 2,
197
+ "key": "free_at",
198
+ "by": "-20000d"
199
+ },
200
+ {
201
+ "place": 3,
202
+ "key": "bound",
203
+ "by": -1
204
+ },
205
+ {
206
+ "place": 3,
207
+ "key": "free_at",
208
+ "by": "-20000d"
209
+ },
210
+ {
211
+ "place": 4,
212
+ "key": "bound",
213
+ "by": -1
214
+ },
215
+ {
216
+ "place": 4,
217
+ "key": "free_at",
218
+ "by": "-20000d"
219
+ }
220
+ ]
221
+ }
222
+ ],
223
+ "farms": [
224
+ {
225
+ "key": "altar",
226
+ "name": "The altar",
227
+ "stakes": "collectibles",
228
+ "rewards": "spark",
229
+ "rate": {
230
+ "perDay": 10,
231
+ "minted": true
232
+ },
233
+ "tiers": [
234
+ {
235
+ "lock": "1d"
236
+ }
237
+ ],
238
+ "lockAttribute": "free_at"
239
+ },
240
+ {
241
+ "key": "sanctum",
242
+ "name": "The sanctum",
243
+ "stakes": "collectibles",
244
+ "item": "badge",
245
+ "rewards": "spark",
246
+ "rate": {
247
+ "perDay": 100,
248
+ "minted": true
249
+ },
250
+ "tiers": [
251
+ {
252
+ "lock": "1d"
253
+ }
254
+ ]
255
+ }
256
+ ],
257
+ "scenario": {
258
+ "days": 30,
259
+ "perDay": {
260
+ "item:fire": 5,
261
+ "item:water": 5,
262
+ "item:earth": 5,
263
+ "item:air": 5,
264
+ "farm:altar": 20,
265
+ "farm:sanctum": 5,
266
+ "recipe:bind": 2,
267
+ "recipe:unbind": 1
268
+ },
269
+ "staked": {
270
+ "altar": 200,
271
+ "sanctum": 20
272
+ }
273
+ }
274
+ }