@flayerlabs/gamemode-gate 0.4.3 → 0.5.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.
- package/DEPLOY.md +27 -3
- package/README.md +8 -3
- package/dist/chain/chains.d.ts +45 -6
- package/dist/chain/chains.d.ts.map +1 -1
- package/dist/chain/chains.js +56 -5
- package/dist/chain/chains.js.map +1 -1
- package/dist/chain/discover.d.ts +20 -2
- package/dist/chain/discover.d.ts.map +1 -1
- package/dist/chain/discover.js +74 -6
- package/dist/chain/discover.js.map +1 -1
- package/dist/chain/secure.d.ts +11 -1
- package/dist/chain/secure.d.ts.map +1 -1
- package/dist/chain/secure.js +67 -0
- package/dist/chain/secure.js.map +1 -1
- package/dist/claims.d.ts +1 -1
- package/dist/claims.d.ts.map +1 -1
- package/dist/claims.js +2 -2
- package/dist/claims.js.map +1 -1
- package/dist/demo.d.ts +1 -1
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +9 -9
- package/dist/demo.js.map +1 -1
- package/dist/economy.d.ts +25 -9
- package/dist/economy.d.ts.map +1 -1
- package/dist/economy.js +63 -22
- package/dist/economy.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/ledger.d.ts +2 -2
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +16 -16
- package/dist/ledger.js.map +1 -1
- package/dist/main.d.ts +30 -5
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +158 -17
- package/dist/main.js.map +1 -1
- package/dist/room.d.ts +7 -4
- package/dist/room.d.ts.map +1 -1
- package/dist/room.js +31 -10
- package/dist/room.js.map +1 -1
- package/dist/server.d.ts +33 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +93 -25
- package/dist/server.js.map +1 -1
- package/dist/standings.d.ts +34 -0
- package/dist/standings.d.ts.map +1 -0
- package/dist/standings.js +103 -0
- package/dist/standings.js.map +1 -0
- package/dist/store.d.ts +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +21 -0
- package/dist/store.js.map +1 -1
- package/package.json +2 -2
- package/src/chain/chains.ts +82 -9
- package/src/chain/discover.ts +87 -7
- package/src/chain/secure.ts +86 -1
- package/src/claims.ts +2 -2
- package/src/demo.ts +10 -10
- package/src/economy.ts +83 -31
- package/src/index.ts +8 -5
- package/src/ledger.ts +18 -18
- package/src/main.ts +181 -19
- package/src/room.ts +41 -14
- package/src/server.ts +142 -35
- package/src/standings.ts +138 -0
- package/src/store.ts +21 -0
package/dist/claims.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claims.js","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,MAAM,EAA+B,MAAM,aAAa,CAAC;AAGlE;;;;;;;;;;;GAWG;AAEH;mDACmD;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,MAAM,CAAC;AACrD,MAAM,gBAAgB,GAAG,0BAA0B,GAAG,KAAK,CAAC;AAC5D,MAAM,UAAU,GAAG,qCAAqC,CAAC;AAEzD,sGAAsG;AACtG,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,UAAU,CAAC;AACxE,CAAC;AAMD,MAAM,OAAO,MAAM;IAEE;IACA;IACA;IAEA;IAEA;IAPnB,YACmB,IAAU,EACV,MAAc,EACd,MAAqB;IACtC,kFAAkF;IACjE,cAAwD;IACzE,2FAA2F;IAC1E,MAAoB,IAAI,CAAC,GAAG;QAN5B,SAAI,GAAJ,IAAI,CAAM;QACV,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAe;QAErB,mBAAc,GAAd,cAAc,CAA0C;QAExD,QAAG,GAAH,GAAG,CAAyB;IAC5C,CAAC;IAEJ;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,MAAgB,EAAE,OAAe,EAAE,SAAiB;QACnF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;QACxF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QAElF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAsB,0CAA0C,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAChH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QAE9D,0FAA0F;QAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QACnE,8FAA8F;QAC9F,6FAA6F;QAC7F,2EAA2E;QAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAExD,6FAA6F;QAC7F,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,KAAY;QAC/C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACtC,KAAK,CAAC,MAAuB,EAC7B,MAAuB,EACvB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,KAAK,CACZ,CAAC;YACF,4FAA4F;YAC5F,0FAA0F;YAC1F,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YACtG,IAAI,CAAC,SAAS,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAChG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yFAAyF;YACzF,qFAAqF;YACrF,EAAE;YACF,yFAAyF;YACzF,6FAA6F;YAC7F,iFAAiF;YACjF,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,YAAqB,EAAE,EAAE;gBAC7E,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,8CAA8C;IAC9C,SAAS,CAAC,OAAe,EAAE,MAAgB;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,qDAAqD;IACrD,cAAc,CAAC,OAAe,EAAE,MAAgB;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,KAAY;IAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC9E,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAuB;QACpC,MAAM,EAAE,MAAuB;QAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC"}
|
package/dist/demo.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface DemoOptions<Config, State, Event, Action, PublicView, PlayerVie
|
|
|
10
10
|
lobbyMs?: number;
|
|
11
11
|
roundMs?: number;
|
|
12
12
|
/** The cap a wallet may spend, as a real launch would set on chain. Default 0.025 ETH. */
|
|
13
|
-
|
|
13
|
+
walletCap?: bigint;
|
|
14
14
|
pointsPerDollar?: number;
|
|
15
15
|
usdPerEth?: number;
|
|
16
16
|
roundId?: string;
|
package/dist/demo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+B5D,MAAM,WAAW,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAC/E,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AA+B5D,MAAM,WAAW,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;IAC/E,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,eAAe,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,aAAa,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,wFAAwF;IACxF,SAAS,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;CACf;AAID;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EACvF,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC,CAmGf"}
|
package/dist/demo.js
CHANGED
|
@@ -35,15 +35,15 @@ const ETH = 1000000000000000000n;
|
|
|
35
35
|
* is the one part of this that genuinely differs between games.
|
|
36
36
|
*/
|
|
37
37
|
export async function createDemoGate(options) {
|
|
38
|
-
const { game, config, databaseUrl = process.env.DATABASE_URL ?? 'postgres://postgres:gamemode@127.0.0.1:55439/gamemode', lobbyMs = 8_000, roundMs = 10 * 60_000,
|
|
38
|
+
const { game, config, databaseUrl = process.env.DATABASE_URL ?? 'postgres://postgres:gamemode@127.0.0.1:55439/gamemode', lobbyMs = 8_000, roundMs = 10 * 60_000, walletCap = ETH / 40n, pointsPerDollar = 100, usdPerEth = 3_000, roundId = 'dev', chainId = 8453, gateOrigin = 'http://127.0.0.1:4000', } = options;
|
|
39
39
|
// The same check the real gate runs at boot. A demo that silently used an impossible economy
|
|
40
40
|
// would teach a builder that their numbers work when they do not.
|
|
41
41
|
const maxPointsPerPlayer = game.rewardBounds(config).maxPointsPerPlayer;
|
|
42
42
|
const economy = resolveEconomy({
|
|
43
43
|
maxPointsPerPlayer,
|
|
44
|
-
|
|
44
|
+
walletCap,
|
|
45
45
|
pointsPerDollar,
|
|
46
|
-
usdPerEth,
|
|
46
|
+
usdPerSpendToken: usdPerEth,
|
|
47
47
|
});
|
|
48
48
|
if (!economy.ok) {
|
|
49
49
|
throw new Error(`That economy does not work: ${economy.problem}. Try ${economy.suggestedPointsPerDollar} points per dollar.`);
|
|
@@ -58,10 +58,10 @@ export async function createDemoGate(options) {
|
|
|
58
58
|
config,
|
|
59
59
|
seed: Math.floor(Math.random() * 1_000_000),
|
|
60
60
|
window: { opensAt, closesAt: opensAt + roundMs },
|
|
61
|
-
|
|
61
|
+
unitsPerPoint: economy.economy.unitsPerPoint,
|
|
62
62
|
pointsPerDollar: economy.economy.pointsPerDollar,
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
usdPerSpendToken: economy.economy.usdPerSpendToken,
|
|
64
|
+
walletCap,
|
|
65
65
|
maxPointsPerPlayer,
|
|
66
66
|
scoreAuthority: 'rules',
|
|
67
67
|
poolId: DEMO_POOL_ID,
|
|
@@ -83,11 +83,11 @@ export async function createDemoGate(options) {
|
|
|
83
83
|
contracts: { positionManager: DEMO_CALCULATOR, spendGatedCalculator: DEMO_CALCULATOR },
|
|
84
84
|
signer: signer.address,
|
|
85
85
|
settler: signer.address,
|
|
86
|
-
|
|
86
|
+
walletCap: walletCap.toString(),
|
|
87
87
|
roundDurationMs: roundMs,
|
|
88
88
|
minLobbyLeadMs: lobbyMs,
|
|
89
89
|
gateEndsAtGraceS: 10,
|
|
90
|
-
flaunchVariant: '
|
|
90
|
+
flaunchVariant: 'v1_2',
|
|
91
91
|
requiresEoa: false,
|
|
92
92
|
accepting: true,
|
|
93
93
|
publicLaunchesOpen: true,
|
|
@@ -105,7 +105,7 @@ export async function createDemoGate(options) {
|
|
|
105
105
|
app.post('/dev/wallet/buy', (request) => {
|
|
106
106
|
const { maxSpendWei } = request.body;
|
|
107
107
|
purchases.push({ maxSpendWei, at: Date.now() });
|
|
108
|
-
return {
|
|
108
|
+
return { spent: maxSpendWei };
|
|
109
109
|
});
|
|
110
110
|
return { app, roundId, opensAt, walletAddress: wallet.address, purchases, pool };
|
|
111
111
|
}
|
package/dist/demo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AAEH,wFAAwF;AACxF,MAAM,gBAAgB,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAW,CAAC;AACzD,MAAM,eAAe,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAW,CAAC;AACxD,MAAM,YAAY,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAW,CAAC;AACrD,MAAM,eAAe,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAW,CAAC;AAoCxD,MAAM,GAAG,GAAG,oBAA0B,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA0E;IAE1E,MAAM,EACJ,IAAI,EACJ,MAAM,EACN,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,uDAAuD,EACjG,OAAO,GAAG,KAAK,EACf,OAAO,GAAG,EAAE,GAAG,MAAM,EACrB,
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"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"}
|
package/dist/economy.d.ts
CHANGED
|
@@ -7,30 +7,46 @@
|
|
|
7
7
|
* environment variable was wrong, and no code was in a position to notice.
|
|
8
8
|
*
|
|
9
9
|
* So the arithmetic lives here, runs at round creation with the actual values, and refuses. A
|
|
10
|
-
* creator sets one human number — how many points a dollar is worth — and never sees
|
|
10
|
+
* creator sets one human number — how many points a dollar is worth — and never sees base units.
|
|
11
|
+
*
|
|
12
|
+
* Denomination. A pool's spend is measured on chain in its PAIRED token's own base units: wei for
|
|
13
|
+
* an ETH-paired coin, 10^-6 for a six-decimal stablecoin. Every amount in this package is
|
|
14
|
+
* therefore base units of the round's spend token, and the arithmetic here is parameterised by
|
|
15
|
+
* that token's decimals rather than assuming eighteen.
|
|
11
16
|
*/
|
|
17
|
+
/** The decimals of ETH, which is what every field was denominated in before paired-token rounds. */
|
|
18
|
+
export declare const ETH_DECIMALS = 18;
|
|
19
|
+
/** 10^decimals: one whole spend token in its base units. */
|
|
20
|
+
export declare function unitsPerToken(decimals: number): bigint;
|
|
12
21
|
export interface EconomyInput {
|
|
13
22
|
/** The most one player can earn, declared by the game itself via `rewardBounds`. */
|
|
14
23
|
maxPointsPerPlayer: number;
|
|
15
|
-
/** The pool's on-chain per-wallet ceiling
|
|
16
|
-
|
|
24
|
+
/** The pool's on-chain per-wallet ceiling, in base units of the spend token. */
|
|
25
|
+
walletCap: bigint;
|
|
17
26
|
/** The creator's one knob. 100 means 100 points is worth a dollar. */
|
|
18
27
|
pointsPerDollar: number;
|
|
19
|
-
|
|
28
|
+
/** The market price of one whole spend token, in dollars. For an ETH round this IS the ETH price. */
|
|
29
|
+
usdPerSpendToken: number;
|
|
30
|
+
/** Decimals of the spend token. Defaults to 18 — ETH — which is what every older caller meant. */
|
|
31
|
+
decimals?: number;
|
|
20
32
|
}
|
|
21
33
|
export interface Economy {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
34
|
+
/** Base units of the spend token per point. */
|
|
35
|
+
unitsPerPoint: bigint;
|
|
36
|
+
/** What a flawless round pays. Always at or under `walletCap`, or this would not exist. */
|
|
37
|
+
maxPayout: bigint;
|
|
25
38
|
/**
|
|
26
|
-
* The
|
|
39
|
+
* The inputs, returned beside the rate they produced.
|
|
27
40
|
*
|
|
28
41
|
* They travel together so a caller cannot persist a rate from one calculation and a dollar
|
|
29
42
|
* figure from another. Both are process-wide settings, so the only place they are true of a
|
|
30
43
|
* particular round is the moment that round's rate was fixed.
|
|
31
44
|
*/
|
|
32
45
|
pointsPerDollar: number;
|
|
33
|
-
|
|
46
|
+
/** The market price of one whole spend token — what a display should call the token's price. */
|
|
47
|
+
usdPerSpendToken: number;
|
|
48
|
+
/** The spend token's decimals. */
|
|
49
|
+
decimals: number;
|
|
34
50
|
}
|
|
35
51
|
export type EconomyResult = {
|
|
36
52
|
ok: true;
|
package/dist/economy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"economy.d.ts","sourceRoot":"","sources":["../src/economy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"economy.d.ts","sourceRoot":"","sources":["../src/economy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,oGAAoG;AACpG,eAAO,MAAM,YAAY,KAAK,CAAC;AAK/B,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,qGAAqG;IACrG,gBAAgB,EAAE,MAAM,CAAC;IACzB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,gBAAgB,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAE,CAAC;AASrE;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA8EjE"}
|
package/dist/economy.js
CHANGED
|
@@ -7,10 +7,27 @@
|
|
|
7
7
|
* environment variable was wrong, and no code was in a position to notice.
|
|
8
8
|
*
|
|
9
9
|
* So the arithmetic lives here, runs at round creation with the actual values, and refuses. A
|
|
10
|
-
* creator sets one human number — how many points a dollar is worth — and never sees
|
|
10
|
+
* creator sets one human number — how many points a dollar is worth — and never sees base units.
|
|
11
|
+
*
|
|
12
|
+
* Denomination. A pool's spend is measured on chain in its PAIRED token's own base units: wei for
|
|
13
|
+
* an ETH-paired coin, 10^-6 for a six-decimal stablecoin. Every amount in this package is
|
|
14
|
+
* therefore base units of the round's spend token, and the arithmetic here is parameterised by
|
|
15
|
+
* that token's decimals rather than assuming eighteen.
|
|
11
16
|
*/
|
|
12
|
-
/**
|
|
17
|
+
/** The decimals of ETH, which is what every field was denominated in before paired-token rounds. */
|
|
18
|
+
export const ETH_DECIMALS = 18;
|
|
19
|
+
/** 1 ETH in wei. Kept as the default `unitsPerToken` so an ETH round is byte-identical to before. */
|
|
13
20
|
const WEI_PER_ETH = 1000000000000000000n;
|
|
21
|
+
/** 10^decimals: one whole spend token in its base units. */
|
|
22
|
+
export function unitsPerToken(decimals) {
|
|
23
|
+
return 10n ** BigInt(decimals);
|
|
24
|
+
}
|
|
25
|
+
function resolveInputs(input) {
|
|
26
|
+
return {
|
|
27
|
+
usdPerSpendToken: input.usdPerSpendToken ?? Number.NaN,
|
|
28
|
+
decimals: input.decimals ?? ETH_DECIMALS,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
14
31
|
/**
|
|
15
32
|
* Resolve the rate for one round, or refuse with the number that fixes it.
|
|
16
33
|
*
|
|
@@ -23,12 +40,24 @@ const WEI_PER_ETH = 1000000000000000000n;
|
|
|
23
40
|
* goes and reads this file.
|
|
24
41
|
*/
|
|
25
42
|
export function resolveEconomy(input) {
|
|
26
|
-
const { maxPointsPerPlayer,
|
|
43
|
+
const { maxPointsPerPlayer, walletCap, pointsPerDollar } = input;
|
|
44
|
+
const { usdPerSpendToken, decimals } = resolveInputs(input);
|
|
27
45
|
if (!Number.isFinite(pointsPerDollar) || pointsPerDollar <= 0) {
|
|
28
46
|
return { ok: false, problem: 'points per dollar must be a positive number', suggestedPointsPerDollar: 100 };
|
|
29
47
|
}
|
|
30
|
-
if (!Number.
|
|
31
|
-
return {
|
|
48
|
+
if (!Number.isSafeInteger(decimals) || decimals < 0 || decimals > 36) {
|
|
49
|
+
return {
|
|
50
|
+
ok: false,
|
|
51
|
+
problem: 'the spend token must have between 0 and 36 decimals',
|
|
52
|
+
suggestedPointsPerDollar: pointsPerDollar,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (!Number.isFinite(usdPerSpendToken) || usdPerSpendToken <= 0) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
problem: 'the spend token price must be a positive number',
|
|
59
|
+
suggestedPointsPerDollar: pointsPerDollar,
|
|
60
|
+
};
|
|
32
61
|
}
|
|
33
62
|
if (!Number.isSafeInteger(maxPointsPerPlayer) || maxPointsPerPlayer <= 0) {
|
|
34
63
|
return {
|
|
@@ -37,58 +66,70 @@ export function resolveEconomy(input) {
|
|
|
37
66
|
suggestedPointsPerDollar: pointsPerDollar,
|
|
38
67
|
};
|
|
39
68
|
}
|
|
40
|
-
if (
|
|
69
|
+
if (walletCap <= 0n) {
|
|
41
70
|
return {
|
|
42
71
|
ok: false,
|
|
43
72
|
problem: 'this launch has no per-wallet spending cap, so nothing can be authorised',
|
|
44
73
|
suggestedPointsPerDollar: pointsPerDollar,
|
|
45
74
|
};
|
|
46
75
|
}
|
|
47
|
-
// How many points one
|
|
48
|
-
// guarded as positive above, but a small enough positive value still rounds this product to
|
|
76
|
+
// How many points one whole token buys. Checked before it becomes a divisor: `pointsPerDollar`
|
|
77
|
+
// is guarded as positive above, but a small enough positive value still rounds this product to
|
|
49
78
|
// zero — and dividing by it threw `Division by zero` out of the one function whose entire job is
|
|
50
79
|
// to refuse a bad economy with a sentence an operator can act on.
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
80
|
+
const pointsPerToken = Math.round(usdPerSpendToken * pointsPerDollar);
|
|
81
|
+
if (pointsPerToken <= 0) {
|
|
53
82
|
return {
|
|
54
83
|
ok: false,
|
|
55
|
-
problem: 'one point would be worth more than a whole
|
|
84
|
+
problem: 'one point would be worth more than a whole spend token, which cannot be what was meant',
|
|
56
85
|
suggestedPointsPerDollar: minimumPointsPerDollar(input),
|
|
57
86
|
};
|
|
58
87
|
}
|
|
59
|
-
const
|
|
60
|
-
|
|
88
|
+
const units = unitsPerToken(decimals);
|
|
89
|
+
const unitsPerPoint = units / BigInt(pointsPerToken);
|
|
90
|
+
if (unitsPerPoint <= 0n) {
|
|
61
91
|
return {
|
|
62
92
|
ok: false,
|
|
63
|
-
problem: 'each point would be worth less than the smallest unit of
|
|
93
|
+
problem: 'each point would be worth less than the smallest unit of the spend token',
|
|
64
94
|
suggestedPointsPerDollar: Math.max(1, Math.floor(pointsPerDollar / 1000)),
|
|
65
95
|
};
|
|
66
96
|
}
|
|
67
|
-
const
|
|
68
|
-
if (
|
|
97
|
+
const maxPayout = BigInt(Math.floor(maxPointsPerPlayer)) * unitsPerPoint;
|
|
98
|
+
if (maxPayout > walletCap) {
|
|
69
99
|
return {
|
|
70
100
|
ok: false,
|
|
71
101
|
problem: 'a perfect round would earn more than this launch lets one wallet spend',
|
|
72
102
|
suggestedPointsPerDollar: minimumPointsPerDollar(input),
|
|
73
103
|
};
|
|
74
104
|
}
|
|
75
|
-
return {
|
|
105
|
+
return {
|
|
106
|
+
ok: true,
|
|
107
|
+
economy: {
|
|
108
|
+
unitsPerPoint,
|
|
109
|
+
maxPayout,
|
|
110
|
+
pointsPerDollar,
|
|
111
|
+
usdPerSpendToken,
|
|
112
|
+
decimals,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
76
115
|
}
|
|
77
116
|
/**
|
|
78
117
|
* The smallest `pointsPerDollar` that keeps a flawless round inside the cap.
|
|
79
118
|
*
|
|
80
119
|
* Rounded up, then nudged until it actually passes: the division that produces it floors, and a
|
|
81
|
-
* value that is correct to the last
|
|
120
|
+
* value that is correct to the last unit but fails the check is worse than useless in an error
|
|
82
121
|
* message. Two steps is enough for any input — the loop is a guard against an off-by-one in the
|
|
83
122
|
* rounding, not an iterative search.
|
|
84
123
|
*/
|
|
85
124
|
function minimumPointsPerDollar(input) {
|
|
86
|
-
const { maxPointsPerPlayer,
|
|
125
|
+
const { maxPointsPerPlayer, walletCap } = input;
|
|
126
|
+
const { usdPerSpendToken, decimals } = resolveInputs(input);
|
|
87
127
|
const points = BigInt(Math.floor(maxPointsPerPlayer));
|
|
88
|
-
const
|
|
89
|
-
if (
|
|
128
|
+
const maxUnitsPerPoint = walletCap / points;
|
|
129
|
+
if (maxUnitsPerPoint <= 0n)
|
|
90
130
|
return Math.ceil(maxPointsPerPlayer);
|
|
91
|
-
|
|
131
|
+
const units = Number.isSafeInteger(decimals) && decimals >= 0 && decimals <= 36 ? unitsPerToken(decimals) : WEI_PER_ETH;
|
|
132
|
+
let candidate = Math.ceil(Number(units / maxUnitsPerPoint) / usdPerSpendToken);
|
|
92
133
|
for (let i = 0; i < 3; i++) {
|
|
93
134
|
const result = resolveEconomy({ ...input, pointsPerDollar: candidate });
|
|
94
135
|
if (result.ok)
|
package/dist/economy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"economy.js","sourceRoot":"","sources":["../src/economy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"economy.js","sourceRoot":"","sources":["../src/economy.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Public server-side surface for a production Game Mode gate. */
|
|
2
2
|
export { Claims, DEFAULT_SETTLEMENT_TAIL_MS, Room, Sessions, createGate, createGameServerGate, } from './server.js';
|
|
3
|
-
export type { Admission, AdmissionRequest, Admit, ConfigForLaunch, GameServerGateOptions, GateOptions, MaxPointsForLaunch, VerifiedLaunch, } from './server.js';
|
|
3
|
+
export type { Admission, AdmissionRequest, Admit, AnnouncedSpendToken, ConfigForLaunch, GameServerGateOptions, GateOptions, MaxPointsForLaunch, PriceFor, VerifiedLaunch, } from './server.js';
|
|
4
4
|
export { createTurnstileAdmit } from './turnstile.js';
|
|
5
5
|
export type { TurnstileAdmitOptions } from './turnstile.js';
|
|
6
6
|
export { Ledger } from './ledger.js';
|
|
@@ -11,7 +11,8 @@ export type { SignedPayload } from './chain/signer.js';
|
|
|
11
11
|
export { Discovery, poolIdOf, verifyLaunch } from './chain/discover.js';
|
|
12
12
|
export type { ChainReader, Deployment, Launch, LaunchCheck, PoolKey, Refused } from './chain/discover.js';
|
|
13
13
|
export { Settlement } from './settlement.js';
|
|
14
|
-
export {
|
|
14
|
+
export { Standings } from './standings.js';
|
|
15
|
+
export { ETH_DECIMALS, resolveEconomy, unitsPerToken } from './economy.js';
|
|
15
16
|
export type { Economy, EconomyInput, EconomyResult } from './economy.js';
|
|
16
17
|
export { migrate } from './store.js';
|
|
17
18
|
export { createDemoGate } from './demo.js';
|
|
@@ -28,10 +29,10 @@ export type { VerifiedPlayerJoin, VerifyPlayerJoinTicketOptions } from './player
|
|
|
28
29
|
* gate (see DEPLOY.md), and the pieces below it stay exported for anyone wiring their own.
|
|
29
30
|
*/
|
|
30
31
|
export { startGate, resolveGateEnv } from './main.js';
|
|
31
|
-
export type { ResolvedGateConfig, StartedGate, StartGateOverrides } from './main.js';
|
|
32
|
+
export type { ResolvedGateConfig, SpendTokenPricing, StartedGate, StartGateOverrides } from './main.js';
|
|
32
33
|
export type { GateAnnouncement } from './server.js';
|
|
33
34
|
export { NotSignedIn } from './sessions.js';
|
|
34
|
-
export { DEPLOYMENTS, deploymentFor } from './chain/chains.js';
|
|
35
|
-
export type { GateDeployment } from './chain/chains.js';
|
|
36
|
-
export { assertSecureConfig } from './chain/secure.js';
|
|
35
|
+
export { DEPLOYMENTS, PAIRED_DEPLOYMENTS, deploymentFor } from './chain/chains.js';
|
|
36
|
+
export type { FlaunchVariant, GateDeployment } from './chain/chains.js';
|
|
37
|
+
export { POSITION_MANAGER_ROLE, assertSecureConfig } from './chain/secure.js';
|
|
37
38
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,MAAM,EACN,0BAA0B,EAC1B,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,MAAM,EACN,0BAA0B,EAC1B,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,YAAY,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAElG;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACxG,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,8 @@ export { CLAIM_AUTHORIZATION_TTL_MS } from './claims.js';
|
|
|
6
6
|
export { PayloadSigner, encodeHookData } from './chain/signer.js';
|
|
7
7
|
export { Discovery, poolIdOf, verifyLaunch } from './chain/discover.js';
|
|
8
8
|
export { Settlement } from './settlement.js';
|
|
9
|
-
export {
|
|
9
|
+
export { Standings } from './standings.js';
|
|
10
|
+
export { ETH_DECIMALS, resolveEconomy, unitsPerToken } from './economy.js';
|
|
10
11
|
export { migrate } from './store.js';
|
|
11
12
|
export { createDemoGate } from './demo.js';
|
|
12
13
|
export { InvalidRegistration, RegistrationConflict, checkRegistration, disableGameRegistration, gateOrigin, pinGameRegistration, resolveGameRegistration, securityProfile, } from './registry.js';
|
|
@@ -18,6 +19,6 @@ export { PLAYER_JOIN_TICKET_TTL_MS, verifyPlayerJoinTicket } from './player-join
|
|
|
18
19
|
*/
|
|
19
20
|
export { startGate, resolveGateEnv } from './main.js';
|
|
20
21
|
export { NotSignedIn } from './sessions.js';
|
|
21
|
-
export { DEPLOYMENTS, deploymentFor } from './chain/chains.js';
|
|
22
|
-
export { assertSecureConfig } from './chain/secure.js';
|
|
22
|
+
export { DEPLOYMENTS, PAIRED_DEPLOYMENTS, deploymentFor } from './chain/chains.js';
|
|
23
|
+
export { POSITION_MANAGER_ROLE, assertSecureConfig } from './chain/secure.js';
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,MAAM,EACN,0BAA0B,EAC1B,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,MAAM,EACN,0BAA0B,EAC1B,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAUxD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG7F;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/ledger.d.ts
CHANGED
|
@@ -62,7 +62,7 @@ export declare class Ledger {
|
|
|
62
62
|
*
|
|
63
63
|
* Never allowed to go backwards: a read from a lagging node must not undo what a later one saw.
|
|
64
64
|
*/
|
|
65
|
-
recordChainSpend(roundId: string, player: PlayerId,
|
|
65
|
+
recordChainSpend(roundId: string, player: PlayerId, spent: bigint): Promise<boolean>;
|
|
66
66
|
/** Everyone with a balance in this round, for the reconciler to ask the chain about. */
|
|
67
67
|
playersIn(roundId: string): Promise<PlayerId[]>;
|
|
68
68
|
/**
|
|
@@ -75,7 +75,7 @@ export declare class Ledger {
|
|
|
75
75
|
* Returns how many were returned, so a caller can log something worth reading.
|
|
76
76
|
*/
|
|
77
77
|
releaseExpired(nowSeconds: number): Promise<BalanceKey[]>;
|
|
78
|
-
|
|
78
|
+
available(roundId: string, player: PlayerId): Promise<bigint>;
|
|
79
79
|
/** The authoritative balance snapshot, derived from the same state and ceiling as `claim`. */
|
|
80
80
|
economyBalance(roundId: string, player: PlayerId): Promise<EconomyBalance>;
|
|
81
81
|
private readState;
|
package/dist/ledger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,SAAS,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;CAClB;AA8CD,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI;IAEvC,2EAA2E;IACrE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;OAMG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,EAAE,GAAE,MAAmB,GACtB,OAAO,CAAC,WAAW,CAAC;IAiDvB,2FAA2F;IACrF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgB1G;;;;;OAKG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,SAAS,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,CAAC;CAClB;AA8CD,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI;IAEvC,2EAA2E;IACrE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;OAMG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,EAAE,GAAE,MAAmB,GACtB,OAAO,CAAC,WAAW,CAAC;IAiDvB,2FAA2F;IACrF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgB1G;;;;;OAKG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1F,wFAAwF;IAClF,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAQrD;;;;;;;;OAQG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAczD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAInE,8FAA8F;IACxF,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;YAkBlE,SAAS;YA4CT,aAAa;YAeb,gBAAgB;CAS/B"}
|
package/dist/ledger.js
CHANGED
|
@@ -6,9 +6,9 @@ import { inTransaction, migrate, toBigInt } from './store.js';
|
|
|
6
6
|
* wallet spend. Issuing past the second does not overspend — the chain refuses it — it mints a
|
|
7
7
|
* signature that reverts at the swap, which to a player is indistinguishable from being robbed.
|
|
8
8
|
*/
|
|
9
|
-
function availableFrom({ points,
|
|
10
|
-
const
|
|
11
|
-
const ceiling =
|
|
9
|
+
function availableFrom({ points, unitsPerPoint, capWei, held, chainSpentWei }) {
|
|
10
|
+
const earned = points * unitsPerPoint;
|
|
11
|
+
const ceiling = earned < capWei ? earned : capWei;
|
|
12
12
|
// Spent-on-chain PLUS still-outstanding, never the larger of the two.
|
|
13
13
|
//
|
|
14
14
|
// Taking the larger looked safe and was not. Hold 40, spend it, let the hold expire, then hold
|
|
@@ -19,7 +19,7 @@ function availableFrom({ points, weiPerPoint, capWei, heldWei, chainSpentWei })
|
|
|
19
19
|
//
|
|
20
20
|
// Adding them double-counts a hold whose swap has already landed, until that hold expires. That
|
|
21
21
|
// errs towards authorising too little, which is the direction that costs nobody anything.
|
|
22
|
-
const available = ceiling - (chainSpentWei +
|
|
22
|
+
const available = ceiling - (chainSpentWei + held);
|
|
23
23
|
return available > 0n ? available : 0n;
|
|
24
24
|
}
|
|
25
25
|
export class Ledger {
|
|
@@ -117,9 +117,9 @@ export class Ledger {
|
|
|
117
117
|
*
|
|
118
118
|
* Never allowed to go backwards: a read from a lagging node must not undo what a later one saw.
|
|
119
119
|
*/
|
|
120
|
-
async recordChainSpend(roundId, player,
|
|
120
|
+
async recordChainSpend(roundId, player, spent) {
|
|
121
121
|
const result = await this.pool.query(`update balances set chain_spent_wei = greatest(chain_spent_wei, $3)
|
|
122
|
-
where round_id = $1 and player = $2 and chain_spent_wei < $3`, [roundId, player,
|
|
122
|
+
where round_id = $1 and player = $2 and chain_spent_wei < $3`, [roundId, player, spent.toString()]);
|
|
123
123
|
return result.rowCount === 1;
|
|
124
124
|
}
|
|
125
125
|
/** Everyone with a balance in this round, for the reconciler to ask the chain about. */
|
|
@@ -146,21 +146,21 @@ export class Ledger {
|
|
|
146
146
|
]));
|
|
147
147
|
return [...unique.values()];
|
|
148
148
|
}
|
|
149
|
-
async
|
|
150
|
-
return (await this.economyBalance(roundId, player)).
|
|
149
|
+
async available(roundId, player) {
|
|
150
|
+
return (await this.economyBalance(roundId, player)).available;
|
|
151
151
|
}
|
|
152
152
|
/** The authoritative balance snapshot, derived from the same state and ceiling as `claim`. */
|
|
153
153
|
async economyBalance(roundId, player) {
|
|
154
154
|
const state = await this.readState(this.pool, roundId, player);
|
|
155
155
|
if (!state) {
|
|
156
|
-
return {
|
|
156
|
+
return { unitsPerPoint: 0n, earned: 0n, held: 0n, spent: 0n, available: 0n, holdExpiresAt: null };
|
|
157
157
|
}
|
|
158
158
|
return {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
unitsPerPoint: state.unitsPerPoint,
|
|
160
|
+
earned: state.points * state.unitsPerPoint,
|
|
161
|
+
held: state.held,
|
|
162
|
+
spent: state.chainSpentWei,
|
|
163
|
+
available: availableFrom(state),
|
|
164
164
|
// Seconds on the way in, because that is what the contract checks against; milliseconds on
|
|
165
165
|
// the way out, because that is what a browser counts down with.
|
|
166
166
|
holdExpiresAt: state.holdExpiresAtSeconds === null ? null : state.holdExpiresAtSeconds * 1000,
|
|
@@ -180,11 +180,11 @@ export class Ledger {
|
|
|
180
180
|
return {
|
|
181
181
|
points: toBigInt(balance.rows[0]?.points),
|
|
182
182
|
chainSpentWei: toBigInt(balance.rows[0]?.chain_spent_wei),
|
|
183
|
-
|
|
183
|
+
unitsPerPoint: toBigInt(row.wei_per_point),
|
|
184
184
|
capWei: toBigInt(row.wallet_cap_wei),
|
|
185
185
|
opensAt: Number(row.opens_at),
|
|
186
186
|
closesAt: Number(row.closes_at),
|
|
187
|
-
|
|
187
|
+
held: toBigInt(held.rows[0]?.total),
|
|
188
188
|
holdExpiresAtSeconds: earliest == null ? null : Number(earliest),
|
|
189
189
|
};
|
|
190
190
|
}
|
package/dist/ledger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoD9D;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
|