mirror of
https://github.com/oceanprotocol-archive/squid-js.git
synced 2024-02-02 15:31:51 +01:00
fix lock Payment
This commit is contained in:
parent
2d41535bab
commit
a6c09d0f88
1794
package-lock.json
generated
1794
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -48,7 +48,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/oceanprotocol/squid-js#readme",
|
"homepage": "https://github.com/oceanprotocol/squid-js#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oceanprotocol/keeper-contracts": "0.3.23",
|
"@oceanprotocol/keeper-contracts": "0.3.25",
|
||||||
"@oceanprotocol/secret-store-client": "0.0.12",
|
"@oceanprotocol/secret-store-client": "0.0.12",
|
||||||
"bignumber.js": "^8.0.1",
|
"bignumber.js": "^8.0.1",
|
||||||
"eth-crypto": "^1.2.7",
|
"eth-crypto": "^1.2.7",
|
||||||
@ -64,7 +64,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/chai": "^4.1.7",
|
"@types/chai": "^4.1.7",
|
||||||
"@types/mocha": "^5.2.5",
|
"@types/mocha": "^5.2.5",
|
||||||
"@types/node": "^10.12.7",
|
"@types/node": "^10.12.10",
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"mocha": "^5.2.0",
|
"mocha": "^5.2.0",
|
||||||
"nyc": "^13.1.0",
|
"nyc": "^13.1.0",
|
||||||
|
@ -60,7 +60,7 @@ export default abstract class ContractBase {
|
|||||||
if (!this.contract.methods[name]) {
|
if (!this.contract.methods[name]) {
|
||||||
throw new Error(`Method "${name}" is not part of contract "${this.contractName}"`)
|
throw new Error(`Method "${name}" is not part of contract "${this.contractName}"`)
|
||||||
}
|
}
|
||||||
// Logger.log(name)
|
// Logger.log(name, args)
|
||||||
const method = this.contract.methods[name]
|
const method = this.contract.methods[name]
|
||||||
try {
|
try {
|
||||||
const methodInstance = method(...args)
|
const methodInstance = method(...args)
|
||||||
|
@ -16,12 +16,12 @@ export default class ServiceAgreement extends ContractBase {
|
|||||||
name: any,
|
name: any,
|
||||||
fulfillmentIndices: number[],
|
fulfillmentIndices: number[],
|
||||||
fulfillmentOperator: number,
|
fulfillmentOperator: number,
|
||||||
ownerAddress: string)
|
ownerAddress: string): Promise<Receipt> {
|
||||||
: Promise<Receipt> {
|
|
||||||
|
|
||||||
return this.send("setupAgreementTemplate", ownerAddress, [
|
return this.send("setupAgreementTemplate", ownerAddress, [
|
||||||
templateId, methodReflections.map((r) => r.address),
|
templateId, methodReflections.map((r) => r.address),
|
||||||
methodReflections.map((r) => r.signature), dependencyMatrix, name, fulfillmentIndices, fulfillmentOperator,
|
methodReflections.map((r) => r.signature), dependencyMatrix, name, fulfillmentIndices,
|
||||||
|
fulfillmentOperator,
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,8 +205,10 @@ export default class ServiceAgreement extends OceanBase {
|
|||||||
super(serviceAgreementId)
|
super(serviceAgreementId)
|
||||||
}
|
}
|
||||||
|
|
||||||
public async lockPayment(assetId: string, price: number, consumer: Account): Promise<boolean> {
|
public async buyAsset(assetId: string, price: number, consumer: Account): Promise<boolean> {
|
||||||
const {paymentConditions} = await Keeper.getInstance()
|
const {paymentConditions, token} = await Keeper.getInstance()
|
||||||
|
|
||||||
|
await token.approve(paymentConditions.getAddress(), price, consumer.getId())
|
||||||
|
|
||||||
const lockPaymentReceipt =
|
const lockPaymentReceipt =
|
||||||
await paymentConditions.lockPayment(this.getId(), assetId, price,
|
await paymentConditions.lockPayment(this.getId(), assetId, price,
|
||||||
@ -222,7 +224,7 @@ export default class ServiceAgreement extends OceanBase {
|
|||||||
await accessConditions.grantAccess(this.getId(), assetId, documentId,
|
await accessConditions.grantAccess(this.getId(), assetId, documentId,
|
||||||
this.publisher.getId())
|
this.publisher.getId())
|
||||||
|
|
||||||
return grantAccessReceipt.status
|
return !!grantAccessReceipt.events.AccessGranted
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getStatus() {
|
public async getStatus() {
|
||||||
|
@ -35,15 +35,11 @@ export default class ServiceAgreementTemplate extends OceanBase {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
const fulfillmentIndices: number[] = this.template.Methods
|
const fulfillmentIndices: number[] = this.template.Methods
|
||||||
.map((method: Method, i: number) => method.isTerminalCondition ? i : undefined)
|
.map((method: Method, i: number) => method.isTerminalCondition ? i : null)
|
||||||
.filter((index: number) => index !== undefined)
|
.filter((index: number) => index !== null)
|
||||||
|
|
||||||
Logger.log(dependencyMatrix, fulfillmentIndices, this.template.fulfillmentOperator)
|
|
||||||
|
|
||||||
const {serviceAgreement} = await Keeper.getInstance()
|
const {serviceAgreement} = await Keeper.getInstance()
|
||||||
|
|
||||||
const methodReflections = await this.getMethodReflections()
|
|
||||||
|
|
||||||
const owner = await this.getOwner()
|
const owner = await this.getOwner()
|
||||||
|
|
||||||
if (owner.getId() === templateOwnerAddress) {
|
if (owner.getId() === templateOwnerAddress) {
|
||||||
@ -60,7 +56,7 @@ export default class ServiceAgreementTemplate extends OceanBase {
|
|||||||
const receipt = await serviceAgreement
|
const receipt = await serviceAgreement
|
||||||
.setupAgreementTemplate(
|
.setupAgreementTemplate(
|
||||||
this.template.id,
|
this.template.id,
|
||||||
methodReflections,
|
await this.getMethodReflections(),
|
||||||
dependencyMatrix,
|
dependencyMatrix,
|
||||||
Web3Provider.getWeb3().utils.fromAscii(this.template.templateName),
|
Web3Provider.getWeb3().utils.fromAscii(this.template.templateName),
|
||||||
fulfillmentIndices,
|
fulfillmentIndices,
|
||||||
@ -126,21 +122,20 @@ export default class ServiceAgreementTemplate extends OceanBase {
|
|||||||
throw new Error("Deps and timeouts need the same length")
|
throw new Error("Deps and timeouts need the same length")
|
||||||
}
|
}
|
||||||
|
|
||||||
// map name to index
|
|
||||||
const mappedDependencies: number[] = []
|
const mappedDependencies: number[] = []
|
||||||
const mappedDependencyTimeoutFlags: number[] = []
|
const mappedDependencyTimeoutFlags: number[] = []
|
||||||
|
|
||||||
this.template.Methods.forEach((m, i) => {
|
this.template.Methods.forEach((m, i) => {
|
||||||
const di = dependencies.findIndex((d) => d === m.name)
|
const di = dependencies.findIndex((d) => d === m.name)
|
||||||
mappedDependencies.push(di > -1 ? 1 : 0)
|
mappedDependencies.push(di > -1 ? 1 : 0)
|
||||||
mappedDependencyTimeoutFlags.push(dependencyTimeoutFlags[i] ? 1 : 0)
|
mappedDependencyTimeoutFlags.push((di > -1 && dependencyTimeoutFlags[di]) ? 1 : 0)
|
||||||
})
|
})
|
||||||
|
|
||||||
if (mappedDependencies.length !== mappedDependencyTimeoutFlags.length) {
|
if (mappedDependencies.length !== mappedDependencyTimeoutFlags.length) {
|
||||||
throw new Error("Deps and timeouts need the same length")
|
throw new Error("Deps and timeouts need the same length")
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.log(dependencies, mappedDependencies, dependencyTimeoutFlags, mappedDependencyTimeoutFlags)
|
// Logger.log(dependencies, mappedDependencies, dependencyTimeoutFlags, mappedDependencyTimeoutFlags)
|
||||||
|
|
||||||
let compressedDependencyValue: number = 0
|
let compressedDependencyValue: number = 0
|
||||||
const numBits: number = 2 // 1st for dependency, 2nd for timeout flag
|
const numBits: number = 2 // 1st for dependency, 2nd for timeout flag
|
||||||
|
@ -73,7 +73,8 @@ describe("ServiceAgreement", () => {
|
|||||||
case "assetId":
|
case "assetId":
|
||||||
return "0x" + assetId
|
return "0x" + assetId
|
||||||
case "documentKeyId":
|
case "documentKeyId":
|
||||||
return "0x1234"
|
return "0x" + assetId
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null
|
return null
|
||||||
@ -118,8 +119,7 @@ describe("ServiceAgreement", () => {
|
|||||||
describe("#signServiceAgreement()", () => {
|
describe("#signServiceAgreement()", () => {
|
||||||
it("should sign an service agreement", async () => {
|
it("should sign an service agreement", async () => {
|
||||||
|
|
||||||
const id: string = IdGenerator.generateId()
|
const did: string = `did:op:${assetId}`
|
||||||
const did: string = `did:op:${id}`
|
|
||||||
const ddo = new DDO({id: did, service: [accessService]})
|
const ddo = new DDO({id: did, service: [accessService]})
|
||||||
const serviceAgreementId: string = IdGenerator.generateId()
|
const serviceAgreementId: string = IdGenerator.generateId()
|
||||||
|
|
||||||
@ -138,8 +138,7 @@ describe("ServiceAgreement", () => {
|
|||||||
describe("#executeServiceAgreement()", () => {
|
describe("#executeServiceAgreement()", () => {
|
||||||
it("should execute an service agreement", async () => {
|
it("should execute an service agreement", async () => {
|
||||||
|
|
||||||
const id: string = IdGenerator.generateId()
|
const did: string = `did:op:${assetId}`
|
||||||
const did: string = `did:op:${id}`
|
|
||||||
const ddo = new DDO({id: did, service: [accessService]})
|
const ddo = new DDO({id: did, service: [accessService]})
|
||||||
const serviceAgreementId: string = IdGenerator.generateId()
|
const serviceAgreementId: string = IdGenerator.generateId()
|
||||||
|
|
||||||
@ -163,8 +162,7 @@ describe("ServiceAgreement", () => {
|
|||||||
describe("#getStatus()", () => {
|
describe("#getStatus()", () => {
|
||||||
it("should get the status of a newly created service agreement", async () => {
|
it("should get the status of a newly created service agreement", async () => {
|
||||||
|
|
||||||
const id: string = IdGenerator.generateId()
|
const did: string = `did:op:${assetId}`
|
||||||
const did: string = `did:op:${id}`
|
|
||||||
const ddo = new DDO({id: did, service: [accessService]})
|
const ddo = new DDO({id: did, service: [accessService]})
|
||||||
const serviceAgreementId: string = IdGenerator.generateId()
|
const serviceAgreementId: string = IdGenerator.generateId()
|
||||||
|
|
||||||
@ -185,16 +183,16 @@ describe("ServiceAgreement", () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("#lockPayment()", () => {
|
describe("#buyAsset()", () => {
|
||||||
it("should lock the payment in that service agreement", async () => {
|
it("should lock the payment in that service agreement", async () => {
|
||||||
|
|
||||||
const id: string = IdGenerator.generateId()
|
const did: string = `did:op:${assetId}`
|
||||||
const did: string = `did:op:${id}`
|
|
||||||
const ddo = new DDO({id: did, service: [accessService, metaDataService]})
|
const ddo = new DDO({id: did, service: [accessService, metaDataService]})
|
||||||
const serviceAgreementId: string = IdGenerator.generateId()
|
const serviceAgreementId: string = IdGenerator.generateId()
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
WebServiceConnectorProvider.setConnector(new WebServiceConnectorMock(ddo))
|
WebServiceConnectorProvider.setConnector(new WebServiceConnectorMock(ddo))
|
||||||
|
|
||||||
const serviceAgreementSignature: string =
|
const serviceAgreementSignature: string =
|
||||||
await ServiceAgreement.signServiceAgreement(assetId, ddo, accessService.serviceDefinitionId,
|
await ServiceAgreement.signServiceAgreement(assetId, ddo, accessService.serviceDefinitionId,
|
||||||
serviceAgreementId, consumerAccount)
|
serviceAgreementId, consumerAccount)
|
||||||
@ -208,7 +206,7 @@ describe("ServiceAgreement", () => {
|
|||||||
// get funds
|
// get funds
|
||||||
await consumerAccount.requestTokens(metaDataService.metadata.base.price)
|
await consumerAccount.requestTokens(metaDataService.metadata.base.price)
|
||||||
|
|
||||||
const paid: boolean = await serviceAgreement.lockPayment(assetId, metaDataService.metadata.base.price,
|
const paid: boolean = await serviceAgreement.buyAsset(assetId, metaDataService.metadata.base.price,
|
||||||
consumerAccount)
|
consumerAccount)
|
||||||
assert(paid)
|
assert(paid)
|
||||||
})
|
})
|
||||||
@ -217,8 +215,7 @@ describe("ServiceAgreement", () => {
|
|||||||
describe("#grantAccess()", () => {
|
describe("#grantAccess()", () => {
|
||||||
it("should grant access in that service agreement", async () => {
|
it("should grant access in that service agreement", async () => {
|
||||||
|
|
||||||
const id: string = IdGenerator.generateId()
|
const did: string = `did:op:${assetId}`
|
||||||
const did: string = `did:op:${id}`
|
|
||||||
const ddo = new DDO({id: did, service: [accessService]})
|
const ddo = new DDO({id: did, service: [accessService]})
|
||||||
const serviceAgreementId: string = IdGenerator.generateId()
|
const serviceAgreementId: string = IdGenerator.generateId()
|
||||||
|
|
||||||
@ -237,18 +234,18 @@ describe("ServiceAgreement", () => {
|
|||||||
// get funds
|
// get funds
|
||||||
await consumerAccount.requestTokens(metaDataService.metadata.base.price)
|
await consumerAccount.requestTokens(metaDataService.metadata.base.price)
|
||||||
|
|
||||||
const paid: boolean = await serviceAgreement.lockPayment(assetId, metaDataService.metadata.base.price,
|
const paid: boolean = await serviceAgreement.buyAsset(assetId, metaDataService.metadata.base.price,
|
||||||
consumerAccount)
|
consumerAccount)
|
||||||
assert(paid)
|
assert(paid)
|
||||||
|
|
||||||
const accessGranted: boolean = await serviceAgreement.grantAccess(assetId, IdGenerator.generateId())
|
// todo: use document id
|
||||||
|
const accessGranted: boolean = await serviceAgreement.grantAccess(assetId, assetId)
|
||||||
assert(accessGranted)
|
assert(accessGranted)
|
||||||
})
|
})
|
||||||
|
|
||||||
xit("should fail to grant grant access if there is no payment", async () => {
|
it("should fail to grant grant access if there is no payment", async () => {
|
||||||
|
|
||||||
const id: string = IdGenerator.generateId()
|
const did: string = `did:op:${assetId}`
|
||||||
const did: string = `did:op:${id}`
|
|
||||||
const ddo = new DDO({id: did, service: [accessService]})
|
const ddo = new DDO({id: did, service: [accessService]})
|
||||||
const serviceAgreementId: string = IdGenerator.generateId()
|
const serviceAgreementId: string = IdGenerator.generateId()
|
||||||
|
|
||||||
@ -264,7 +261,8 @@ describe("ServiceAgreement", () => {
|
|||||||
serviceAgreementId, serviceAgreementSignature, consumerAccount, publisherAccount)
|
serviceAgreementId, serviceAgreementSignature, consumerAccount, publisherAccount)
|
||||||
assert(serviceAgreement)
|
assert(serviceAgreement)
|
||||||
|
|
||||||
const accessGranted: boolean = await serviceAgreement.grantAccess(assetId, IdGenerator.generateId())
|
// todo: use document id
|
||||||
|
const accessGranted: boolean = await serviceAgreement.grantAccess(assetId, assetId)
|
||||||
assert(!accessGranted)
|
assert(!accessGranted)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user