Skip to content

Commit

Permalink
Use createAsset function from SDK.
Browse files Browse the repository at this point in the history
  • Loading branch information
mariacarmina committed Nov 7, 2024
1 parent a124d39 commit 55b9eaa
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 158 deletions.
15 changes: 7 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 @@ -43,7 +43,7 @@
},
"dependencies": {
"@oceanprotocol/contracts": "^2.0.4",
"@oceanprotocol/lib": "^3.4.1",
"@oceanprotocol/lib": "^3.4.3",
"cross-fetch": "^3.1.5",
"crypto-js": "^4.1.1",
"decimal.js": "^10.4.1",
Expand Down
163 changes: 14 additions & 149 deletions src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ import * as sapphire from '@oasisprotocol/sapphire-paratime';
import {
AccesslistFactory,
Aquarius,
DatatokenCreateParams,
Nft,
NftCreateData,
NftFactory,
ProviderInstance,
ZERO_ADDRESS,
approveWei,
Expand All @@ -22,14 +19,13 @@ import {
DDO,
orderAsset,
getEventFromTx,
DispenserCreationParams,
FreCreationParams,
DownloadResponse,
Asset,
ProviderFees,
ComputeAlgorithm,
LoggerInstance,
Datatoken4
Datatoken4,

Check failure on line 27 in src/helpers.ts

View workflow job for this annotation

GitHub Actions / lint

'Datatoken4' is defined but never used
createAsset
} from "@oceanprotocol/lib";
import { hexlify } from "ethers/lib/utils";

Expand Down Expand Up @@ -67,7 +63,7 @@ export async function downloadFile(
return { data, filename };
}

export async function createAsset(
export async function createAssetUtil(
name: string,
symbol: string,
owner: Signer,
Expand All @@ -76,167 +72,36 @@ export async function createAsset(
providerUrl: string,
config: Config,
aquariusInstance: Aquarius,
encryptDDO: boolean = true,
templateIndex: number = 1,
providerFeeToken: string = ZERO_ADDRESS,
accessListFactory?: string,
allowAccessList?: string,
denyAccessList?: string,
macOsProviderUrl?: string,
encryptDDO: boolean = true,

) {
const { chainId } = await owner.provider.getNetwork();
const nft = new Nft(owner, chainId);
const nftFactory = new NftFactory(config.nftFactoryAddress, owner);

let wrappedSigner
let allowListAddress
if(templateIndex === 4){
// Wrap the signer for Sapphire
wrappedSigner = sapphire.wrap(owner);

// Create Access List Factory
const accessListFactory = new AccesslistFactory(config.accessListFactory, wrappedSigner, chainId);
const accessListFactoryObj = new AccesslistFactory(config.accessListFactory, wrappedSigner, chainId);

// Create Allow List
allowListAddress = await accessListFactory.deployAccessListContract(
await accessListFactoryObj.deployAccessListContract(
'AllowList',
'ALLOW',
['https://oceanprotocol.com/nft/'],
false,
await owner.getAddress(),
[await owner.getAddress(), ZERO_ADDRESS]
);
)
return await createAsset(name, symbol, wrappedSigner, assetUrl, templateIndex, ddo, encryptDDO, providerUrl || macOsProviderUrl, providerFeeToken, aquariusInstance, accessListFactory, allowAccessList, denyAccessList);
}

ddo.chainId = parseInt(chainId.toString(10));
const nftParamsAsset: NftCreateData = {
name,
symbol,
templateIndex,
tokenURI: "aaa",
transferable: true,
owner: await owner.getAddress(),
};
const datatokenParams: DatatokenCreateParams = {
templateIndex,
cap: "100000",
feeAmount: "0",
paymentCollector: await owner.getAddress(),
feeToken: config.oceanTokenAddress,
minter: await owner.getAddress(),
mpFeeAddress: ZERO_ADDRESS,
};

let bundleNFT;
if (!ddo.stats?.price?.value) {
bundleNFT = await nftFactory.createNftWithDatatoken(
nftParamsAsset,
datatokenParams
);
} else if (ddo?.stats?.price?.value === "0") {
const dispenserParams: DispenserCreationParams = {
dispenserAddress: config.dispenserAddress,
maxTokens: "1",
maxBalance: "100000000",
withMint: true,
allowedSwapper: ZERO_ADDRESS,
};

bundleNFT = await nftFactory.createNftWithDatatokenWithDispenser(
nftParamsAsset,
datatokenParams,
dispenserParams
);
} else {
const fixedPriceParams: FreCreationParams = {
fixedRateAddress: config.fixedRateExchangeAddress,
baseTokenAddress: config.oceanTokenAddress,
owner: await owner.getAddress(),
marketFeeCollector: await owner.getAddress(),
baseTokenDecimals: 18,
datatokenDecimals: 18,
fixedRate: ddo.stats.price.value,
marketFee: "0",
allowedConsumer: await owner.getAddress(),
withMint: true,
};

bundleNFT = await nftFactory.createNftWithDatatokenWithFixedRate(
nftParamsAsset,
datatokenParams,
fixedPriceParams
);
}

const trxReceipt = await bundleNFT.wait();
// events have been emitted
const nftCreatedEvent = getEventFromTx(trxReceipt, "NFTCreated");
const tokenCreatedEvent = getEventFromTx(trxReceipt, "TokenCreated");

const nftAddress = nftCreatedEvent.args.newTokenAddress;
const datatokenAddressAsset = tokenCreatedEvent.args.newTokenAddress;
// create the files encrypted string
assetUrl.datatokenAddress = datatokenAddressAsset;
assetUrl.nftAddress = nftAddress;
ddo.services[0].files = templateIndex === 4 ? '' : await ProviderInstance.encrypt(
assetUrl,
chainId,
macOsProviderUrl || providerUrl
);
ddo.services[0].datatokenAddress = datatokenAddressAsset;
ddo.services[0].serviceEndpoint = providerUrl;

ddo.nftAddress = nftAddress;
ddo.id =
"did:op:" +
SHA256(ethers.utils.getAddress(nftAddress) + chainId.toString(10));

let metadata;
let metadataHash;
let flags;
if (encryptDDO) {
metadata = await ProviderInstance.encrypt(
ddo,
chainId,
macOsProviderUrl || providerUrl
);
const validateResult = await aquariusInstance.validate(ddo);
metadataHash = validateResult.hash;
flags = 2
} else {
const stringDDO = JSON.stringify(ddo);
const bytes = Buffer.from(stringDDO);
metadata = hexlify(bytes);
metadataHash = "0x" + createHash("sha256").update(metadata).digest("hex");
flags = 0
}

await nft.setMetadata(
nftAddress,
await owner.getAddress(),
0,
providerUrl,
"",
ethers.utils.hexlify(flags),
metadata,
metadataHash
);

if(templateIndex === 4){ // Use Datatoken4 for file object
const datatoken = new Datatoken4(
wrappedSigner,
ethers.utils.toUtf8Bytes(JSON.stringify(assetUrl.files)),
chainId,
config
);

// Set file object
await datatoken.setFileObject(datatokenAddressAsset, await wrappedSigner.getAddress());

// Set allow list for the datatoken
await datatoken.setAllowListContract(
datatokenAddressAsset,
allowListAddress,
await wrappedSigner.getAddress()
);}

return ddo.id;
return await createAsset(name, symbol, owner, assetUrl, templateIndex, ddo, encryptDDO, providerUrl || macOsProviderUrl, providerFeeToken, aquariusInstance);
}


Expand Down

0 comments on commit 55b9eaa

Please sign in to comment.