@zkp2p/reclaim-witness-sdk
Version:
<div> <div> <img src="https://raw.githubusercontent.com/reclaimprotocol/.github/main/assets/banners/Attestor-Core.png" /> </div> </div>
147 lines • 12.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createClaimOnAvs = createClaimOnAvs;
const ethers_1 = require("ethers");
const config_1 = require("../../avs/config");
const contracts_1 = require("../../avs/utils/contracts");
const tasks_1 = require("../../avs/utils/tasks");
const client_1 = require("../../client");
const utils_1 = require("../../utils");
const EMPTY_CLAIM_USER_ID = ethers_1.ethers.utils.hexlify(new Uint8Array(32));
/**
* Creates a Reclaim claim on the AVS chain.
*/
async function createClaimOnAvs({ onStep, createClaimOnAttestor = client_1.createClaimOnAttestor, chainId = config_1.SELECTED_CHAIN_ID, payer, ...opts }) {
var _a, _b, _c, _d, _e;
const { logger = utils_1.logger, ownerPrivateKey, name, params, context, } = opts;
const { contract, wallet } = (0, contracts_1.initialiseContracts)(config_1.CHAIN_CONFIGS[chainId], ownerPrivateKey);
logger.info({ owner: wallet.address, contract: contract.address }, 'creating claim');
const arg = await requestClaimCreation();
logger.info({
index: arg.taskIndex,
operators: arg.task.operators.length,
}, 'task created, collecting claim signatures...');
onStep === null || onStep === void 0 ? void 0 : onStep({ type: 'taskCreated', data: arg });
const responses = [];
const timestampS = +arg.task.createdAt.toString();
for (const op of arg.task.operators) {
const res = await createClaimOnAttestor({
...opts,
client: { url: op.url },
timestampS,
onStep: (step) => (onStep === null || onStep === void 0 ? void 0 : onStep({
type: 'attestorStep',
data: {
operatorAddress: op.addr,
step,
},
})),
logger: logger.child({ operator: op.addr }),
});
const signature = (_a = res.signatures) === null || _a === void 0 ? void 0 : _a.claimSignature;
if (!signature) {
throw new Error('INTERNAL: Claim signature not generated');
}
const diff = getClaimRequestDifference((_b = res.request) === null || _b === void 0 ? void 0 : _b.data, res.claim);
if (diff) {
throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', `Claim request does not match the claim res data: ${diff}`, {
diff,
request: (_d = (_c = res.request) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d[diff],
claim: (_e = res.claim) === null || _e === void 0 ? void 0 : _e[diff]
});
}
responses.push(res);
logger.info({ operator: op.addr }, 'signature generated');
onStep === null || onStep === void 0 ? void 0 : onStep({
type: 'attestorDone',
data: {
task: arg,
responsesDone: responses,
},
});
}
const rslt = await completeTask();
logger.info({ tx: rslt.txHash, task: arg.taskIndex }, 'claim submitted & validated');
return { ...rslt, claimData: responses[0].claim };
async function requestClaimCreation() {
const request = {
provider: name,
// blank for now -- till we figure out the right
// algorithm for this
claimUserId: EMPTY_CLAIM_USER_ID,
claimHash: (0, utils_1.getIdentifierFromClaimInfo)({
provider: name,
parameters: (0, utils_1.canonicalStringify)(params),
context: context
? (0, utils_1.canonicalStringify)(context)
: '',
}),
owner: wallet.address,
requestedAt: (0, utils_1.unixTimestampSeconds)()
};
if (!payer) {
const wallet = new ethers_1.Wallet(ownerPrivateKey, contract.provider);
const { task } = await (0, tasks_1.createNewClaimRequestOnChain)({
request,
payer: wallet,
owner: wallet,
chainId
});
return task;
}
const requestSignature = await (0, tasks_1.signClaimRequest)(request, wallet, chainId);
const client = (0, client_1.getAttestorClientFromPool)(payer.attestor);
await client.waitForInit();
const rslt = await client.rpc('createClaimOnChain', {
chainId: +chainId,
jsonCreateClaimRequest: JSON.stringify(request),
requestSignature
});
return JSON.parse(rslt.jsonTask);
}
async function completeTask() {
var _a;
const data = {
task: arg.task,
signatures: responses
.map(res => {
var _a;
return (ethers_1.ethers.utils.hexlify((_a = res.signatures) === null || _a === void 0 ? void 0 : _a.claimSignature));
}),
};
if (!payer) {
const tx = await contract.taskCompleted(data, arg.taskIndex);
const rslt = await tx.wait();
// check task created event was emitted
const ev = (_a = rslt.events) === null || _a === void 0 ? void 0 : _a[0];
return {
object: ev === null || ev === void 0 ? void 0 : ev.args,
txHash: rslt.transactionHash
};
}
const client = (0, client_1.getAttestorClientFromPool)(payer.attestor);
await client.waitForInit();
const rslt = await client.rpc('completeClaimOnChain', {
chainId: +chainId,
taskIndex: arg.taskIndex,
completedTaskJson: JSON.stringify(data)
});
const object = JSON.parse(rslt.taskCompletedObjectJson);
return { object, txHash: rslt.txHash };
}
}
function getClaimRequestDifference(a, b) {
if (a.provider !== b.provider) {
return 'provider';
}
if (a.context !== b.context) {
return 'context';
}
if (a.parameters !== b.parameters) {
return 'parameters';
}
if (a.timestampS !== b.timestampS) {
return 'timestampS';
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNsYWltLW9uLWF2cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdnMvY2xpZW50L2NyZWF0ZS1jbGFpbS1vbi1hdnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsNENBd0tDO0FBeExELG1DQUF1QztBQUN2QywyQ0FBaUU7QUFHakUsdURBQTZEO0FBQzdELCtDQUFvRjtBQUNwRix1Q0FBdUc7QUFHdkcscUNBQWlJO0FBRWpJLE1BQU0sbUJBQW1CLEdBQUcsZUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVwRTs7R0FFRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FBeUIsRUFDOUQsTUFBTSxFQUNOLHFCQUFxQixHQUFHLDhCQUFzQixFQUM5QyxPQUFPLEdBQUcsMEJBQWlCLEVBQzNCLEtBQUssRUFDTCxHQUFHLElBQUksRUFDa0I7O0lBQ3pCLE1BQU0sRUFDTCxNQUFNLEdBQUcsY0FBTSxFQUNmLGVBQWUsRUFDZixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sR0FDUCxHQUFHLElBQUksQ0FBQTtJQUNSLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBbUIsRUFDL0Msc0JBQWEsQ0FBQyxPQUFRLENBQUMsRUFDdkIsZUFBZSxDQUNmLENBQUE7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUNWLEVBQUUsS0FBSyxFQUFFLE1BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFDdEQsZ0JBQWdCLENBQ2hCLENBQUE7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLG9CQUFvQixFQUFFLENBQUE7SUFFeEMsTUFBTSxDQUFDLElBQUksQ0FDVjtRQUNDLEtBQUssRUFBRSxHQUFHLENBQUMsU0FBUztRQUNwQixTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFT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