@reppo/cli 0.2.0 → 0.4.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/README.md +6 -5
- package/dist/bin.js +1 -1
- package/dist/chain/abis.d.ts +57 -78
- package/dist/chain/abis.d.ts.map +1 -1
- package/dist/chain/abis.js +24 -20
- package/dist/chain/abis.js.map +1 -1
- package/dist/chain/contracts.d.ts +9 -6
- package/dist/chain/contracts.d.ts.map +1 -1
- package/dist/chain/contracts.js +3 -3
- package/dist/chain/contracts.js.map +1 -1
- package/dist/chain/errors.d.ts.map +1 -1
- package/dist/chain/errors.js +30 -4
- package/dist/chain/errors.js.map +1 -1
- package/dist/commands/claim-emissions.d.ts.map +1 -1
- package/dist/commands/claim-emissions.js +17 -38
- package/dist/commands/claim-emissions.js.map +1 -1
- package/dist/commands/list/pods.d.ts +1 -0
- package/dist/commands/list/pods.d.ts.map +1 -1
- package/dist/commands/list/pods.js +143 -21
- package/dist/commands/list/pods.js.map +1 -1
- package/dist/commands/mint-pod.d.ts +0 -3
- package/dist/commands/mint-pod.d.ts.map +1 -1
- package/dist/commands/mint-pod.js +117 -228
- package/dist/commands/mint-pod.js.map +1 -1
- package/dist/commands/register-agent.d.ts.map +1 -1
- package/dist/commands/register-agent.js +26 -30
- package/dist/commands/register-agent.js.map +1 -1
- package/dist/commands/vote.d.ts +1 -1
- package/dist/commands/vote.d.ts.map +1 -1
- package/dist/commands/vote.js +48 -31
- package/dist/commands/vote.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/vote.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `reppo vote --pod <id> --
|
|
2
|
+
* `reppo vote --pod <id> --votes <n> --like|--dislike` — cast an
|
|
3
3
|
* on-chain vote against a creative pod. Uses REPPO_VOTER_PRIVATE_KEY
|
|
4
4
|
* if set (separates voter and publisher EOAs since publishers cannot
|
|
5
5
|
* vote on their own pods), else falls back to REPPO_PRIVATE_KEY.
|
|
6
6
|
*
|
|
7
|
+
* On PodManager V2 the second arg to `vote(podId, votes, upVote)` is
|
|
8
|
+
* the amount of voting power to spend, NOT a subnetId. The caller's
|
|
9
|
+
* subnet access is enforced inside the contract via the pod's parent
|
|
10
|
+
* subnet — the CLI no longer needs a subnetId here; if the voter
|
|
11
|
+
* lacks access the contract reverts with `VoterLacksSubnetAccess` and
|
|
12
|
+
* the decoder surfaces a structured hint.
|
|
13
|
+
*
|
|
7
14
|
* Pre-flight checks (read-only) before sending:
|
|
8
|
-
* 1.
|
|
9
|
-
* 2. Voter has
|
|
15
|
+
* 1. Pod is valid for the current epoch (PodManager.podValid)
|
|
16
|
+
* 2. Voter has at least `--votes` voting power (veREPPO)
|
|
10
17
|
* Both produce structured errors with recovery hints.
|
|
11
18
|
*
|
|
12
19
|
* Idempotency two-phase write protocol:
|
|
@@ -18,25 +25,25 @@ import { Option } from 'clipanion';
|
|
|
18
25
|
import { BaseCommand } from './_base.js';
|
|
19
26
|
import { cliError, emit } from '../output/format.js';
|
|
20
27
|
import { createClients, nextNonce } from '../chain/clients.js';
|
|
21
|
-
import { podManager,
|
|
28
|
+
import { podManager, veReppo } from '../chain/contracts.js';
|
|
22
29
|
import { decodeRevert } from '../chain/errors.js';
|
|
23
30
|
import { begin, markSubmitted, markConfirmed, markFailed, peekIdempotent } from '../state/idempotency.js';
|
|
24
31
|
const COMMAND = 'vote';
|
|
25
32
|
export class VoteCommand extends BaseCommand {
|
|
26
33
|
static paths = [['vote']];
|
|
27
34
|
static usage = BaseCommand.Usage({
|
|
28
|
-
description: 'Cast a vote on a Reppo pod
|
|
35
|
+
description: 'Cast a vote on a Reppo pod, spending voting power.',
|
|
29
36
|
examples: [
|
|
30
|
-
['Like pod 34
|
|
31
|
-
'reppo vote --pod 34 --
|
|
37
|
+
['Like pod 34 with 100 voting power',
|
|
38
|
+
'reppo vote --pod 34 --votes 100 --like'],
|
|
32
39
|
['Dislike with idempotency key',
|
|
33
|
-
'reppo vote --pod 35 --
|
|
40
|
+
'reppo vote --pod 35 --votes 50 --dislike --idempotency-key job-3858-B'],
|
|
34
41
|
['Dry-run (simulate only)',
|
|
35
|
-
'reppo vote --pod 34 --
|
|
42
|
+
'reppo vote --pod 34 --votes 100 --like --dry-run'],
|
|
36
43
|
],
|
|
37
44
|
});
|
|
38
45
|
pod = Option.String('--pod', { required: true, description: 'Pod token ID' });
|
|
39
|
-
|
|
46
|
+
votes = Option.String('--votes', { required: true, description: 'Voting power to spend (positive integer)' });
|
|
40
47
|
like = Option.Boolean('--like', false);
|
|
41
48
|
dislike = Option.Boolean('--dislike', false);
|
|
42
49
|
idempotencyKey = Option.String('--idempotency-key');
|
|
@@ -52,13 +59,22 @@ export class VoteCommand extends BaseCommand {
|
|
|
52
59
|
throw cliError('MISSING_PRIVATE_KEY', 'No signing key available.', 'Set REPPO_VOTER_PRIVATE_KEY (preferred) or REPPO_PRIVATE_KEY in env.');
|
|
53
60
|
}
|
|
54
61
|
const podId = BigInt(this.pod);
|
|
55
|
-
|
|
62
|
+
let votes;
|
|
63
|
+
try {
|
|
64
|
+
votes = BigInt(this.votes);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
throw cliError('INVALID_VOTES', `--votes must be a positive integer; got "${this.votes}".`);
|
|
68
|
+
}
|
|
69
|
+
if (votes <= 0n) {
|
|
70
|
+
throw cliError('INVALID_VOTES', `--votes must be >= 1; got "${this.votes}".`);
|
|
71
|
+
}
|
|
56
72
|
const likeBool = this.like;
|
|
57
73
|
// Args fingerprint baked into the cache so re-using one key with
|
|
58
|
-
// different (--pod, --
|
|
74
|
+
// different (--pod, --votes, --like) is rejected with
|
|
59
75
|
// IDEMPOTENCY_ARGS_MISMATCH instead of silently returning the
|
|
60
76
|
// wrong cached result.
|
|
61
|
-
const args = { podId: podId.toString(),
|
|
77
|
+
const args = { podId: podId.toString(), votes: votes.toString(), like: likeBool };
|
|
62
78
|
// Dry-run NEVER consults or mutates the idempotency cache. A
|
|
63
79
|
// simulation is read-only by definition; returning a cached real
|
|
64
80
|
// tx hash with `simulated: true` would be a lie, and writing
|
|
@@ -82,26 +98,27 @@ export class VoteCommand extends BaseCommand {
|
|
|
82
98
|
...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),
|
|
83
99
|
});
|
|
84
100
|
const pm = podManager(cfg.network);
|
|
85
|
-
const sm = subnetManager(cfg.network);
|
|
86
101
|
const vr = veReppo(cfg.network);
|
|
87
|
-
// Pre-flight:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
102
|
+
// Pre-flight: pod must be valid for the current epoch. Cheaper
|
|
103
|
+
// to fail here than to send a tx that will revert with
|
|
104
|
+
// PodNotValidForEpoch.
|
|
105
|
+
const podOk = await clients.publicClient.readContract({
|
|
106
|
+
address: pm.address, abi: pm.abi, functionName: 'podValid', args: [podId],
|
|
107
|
+
});
|
|
108
|
+
if (!podOk) {
|
|
109
|
+
throw cliError('POD_NOT_VALID_FOR_EPOCH', `Pod ${podId} is not valid for the current voting epoch.`, 'Check `reppo query pod <id>` to verify validity; pod publishers may need to republish.');
|
|
93
110
|
}
|
|
94
|
-
// Pre-flight:
|
|
95
|
-
const
|
|
96
|
-
address:
|
|
97
|
-
})
|
|
98
|
-
if (
|
|
99
|
-
throw cliError('
|
|
111
|
+
// Pre-flight: voting power must cover `--votes`.
|
|
112
|
+
const power = await clients.publicClient.readContract({
|
|
113
|
+
address: vr.address, abi: vr.abi, functionName: 'votingPowerOf', args: [clients.account.address],
|
|
114
|
+
});
|
|
115
|
+
if (power < votes) {
|
|
116
|
+
throw cliError('INSUFFICIENT_VOTING_POWER', `Voter has ${power} voting power but --votes is ${votes}.`, 'Lock more REPPO with `reppo lock <amount> --duration <seconds>` to increase voting power, or pass a smaller --votes.');
|
|
100
117
|
}
|
|
101
118
|
if (this.dryRun) {
|
|
102
119
|
const sim = await clients.publicClient.simulateContract({
|
|
103
120
|
address: pm.address, abi: pm.abi, functionName: 'vote',
|
|
104
|
-
args: [podId,
|
|
121
|
+
args: [podId, votes, likeBool], account: clients.account,
|
|
105
122
|
}).catch((e) => {
|
|
106
123
|
const decoded = decodeRevert(e);
|
|
107
124
|
throw cliError(decoded.code, 'Simulation reverted', decoded.hint);
|
|
@@ -109,7 +126,7 @@ export class VoteCommand extends BaseCommand {
|
|
|
109
126
|
emit({
|
|
110
127
|
simulated: true,
|
|
111
128
|
podId: podId.toString(),
|
|
112
|
-
|
|
129
|
+
votes: votes.toString(),
|
|
113
130
|
like: likeBool,
|
|
114
131
|
voterPower: power.toString(),
|
|
115
132
|
gas: sim.request.gas?.toString() ?? null,
|
|
@@ -124,7 +141,7 @@ export class VoteCommand extends BaseCommand {
|
|
|
124
141
|
const nonce = await nextNonce(clients.publicClient, clients.account.address);
|
|
125
142
|
tx = await clients.walletClient.writeContract({
|
|
126
143
|
address: pm.address, abi: pm.abi, functionName: 'vote',
|
|
127
|
-
args: [podId,
|
|
144
|
+
args: [podId, votes, likeBool],
|
|
128
145
|
chain: clients.walletClient.chain, account: clients.account, nonce,
|
|
129
146
|
});
|
|
130
147
|
}
|
|
@@ -149,7 +166,7 @@ export class VoteCommand extends BaseCommand {
|
|
|
149
166
|
const result = {
|
|
150
167
|
txHash: tx,
|
|
151
168
|
podId: podId.toString(),
|
|
152
|
-
|
|
169
|
+
votes: votes.toString(),
|
|
153
170
|
like: likeBool,
|
|
154
171
|
voterPower: power.toString(),
|
|
155
172
|
block: receipt.blockNumber.toString(),
|
|
@@ -160,7 +177,7 @@ export class VoteCommand extends BaseCommand {
|
|
|
160
177
|
if (this.idempotencyKey)
|
|
161
178
|
await markConfirmed(this.idempotencyKey, COMMAND, args, result, tx);
|
|
162
179
|
emit(result, [
|
|
163
|
-
`✓ Voted on pod ${podId} (${likeBool ? 'like' : 'dislike'})`,
|
|
180
|
+
`✓ Voted on pod ${podId} (${likeBool ? 'like' : 'dislike'}, ${votes} votes)`,
|
|
164
181
|
` tx: ${result.basescanUrl}`,
|
|
165
182
|
` block: ${receipt.blockNumber}`,
|
|
166
183
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vote.js","sourceRoot":"","sources":["../../src/commands/vote.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vote.js","sourceRoot":"","sources":["../../src/commands/vote.ts"],"names":[],"mappings":"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"}
|