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

Created AccessList contract.

This commit is contained in:
mariacarmina 2024-08-22 15:42:06 +03:00
parent 1f4e4336dd
commit 87a7a0134b

119
src/contracts/AccessList.ts Normal file
View File

@ -0,0 +1,119 @@
import { Signer } from 'ethers'
import AccessList from '@oceanprotocol/contracts/artifacts/contracts/accesslists/AccessList.sol/AccessList.json'
import { sendTx } from '../utils'
import { AbiItem, ReceiptOrEstimate } from '../@types'
import { Config } from '../config'
import { SmartContract } from './SmartContract'
export class AccessList extends SmartContract {
public abiEnterprise: AbiItem[]
getDefaultAbi() {
return AccessList.abi as AbiItem[]
}
/**
* Instantiate AccessList class
* @param {Signer} signer The signer object.
* @param {string | number} [network] Network id or name
* @param {Config} [config] The configuration object.
* @param {AbiItem[]} [abi] ABI array of the smart contract
* @param {AbiItem[]} abiEnterprise Enterprise ABI array of the smart contract
*/
constructor(
signer: Signer,
network?: string | number,
config?: Config,
abi?: AbiItem[],
abiEnterprise?: AbiItem[]
) {
super(signer, network, config, abi)
this.abiEnterprise = abiEnterprise || (AccessList.abi as AbiItem[])
}
/**
* Get Token Uri
* @return {Promise<string>} Token URI
*/
public async getTokenUri(accessListAddress: string): Promise<string> {
const accessListContract = this.getContract(accessListAddress)
return await accessListContract.tokenURI()
}
/**
* Mint ERC721 contract
* @param {String} accessListAddress AccessList contract address
* @param {String} user Minter address
* @param {String} tokenUri tokenURI
* @param {Boolean} estimateGas if True, return gas estimate
* @return {Promise<ReceiptOrEstimate>} transactionId
*/
public async mint<G extends boolean = false>(
accessListAddress: string,
user: string,
tokenUri: string,
estimateGas?: G
): Promise<ReceiptOrEstimate<G>> {
const accessListContract = this.getContract(accessListAddress)
const estGas = await accessListContract.estimateGas.mint(user, tokenUri)
if (estimateGas) return <ReceiptOrEstimate<G>>estGas
const trxReceipt = await sendTx(
estGas,
this.signer,
this.config?.gasFeeMultiplier,
accessListContract.mint,
user,
tokenUri
)
return <ReceiptOrEstimate<G>>trxReceipt
}
/**
* Batch Mint ERC721 contract
* @param {String} accessListAddress AccessList contract address
* @param {String} users Minter addresses
* @param {String} tokenUris tokenURI
* @param {Boolean} estimateGas if True, return gas estimate
* @return {Promise<ReceiptOrEstimate>} transactionId
*/
public async batchMint<G extends boolean = false>(
accessListAddress: string,
users: Array<string>,
tokenUris: Array<string>,
estimateGas?: G
): Promise<ReceiptOrEstimate<G>> {
const accessListContract = this.getContract(accessListAddress)
const estGas = await accessListContract.estimateGas.batchMint(users, tokenUris)
if (estimateGas) return <ReceiptOrEstimate<G>>estGas
const trxReceipt = await sendTx(
estGas,
this.signer,
this.config?.gasFeeMultiplier,
accessListContract.batchMint,
users,
tokenUris
)
return <ReceiptOrEstimate<G>>trxReceipt
}
public async burn<G extends boolean = false>(
accessListAddress: string,
tokenId: number,
estimateGas?: G
): Promise<ReceiptOrEstimate<G>> {
const accessListContract = this.getContract(accessListAddress)
const estGas = await accessListContract.estimateGas.burn(tokenId)
if (estimateGas) return <ReceiptOrEstimate<G>>estGas
const trxReceipt = await sendTx(
estGas,
this.signer,
this.config?.gasFeeMultiplier,
accessListContract.burn,
tokenId
)
return <ReceiptOrEstimate<G>>trxReceipt
}
}