Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
55b9eaa
Use createAsset function from SDK.
mariacarmina Nov 7, 2024
9eb253e
Fix lint.
mariacarmina Nov 7, 2024
db00782
Fix exported function.
mariacarmina Nov 7, 2024
5e2aac6
Fix indent.
mariacarmina Nov 18, 2024
7fee679
Remove reinforce type for DDO.
mariacarmina Nov 18, 2024
eabaa24
Increase timeout.
mariacarmina Nov 18, 2024
d1efb18
debug and reinforce ddo type.
mariacarmina Nov 18, 2024
478df75
Print did.
mariacarmina Nov 18, 2024
7681750
Add more logs into the tests.
mariacarmina Nov 19, 2024
bca4cb1
Updated chain id from samples.
mariacarmina Nov 20, 2024
cb94b1d
Adding try/catch at the algo side.
mariacarmina Nov 20, 2024
5a9de65
Updated chain id.
mariacarmina Nov 20, 2024
022e47e
cleanup console.logs.
mariacarmina Nov 20, 2024
a381328
Delete chain id from all samples.
mariacarmina Nov 20, 2024
a792f83
Use latest version of ocean-lib.
mariacarmina Nov 20, 2024
3182f0d
Add chain id key with empty string.
mariacarmina Nov 20, 2024
a2ec4d2
replace with null.
mariacarmina Nov 20, 2024
e451ffa
rename template index with template id.
mariacarmina Nov 21, 2024
0ed52a7
Fix workflow.
mariacarmina Nov 21, 2024
3b24717
Merge branch 'main' into utilize-create-asset-function
mariacarmina Nov 25, 2024
bfccdc7
Add sdk check.
mariacarmina Nov 25, 2024
ebdba17
Fix conflicts.
mariacarmina Jan 22, 2025
f2139f6
fix package.json
mariacarmina Jan 23, 2025
8a63675
Call util function from sdk to calculate templateindex.
mariacarmina Jan 23, 2025
1407779
update ci.
mariacarmina Jan 23, 2025
8cb4a38
Add oasis dep.
mariacarmina Jan 23, 2025
36e2af9
Duplicate function for calculating dynamically the template index.
mariacarmina Jan 23, 2025
c757315
update docker images in ci.
mariacarmina Jan 23, 2025
b3e4175
remove debian:10.
mariacarmina Jan 23, 2025
d257f72
Add -f option to docker rm.
mariacarmina Jan 23, 2025
4b1a968
Add util function for signer. fix review.
mariacarmina Jan 25, 2025
fb5dcaf
tweaks.
mariacarmina Jan 25, 2025
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
2 changes: 1 addition & 1 deletion metadata/jsAlgo.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "",
"nftAddress": "",
"version": "4.1.0",
"chainId": 137,
"chainId": null,
"metadata": {
"created": "2023-08-01T17:09:39Z",
"updated": "2023-08-01T17:09:39Z",
Expand Down
2 changes: 1 addition & 1 deletion metadata/jsIPFSAlgo.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "",
"nftAddress": "",
"version": "4.1.0",
"chainId": 8996,
"chainId": null,
"metadata": {
"created": "2023-08-01T17:09:39Z",
"updated": "2023-08-01T17:09:39Z",
Expand Down
2 changes: 1 addition & 1 deletion metadata/pythonAlgo.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "",
"nftAddress": "",
"version": "4.1.0",
"chainId": 8996,
"chainId": null,
"metadata": {
"created": "2023-08-01T17:09:39Z",
"updated": "2023-08-01T17:09:39Z",
Expand Down
2 changes: 1 addition & 1 deletion metadata/simpleComputeDataset.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "",
"nftAddress": "",
"version": "4.1.0",
"chainId": 8996,
"chainId": null,
"metadata": {
"created": "2021-12-20T14:35:20Z",
"updated": "2021-12-20T14:35:20Z",
Expand Down
2 changes: 1 addition & 1 deletion metadata/simpleDownloadDataset.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "",
"nftAddress": "",
"version": "4.1.0",
"chainId": 80001,
"chainId": null,
"metadata": {
"created": "2021-12-20T14:35:20Z",
"updated": "2021-12-20T14:35:20Z",
Expand Down
2 changes: 1 addition & 1 deletion metadata/simpleIPFSComputeDataset.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": "",
"nftAddress": "",
"version": "4.1.0",
"chainId": 8996,
"chainId": null,
"metadata": {
"created": "2021-12-20T14:35:20Z",
"updated": "2021-12-20T14:35:20Z",
Expand Down
12 changes: 12 additions & 0 deletions package-lock.json

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

41 changes: 22 additions & 19 deletions src/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import fs from "fs";
import os from "os";
import util from "util";
import {
createAsset,
createAssetUtil,
handleComputeOrder,
updateAssetMetadata,
downloadFile,
Expand Down Expand Up @@ -97,17 +97,15 @@ export class Commands {
const encryptDDO = args[2] === "false" ? false : true;
try {
// add some more checks
const urlAssetId = await createAsset(
const urlAssetId = await createAssetUtil(
asset.nft.name,
asset.nft.symbol,
this.signer,
asset.services[0].files,
asset,
this.providerUrl,
this.providerUrl || this.macOsProviderUrl,
this.config,
this.aquarius,
1,
this.macOsProviderUrl,
encryptDDO
);
console.log("Asset published. ID: " + urlAssetId);
Expand All @@ -129,21 +127,26 @@ export class Commands {
}
const encryptDDO = args[2] === "false" ? false : true;
// add some more checks
const algoDid = await createAsset(
algoAsset.nft.name,
algoAsset.nft.symbol,
this.signer,
algoAsset.services[0].files,
algoAsset,
this.providerUrl,
this.config,
this.aquarius,
1,
this.macOsProviderUrl,
encryptDDO
);
// add some more checks
try{
const algoDid = await createAssetUtil(
algoAsset.nft.name,
algoAsset.nft.symbol,
this.signer,
algoAsset.services[0].files,
algoAsset,
this.providerUrl || this.macOsProviderUrl,
this.config,
this.aquarius,
encryptDDO
);
// add some more checks
console.log("Algorithm published. DID: " + algoDid);
} catch (e) {
console.error("Error when publishing dataset from file: " + args[1]);
console.error(e);
return;
}

}

public async editAsset(args: string[]) {
Expand Down
177 changes: 16 additions & 161 deletions src/helpers.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
import { SHA256 } from "crypto-js";
import { ethers, Signer } from "ethers";
import fetch from "cross-fetch";
import { promises as fs } from "fs";
import { createHash } from "crypto";
import * as path from "path";
import * as sapphire from '@oasisprotocol/sapphire-paratime';
import {
AccesslistFactory,
Aquarius,
DatatokenCreateParams,
Nft,
NftCreateData,
NftFactory,
ProviderInstance,
ZERO_ADDRESS,
approveWei,
Expand All @@ -22,14 +17,12 @@
DDO,
orderAsset,
getEventFromTx,
DispenserCreationParams,
FreCreationParams,
DownloadResponse,
Asset,
ProviderFees,
ComputeAlgorithm,
LoggerInstance,
Datatoken4
createAsset
} from "@oceanprotocol/lib";
import { hexlify } from "ethers/lib/utils";

Expand Down Expand Up @@ -67,182 +60,44 @@
return { data, filename };
}

export async function createAsset(
export async function createAssetUtil(
name: string,
symbol: string,
owner: Signer,
assetUrl: any,

Check warning on line 67 in src/helpers.ts

View workflow job for this annotation

GitHub Actions / lint

Unexpected any. Specify a different type
ddo: any,

Check warning on line 68 in src/helpers.ts

View workflow job for this annotation

GitHub Actions / lint

Unexpected any. Specify a different type
providerUrl: string,
config: Config,
aquariusInstance: Aquarius,
templateIndex: number = 1,
macOsProviderUrl?: string,
encryptDDO: boolean = true,
templateId: number = 1,
providerFeeToken: string = ZERO_ADDRESS,
accessListFactory?: string,
allowAccessList?: string,
denyAccessList?: string,
macOsProviderUrl?: string,

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

let wrappedSigner
let allowListAddress
if(templateIndex === 4){
if(templateId === 4 && config.sdk === 'oasis'){
// Wrap the signer for Sapphire
wrappedSigner = sapphire.wrap(owner);
const wrappedSigner = sapphire.wrap(owner);

// Create Access List Factory
const accessListFactory = new AccesslistFactory(config.accessListFactory, wrappedSigner, chainId, config);
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, templateId, 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(),
// use ocean token as default for fees, only if we don't have another specific fee token
feeToken: ddo?.stats?.price?.tokenAddress ? ddo.stats.price.tokenAddress : config.oceanTokenAddress,
minter: await owner.getAddress(),
mpFeeAddress: ZERO_ADDRESS,
};

let bundleNFT;
const hasStatsPrice = ddo.stats && ddo.stats.price // are price stats defined?
const hasPriceValue = hasStatsPrice && !isNaN(ddo.stats.price.value) // avoid confusion with value '0'
// no price set
if (!hasPriceValue) { // !ddo.stats?.price?.value
bundleNFT = await nftFactory.createNftWithDatatoken(
nftParamsAsset,
datatokenParams
);
// price is 0
} else if (hasPriceValue && Number(ddo.stats.price.value) === 0) { // 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 {
// price is <> 0
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, // we have a fixed rate price here
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, templateId, ddo, encryptDDO, providerUrl || macOsProviderUrl, providerFeeToken, aquariusInstance);
}


Expand Down
Loading
Loading