UNPKG

@river-build/web3

Version:

Dapps for our Space and Registry contracts

101 lines 4.21 kB
import { ethers } from 'ethers'; import { BaseContractShim } from './BaseContractShim'; import DevAbi from '@river-build/generated/dev/abis/IReview.abi.json' assert { type: 'json' }; import { bin_toHexString } from '@river-build/dlog'; // solidity doesn't export enums, so we need to define them here, boooooo export var SpaceReviewAction; (function (SpaceReviewAction) { SpaceReviewAction[SpaceReviewAction["None"] = -1] = "None"; SpaceReviewAction[SpaceReviewAction["Add"] = 0] = "Add"; SpaceReviewAction[SpaceReviewAction["Update"] = 1] = "Update"; SpaceReviewAction[SpaceReviewAction["Delete"] = 2] = "Delete"; })(SpaceReviewAction || (SpaceReviewAction = {})); export class IReviewShim extends BaseContractShim { constructor(address, provider) { super(address, provider, DevAbi); } /** * Get the review for a user * @param userAddress - The address of the user to get the review for * @returns The review for the user */ async getReview(userAddress) { const review = await this.read.getReview(userAddress); return review; } /** * Get all reviews * @returns All reviews */ async getAllReviews() { const reviews = await this.read.getAllReviews(); return reviews; } async addReview(params, signer) { return this.write(signer).setReview(SpaceReviewAction.Add, this.encodeReviewParams(params)); } async updateReview(params, signer) { return this.write(signer).setReview(SpaceReviewAction.Update, this.encodeReviewParams(params)); } async deleteReview(signer) { return this.write(signer).setReview(SpaceReviewAction.Delete, ethers.utils.defaultAbiCoder.encode(['string'], [''])); } encodeReviewParams(params) { return ethers.utils.defaultAbiCoder.encode(['tuple(string,uint8)'], [[params.comment, params.rating]]); } } export function getSpaceReviewEventDataBin(binLogs, from) { const logs = binLogs.map((log) => ({ address: '0x' + bin_toHexString(log.address), topics: log.topics.map((topic) => '0x' + bin_toHexString(topic)), data: '0x' + bin_toHexString(log.data), })) ?? []; const senderWallet = '0x' + bin_toHexString(from); return getSpaceReviewEventData(logs, senderWallet); } /** * Get the review event data from a receipt, public static for ease of use in the SDK * @param receipt - The receipt of the transaction * @param senderAddress - The address of the sender * @returns The review event data */ export function getSpaceReviewEventData(logs, senderAddress) { const contractInterface = new ethers.utils.Interface(DevAbi); for (const log of logs) { try { const parsedLog = contractInterface.parseLog(log); if (parsedLog.name === 'ReviewAdded' && parsedLog.args.user.toLowerCase() === senderAddress.toLowerCase()) { return { user: parsedLog.args.user, comment: parsedLog.args.comment, rating: parsedLog.args.rating, action: SpaceReviewAction.Add, }; } else if (parsedLog.name === 'ReviewUpdated' && parsedLog.args.user.toLowerCase() === senderAddress.toLowerCase()) { return { user: parsedLog.args.user, comment: parsedLog.args.comment, rating: parsedLog.args.rating, action: SpaceReviewAction.Update, }; } else if (parsedLog.name === 'ReviewDeleted' && parsedLog.args.user.toLowerCase() === senderAddress.toLowerCase()) { return { user: parsedLog.args.user, comment: undefined, rating: 0, action: SpaceReviewAction.Delete, }; } } catch { // no need for error, this log is not from the contract we're interested in } } return { user: '', comment: undefined, rating: 0, action: SpaceReviewAction.None }; } //# sourceMappingURL=IReviewShim.js.map