mirror of
https://github.com/oceanprotocol/ocean.js.git
synced 2024-11-26 20:39:05 +01:00
finished datatoken tests
This commit is contained in:
parent
b82cf2f7a6
commit
4cfd469c61
@ -646,7 +646,7 @@ export class Datatoken extends SmartContract {
|
|||||||
|
|
||||||
const dtContract = this.getContract(dtAddress)
|
const dtContract = this.getContract(dtAddress)
|
||||||
|
|
||||||
const valueHex = ethers.utils.hexlify(value)
|
const valueHex = ethers.utils.hexlify(ethers.utils.toUtf8Bytes(value))
|
||||||
|
|
||||||
const estGas = await dtContract.estimateGas.setData(valueHex)
|
const estGas = await dtContract.estimateGas.setData(valueHex)
|
||||||
if (estimateGas) return <ReceiptOrEstimate<G>>estGas
|
if (estimateGas) return <ReceiptOrEstimate<G>>estGas
|
||||||
@ -721,7 +721,7 @@ export class Datatoken extends SmartContract {
|
|||||||
* @param {String} dtAddress Datatoken adress
|
* @param {String} dtAddress Datatoken adress
|
||||||
* @return {Promise<number>}
|
* @return {Promise<number>}
|
||||||
*/
|
*/
|
||||||
public async getDecimals(dtAddress: string): Promise<string> {
|
public async getDecimals(dtAddress: string): Promise<number> {
|
||||||
const dtContract = this.getContract(dtAddress)
|
const dtContract = this.getContract(dtAddress)
|
||||||
const decimals = await dtContract.decimals()
|
const decimals = await dtContract.decimals()
|
||||||
return decimals
|
return decimals
|
||||||
@ -842,7 +842,7 @@ export class Datatoken extends SmartContract {
|
|||||||
const returnValues = {
|
const returnValues = {
|
||||||
publishMarketFeeAddress: publishingMarketFee[0],
|
publishMarketFeeAddress: publishingMarketFee[0],
|
||||||
publishMarketFeeToken: publishingMarketFee[1],
|
publishMarketFeeToken: publishingMarketFee[1],
|
||||||
publishMarketFeeAmount: publishingMarketFee[2]
|
publishMarketFeeAmount: publishingMarketFee[2].toString()
|
||||||
}
|
}
|
||||||
return returnValues
|
return returnValues
|
||||||
}
|
}
|
||||||
|
@ -746,7 +746,7 @@ export class Nft extends SmartContract {
|
|||||||
*/
|
*/
|
||||||
public async getData(nftAddress: string, key: string): Promise<string> {
|
public async getData(nftAddress: string, key: string): Promise<string> {
|
||||||
const nftContract = this.getContract(nftAddress)
|
const nftContract = this.getContract(nftAddress)
|
||||||
const keyHash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(key))
|
const keyHash = ethers.utils.keccak256(key)
|
||||||
const data = await nftContract.getData(keyHash)
|
const data = await nftContract.getData(keyHash)
|
||||||
return data ? ethers.utils.toUtf8String(data) : null
|
return data ? ethers.utils.toUtf8String(data) : null
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { assert } from 'chai'
|
import { assert, expect } from 'chai'
|
||||||
import { getTestConfig, provider, getAddresses } from '../config'
|
import { getTestConfig, provider, getAddresses } from '../config'
|
||||||
import { ethers, Signer } from 'ethers'
|
import { ethers, Signer, providers } from 'ethers'
|
||||||
import {
|
import {
|
||||||
Config,
|
Config,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
@ -365,45 +365,68 @@ describe('Datatoken', () => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
it('#removePaymentManager - should FAIL TO remove user2 as paymentManager, if nftDatatoken has DatatokenDeployer permission', async () => {
|
it('#removePaymentManager - should FAIL TO remove user2 as paymentManager, if nftDatatoken has DatatokenDeployer permission', async () => {
|
||||||
assert((await nftDatatoken.isDatatokenDeployer(nftAddress, user1)) === false)
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user2)).paymentManager === true
|
(await nftDatatoken.isDatatokenDeployer(nftAddress, await user3.getAddress())) ===
|
||||||
|
false
|
||||||
|
)
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await user2.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
await datatoken.removePaymentManager(datatokenAddress, user1, user2)
|
await datatoken.removePaymentManager(
|
||||||
|
datatokenAddress,
|
||||||
|
await user3.getAddress(),
|
||||||
|
await user2.getAddress()
|
||||||
|
)
|
||||||
assert(false)
|
assert(false)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert(e.message === 'Caller is not DatatokenDeployer')
|
assert(e.message === 'Caller is not DatatokenDeployer')
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user2)).paymentManager === true
|
(await datatoken.getPermissions(datatokenAddress, await user2.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#removePaymentManager - should remove user2 as paymentManager, if Caller has DatatokenDeployer permission', async () => {
|
it('#removePaymentManager - should remove user2 as paymentManager, if Caller has DatatokenDeployer permission', async () => {
|
||||||
assert((await nftDatatoken.isDatatokenDeployer(nftAddress, nftOwner)) === true)
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user2)).paymentManager === true
|
(await nftDatatoken.isDatatokenDeployer(
|
||||||
|
nftAddress,
|
||||||
|
await nftOwner.getAddress()
|
||||||
|
)) === true
|
||||||
|
)
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await user2.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
)
|
)
|
||||||
|
|
||||||
await datatoken.removePaymentManager(datatokenAddress, nftOwner, user2)
|
await datatoken.removePaymentManager(
|
||||||
|
datatokenAddress,
|
||||||
|
await nftOwner.getAddress(),
|
||||||
|
await user2.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user2)).paymentManager === false
|
(await datatoken.getPermissions(datatokenAddress, await user2.getAddress()))
|
||||||
|
.paymentManager === false
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#setPaymentCollector - should fail to set a new paymentCollector, if NOT PAYMENT Manager, NFT OWNER OR ERC 20 DEPLOYER', async () => {
|
it('#setPaymentCollector - should fail to set a new paymentCollector, if NOT PAYMENT Manager, NFT OWNER OR ERC 20 DEPLOYER', async () => {
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user2)).paymentManager === false
|
(await datatoken.getPermissions(datatokenAddress, await user2.getAddress()))
|
||||||
|
.paymentManager === false
|
||||||
)
|
)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await datatoken.setPaymentCollector(datatokenAddress, user1, user2)
|
await datatoken.setPaymentCollector(
|
||||||
|
datatokenAddress,
|
||||||
|
await user3.getAddress(),
|
||||||
|
await user2.getAddress()
|
||||||
|
)
|
||||||
assert(false)
|
assert(false)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert(e.message === 'Caller is not Fee Manager, owner or Datatoken Deployer')
|
assert(e.message === 'Caller is not Fee Manager, owner or Datatoken Deployer')
|
||||||
@ -411,45 +434,79 @@ describe('Datatoken', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('#setPaymentCollector - should set a new paymentCollector, if PAYMENT MANAGER', async () => {
|
it('#setPaymentCollector - should set a new paymentCollector, if PAYMENT MANAGER', async () => {
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user1)
|
|
||||||
|
|
||||||
await datatoken.addPaymentManager(datatokenAddress, nftOwner, user1)
|
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user1)).paymentManager === true
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
|
(await user1.getAddress())
|
||||||
)
|
)
|
||||||
|
|
||||||
await datatoken.setPaymentCollector(datatokenAddress, user1, user3)
|
await datatoken.addPaymentManager(
|
||||||
|
datatokenAddress,
|
||||||
|
await nftOwner.getAddress(),
|
||||||
|
await user1.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await user1.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
|
)
|
||||||
|
|
||||||
|
await datatoken.setPaymentCollector(
|
||||||
|
datatokenAddress,
|
||||||
|
await user1.getAddress(),
|
||||||
|
await user3.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
|
(await user3.getAddress())
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#setPaymentCollector - should set a new paymentCollector, if NFT OWNER', async () => {
|
it('#setPaymentCollector - should set a new paymentCollector, if NFT OWNER', async () => {
|
||||||
assert((await nftDatatoken.getNftOwner(nftAddress)) === nftOwner)
|
assert((await nftDatatoken.getNftOwner(nftAddress)) === (await nftOwner.getAddress()))
|
||||||
|
|
||||||
await datatoken.setPaymentCollector(datatokenAddress, nftOwner, user2)
|
await datatoken.setPaymentCollector(
|
||||||
|
datatokenAddress,
|
||||||
|
await nftOwner.getAddress(),
|
||||||
|
await user2.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user2)
|
assert(
|
||||||
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
|
(await user2.getAddress())
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#setPaymentCollector - should set a new paymentCollector, if ERC 20 DEPLOYER', async () => {
|
it('#setPaymentCollector - should set a new paymentCollector, if ERC 20 DEPLOYER', async () => {
|
||||||
assert(
|
assert(
|
||||||
(await nftDatatoken.getNftPermissions(nftAddress, datatokenDeployer))
|
(
|
||||||
.deployERC20 === true
|
await nftDatatoken.getNftPermissions(
|
||||||
|
nftAddress,
|
||||||
|
await datatokenDeployer.getAddress()
|
||||||
|
)
|
||||||
|
).deployERC20 === true
|
||||||
)
|
)
|
||||||
|
|
||||||
await datatoken.setPaymentCollector(datatokenAddress, datatokenDeployer, user3)
|
await datatoken.setPaymentCollector(
|
||||||
|
datatokenAddress,
|
||||||
|
await datatokenDeployer.getAddress(),
|
||||||
|
await user3.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
|
assert(
|
||||||
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
|
(await user3.getAddress())
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#startOrder- user2 should create an order for DT ', async () => {
|
it('#startOrder- user2 should create an order for DT ', async () => {
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.balance(datatokenAddress, user1)) === '10',
|
(await datatoken.balance(datatokenAddress, await user1.getAddress())) === '10.0',
|
||||||
'User1 does not hold 10 datatokens'
|
'User1 does not hold 10 datatokens'
|
||||||
)
|
)
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.balance(datatokenAddress, user2)) === '0',
|
(await datatoken.balance(datatokenAddress, await user2.getAddress())) === '0.0',
|
||||||
'User2 does not hold 0 datatokens'
|
'User2 does not hold 0 datatokens'
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -457,35 +514,50 @@ describe('Datatoken', () => {
|
|||||||
const providerFeeToken = ZERO_ADDRESS
|
const providerFeeToken = ZERO_ADDRESS
|
||||||
const providerFeeAmount = '0'
|
const providerFeeAmount = '0'
|
||||||
const providerValidUntil = '0'
|
const providerValidUntil = '0'
|
||||||
const message = web3.utils.soliditySha3(
|
|
||||||
{ t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) },
|
const message = ethers.utils.solidityKeccak256(
|
||||||
{ t: 'address', v: user3 },
|
['bytes', 'address', 'address', 'uint256', 'uint256'],
|
||||||
{ t: 'address', v: providerFeeToken },
|
[
|
||||||
{ t: 'uint256', v: providerFeeAmount },
|
ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
{ t: 'uint256', v: providerValidUntil }
|
await user3.getAddress(),
|
||||||
|
providerFeeToken,
|
||||||
|
providerFeeAmount,
|
||||||
|
providerValidUntil
|
||||||
|
]
|
||||||
)
|
)
|
||||||
const { v, r, s } = await signHash(web3, message, user3)
|
|
||||||
|
// const { v, r, s } = await signHash(web3, message,user3)
|
||||||
|
const messageHashBytes = ethers.utils.arrayify(message)
|
||||||
|
let signedMessage = await (user3 as providers.JsonRpcSigner)._legacySignMessage(
|
||||||
|
messageHashBytes
|
||||||
|
)
|
||||||
|
signedMessage = signedMessage.substr(2) // remove 0x
|
||||||
|
const r = '0x' + signedMessage.slice(0, 64)
|
||||||
|
const s = '0x' + signedMessage.slice(64, 128)
|
||||||
|
let v = '0x' + signedMessage.slice(128, 130)
|
||||||
|
if (v === '0x00') v = '0x1b'
|
||||||
|
if (v === '0x01') v = '0x1c'
|
||||||
|
|
||||||
const providerFees: ProviderFees = {
|
const providerFees: ProviderFees = {
|
||||||
providerFeeAddress: user3,
|
providerFeeAddress: await user3.getAddress(),
|
||||||
providerFeeToken,
|
providerFeeToken,
|
||||||
providerFeeAmount,
|
providerFeeAmount,
|
||||||
v,
|
v,
|
||||||
r,
|
r,
|
||||||
s,
|
s,
|
||||||
providerData: web3.utils.toHex(web3.utils.asciiToHex(providerData)),
|
providerData: ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
validUntil: providerValidUntil
|
validUntil: providerValidUntil
|
||||||
}
|
}
|
||||||
const order = await datatoken.startOrder(
|
const order = await datatoken.startOrder(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user1,
|
await user2.getAddress(),
|
||||||
user2,
|
|
||||||
1,
|
1,
|
||||||
providerFees
|
providerFees
|
||||||
)
|
)
|
||||||
assert(order !== null)
|
assert(order !== null)
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.balance(datatokenAddress, user1)) === '9',
|
(await datatoken.balance(datatokenAddress, await user1.getAddress())) === '9.0',
|
||||||
'Invalid user balance, DT was not substracted'
|
'Invalid user balance, DT was not substracted'
|
||||||
)
|
)
|
||||||
assert(
|
assert(
|
||||||
@ -502,174 +574,249 @@ describe('Datatoken', () => {
|
|||||||
const providerFeeToken = ZERO_ADDRESS
|
const providerFeeToken = ZERO_ADDRESS
|
||||||
const providerFeeAmount = '0'
|
const providerFeeAmount = '0'
|
||||||
const providerValidUntil = '0'
|
const providerValidUntil = '0'
|
||||||
const message = web3.utils.soliditySha3(
|
|
||||||
{ t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) },
|
const message = ethers.utils.solidityKeccak256(
|
||||||
{ t: 'address', v: user3 },
|
['bytes', 'address', 'address', 'uint256', 'uint256'],
|
||||||
{ t: 'address', v: providerFeeToken },
|
[
|
||||||
{ t: 'uint256', v: providerFeeAmount },
|
ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
{ t: 'uint256', v: providerValidUntil }
|
await user3.getAddress(),
|
||||||
|
providerFeeToken,
|
||||||
|
providerFeeAmount,
|
||||||
|
providerValidUntil
|
||||||
|
]
|
||||||
)
|
)
|
||||||
const { v, r, s } = await signHash(web3, message, user3)
|
|
||||||
|
const messageHashBytes = ethers.utils.arrayify(message)
|
||||||
|
let signedMessage = await (user3 as providers.JsonRpcSigner)._legacySignMessage(
|
||||||
|
messageHashBytes
|
||||||
|
)
|
||||||
|
signedMessage = signedMessage.substr(2) // remove 0x
|
||||||
|
const r = '0x' + signedMessage.slice(0, 64)
|
||||||
|
const s = '0x' + signedMessage.slice(64, 128)
|
||||||
|
let v = '0x' + signedMessage.slice(128, 130)
|
||||||
|
if (v === '0x00') v = '0x1b'
|
||||||
|
if (v === '0x01') v = '0x1c'
|
||||||
|
|
||||||
const providerFees: ProviderFees = {
|
const providerFees: ProviderFees = {
|
||||||
providerFeeAddress: user3,
|
providerFeeAddress: await user3.getAddress(),
|
||||||
providerFeeToken,
|
providerFeeToken,
|
||||||
providerFeeAmount,
|
providerFeeAmount,
|
||||||
v,
|
v,
|
||||||
r,
|
r,
|
||||||
s,
|
s,
|
||||||
providerData: web3.utils.toHex(web3.utils.asciiToHex(providerData)),
|
providerData: ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
validUntil: providerValidUntil
|
validUntil: providerValidUntil
|
||||||
}
|
}
|
||||||
|
|
||||||
const order = await datatoken.startOrder(
|
const order = await datatoken.startOrder(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user1,
|
await user2.getAddress(),
|
||||||
user2,
|
|
||||||
1,
|
1,
|
||||||
providerFees
|
providerFees
|
||||||
)
|
)
|
||||||
assert(order.transactionHash, ' Failed to start order')
|
|
||||||
const reusedOrder = await datatoken.reuseOrder(
|
assert(order.blockHash, ' Failed to start order')
|
||||||
datatokenAddress,
|
const tx = await datatoken.reuseOrder(datatokenAddress, order.blockHash, providerFees)
|
||||||
user2,
|
const reusedTx = await tx.wait()
|
||||||
order.transactionHash,
|
|
||||||
providerFees
|
const orderReusedTx = getEventFromTx(reusedTx, 'OrderReused')
|
||||||
)
|
const providerFeeTx = getEventFromTx(reusedTx, 'ProviderFee')
|
||||||
assert(reusedOrder.events.OrderReused.event === 'OrderReused')
|
|
||||||
assert(reusedOrder.events.ProviderFee.event === 'ProviderFee')
|
expect(orderReusedTx.event === 'OrderReused')
|
||||||
|
expect(providerFeeTx.event === 'ProviderFee')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#buyFromDispenserAndOrder- Enterprise method', async () => {
|
it('#buyFromDispenserAndOrder- Enterprise method', async () => {
|
||||||
const providerData = JSON.stringify({ timeout: 0 })
|
const providerData = JSON.stringify({ timeout: 0 })
|
||||||
const providerFeeToken = ZERO_ADDRESS
|
const providerFeeToken = ZERO_ADDRESS
|
||||||
const providerFeeAmount = '0'
|
const providerFeeAmount = '0'
|
||||||
const message = web3.utils.soliditySha3(
|
|
||||||
{ t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) },
|
|
||||||
{ t: 'address', v: user3 },
|
|
||||||
{ t: 'address', v: providerFeeToken },
|
|
||||||
{ t: 'uint256', v: providerFeeAmount }
|
|
||||||
)
|
|
||||||
const { v, r, s } = await signHash(web3, message, user3)
|
|
||||||
const providerValidUntil = '0'
|
const providerValidUntil = '0'
|
||||||
|
const message = ethers.utils.solidityKeccak256(
|
||||||
|
['bytes', 'address', 'address', 'uint256', 'uint256'],
|
||||||
|
[
|
||||||
|
ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
|
await user3.getAddress(),
|
||||||
|
providerFeeToken,
|
||||||
|
providerFeeAmount,
|
||||||
|
providerValidUntil
|
||||||
|
]
|
||||||
|
)
|
||||||
|
const messageHashBytes = ethers.utils.arrayify(message)
|
||||||
|
let signedMessage = await (user3 as providers.JsonRpcSigner)._legacySignMessage(
|
||||||
|
messageHashBytes
|
||||||
|
)
|
||||||
|
signedMessage = signedMessage.substr(2) // remove 0x
|
||||||
|
const r = '0x' + signedMessage.slice(0, 64)
|
||||||
|
const s = '0x' + signedMessage.slice(64, 128)
|
||||||
|
let v = '0x' + signedMessage.slice(128, 130)
|
||||||
|
if (v === '0x00') v = '0x1b'
|
||||||
|
if (v === '0x01') v = '0x1c'
|
||||||
|
|
||||||
const providerFees: ProviderFees = {
|
const providerFees: ProviderFees = {
|
||||||
providerFeeAddress: user3,
|
providerFeeAddress: await user3.getAddress(),
|
||||||
providerFeeToken,
|
providerFeeToken,
|
||||||
providerFeeAmount,
|
providerFeeAmount,
|
||||||
v,
|
v,
|
||||||
r,
|
r,
|
||||||
s,
|
s,
|
||||||
providerData: web3.utils.toHex(web3.utils.asciiToHex(providerData)),
|
providerData: ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
validUntil: providerValidUntil
|
validUntil: providerValidUntil
|
||||||
}
|
}
|
||||||
|
|
||||||
const consumeMarketFee = {
|
const consumeMarketFee = {
|
||||||
consumeMarketFeeAddress: ZERO_ADDRESS,
|
consumeMarketFeeAddress: ZERO_ADDRESS,
|
||||||
consumeMarketFeeToken: ZERO_ADDRESS,
|
consumeMarketFeeToken: ZERO_ADDRESS,
|
||||||
consumeMarketFeeAmount: '0'
|
consumeMarketFeeAmount: '0'
|
||||||
}
|
}
|
||||||
const order: OrderParams = {
|
const order: OrderParams = {
|
||||||
consumer: user1,
|
consumer: await user1.getAddress(),
|
||||||
serviceIndex: 1,
|
serviceIndex: 1,
|
||||||
_providerFee: providerFees,
|
_providerFee: providerFees,
|
||||||
_consumeMarketFee: consumeMarketFee
|
_consumeMarketFee: consumeMarketFee
|
||||||
}
|
}
|
||||||
const buyFromDispenseTx = await datatoken.buyFromDispenserAndOrder(
|
const buyFromDispenseTx = await datatoken.buyFromDispenserAndOrder(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
nftOwner,
|
|
||||||
order,
|
order,
|
||||||
contracts.dispenserAddress
|
addresses.Dispenser
|
||||||
)
|
)
|
||||||
assert(buyFromDispenseTx !== null)
|
assert(buyFromDispenseTx)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#buyFromFreAndOrder - Enterprise method ', async () => {
|
it('#buyFromFreAndOrder - Enterprise method ', async () => {
|
||||||
const providerData = JSON.stringify({ timeout: 0 })
|
const providerData = JSON.stringify({ timeout: 0 })
|
||||||
const providerFeeToken = ZERO_ADDRESS
|
const providerFeeToken = ZERO_ADDRESS
|
||||||
const providerFeeAmount = '0'
|
const providerFeeAmount = '0'
|
||||||
const message = web3.utils.soliditySha3(
|
|
||||||
{ t: 'bytes', v: web3.utils.toHex(web3.utils.asciiToHex(providerData)) },
|
|
||||||
{ t: 'address', v: user3 },
|
|
||||||
{ t: 'address', v: providerFeeToken },
|
|
||||||
{ t: 'uint256', v: providerFeeAmount }
|
|
||||||
)
|
|
||||||
const { v, r, s } = await signHash(web3, message, user3)
|
|
||||||
const providerValidUntil = '0'
|
const providerValidUntil = '0'
|
||||||
|
|
||||||
|
const message = ethers.utils.solidityKeccak256(
|
||||||
|
['bytes', 'address', 'address', 'uint256', 'uint256'],
|
||||||
|
[
|
||||||
|
ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
|
await user3.getAddress(),
|
||||||
|
providerFeeToken,
|
||||||
|
providerFeeAmount,
|
||||||
|
providerValidUntil
|
||||||
|
]
|
||||||
|
)
|
||||||
|
const messageHashBytes = ethers.utils.arrayify(message)
|
||||||
|
let signedMessage = await (user3 as providers.JsonRpcSigner)._legacySignMessage(
|
||||||
|
messageHashBytes
|
||||||
|
)
|
||||||
|
signedMessage = signedMessage.substr(2) // remove 0x
|
||||||
|
const r = '0x' + signedMessage.slice(0, 64)
|
||||||
|
const s = '0x' + signedMessage.slice(64, 128)
|
||||||
|
let v = '0x' + signedMessage.slice(128, 130)
|
||||||
|
if (v === '0x00') v = '0x1b'
|
||||||
|
if (v === '0x01') v = '0x1c'
|
||||||
|
|
||||||
const providerFees: ProviderFees = {
|
const providerFees: ProviderFees = {
|
||||||
providerFeeAddress: user1,
|
providerFeeAddress: await user1.getAddress(),
|
||||||
providerFeeToken,
|
providerFeeToken,
|
||||||
providerFeeAmount,
|
providerFeeAmount,
|
||||||
v,
|
v,
|
||||||
r,
|
r,
|
||||||
s,
|
s,
|
||||||
providerData: web3.utils.toHex(web3.utils.asciiToHex(providerData)),
|
providerData: ethers.utils.hexlify(ethers.utils.toUtf8Bytes(providerData)),
|
||||||
validUntil: providerValidUntil
|
validUntil: providerValidUntil
|
||||||
}
|
}
|
||||||
|
|
||||||
const consumeMarketFee = {
|
const consumeMarketFee = {
|
||||||
consumeMarketFeeAddress: ZERO_ADDRESS,
|
consumeMarketFeeAddress: ZERO_ADDRESS,
|
||||||
consumeMarketFeeToken: ZERO_ADDRESS,
|
consumeMarketFeeToken: ZERO_ADDRESS,
|
||||||
consumeMarketFeeAmount: '0'
|
consumeMarketFeeAmount: '0'
|
||||||
}
|
}
|
||||||
const order: OrderParams = {
|
const order: OrderParams = {
|
||||||
consumer: user1,
|
consumer: await user1.getAddress(),
|
||||||
serviceIndex: 1,
|
serviceIndex: 1,
|
||||||
_providerFee: providerFees,
|
_providerFee: providerFees,
|
||||||
_consumeMarketFee: consumeMarketFee
|
_consumeMarketFee: consumeMarketFee
|
||||||
}
|
}
|
||||||
|
|
||||||
const fre: FreOrderParams = {
|
const fre: FreOrderParams = {
|
||||||
exchangeContract: fixedRateAddress,
|
exchangeContract: addresses.FixedPrice,
|
||||||
exchangeId,
|
exchangeId,
|
||||||
maxBaseTokenAmount: '1',
|
maxBaseTokenAmount: '1',
|
||||||
baseTokenAddress: contracts.daiAddress,
|
baseTokenAddress: addresses.MockDAI,
|
||||||
baseTokenDecimals: 18,
|
baseTokenDecimals: 18,
|
||||||
swapMarketFee: '0.1',
|
swapMarketFee: '0.1',
|
||||||
marketFeeAddress: ZERO_ADDRESS
|
marketFeeAddress: ZERO_ADDRESS
|
||||||
}
|
}
|
||||||
|
|
||||||
const buyTx = await datatoken.buyFromFreAndOrder(datatokenAddress, user1, order, fre)
|
const buyTx = await datatoken.buyFromFreAndOrder(datatokenAddress, order, fre)
|
||||||
assert(buyTx !== null)
|
assert(buyTx)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#cleanPermissions - should FAIL to clean permissions at Datatoken level, if NOT NFT Owner', async () => {
|
it('#cleanPermissions - should FAIL to clean permissions at Datatoken level, if NOT NFT Owner', async () => {
|
||||||
assert((await datatoken.getPermissions(datatokenAddress, nftOwner)).minter === true)
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await nftOwner.getAddress()))
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
|
.minter === true
|
||||||
|
)
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user1)).paymentManager === true
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
|
(await user3.getAddress())
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await user1.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
)
|
)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await datatoken.cleanPermissions(datatokenAddress, user2)
|
await datatoken.cleanPermissions(datatokenAddress, await user2.getAddress())
|
||||||
assert(false)
|
assert(false)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert(e.message === 'Caller is NOT Nft Owner')
|
assert(e.message === 'Caller is NOT Nft Owner')
|
||||||
}
|
}
|
||||||
|
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
|
assert(
|
||||||
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
assert((await datatoken.getPermissions(datatokenAddress, nftOwner)).minter === true)
|
(await user3.getAddress())
|
||||||
|
)
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user1)).paymentManager === true
|
(await datatoken.getPermissions(datatokenAddress, await nftOwner.getAddress()))
|
||||||
|
.minter === true
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await user1.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#cleanPermissions - should clean permissions at Datatoken level', async () => {
|
it('#cleanPermissions - should clean permissions at Datatoken level', async () => {
|
||||||
assert((await datatoken.getPermissions(datatokenAddress, nftOwner)).minter === true)
|
|
||||||
|
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
|
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user1)).paymentManager === true
|
(await datatoken.getPermissions(datatokenAddress, await nftOwner.getAddress()))
|
||||||
|
.minter === true
|
||||||
)
|
)
|
||||||
|
|
||||||
await datatoken.cleanPermissions(datatokenAddress, nftOwner)
|
assert(
|
||||||
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
assert((await datatoken.getPaymentCollector(datatokenAddress)) === nftOwner)
|
(await user3.getAddress())
|
||||||
|
)
|
||||||
assert((await datatoken.getPermissions(datatokenAddress, nftOwner)).minter === false)
|
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
(await datatoken.getPermissions(datatokenAddress, user1)).paymentManager === false
|
(await datatoken.getPermissions(datatokenAddress, await user1.getAddress()))
|
||||||
|
.paymentManager === true
|
||||||
|
)
|
||||||
|
|
||||||
|
datatoken = new Datatoken(nftOwner, 8996)
|
||||||
|
await datatoken.cleanPermissions(datatokenAddress, await nftOwner.getAddress())
|
||||||
|
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPaymentCollector(datatokenAddress)) ===
|
||||||
|
(await nftOwner.getAddress())
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await nftOwner.getAddress()))
|
||||||
|
.minter === false
|
||||||
|
)
|
||||||
|
|
||||||
|
assert(
|
||||||
|
(await datatoken.getPermissions(datatokenAddress, await user1.getAddress()))
|
||||||
|
.paymentManager === false
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -681,9 +828,14 @@ describe('Datatoken', () => {
|
|||||||
it('#setData - should set a value into 725Y standard, if Caller has ERC20Deployer permission', async () => {
|
it('#setData - should set a value into 725Y standard, if Caller has ERC20Deployer permission', async () => {
|
||||||
const data = 'SomeData'
|
const data = 'SomeData'
|
||||||
|
|
||||||
assert((await nftDatatoken.isDatatokenDeployer(nftAddress, nftOwner)) === true)
|
assert(
|
||||||
|
(await nftDatatoken.isDatatokenDeployer(
|
||||||
|
nftAddress,
|
||||||
|
await nftOwner.getAddress()
|
||||||
|
)) === true
|
||||||
|
)
|
||||||
|
|
||||||
await datatoken.setData(datatokenAddress, nftOwner, data)
|
await datatoken.setData(datatokenAddress, await nftOwner.getAddress(), data)
|
||||||
|
|
||||||
assert((await nftDatatoken.getData(nftAddress, datatokenAddress)) === data)
|
assert((await nftDatatoken.getData(nftAddress, datatokenAddress)) === data)
|
||||||
})
|
})
|
||||||
@ -691,10 +843,13 @@ describe('Datatoken', () => {
|
|||||||
it('#setData - should FAIL to set a value into 725Y standard, if Caller has NOT ERC20Deployer permission', async () => {
|
it('#setData - should FAIL to set a value into 725Y standard, if Caller has NOT ERC20Deployer permission', async () => {
|
||||||
const data = 'NewData'
|
const data = 'NewData'
|
||||||
const OldData = 'SomeData'
|
const OldData = 'SomeData'
|
||||||
assert((await nftDatatoken.isDatatokenDeployer(nftAddress, user1)) === false)
|
assert(
|
||||||
|
(await nftDatatoken.isDatatokenDeployer(nftAddress, await user3.getAddress())) ===
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await datatoken.setData(datatokenAddress, user1, data)
|
await datatoken.setData(datatokenAddress, await user3.getAddress(), data)
|
||||||
assert(false)
|
assert(false)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
assert(e.message === 'User is not Datatoken Deployer')
|
assert(e.message === 'User is not Datatoken Deployer')
|
||||||
@ -704,7 +859,7 @@ describe('Datatoken', () => {
|
|||||||
|
|
||||||
it('#getDecimals - should return the number of decimals of the datatoken', async () => {
|
it('#getDecimals - should return the number of decimals of the datatoken', async () => {
|
||||||
const decimals = await datatoken.getDecimals(datatokenAddress)
|
const decimals = await datatoken.getDecimals(datatokenAddress)
|
||||||
assert(decimals === '18')
|
assert(decimals === 18)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#getSymbol - should return the symbbol of the datatoken', async () => {
|
it('#getSymbol - should return the symbbol of the datatoken', async () => {
|
||||||
@ -718,13 +873,26 @@ describe('Datatoken', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('#transfer - we can transfer the datatoken', async () => {
|
it('#transfer - we can transfer the datatoken', async () => {
|
||||||
const balance1before = await datatoken.balance(datatokenAddress, user1)
|
datatoken = new Datatoken(user1, 8996)
|
||||||
const balance2before = await datatoken.balance(datatokenAddress, user2)
|
const balance1before = await datatoken.balance(
|
||||||
|
datatokenAddress,
|
||||||
|
await user1.getAddress()
|
||||||
|
)
|
||||||
|
const balance2before = await datatoken.balance(
|
||||||
|
datatokenAddress,
|
||||||
|
await user2.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
await datatoken.transfer(datatokenAddress, user2, '1', user1)
|
await datatoken.transfer(datatokenAddress, await user2.getAddress(), '1')
|
||||||
|
|
||||||
const balance1after = await datatoken.balance(datatokenAddress, user1)
|
const balance1after = await datatoken.balance(
|
||||||
const balance2after = await datatoken.balance(datatokenAddress, user2)
|
datatokenAddress,
|
||||||
|
await user1.getAddress()
|
||||||
|
)
|
||||||
|
const balance2after = await datatoken.balance(
|
||||||
|
datatokenAddress,
|
||||||
|
await user2.getAddress()
|
||||||
|
)
|
||||||
|
|
||||||
assert(+balance1after === +balance1before - 1)
|
assert(+balance1after === +balance1before - 1)
|
||||||
assert(+balance2after === +balance2before + 1)
|
assert(+balance2after === +balance2before + 1)
|
||||||
@ -733,63 +901,68 @@ describe('Datatoken', () => {
|
|||||||
it('#setPublishingMarketFee - User should not be able to set the Publishing Market Fee', async () => {
|
it('#setPublishingMarketFee - User should not be able to set the Publishing Market Fee', async () => {
|
||||||
const originalPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
const originalPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user1
|
await user1.getAddress()
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
await datatoken.setPublishingMarketFee(
|
await datatoken.setPublishingMarketFee(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user1,
|
await user1.getAddress(),
|
||||||
contracts.daiAddress,
|
addresses.MockDAI,
|
||||||
web3.utils.toWei('10'),
|
ethers.utils.parseUnits('10').toString(),
|
||||||
user1
|
await user1.getAddress()
|
||||||
)
|
)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('Message:', e.message)
|
|
||||||
assert(e.message === 'Caller is not the Publishing Market Fee Address')
|
assert(e.message === 'Caller is not the Publishing Market Fee Address')
|
||||||
}
|
}
|
||||||
const newPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
const newPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user3
|
await user3.getAddress()
|
||||||
)
|
)
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
newPublishingMarketFee.publishMarketFeeAddress ===
|
newPublishingMarketFee.publishMarketFeeAddress ===
|
||||||
originalPublishingMarketFee.publishMarketFeeAddress
|
originalPublishingMarketFee.publishMarketFeeAddress
|
||||||
)
|
)
|
||||||
assert(
|
|
||||||
newPublishingMarketFee.publishMarketFeeAmount ===
|
|
||||||
originalPublishingMarketFee.publishMarketFeeAmount
|
|
||||||
)
|
|
||||||
assert(
|
assert(
|
||||||
newPublishingMarketFee.publishMarketFeeToken ===
|
newPublishingMarketFee.publishMarketFeeToken ===
|
||||||
originalPublishingMarketFee.publishMarketFeeToken
|
originalPublishingMarketFee.publishMarketFeeToken
|
||||||
)
|
)
|
||||||
|
assert(
|
||||||
|
newPublishingMarketFee.publishMarketFeeAmount ===
|
||||||
|
originalPublishingMarketFee.publishMarketFeeAmount
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('#setPublishingMarketFee - Marketplace fee address should be able to set the Publishing Market Fee', async () => {
|
it('#setPublishingMarketFee - Marketplace fee address should be able to set the Publishing Market Fee', async () => {
|
||||||
|
datatoken = new Datatoken(user2, 8996)
|
||||||
|
|
||||||
const originalPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
const originalPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user2
|
await user2.getAddress()
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
await datatoken.setPublishingMarketFee(
|
await datatoken.setPublishingMarketFee(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user2,
|
await user2.getAddress(),
|
||||||
contracts.daiAddress,
|
addresses.MockDAI,
|
||||||
web3.utils.toWei('10'),
|
ethers.utils.parseUnits('10').toString(),
|
||||||
user2
|
await user2.getAddress()
|
||||||
)
|
)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('Error:', e)
|
console.log('Error:', e)
|
||||||
}
|
}
|
||||||
const newPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
const newPublishingMarketFee = await datatoken.getPublishingMarketFee(
|
||||||
datatokenAddress,
|
datatokenAddress,
|
||||||
user2
|
await user2.getAddress()
|
||||||
)
|
)
|
||||||
|
|
||||||
assert(newPublishingMarketFee !== originalPublishingMarketFee)
|
assert(newPublishingMarketFee !== originalPublishingMarketFee)
|
||||||
assert(newPublishingMarketFee.publishMarketFeeAddress === user2)
|
assert(newPublishingMarketFee.publishMarketFeeAddress === (await user2.getAddress()))
|
||||||
assert(newPublishingMarketFee.publishMarketFeeAmount === web3.utils.toWei('10'))
|
|
||||||
assert(newPublishingMarketFee.publishMarketFeeToken === contracts.daiAddress)
|
assert(
|
||||||
|
newPublishingMarketFee.publishMarketFeeAmount ===
|
||||||
|
ethers.utils.parseUnits('10').toString()
|
||||||
|
)
|
||||||
|
assert(newPublishingMarketFee.publishMarketFeeToken === addresses.MockDAI)
|
||||||
})
|
})
|
||||||
*/
|
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user