hive-stream 3.0.2 → 3.0.4
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/DOCUMENTATION.md +50 -2
- package/README.md +282 -4
- package/dist/adapters/base.adapter.d.ts +5 -0
- package/dist/adapters/base.adapter.js +9 -0
- package/dist/adapters/base.adapter.js.map +1 -1
- package/dist/adapters/mongodb.adapter.d.ts +6 -6
- package/dist/adapters/mongodb.adapter.js +36 -21
- package/dist/adapters/mongodb.adapter.js.map +1 -1
- package/dist/adapters/postgresql.adapter.d.ts +7 -0
- package/dist/adapters/postgresql.adapter.js +46 -19
- package/dist/adapters/postgresql.adapter.js.map +1 -1
- package/dist/adapters/sqlite.adapter.d.ts +4 -0
- package/dist/adapters/sqlite.adapter.js +10 -0
- package/dist/adapters/sqlite.adapter.js.map +1 -1
- package/dist/api.d.ts +13 -3
- package/dist/api.js +96 -62
- package/dist/api.js.map +1 -1
- package/dist/builders.d.ts +176 -0
- package/dist/builders.js +727 -0
- package/dist/builders.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.js +95 -3
- package/dist/config.js.map +1 -1
- package/dist/contracts/auctionhouse.contract.d.ts +4 -0
- package/dist/contracts/auctionhouse.contract.js +234 -0
- package/dist/contracts/auctionhouse.contract.js.map +1 -0
- package/dist/contracts/booking.contract.d.ts +4 -0
- package/dist/contracts/booking.contract.js +225 -0
- package/dist/contracts/booking.contract.js.map +1 -0
- package/dist/contracts/bountyboard.contract.d.ts +4 -0
- package/dist/contracts/bountyboard.contract.js +233 -0
- package/dist/contracts/bountyboard.contract.js.map +1 -0
- package/dist/contracts/bundlemarketplace.contract.d.ts +4 -0
- package/dist/contracts/bundlemarketplace.contract.js +195 -0
- package/dist/contracts/bundlemarketplace.contract.js.map +1 -0
- package/dist/contracts/charitymatch.contract.d.ts +4 -0
- package/dist/contracts/charitymatch.contract.js +172 -0
- package/dist/contracts/charitymatch.contract.js.map +1 -0
- package/dist/contracts/coinflip.contract.js +25 -22
- package/dist/contracts/coinflip.contract.js.map +1 -1
- package/dist/contracts/crowdfund.contract.d.ts +4 -0
- package/dist/contracts/crowdfund.contract.js +290 -0
- package/dist/contracts/crowdfund.contract.js.map +1 -0
- package/dist/contracts/dcabot.contract.d.ts +4 -0
- package/dist/contracts/dcabot.contract.js +217 -0
- package/dist/contracts/dcabot.contract.js.map +1 -0
- package/dist/contracts/dice.contract.js +25 -22
- package/dist/contracts/dice.contract.js.map +1 -1
- package/dist/contracts/domainregistry.contract.d.ts +4 -0
- package/dist/contracts/domainregistry.contract.js +232 -0
- package/dist/contracts/domainregistry.contract.js.map +1 -0
- package/dist/contracts/exchange.contract.js +209 -168
- package/dist/contracts/exchange.contract.js.map +1 -1
- package/dist/contracts/fanclub.contract.d.ts +4 -0
- package/dist/contracts/fanclub.contract.js +193 -0
- package/dist/contracts/fanclub.contract.js.map +1 -0
- package/dist/contracts/giftcard.contract.d.ts +4 -0
- package/dist/contracts/giftcard.contract.js +158 -0
- package/dist/contracts/giftcard.contract.js.map +1 -0
- package/dist/contracts/grantrounds.contract.d.ts +4 -0
- package/dist/contracts/grantrounds.contract.js +265 -0
- package/dist/contracts/grantrounds.contract.js.map +1 -0
- package/dist/contracts/groupbuy.contract.d.ts +4 -0
- package/dist/contracts/groupbuy.contract.js +198 -0
- package/dist/contracts/groupbuy.contract.js.map +1 -0
- package/dist/contracts/helpers.d.ts +66 -0
- package/dist/contracts/helpers.js +166 -0
- package/dist/contracts/helpers.js.map +1 -0
- package/dist/contracts/insurancepool.contract.d.ts +4 -0
- package/dist/contracts/insurancepool.contract.js +281 -0
- package/dist/contracts/insurancepool.contract.js.map +1 -0
- package/dist/contracts/invoice.contract.d.ts +4 -0
- package/dist/contracts/invoice.contract.js +193 -0
- package/dist/contracts/invoice.contract.js.map +1 -0
- package/dist/contracts/launchpad.contract.d.ts +4 -0
- package/dist/contracts/launchpad.contract.js +225 -0
- package/dist/contracts/launchpad.contract.js.map +1 -0
- package/dist/contracts/lotto.contract.js +53 -37
- package/dist/contracts/lotto.contract.js.map +1 -1
- package/dist/contracts/multisigtreasury.contract.d.ts +4 -0
- package/dist/contracts/multisigtreasury.contract.js +245 -0
- package/dist/contracts/multisigtreasury.contract.js.map +1 -0
- package/dist/contracts/nft.contract.d.ts +1 -0
- package/dist/contracts/nft.contract.js +234 -195
- package/dist/contracts/nft.contract.js.map +1 -1
- package/dist/contracts/oraclebounty.contract.d.ts +4 -0
- package/dist/contracts/oraclebounty.contract.js +250 -0
- package/dist/contracts/oraclebounty.contract.js.map +1 -0
- package/dist/contracts/payroll.contract.d.ts +4 -0
- package/dist/contracts/payroll.contract.js +232 -0
- package/dist/contracts/payroll.contract.js.map +1 -0
- package/dist/contracts/paywall.contract.d.ts +4 -0
- package/dist/contracts/paywall.contract.js +185 -0
- package/dist/contracts/paywall.contract.js.map +1 -0
- package/dist/contracts/poll.contract.js +2 -0
- package/dist/contracts/poll.contract.js.map +1 -1
- package/dist/contracts/predictionmarket.contract.d.ts +4 -0
- package/dist/contracts/predictionmarket.contract.js +213 -0
- package/dist/contracts/predictionmarket.contract.js.map +1 -0
- package/dist/contracts/proposaltimelock.contract.d.ts +4 -0
- package/dist/contracts/proposaltimelock.contract.js +250 -0
- package/dist/contracts/proposaltimelock.contract.js.map +1 -0
- package/dist/contracts/questpass.contract.d.ts +4 -0
- package/dist/contracts/questpass.contract.js +214 -0
- package/dist/contracts/questpass.contract.js.map +1 -0
- package/dist/contracts/referral.contract.d.ts +4 -0
- package/dist/contracts/referral.contract.js +238 -0
- package/dist/contracts/referral.contract.js.map +1 -0
- package/dist/contracts/rental.contract.d.ts +4 -0
- package/dist/contracts/rental.contract.js +221 -0
- package/dist/contracts/rental.contract.js.map +1 -0
- package/dist/contracts/revenuesplit.contract.d.ts +4 -0
- package/dist/contracts/revenuesplit.contract.js +211 -0
- package/dist/contracts/revenuesplit.contract.js.map +1 -0
- package/dist/contracts/rps.contract.js +48 -20
- package/dist/contracts/rps.contract.js.map +1 -1
- package/dist/contracts/savings.contract.d.ts +4 -0
- package/dist/contracts/savings.contract.js +208 -0
- package/dist/contracts/savings.contract.js.map +1 -0
- package/dist/contracts/subscription.contract.d.ts +4 -0
- package/dist/contracts/subscription.contract.js +241 -0
- package/dist/contracts/subscription.contract.js.map +1 -0
- package/dist/contracts/sweepstakes.contract.d.ts +4 -0
- package/dist/contracts/sweepstakes.contract.js +209 -0
- package/dist/contracts/sweepstakes.contract.js.map +1 -0
- package/dist/contracts/ticketing.contract.d.ts +4 -0
- package/dist/contracts/ticketing.contract.js +185 -0
- package/dist/contracts/ticketing.contract.js.map +1 -0
- package/dist/contracts/tipjar.contract.js +2 -0
- package/dist/contracts/tipjar.contract.js.map +1 -1
- package/dist/contracts/token.contract.js +135 -125
- package/dist/contracts/token.contract.js.map +1 -1
- package/dist/index.d.ts +40 -0
- package/dist/index.js +72 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +20 -0
- package/dist/metadata.js +320 -1
- package/dist/metadata.js.map +1 -1
- package/dist/providers/block-provider.d.ts +22 -0
- package/dist/providers/block-provider.js +3 -0
- package/dist/providers/block-provider.js.map +1 -0
- package/dist/providers/haf-client.d.ts +30 -0
- package/dist/providers/haf-client.js +119 -0
- package/dist/providers/haf-client.js.map +1 -0
- package/dist/providers/haf-provider.d.ts +49 -0
- package/dist/providers/haf-provider.js +256 -0
- package/dist/providers/haf-provider.js.map +1 -0
- package/dist/providers/hive-provider.d.ts +13 -0
- package/dist/providers/hive-provider.js +25 -0
- package/dist/providers/hive-provider.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.js +21 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/streamer.d.ts +65 -4
- package/dist/streamer.js +768 -72
- package/dist/streamer.js.map +1 -1
- package/dist/types/hive-stream.d.ts +317 -0
- package/dist/utils.d.ts +33 -0
- package/dist/utils.js +198 -2
- package/dist/utils.js.map +1 -1
- package/package.json +16 -1
- package/.claude/settings.local.json +0 -12
- package/.env.example +0 -3
- package/.travis.yml +0 -11
- package/AGENTS.md +0 -35
- package/CLAUDE.md +0 -75
- package/ecosystem.config.js +0 -17
- package/examples/contracts/README.md +0 -8
- package/examples/contracts/exchange.ts +0 -38
- package/examples/contracts/poll.ts +0 -21
- package/examples/contracts/rps.ts +0 -19
- package/examples/contracts/tipjar.ts +0 -19
- package/jest.config.js +0 -9
- package/test-contract-block.md +0 -19
- package/tests/actions.spec.ts +0 -252
- package/tests/adapters/actions-persistence.spec.ts +0 -144
- package/tests/adapters/postgresql.adapter.spec.ts +0 -127
- package/tests/adapters/sqlite.adapter.spec.ts +0 -181
- package/tests/config-input.spec.ts +0 -90
- package/tests/contracts/coinflip.contract.spec.ts +0 -94
- package/tests/contracts/dice.contract.spec.ts +0 -87
- package/tests/contracts/entrants.json +0 -729
- package/tests/contracts/exchange.contract.spec.ts +0 -84
- package/tests/contracts/lotto.contract.spec.ts +0 -59
- package/tests/contracts/nft.contract.spec.ts +0 -948
- package/tests/contracts/token.contract.spec.ts +0 -90
- package/tests/exchanges/coingecko.exchange.spec.ts +0 -169
- package/tests/exchanges/exchange.base.spec.ts +0 -246
- package/tests/helpers/mock-adapter.ts +0 -214
- package/tests/helpers/mock-fetch.ts +0 -165
- package/tests/hive-chain-features.spec.ts +0 -319
- package/tests/hive-rates.spec.ts +0 -443
- package/tests/integration/hive-rates.integration.spec.ts +0 -35
- package/tests/metadata.spec.ts +0 -63
- package/tests/setup.ts +0 -30
- package/tests/streamer-actions.spec.ts +0 -274
- package/tests/streamer.spec.ts +0 -342
- package/tests/types/rates.spec.ts +0 -216
- package/tests/utils.spec.ts +0 -113
- package/tsconfig.build.json +0 -4
- package/tslint.json +0 -21
- package/wallaby.js +0 -26
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPaywallContract = createPaywallContract;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const contract_1 = require("./contract");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const DEFAULT_NAME = 'paywall';
|
|
8
|
+
function createPaywallContract(options = {}) {
|
|
9
|
+
const name = options.name || DEFAULT_NAME;
|
|
10
|
+
const state = (0, helpers_1.createContractState)();
|
|
11
|
+
const createResourceSchema = zod_1.z.object({
|
|
12
|
+
resourceId: helpers_1.identifierSchema,
|
|
13
|
+
title: zod_1.z.string().min(3).max(140),
|
|
14
|
+
price: helpers_1.amountSchema,
|
|
15
|
+
asset: helpers_1.assetSchema,
|
|
16
|
+
accessDays: zod_1.z.number().int().min(1).max(3650),
|
|
17
|
+
maxPurchasesPerAccount: zod_1.z.number().int().min(1).max(100000).optional(),
|
|
18
|
+
metadata: zod_1.z.record(zod_1.z.any()).optional()
|
|
19
|
+
});
|
|
20
|
+
const resourceIdSchema = zod_1.z.object({
|
|
21
|
+
resourceId: helpers_1.identifierSchema
|
|
22
|
+
});
|
|
23
|
+
const revokeSchema = zod_1.z.object({
|
|
24
|
+
resourceId: helpers_1.identifierSchema,
|
|
25
|
+
account: zod_1.z.string().min(3).max(32)
|
|
26
|
+
});
|
|
27
|
+
const expireSchema = zod_1.z.object({
|
|
28
|
+
resourceId: helpers_1.identifierSchema.optional()
|
|
29
|
+
}).optional();
|
|
30
|
+
const initialize = async () => {
|
|
31
|
+
await (0, helpers_1.initializeTables)(state.adapter, [
|
|
32
|
+
`
|
|
33
|
+
CREATE TABLE IF NOT EXISTS paywall_resources (
|
|
34
|
+
resource_id TEXT PRIMARY KEY,
|
|
35
|
+
owner TEXT NOT NULL,
|
|
36
|
+
title TEXT NOT NULL,
|
|
37
|
+
price TEXT NOT NULL,
|
|
38
|
+
asset TEXT NOT NULL,
|
|
39
|
+
access_days INTEGER NOT NULL,
|
|
40
|
+
max_purchases_per_account INTEGER,
|
|
41
|
+
active INTEGER NOT NULL,
|
|
42
|
+
metadata TEXT,
|
|
43
|
+
created_at DATETIME NOT NULL,
|
|
44
|
+
updated_at DATETIME NOT NULL
|
|
45
|
+
)
|
|
46
|
+
`,
|
|
47
|
+
`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS paywall_access (
|
|
49
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
50
|
+
resource_id TEXT NOT NULL,
|
|
51
|
+
account TEXT NOT NULL,
|
|
52
|
+
purchases INTEGER NOT NULL,
|
|
53
|
+
status TEXT NOT NULL,
|
|
54
|
+
granted_at DATETIME NOT NULL,
|
|
55
|
+
expires_at DATETIME NOT NULL,
|
|
56
|
+
updated_at DATETIME NOT NULL,
|
|
57
|
+
UNIQUE(resource_id, account)
|
|
58
|
+
)
|
|
59
|
+
`
|
|
60
|
+
]);
|
|
61
|
+
};
|
|
62
|
+
const createResource = async (payload, ctx) => {
|
|
63
|
+
const owner = (0, helpers_1.requireSender)(ctx);
|
|
64
|
+
const existing = await state.adapter.query('SELECT resource_id FROM paywall_resources WHERE resource_id = ?', [payload.resourceId]);
|
|
65
|
+
if (existing.length > 0) {
|
|
66
|
+
throw new Error(`Resource ${payload.resourceId} already exists`);
|
|
67
|
+
}
|
|
68
|
+
await state.adapter.query(`INSERT INTO paywall_resources (
|
|
69
|
+
resource_id, owner, title, price, asset, access_days, max_purchases_per_account, active, metadata, created_at, updated_at
|
|
70
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
71
|
+
payload.resourceId,
|
|
72
|
+
owner,
|
|
73
|
+
payload.title,
|
|
74
|
+
payload.price,
|
|
75
|
+
payload.asset,
|
|
76
|
+
payload.accessDays,
|
|
77
|
+
payload.maxPurchasesPerAccount || null,
|
|
78
|
+
1,
|
|
79
|
+
JSON.stringify(payload.metadata || {}),
|
|
80
|
+
new Date(),
|
|
81
|
+
new Date()
|
|
82
|
+
]);
|
|
83
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createResource', payload, {
|
|
84
|
+
action: 'paywall_resource_created',
|
|
85
|
+
data: {
|
|
86
|
+
resourceId: payload.resourceId,
|
|
87
|
+
owner
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
const grantAccess = async (payload, ctx) => {
|
|
92
|
+
const account = (0, helpers_1.requireSender)(ctx);
|
|
93
|
+
const payment = (0, helpers_1.getIncomingPayment)(ctx);
|
|
94
|
+
const rows = await state.adapter.query('SELECT * FROM paywall_resources WHERE resource_id = ?', [payload.resourceId]);
|
|
95
|
+
if (rows.length === 0) {
|
|
96
|
+
throw new Error(`Resource ${payload.resourceId} does not exist`);
|
|
97
|
+
}
|
|
98
|
+
const resource = rows[0];
|
|
99
|
+
if (!resource.active) {
|
|
100
|
+
throw new Error('Resource is not active');
|
|
101
|
+
}
|
|
102
|
+
(0, helpers_1.assertAssetMatches)(payment.asset, resource.asset);
|
|
103
|
+
if ((0, helpers_1.toBigNumber)(payment.amount).lt(resource.price)) {
|
|
104
|
+
throw new Error('Payment amount is below the resource price');
|
|
105
|
+
}
|
|
106
|
+
const accessRows = await state.adapter.query('SELECT * FROM paywall_access WHERE resource_id = ? AND account = ?', [payload.resourceId, account]);
|
|
107
|
+
const now = new Date();
|
|
108
|
+
const baseDate = accessRows.length > 0 && (0, helpers_1.parseDateValue)(accessRows[0].expires_at) && (0, helpers_1.parseDateValue)(accessRows[0].expires_at) > now
|
|
109
|
+
? (0, helpers_1.parseDateValue)(accessRows[0].expires_at)
|
|
110
|
+
: now;
|
|
111
|
+
const nextExpires = new Date(baseDate.getTime() + Number(resource.access_days) * 24 * 60 * 60 * 1000);
|
|
112
|
+
const purchases = accessRows.length > 0 ? Number(accessRows[0].purchases) + 1 : 1;
|
|
113
|
+
if (resource.max_purchases_per_account && purchases > Number(resource.max_purchases_per_account)) {
|
|
114
|
+
throw new Error('Purchase exceeds the per-account limit for this resource');
|
|
115
|
+
}
|
|
116
|
+
await state.adapter.query(`INSERT INTO paywall_access (resource_id, account, purchases, status, granted_at, expires_at, updated_at)
|
|
117
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
118
|
+
ON CONFLICT(resource_id, account)
|
|
119
|
+
DO UPDATE SET purchases = excluded.purchases, status = excluded.status, expires_at = excluded.expires_at, updated_at = excluded.updated_at`, [payload.resourceId, account, purchases, 'active', now, nextExpires, now]);
|
|
120
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'grantAccess', payload, {
|
|
121
|
+
action: 'paywall_access_granted',
|
|
122
|
+
data: {
|
|
123
|
+
resourceId: payload.resourceId,
|
|
124
|
+
account,
|
|
125
|
+
expiresAt: nextExpires,
|
|
126
|
+
source: payment.source
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
const revokeAccess = async (payload, ctx) => {
|
|
131
|
+
const owner = (0, helpers_1.requireSender)(ctx);
|
|
132
|
+
const rows = await state.adapter.query('SELECT * FROM paywall_resources WHERE resource_id = ?', [payload.resourceId]);
|
|
133
|
+
if (rows.length === 0) {
|
|
134
|
+
throw new Error(`Resource ${payload.resourceId} does not exist`);
|
|
135
|
+
}
|
|
136
|
+
const resource = rows[0];
|
|
137
|
+
if (resource.owner !== owner) {
|
|
138
|
+
throw new Error('Only the resource owner can revoke access');
|
|
139
|
+
}
|
|
140
|
+
await state.adapter.query('UPDATE paywall_access SET status = ?, updated_at = ? WHERE resource_id = ? AND account = ?', ['revoked', new Date(), payload.resourceId, payload.account]);
|
|
141
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'revokeAccess', payload, {
|
|
142
|
+
action: 'paywall_access_revoked',
|
|
143
|
+
data: {
|
|
144
|
+
resourceId: payload.resourceId,
|
|
145
|
+
account: payload.account,
|
|
146
|
+
revokedBy: owner
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
const expireAccess = async (payload = {}, _ctx) => {
|
|
151
|
+
const rows = payload.resourceId
|
|
152
|
+
? await state.adapter.query('SELECT * FROM paywall_access WHERE resource_id = ?', [payload.resourceId])
|
|
153
|
+
: await state.adapter.query('SELECT * FROM paywall_access', []);
|
|
154
|
+
const now = new Date();
|
|
155
|
+
for (const access of rows) {
|
|
156
|
+
const expiresAt = (0, helpers_1.parseDateValue)(access.expires_at);
|
|
157
|
+
if (expiresAt && expiresAt < now && access.status === 'active') {
|
|
158
|
+
await state.adapter.query('UPDATE paywall_access SET status = ?, updated_at = ? WHERE resource_id = ? AND account = ?', ['expired', now, access.resource_id, access.account]);
|
|
159
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'expireAccess', payload, {
|
|
160
|
+
action: 'paywall_access_expired',
|
|
161
|
+
data: {
|
|
162
|
+
resourceId: access.resource_id,
|
|
163
|
+
account: access.account
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
return (0, contract_1.defineContract)({
|
|
170
|
+
name,
|
|
171
|
+
hooks: {
|
|
172
|
+
create: async ({ adapter }) => {
|
|
173
|
+
state.adapter = adapter;
|
|
174
|
+
await initialize();
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
actions: {
|
|
178
|
+
createResource: (0, contract_1.action)(createResource, { schema: createResourceSchema, trigger: 'custom_json' }),
|
|
179
|
+
grantAccess: (0, contract_1.action)(grantAccess, { schema: resourceIdSchema, trigger: ['transfer', 'recurrent_transfer'] }),
|
|
180
|
+
revokeAccess: (0, contract_1.action)(revokeAccess, { schema: revokeSchema, trigger: 'custom_json' }),
|
|
181
|
+
expireAccess: (0, contract_1.action)(expireAccess, { schema: expireSchema, trigger: ['custom_json', 'time'] })
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=paywall.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paywall.contract.js","sourceRoot":"","sources":["../../src/contracts/paywall.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createPollContract = createPollContract;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const contract_1 = require("./contract");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
6
7
|
const DEFAULT_NAME = 'polls';
|
|
7
8
|
function createPollContract(options = {}) {
|
|
8
9
|
const name = options.name || DEFAULT_NAME;
|
|
@@ -86,6 +87,7 @@ function createPollContract(options = {}) {
|
|
|
86
87
|
name,
|
|
87
88
|
hooks: {
|
|
88
89
|
create: async ({ adapter }) => {
|
|
90
|
+
(0, helpers_1.ensureSqlAdapter)(adapter);
|
|
89
91
|
state.adapter = adapter;
|
|
90
92
|
await initializeTables();
|
|
91
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poll.contract.js","sourceRoot":"","sources":["../../src/contracts/poll.contract.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"poll.contract.js","sourceRoot":"","sources":["../../src/contracts/poll.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPredictionMarketContract = createPredictionMarketContract;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const contract_1 = require("./contract");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const DEFAULT_NAME = 'predictionmarkets';
|
|
8
|
+
function createPredictionMarketContract(options = {}) {
|
|
9
|
+
const name = options.name || DEFAULT_NAME;
|
|
10
|
+
const state = (0, helpers_1.createContractState)();
|
|
11
|
+
const createMarketSchema = zod_1.z.object({
|
|
12
|
+
marketId: helpers_1.identifierSchema,
|
|
13
|
+
title: zod_1.z.string().min(3).max(140),
|
|
14
|
+
asset: helpers_1.assetSchema,
|
|
15
|
+
options: zod_1.z.array(zod_1.z.string().min(1).max(80)).min(2).max(10),
|
|
16
|
+
closesAt: zod_1.z.string(),
|
|
17
|
+
metadata: zod_1.z.record(zod_1.z.any()).optional()
|
|
18
|
+
});
|
|
19
|
+
const buyPositionSchema = zod_1.z.object({
|
|
20
|
+
marketId: helpers_1.identifierSchema,
|
|
21
|
+
option: zod_1.z.number().int().min(0)
|
|
22
|
+
});
|
|
23
|
+
const resolveSchema = zod_1.z.object({
|
|
24
|
+
marketId: helpers_1.identifierSchema,
|
|
25
|
+
winningOption: zod_1.z.number().int().min(0)
|
|
26
|
+
});
|
|
27
|
+
const claimSchema = zod_1.z.object({
|
|
28
|
+
marketId: helpers_1.identifierSchema
|
|
29
|
+
});
|
|
30
|
+
const initialize = async () => {
|
|
31
|
+
await (0, helpers_1.initializeTables)(state.adapter, [
|
|
32
|
+
`
|
|
33
|
+
CREATE TABLE IF NOT EXISTS prediction_markets (
|
|
34
|
+
market_id TEXT PRIMARY KEY,
|
|
35
|
+
creator TEXT NOT NULL,
|
|
36
|
+
title TEXT NOT NULL,
|
|
37
|
+
asset TEXT NOT NULL,
|
|
38
|
+
options_json TEXT NOT NULL,
|
|
39
|
+
closes_at DATETIME NOT NULL,
|
|
40
|
+
total_pool TEXT NOT NULL,
|
|
41
|
+
winning_option INTEGER,
|
|
42
|
+
status TEXT NOT NULL,
|
|
43
|
+
metadata TEXT,
|
|
44
|
+
created_at DATETIME NOT NULL,
|
|
45
|
+
resolved_at DATETIME
|
|
46
|
+
)
|
|
47
|
+
`,
|
|
48
|
+
`
|
|
49
|
+
CREATE TABLE IF NOT EXISTS prediction_positions (
|
|
50
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
51
|
+
market_id TEXT NOT NULL,
|
|
52
|
+
account TEXT NOT NULL,
|
|
53
|
+
option_index INTEGER NOT NULL,
|
|
54
|
+
stake_amount TEXT NOT NULL,
|
|
55
|
+
claimed INTEGER NOT NULL,
|
|
56
|
+
created_at DATETIME NOT NULL,
|
|
57
|
+
updated_at DATETIME NOT NULL,
|
|
58
|
+
UNIQUE(market_id, account, option_index)
|
|
59
|
+
)
|
|
60
|
+
`
|
|
61
|
+
]);
|
|
62
|
+
};
|
|
63
|
+
const createMarket = async (payload, ctx) => {
|
|
64
|
+
const creator = (0, helpers_1.requireSender)(ctx);
|
|
65
|
+
const existing = await state.adapter.query('SELECT market_id FROM prediction_markets WHERE market_id = ?', [payload.marketId]);
|
|
66
|
+
if (existing.length > 0) {
|
|
67
|
+
throw new Error(`Market ${payload.marketId} already exists`);
|
|
68
|
+
}
|
|
69
|
+
const closesAt = (0, helpers_1.parseDateValue)(payload.closesAt);
|
|
70
|
+
if (!closesAt || closesAt <= new Date()) {
|
|
71
|
+
throw new Error('Market close time must be in the future');
|
|
72
|
+
}
|
|
73
|
+
await state.adapter.query(`INSERT INTO prediction_markets (
|
|
74
|
+
market_id, creator, title, asset, options_json, closes_at, total_pool, winning_option, status, metadata, created_at, resolved_at
|
|
75
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
76
|
+
payload.marketId,
|
|
77
|
+
creator,
|
|
78
|
+
payload.title,
|
|
79
|
+
payload.asset,
|
|
80
|
+
JSON.stringify(payload.options),
|
|
81
|
+
closesAt,
|
|
82
|
+
'0',
|
|
83
|
+
null,
|
|
84
|
+
'open',
|
|
85
|
+
JSON.stringify(payload.metadata || {}),
|
|
86
|
+
new Date(),
|
|
87
|
+
null
|
|
88
|
+
]);
|
|
89
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createMarket', payload, {
|
|
90
|
+
action: 'prediction_market_created',
|
|
91
|
+
data: {
|
|
92
|
+
marketId: payload.marketId,
|
|
93
|
+
creator
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
const buyPosition = async (payload, ctx) => {
|
|
98
|
+
const account = (0, helpers_1.requireSender)(ctx);
|
|
99
|
+
const payment = (0, helpers_1.getIncomingPayment)(ctx);
|
|
100
|
+
const marketRows = await state.adapter.query('SELECT * FROM prediction_markets WHERE market_id = ?', [payload.marketId]);
|
|
101
|
+
if (marketRows.length === 0) {
|
|
102
|
+
throw new Error(`Market ${payload.marketId} does not exist`);
|
|
103
|
+
}
|
|
104
|
+
const market = marketRows[0];
|
|
105
|
+
const options = JSON.parse(market.options_json || '[]');
|
|
106
|
+
if (payload.option >= options.length) {
|
|
107
|
+
throw new Error('Prediction option is out of range');
|
|
108
|
+
}
|
|
109
|
+
if (market.status !== 'open') {
|
|
110
|
+
throw new Error('Market is not open');
|
|
111
|
+
}
|
|
112
|
+
if (((0, helpers_1.parseDateValue)(market.closes_at) || new Date()) <= new Date()) {
|
|
113
|
+
throw new Error('Market is closed');
|
|
114
|
+
}
|
|
115
|
+
(0, helpers_1.assertAssetMatches)(payment.asset, market.asset);
|
|
116
|
+
const rows = await state.adapter.query('SELECT * FROM prediction_positions WHERE market_id = ? AND account = ? AND option_index = ?', [payload.marketId, account, payload.option]);
|
|
117
|
+
const currentStake = rows.length > 0 ? (0, helpers_1.toBigNumber)(rows[0].stake_amount) : (0, helpers_1.toBigNumber)(0);
|
|
118
|
+
const nextStake = currentStake.plus(payment.amount);
|
|
119
|
+
await state.adapter.query(`INSERT INTO prediction_positions (market_id, account, option_index, stake_amount, claimed, created_at, updated_at)
|
|
120
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
121
|
+
ON CONFLICT(market_id, account, option_index)
|
|
122
|
+
DO UPDATE SET stake_amount = excluded.stake_amount, updated_at = excluded.updated_at`, [payload.marketId, account, payload.option, nextStake.toFixed(), 0, new Date(), new Date()]);
|
|
123
|
+
await state.adapter.query('UPDATE prediction_markets SET total_pool = ? WHERE market_id = ?', [(0, helpers_1.toBigNumber)(market.total_pool).plus(payment.amount).toFixed(), payload.marketId]);
|
|
124
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'buyPosition', payload, {
|
|
125
|
+
action: 'prediction_position_bought',
|
|
126
|
+
data: {
|
|
127
|
+
marketId: payload.marketId,
|
|
128
|
+
account,
|
|
129
|
+
option: payload.option,
|
|
130
|
+
amount: payment.amount
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
const resolveMarket = async (payload, ctx) => {
|
|
135
|
+
const rows = await state.adapter.query('SELECT * FROM prediction_markets WHERE market_id = ?', [payload.marketId]);
|
|
136
|
+
if (rows.length === 0) {
|
|
137
|
+
throw new Error(`Market ${payload.marketId} does not exist`);
|
|
138
|
+
}
|
|
139
|
+
const market = rows[0];
|
|
140
|
+
const options = JSON.parse(market.options_json || '[]');
|
|
141
|
+
if (payload.winningOption >= options.length) {
|
|
142
|
+
throw new Error('Winning option is out of range');
|
|
143
|
+
}
|
|
144
|
+
if (ctx.trigger !== 'time') {
|
|
145
|
+
const sender = (0, helpers_1.requireSender)(ctx);
|
|
146
|
+
if (sender !== market.creator) {
|
|
147
|
+
throw new Error('Only the market creator can resolve this market');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (((0, helpers_1.parseDateValue)(market.closes_at) || new Date()) > new Date()) {
|
|
151
|
+
throw new Error('Market cannot be resolved before close');
|
|
152
|
+
}
|
|
153
|
+
await state.adapter.query('UPDATE prediction_markets SET winning_option = ?, status = ?, resolved_at = ? WHERE market_id = ?', [payload.winningOption, 'resolved', new Date(), payload.marketId]);
|
|
154
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'resolveMarket', payload, {
|
|
155
|
+
action: 'prediction_market_resolved',
|
|
156
|
+
data: {
|
|
157
|
+
marketId: payload.marketId,
|
|
158
|
+
winningOption: payload.winningOption
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
const claimWinnings = async (payload, ctx) => {
|
|
163
|
+
const account = (0, helpers_1.requireSender)(ctx);
|
|
164
|
+
const marketRows = await state.adapter.query('SELECT * FROM prediction_markets WHERE market_id = ?', [payload.marketId]);
|
|
165
|
+
if (marketRows.length === 0) {
|
|
166
|
+
throw new Error(`Market ${payload.marketId} does not exist`);
|
|
167
|
+
}
|
|
168
|
+
const market = marketRows[0];
|
|
169
|
+
if (market.status !== 'resolved') {
|
|
170
|
+
throw new Error('Market is not resolved');
|
|
171
|
+
}
|
|
172
|
+
const winningRows = await state.adapter.query('SELECT * FROM prediction_positions WHERE market_id = ? AND account = ? AND option_index = ?', [payload.marketId, account, market.winning_option]);
|
|
173
|
+
if (winningRows.length === 0) {
|
|
174
|
+
throw new Error('No winning position found for this account');
|
|
175
|
+
}
|
|
176
|
+
const position = winningRows[0];
|
|
177
|
+
if (position.claimed) {
|
|
178
|
+
throw new Error('Winnings already claimed');
|
|
179
|
+
}
|
|
180
|
+
const totalWinningStakeRows = await state.adapter.query('SELECT COALESCE(SUM(stake_amount), 0) AS total FROM prediction_positions WHERE market_id = ? AND option_index = ?', [payload.marketId, market.winning_option]);
|
|
181
|
+
const totalWinningStake = (0, helpers_1.toBigNumber)(totalWinningStakeRows[0]?.total || '0');
|
|
182
|
+
if (totalWinningStake.lte(0)) {
|
|
183
|
+
throw new Error('No winning stakes exist for this market');
|
|
184
|
+
}
|
|
185
|
+
const payout = (0, helpers_1.toBigNumber)(position.stake_amount).dividedBy(totalWinningStake).multipliedBy(market.total_pool).decimalPlaces(8, 1);
|
|
186
|
+
await state.adapter.query('UPDATE prediction_positions SET claimed = ?, updated_at = ? WHERE id = ?', [1, new Date(), position.id]);
|
|
187
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'claimWinnings', payload, {
|
|
188
|
+
action: 'prediction_winnings_claim_requested',
|
|
189
|
+
data: {
|
|
190
|
+
marketId: payload.marketId,
|
|
191
|
+
account,
|
|
192
|
+
payout: payout.toFixed(),
|
|
193
|
+
asset: market.asset
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
return (0, contract_1.defineContract)({
|
|
198
|
+
name,
|
|
199
|
+
hooks: {
|
|
200
|
+
create: async ({ adapter }) => {
|
|
201
|
+
state.adapter = adapter;
|
|
202
|
+
await initialize();
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
actions: {
|
|
206
|
+
createMarket: (0, contract_1.action)(createMarket, { schema: createMarketSchema, trigger: 'custom_json' }),
|
|
207
|
+
buyPosition: (0, contract_1.action)(buyPosition, { schema: buyPositionSchema, trigger: ['transfer', 'recurrent_transfer'] }),
|
|
208
|
+
resolveMarket: (0, contract_1.action)(resolveMarket, { schema: resolveSchema, trigger: ['custom_json', 'time'] }),
|
|
209
|
+
claimWinnings: (0, contract_1.action)(claimWinnings, { schema: claimSchema, trigger: 'custom_json' })
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=predictionmarket.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predictionmarket.contract.js","sourceRoot":"","sources":["../../src/contracts/predictionmarket.contract.ts"],"names":[],"mappings":"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"}
|