@acurast/cli
Version:
A cli to interact with the Acurast Cloud.
172 lines • 10.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import '@polkadot/api-augment';
import { AssignmentStrategyVariant, DeploymentError, } from '../types.js';
import { DeploymentStatus } from './types.js';
export const deployJob = (api, injector, job, statusCallback) => {
const script = `0x${Buffer.from(new TextEncoder().encode(job.script)).toString('hex')}`;
return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
var _a;
const jobRegistration = api.createType('AcurastCommonJobRegistration', {
script: api.createType('Bytes', script),
allowedSources: job.allowedSources
? api.createType('Option<Vec<AccountId>>', job.allowedSources)
: api.createType('Option<Vec<AccountId>>', undefined),
allowOnlyVerifiedSources: job.allowOnlyVerifiedSources,
schedule: {
duration: api.createType('u64', job.schedule.duration),
startTime: api.createType('u64', job.schedule.startTime),
endTime: api.createType('u64', job.schedule.endTime),
interval: api.createType('u64', job.schedule.interval),
maxStartDelay: api.createType('u64', job.schedule.maxStartDelay),
},
memory: api.createType('u32', job.memory),
networkRequests: api.createType('u32', job.networkRequests),
storage: api.createType('u32', job.storage),
requiredModules: api.createType('Vec<AcurastCommonJobModule>', (_a = job.requiredModules) !== null && _a !== void 0 ? _a : []),
extra: api.createType('PalletAcurastMarketplaceRegistrationExtra', {
requirements: api.createType('PalletAcurastMarketplaceJobRequirements', {
assignmentStrategy: job.extra.requirements.assignmentStrategy.variant ==
AssignmentStrategyVariant.Single
? api.createType('PalletAcurastMarketplaceAssignmentStrategy', {
single: job.extra.requirements.assignmentStrategy
.instantMatch
? api.createType('Option<Vec<PalletAcurastMarketplacePlannedExecution>>', job.extra.requirements.assignmentStrategy.instantMatch.map((item) => ({
source: api.createType('AccountId', item.source),
startDelay: api.createType('u64', item.startDelay.toFixed()),
})))
: api.createType('Option<bool>', undefined),
})
: api.createType('PalletAcurastMarketplaceAssignmentStrategy', {
competing: '',
}),
slots: api.createType('u8', job.extra.requirements.slots),
reward: api.createType('u128', job.extra.requirements.reward),
minReputation: job.extra.requirements.minReputation
? api.createType('Option<u128>', job.extra.requirements.minReputation)
: api.createType('Option<u128>', undefined),
processorVersion: job.extra.requirements.processorVersion
? api.createType('Option<PalletAcurastMarketplaceProcessorVersionRequirements>', job.extra.requirements.processorVersion)
: api.createType('Option<PalletAcurastMarketplaceProcessorVersionRequirements>', undefined),
instantMatch: job.extra.requirements.instantMatch
? api.createType('Option<Vec<PalletAcurastMarketplacePlannedExecution>>', job.extra.requirements.instantMatch.map((item) => ({
source: api.createType('AccountId', item.source),
startDelay: api.createType('u64', item.startDelay),
})))
: api.createType('Option<bool>', undefined),
runtime: api.createType('PalletAcurastMarketplaceRuntime', job.extra.requirements.runtime),
}),
// expectedFulfillmentFee: api.createType(
// "u128",
// job.extra.expectedFulfillmentFee
// ),
}),
});
// Create the additional parameters for the deploy extrinsic
const mutability = api.createType('AcurastCommonScriptMutability', job.mutability);
const reuseKeysFrom = job.reuseKeysFrom
? api.createType('Option<(AcurastCommonMultiOrigin, u128)>', [
api.createType('AcurastCommonMultiOrigin', {
acurast: job.reuseKeysFrom[1],
}),
api.createType('u128', job.reuseKeysFrom[2]),
])
: api.createType('Option<(AcurastCommonMultiOrigin, u128)>', undefined);
const minMetrics = api.createType('Option<Vec<(u8, u128, u128)>>', []);
try {
const unsub = yield api.tx['acurastMarketplace']['deploy'](jobRegistration, mutability, reuseKeysFrom, minMetrics)
.signAndSend(injector, (_b) => __awaiter(void 0, [_b], void 0, function* ({ status, events, txHash, dispatchError }) {
// console.log(
// "Transaction status:",
// status.type,
// status.isFinalized,
// status.isInBlock,
// status.isBroadcast,
// txHash.toHex()
// );
const jobRegistrationEvents = events.filter((event) => {
return (event.event.section === 'acurast' &&
event.event.method === 'JobRegistrationStoredV2');
});
const jobIds = jobRegistrationEvents.map((jobRegistrationEvent) => {
return jobRegistrationEvent.event.data[0];
});
// console.log("jobIds", jobIds);
if (jobIds.length > 0) {
statusCallback(DeploymentStatus.WaitingForMatch, {
jobIds: jobIds.map((jobId) => jobId.toJSON()),
});
const unsubStoredJobStatus = yield api.query.acurastMarketplace.storedJobStatus.multi(jobIds, (statuses) => {
// console.log("STATUS CB");
const stat = api.registry.createType('Vec<Option<PalletAcurastMarketplaceJobStatus>>', statuses);
const result = stat
.map((value, index) => {
if (value.isSome) {
const statusValue = value.unwrap();
let status = 'Open';
if (statusValue.isMatched) {
statusCallback(DeploymentStatus.Matched);
status = 'Matched';
}
else if (statusValue.isAssigned) {
statusCallback(DeploymentStatus.Acknowledged, {
acknowledged: statusValue.asAssigned.toNumber(),
});
status = JSON.stringify({
assigned: statusValue.asAssigned.toNumber(),
});
unsubStoredJobStatus();
}
return {
id: jobIds[index],
status,
};
}
return undefined;
})
.filter((value) => value !== undefined);
// console.log("result", result);
// console.log(
// "statuses",
// statuses.map((status) => status.toHuman())
// );
});
}
if (status.isInBlock || status.isFinalized) {
unsub();
}
if (dispatchError) {
if (dispatchError.isModule) {
// for module errors, we have the section indexed, lookup
const decoded = api.registry.findMetaError(dispatchError.asModule);
const { docs, name, section } = decoded;
reject(new DeploymentError(`${docs.join(' ')}`, `${section}.${name}`, { section, name, docs }));
}
else {
// Other, CannotLookup, BadOrigin, no extra info
const error = dispatchError.toHuman() || dispatchError.toString();
reject(new DeploymentError(error, 'TransactionError', {
originalError: error,
}));
}
}
else if (status.isInBlock) {
resolve(txHash.toHex());
}
}));
}
catch (e) {
reject(new DeploymentError(e instanceof Error
? e.message
: 'Unknown error during job deployment', 'DeploymentError', { originalError: e }));
}
}));
};
//# sourceMappingURL=deployJob.js.map