Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/contracts alpha 26 #1358

Merged
merged 8 commits into from
Mar 21, 2022
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"web3": "^1.7.1"
},
"dependencies": {
"@oceanprotocol/contracts": "1.0.0-alpha.22",
"@oceanprotocol/contracts": "1.0.0-alpha.26",
"bignumber.js": "^9.0.2",
"cross-fetch": "^3.1.5",
"crypto-js": "^4.1.1",
Expand Down
58 changes: 39 additions & 19 deletions src/pools/fixedRate/FixedRateExchange.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,17 +100,13 @@ export class FixedRateExchange {

/**
* Creates unique exchange identifier.
* @param {String} baseToken baseToken contract address
* @param {String} datatoken Datatoken contract address
* @param {String} owner Owner of the exchange
* @return {Promise<string>} exchangeId
*/
public async generateExchangeId(
baseToken: string,
datatoken: string,
owner: string
): Promise<string> {
public async generateExchangeId(baseToken: string, datatoken: string): Promise<string> {
const exchangeId = await this.contract.methods
.generateExchangeId(baseToken, datatoken, owner)
.generateExchangeId(baseToken, datatoken)
.call()
return exchangeId
}
Expand Down Expand Up @@ -816,20 +812,26 @@ export class FixedRateExchange {
* Estimate gas cost for collectBT
* @param {String} account
* @param {String} exchangeId ExchangeId
* @param {String} amount amount to be collected
* @param {Contract} contractInstance optional contract instance
* @return {Promise<number>}
*/
public async estCollectBT(
account: string,
exchangeId: string,
amount: string,
contractInstance?: Contract
): Promise<number> {
const fixedRate = contractInstance || this.fixedRateContract
const gasLimitDefault = this.GASLIMIT_DEFAULT
let estGas
const fixedrate: FixedPriceExchange = await this.contract.methods
.getExchange(exchangeId)
.call()
const amountWei = await this.amountToUnits(fixedrate.baseToken, amount)
try {
estGas = await fixedRate.methods
.collectBT(exchangeId)
.collectBT(exchangeId, amountWei)
.estimateGas({ from: account }, (err, estGas) => (err ? gasLimitDefault : estGas))
} catch (e) {
estGas = gasLimitDefault
Expand All @@ -838,20 +840,26 @@ export class FixedRateExchange {
}

/**
* Collect BaseTokens in the contract (only exchange owner)
* @param {String} exchangeId ExchangeId
* Collect BaseTokens in the contract (anyone can call this, funds are sent to erc20.paymentCollector)
* @param {String} address User address
* @param {String} exchangeId ExchangeId
* @param {String} amount amount to be collected
* @return {Promise<TransactionReceipt>} transaction receipt
*/
public async collectBT(
address: string,
exchangeId: string
exchangeId: string,
amount: string
): Promise<TransactionReceipt> {
const exchange = await this.getExchange(exchangeId)
if (!exchange) return null

const estGas = await this.estCollectBT(address, exchangeId)
const trxReceipt = await this.contract.methods.collectBT(exchangeId).send({
const estGas = await this.estCollectBT(address, exchangeId, amount)
const fixedrate: FixedPriceExchange = await this.contract.methods
.getExchange(exchangeId)
.call()
const amountWei = await this.amountToUnits(fixedrate.baseToken, amount)
const trxReceipt = await this.contract.methods.collectBT(exchangeId, amountWei).send({
from: address,
gas: estGas + 1,
gasPrice: await getFairGasPrice(this.web3, this.config)
Expand All @@ -863,20 +871,26 @@ export class FixedRateExchange {
* Estimate gas cost for collecDT
* @param {String} account
* @param {String} exchangeId ExchangeId
* @param {String} amount amount to be collected
* @param {Contract} contractInstance optional contract instance
* @return {Promise<number>}
*/
public async estCollectDT(
account: string,
exchangeId: string,
amount: string,
contractInstance?: Contract
): Promise<number> {
const fixedRate = contractInstance || this.fixedRateContract
const gasLimitDefault = this.GASLIMIT_DEFAULT
let estGas
const fixedrate: FixedPriceExchange = await this.contract.methods
.getExchange(exchangeId)
.call()
const amountWei = await this.amountToUnits(fixedrate.datatoken, amount)
try {
estGas = await fixedRate.methods
.collectDT(exchangeId)
.collectDT(exchangeId, amountWei)
.estimateGas({ from: account }, (err, estGas) => (err ? gasLimitDefault : estGas))
} catch (e) {
estGas = gasLimitDefault
Expand All @@ -885,20 +899,26 @@ export class FixedRateExchange {
}

/**
* Collect datatokens in the contract (only exchange owner)
* @param {String} exchangeId ExchangeId
* Collect datatokens in the contract (anyone can call this, funds are sent to erc20.paymentCollector)
* @param {String} address User address
* @param {String} exchangeId ExchangeId
* @param {String} amount amount to be collected
* @return {Promise<TransactionReceipt>} transaction receipt
*/
public async collectDT(
address: string,
exchangeId: string
exchangeId: string,
amount: string
): Promise<TransactionReceipt> {
const exchange = await this.getExchange(exchangeId)
if (!exchange) return null

const estGas = await this.estCollectDT(address, exchangeId)
const trxReceipt = await this.contract.methods.collectDT(exchangeId).send({
const estGas = await this.estCollectDT(address, exchangeId, amount)
const fixedrate: FixedPriceExchange = await this.contract.methods
.getExchange(exchangeId)
.call()
const amountWei = await this.amountToUnits(fixedrate.datatoken, amount)
const trxReceipt = await this.contract.methods.collectDT(exchangeId, amountWei).send({
from: address,
gas: estGas + 1,
gasPrice: await getFairGasPrice(this.web3, this.config)
Expand Down
5 changes: 0 additions & 5 deletions test/unit/pools/dispenser/Dispenser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,11 +173,6 @@ describe('Dispenser flow', () => {
assert(tx, 'user3 failed to get 1DT')
})

it('tries to withdraw all datatokens', async () => {
const tx = await DispenserClass.ownerWithdraw(dtAddress, user3)
assert(tx === null, 'Request should fail')
})

it('user2 withdraws all datatokens', async () => {
const tx = await DispenserClass.ownerWithdraw(dtAddress, contracts.accounts[0])
assert(tx, 'user2 failed to withdraw all her tokens')
Expand Down
25 changes: 12 additions & 13 deletions test/unit/pools/fixedRate/FixedRateExchange.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import OPFCollector from '@oceanprotocol/contracts/artifacts/contracts/community
import { NftFactory, NftCreateData } from '../../../../src/factories/NFTFactory'
import { FixedRateExchange } from '../../../../src/pools/fixedRate/FixedRateExchange'
import { FreCreationParams, Erc20CreateParams } from '../../../../src/@types'
import { amountToUnits, unitsToAmount } from '../../../../src/utils/ContractUtils'
const web3 = new Web3('http://127.0.0.1:8545')

describe('Fixed Rate unit test', () => {
Expand Down Expand Up @@ -193,7 +194,7 @@ describe('Fixed Rate unit test', () => {

it('#generate exchangeId - should generate a specific exchangeId', async () => {
expect(
await fixedRate.generateExchangeId(contracts.daiAddress, dtAddress, exchangeOwner)
await fixedRate.generateExchangeId(contracts.daiAddress, dtAddress)
).to.equal(exchangeId)
})

Expand Down Expand Up @@ -348,9 +349,10 @@ describe('Fixed Rate unit test', () => {
// user2 buys 1 DT
await fixedRate.buyDT(user2, exchangeId, '1', '2')
// 1 DAI in the contract
expect((await fixedRate.getExchange(exchangeId)).btBalance).to.equal('1')
const fixedRateDetails = await fixedRate.getExchange(exchangeId)
expect(fixedRateDetails.btBalance).to.equal('1')
// owner collects BTs
await fixedRate.collectBT(exchangeOwner, exchangeId)
await fixedRate.collectBT(exchangeOwner, exchangeId, fixedRateDetails.btBalance)
// btBalance is zero
expect((await fixedRate.getExchange(exchangeId)).btBalance).to.equal('0')
})
Expand All @@ -359,7 +361,7 @@ describe('Fixed Rate unit test', () => {
// 9 dts left
expect(result.dtBalance).to.equal('9')
// owner collects DTs
await fixedRate.collectDT(exchangeOwner, exchangeId)
await fixedRate.collectDT(exchangeOwner, exchangeId, result.dtBalance)
// no more dts in the contract
const result2 = await fixedRate.getExchange(exchangeId)
expect(result2.dtBalance).to.equal('0')
Expand All @@ -383,7 +385,7 @@ describe('Fixed Rate unit test', () => {
expect(result.oceanFeeAvailable).to.equal('0.042')
// user3 is the marketFeeCollector
expect(await daiContract.methods.balanceOf(user3).call()).to.equal(
web3.utils.toWei('0.021')
web3.utils.toWei('1.021')
)
})

Expand Down Expand Up @@ -508,11 +510,7 @@ describe('Fixed Rate unit test', () => {

it('#generate exchangeId - should generate a specific exchangeId', async () => {
expect(
await fixedRate.generateExchangeId(
contracts.usdcAddress,
dtAddress,
exchangeOwner
)
await fixedRate.generateExchangeId(contracts.usdcAddress, dtAddress)
).to.equal(exchangeId)
})

Expand Down Expand Up @@ -661,9 +659,10 @@ describe('Fixed Rate unit test', () => {
// user2 buys 1 DT
await fixedRate.buyDT(user2, exchangeId, '1', '2')
// 1 DAI in the contract
expect((await fixedRate.getExchange(exchangeId)).btBalance).to.equal('1')
const exchangeDetails = await fixedRate.getExchange(exchangeId)
expect(exchangeDetails.btBalance).to.equal('1')
// owner collects BTs
await fixedRate.collectBT(exchangeOwner, exchangeId)
await fixedRate.collectBT(exchangeOwner, exchangeId, exchangeDetails.btBalance)
// btBalance is zero
expect((await fixedRate.getExchange(exchangeId)).btBalance).to.equal('0')
})
Expand All @@ -672,7 +671,7 @@ describe('Fixed Rate unit test', () => {
// 9 dts left
expect(result.dtBalance).to.equal('9')
// owner collects DTs
await fixedRate.collectDT(exchangeOwner, exchangeId)
await fixedRate.collectDT(exchangeOwner, exchangeId, result.dtBalance)
// no more dts in the contract
const result2 = await fixedRate.getExchange(exchangeId)
expect(result2.dtBalance).to.equal('0')
Expand Down