mirror of
https://github.com/oceanprotocol/ocean-subgraph.git
synced 2024-12-02 05:57:29 +01:00
update tests for new ocean.js 2.0 (#526)
* update tests for new ocean.js 2.0 * add tx&block to veDeposit * add veOcean tests * bump to oceanlib 2.0.0
This commit is contained in:
parent
2c5459402e
commit
0900c1fe88
18
package-lock.json
generated
18
package-lock.json
generated
@ -10,7 +10,7 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oceanprotocol/contracts": "^1.1.3",
|
"@oceanprotocol/contracts": "^1.1.3",
|
||||||
"@oceanprotocol/lib": "^1.1.8",
|
"@oceanprotocol/lib": "^2.0.0",
|
||||||
"cross-fetch": "^3.1.4"
|
"cross-fetch": "^3.1.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@ -865,11 +865,11 @@
|
|||||||
"integrity": "sha512-pn0rm4QKF8sVfDeJVlt18TV4Qj5oGgR/qQNO7O0GO2DQ3q8KHXRS15uRjmLTr5wW1kGcCHcTqEndXEEC7Elzkw=="
|
"integrity": "sha512-pn0rm4QKF8sVfDeJVlt18TV4Qj5oGgR/qQNO7O0GO2DQ3q8KHXRS15uRjmLTr5wW1kGcCHcTqEndXEEC7Elzkw=="
|
||||||
},
|
},
|
||||||
"node_modules/@oceanprotocol/lib": {
|
"node_modules/@oceanprotocol/lib": {
|
||||||
"version": "1.1.8",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@oceanprotocol/lib/-/lib-1.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/@oceanprotocol/lib/-/lib-2.0.0.tgz",
|
||||||
"integrity": "sha512-PT4Z7jhrOkNFnz7tROJCyQicA3pCj9HqKOtXEXHyttDvYIQxwhq5yrB8lC272463rptxWOI4yBTUYK4lVP3/Pg==",
|
"integrity": "sha512-8MpMAkUG4LbalyN4UCcR+kZmo+Nmk/l22aTG3vQKjUfrF7mq3hvW5ThVlYll/sNarVTI/S086NvuxGX/ypcJuw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oceanprotocol/contracts": "^1.0.0",
|
"@oceanprotocol/contracts": "^1.1.3",
|
||||||
"bignumber.js": "^9.0.2",
|
"bignumber.js": "^9.0.2",
|
||||||
"cross-fetch": "^3.1.5",
|
"cross-fetch": "^3.1.5",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.1.1",
|
||||||
@ -15279,11 +15279,11 @@
|
|||||||
"integrity": "sha512-pn0rm4QKF8sVfDeJVlt18TV4Qj5oGgR/qQNO7O0GO2DQ3q8KHXRS15uRjmLTr5wW1kGcCHcTqEndXEEC7Elzkw=="
|
"integrity": "sha512-pn0rm4QKF8sVfDeJVlt18TV4Qj5oGgR/qQNO7O0GO2DQ3q8KHXRS15uRjmLTr5wW1kGcCHcTqEndXEEC7Elzkw=="
|
||||||
},
|
},
|
||||||
"@oceanprotocol/lib": {
|
"@oceanprotocol/lib": {
|
||||||
"version": "1.1.8",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@oceanprotocol/lib/-/lib-1.1.8.tgz",
|
"resolved": "https://registry.npmjs.org/@oceanprotocol/lib/-/lib-2.0.0.tgz",
|
||||||
"integrity": "sha512-PT4Z7jhrOkNFnz7tROJCyQicA3pCj9HqKOtXEXHyttDvYIQxwhq5yrB8lC272463rptxWOI4yBTUYK4lVP3/Pg==",
|
"integrity": "sha512-8MpMAkUG4LbalyN4UCcR+kZmo+Nmk/l22aTG3vQKjUfrF7mq3hvW5ThVlYll/sNarVTI/S086NvuxGX/ypcJuw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@oceanprotocol/contracts": "^1.0.0",
|
"@oceanprotocol/contracts": "^1.1.3",
|
||||||
"bignumber.js": "^9.0.2",
|
"bignumber.js": "^9.0.2",
|
||||||
"cross-fetch": "^3.1.5",
|
"cross-fetch": "^3.1.5",
|
||||||
"crypto-js": "^4.1.1",
|
"crypto-js": "^4.1.1",
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
"test-dispenser": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/Dispenser.test.ts'",
|
"test-dispenser": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/Dispenser.test.ts'",
|
||||||
"test-fixed": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/FixedRateExchange.test.ts'",
|
"test-fixed": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/FixedRateExchange.test.ts'",
|
||||||
"test-users": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/users.test.ts'",
|
"test-users": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/users.test.ts'",
|
||||||
|
"test-ve": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/VeOcean.test.ts'",
|
||||||
"lint": "eslint --ignore-path .gitignore --ext .js --ext .ts --ext .tsx .",
|
"lint": "eslint --ignore-path .gitignore --ext .js --ext .ts --ext .tsx .",
|
||||||
"lint:fix": "eslint --ignore-path .gitignore --ext .js,.ts,.tsx . --fix",
|
"lint:fix": "eslint --ignore-path .gitignore --ext .js,.ts,.tsx . --fix",
|
||||||
"format": "prettier --ignore-path .gitignore './**/*.{css,yml,js,ts,tsx,json,yaml}' --write",
|
"format": "prettier --ignore-path .gitignore './**/*.{css,yml,js,ts,tsx,json,yaml}' --write",
|
||||||
@ -65,7 +66,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oceanprotocol/contracts": "^1.1.3",
|
"@oceanprotocol/contracts": "^1.1.3",
|
||||||
"@oceanprotocol/lib": "^1.1.8",
|
"@oceanprotocol/lib": "^2.0.0",
|
||||||
"cross-fetch": "^3.1.4"
|
"cross-fetch": "^3.1.4"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -461,4 +461,6 @@ type VeDeposit @entity {
|
|||||||
unlockTime: BigInt!
|
unlockTime: BigInt!
|
||||||
type:BigInt!
|
type:BigInt!
|
||||||
timestamp: BigInt!
|
timestamp: BigInt!
|
||||||
|
block: Int!
|
||||||
|
tx: String!
|
||||||
}
|
}
|
@ -141,6 +141,8 @@ export function getDeposit(id: string): VeDeposit {
|
|||||||
deposit.unlockTime = BigInt.zero()
|
deposit.unlockTime = BigInt.zero()
|
||||||
deposit.type = BigInt.zero()
|
deposit.type = BigInt.zero()
|
||||||
deposit.timestamp = BigInt.zero()
|
deposit.timestamp = BigInt.zero()
|
||||||
|
deposit.tx = ''
|
||||||
|
deposit.block = 0
|
||||||
deposit.save()
|
deposit.save()
|
||||||
}
|
}
|
||||||
return deposit
|
return deposit
|
||||||
|
@ -16,6 +16,8 @@ export function handleDeposit(event: Deposit): void {
|
|||||||
deposit.unlockTime = locktime
|
deposit.unlockTime = locktime
|
||||||
deposit.type = type
|
deposit.type = type
|
||||||
deposit.timestamp = ts
|
deposit.timestamp = ts
|
||||||
|
deposit.block = event.block.number.toI32()
|
||||||
|
deposit.tx = event.transaction.hash.toHex()
|
||||||
deposit.save()
|
deposit.save()
|
||||||
// --------------------------------------------
|
// --------------------------------------------
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
ProviderInstance,
|
ProviderInstance,
|
||||||
Nft,
|
Nft,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
@ -117,7 +117,7 @@ describe('Datatoken tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex,
|
templateIndex,
|
||||||
cap,
|
cap,
|
||||||
feeAmount: publishMarketFeeAmount,
|
feeAmount: publishMarketFeeAmount,
|
||||||
@ -126,7 +126,7 @@ describe('Datatoken tests', async () => {
|
|||||||
minter: publisher,
|
minter: publisher,
|
||||||
mpFeeAddress: marketPlaceFeeAddress
|
mpFeeAddress: marketPlaceFeeAddress
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
@ -343,7 +343,7 @@ describe('Datatoken tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex,
|
templateIndex,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -352,7 +352,7 @@ describe('Datatoken tests', async () => {
|
|||||||
minter: publisher,
|
minter: publisher,
|
||||||
mpFeeAddress: ZERO_ADDRESS
|
mpFeeAddress: ZERO_ADDRESS
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
NftCreateData,
|
NftCreateData,
|
||||||
sleep,
|
sleep,
|
||||||
@ -70,15 +70,16 @@ describe('Dispenser tests', async () => {
|
|||||||
|
|
||||||
it('should initialize Dispenser and datatoken class', async () => {
|
it('should initialize Dispenser and datatoken class', async () => {
|
||||||
dispenser = new Dispenser(
|
dispenser = new Dispenser(
|
||||||
|
addresses.Dispenser,
|
||||||
web3,
|
web3,
|
||||||
8996,
|
8996,
|
||||||
addresses.Dispenser,
|
null,
|
||||||
DispenserTemplate.abi as AbiItem[]
|
DispenserTemplate.abi as AbiItem[]
|
||||||
)
|
)
|
||||||
assert(dispenser.dispenserAbi !== null)
|
assert(dispenser.getDefaultAbi() !== null)
|
||||||
|
|
||||||
datatoken = new Datatoken(web3, 8996, ERC20Template.abi as AbiItem[])
|
datatoken = new Datatoken(web3, 8996, null, ERC20Template.abi as AbiItem[])
|
||||||
assert(datatoken.datatokensAbi !== null)
|
assert(datatoken.getDefaultAbi() !== null)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Deploying an NFT with ERC20', async () => {
|
it('Deploying an NFT with ERC20', async () => {
|
||||||
@ -94,7 +95,7 @@ describe('Dispenser tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex,
|
templateIndex,
|
||||||
cap,
|
cap,
|
||||||
feeAmount,
|
feeAmount,
|
||||||
@ -104,7 +105,7 @@ describe('Dispenser tests', async () => {
|
|||||||
mpFeeAddress: marketPlaceFeeAddress
|
mpFeeAddress: marketPlaceFeeAddress
|
||||||
}
|
}
|
||||||
|
|
||||||
const tx = await Factory.createNftWithErc20(
|
const tx = await Factory.createNftWithDatatoken(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
@ -263,7 +264,7 @@ describe('Dispenser tests', async () => {
|
|||||||
it('Make user1 minter', async () => {
|
it('Make user1 minter', async () => {
|
||||||
await datatoken.addMinter(dtAddress, publisher, user1)
|
await datatoken.addMinter(dtAddress, publisher, user1)
|
||||||
|
|
||||||
assert((await datatoken.getDTPermissions(dtAddress, user1)).minter === true)
|
assert((await datatoken.getPermissions(dtAddress, user1)).minter === true)
|
||||||
await sleep(sleepMs)
|
await sleep(sleepMs)
|
||||||
const minterQuery = {
|
const minterQuery = {
|
||||||
query: `query {token(id: "${dtAddress}"){minter{id}}}`
|
query: `query {token(id: "${dtAddress}"){minter{id}}}`
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
NftCreateData,
|
NftCreateData,
|
||||||
sleep,
|
sleep,
|
||||||
@ -89,7 +89,7 @@ describe('Fixed Rate Exchange tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex,
|
templateIndex,
|
||||||
cap,
|
cap,
|
||||||
feeAmount,
|
feeAmount,
|
||||||
@ -111,7 +111,7 @@ describe('Fixed Rate Exchange tests', async () => {
|
|||||||
withMint: false
|
withMint: false
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await Factory.createNftErc20WithFixedRate(
|
const result = await Factory.createNftWithDatatokenWithFixedRate(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params,
|
erc20Params,
|
||||||
@ -392,7 +392,7 @@ describe('Fixed Rate Exchange tests', async () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('Updates Fixed Rate Price', async () => {
|
it('Updates Fixed Rate Price', async () => {
|
||||||
fixedRate = new FixedRateExchange(web3, fixedRateAddress, 8996)
|
fixedRate = new FixedRateExchange(fixedRateAddress, web3, 8996)
|
||||||
const priceQuery = {
|
const priceQuery = {
|
||||||
query: `query {fixedRateExchange(id: "${fixedRateId}"){
|
query: `query {fixedRateExchange(id: "${fixedRateId}"){
|
||||||
price
|
price
|
||||||
@ -627,8 +627,9 @@ describe('Fixed Rate Exchange tests', async () => {
|
|||||||
let user1Balance = await datatoken.balance(datatokenAddress, user1)
|
let user1Balance = await datatoken.balance(datatokenAddress, user1)
|
||||||
assert(user1Balance === '0', 'incorrect value for: user1Balance')
|
assert(user1Balance === '0', 'incorrect value for: user1Balance')
|
||||||
|
|
||||||
const tx = (await fixedRate.buyDT(user1, exchangeId, dtAmount, '100'))
|
const tx = (
|
||||||
.events?.Swapped
|
await fixedRate.buyDatatokens(user1, exchangeId, dtAmount, '100')
|
||||||
|
).events?.Swapped
|
||||||
await sleep(sleepMs)
|
await sleep(sleepMs)
|
||||||
user1Balance = await datatoken.balance(datatokenAddress, user1)
|
user1Balance = await datatoken.balance(datatokenAddress, user1)
|
||||||
// user1 has 1 datatoken
|
// user1 has 1 datatoken
|
||||||
@ -656,8 +657,8 @@ describe('Fixed Rate Exchange tests', async () => {
|
|||||||
})
|
})
|
||||||
it('User1 sells a datatoken', async () => {
|
it('User1 sells a datatoken', async () => {
|
||||||
await datatoken.approve(datatokenAddress, fixedRateAddress, dtAmount, user1)
|
await datatoken.approve(datatokenAddress, fixedRateAddress, dtAmount, user1)
|
||||||
const tx = (await fixedRate.sellDT(user1, exchangeId, '10', '9')).events
|
const tx = (await fixedRate.sellDatatokens(user1, exchangeId, '10', '9'))
|
||||||
?.Swapped
|
.events?.Swapped
|
||||||
assert(tx != null)
|
assert(tx != null)
|
||||||
await sleep(sleepMs)
|
await sleep(sleepMs)
|
||||||
const swapsQuery = {
|
const swapsQuery = {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
ProviderInstance,
|
ProviderInstance,
|
||||||
Nft,
|
Nft,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
@ -103,7 +103,7 @@ describe('NFT tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex: 1,
|
templateIndex: 1,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -112,7 +112,7 @@ describe('NFT tests', async () => {
|
|||||||
minter: publisher,
|
minter: publisher,
|
||||||
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
Datatoken,
|
Datatoken,
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
ProviderInstance,
|
ProviderInstance,
|
||||||
ProviderFees,
|
ProviderFees,
|
||||||
Nft,
|
Nft,
|
||||||
@ -105,7 +105,7 @@ describe('Simple Publish & consume test', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisherAccount
|
owner: publisherAccount
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex: 1,
|
templateIndex: 1,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -114,7 +114,7 @@ describe('Simple Publish & consume test', async () => {
|
|||||||
minter: publisherAccount,
|
minter: publisherAccount,
|
||||||
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisherAccount,
|
publisherAccount,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
@ -170,7 +170,7 @@ describe('Simple Publish & consume test', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisherAccount
|
owner: publisherAccount
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex: 1,
|
templateIndex: 1,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -179,7 +179,7 @@ describe('Simple Publish & consume test', async () => {
|
|||||||
minter: publisherAccount,
|
minter: publisherAccount,
|
||||||
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisherAccount,
|
publisherAccount,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
Nft,
|
Nft,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
NftCreateData,
|
NftCreateData,
|
||||||
@ -49,7 +49,7 @@ describe('Tests coverage without provider/aquarius', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisherAccount
|
owner: publisherAccount
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex: 1,
|
templateIndex: 1,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -58,7 +58,7 @@ describe('Tests coverage without provider/aquarius', async () => {
|
|||||||
minter: publisherAccount,
|
minter: publisherAccount,
|
||||||
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisherAccount,
|
publisherAccount,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
@ -89,7 +89,7 @@ describe('Tests coverage without provider/aquarius', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisherAccount
|
owner: publisherAccount
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex: 1,
|
templateIndex: 1,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -98,7 +98,7 @@ describe('Tests coverage without provider/aquarius', async () => {
|
|||||||
minter: publisherAccount,
|
minter: publisherAccount,
|
||||||
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
mpFeeAddress: '0x0000000000000000000000000000000000000000'
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisherAccount,
|
publisherAccount,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
|
362
test/integration/VeOcean.test.ts
Normal file
362
test/integration/VeOcean.test.ts
Normal file
@ -0,0 +1,362 @@
|
|||||||
|
import {
|
||||||
|
VeOcean,
|
||||||
|
VeAllocate,
|
||||||
|
NftFactory,
|
||||||
|
calculateEstimatedGas,
|
||||||
|
sendTx,
|
||||||
|
approve,
|
||||||
|
ConfigHelper,
|
||||||
|
sleep
|
||||||
|
} from '@oceanprotocol/lib'
|
||||||
|
import { AbiItem } from 'web3-utils'
|
||||||
|
import { assert } from 'chai'
|
||||||
|
import Web3 from 'web3'
|
||||||
|
import { homedir } from 'os'
|
||||||
|
import fs from 'fs'
|
||||||
|
import { fetch } from 'cross-fetch'
|
||||||
|
|
||||||
|
const data = JSON.parse(
|
||||||
|
fs.readFileSync(
|
||||||
|
process.env.ADDRESS_FILE ||
|
||||||
|
`${homedir}/.ocean/ocean-contracts/artifacts/address.json`,
|
||||||
|
'utf8'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
const addresses = data.development
|
||||||
|
const web3 = new Web3('http://127.0.0.1:8545')
|
||||||
|
|
||||||
|
const subgraphUrl =
|
||||||
|
'http://127.0.0.1:9000/subgraphs/name/oceanprotocol/ocean-subgraph'
|
||||||
|
|
||||||
|
describe('veOcean tests', async () => {
|
||||||
|
let nftFactory
|
||||||
|
let veOcean: VeOcean
|
||||||
|
let veAllocate: VeAllocate
|
||||||
|
let ownerAccount: string
|
||||||
|
let Alice: string
|
||||||
|
let Bob: string
|
||||||
|
let nft1, nft2, nft3
|
||||||
|
let chainId
|
||||||
|
const configHelper = new ConfigHelper()
|
||||||
|
const config = configHelper.getConfig('development')
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
const accounts = await web3.eth.getAccounts()
|
||||||
|
chainId = await web3.eth.getChainId()
|
||||||
|
ownerAccount = accounts[0]
|
||||||
|
Alice = accounts[1]
|
||||||
|
Bob = accounts[2]
|
||||||
|
const minAbi = [
|
||||||
|
{
|
||||||
|
constant: false,
|
||||||
|
inputs: [
|
||||||
|
{ name: 'to', type: 'address' },
|
||||||
|
{ name: 'value', type: 'uint256' }
|
||||||
|
],
|
||||||
|
name: 'mint',
|
||||||
|
outputs: [{ name: '', type: 'bool' }],
|
||||||
|
payable: false,
|
||||||
|
stateMutability: 'nonpayable',
|
||||||
|
type: 'function'
|
||||||
|
}
|
||||||
|
] as AbiItem[]
|
||||||
|
const tokenContract = new web3.eth.Contract(minAbi, addresses.Ocean)
|
||||||
|
const estGas = await calculateEstimatedGas(
|
||||||
|
ownerAccount,
|
||||||
|
tokenContract.methods.mint,
|
||||||
|
Alice,
|
||||||
|
web3.utils.toWei('1000')
|
||||||
|
)
|
||||||
|
await sendTx(
|
||||||
|
ownerAccount,
|
||||||
|
estGas,
|
||||||
|
web3,
|
||||||
|
1,
|
||||||
|
tokenContract.methods.mint,
|
||||||
|
Alice,
|
||||||
|
web3.utils.toWei('1000')
|
||||||
|
)
|
||||||
|
await sendTx(
|
||||||
|
ownerAccount,
|
||||||
|
estGas,
|
||||||
|
web3,
|
||||||
|
1,
|
||||||
|
tokenContract.methods.mint,
|
||||||
|
Bob,
|
||||||
|
web3.utils.toWei('1000')
|
||||||
|
)
|
||||||
|
veOcean = new VeOcean(addresses.veOCEAN, web3)
|
||||||
|
veAllocate = new VeAllocate(addresses.veAllocate, web3)
|
||||||
|
nftFactory = new NftFactory(addresses.ERC721Factory, web3)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Alice should lock 100 Ocean', async () => {
|
||||||
|
// since we can only lock once, we test if tx fails or not
|
||||||
|
// so if there is already a lock, skip it
|
||||||
|
let currentBalance = await veOcean.getLockedAmount(Alice)
|
||||||
|
let currentLock = await veOcean.lockEnd(Alice)
|
||||||
|
const amount = '100'
|
||||||
|
await approve(
|
||||||
|
web3,
|
||||||
|
config,
|
||||||
|
Alice,
|
||||||
|
addresses.Ocean,
|
||||||
|
addresses.veOCEAN,
|
||||||
|
amount
|
||||||
|
)
|
||||||
|
const timestamp = Math.floor(Date.now() / 1000)
|
||||||
|
const unlockTime = timestamp + 7 * 86400
|
||||||
|
|
||||||
|
if (parseInt(currentBalance) > 0 || currentLock > 0) {
|
||||||
|
// we already have some locked tokens, so our transaction should fail
|
||||||
|
try {
|
||||||
|
await veOcean.lockTokens(Alice, amount, unlockTime)
|
||||||
|
assert(false, 'This should fail!')
|
||||||
|
} catch (e) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await veOcean.lockTokens(Alice, amount, unlockTime)
|
||||||
|
}
|
||||||
|
currentBalance = await veOcean.getLockedAmount(Alice)
|
||||||
|
currentLock = await veOcean.lockEnd(Alice)
|
||||||
|
await sleep(2000)
|
||||||
|
const initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veOCEANs(id:"${Alice.toLowerCase()}"){
|
||||||
|
id,
|
||||||
|
lockedAmount,
|
||||||
|
unlockTime
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
const initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
const info = (await initialResponse.json()).data.veOCEANs
|
||||||
|
assert(info[0].id === Alice.toLowerCase())
|
||||||
|
assert(info[0].lockedAmount === currentBalance)
|
||||||
|
assert(info[0].unlockTime === currentLock)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Alice should increase the lock time', async () => {
|
||||||
|
const currentLock = await veOcean.lockEnd(Alice)
|
||||||
|
const newLock = parseInt(String(currentLock)) + 7 * 86400
|
||||||
|
await veOcean.increaseUnlockTime(Alice, newLock)
|
||||||
|
const newCurrentLock = await veOcean.lockEnd(Alice)
|
||||||
|
await sleep(2000)
|
||||||
|
const initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veOCEANs(id:"${Alice.toLowerCase()}"){
|
||||||
|
id,
|
||||||
|
lockedAmount,
|
||||||
|
unlockTime
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
const initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
const info = (await initialResponse.json()).data.veOCEANs
|
||||||
|
assert(
|
||||||
|
info[0].unlockTime === newCurrentLock,
|
||||||
|
'Expected lock ' +
|
||||||
|
newCurrentLock +
|
||||||
|
' to equal subgraph value ' +
|
||||||
|
info[0].unlockTime
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Alice should increase the locked amount', async () => {
|
||||||
|
const amount = '200'
|
||||||
|
await approve(
|
||||||
|
web3,
|
||||||
|
config,
|
||||||
|
Alice,
|
||||||
|
addresses.Ocean,
|
||||||
|
addresses.veOCEAN,
|
||||||
|
amount
|
||||||
|
)
|
||||||
|
await veOcean.increaseAmount(Alice, amount)
|
||||||
|
const newCurrentBalance = await veOcean.getLockedAmount(Alice)
|
||||||
|
const newCurrentLock = await veOcean.lockEnd(Alice)
|
||||||
|
await sleep(2000)
|
||||||
|
const initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veOCEANs(id:"${Alice.toLowerCase()}"){
|
||||||
|
id,
|
||||||
|
lockedAmount,
|
||||||
|
unlockTime
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
const initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
const info = (await initialResponse.json()).data.veOCEANs
|
||||||
|
assert(
|
||||||
|
info[0].unlockTime === newCurrentLock,
|
||||||
|
'Expected lock ' +
|
||||||
|
newCurrentLock +
|
||||||
|
' to equal subgraph value ' +
|
||||||
|
info[0].unlockTime
|
||||||
|
)
|
||||||
|
assert(
|
||||||
|
info[0].lockedAmount === newCurrentBalance,
|
||||||
|
'Expected balance ' +
|
||||||
|
newCurrentBalance +
|
||||||
|
' to equal subgraph value ' +
|
||||||
|
info[0].lockedAmount
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Alice should publish 3 NFTs', async () => {
|
||||||
|
// publish 3 nfts
|
||||||
|
nft1 = await nftFactory.createNFT(Alice, {
|
||||||
|
name: 'testNft1',
|
||||||
|
symbol: 'TSTF1',
|
||||||
|
templateIndex: 1,
|
||||||
|
tokenURI: '',
|
||||||
|
transferable: true,
|
||||||
|
owner: Alice
|
||||||
|
})
|
||||||
|
nft2 = await nftFactory.createNFT(Alice, {
|
||||||
|
name: 'testNft2',
|
||||||
|
symbol: 'TSTF2',
|
||||||
|
templateIndex: 1,
|
||||||
|
tokenURI: '',
|
||||||
|
transferable: true,
|
||||||
|
owner: Alice
|
||||||
|
})
|
||||||
|
nft3 = await nftFactory.createNFT(Alice, {
|
||||||
|
name: 'testNft3',
|
||||||
|
symbol: 'TSTF3',
|
||||||
|
templateIndex: 1,
|
||||||
|
tokenURI: '',
|
||||||
|
transferable: true,
|
||||||
|
owner: Alice
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Alice should allocate 10% to NFT1', async () => {
|
||||||
|
await veAllocate.setAllocation(Alice, '1000', nft1, chainId)
|
||||||
|
const newTotalAllocation = await veAllocate.getTotalAllocation(Alice)
|
||||||
|
await sleep(2000)
|
||||||
|
let initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veAllocateUsers(id:"${Alice.toLowerCase()}"){
|
||||||
|
id,
|
||||||
|
allocatedTotal
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
let initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
let info = (await initialResponse.json()).data.veAllocateUsers
|
||||||
|
assert(
|
||||||
|
info[0].allocatedTotal === newTotalAllocation,
|
||||||
|
'Expected totalAllocation ' +
|
||||||
|
newTotalAllocation +
|
||||||
|
' to equal subgraph value ' +
|
||||||
|
info[0].allocatedTotal
|
||||||
|
)
|
||||||
|
initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veAllocations(
|
||||||
|
where: {allocationUser:"${Alice.toLowerCase()}", chainId:"${chainId}", nftAddress:"${nft1.toLowerCase()}"}
|
||||||
|
){
|
||||||
|
id,
|
||||||
|
allocated
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
info = (await initialResponse.json()).data.veAllocations
|
||||||
|
assert(
|
||||||
|
info[0].allocated === '1000',
|
||||||
|
'Expected totalAllocation 1000 to equal subgraph value ' +
|
||||||
|
info[0].allocatedTotal
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Alice should allocate 10% to NFT2 and 20% to NFT3', async () => {
|
||||||
|
await veAllocate.setBatchAllocation(
|
||||||
|
Alice,
|
||||||
|
['1000', '2000'],
|
||||||
|
[nft2, nft3],
|
||||||
|
[chainId, chainId]
|
||||||
|
)
|
||||||
|
const totalAllocation = await veAllocate.getTotalAllocation(Alice)
|
||||||
|
|
||||||
|
await sleep(2000)
|
||||||
|
let initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veAllocateUsers(id:"${Alice.toLowerCase()}"){
|
||||||
|
id,
|
||||||
|
allocatedTotal
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
let initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
let info = (await initialResponse.json()).data.veAllocateUsers
|
||||||
|
assert(
|
||||||
|
info[0].allocatedTotal === totalAllocation,
|
||||||
|
'Expected totalAllocation ' +
|
||||||
|
totalAllocation +
|
||||||
|
' to equal subgraph value ' +
|
||||||
|
info[0].allocatedTotal
|
||||||
|
)
|
||||||
|
initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veAllocations(
|
||||||
|
where: {allocationUser:"${Alice.toLowerCase()}", chainId:"${chainId}", nftAddress:"${nft2.toLowerCase()}"}
|
||||||
|
){
|
||||||
|
id,
|
||||||
|
allocated
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
info = (await initialResponse.json()).data.veAllocations
|
||||||
|
assert(
|
||||||
|
info[0].allocated === '1000',
|
||||||
|
'Expected totalAllocation 1000 to equal subgraph value ' +
|
||||||
|
info[0].allocatedTotal
|
||||||
|
)
|
||||||
|
initialQuery = {
|
||||||
|
query: `query {
|
||||||
|
veAllocations(
|
||||||
|
where: {allocationUser:"${Alice.toLowerCase()}", chainId:"${chainId}", nftAddress:"${nft3.toLowerCase()}"}
|
||||||
|
){
|
||||||
|
id,
|
||||||
|
allocated
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
}
|
||||||
|
initialResponse = await fetch(subgraphUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(initialQuery)
|
||||||
|
})
|
||||||
|
info = (await initialResponse.json()).data.veAllocations
|
||||||
|
assert(
|
||||||
|
info[0].allocated === '2000',
|
||||||
|
'Expected totalAllocation 1000 to equal subgraph value ' +
|
||||||
|
info[0].allocatedTotal
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
@ -1,5 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
Erc20CreateParams,
|
DatatokenCreateParams,
|
||||||
NftFactory,
|
NftFactory,
|
||||||
NftCreateData,
|
NftCreateData,
|
||||||
sleep,
|
sleep,
|
||||||
@ -104,7 +104,7 @@ describe('User tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex,
|
templateIndex,
|
||||||
cap,
|
cap,
|
||||||
feeAmount,
|
feeAmount,
|
||||||
@ -126,7 +126,7 @@ describe('User tests', async () => {
|
|||||||
withMint: false
|
withMint: false
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await Factory.createNftErc20WithFixedRate(
|
const result = await Factory.createNftWithDatatokenWithFixedRate(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params,
|
erc20Params,
|
||||||
@ -177,8 +177,8 @@ describe('User tests', async () => {
|
|||||||
let user1Balance = await datatoken.balance(datatokenAddress, user1)
|
let user1Balance = await datatoken.balance(datatokenAddress, user1)
|
||||||
assert(user1Balance === '0', 'incorrect value for: user1Balance')
|
assert(user1Balance === '0', 'incorrect value for: user1Balance')
|
||||||
|
|
||||||
fixedRate = new FixedRateExchange(web3, fixedRateAddress, 8996)
|
fixedRate = new FixedRateExchange(fixedRateAddress, web3, 8996)
|
||||||
await fixedRate.buyDT(user1, exchangeId, dtAmount, '100')
|
await fixedRate.buyDatatokens(user1, exchangeId, dtAmount, '100')
|
||||||
await sleep(sleepMs)
|
await sleep(sleepMs)
|
||||||
|
|
||||||
user1Balance = await datatoken.balance(datatokenAddress, user1)
|
user1Balance = await datatoken.balance(datatokenAddress, user1)
|
||||||
@ -199,8 +199,8 @@ describe('User tests', async () => {
|
|||||||
it('User1 sells a datatoken', async () => {
|
it('User1 sells a datatoken', async () => {
|
||||||
const initialUser = await userQuery(user1)
|
const initialUser = await userQuery(user1)
|
||||||
await datatoken.approve(datatokenAddress, fixedRateAddress, dtAmount, user1)
|
await datatoken.approve(datatokenAddress, fixedRateAddress, dtAmount, user1)
|
||||||
const tx = (await fixedRate.sellDT(user1, exchangeId, '10', '9')).events
|
const tx = (await fixedRate.sellDatatokens(user1, exchangeId, '10', '9'))
|
||||||
?.Swapped
|
.events?.Swapped
|
||||||
|
|
||||||
assert(tx != null)
|
assert(tx != null)
|
||||||
const user = await userQuery(user1)
|
const user = await userQuery(user1)
|
||||||
@ -227,7 +227,7 @@ describe('User tests', async () => {
|
|||||||
transferable: true,
|
transferable: true,
|
||||||
owner: publisher
|
owner: publisher
|
||||||
}
|
}
|
||||||
const erc20Params: Erc20CreateParams = {
|
const erc20Params: DatatokenCreateParams = {
|
||||||
templateIndex,
|
templateIndex,
|
||||||
cap: '100000',
|
cap: '100000',
|
||||||
feeAmount: '0',
|
feeAmount: '0',
|
||||||
@ -236,7 +236,7 @@ describe('User tests', async () => {
|
|||||||
minter: publisher,
|
minter: publisher,
|
||||||
mpFeeAddress: feeAddress
|
mpFeeAddress: feeAddress
|
||||||
}
|
}
|
||||||
const result = await Factory.createNftWithErc20(
|
const result = await Factory.createNftWithDatatoken(
|
||||||
publisher,
|
publisher,
|
||||||
nftParams,
|
nftParams,
|
||||||
erc20Params
|
erc20Params
|
||||||
|
Loading…
Reference in New Issue
Block a user