[storage] Remove finishContract()
Is superceded by Marketplace.payoutSlot().
This commit is contained in:
parent
9bc84dafe0
commit
e5ed3bd59d
|
@ -10,8 +10,6 @@ contract Storage is Collateral, Marketplace {
|
||||||
uint256 public slashMisses;
|
uint256 public slashMisses;
|
||||||
uint256 public slashPercentage;
|
uint256 public slashPercentage;
|
||||||
|
|
||||||
mapping(bytes32 => bool) private contractFinished;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
IERC20 token,
|
IERC20 token,
|
||||||
uint256 _proofPeriod,
|
uint256 _proofPeriod,
|
||||||
|
@ -42,17 +40,6 @@ contract Storage is Collateral, Marketplace {
|
||||||
return _host(id);
|
return _host(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
function finishContract(bytes32 id) public {
|
|
||||||
require(_host(id) != address(0), "Contract not started");
|
|
||||||
require(!contractFinished[id], "Contract already finished");
|
|
||||||
require(block.timestamp > proofEnd(id), "Contract has not ended yet");
|
|
||||||
contractFinished[id] = true;
|
|
||||||
require(
|
|
||||||
token.transfer(_host(id), _request(id).ask.reward),
|
|
||||||
"Payment failed"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function missingProofs(bytes32 contractId) public view returns (uint256) {
|
function missingProofs(bytes32 contractId) public view returns (uint256) {
|
||||||
return _missed(contractId);
|
return _missed(contractId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ const { hexlify, randomBytes } = ethers.utils
|
||||||
const { AddressZero } = ethers.constants
|
const { AddressZero } = ethers.constants
|
||||||
const { exampleRequest } = require("./examples")
|
const { exampleRequest } = require("./examples")
|
||||||
const { advanceTime, advanceTimeTo, currentTime } = require("./evm")
|
const { advanceTime, advanceTimeTo, currentTime } = require("./evm")
|
||||||
const { requestId } = require("./ids")
|
const { requestId, slotId } = require("./ids")
|
||||||
const { periodic } = require("./time")
|
const { periodic } = require("./time")
|
||||||
|
|
||||||
describe("Storage", function () {
|
describe("Storage", function () {
|
||||||
|
@ -15,6 +15,7 @@ describe("Storage", function () {
|
||||||
let client, host
|
let client, host
|
||||||
let request
|
let request
|
||||||
let collateralAmount, slashMisses, slashPercentage
|
let collateralAmount, slashMisses, slashPercentage
|
||||||
|
let slot
|
||||||
let id
|
let id
|
||||||
|
|
||||||
function switchAccount(account) {
|
function switchAccount(account) {
|
||||||
|
@ -39,6 +40,10 @@ describe("Storage", function () {
|
||||||
request = exampleRequest()
|
request = exampleRequest()
|
||||||
request.client = client.address
|
request.client = client.address
|
||||||
id = requestId(request)
|
id = requestId(request)
|
||||||
|
slot = {
|
||||||
|
request: requestId(request),
|
||||||
|
index: request.content.erasure.totalNodes / 2,
|
||||||
|
}
|
||||||
|
|
||||||
switchAccount(client)
|
switchAccount(client)
|
||||||
await token.approve(storage.address, request.ask.reward)
|
await token.approve(storage.address, request.ask.reward)
|
||||||
|
@ -62,54 +67,17 @@ describe("Storage", function () {
|
||||||
expect(await storage.getHost(requestId(request))).to.equal(host.address)
|
expect(await storage.getHost(requestId(request))).to.equal(host.address)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("finishing the contract", function () {
|
describe("ending the contract", function () {
|
||||||
async function waitUntilEnd() {
|
async function waitUntilEnd() {
|
||||||
const end = (await storage.proofEnd(id)).toNumber()
|
const end = (await storage.proofEnd(slotId(slot))).toNumber()
|
||||||
await advanceTimeTo(end)
|
await advanceTimeTo(end)
|
||||||
}
|
}
|
||||||
|
|
||||||
it("unlocks the host collateral", async function () {
|
it("unlocks the host collateral", async function () {
|
||||||
await storage.fulfillRequest(requestId(request), proof)
|
await storage.fillSlot(slot.request, slot.index, proof)
|
||||||
await waitUntilEnd()
|
await waitUntilEnd()
|
||||||
await storage.finishContract(id)
|
|
||||||
await expect(storage.withdraw()).not.to.be.reverted
|
await expect(storage.withdraw()).not.to.be.reverted
|
||||||
})
|
})
|
||||||
|
|
||||||
it("pays the host", async function () {
|
|
||||||
await storage.fulfillRequest(requestId(request), proof)
|
|
||||||
await waitUntilEnd()
|
|
||||||
const startBalance = await token.balanceOf(host.address)
|
|
||||||
await storage.finishContract(id)
|
|
||||||
const endBalance = await token.balanceOf(host.address)
|
|
||||||
expect(endBalance - startBalance).to.equal(request.ask.reward)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("is only allowed when the contract has started", async function () {
|
|
||||||
await expect(storage.finishContract(id)).to.be.revertedWith(
|
|
||||||
"Contract not started"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("is only allowed when end time has passed", async function () {
|
|
||||||
await storage.fulfillRequest(requestId(request), proof)
|
|
||||||
await expect(storage.finishContract(id)).to.be.revertedWith(
|
|
||||||
"Contract has not ended yet"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it("can only be done once", async function () {
|
|
||||||
await storage.fulfillRequest(requestId(request), proof)
|
|
||||||
await waitUntilEnd()
|
|
||||||
await storage.finishContract(id)
|
|
||||||
await expect(storage.finishContract(id)).to.be.reverted
|
|
||||||
})
|
|
||||||
|
|
||||||
it("can not be restarted", async function () {
|
|
||||||
await storage.fulfillRequest(requestId(request), proof)
|
|
||||||
await waitUntilEnd()
|
|
||||||
await storage.finishContract(id)
|
|
||||||
await expect(storage.fulfillRequest(id, proof)).to.be.reverted
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("slashing when missing proofs", function () {
|
describe("slashing when missing proofs", function () {
|
||||||
|
|
Loading…
Reference in New Issue