mirror of
https://github.com/oceanprotocol-archive/squid-js.git
synced 2024-02-02 15:31:51 +01:00
71 lines
2.7 KiB
TypeScript
71 lines
2.7 KiB
TypeScript
import ContractReflector from "../keeper/ContractReflector"
|
|
import ServiceAgreement from "../keeper/contracts/ServiceAgreement"
|
|
import Web3Provider from "../keeper/Web3Provider"
|
|
import MethodReflection from "../models/MethodReflection"
|
|
import Account from "./Account"
|
|
import OceanBase from "./OceanBase"
|
|
|
|
export default class ServiceAgreementTemplate extends OceanBase {
|
|
|
|
public static async registerServiceAgreementsTemplate(serviceName: string, methods: string[],
|
|
dependencyMatrix: number[], templateOwner: Account):
|
|
Promise<ServiceAgreementTemplate> {
|
|
|
|
const methodReflections: MethodReflection[] =
|
|
await Promise.all(methods.map(async (method) => {
|
|
const methodReflection = await
|
|
ContractReflector.reflectContractMethod(method)
|
|
return methodReflection
|
|
}))
|
|
|
|
const serviceAgreement: ServiceAgreement = await ServiceAgreement.getInstance()
|
|
|
|
const receipt = await serviceAgreement.setupAgreementTemplate(
|
|
methodReflections, dependencyMatrix,
|
|
Web3Provider.getWeb3().utils.fromAscii(serviceName),
|
|
templateOwner.getId())
|
|
|
|
const serviceAgreementTemplateId =
|
|
receipt.events.SetupAgreementTemplate.returnValues.serviceTemplateId
|
|
|
|
return new ServiceAgreementTemplate(
|
|
serviceAgreementTemplateId,
|
|
ServiceAgreementTemplate.generateConditionsKeys(serviceAgreementTemplateId, methodReflections),
|
|
templateOwner)
|
|
}
|
|
|
|
private static generateConditionsKeys(serviceAgreementTemplateId: string, methodReflections: MethodReflection[]):
|
|
string[] {
|
|
const conditions = []
|
|
for (const methodReflection of methodReflections) {
|
|
const values = [
|
|
{type: "bytes32", value: serviceAgreementTemplateId},
|
|
{type: "address", value: methodReflection.address},
|
|
{type: "bytes4", value: methodReflection.signature},
|
|
]
|
|
conditions.push(Web3Provider.getWeb3().utils.soliditySha3(...values).toString("hex"))
|
|
}
|
|
return conditions
|
|
}
|
|
|
|
private constructor(serviceAgreementTemplateId, private conditionKeys: string[], private owner: Account) {
|
|
super(serviceAgreementTemplateId)
|
|
}
|
|
|
|
/**
|
|
* gets the status of a service agreement template
|
|
*/
|
|
public async getStatus(): Promise<boolean> {
|
|
const serviceAgreement: ServiceAgreement = await ServiceAgreement.getInstance()
|
|
return serviceAgreement.getTemplateStatus(this.getId())
|
|
}
|
|
|
|
public getOwner(): Account {
|
|
return this.owner
|
|
}
|
|
|
|
public getConditionKeys(): string[] {
|
|
return this.conditionKeys
|
|
}
|
|
}
|