@flayerlabs/gamemode-gate 0.4.2 → 0.5.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/DEPLOY.md +27 -3
- package/README.md +3 -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 +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -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 +63 -25
- package/dist/server.js.map +1 -1
- 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 +7 -5
- package/src/ledger.ts +18 -18
- package/src/main.ts +181 -19
- package/src/room.ts +41 -14
- package/src/server.ts +107 -35
- package/src/store.ts +21 -0
package/dist/main.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import pg from 'pg';
|
|
|
2
2
|
import { type PublicClient } from 'viem';
|
|
3
3
|
import type { FastifyInstance } from 'fastify';
|
|
4
4
|
import type { GameModule } from '@flayerlabs/gamemode-spec';
|
|
5
|
+
import { type PriceFor } from './server.js';
|
|
5
6
|
import { type GateDeployment } from './chain/chains.js';
|
|
6
7
|
/**
|
|
7
8
|
* A production gate from an environment, assembled and checked.
|
|
@@ -31,15 +32,29 @@ export interface ResolvedGateConfig {
|
|
|
31
32
|
port: number;
|
|
32
33
|
deployment: GateDeployment;
|
|
33
34
|
/** Announced to launch tooling; the creator's launch writes it into the pool. */
|
|
34
|
-
|
|
35
|
+
walletCap: bigint;
|
|
35
36
|
roundDurationMs: number;
|
|
36
37
|
minLobbyLeadMs: number;
|
|
37
38
|
gateEndsAtGraceS: number;
|
|
38
39
|
pointsPerDollar: number;
|
|
40
|
+
/** The price of ETH; what ETH-paired rounds are priced at. Fractional values are fine. */
|
|
39
41
|
usdPerEth: number;
|
|
42
|
+
/**
|
|
43
|
+
* The non-ETH paired tokens this gate will run rounds on, with the price it fixes them at and the
|
|
44
|
+
* per-wallet cap a launch on them should write. Keyed by lowercase address. Anything not here is
|
|
45
|
+
* refused at adoption — the gate does not guess a token's price.
|
|
46
|
+
*/
|
|
47
|
+
spendTokens: ReadonlyMap<string, SpendTokenPricing>;
|
|
40
48
|
/** May lift the gate early or rotate the signer on-chain. Defaults to the signing key's address. */
|
|
41
49
|
settler: `0x${string}` | null;
|
|
42
50
|
}
|
|
51
|
+
export interface SpendTokenPricing {
|
|
52
|
+
address: `0x${string}`;
|
|
53
|
+
/** Dollars per whole token. */
|
|
54
|
+
usdPerToken: number;
|
|
55
|
+
/** Per-wallet cap for a launch on this token, in its base units. */
|
|
56
|
+
walletCap: bigint;
|
|
57
|
+
}
|
|
43
58
|
/**
|
|
44
59
|
* Read and validate the environment, pure so a test can feed it a plain object.
|
|
45
60
|
*
|
|
@@ -53,16 +68,21 @@ export interface ResolvedGateConfig {
|
|
|
53
68
|
* GATE_ORIGIN required; this gate's own public https origin (the SIWE audience)
|
|
54
69
|
* ALLOWED_ORIGINS required; comma-separated origins that may call this gate
|
|
55
70
|
* PORT default 8790
|
|
56
|
-
* POSITION_MANAGER optional
|
|
71
|
+
* POSITION_MANAGER optional; selects a recorded stack on the chain (the legacy one when
|
|
72
|
+
* unset), or overrides the address for a chain with no address book
|
|
57
73
|
* SPEND_GATED_CALCULATOR optional address-book override
|
|
58
|
-
*
|
|
74
|
+
* POOL_SWAP optional address-book override; required for a v1_3 stack
|
|
75
|
+
* FLETH optional address-book override; the chain's flETH wrapper
|
|
76
|
+
* FLAUNCH_VARIANT optional; v1_2, multichain or v1_3
|
|
59
77
|
* SETTLER optional; defaults to the signing key's own address
|
|
60
|
-
* WALLET_CAP_WEI default 0.025 ETH
|
|
78
|
+
* WALLET_CAP_WEI default 0.025 ETH; the cap for ETH-paired launches
|
|
61
79
|
* ROUND_MS default 90000
|
|
62
80
|
* MIN_LOBBY_LEAD_MS default 60000
|
|
63
81
|
* GATE_ENDS_AT_GRACE_S default 10
|
|
64
82
|
* POINTS_PER_DOLLAR default 100
|
|
65
|
-
* USD_PER_ETH default 3000
|
|
83
|
+
* USD_PER_ETH default 3000; fractional allowed
|
|
84
|
+
* SPEND_TOKENS optional JSON array of { address, usdPerToken, walletCap } — the non-ETH
|
|
85
|
+
* paired tokens this gate runs rounds on. Unlisted tokens are refused.
|
|
66
86
|
*/
|
|
67
87
|
export declare function resolveGateEnv(env: Env): ResolvedGateConfig;
|
|
68
88
|
export interface StartedGate {
|
|
@@ -78,6 +98,11 @@ export interface StartGateOverrides {
|
|
|
78
98
|
client?: PublicClient;
|
|
79
99
|
/** False builds and checks everything but never binds a port. */
|
|
80
100
|
listen?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* A price source consulted before `SPEND_TOKENS` — an oracle, or a test's constant. Answering
|
|
103
|
+
* null defers to the env list; a token neither knows is refused at adoption.
|
|
104
|
+
*/
|
|
105
|
+
priceProvider?: PriceFor;
|
|
81
106
|
}
|
|
82
107
|
export declare function startGate<Config, State, Event, Action, PublicView, PlayerView>(game: GameModule<Config, State, Event, Action, PublicView, PlayerView>, gameConfig: Config, overrides?: StartGateOverrides): Promise<StartedGate>;
|
|
83
108
|
export {};
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAiD,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAA+D,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AASzG,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGvE;;;;;;;;;;;;GAYG;AAEH,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,KAAK,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACpD,oGAAoG;IACpG,OAAO,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;CACnB;AAuED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,kBAAkB,CAgF3D;AA4BD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,qEAAqE;IACrE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAClF,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EACtE,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,kBAAuB,GACjC,OAAO,CAAC,WAAW,CAAC,CAkHtB"}
|
package/dist/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import pg from 'pg';
|
|
2
|
-
import { createPublicClient, http, isAddress } from 'viem';
|
|
2
|
+
import { createPublicClient, http, isAddress, parseAbi } from 'viem';
|
|
3
3
|
import { createGate } from './server.js';
|
|
4
4
|
import { Ledger } from './ledger.js';
|
|
5
5
|
import { Claims } from './claims.js';
|
|
@@ -26,6 +26,58 @@ function integer(env, name, fallback) {
|
|
|
26
26
|
throw new Error(`${name} must be a non-negative integer`);
|
|
27
27
|
return value;
|
|
28
28
|
}
|
|
29
|
+
/** A price or a rate: positive, finite, and allowed to be fractional — a dollar stablecoin is 1.0. */
|
|
30
|
+
function positiveNumber(env, name, fallback) {
|
|
31
|
+
const raw = env[name];
|
|
32
|
+
if (raw === undefined || raw === '')
|
|
33
|
+
return fallback;
|
|
34
|
+
const value = Number(raw);
|
|
35
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
36
|
+
throw new Error(`${name} must be a positive number`);
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* `SPEND_TOKENS`: a JSON array of `{ address, usdPerToken, walletCap }`.
|
|
41
|
+
*
|
|
42
|
+
* Only what the chain cannot tell us: the price, and the cap the operator wants launches on this
|
|
43
|
+
* token to carry. Symbol and decimals are read from the token itself at boot — an operator-typed
|
|
44
|
+
* decimals is the exact mistake this whole feature exists to make impossible.
|
|
45
|
+
*/
|
|
46
|
+
function spendTokens(env) {
|
|
47
|
+
const raw = env['SPEND_TOKENS'];
|
|
48
|
+
const out = new Map();
|
|
49
|
+
if (raw === undefined || raw.trim() === '')
|
|
50
|
+
return out;
|
|
51
|
+
let parsed;
|
|
52
|
+
try {
|
|
53
|
+
parsed = JSON.parse(raw);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
throw new Error('SPEND_TOKENS must be a JSON array of { address, usdPerToken, walletCap }');
|
|
57
|
+
}
|
|
58
|
+
if (!Array.isArray(parsed))
|
|
59
|
+
throw new Error('SPEND_TOKENS must be a JSON array');
|
|
60
|
+
for (const entry of parsed) {
|
|
61
|
+
const value = (entry ?? {});
|
|
62
|
+
// Casing is not checked: operators paste addresses from explorers and configs in every case,
|
|
63
|
+
// and a rejected checksum here would read as "wrong address" for a right one.
|
|
64
|
+
if (typeof value.address !== 'string' || !isAddress(value.address, { strict: false })) {
|
|
65
|
+
throw new Error('SPEND_TOKENS: every entry needs an address');
|
|
66
|
+
}
|
|
67
|
+
const usdPerToken = Number(value.usdPerToken);
|
|
68
|
+
if (!Number.isFinite(usdPerToken) || usdPerToken <= 0) {
|
|
69
|
+
throw new Error(`SPEND_TOKENS: ${value.address} needs a positive usdPerToken`);
|
|
70
|
+
}
|
|
71
|
+
if (typeof value.walletCap !== 'string' || !/^[1-9][0-9]*$/.test(value.walletCap)) {
|
|
72
|
+
throw new Error(`SPEND_TOKENS: ${value.address} needs walletCap as a decimal string of base units`);
|
|
73
|
+
}
|
|
74
|
+
const key = value.address.toLowerCase();
|
|
75
|
+
if (out.has(key))
|
|
76
|
+
throw new Error(`SPEND_TOKENS lists ${value.address} twice`);
|
|
77
|
+
out.set(key, { address: value.address, usdPerToken, walletCap: BigInt(value.walletCap) });
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
29
81
|
function address(env, name) {
|
|
30
82
|
const raw = env[name];
|
|
31
83
|
if (raw === undefined || raw === '')
|
|
@@ -47,33 +99,49 @@ function address(env, name) {
|
|
|
47
99
|
* GATE_ORIGIN required; this gate's own public https origin (the SIWE audience)
|
|
48
100
|
* ALLOWED_ORIGINS required; comma-separated origins that may call this gate
|
|
49
101
|
* PORT default 8790
|
|
50
|
-
* POSITION_MANAGER optional
|
|
102
|
+
* POSITION_MANAGER optional; selects a recorded stack on the chain (the legacy one when
|
|
103
|
+
* unset), or overrides the address for a chain with no address book
|
|
51
104
|
* SPEND_GATED_CALCULATOR optional address-book override
|
|
52
|
-
*
|
|
105
|
+
* POOL_SWAP optional address-book override; required for a v1_3 stack
|
|
106
|
+
* FLETH optional address-book override; the chain's flETH wrapper
|
|
107
|
+
* FLAUNCH_VARIANT optional; v1_2, multichain or v1_3
|
|
53
108
|
* SETTLER optional; defaults to the signing key's own address
|
|
54
|
-
* WALLET_CAP_WEI default 0.025 ETH
|
|
109
|
+
* WALLET_CAP_WEI default 0.025 ETH; the cap for ETH-paired launches
|
|
55
110
|
* ROUND_MS default 90000
|
|
56
111
|
* MIN_LOBBY_LEAD_MS default 60000
|
|
57
112
|
* GATE_ENDS_AT_GRACE_S default 10
|
|
58
113
|
* POINTS_PER_DOLLAR default 100
|
|
59
|
-
* USD_PER_ETH default 3000
|
|
114
|
+
* USD_PER_ETH default 3000; fractional allowed
|
|
115
|
+
* SPEND_TOKENS optional JSON array of { address, usdPerToken, walletCap } — the non-ETH
|
|
116
|
+
* paired tokens this gate runs rounds on. Unlisted tokens are refused.
|
|
60
117
|
*/
|
|
61
118
|
export function resolveGateEnv(env) {
|
|
62
119
|
const chainId = Number(required(env, 'CHAIN_ID'));
|
|
63
120
|
if (!Number.isSafeInteger(chainId) || chainId <= 0)
|
|
64
121
|
throw new Error('CHAIN_ID must be a positive integer');
|
|
65
|
-
const
|
|
66
|
-
|
|
122
|
+
const namedManager = address(env, 'POSITION_MANAGER');
|
|
123
|
+
// Naming a manager picks the recorded stack it belongs to — calculator and router with it — so a
|
|
124
|
+
// paired manager is never paired with the legacy calculator by a half-edited env file.
|
|
125
|
+
const recorded = deploymentFor(chainId, namedManager);
|
|
126
|
+
const positionManager = namedManager ?? recorded?.positionManager ?? null;
|
|
67
127
|
const spendGatedCalculator = address(env, 'SPEND_GATED_CALCULATOR') ?? recorded?.spendGatedCalculator ?? null;
|
|
68
128
|
if (!positionManager || !spendGatedCalculator) {
|
|
69
129
|
throw new Error(`chain ${chainId} has no recorded deployment — set POSITION_MANAGER and SPEND_GATED_CALCULATOR ` +
|
|
70
130
|
`with addresses read back from that chain, or use a chain from the address book`);
|
|
71
131
|
}
|
|
72
132
|
const variantOverride = env['FLAUNCH_VARIANT'];
|
|
73
|
-
if (variantOverride !== undefined &&
|
|
74
|
-
|
|
133
|
+
if (variantOverride !== undefined &&
|
|
134
|
+
variantOverride !== 'v1_2' &&
|
|
135
|
+
variantOverride !== 'multichain' &&
|
|
136
|
+
variantOverride !== 'v1_3') {
|
|
137
|
+
throw new Error(`FLAUNCH_VARIANT must be v1_2, multichain or v1_3, not ${variantOverride}`);
|
|
75
138
|
}
|
|
76
|
-
const flaunchVariant = variantOverride ?? recorded?.flaunchVariant ?? '
|
|
139
|
+
const flaunchVariant = variantOverride ?? recorded?.flaunchVariant ?? 'v1_2';
|
|
140
|
+
const poolSwap = address(env, 'POOL_SWAP') ?? recorded?.poolSwap ?? null;
|
|
141
|
+
if (flaunchVariant === 'v1_3' && !poolSwap) {
|
|
142
|
+
throw new Error('a v1_3 stack needs POOL_SWAP — the approved router a paired-token buy goes through');
|
|
143
|
+
}
|
|
144
|
+
const fleth = address(env, 'FLETH') ?? recorded?.fleth ?? null;
|
|
77
145
|
const signerPrivateKey = required(env, 'SIGNER_PRIVATE_KEY');
|
|
78
146
|
if (!/^0x[0-9a-fA-F]{64}$/.test(signerPrivateKey)) {
|
|
79
147
|
throw new Error('SIGNER_PRIVATE_KEY must be a 32-byte hex key');
|
|
@@ -103,24 +171,58 @@ export function resolveGateEnv(env) {
|
|
|
103
171
|
gateOrigin: required(env, 'GATE_ORIGIN'),
|
|
104
172
|
allowedOrigins,
|
|
105
173
|
port: integer(env, 'PORT', 8790),
|
|
106
|
-
deployment: {
|
|
107
|
-
|
|
174
|
+
deployment: {
|
|
175
|
+
positionManager,
|
|
176
|
+
spendGatedCalculator,
|
|
177
|
+
flaunchVariant,
|
|
178
|
+
...(poolSwap ? { poolSwap } : {}),
|
|
179
|
+
...(fleth ? { fleth } : {}),
|
|
180
|
+
},
|
|
181
|
+
walletCap: BigInt(env['WALLET_CAP_WEI'] ?? 25000000000000000n.toString()),
|
|
108
182
|
roundDurationMs: integer(env, 'ROUND_MS', 90_000),
|
|
109
183
|
minLobbyLeadMs: integer(env, 'MIN_LOBBY_LEAD_MS', 60_000),
|
|
110
184
|
gateEndsAtGraceS: integer(env, 'GATE_ENDS_AT_GRACE_S', 10),
|
|
111
185
|
pointsPerDollar: integer(env, 'POINTS_PER_DOLLAR', 100),
|
|
112
|
-
usdPerEth:
|
|
186
|
+
usdPerEth: positiveNumber(env, 'USD_PER_ETH', 3_000),
|
|
187
|
+
spendTokens: spendTokens(env),
|
|
113
188
|
settler: address(env, 'SETTLER'),
|
|
114
189
|
};
|
|
115
190
|
}
|
|
191
|
+
const erc20 = parseAbi(['function symbol() view returns (string)', 'function decimals() view returns (uint8)']);
|
|
192
|
+
/** Whether a paired token is ETH by another name: native, or the chain's flETH wrapper. */
|
|
193
|
+
function isEthEquivalent(token, fleth) {
|
|
194
|
+
return token.isNative || (fleth !== undefined && token.address.toLowerCase() === fleth.toLowerCase());
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* The price list a running gate answers adoption with.
|
|
198
|
+
*
|
|
199
|
+
* An override (an oracle, a test) is asked first; the env map second; ETH and its wrapper are the
|
|
200
|
+
* operator's `USD_PER_ETH`; anything else is unpriced and the launch is refused.
|
|
201
|
+
*/
|
|
202
|
+
function priceList(config, override) {
|
|
203
|
+
return async (token) => {
|
|
204
|
+
if (override) {
|
|
205
|
+
const quoted = await override(token);
|
|
206
|
+
if (quoted !== null)
|
|
207
|
+
return quoted;
|
|
208
|
+
}
|
|
209
|
+
const listed = config.spendTokens.get(token.address.toLowerCase());
|
|
210
|
+
if (listed)
|
|
211
|
+
return listed.usdPerToken;
|
|
212
|
+
if (isEthEquivalent(token, config.deployment.fleth))
|
|
213
|
+
return config.usdPerEth;
|
|
214
|
+
return null;
|
|
215
|
+
};
|
|
216
|
+
}
|
|
116
217
|
export async function startGate(game, gameConfig, overrides = {}) {
|
|
117
218
|
const config = resolveGateEnv(overrides.env ?? process.env);
|
|
219
|
+
const maxPointsPerPlayer = game.rewardBounds(gameConfig).maxPointsPerPlayer;
|
|
118
220
|
// The same refusal the demo makes: an economy that cannot pay out is caught before anyone plays.
|
|
119
221
|
const economy = resolveEconomy({
|
|
120
|
-
maxPointsPerPlayer
|
|
121
|
-
|
|
222
|
+
maxPointsPerPlayer,
|
|
223
|
+
walletCap: config.walletCap,
|
|
122
224
|
pointsPerDollar: config.pointsPerDollar,
|
|
123
|
-
|
|
225
|
+
usdPerSpendToken: config.usdPerEth,
|
|
124
226
|
});
|
|
125
227
|
if (!economy.ok) {
|
|
126
228
|
throw new Error(`That economy does not work: ${economy.problem}. Try ${economy.suggestedPointsPerDollar} points per dollar.`);
|
|
@@ -131,7 +233,43 @@ export async function startGate(game, gameConfig, overrides = {}) {
|
|
|
131
233
|
signerPrivateKey: config.signerPrivateKey,
|
|
132
234
|
spendGatedCalculator: config.deployment.spendGatedCalculator,
|
|
133
235
|
sessionSecret: config.sessionSecret,
|
|
236
|
+
positionManager: config.deployment.positionManager,
|
|
237
|
+
flaunchVariant: config.deployment.flaunchVariant,
|
|
238
|
+
...(config.deployment.poolSwap ? { poolSwap: config.deployment.poolSwap } : {}),
|
|
134
239
|
});
|
|
240
|
+
// Each listed spend token: read what the chain says it is, and refuse an economy that does not
|
|
241
|
+
// fit its cap now, at boot, rather than at the first launch somebody has already paid for.
|
|
242
|
+
const announcedSpendTokens = [];
|
|
243
|
+
for (const pricing of config.spendTokens.values()) {
|
|
244
|
+
let symbol;
|
|
245
|
+
let decimals;
|
|
246
|
+
try {
|
|
247
|
+
[symbol, decimals] = await Promise.all([
|
|
248
|
+
client.readContract({ address: pricing.address, abi: erc20, functionName: 'symbol' }),
|
|
249
|
+
client.readContract({ address: pricing.address, abi: erc20, functionName: 'decimals' }).then(Number),
|
|
250
|
+
]);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
throw new Error(`SPEND_TOKENS: ${pricing.address} does not answer symbol()/decimals() on chain ${config.chainId}`);
|
|
254
|
+
}
|
|
255
|
+
const fit = resolveEconomy({
|
|
256
|
+
maxPointsPerPlayer,
|
|
257
|
+
walletCap: pricing.walletCap,
|
|
258
|
+
pointsPerDollar: config.pointsPerDollar,
|
|
259
|
+
usdPerSpendToken: pricing.usdPerToken,
|
|
260
|
+
decimals,
|
|
261
|
+
});
|
|
262
|
+
if (!fit.ok) {
|
|
263
|
+
throw new Error(`That economy does not work for ${symbol}: ${fit.problem}. Try ${fit.suggestedPointsPerDollar} points per dollar.`);
|
|
264
|
+
}
|
|
265
|
+
announcedSpendTokens.push({
|
|
266
|
+
address: pricing.address,
|
|
267
|
+
symbol,
|
|
268
|
+
decimals,
|
|
269
|
+
usdPerToken: pricing.usdPerToken,
|
|
270
|
+
walletCap: pricing.walletCap.toString(),
|
|
271
|
+
});
|
|
272
|
+
}
|
|
135
273
|
const pool = new pg.Pool({ connectionString: config.databaseUrl });
|
|
136
274
|
await migrate(pool);
|
|
137
275
|
const ledger = new Ledger(pool);
|
|
@@ -142,14 +280,16 @@ export async function startGate(game, gameConfig, overrides = {}) {
|
|
|
142
280
|
contracts: {
|
|
143
281
|
positionManager: config.deployment.positionManager,
|
|
144
282
|
spendGatedCalculator: config.deployment.spendGatedCalculator,
|
|
283
|
+
...(config.deployment.poolSwap ? { poolSwap: config.deployment.poolSwap } : {}),
|
|
145
284
|
},
|
|
146
285
|
signer: signer.address,
|
|
147
286
|
settler,
|
|
148
|
-
|
|
287
|
+
walletCap: config.walletCap.toString(),
|
|
149
288
|
roundDurationMs: config.roundDurationMs,
|
|
150
289
|
minLobbyLeadMs: config.minLobbyLeadMs,
|
|
151
290
|
gateEndsAtGraceS: config.gateEndsAtGraceS,
|
|
152
291
|
flaunchVariant: config.deployment.flaunchVariant,
|
|
292
|
+
...(announcedSpendTokens.length > 0 ? { spendTokens: announcedSpendTokens } : {}),
|
|
153
293
|
requiresEoa: false,
|
|
154
294
|
accepting: true,
|
|
155
295
|
publicLaunchesOpen: true,
|
|
@@ -161,6 +301,7 @@ export async function startGate(game, gameConfig, overrides = {}) {
|
|
|
161
301
|
config: gameConfig,
|
|
162
302
|
pointsPerDollar: config.pointsPerDollar,
|
|
163
303
|
usdPerEth: config.usdPerEth,
|
|
304
|
+
priceFor: priceList(config, overrides.priceProvider),
|
|
164
305
|
sessions: new Sessions(config.sessionSecret, config.signInDomain, config.gateOrigin),
|
|
165
306
|
claims: new Claims(pool, ledger, signer),
|
|
166
307
|
discovery: new Discovery(client, {
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/room.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
2
|
import type { Command, Decision, GameModule, PlayerId, Refusal, RoundWindow } from '@flayerlabs/gamemode-spec';
|
|
3
|
-
import type
|
|
3
|
+
import { type LaunchContext, type RoundTerms, type SpendToken } from '@flayerlabs/gamemode-spec/live';
|
|
4
4
|
/**
|
|
5
5
|
* Everything except a wake.
|
|
6
6
|
*
|
|
@@ -43,10 +43,13 @@ export declare class Room<Config, State, Event, Action, PublicView, PlayerView>
|
|
|
43
43
|
config: Config;
|
|
44
44
|
seed: number;
|
|
45
45
|
window: RoundWindow;
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
unitsPerPoint: bigint;
|
|
47
|
+
walletCap: bigint;
|
|
48
48
|
pointsPerDollar: number;
|
|
49
|
-
|
|
49
|
+
/** The token spend is measured in. Defaults to ETH — a flETH- or ETH-paired round. */
|
|
50
|
+
spendToken?: SpendToken;
|
|
51
|
+
/** The market price of one whole spend token, in dollars, at adoption. */
|
|
52
|
+
usdPerSpendToken: number;
|
|
50
53
|
maxPointsPerPlayer: number;
|
|
51
54
|
scoreAuthority: ScoreAuthority;
|
|
52
55
|
poolId: string;
|
package/dist/room.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room.d.ts","sourceRoot":"","sources":["../src/room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,KAAK,EAAS,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACtH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"room.d.ts","sourceRoot":"","sources":["../src/room.ts"],"names":[],"mappings":"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"}
|
package/dist/room.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Round } from '@flayerlabs/gamemode-spec/round';
|
|
2
|
+
import { ETH_SPEND_TOKEN } from '@flayerlabs/gamemode-spec/live';
|
|
2
3
|
import { isRefusal } from '@flayerlabs/gamemode-spec';
|
|
3
4
|
import { inTransaction, toBigInt } from './store.js';
|
|
4
5
|
/**
|
|
@@ -56,26 +57,37 @@ export class Room {
|
|
|
56
57
|
closesAt: round.window.closesAt,
|
|
57
58
|
booksCloseAt,
|
|
58
59
|
});
|
|
60
|
+
const spendToken = Object.freeze({ ...(round.spendToken ?? ETH_SPEND_TOKEN) });
|
|
59
61
|
const terms = Object.freeze({
|
|
60
62
|
maxPointsPerPlayer: round.maxPointsPerPlayer,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
walletCap: round.walletCap,
|
|
64
|
+
unitsPerPoint: round.unitsPerPoint,
|
|
63
65
|
pointsPerDollar: round.pointsPerDollar,
|
|
64
|
-
|
|
66
|
+
usdPerSpendToken: round.usdPerSpendToken,
|
|
67
|
+
spendToken,
|
|
65
68
|
});
|
|
66
69
|
const started = Round.start(game, round.config, round.seed, round.window);
|
|
70
|
+
// The columns keep their original wei-flavoured names while the API does not. Renaming them
|
|
71
|
+
// would be a migration with no reader outside this file, so the divergence is deliberate:
|
|
72
|
+
// wei_per_point is unitsPerPoint, wallet_cap_wei is walletCap, and usd_per_spend_token is
|
|
73
|
+
// usdPerSpendToken. usd_per_eth is a legacy column, written for provenance only.
|
|
67
74
|
await pool.query(`insert into rounds (
|
|
68
75
|
id, game_id, wei_per_point, wallet_cap_wei, points_per_dollar, usd_per_eth,
|
|
76
|
+
spend_token, spend_symbol, spend_decimals, usd_per_spend_token,
|
|
69
77
|
max_points_per_player, score_authority,
|
|
70
78
|
pool_id, opens_at, closes_at, books_close_at,
|
|
71
79
|
coin_address, coin_name, coin_symbol, coin_image_url, state, seq
|
|
72
|
-
) values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, 0)`, [
|
|
80
|
+
) values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, 0)`, [
|
|
73
81
|
round.id,
|
|
74
82
|
game.id,
|
|
75
|
-
round.
|
|
76
|
-
round.
|
|
83
|
+
round.unitsPerPoint.toString(),
|
|
84
|
+
round.walletCap.toString(),
|
|
77
85
|
round.pointsPerDollar,
|
|
78
|
-
round.
|
|
86
|
+
round.usdPerSpendToken,
|
|
87
|
+
spendToken.address.toLowerCase(),
|
|
88
|
+
spendToken.symbol,
|
|
89
|
+
spendToken.decimals,
|
|
90
|
+
round.usdPerSpendToken,
|
|
79
91
|
round.maxPointsPerPlayer,
|
|
80
92
|
round.scoreAuthority,
|
|
81
93
|
round.poolId,
|
|
@@ -94,6 +106,7 @@ export class Room {
|
|
|
94
106
|
static async load(pool, game, id) {
|
|
95
107
|
const result = await pool.query(`select state, seq, pool_id, opens_at, closes_at, books_close_at, wei_per_point,
|
|
96
108
|
wallet_cap_wei, points_per_dollar, usd_per_eth,
|
|
109
|
+
spend_token, spend_symbol, spend_decimals, usd_per_spend_token,
|
|
97
110
|
max_points_per_player, score_authority, game_id,
|
|
98
111
|
coin_address, coin_name, coin_symbol, coin_image_url
|
|
99
112
|
from rounds where id = $1`, [id]);
|
|
@@ -115,10 +128,18 @@ export class Room {
|
|
|
115
128
|
});
|
|
116
129
|
const terms = Object.freeze({
|
|
117
130
|
maxPointsPerPlayer: Number(row.max_points_per_player),
|
|
118
|
-
|
|
119
|
-
|
|
131
|
+
walletCap: toBigInt(row.wallet_cap_wei),
|
|
132
|
+
unitsPerPoint: toBigInt(row.wei_per_point),
|
|
120
133
|
pointsPerDollar: Number(row.points_per_dollar),
|
|
121
|
-
|
|
134
|
+
spendToken: Object.freeze({
|
|
135
|
+
address: row.spend_token,
|
|
136
|
+
symbol: row.spend_symbol,
|
|
137
|
+
decimals: Number(row.spend_decimals),
|
|
138
|
+
isNative: row.spend_token.toLowerCase() === ETH_SPEND_TOKEN.address,
|
|
139
|
+
}),
|
|
140
|
+
// usd_per_eth is the legacy column: on a row written before the spend-token columns existed
|
|
141
|
+
// it holds that round's ETH price, which is exactly its spend token's price.
|
|
142
|
+
usdPerSpendToken: row.usd_per_spend_token === null ? Number(row.usd_per_eth) : Number(row.usd_per_spend_token),
|
|
122
143
|
});
|
|
123
144
|
return new Room(pool, game, id, Round.resume(game, row.state, window), window, launch, terms, row.score_authority, row.seq);
|
|
124
145
|
}
|
package/dist/room.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room.js","sourceRoot":"","sources":["../src/room.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"room.js","sourceRoot":"","sources":["../src/room.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type FastifyInstance } from 'fastify';
|
|
2
2
|
import type { Pool } from 'pg';
|
|
3
3
|
import type { Command, GameModule, PlayerId } from '@flayerlabs/gamemode-spec';
|
|
4
|
+
import type { SpendToken } from '@flayerlabs/gamemode-spec/live';
|
|
5
|
+
import type { FlaunchVariant } from './chain/chains.js';
|
|
4
6
|
import { Room } from './room.js';
|
|
5
7
|
import { Claims } from './claims.js';
|
|
6
8
|
import { Sessions } from './sessions.js';
|
|
@@ -23,7 +25,15 @@ interface GateBaseOptions {
|
|
|
23
25
|
claims: Claims;
|
|
24
26
|
/** How many points a dollar buys. The only economic number anyone sets by hand. */
|
|
25
27
|
pointsPerDollar: number;
|
|
28
|
+
/** The price of ETH — what an ETH-paired round is priced at. */
|
|
26
29
|
usdPerEth: number;
|
|
30
|
+
/**
|
|
31
|
+
* The price of one whole spend token, for a round whose coin is paired with something other
|
|
32
|
+
* than ETH — or null to refuse the launch as unpriced. Consulted at adoption with the token the
|
|
33
|
+
* chain reported. Omitted, only native ETH is priced (at `usdPerEth`) and every other pairing is
|
|
34
|
+
* refused: a gate that guessed a price would be authorising real money on a made-up number.
|
|
35
|
+
*/
|
|
36
|
+
priceFor?: PriceFor;
|
|
27
37
|
/** Verifies from the chain that a coin really is a game launch. */
|
|
28
38
|
discovery?: Discovery;
|
|
29
39
|
/** Keeps the ledger's view of spending level with the chain's. */
|
|
@@ -65,6 +75,18 @@ interface GateBaseOptions {
|
|
|
65
75
|
/** The only cosmetic reaction IDs this game may broadcast. Omitted disables reactions. */
|
|
66
76
|
reactionIds?: readonly string[];
|
|
67
77
|
}
|
|
78
|
+
/** A price for one whole spend token in dollars, or null when this gate has none for it. */
|
|
79
|
+
export type PriceFor = (token: SpendToken) => Promise<number | null> | number | null;
|
|
80
|
+
/** One entry of a gate's announced price list — what launch tooling checks a pairing against. */
|
|
81
|
+
export interface AnnouncedSpendToken {
|
|
82
|
+
address: `0x${string}`;
|
|
83
|
+
symbol: string;
|
|
84
|
+
decimals: number;
|
|
85
|
+
/** The price this gate will fix rounds on that token at. */
|
|
86
|
+
usdPerToken: number;
|
|
87
|
+
/** The per-wallet cap the launch should write, in this token's base units. A decimal string. */
|
|
88
|
+
walletCap: string;
|
|
89
|
+
}
|
|
68
90
|
/** Resolve one immutable rules config after the launch has been verified. */
|
|
69
91
|
export type VerifiedLaunch = Readonly<Omit<Launch, 'poolKey'>> & {
|
|
70
92
|
readonly poolKey: Readonly<PoolKey>;
|
|
@@ -96,17 +118,25 @@ export interface GateAnnouncement {
|
|
|
96
118
|
contracts: {
|
|
97
119
|
positionManager: `0x${string}`;
|
|
98
120
|
spendGatedCalculator: `0x${string}`;
|
|
121
|
+
/** The approved swap router a paired-token buy goes through. Present on a `v1_3` stack. */
|
|
122
|
+
poolSwap?: `0x${string}`;
|
|
99
123
|
};
|
|
100
124
|
/** The address launches must name as their trusted signer for this gate to adopt them. */
|
|
101
125
|
signer: `0x${string}`;
|
|
102
126
|
/** May lift the gate early or rotate the signer on-chain; the launch writes it into the pool. */
|
|
103
127
|
settler: `0x${string}`;
|
|
104
|
-
/** A decimal string — wei does not survive JSON as a number. */
|
|
105
|
-
|
|
128
|
+
/** The per-wallet cap for an ETH-paired launch, in wei. A decimal string — wei does not survive JSON as a number. */
|
|
129
|
+
walletCap: string;
|
|
106
130
|
roundDurationMs: number;
|
|
107
131
|
minLobbyLeadMs: number;
|
|
108
132
|
gateEndsAtGraceS: number;
|
|
109
|
-
flaunchVariant:
|
|
133
|
+
flaunchVariant: FlaunchVariant;
|
|
134
|
+
/**
|
|
135
|
+
* The non-ETH paired tokens this gate will run rounds on, each with the cap a launch on it should
|
|
136
|
+
* write. Absent or empty means ETH pairings only. Launch tooling refuses a pairing that is not
|
|
137
|
+
* listed here, which is the fail-closed answer for a gate that has not been told the token's price.
|
|
138
|
+
*/
|
|
139
|
+
spendTokens?: AnnouncedSpendToken[];
|
|
110
140
|
requiresEoa: boolean;
|
|
111
141
|
accepting: boolean;
|
|
112
142
|
/**
|