1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00

setPaymentCollector apply same checking as contract (#1396)

* setPaymentCollector apply same checking as contract

* unit test for setPaymentCollector for owner and erc20 deployer

* setPaymentCollector amend redundent truth check on boolean value

Co-authored-by: Soon Huat <soon_huat.phan@daimler.com>
This commit is contained in:
Soon Huat 2022-04-14 22:43:01 +08:00 committed by GitHub
parent 58ced6cb61
commit 628c2fc1fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 5 deletions

View File

@ -782,8 +782,15 @@ export class Datatoken {
new this.web3.eth.Contract(this.datatokensAbi, dtAddress), new this.web3.eth.Contract(this.datatokensAbi, dtAddress),
this.config this.config
) )
if ((await this.getDTPermissions(dtAddress, address)).paymentManager !== true) { const isPaymentManager = (await this.getDTPermissions(dtAddress, address))
throw new Error(`Caller is not Fee Manager`) .paymentManager
const nftAddress = !isPaymentManager && (await this.getNFTAddress(dtAddress))
const isNftOwner = nftAddress && (await this.nft.getNftOwner(nftAddress)) === address
const nftPermissions =
nftAddress && !isNftOwner && (await this.nft.getNftPermissions(nftAddress, address))
const isErc20Deployer = nftPermissions?.deployERC20
if (!isPaymentManager && !isNftOwner && !isErc20Deployer) {
throw new Error(`Caller is not Fee Manager, owner or erc20 Deployer`)
} }
const estGas = await this.estGasSetPaymentCollector( const estGas = await this.estGasSetPaymentCollector(

View File

@ -24,6 +24,7 @@ describe('Datatoken', () => {
let user1: string let user1: string
let user2: string let user2: string
let user3: string let user3: string
let erc20DeployerUser: string
let contracts: Addresses let contracts: Addresses
let nftDatatoken: Nft let nftDatatoken: Nft
let datatoken: Datatoken let datatoken: Datatoken
@ -42,6 +43,7 @@ describe('Datatoken', () => {
user1 = accounts[1] user1 = accounts[1]
user2 = accounts[2] user2 = accounts[2]
user3 = accounts[3] user3 = accounts[3]
erc20DeployerUser = accounts[4]
}) })
it('should deploy contracts', async () => { it('should deploy contracts', async () => {
@ -76,7 +78,7 @@ describe('Datatoken', () => {
}) })
it('#createERC20 - should create a new ERC20 DT from NFT contract', async () => { it('#createERC20 - should create a new ERC20 DT from NFT contract', async () => {
// await nftDatatoken.addERC20Deployer(nftAddress, nftOwner, nftOwner) await nftDatatoken.addErc20Deployer(nftAddress, nftOwner, erc20DeployerUser)
datatokenAddress = await nftDatatoken.createErc20( datatokenAddress = await nftDatatoken.createErc20(
nftAddress, nftAddress,
nftOwner, nftOwner,
@ -287,7 +289,7 @@ describe('Datatoken', () => {
) )
}) })
it('#setPaymentCollector - should fail to set a new paymentCollector, if NOT PAYMENT Manager', 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.getDTPermissions(datatokenAddress, user2)).paymentManager === false (await datatoken.getDTPermissions(datatokenAddress, user2)).paymentManager === false
) )
@ -295,7 +297,7 @@ describe('Datatoken', () => {
try { try {
await datatoken.setPaymentCollector(datatokenAddress, user1, user2) await datatoken.setPaymentCollector(datatokenAddress, user1, user2)
} catch (e) { } catch (e) {
assert(e.message === 'Caller is not Fee Manager') assert(e.message === 'Caller is not Fee Manager, owner or erc20 Deployer')
} }
}) })
@ -313,6 +315,25 @@ describe('Datatoken', () => {
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3) assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
}) })
it('#setPaymentCollector - should set a new paymentCollector, if NFT OWNER', async () => {
assert((await nftDatatoken.getNftOwner(nftAddress)) === nftOwner)
await datatoken.setPaymentCollector(datatokenAddress, nftOwner, user2)
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user2)
})
it('#setPaymentCollector - should set a new paymentCollector, if ERC 20 DEPLOYER', async () => {
assert(
(await nftDatatoken.getNftPermissions(nftAddress, erc20DeployerUser))
.deployERC20 === true
)
await datatoken.setPaymentCollector(datatokenAddress, erc20DeployerUser, user3)
assert((await datatoken.getPaymentCollector(datatokenAddress)) === user3)
})
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, user1)) === '10',