1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00
squid-js/src/ocean/ServiceAgreementTemplate.ts
2018-11-05 10:01:58 +01:00

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
}
}