@andrewkimjoseph/celina-sdk 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/build/abis/accounts.d.ts +12 -0
  2. package/build/abis/accounts.js +7 -0
  3. package/build/abis/accounts.js.map +1 -1
  4. package/build/abis/governance.d.ts +93 -0
  5. package/build/abis/governance.js +65 -0
  6. package/build/abis/governance.js.map +1 -1
  7. package/build/analytics/mcp-tool-events.js +1 -0
  8. package/build/analytics/mcp-tool-events.js.map +1 -1
  9. package/build/analytics/wallet-extract.js +1 -0
  10. package/build/analytics/wallet-extract.js.map +1 -1
  11. package/build/services/governance.service.d.ts +45 -0
  12. package/build/services/governance.service.js +227 -0
  13. package/build/services/governance.service.js.map +1 -1
  14. package/build/src/abis/accounts.d.ts +12 -0
  15. package/build/src/abis/accounts.js +7 -0
  16. package/build/src/abis/accounts.js.map +1 -1
  17. package/build/src/abis/governance.d.ts +93 -0
  18. package/build/src/abis/governance.js +65 -0
  19. package/build/src/abis/governance.js.map +1 -1
  20. package/build/src/analytics/mcp-tool-events.js +1 -0
  21. package/build/src/analytics/mcp-tool-events.js.map +1 -1
  22. package/build/src/analytics/wallet-extract.js +1 -0
  23. package/build/src/analytics/wallet-extract.js.map +1 -1
  24. package/build/src/services/governance.service.d.ts +45 -0
  25. package/build/src/services/governance.service.js +227 -0
  26. package/build/src/services/governance.service.js.map +1 -1
  27. package/build/src/tools/domains/governance.js +116 -0
  28. package/build/src/tools/domains/governance.js.map +1 -1
  29. package/build/src/tools/types.d.ts +3 -0
  30. package/build/src/tools/website-sync.js +7 -0
  31. package/build/src/tools/website-sync.js.map +1 -1
  32. package/build/src/utils/governance-queue.d.ts +14 -0
  33. package/build/src/utils/governance-queue.js +49 -0
  34. package/build/src/utils/governance-queue.js.map +1 -0
  35. package/build/tests/catalog/domains/chain-ext.js +79 -0
  36. package/build/tests/catalog/domains/chain-ext.js.map +1 -1
  37. package/build/tools/domains/governance.js +116 -0
  38. package/build/tools/domains/governance.js.map +1 -1
  39. package/build/tools/types.d.ts +3 -0
  40. package/build/tools/website-sync.js +7 -0
  41. package/build/tools/website-sync.js.map +1 -1
  42. package/build/utils/governance-queue.d.ts +14 -0
  43. package/build/utils/governance-queue.js +49 -0
  44. package/build/utils/governance-queue.js.map +1 -0
  45. package/package.json +1 -1
@@ -22,6 +22,18 @@ export declare const accountsAbi: readonly [{
22
22
  readonly type: "bool";
23
23
  }];
24
24
  readonly stateMutability: "view";
25
+ }, {
26
+ readonly type: "function";
27
+ readonly name: "voteSignerToAccount";
28
+ readonly inputs: readonly [{
29
+ readonly name: "signer";
30
+ readonly type: "address";
31
+ }];
32
+ readonly outputs: readonly [{
33
+ readonly name: "";
34
+ readonly type: "address";
35
+ }];
36
+ readonly stateMutability: "view";
25
37
  }, {
26
38
  readonly type: "function";
27
39
  readonly name: "createAccount";
@@ -13,6 +13,13 @@ export const accountsAbi = [
13
13
  outputs: [{ name: "", type: "bool" }],
14
14
  stateMutability: "view",
15
15
  },
16
+ {
17
+ type: "function",
18
+ name: "voteSignerToAccount",
19
+ inputs: [{ name: "signer", type: "address" }],
20
+ outputs: [{ name: "", type: "address" }],
21
+ stateMutability: "view",
22
+ },
16
23
  {
17
24
  type: "function",
18
25
  name: "createAccount",
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/abis/accounts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACvC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/abis/accounts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACvC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC"}
@@ -91,6 +91,99 @@ export declare const governanceAbi: readonly [{
91
91
  readonly type: "uint256";
92
92
  }];
93
93
  readonly stateMutability: "view";
94
+ }, {
95
+ readonly type: "function";
96
+ readonly name: "getVoteRecord";
97
+ readonly inputs: readonly [{
98
+ readonly name: "account";
99
+ readonly type: "address";
100
+ }, {
101
+ readonly name: "index";
102
+ readonly type: "uint256";
103
+ }];
104
+ readonly outputs: readonly [{
105
+ readonly name: "proposalId";
106
+ readonly type: "uint256";
107
+ }, {
108
+ readonly name: "deprecatedValue";
109
+ readonly type: "uint256";
110
+ }, {
111
+ readonly name: "deprecatedWeight";
112
+ readonly type: "uint256";
113
+ }, {
114
+ readonly name: "yesVotes";
115
+ readonly type: "uint256";
116
+ }, {
117
+ readonly name: "noVotes";
118
+ readonly type: "uint256";
119
+ }, {
120
+ readonly name: "abstainVotes";
121
+ readonly type: "uint256";
122
+ }];
123
+ readonly stateMutability: "view";
124
+ }, {
125
+ readonly type: "function";
126
+ readonly name: "getUpvoteRecord";
127
+ readonly inputs: readonly [{
128
+ readonly name: "account";
129
+ readonly type: "address";
130
+ }];
131
+ readonly outputs: readonly [{
132
+ readonly name: "proposalId";
133
+ readonly type: "uint256";
134
+ }, {
135
+ readonly name: "weight";
136
+ readonly type: "uint256";
137
+ }];
138
+ readonly stateMutability: "view";
139
+ }, {
140
+ readonly type: "function";
141
+ readonly name: "isDequeuedProposal";
142
+ readonly inputs: readonly [{
143
+ readonly name: "proposalId";
144
+ readonly type: "uint256";
145
+ }, {
146
+ readonly name: "index";
147
+ readonly type: "uint256";
148
+ }];
149
+ readonly outputs: readonly [{
150
+ readonly name: "";
151
+ readonly type: "bool";
152
+ }];
153
+ readonly stateMutability: "view";
154
+ }, {
155
+ readonly type: "function";
156
+ readonly name: "upvote";
157
+ readonly inputs: readonly [{
158
+ readonly name: "proposalId";
159
+ readonly type: "uint256";
160
+ }, {
161
+ readonly name: "lesser";
162
+ readonly type: "uint256";
163
+ }, {
164
+ readonly name: "greater";
165
+ readonly type: "uint256";
166
+ }];
167
+ readonly outputs: readonly [];
168
+ readonly stateMutability: "nonpayable";
169
+ }, {
170
+ readonly type: "function";
171
+ readonly name: "revokeVotes";
172
+ readonly inputs: readonly [];
173
+ readonly outputs: readonly [];
174
+ readonly stateMutability: "nonpayable";
175
+ }, {
176
+ readonly type: "function";
177
+ readonly name: "revokeUpvote";
178
+ readonly inputs: readonly [{
179
+ readonly name: "lesser";
180
+ readonly type: "uint256";
181
+ }, {
182
+ readonly name: "greater";
183
+ readonly type: "uint256";
184
+ }];
185
+ readonly outputs: readonly [];
186
+ readonly stateMutability: "nonpayable";
94
187
  }, {
95
188
  readonly type: "function";
96
189
  readonly name: "vote";
@@ -56,6 +56,71 @@ export const governanceAbi = [
56
56
  outputs: [{ name: "", type: "uint256" }],
57
57
  stateMutability: "view",
58
58
  },
59
+ {
60
+ type: "function",
61
+ name: "getVoteRecord",
62
+ inputs: [
63
+ { name: "account", type: "address" },
64
+ { name: "index", type: "uint256" },
65
+ ],
66
+ outputs: [
67
+ { name: "proposalId", type: "uint256" },
68
+ { name: "deprecatedValue", type: "uint256" },
69
+ { name: "deprecatedWeight", type: "uint256" },
70
+ { name: "yesVotes", type: "uint256" },
71
+ { name: "noVotes", type: "uint256" },
72
+ { name: "abstainVotes", type: "uint256" },
73
+ ],
74
+ stateMutability: "view",
75
+ },
76
+ {
77
+ type: "function",
78
+ name: "getUpvoteRecord",
79
+ inputs: [{ name: "account", type: "address" }],
80
+ outputs: [
81
+ { name: "proposalId", type: "uint256" },
82
+ { name: "weight", type: "uint256" },
83
+ ],
84
+ stateMutability: "view",
85
+ },
86
+ {
87
+ type: "function",
88
+ name: "isDequeuedProposal",
89
+ inputs: [
90
+ { name: "proposalId", type: "uint256" },
91
+ { name: "index", type: "uint256" },
92
+ ],
93
+ outputs: [{ name: "", type: "bool" }],
94
+ stateMutability: "view",
95
+ },
96
+ {
97
+ type: "function",
98
+ name: "upvote",
99
+ inputs: [
100
+ { name: "proposalId", type: "uint256" },
101
+ { name: "lesser", type: "uint256" },
102
+ { name: "greater", type: "uint256" },
103
+ ],
104
+ outputs: [],
105
+ stateMutability: "nonpayable",
106
+ },
107
+ {
108
+ type: "function",
109
+ name: "revokeVotes",
110
+ inputs: [],
111
+ outputs: [],
112
+ stateMutability: "nonpayable",
113
+ },
114
+ {
115
+ type: "function",
116
+ name: "revokeUpvote",
117
+ inputs: [
118
+ { name: "lesser", type: "uint256" },
119
+ { name: "greater", type: "uint256" },
120
+ ],
121
+ outputs: [],
122
+ stateMutability: "nonpayable",
123
+ },
59
124
  {
60
125
  type: "function",
61
126
  name: "vote",
@@ -1 +1 @@
1
- {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/abis/governance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/abis/governance.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YAC/B,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;SAChC;QACD,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC1C,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;YAC1C,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;SACnC;QACD,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACtC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACjD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;YAChC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;SACrC;QACD,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SACnC;QACD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7C,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;YACpC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;SAC1C;QACD,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;SACpC;QACD,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;SACnC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,eAAe,EAAE,MAAM;KACxB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;SACrC;QACD,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;SACrC;QACD,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YACvC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAClC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;SACjC;QACD,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,YAAY;KAC9B;CACO,CAAC;AAEX,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;AAGrE,MAAM,UAAU,cAAc,CAAC,IAAmB;IAChD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,uCAAuC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM;IACN,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW;CACH,CAAC;AAIX,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC;AAC1C,CAAC"}
@@ -24,6 +24,7 @@ export const MCP_TOOL_EVENT_BY_SDK_METHOD = {
24
24
  "gooddollar.getUbiClaimEligibility": "get_gooddollar_ubi_entitlement",
25
25
  "gooddollar.getWhitelistingInfo": "get_gooddollar_whitelisting_info",
26
26
  "governance.getGovernanceProposals": "get_governance_proposals",
27
+ "governance.getGovernanceVotes": "get_governance_votes",
27
28
  "governance.getLockedCeloBalance": "get_locked_celo_balance",
28
29
  "governance.getPendingWithdrawals": "get_pending_withdrawals",
29
30
  "governance.getProposalDetails": "get_proposal_details",
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,kBAAkB,EAAE,mBAAmB;IACvC,oBAAoB,EAAE,aAAa;IACnC,gCAAgC,EAAE,+BAA+B;IACjE,0BAA0B,EAAE,oBAAoB;IAChD,qBAAqB,EAAE,WAAW;IAClC,qCAAqC,EAAE,WAAW;IAClD,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,qCAAqC,EAAE,kCAAkC;IACzE,4BAA4B,EAAE,8BAA8B;IAC5D,gCAAgC,EAAE,8BAA8B;IAChE,yCAAyC,EAAE,8BAA8B;IACzE,iCAAiC,EAAE,8BAA8B;IACjE,0CAA0C,EAAE,8BAA8B;IAC1E,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,iCAAiC,EAAE,yBAAyB;IAC5D,kCAAkC,EAAE,yBAAyB;IAC7D,+BAA+B,EAAE,sBAAsB;IACvD,gCAAgC,EAAE,uBAAuB;IACzD,0BAA0B,EAAE,iBAAiB;IAC7C,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,2BAA2B,EAAE,qBAAqB;IAClD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
1
+ {"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,kBAAkB,EAAE,mBAAmB;IACvC,oBAAoB,EAAE,aAAa;IACnC,gCAAgC,EAAE,+BAA+B;IACjE,0BAA0B,EAAE,oBAAoB;IAChD,qBAAqB,EAAE,WAAW;IAClC,qCAAqC,EAAE,WAAW;IAClD,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,qCAAqC,EAAE,kCAAkC;IACzE,4BAA4B,EAAE,8BAA8B;IAC5D,gCAAgC,EAAE,8BAA8B;IAChE,yCAAyC,EAAE,8BAA8B;IACzE,iCAAiC,EAAE,8BAA8B;IACjE,0CAA0C,EAAE,8BAA8B;IAC1E,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,sBAAsB;IACvD,iCAAiC,EAAE,yBAAyB;IAC5D,kCAAkC,EAAE,yBAAyB;IAC7D,+BAA+B,EAAE,sBAAsB;IACvD,gCAAgC,EAAE,uBAAuB;IACzD,0BAA0B,EAAE,iBAAiB;IAC7C,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,2BAA2B,EAAE,qBAAqB;IAClD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
@@ -7,6 +7,7 @@ export const WALLET_EXTRACT_BY_SDK_METHOD = {
7
7
  "gooddollar.getIdentityLink": { positional: 0, objectKeys: ["address"] },
8
8
  "gooddollar.getUbiClaimEligibility": { positional: 0, objectKeys: ["address"] },
9
9
  "gooddollar.getWhitelistingInfo": { positional: 0, objectKeys: ["address"] },
10
+ "governance.getGovernanceVotes": { positional: 0, objectKeys: ["address"] },
10
11
  "governance.getLockedCeloBalance": { positional: 0, objectKeys: ["address"] },
11
12
  "governance.getPendingWithdrawals": { positional: 0, objectKeys: ["address"] },
12
13
  "humanness.checkHumanness": { positional: 0, objectKeys: ["address"] },
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-extract.js","sourceRoot":"","sources":["../../src/analytics/wallet-extract.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,4BAA4B,GAErC;IACF,kBAAkB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9D,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChE,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5E,uBAAuB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACnD,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACxE,mCAAmC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC/E,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5E,iCAAiC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC7E,kCAAkC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9E,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACtE,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChD,gBAAgB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC7C,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,EAAC,eAAe,CAAC,EAAE;IACnE,8BAA8B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC1E,2BAA2B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACvE,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACxE,kCAAkC,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC/D,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChD,6BAA6B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACzE,uBAAuB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACnE,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;IAC7C,iCAAiC,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;CACnD,CAAC"}
1
+ {"version":3,"file":"wallet-extract.js","sourceRoot":"","sources":["../../src/analytics/wallet-extract.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,4BAA4B,GAErC;IACF,kBAAkB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9D,oBAAoB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChE,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5E,uBAAuB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACnD,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACxE,mCAAmC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC/E,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5E,+BAA+B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC3E,iCAAiC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC7E,kCAAkC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9E,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACtE,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChD,gBAAgB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC7C,sBAAsB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,EAAC,eAAe,CAAC,EAAE;IACnE,8BAA8B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC1E,2BAA2B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACvE,4BAA4B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACxE,kCAAkC,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAC/D,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IAChD,6BAA6B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACzE,uBAAuB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE;IACnE,0BAA0B,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;IAC7C,iCAAiC,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;CACnD,CAAC"}
@@ -16,14 +16,27 @@ export interface GovernanceProposalsOptions {
16
16
  /** Max proposals when using `offset` (capped at 100). */
17
17
  limit?: number;
18
18
  }
19
+ /** Options for reading governance votes cast by an address. */
20
+ export interface GovernanceVotesOptions {
21
+ /** When set, return only votes for this proposal ID. */
22
+ proposalId?: number;
23
+ }
24
+ /** Options for revoking a governance queue upvote. */
25
+ export interface GovernanceRevokeUpvoteOptions {
26
+ /** When set, assert the active upvote matches this proposal ID. */
27
+ proposalId?: number;
28
+ }
19
29
  /** Celo on-chain governance proposal reads, CGP enrichment, and LockedGold writes. */
20
30
  export declare class GovernanceService {
21
31
  private readonly clientFactory;
22
32
  private readonly attributionTags?;
23
33
  constructor(clientFactory: CeloClientFactory);
24
34
  private getClient;
35
+ /** Resolve vote-signer EOA to the Celo account that holds vote records. */
36
+ private resolveGovernanceAccount;
25
37
  private fetchProposal;
26
38
  private listProposalIds;
39
+ private getGovernanceQueue;
27
40
  /**
28
41
  * List governance proposals with pagination and optional CGP metadata.
29
42
  * @param options - Pagination (`page`/`pageSize` or `offset`/`limit`) and filters
@@ -112,6 +125,32 @@ export declare class GovernanceService {
112
125
  }[];
113
126
  message: string;
114
127
  }>;
128
+ /** Referendum votes and queue upvotes cast by an address on Celo governance. */
129
+ getGovernanceVotes(address: `0x${string}`, options?: GovernanceVotesOptions): Promise<{
130
+ goldUsedForVoting: string;
131
+ goldUsedForVotingFormatted: string;
132
+ upvote: {
133
+ proposalId: number;
134
+ weight: string;
135
+ weightFormatted: string;
136
+ } | null;
137
+ referendumVotes: {
138
+ proposalId: number;
139
+ dequeueIndex: number;
140
+ yesVotes: string;
141
+ noVotes: string;
142
+ abstainVotes: string;
143
+ totalWeight: string;
144
+ totalWeightFormatted: string;
145
+ stale: boolean;
146
+ stage: "Approval" | "None" | "Queued" | "Referendum" | "Execution" | "Executed" | "Expiration" | "Rejected" | "Withdrawn" | undefined;
147
+ url: string | undefined;
148
+ }[];
149
+ message: string;
150
+ queriedAddress?: `0x${string}` | undefined;
151
+ network: "mainnet";
152
+ address: `0x${string}`;
153
+ }>;
115
154
  /** Locked CELO balances and governance voting power for an address. */
116
155
  getLockedCeloBalance(address: `0x${string}`): Promise<{
117
156
  network: "mainnet";
@@ -148,4 +187,10 @@ export declare class GovernanceService {
148
187
  /** Withdraw all matured pending withdrawals. */
149
188
  prepareWithdrawCelo(from: `0x${string}`): Promise<SerializedPreparedFlow>;
150
189
  prepareVote(from: `0x${string}`, proposalId: number, vote: VoteValueName): Promise<SerializedPreparedFlow>;
190
+ /** Upvote a Queued governance proposal (one active queue upvote per account). */
191
+ prepareUpvote(from: `0x${string}`, proposalId: number): Promise<SerializedPreparedFlow>;
192
+ /** Revoke all active referendum votes for an account (bulk on-chain). */
193
+ prepareRevokeGovernanceVotes(from: `0x${string}`): Promise<SerializedPreparedFlow>;
194
+ /** Revoke the account's active queue upvote. */
195
+ prepareRevokeGovernanceUpvote(from: `0x${string}`, options?: GovernanceRevokeUpvoteOptions): Promise<SerializedPreparedFlow>;
151
196
  }
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { encodeFunctionData, isAddress, parseEther } from "viem";
6
6
  import { CELO_CORE_CONTRACTS } from "../config/celo-core-contracts.js";
7
+ import { accountsAbi } from "../abis/accounts.js";
7
8
  import { lockedGoldAbi } from "../abis/locked-gold.js";
8
9
  import { governanceAbi, proposalStageName, voteValueToInt, } from "../abis/governance.js";
9
10
  import { appendCelinaCalldataTag } from "../config/celina-tag.js";
@@ -11,6 +12,7 @@ import { CHAIN } from "../config/chains.js";
11
12
  import { serializePreparedFlow, } from "../types/prepared.js";
12
13
  import { assertCeloAccountRegistered } from "../utils/celo-account.js";
13
14
  import { formatCeloAmount } from "../utils/celo-format.js";
15
+ import { lesserAndGreaterAfterRevokeUpvote, lesserAndGreaterAfterUpvote, } from "../utils/governance-queue.js";
14
16
  const STAGE_EXPIRY_MS = {
15
17
  Queued: 4 * 24 * 60 * 60 * 1000,
16
18
  Approval: 24 * 60 * 60 * 1000,
@@ -70,6 +72,35 @@ export class GovernanceService {
70
72
  getClient() {
71
73
  return this.clientFactory.getClients().public;
72
74
  }
75
+ /** Resolve vote-signer EOA to the Celo account that holds vote records. */
76
+ async resolveGovernanceAccount(address) {
77
+ const client = this.getClient();
78
+ const accounts = CELO_CORE_CONTRACTS.accounts;
79
+ const isRegistered = await client.readContract({
80
+ address: accounts,
81
+ abi: accountsAbi,
82
+ functionName: "isAccount",
83
+ args: [address],
84
+ });
85
+ if (isRegistered) {
86
+ return address;
87
+ }
88
+ try {
89
+ const account = await client.readContract({
90
+ address: accounts,
91
+ abi: accountsAbi,
92
+ functionName: "voteSignerToAccount",
93
+ args: [address],
94
+ });
95
+ if (account !== "0x0000000000000000000000000000000000000000") {
96
+ return account;
97
+ }
98
+ }
99
+ catch {
100
+ // Not a vote signer; use address as-is.
101
+ }
102
+ return address;
103
+ }
73
104
  async fetchProposal(proposalId, upvotes = 0, includeVotes = true) {
74
105
  const client = this.getClient();
75
106
  const address = CELO_CORE_CONTRACTS.governance;
@@ -160,6 +191,20 @@ export class GovernanceService {
160
191
  entries.sort((a, b) => b.id - a.id);
161
192
  return entries;
162
193
  }
194
+ async getGovernanceQueue() {
195
+ const client = this.getClient();
196
+ const [queuedIds, queuedUpvotes] = (await client.readContract({
197
+ address: CELO_CORE_CONTRACTS.governance,
198
+ abi: governanceAbi,
199
+ functionName: "getQueue",
200
+ }));
201
+ return queuedIds
202
+ .map((id, index) => ({
203
+ proposalId: Number(id),
204
+ upvotes: queuedUpvotes[index] ?? 0n,
205
+ }))
206
+ .filter((entry) => entry.proposalId !== 0);
207
+ }
163
208
  /**
164
209
  * List governance proposals with pagination and optional CGP metadata.
165
210
  * @param options - Pagination (`page`/`pageSize` or `offset`/`limit`) and filters
@@ -302,6 +347,105 @@ export class GovernanceService {
302
347
  : "No proposals currently in Referendum",
303
348
  };
304
349
  }
350
+ /** Referendum votes and queue upvotes cast by an address on Celo governance. */
351
+ async getGovernanceVotes(address, options = {}) {
352
+ if (!isAddress(address)) {
353
+ throw new Error(`Invalid address: ${address}`);
354
+ }
355
+ const governanceAccount = await this.resolveGovernanceAccount(address);
356
+ const client = this.getClient();
357
+ const governance = CELO_CORE_CONTRACTS.governance;
358
+ let entries = (await this.getDequeueWithIndices()).filter((entry) => entry.proposalId !== 0);
359
+ if (options.proposalId !== undefined) {
360
+ entries = entries.filter((entry) => entry.proposalId === options.proposalId);
361
+ }
362
+ const voteRecordCalls = entries.map((entry) => ({
363
+ address: governance,
364
+ abi: governanceAbi,
365
+ functionName: "getVoteRecord",
366
+ args: [governanceAccount, BigInt(entry.index)],
367
+ }));
368
+ const [voteResults, upvoteResult, goldUsed] = await Promise.all([
369
+ voteRecordCalls.length > 0
370
+ ? client.multicall({ contracts: voteRecordCalls, allowFailure: true })
371
+ : Promise.resolve([]),
372
+ client.readContract({
373
+ address: governance,
374
+ abi: governanceAbi,
375
+ functionName: "getUpvoteRecord",
376
+ args: [governanceAccount],
377
+ }),
378
+ client.readContract({
379
+ address: governance,
380
+ abi: governanceAbi,
381
+ functionName: "getAmountOfGoldUsedForVoting",
382
+ args: [governanceAccount],
383
+ }),
384
+ ]);
385
+ const referendumVotes = [];
386
+ for (let i = 0; i < entries.length; i++) {
387
+ const entry = entries[i];
388
+ const result = voteResults[i];
389
+ if (!result || result.status !== "success") {
390
+ continue;
391
+ }
392
+ const [recordProposalId, , , yesVotes, noVotes, abstainVotes] = result.result;
393
+ const proposalId = Number(recordProposalId);
394
+ if (proposalId === 0) {
395
+ continue;
396
+ }
397
+ const totalWeight = yesVotes + noVotes + abstainVotes;
398
+ if (totalWeight === 0n) {
399
+ continue;
400
+ }
401
+ const stale = proposalId !== entry.proposalId;
402
+ const proposal = await this.fetchProposal(proposalId, 0, false);
403
+ referendumVotes.push({
404
+ proposalId,
405
+ dequeueIndex: entry.index,
406
+ yesVotes: yesVotes.toString(),
407
+ noVotes: noVotes.toString(),
408
+ abstainVotes: abstainVotes.toString(),
409
+ totalWeight: totalWeight.toString(),
410
+ totalWeightFormatted: formatCeloAmount(totalWeight),
411
+ stale,
412
+ stage: proposal ? proposalStageName(proposal.stage) : undefined,
413
+ url: proposal?.url,
414
+ });
415
+ }
416
+ const [upvoteProposalId, upvoteWeight] = upvoteResult;
417
+ let upvote = null;
418
+ if (Number(upvoteProposalId) !== 0) {
419
+ const upvoteEntry = {
420
+ proposalId: Number(upvoteProposalId),
421
+ weight: upvoteWeight.toString(),
422
+ weightFormatted: formatCeloAmount(upvoteWeight),
423
+ };
424
+ if (options.proposalId === undefined ||
425
+ upvoteEntry.proposalId === options.proposalId) {
426
+ upvote = upvoteEntry;
427
+ }
428
+ }
429
+ const parts = [];
430
+ if (referendumVotes.length > 0) {
431
+ parts.push(`${referendumVotes.length} referendum vote(s)`);
432
+ }
433
+ if (upvote) {
434
+ parts.push("1 active upvote");
435
+ }
436
+ return {
437
+ network: "mainnet",
438
+ address: governanceAccount,
439
+ ...(governanceAccount !== address ? { queriedAddress: address } : {}),
440
+ goldUsedForVoting: goldUsed.toString(),
441
+ goldUsedForVotingFormatted: formatCeloAmount(goldUsed),
442
+ upvote,
443
+ referendumVotes,
444
+ message: parts.length > 0
445
+ ? parts.join(", ")
446
+ : "No governance votes found for this address",
447
+ };
448
+ }
305
449
  /** Locked CELO balances and governance voting power for an address. */
306
450
  async getLockedCeloBalance(address) {
307
451
  if (!isAddress(address)) {
@@ -501,5 +645,88 @@ export class GovernanceService {
501
645
  this.buildStep(CELO_CORE_CONTRACTS.governance, data, `Vote ${vote} on proposal #${proposalId} (index ${match.index})`),
502
646
  ], `Vote ${vote} on governance proposal #${proposalId}`);
503
647
  }
648
+ /** Upvote a Queued governance proposal (one active queue upvote per account). */
649
+ async prepareUpvote(from, proposalId) {
650
+ const governanceAccount = await this.resolveGovernanceAccount(from);
651
+ const client = this.getClient();
652
+ const governance = CELO_CORE_CONTRACTS.governance;
653
+ const queue = await this.getGovernanceQueue();
654
+ if (!queue.some((entry) => entry.proposalId === proposalId)) {
655
+ throw new Error(`Proposal ${proposalId} is not in the governance queue. Use get_governance_proposals to find Queued proposals.`);
656
+ }
657
+ const [existingUpvoteProposalId] = (await client.readContract({
658
+ address: governance,
659
+ abi: governanceAbi,
660
+ functionName: "getUpvoteRecord",
661
+ args: [governanceAccount],
662
+ }));
663
+ const existingId = Number(existingUpvoteProposalId);
664
+ if (existingId !== 0 && queue.some((entry) => entry.proposalId === existingId)) {
665
+ throw new Error(`Account already has an active upvote on proposal ${existingId}. Revoke it with prepare_revoke_governance_upvote before upvoting another proposal.`);
666
+ }
667
+ const lockedGold = (await client.readContract({
668
+ address: CELO_CORE_CONTRACTS.lockedGold,
669
+ abi: lockedGoldAbi,
670
+ functionName: "getAccountTotalLockedGold",
671
+ args: [governanceAccount],
672
+ }));
673
+ if (lockedGold === 0n) {
674
+ throw new Error("Cannot upvote without locked CELO. Lock CELO first with execute_lock_celo.");
675
+ }
676
+ const { lesser, greater } = lesserAndGreaterAfterUpvote(queue, proposalId, lockedGold);
677
+ const data = appendCelinaCalldataTag(encodeFunctionData({
678
+ abi: governanceAbi,
679
+ functionName: "upvote",
680
+ args: [BigInt(proposalId), BigInt(lesser), BigInt(greater)],
681
+ }), this.attributionTags);
682
+ return this.toPreparedFlow(from, [
683
+ this.buildStep(governance, data, `Upvote proposal #${proposalId} with ${formatCeloAmount(lockedGold)} locked CELO`),
684
+ ], `Upvote governance proposal #${proposalId}`);
685
+ }
686
+ /** Revoke all active referendum votes for an account (bulk on-chain). */
687
+ async prepareRevokeGovernanceVotes(from) {
688
+ const governanceAccount = await this.resolveGovernanceAccount(from);
689
+ const votes = await this.getGovernanceVotes(governanceAccount);
690
+ if (votes.referendumVotes.length === 0) {
691
+ throw new Error("No referendum votes to revoke for this address.");
692
+ }
693
+ const data = appendCelinaCalldataTag(encodeFunctionData({
694
+ abi: governanceAbi,
695
+ functionName: "revokeVotes",
696
+ }), this.attributionTags);
697
+ return this.toPreparedFlow(from, [
698
+ this.buildStep(CELO_CORE_CONTRACTS.governance, data, `Revoke ${votes.referendumVotes.length} referendum vote(s)`),
699
+ ], `Revoke all governance referendum votes for ${governanceAccount}`);
700
+ }
701
+ /** Revoke the account's active queue upvote. */
702
+ async prepareRevokeGovernanceUpvote(from, options = {}) {
703
+ const governanceAccount = await this.resolveGovernanceAccount(from);
704
+ const client = this.getClient();
705
+ const governance = CELO_CORE_CONTRACTS.governance;
706
+ const [upvoteProposalId, upvoteWeight] = (await client.readContract({
707
+ address: governance,
708
+ abi: governanceAbi,
709
+ functionName: "getUpvoteRecord",
710
+ args: [governanceAccount],
711
+ }));
712
+ const proposalId = Number(upvoteProposalId);
713
+ if (proposalId === 0) {
714
+ throw new Error("No active governance upvote to revoke for this address.");
715
+ }
716
+ if (options.proposalId !== undefined &&
717
+ options.proposalId !== proposalId) {
718
+ throw new Error(`Active upvote is on proposal ${proposalId}, not ${options.proposalId}.`);
719
+ }
720
+ const queue = await this.getGovernanceQueue();
721
+ const { lesser, greater } = lesserAndGreaterAfterRevokeUpvote(queue, proposalId, upvoteWeight);
722
+ const data = appendCelinaCalldataTag(encodeFunctionData({
723
+ abi: governanceAbi,
724
+ functionName: "revokeUpvote",
725
+ args: [BigInt(lesser), BigInt(greater)],
726
+ }), this.attributionTags);
727
+ return this.toPreparedFlow(from, [
728
+ this.buildStep(governance, data, `Revoke upvote on proposal #${proposalId}`),
729
+ ], `Revoke governance upvote on proposal #${proposalId}`);
730
+ }
504
731
  }
505
732
  //# sourceMappingURL=governance.service.js.map