2022-12-07 20:37:05 +11:00

112 lines
2.5 KiB
JavaScript

const { BigNumber } = require("ethers")
const { hexlify } = ethers.utils
function isBigNumberish(bn) {
return bn._isBigNumber === true
}
function normalizeBn(bn) {
return isBigNumberish(bn) ? bn.toNumber() : bn
}
function supportDAL(Assertion) {
Assertion.addMethod("equalsRequest", function (request) {
const evmRequest = requestFromArray(this._obj)
request.content.por.u = hexlify(request.content.por.u)
request.content.por.publicKey = hexlify(request.content.por.publicKey)
request.content.por.name = hexlify(request.content.por.name)
new Assertion(evmRequest).to.deep.equal(request)
})
Assertion.addMethod("equalsSlot", function (slot) {
const evmSlot = slotFromArray(this._obj)
new Assertion(evmSlot).to.deep.equal(slot)
})
Assertion.addMethod("equalsClient", function (client) {
const evmClient = clientFromArray(this._obj)
new Assertion(evmClient).to.deep.equal(client)
})
Assertion.addMethod("equalsHost", function (host) {
const evmHost = hostFromArray(this._obj)
new Assertion(evmHost).to.deep.equal(host)
})
}
function parse(keys, object) {
let obj = {}
keys.forEach((key, i) => (obj[key] = normalizeBn(object[i])))
return obj
}
function porFromArray(por) {
return {
u: por.u,
publicKey: por.publicKey,
name: por.name,
}
}
function erasureFromArray(erasure) {
return {
totalChunks: normalizeBn(erasure.totalChunks),
}
}
function contentFromArray(ask) {
return {
cid: ask.cid,
erasure: erasureFromArray(ask.erasure),
por: porFromArray(ask.por),
}
}
function askFromArray(ask) {
return {
slots: normalizeBn(ask.slots),
slotSize: normalizeBn(ask.slotSize),
duration: normalizeBn(ask.duration),
proofProbability: normalizeBn(ask.proofProbability),
reward: normalizeBn(ask.reward),
maxSlotLoss: normalizeBn(ask.maxSlotLoss),
}
}
function requestFromArray(request) {
return {
id: request[0],
client: request[1],
ask: askFromArray(request[2]),
content: contentFromArray(request[3]),
expiry: normalizeBn(request[4]),
nonce: request[5],
slots: normalizeBn(request[6]),
}
}
function slotFromArray(slot) {
return {
id: slot[0],
host: slot[1],
hostPaid: slot[2],
requestId: slot[3],
}
}
function clientFromArray(client) {
return {
id: client[0],
requests: client[1],
}
}
function hostFromArray(host) {
return {
id: host[0],
slots: host[1],
requests: host[2],
}
}
module.exports = {
supportDAL,
}