mirror of
https://github.com/oceanprotocol/ocean.js.git
synced 2024-11-26 20:39:05 +01:00
* WIP remove pools * added logs * update checksums and logs * Updating CodeExamples.md * remove console logs * remove unused params, simplify test folder structure * contracts folder simplification, remove ss contract methods * path fix * remove more "staking" code * put back `removeApprovedToken()` * remove redundant and unused test commands * test fix, auto-fix & auto-format * consistent specific imports * readme updates * remove addDispenserContract method * remove tokens subfolder from contracts * update js docs and put back addDispenserContract * use new digest for algorthms * update nft getData to fix failing unit test * replace pools with fre in buyDatatokenBatch * use proper exchange ids * increase allowance * fix buyBatch test and deploy issues from testcontracthandler Co-authored-by: GitHub Actions Bot <> Co-authored-by: Matthias Kretschmann <m@kretschmann.io>
218 lines
6.1 KiB
TypeScript
218 lines
6.1 KiB
TypeScript
import Web3 from 'web3'
|
|
import { AbiItem } from 'web3-utils/types'
|
|
import OPFCommunityFeeCollector from '@oceanprotocol/contracts/artifacts/contracts/communityFee/OPFCommunityFeeCollector.sol/OPFCommunityFeeCollector.json'
|
|
import ERC20Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC20Template.sol/ERC20Template.json'
|
|
import ERC721Template from '@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json'
|
|
import MockERC20 from '@oceanprotocol/contracts/artifacts/contracts/utils/mock/MockERC20Decimals.sol/MockERC20Decimals.json'
|
|
import Router from '@oceanprotocol/contracts/artifacts/contracts/pools/FactoryRouter.sol/FactoryRouter.json'
|
|
import FixedRate from '@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json'
|
|
import Dispenser from '@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json'
|
|
import ERC721Factory from '@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json'
|
|
// delete this once removed from contracts
|
|
import PoolTemplate from '@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json'
|
|
import { getAddresses, GAS_PRICE } from './config'
|
|
|
|
const estimateGasAndDeployContract = async (
|
|
web3: Web3,
|
|
abi: AbiItem | AbiItem[],
|
|
bytecode: string,
|
|
argumentsArray: any[],
|
|
owner: string
|
|
) => {
|
|
const contract = new web3.eth.Contract(abi)
|
|
// get est gascost
|
|
const estimatedGas = await contract
|
|
.deploy({
|
|
data: bytecode,
|
|
arguments: argumentsArray
|
|
})
|
|
.estimateGas(function (err, estimatedGas) {
|
|
if (err) console.log('DeployContracts: ' + err)
|
|
return estimatedGas
|
|
})
|
|
// deploy the contract and get its address
|
|
return await contract
|
|
.deploy({
|
|
data: bytecode,
|
|
arguments: argumentsArray
|
|
})
|
|
.send({
|
|
from: owner,
|
|
gas: estimatedGas + 1,
|
|
gasPrice: GAS_PRICE
|
|
})
|
|
.then(function (contract) {
|
|
return contract.options.address
|
|
})
|
|
}
|
|
|
|
export interface Addresses {
|
|
opfCommunityFeeCollectorAddress: string
|
|
datatokenTemplateAddress: string
|
|
nftTemplateAddress: string
|
|
oceanAddress: string
|
|
routerAddress: string
|
|
sideStakingAddress: string
|
|
fixedRateAddress: string
|
|
dispenserAddress: string
|
|
nftFactoryAddress: string
|
|
daiAddress: string
|
|
usdcAddress: string
|
|
poolTemplateAddress: string
|
|
}
|
|
|
|
export const deployContracts = async (web3: Web3, owner: string): Promise<Addresses> => {
|
|
const addresses: Addresses = {} as Addresses
|
|
const configAddresses = getAddresses()
|
|
|
|
// deploy OPF free collector
|
|
addresses.opfCommunityFeeCollectorAddress =
|
|
configAddresses?.OPFCommunityFeeCollector ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
OPFCommunityFeeCollector.abi as AbiItem[],
|
|
OPFCommunityFeeCollector.bytecode,
|
|
[owner, owner],
|
|
owner
|
|
))
|
|
|
|
// deploy Datatoken template
|
|
addresses.datatokenTemplateAddress =
|
|
configAddresses?.ERC20Template['1'] ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
ERC20Template.abi as AbiItem[],
|
|
ERC20Template.bytecode,
|
|
[],
|
|
owner
|
|
))
|
|
|
|
// deploy NFT template
|
|
addresses.nftTemplateAddress =
|
|
configAddresses?.ERC721Template?.['1'] ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
ERC721Template.abi as AbiItem[],
|
|
ERC721Template.bytecode,
|
|
[],
|
|
owner
|
|
))
|
|
|
|
// deploy OCEAN mock tocken
|
|
addresses.oceanAddress =
|
|
configAddresses?.Ocean ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
MockERC20.abi as AbiItem[],
|
|
MockERC20.bytecode,
|
|
['OCEAN', 'OCEAN', 18],
|
|
owner
|
|
))
|
|
|
|
// deploy pool template to be removed once the pools are removed from contracts
|
|
addresses.poolTemplateAddress =
|
|
configAddresses?.poolTemplate ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
PoolTemplate.abi as AbiItem[],
|
|
PoolTemplate.bytecode,
|
|
[],
|
|
owner
|
|
))
|
|
|
|
// deploy router
|
|
addresses.routerAddress =
|
|
configAddresses?.Router ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
Router.abi as AbiItem[],
|
|
Router.bytecode,
|
|
[
|
|
owner,
|
|
addresses.oceanAddress,
|
|
addresses.poolTemplateAddress,
|
|
addresses.opfCommunityFeeCollectorAddress,
|
|
[]
|
|
],
|
|
owner
|
|
))
|
|
|
|
// deploy fixed rate
|
|
addresses.fixedRateAddress =
|
|
configAddresses?.FixedPrice ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
FixedRate.abi as AbiItem[],
|
|
FixedRate.bytecode,
|
|
[addresses.routerAddress],
|
|
owner
|
|
))
|
|
|
|
// deploy dispenser
|
|
addresses.dispenserAddress =
|
|
configAddresses?.Dispenser ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
Dispenser.abi as AbiItem[],
|
|
Dispenser.bytecode,
|
|
[addresses.routerAddress],
|
|
owner
|
|
))
|
|
|
|
// deploy NFT factory
|
|
addresses.nftFactoryAddress =
|
|
configAddresses?.ERC721Factory ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
ERC721Factory.abi as AbiItem[],
|
|
ERC721Factory.bytecode,
|
|
[
|
|
addresses.nftTemplateAddress,
|
|
addresses.datatokenTemplateAddress,
|
|
addresses.routerAddress
|
|
],
|
|
owner
|
|
))
|
|
|
|
// deploy USDC mock tocken
|
|
addresses.usdcAddress =
|
|
configAddresses?.MockUSDC ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
MockERC20.abi as AbiItem[],
|
|
MockERC20.bytecode,
|
|
['USDC', 'USDC', 6],
|
|
owner
|
|
))
|
|
|
|
// deploy DAI mock tocken
|
|
addresses.daiAddress =
|
|
configAddresses?.MockDAI ||
|
|
(await estimateGasAndDeployContract(
|
|
web3,
|
|
MockERC20.abi as AbiItem[],
|
|
MockERC20.bytecode,
|
|
['DAI', 'DAI', 18],
|
|
owner
|
|
))
|
|
|
|
if (!configAddresses?.Router) {
|
|
const RouterContract = new web3.eth.Contract(
|
|
Router.abi as AbiItem[],
|
|
addresses.routerAddress
|
|
)
|
|
|
|
await RouterContract.methods
|
|
.addFactory(addresses.nftFactoryAddress)
|
|
.send({ from: owner })
|
|
await RouterContract.methods
|
|
.addFixedRateContract(addresses.fixedRateAddress)
|
|
.send({ from: owner })
|
|
await RouterContract.methods
|
|
.addDispenserContract(addresses.dispenserAddress)
|
|
.send({ from: owner })
|
|
}
|
|
|
|
return addresses
|
|
}
|