@reyaxyz/community-sdk 0.44.39 → 0.44.42

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.
@@ -106,22 +106,32 @@ var VoteModule = /** @class */ (function (_super) {
106
106
  // WRITE
107
107
  VoteModule.prototype.vote = function (params) {
108
108
  return __awaiter(this, void 0, void 0, function () {
109
- var uri, metadata, voteInfo;
110
- return __generator(this, function (_a) {
111
- switch (_a.label) {
109
+ var infoUri, infoMetadata, _a, signature, signatureDeadline, voteUri, result, _b, _c;
110
+ var _d;
111
+ return __generator(this, function (_e) {
112
+ switch (_e.label) {
112
113
  case 0:
113
- uri = "/api/vote/contract-details/".concat(params.slug);
114
- return [4 /*yield*/, this.get(uri)];
114
+ infoUri = "/api/vote/contract-details/".concat(params.slug);
115
+ return [4 /*yield*/, this.get(infoUri)];
115
116
  case 1:
116
- metadata = _a.sent();
117
- return [4 /*yield*/, (0, services_1.vote)(__assign(__assign({}, params), { contractAddress: metadata.contractAddress }))];
117
+ infoMetadata = _e.sent();
118
+ return [4 /*yield*/, (0, services_1.sendVote)(__assign(__assign({}, params), { contractAddress: infoMetadata.contractAddress }))];
118
119
  case 2:
119
- voteInfo = _a.sent();
120
- if (voteInfo.struct.userNonce === undefined ||
121
- !voteInfo.struct.userDeadline) {
122
- throw new Error("Signature with nonce ".concat(voteInfo.struct.userNonce, " and deadline ").concat(voteInfo.struct.userDeadline));
123
- }
124
- return [2 /*return*/, this.executeVoteTx(voteInfo)];
120
+ _a = _e.sent(), signature = _a.signature, signatureDeadline = _a.deadline;
121
+ voteUri = "/api/vote/".concat(infoMetadata.contractAddress, "/vote");
122
+ _b = this.put;
123
+ _c = [voteUri,
124
+ {}];
125
+ _d = {};
126
+ return [4 /*yield*/, params.signer.getAddress()];
127
+ case 3: return [4 /*yield*/, _b.apply(this, _c.concat([(_d.voter = _e.sent(),
128
+ _d.isYesVote = params.voted,
129
+ _d.signature = signature,
130
+ _d.signatureDeadline = signatureDeadline,
131
+ _d)]))];
132
+ case 4:
133
+ result = _e.sent();
134
+ return [2 /*return*/, { transactionHash: result.txHash }];
125
135
  }
126
136
  });
127
137
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/vote/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAA6C;AAW7C,uCAAkC;AAClC,0CAAmD;AAEnD;IAAwC,8BAAU;IAGhD,oBAAY,MAAc,EAAE,cAAuB;QACjD,YAAA,MAAK,YAAC,MAAM,CAAC,SAAC;QAHhB,oBAAc,GAAY,KAAK,CAAC;QAI9B,KAAI,CAAC,cAAc,GAAG,cAAc,CAAC;;IACvC,CAAC;IAEa,kCAAa,GAA3B,UAA4B,QAAkB;;;;;;;wBACtC,GAAG,GAAG,8CAA8C,CAAC;wBAC5C,qBAAM,IAAI,CAAC,IAAI,CAC5B,GAAG,EACH,EAAE,EACF;gCACE,SAAS,EAAE,QAAQ,CAAC,SAAS;gCAC7B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;gCAC3C,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;gCAC1B,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;gCAC1C,SAAS,EAAE,CAAC,MAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,mCAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;gCACtD,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI;gCAC1B,eAAe,EAAE,QAAQ,CAAC,eAAe;6BAC1C,CACF,EAAA;;wBAZK,MAAM,GAAG,SAYd;wBACD,sBAAO,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,EAAC;;;;KAC3C;IAED,QAAQ;IAEF,yBAAI,GAAJ,UAAK,MAAkB;;;;;;wBACrB,GAAG,GAAG,qCAA8B,MAAM,CAAC,IAAI,CAAE,CAAC;wBACvC,qBAAM,IAAI,CAAC,GAAG,CAA+B,GAAG,CAAC,EAAA;;wBAA5D,QAAQ,GAAG,SAAiD;wBAEjD,qBAAM,IAAA,eAAI,wBACtB,MAAM,KACT,eAAe,EAAE,QAAQ,CAAC,eAAe,IACzC,EAAA;;wBAHI,QAAQ,GAAG,SAGf;wBACF,IACE,QAAQ,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;4BACvC,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAC7B,CAAC;4BACD,MAAM,IAAI,KAAK,CACb,+BAAwB,QAAQ,CAAC,MAAM,CAAC,SAAS,2BAAiB,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAE,CACjG,CAAC;wBACJ,CAAC;wBACD,sBAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAC;;;;KACrC;IAED,OAAO;IAED,mCAAc,GAAd,UAAe,MAA4B;;;;;;wBACzC,GAAG,GAAG,oBAAa,MAAM,CAAC,IAAI,CAAE,CAAC;wBACnB,qBAAM,IAAI,CAAC,GAAG,CAAuB,GAAG,CAAC,EAAA;;wBAAvD,WAAW,GAAG,SAAyC;wBACzD,mBAAmB,GAAG,EAAE,CAAC;wBAC7B,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAC,CAAC;4BAChD,mBAAmB,GAAG,UAAG,mBAAmB,iBAEhD,CAAC,CAAE,CAAC;wBACF,CAAC,CAAC,CAAC;wBACH,WAAW,CAAC,WAAW,GAAG,mBAAmB,CAAC;wBAC9C,sBAAO,WAAW,EAAC;;;;KACpB;IAGK,kCAAa,GAAb,UAAc,MAA2B;;;;gBACvC,GAAG,GAAG,oBAAa,MAAM,CAAC,IAAI,mBAAS,MAAM,CAAC,OAAO,CAAE,CAAC;gBAC9D,sBAAO,IAAI,CAAC,GAAG,CAAsB,GAAG,CAAC,EAAC;;;KAC3C;IAtCK;QADL,IAAA,eAAM,EAAC,iBAAiB,CAAC;0CAkBzB;IAIK;QADL,IAAA,eAAM,EAAC,2BAA2B,CAAC;oDAYnC;IAGK;QADL,IAAA,eAAM,EAAC,0BAA0B,CAAC;mDAIlC;IACH,iBAAC;CAAA,AAnED,CAAwC,mBAAU,GAmEjD;kBAnEoB,UAAU","sourcesContent":["import { RestClient } from '@reyaxyz/common';\nimport {\n GetVoteContractDetailsResult,\n GetVoteDetailsParams,\n GetVoteDetailsResult,\n GetVoteStatusParams,\n GetVoteStatusResult,\n VoteInfo,\n VoteParams,\n VoteResult,\n} from './types';\nimport { vote } from './services';\nimport { Logger, Loggable } from '@reyaxyz/common';\n\nexport default class VoteModule extends RestClient implements Loggable {\n loggingEnabled: boolean = false;\n\n constructor(apiUrl: string, loggingEnabled: boolean) {\n super(apiUrl);\n this.loggingEnabled = loggingEnabled;\n }\n\n private async executeVoteTx(voteInfo: VoteInfo): Promise<VoteResult> {\n const uri = `/api/transaction-gelato/executeGelatoEip2771`;\n const result = await this.post<{ txHash: string; accountId?: string }>(\n uri,\n {},\n {\n signature: voteInfo.signature,\n chainId: voteInfo.struct.chainId.toString(),\n data: voteInfo.struct.data,\n userDeadline: voteInfo.struct.userDeadline,\n userNonce: (voteInfo.struct.userNonce ?? 0).toString(),\n user: voteInfo.struct.user,\n contractAddress: voteInfo.contractAddress,\n },\n );\n return { transactionHash: result.txHash };\n }\n\n // WRITE\n @Logger('VoteModule.vote')\n async vote(params: VoteParams) {\n const uri = `/api/vote/contract-details/${params.slug}`;\n const metadata = await this.get<GetVoteContractDetailsResult>(uri);\n\n const voteInfo = await vote({\n ...params,\n contractAddress: metadata.contractAddress,\n });\n if (\n voteInfo.struct.userNonce === undefined ||\n !voteInfo.struct.userDeadline\n ) {\n throw new Error(\n `Signature with nonce ${voteInfo.struct.userNonce} and deadline ${voteInfo.struct.userDeadline}`,\n );\n }\n return this.executeVoteTx(voteInfo);\n }\n\n // READ\n @Logger('VoteModule.getVoteDetails')\n async getVoteDetails(params: GetVoteDetailsParams) {\n const uri = `/api/vote/${params.slug}`;\n const voteDetails = await this.get<GetVoteDetailsResult>(uri);\n let markdownDescription = '';\n voteDetails.description.split('\\n ').forEach((i) => {\n markdownDescription = `${markdownDescription}\n\n${i}`;\n });\n voteDetails.description = markdownDescription;\n return voteDetails;\n }\n\n @Logger('VoteModule.getVoteStatus')\n async getVoteStatus(params: GetVoteStatusParams) {\n const uri = `/api/vote/${params.slug}/user/${params.address}`;\n return this.get<GetVoteStatusResult>(uri);\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/vote/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { RestClient } from '@reyaxyz/common';\nimport {\n GetVoteContractDetailsResult,\n GetVoteDetailsParams,\n GetVoteDetailsResult,\n GetVoteStatusParams,\n GetVoteStatusResult,\n VoteInfo,\n VoteParams,\n VoteResult,\n} from './types';\nimport { sendVote } from './services';\nimport { Logger, Loggable } from '@reyaxyz/common';\n\nexport default class VoteModule extends RestClient implements Loggable {\n loggingEnabled: boolean = false;\n\n constructor(apiUrl: string, loggingEnabled: boolean) {\n super(apiUrl);\n this.loggingEnabled = loggingEnabled;\n }\n\n private async executeVoteTx(voteInfo: VoteInfo): Promise<VoteResult> {\n const uri = `/api/transaction-gelato/executeGelatoEip2771`;\n const result = await this.post<{ txHash: string; accountId?: string }>(\n uri,\n {},\n {\n signature: voteInfo.signature,\n chainId: voteInfo.struct.chainId.toString(),\n data: voteInfo.struct.data,\n userDeadline: voteInfo.struct.userDeadline,\n userNonce: (voteInfo.struct.userNonce ?? 0).toString(),\n user: voteInfo.struct.user,\n contractAddress: voteInfo.contractAddress,\n },\n );\n return { transactionHash: result.txHash };\n }\n\n // WRITE\n @Logger('VoteModule.vote')\n async vote(params: VoteParams) {\n const infoUri = `/api/vote/contract-details/${params.slug}`;\n const infoMetadata = await this.get<GetVoteContractDetailsResult>(infoUri);\n\n const { signature: signature, deadline: signatureDeadline } =\n await sendVote({\n ...params,\n contractAddress: infoMetadata.contractAddress,\n });\n\n const voteUri = `/api/vote/${infoMetadata.contractAddress}/vote`;\n const result = await this.put<{ txHash: string }>(\n voteUri,\n {},\n {\n voter: await params.signer.getAddress(),\n isYesVote: params.voted,\n signature: signature,\n signatureDeadline: signatureDeadline,\n },\n );\n\n return { transactionHash: result.txHash };\n }\n\n // READ\n @Logger('VoteModule.getVoteDetails')\n async getVoteDetails(params: GetVoteDetailsParams) {\n const uri = `/api/vote/${params.slug}`;\n const voteDetails = await this.get<GetVoteDetailsResult>(uri);\n let markdownDescription = '';\n voteDetails.description.split('\\n ').forEach((i) => {\n markdownDescription = `${markdownDescription}\n\n${i}`;\n });\n voteDetails.description = markdownDescription;\n return voteDetails;\n }\n\n @Logger('VoteModule.getVoteStatus')\n async getVoteStatus(params: GetVoteStatusParams) {\n const uri = `/api/vote/${params.slug}/user/${params.address}`;\n return this.get<GetVoteStatusResult>(uri);\n }\n}\n"]}
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.vote = void 0;
39
+ exports.sendVote = exports.vote = void 0;
40
40
  var executeTransaction_1 = require("../executeTransaction");
41
41
  var encode_1 = require("./encode");
42
42
  var relay_sdk_1 = require("@gelatonetwork/relay-sdk");
@@ -87,4 +87,31 @@ var vote = function (params) { return __awaiter(void 0, void 0, void 0, function
87
87
  });
88
88
  }); };
89
89
  exports.vote = vote;
90
+ var sendVote = function (params) { return __awaiter(void 0, void 0, void 0, function () {
91
+ var network, reyaChainId, user, deadline, signature;
92
+ var _a;
93
+ return __generator(this, function (_b) {
94
+ switch (_b.label) {
95
+ case 0: return [4 /*yield*/, ((_a = params.signer.provider) === null || _a === void 0 ? void 0 : _a.getNetwork())];
96
+ case 1:
97
+ network = _b.sent();
98
+ if (!network) {
99
+ throw new Error('Vote failed. Network not found.');
100
+ }
101
+ reyaChainId = Number(network.chainId);
102
+ if (!Object.values(common_1.ReyaChainId).includes(reyaChainId)) {
103
+ throw new Error('Not on Reya Network.');
104
+ }
105
+ return [4 /*yield*/, params.signer.getAddress()];
106
+ case 2:
107
+ user = _b.sent();
108
+ deadline = Math.floor(Date.now() / 1000) + common_1.ONE_DAY_IN_SECONDS * 7;
109
+ return [4 /*yield*/, (0, common_1.signVote)(params.signer, reyaChainId, params.contractAddress, user, params.voted == 'yes' ? true : false, deadline)];
110
+ case 3:
111
+ signature = _b.sent();
112
+ return [2 /*return*/, { signature: signature, deadline: deadline }];
113
+ }
114
+ });
115
+ }); };
116
+ exports.sendVote = sendVote;
90
117
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/vote/services/vote/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoD;AACpD,mCAA0C;AAE1C,sDAKkC;AAClC,0CAAmD;AAE5C,IAAM,IAAI,GAAG,UAAO,MAAyB;;;;;;gBAC5C,KAA4B,IAAA,uBAAc,EAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAArD,IAAI,cAAA,EAAE,KAAK,WAAA,CAA2C;gBAExD,qBAAM,CAAA,MAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,0CAAE,UAAU,EAAE,CAAA,EAAA;;gBAApD,OAAO,GAAG,SAA0C;gBAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBACrD,CAAC;gBACY,qBAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAA;;gBAAvC,IAAI,GAAG,SAAgC;gBAEvC,KAAK,GAAG,IAAI,uBAAW,EAAE,CAAC;;;;gBAGxB,OAAO,GAA2B;oBACtC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,MAAM,CAAC,eAAe;oBAC9B,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,IAAI;iBACX,CAAC;gBAEI,MAAM,GAAG,MAAM,CAAC,MAAqC,CAAC;gBAE5D,qBAAM,IAAA,gCAAW,EACf,MAAM,CAAC,MAAM,EACb,IAAI,EACJ,KAAK,EACL,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,eAAe,CACvB,EAAA;;gBAND,SAMC,CAAC;gBACoB,qBAAM,KAAK,CAAC,uBAAuB,CACvD,OAAO,EACP,MAAM,EACN,uBAAW,CAAC,aAAa,CAC1B,EAAA;;gBAJK,aAAa,GAAG,SAIrB;gBAED,sBAAO;wBACL,SAAS,EAAE,aAAa,CAAC,SAAS;wBAClC,MAAM,EAAE,aAAa,CAAC,MAAM;wBAC5B,eAAe,EAAE,IAAA,yBAAgB,EAAC,MAAM,CAAC,eAAe,CAAC;qBAC1D,EAAC;;;gBAEF,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;;;;KAEjE,CAAC;AA1CW,QAAA,IAAI,QA0Cf","sourcesContent":["import { estimateGas } from '../executeTransaction';\nimport { encodeCastVote } from './encode';\nimport { ExecuteVoteParams, VoteInfo } from '../../types';\nimport {\n GelatoRelay,\n CallWithERC2771Request,\n ERC2771Type,\n SignerOrProvider,\n} from '@gelatonetwork/relay-sdk';\nimport { convertToAddress } from '@reyaxyz/common';\n\nexport const vote = async (params: ExecuteVoteParams): Promise<VoteInfo> => {\n const { calldata: data, value } = encodeCastVote(params.voted == 'yes');\n\n const network = await params.signer.provider?.getNetwork();\n if (!network) {\n throw new Error('Vote failed. Network not found.');\n }\n const user = await params.signer.getAddress();\n\n const relay = new GelatoRelay();\n\n try {\n const request: CallWithERC2771Request = {\n chainId: network.chainId,\n target: params.contractAddress,\n data: data,\n user: user,\n };\n\n const signer = params.signer as unknown as SignerOrProvider;\n\n await estimateGas(\n params.signer,\n data,\n value,\n Number(network.chainId),\n params.contractAddress,\n );\n const signatureData = await relay.getSignatureDataERC2771(\n request,\n signer,\n ERC2771Type.SponsoredCall,\n );\n\n return {\n signature: signatureData.signature,\n struct: signatureData.struct,\n contractAddress: convertToAddress(params.contractAddress),\n };\n } catch (error) {\n throw new Error('Vote failed. Please reach out via Discord.');\n }\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["modules/vote/services/vote/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { estimateGas } from '../executeTransaction';\nimport { encodeCastVote } from './encode';\nimport { ExecuteVoteParams, SignedVote, VoteInfo } from '../../types';\nimport {\n GelatoRelay,\n CallWithERC2771Request,\n ERC2771Type,\n SignerOrProvider,\n} from '@gelatonetwork/relay-sdk';\nimport {\n convertToAddress,\n ReyaChainId,\n signVote,\n ONE_DAY_IN_SECONDS,\n} from '@reyaxyz/common';\n\nexport const vote = async (params: ExecuteVoteParams): Promise<VoteInfo> => {\n const { calldata: data, value } = encodeCastVote(params.voted == 'yes');\n\n const network = await params.signer.provider?.getNetwork();\n if (!network) {\n throw new Error('Vote failed. Network not found.');\n }\n const user = await params.signer.getAddress();\n\n const relay = new GelatoRelay();\n\n try {\n const request: CallWithERC2771Request = {\n chainId: network.chainId,\n target: params.contractAddress,\n data: data,\n user: user,\n };\n\n const signer = params.signer as unknown as SignerOrProvider;\n\n await estimateGas(\n params.signer,\n data,\n value,\n Number(network.chainId),\n params.contractAddress,\n );\n const signatureData = await relay.getSignatureDataERC2771(\n request,\n signer,\n ERC2771Type.SponsoredCall,\n );\n\n return {\n signature: signatureData.signature,\n struct: signatureData.struct,\n contractAddress: convertToAddress(params.contractAddress),\n };\n } catch (error) {\n throw new Error('Vote failed. Please reach out via Discord.');\n }\n};\n\nexport const sendVote = async (\n params: ExecuteVoteParams,\n): Promise<SignedVote> => {\n const network = await params.signer.provider?.getNetwork();\n if (!network) {\n throw new Error('Vote failed. Network not found.');\n }\n const reyaChainId = Number(network.chainId);\n if (!Object.values(ReyaChainId).includes(reyaChainId)) {\n throw new Error('Not on Reya Network.');\n }\n\n const user = await params.signer.getAddress();\n const deadline = Math.floor(Date.now() / 1000) + ONE_DAY_IN_SECONDS * 7;\n\n const signature = await signVote(\n params.signer,\n reyaChainId,\n params.contractAddress,\n user,\n params.voted == 'yes' ? true : false,\n deadline,\n );\n\n return { signature: signature, deadline: deadline };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"/","sources":["modules/vote/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Signer } from 'ethers';\nimport { CallWithERC2771Request } from '@gelatonetwork/relay-sdk';\nimport {\n VoteDetailsEntity,\n VoteContractDetailsEntity,\n VoteStatusEntity,\n Address,\n} from '@reyaxyz/common';\n\nexport type VoteInfo = {\n signature: string;\n struct: CallWithERC2771Request;\n contractAddress: Address;\n};\n\nexport type VoteResult = {\n transactionHash: string | null;\n};\n\nexport type GetVoteDetailsParams = {\n slug: VoteDetailsEntity['slug'];\n};\nexport type GetVoteDetailsResult = VoteDetailsEntity;\n\nexport type GetVoteContractDetailsResult = VoteContractDetailsEntity;\n\nexport type VoteParams = {\n slug: VoteDetailsEntity['slug'];\n voted: 'yes' | 'no';\n signer: Signer;\n};\n\nexport type ExecuteVoteParams = VoteParams & {\n contractAddress: string;\n};\n\nexport type GetVoteStatusParams = {\n address: string;\n slug: VoteDetailsEntity['slug'];\n};\nexport type GetVoteStatusResult = VoteStatusEntity;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"/","sources":["modules/vote/types.ts"],"names":[],"mappings":"","sourcesContent":["import { Signer } from 'ethers';\nimport { CallWithERC2771Request } from '@gelatonetwork/relay-sdk';\nimport {\n VoteDetailsEntity,\n VoteContractDetailsEntity,\n VoteStatusEntity,\n Address,\n} from '@reyaxyz/common';\n\nexport type VoteInfo = {\n signature: string;\n struct: CallWithERC2771Request;\n contractAddress: Address;\n};\n\nexport type SignedVote = {\n signature: string;\n deadline: number;\n};\n\nexport type VoteResult = {\n transactionHash: string | null;\n};\n\nexport type GetVoteDetailsParams = {\n slug: VoteDetailsEntity['slug'];\n};\nexport type GetVoteDetailsResult = VoteDetailsEntity;\n\nexport type GetVoteContractDetailsResult = VoteContractDetailsEntity;\n\nexport type VoteParams = {\n slug: VoteDetailsEntity['slug'];\n voted: 'yes' | 'no';\n signer: Signer;\n};\n\nexport type ExecuteVoteParams = VoteParams & {\n contractAddress: string;\n};\n\nexport type GetVoteStatusParams = {\n address: string;\n slug: VoteDetailsEntity['slug'];\n};\nexport type GetVoteStatusResult = VoteStatusEntity;\n"]}
@@ -1,11 +1,13 @@
1
1
  import { RestClient } from '@reyaxyz/common';
2
- import { GetVoteDetailsParams, GetVoteStatusParams, VoteParams, VoteResult } from './types';
2
+ import { GetVoteDetailsParams, GetVoteStatusParams, VoteParams } from './types';
3
3
  import { Loggable } from '@reyaxyz/common';
4
4
  export default class VoteModule extends RestClient implements Loggable {
5
5
  loggingEnabled: boolean;
6
6
  constructor(apiUrl: string, loggingEnabled: boolean);
7
7
  private executeVoteTx;
8
- vote(params: VoteParams): Promise<VoteResult>;
8
+ vote(params: VoteParams): Promise<{
9
+ transactionHash: string;
10
+ }>;
9
11
  getVoteDetails(params: GetVoteDetailsParams): Promise<import("@reyaxyz/common").VoteDetailsEntity>;
10
12
  getVoteStatus(params: GetVoteStatusParams): Promise<import("@reyaxyz/common").VoteStatusEntity>;
11
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/vote/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAEL,oBAAoB,EAEpB,mBAAmB,EAGnB,UAAU,EACV,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAU,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,UAAW,YAAW,QAAQ;IACpE,cAAc,EAAE,OAAO,CAAS;gBAEpB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;YAKrC,aAAa;IAoBrB,IAAI,CAAC,MAAM,EAAE,UAAU;IAqBvB,cAAc,CAAC,MAAM,EAAE,oBAAoB;IAc3C,aAAa,CAAC,MAAM,EAAE,mBAAmB;CAIhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/vote/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAEL,oBAAoB,EAEpB,mBAAmB,EAGnB,UAAU,EAEX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAU,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,UAAW,YAAW,QAAQ;IACpE,cAAc,EAAE,OAAO,CAAS;gBAEpB,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;YAKrC,aAAa;IAoBrB,IAAI,CAAC,MAAM,EAAE,UAAU;;;IA2BvB,cAAc,CAAC,MAAM,EAAE,oBAAoB;IAc3C,aAAa,CAAC,MAAM,EAAE,mBAAmB;CAIhD"}
@@ -1,3 +1,4 @@
1
- import { ExecuteVoteParams, VoteInfo } from '../../types';
1
+ import { ExecuteVoteParams, SignedVote, VoteInfo } from '../../types';
2
2
  export declare const vote: (params: ExecuteVoteParams) => Promise<VoteInfo>;
3
+ export declare const sendVote: (params: ExecuteVoteParams) => Promise<SignedVote>;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/vote/services/vote/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAS1D,eAAO,MAAM,IAAI,WAAkB,iBAAiB,KAAG,QAAQ,QAAQ,CA0CtE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["modules/vote/services/vote/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AActE,eAAO,MAAM,IAAI,WAAkB,iBAAiB,KAAG,QAAQ,QAAQ,CA0CtE,CAAC;AAEF,eAAO,MAAM,QAAQ,WACX,iBAAiB,KACxB,QAAQ,UAAU,CAuBpB,CAAC"}
@@ -6,6 +6,10 @@ export type VoteInfo = {
6
6
  struct: CallWithERC2771Request;
7
7
  contractAddress: Address;
8
8
  };
9
+ export type SignedVote = {
10
+ signature: string;
11
+ deadline: number;
12
+ };
9
13
  export type VoteResult = {
10
14
  transactionHash: string | null;
11
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["modules/vote/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,OAAO,EACR,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD,MAAM,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AAErE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAC3C,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["modules/vote/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,OAAO,EACR,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD,MAAM,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AAErE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAC3C,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reyaxyz/community-sdk",
3
- "version": "0.44.39",
3
+ "version": "0.44.42",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@gelatonetwork/relay-sdk": "^5.5.0",
14
- "@reyaxyz/common": "0.210.0",
15
- "@reyaxyz/sdk": "0.113.7",
14
+ "@reyaxyz/common": "0.210.2",
15
+ "@reyaxyz/sdk": "0.113.9",
16
16
  "ethers": "6.9.0"
17
17
  },
18
18
  "main": "dist/index.js",
@@ -39,5 +39,5 @@
39
39
  "generate:coverage-badges": "npx istanbul-badges-readme --silent"
40
40
  },
41
41
  "packageManager": "pnpm@8.3.1",
42
- "gitHead": "20240e70a9fbba67528d8b824cd2c83c98b82fc4"
42
+ "gitHead": "dd96ebca976d977a4854c863cd07e35c6c71ae02"
43
43
  }
@@ -9,7 +9,7 @@ import {
9
9
  VoteParams,
10
10
  VoteResult,
11
11
  } from './types';
12
- import { vote } from './services';
12
+ import { sendVote } from './services';
13
13
  import { Logger, Loggable } from '@reyaxyz/common';
14
14
 
15
15
  export default class VoteModule extends RestClient implements Loggable {
@@ -41,22 +41,28 @@ export default class VoteModule extends RestClient implements Loggable {
41
41
  // WRITE
42
42
  @Logger('VoteModule.vote')
43
43
  async vote(params: VoteParams) {
44
- const uri = `/api/vote/contract-details/${params.slug}`;
45
- const metadata = await this.get<GetVoteContractDetailsResult>(uri);
44
+ const infoUri = `/api/vote/contract-details/${params.slug}`;
45
+ const infoMetadata = await this.get<GetVoteContractDetailsResult>(infoUri);
46
46
 
47
- const voteInfo = await vote({
48
- ...params,
49
- contractAddress: metadata.contractAddress,
50
- });
51
- if (
52
- voteInfo.struct.userNonce === undefined ||
53
- !voteInfo.struct.userDeadline
54
- ) {
55
- throw new Error(
56
- `Signature with nonce ${voteInfo.struct.userNonce} and deadline ${voteInfo.struct.userDeadline}`,
57
- );
58
- }
59
- return this.executeVoteTx(voteInfo);
47
+ const { signature: signature, deadline: signatureDeadline } =
48
+ await sendVote({
49
+ ...params,
50
+ contractAddress: infoMetadata.contractAddress,
51
+ });
52
+
53
+ const voteUri = `/api/vote/${infoMetadata.contractAddress}/vote`;
54
+ const result = await this.put<{ txHash: string }>(
55
+ voteUri,
56
+ {},
57
+ {
58
+ voter: await params.signer.getAddress(),
59
+ isYesVote: params.voted,
60
+ signature: signature,
61
+ signatureDeadline: signatureDeadline,
62
+ },
63
+ );
64
+
65
+ return { transactionHash: result.txHash };
60
66
  }
61
67
 
62
68
  // READ
@@ -1,13 +1,18 @@
1
1
  import { estimateGas } from '../executeTransaction';
2
2
  import { encodeCastVote } from './encode';
3
- import { ExecuteVoteParams, VoteInfo } from '../../types';
3
+ import { ExecuteVoteParams, SignedVote, VoteInfo } from '../../types';
4
4
  import {
5
5
  GelatoRelay,
6
6
  CallWithERC2771Request,
7
7
  ERC2771Type,
8
8
  SignerOrProvider,
9
9
  } from '@gelatonetwork/relay-sdk';
10
- import { convertToAddress } from '@reyaxyz/common';
10
+ import {
11
+ convertToAddress,
12
+ ReyaChainId,
13
+ signVote,
14
+ ONE_DAY_IN_SECONDS,
15
+ } from '@reyaxyz/common';
11
16
 
12
17
  export const vote = async (params: ExecuteVoteParams): Promise<VoteInfo> => {
13
18
  const { calldata: data, value } = encodeCastVote(params.voted == 'yes');
@@ -52,3 +57,30 @@ export const vote = async (params: ExecuteVoteParams): Promise<VoteInfo> => {
52
57
  throw new Error('Vote failed. Please reach out via Discord.');
53
58
  }
54
59
  };
60
+
61
+ export const sendVote = async (
62
+ params: ExecuteVoteParams,
63
+ ): Promise<SignedVote> => {
64
+ const network = await params.signer.provider?.getNetwork();
65
+ if (!network) {
66
+ throw new Error('Vote failed. Network not found.');
67
+ }
68
+ const reyaChainId = Number(network.chainId);
69
+ if (!Object.values(ReyaChainId).includes(reyaChainId)) {
70
+ throw new Error('Not on Reya Network.');
71
+ }
72
+
73
+ const user = await params.signer.getAddress();
74
+ const deadline = Math.floor(Date.now() / 1000) + ONE_DAY_IN_SECONDS * 7;
75
+
76
+ const signature = await signVote(
77
+ params.signer,
78
+ reyaChainId,
79
+ params.contractAddress,
80
+ user,
81
+ params.voted == 'yes' ? true : false,
82
+ deadline,
83
+ );
84
+
85
+ return { signature: signature, deadline: deadline };
86
+ };
@@ -13,6 +13,11 @@ export type VoteInfo = {
13
13
  contractAddress: Address;
14
14
  };
15
15
 
16
+ export type SignedVote = {
17
+ signature: string;
18
+ deadline: number;
19
+ };
20
+
16
21
  export type VoteResult = {
17
22
  transactionHash: string | null;
18
23
  };