From 39ada60cb547eab081f55b1d51844d09d6c2e3c9 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 14 Jan 2025 15:00:50 +0100 Subject: [PATCH 01/50] Naive imeplementation of owenr check --- contracts/paranets/Paranet.sol | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 884e6257..4984ac52 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -8,6 +8,7 @@ import {ParanetsRegistry} from "../storage/paranets/ParanetsRegistry.sol"; import {ParanetServicesRegistry} from "../storage/paranets/ParanetServicesRegistry.sol"; import {ProfileStorage} from "../storage/ProfileStorage.sol"; import {IdentityStorage} from "../storage/IdentityStorage.sol"; +import {KnowledgeCollectionStorage} from "../storage/KnowledgeCollectionStorage.sol"; import {ContractStatus} from "../abstract/ContractStatus.sol"; import {IInitializable} from "../interfaces/IInitializable.sol"; import {INamed} from "../interfaces/INamed.sol"; @@ -1065,13 +1066,32 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function _checkKnowledgeAssetOwner( - address knowledgeAssetStorageContract, - uint256 knowledgeAssetTokenId + address knowledgeCollectionStorageContractAddress, + uint256 knowledgeCollectionId ) internal view virtual { - require(hub.isAssetStorage(knowledgeAssetStorageContract), "Given address isn't KA Storage"); - require( - IERC721(knowledgeAssetStorageContract).ownerOf(knowledgeAssetTokenId) == msg.sender, - "Caller isn't the owner of the KA" + // Validate the provided address is a Knowledge Asset Storage contract + require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KA Storage"); + + // Create a KnowledgeCollectionStorage instance + KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( + knowledgeCollectionStorageContractAddress ); + + // Determine the range of token IDs in the knowledge collection + uint256 startTokenId = (knowledgeCollectionId - 1) * + knowledgeCollectionStorage.knowledgeCollectionMaxSize() + + 1; // _startTokenId() + uint256 endTokenId = startTokenId + + knowledgeCollectionStorage.knowledgeCollections(knowledgeCollectionId).minted; + + for (uint256 tokenId = startTokenId; tokenId < endTokenId; tokenId++) { + // Skip burned tokens + if (knowledgeCollectionStorage.isKnowledgeAssetBurned(tokenId)) { + continue; + } + + // Ensure the caller owns all active tokens + require(knowledgeCollectionStorage.isOwnerOf(msg.sender, tokenId), "Caller isn't the owner of the KC"); + } } } From c73f36cb8a4db84028eff7f82e2cb0b2ecb0ebdb Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 14 Jan 2025 15:36:51 +0100 Subject: [PATCH 02/50] More optimal _checkKnowledgeCollectionOwner function --- contracts/paranets/Paranet.sol | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 4984ac52..3815c6d0 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -129,7 +129,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { constructor(address hubAddress) ContractStatus(hubAddress) {} modifier onlyKnowledgeAssetOwner(address knowledgeAssetStorageContract, uint256 knowledgeAssetTokenId) { - _checkKnowledgeAssetOwner(knowledgeAssetStorageContract, knowledgeAssetTokenId); + _checkKnowledgeCollectionOwner(knowledgeAssetStorageContract, knowledgeAssetTokenId); _; } @@ -467,7 +467,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); } - _checkKnowledgeAssetOwner(services[i].knowledgeAssetStorageContract, services[i].tokenId); + _checkKnowledgeCollectionOwner(services[i].knowledgeAssetStorageContract, services[i].tokenId); if ( pr.isServiceImplemented( @@ -1056,42 +1056,40 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { (address paranetKAStorageContract, uint256 paranetKATokenId) = paranetsRegistry.getParanetKnowledgeAssetLocator( paranetId ); - _checkKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId); + _checkKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId); } function _checkParanetServiceOperator(bytes32 paranetServiceId) internal view virtual { (address paranetServiceKAStorageContract, uint256 paranetServiceKATokenId) = paranetServicesRegistry .getParanetServiceKnowledgeAssetLocator(paranetServiceId); - _checkKnowledgeAssetOwner(paranetServiceKAStorageContract, paranetServiceKATokenId); + _checkKnowledgeCollectionOwner(paranetServiceKAStorageContract, paranetServiceKATokenId); } - function _checkKnowledgeAssetOwner( + function _checkKnowledgeCollectionOwner( address knowledgeCollectionStorageContractAddress, uint256 knowledgeCollectionId ) internal view virtual { - // Validate the provided address is a Knowledge Asset Storage contract require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KA Storage"); - // Create a KnowledgeCollectionStorage instance KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( knowledgeCollectionStorageContractAddress ); - // Determine the range of token IDs in the knowledge collection + uint256 minted = knowledgeCollectionStorage.knowledgeCollections[collectionId].minted; + uint256 burnedCount = knowledgeCollectionStorage.knowledgeCollections[collectionId].burned.length; + uint256 activeCount = minted - burnedCount; + require(activeCount != 0, "No KAs in collection"); + uint256 startTokenId = (knowledgeCollectionId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + 1; // _startTokenId() - uint256 endTokenId = startTokenId + - knowledgeCollectionStorage.knowledgeCollections(knowledgeCollectionId).minted; - for (uint256 tokenId = startTokenId; tokenId < endTokenId; tokenId++) { - // Skip burned tokens - if (knowledgeCollectionStorage.isKnowledgeAssetBurned(tokenId)) { - continue; - } + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( + msg.sender, + startTokenId, + minted + burnedCount + ); - // Ensure the caller owns all active tokens - require(knowledgeCollectionStorage.isOwnerOf(msg.sender, tokenId), "Caller isn't the owner of the KC"); - } + require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); } } From 8a7eaf36acaeb64e0318e6b694a2c331f699801e Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 14 Jan 2025 16:39:33 +0100 Subject: [PATCH 03/50] Enable submitKnowledgeAsset --- contracts/paranets/Paranet.sol | 232 ++++++++++++++++----------------- 1 file changed, 113 insertions(+), 119 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 3815c6d0..a3bedd31 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -83,11 +83,11 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { string newParanetServiceDescription, address[] newParanetServiceAddresses ); - event KnowledgeAssetSubmittedToParanet( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, - address indexed knowledgeAssetStorageContract, - uint256 knowledgeAssetTokenId + event KnowledgeCollectionSubmittedToParanet( + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, + address indexed knowledgeCollectionStorageContract, + uint256 knowledgeCollectionId ); event ParanetCuratedMinerAdded( address indexed paranetKAStorageContract, @@ -128,7 +128,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) ContractStatus(hubAddress) {} - modifier onlyKnowledgeAssetOwner(address knowledgeAssetStorageContract, uint256 knowledgeAssetTokenId) { + modifier onlyKnowledgeCollectionOwner(address knowledgeAssetStorageContract, uint256 knowledgeAssetTokenId) { _checkKnowledgeCollectionOwner(knowledgeAssetStorageContract, knowledgeAssetTokenId); _; } @@ -161,7 +161,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { string calldata paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, ParanetLib.MinersAccessPolicy minersAccessPolicy - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) returns (bytes32) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) returns (bytes32) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -197,7 +197,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 paranetKATokenId, string calldata paranetName, string calldata paranetDescription - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -216,7 +216,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, uint72[] calldata identityIds - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ProfileStorage ps = profileStorage; @@ -259,7 +259,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, uint72[] calldata identityIds - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -343,7 +343,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, uint72 identityId - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -395,7 +395,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, uint72 identityId - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -445,7 +445,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, ParanetLib.UniversalAssetLocator[] calldata services - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetServicesRegistry psr = paranetServicesRegistry; @@ -505,7 +505,11 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses - ) external onlyKnowledgeAssetOwner(paranetServiceKAStorageContract, paranetServiceKATokenId) returns (bytes32) { + ) + external + onlyKnowledgeCollectionOwner(paranetServiceKAStorageContract, paranetServiceKATokenId) + returns (bytes32) + { ParanetServicesRegistry psr = paranetServicesRegistry; bytes32 paranetServiceId = keccak256( @@ -543,7 +547,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses - ) external onlyKnowledgeAssetOwner(paranetServiceKAStorageContract, paranetServiceKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetServiceKAStorageContract, paranetServiceKATokenId) { ParanetServicesRegistry psr = paranetServicesRegistry; bytes32 paranetServiceId = keccak256( @@ -571,7 +575,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, address[] calldata minerAddresses - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; @@ -614,7 +618,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, address[] calldata minerAddresses - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -691,7 +695,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, address minerAddress - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -742,7 +746,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKAStorageContract, uint256 paranetKATokenId, address minerAddress - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); @@ -843,83 +847,73 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // return knowledgeAssetTokenId; // } - // function submitKnowledgeAsset( - // address paranetKAStorageContract, - // uint256 paranetKATokenId, - // address knowledgeAssetStorageContract, - // uint256 knowledgeAssetTokenId - // ) external onlyKnowledgeAssetOwner(knowledgeAssetStorageContract, knowledgeAssetTokenId) { - // ParanetsRegistry pr = paranetsRegistry; - // bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + function submitKnowledgeAsset( + address paranetKCStorageContract, + uint256 paranetKnowledgeCollectionId, + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionId + ) external onlyKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionId) { + ParanetsRegistry pr = paranetsRegistry; + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionId)); - // if (!pr.paranetExists(paranetId)) { - // revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); - // } + if (!pr.paranetExists(paranetId)) { + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKnowledgeCollectionId); + } - // ParanetLib.MinersAccessPolicy minersAccessPolicy = pr.getMinersAccessPolicy(paranetId); + ParanetLib.MinersAccessPolicy minersAccessPolicy = pr.getMinersAccessPolicy(paranetId); - // // Check if paranet is curated and if knowledge miner is whitelisted - // if ( - // minersAccessPolicy == ParanetLib.MinersAccessPolicy.CURATED && - // !pr.isKnowledgeMinerRegistered(paranetId, msg.sender) - // ) { - // revert ParanetLib.ParanetCuratedMinerDoesntExist(paranetId, msg.sender); - // } else if (minersAccessPolicy == ParanetLib.MinersAccessPolicy.OPEN) { - // // Check if Knowledge Miner has profile - // // If not: Create a profile - // if (!paranetKnowledgeMinersRegistry.knowledgeMinerExists(msg.sender)) { - // paranetKnowledgeMinersRegistry.registerKnowledgeMiner(msg.sender); - // } - - // // Check if Knowledge Miner is registered on paranet - // if (!pr.isKnowledgeMinerRegistered(paranetId, msg.sender)) { - // pr.addKnowledgeMiner(paranetId, msg.sender); - // } - // } + // Check if paranet is curated and if knowledge miner is whitelisted + if ( + minersAccessPolicy == ParanetLib.MinersAccessPolicy.CURATED && + !pr.isKnowledgeMinerRegistered(paranetId, msg.sender) + ) { + revert ParanetLib.ParanetCuratedMinerDoesntExist(paranetId, msg.sender); + } else if (minersAccessPolicy == ParanetLib.MinersAccessPolicy.OPEN) { + // Check if Knowledge Miner has profile + // If not: Create a profile + if (!paranetKnowledgeMinersRegistry.knowledgeMinerExists(msg.sender)) { + paranetKnowledgeMinersRegistry.registerKnowledgeMiner(msg.sender); + } - // if ( - // paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( - // keccak256(abi.encodePacked(knowledgeAssetStorageContract, knowledgeAssetTokenId)) - // ) - // ) { - // revert ParanetLib.KnowledgeAssetIsAPartOfOtherParanet( - // knowledgeAssetStorageContract, - // knowledgeAssetTokenId, - // paranetKnowledgeAssetsRegistry.getParanetId( - // keccak256(abi.encodePacked(knowledgeAssetStorageContract, knowledgeAssetTokenId)) - // ) - // ); - // } + // Check if Knowledge Miner is registered on paranet + if (!pr.isKnowledgeMinerRegistered(paranetId, msg.sender)) { + pr.addKnowledgeMiner(paranetId, msg.sender); + } + } - // uint96 remainingTokenAmount = serviceAgreementStorageProxy.getAgreementTokenAmount( - // hashingProxy.callHashFunction( - // HASH_FUNCTION_ID, - // abi.encodePacked( - // address(contentAssetStorage), - // knowledgeAssetTokenId, - // abi.encodePacked( - // address(contentAssetStorage), - // contentAssetStorage.getAssertionIdByIndex(knowledgeAssetTokenId, 0) - // ) - // ) - // ) - // ); + if ( + paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) + ) + ) { + revert ParanetLib.KnowledgeAssetIsAPartOfOtherParanet( + knowledgeCollectionStorageContract, + knowledgeCollectionId, + paranetKnowledgeAssetsRegistry.getParanetId( + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) + ) + ); + } + // Is this correct way to do this + uint96 remainingTokenAmount = KnowledgeCollectionStorage(knowledgeCollectionStorageContract).getTokenAmount( + knowledgeCollectionId + ); - // _updateSubmittedKnowledgeAssetMetadata( - // paranetKAStorageContract, - // paranetKATokenId, - // knowledgeAssetStorageContract, - // knowledgeAssetTokenId, - // remainingTokenAmount - // ); + _updateSubmittedKnowledgeAssetMetadata( + paranetKCStorageContract, + paranetKnowledgeCollectionId, + knowledgeCollectionStorageContract, + knowledgeCollectionId, + remainingTokenAmount + ); - // emit KnowledgeAssetSubmittedToParanet( - // paranetKAStorageContract, - // paranetKATokenId, - // knowledgeAssetStorageContract, - // knowledgeAssetTokenId - // ); - // } + emit KnowledgeCollectionSubmittedToParanet( + paranetKCStorageContract, + paranetKnowledgeCollectionId, + knowledgeCollectionStorageContract, + knowledgeCollectionId + ); + } // function processUpdatedKnowledgeAssetStatesMetadata( // address paranetKAStorageContract, @@ -935,38 +929,38 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // ); // } - // function _updateSubmittedKnowledgeAssetMetadata( - // address paranetKAStorageContract, - // uint256 paranetKATokenId, - // address knowledgeAssetStorageContract, - // uint256 knowledgeAssetTokenId, - // uint96 tokenAmount - // ) internal { - // ParanetsRegistry pr = paranetsRegistry; - // ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + function _updateSubmittedKnowledgeAssetMetadata( + address paranetKAStorageContract, + uint256 paranetKATokenId, + address knowledgeAssetStorageContract, + uint256 knowledgeAssetTokenId, + uint96 tokenAmount + ) internal { + ParanetsRegistry pr = paranetsRegistry; + ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - // bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); - // bytes32 knowledgeAssetId = keccak256(abi.encodePacked(knowledgeAssetStorageContract, knowledgeAssetTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 knowledgeAssetId = keccak256(abi.encodePacked(knowledgeAssetStorageContract, knowledgeAssetTokenId)); - // // Add Knowledge Asset to the KnowledgeAssetsRegistry - // paranetKnowledgeAssetsRegistry.addKnowledgeAsset( - // paranetId, - // knowledgeAssetStorageContract, - // knowledgeAssetTokenId, - // msg.sender - // ); + // Add Knowledge Asset to the KnowledgeAssetsRegistry + paranetKnowledgeAssetsRegistry.addKnowledgeAsset( + paranetId, + knowledgeAssetStorageContract, + knowledgeAssetTokenId, + msg.sender + ); - // // Add Knowledge Asset Metadata to the ParanetsRegistry - // pr.addKnowledgeAsset(paranetId, knowledgeAssetId); - // pr.addCumulativeKnowledgeValue(paranetId, tokenAmount); + // Add Knowledge Asset Metadata to the ParanetsRegistry + pr.addKnowledgeAsset(paranetId, knowledgeAssetId); + pr.addCumulativeKnowledgeValue(paranetId, tokenAmount); - // // Add Knowledge Asset Metadata to the KnowledgeMinersRegistry - // pkmr.addSubmittedKnowledgeAsset(msg.sender, paranetId, knowledgeAssetId); - // pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); - // pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); - // pkmr.incrementTotalSubmittedKnowledgeAssetsCount(msg.sender); - // pkmr.addTotalTracSpent(msg.sender, tokenAmount); - // } + // Add Knowledge Asset Metadata to the KnowledgeMinersRegistry + pkmr.addSubmittedKnowledgeAsset(msg.sender, paranetId, knowledgeAssetId); + pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.incrementTotalSubmittedKnowledgeAssetsCount(msg.sender); + pkmr.addTotalTracSpent(msg.sender, tokenAmount); + } // function _processUpdatedKnowledgeAssetStatesMetadata( // bytes32 paranetId, @@ -1075,8 +1069,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { knowledgeCollectionStorageContractAddress ); - uint256 minted = knowledgeCollectionStorage.knowledgeCollections[collectionId].minted; - uint256 burnedCount = knowledgeCollectionStorage.knowledgeCollections[collectionId].burned.length; + uint256 minted = knowledgeCollectionStorage.knowledgeCollections[knowledgeCollectionId].minted; + uint256 burnedCount = knowledgeCollectionStorage.knowledgeCollections[knowledgeCollectionId].burned.length; uint256 activeCount = minted - burnedCount; require(activeCount != 0, "No KAs in collection"); From 1587741e856dafdbc84100b2bf9423baadd8713d Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 14 Jan 2025 16:44:17 +0100 Subject: [PATCH 04/50] Rewrite mintet and burned count getting --- contracts/paranets/Paranet.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index a3bedd31..21c9f40c 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -1069,8 +1069,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { knowledgeCollectionStorageContractAddress ); - uint256 minted = knowledgeCollectionStorage.knowledgeCollections[knowledgeCollectionId].minted; - uint256 burnedCount = knowledgeCollectionStorage.knowledgeCollections[knowledgeCollectionId].burned.length; + uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); + uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; require(activeCount != 0, "No KAs in collection"); From 742b51fe299af0395dd2f4b8bf47ced3e694f6a2 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 15 Jan 2025 13:56:24 +0100 Subject: [PATCH 05/50] change text --- contracts/paranets/Paranet.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 21c9f40c..ed33c5e3 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -882,7 +882,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } if ( - paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( + -paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) ) ) { @@ -1072,7 +1072,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; - require(activeCount != 0, "No KAs in collection"); + require(activeCount != 0, "No KAs in Collection"); uint256 startTokenId = (knowledgeCollectionId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + From a78a28cc46e82f1542b46331d15fc6f1bf49f198 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 15 Jan 2025 13:56:49 +0100 Subject: [PATCH 06/50] Fix typo --- contracts/paranets/Paranet.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index ed33c5e3..fe57d8fe 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -882,7 +882,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } if ( - -paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( + paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) ) ) { From 958aaa2194b18f4fb8b8b51962d044c2bc78bb2b Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 15 Jan 2025 14:11:00 +0100 Subject: [PATCH 07/50] Update ParanetknowledgeCollectionIdRegistry --- abi/ParanetKnowledgeAssetsRegistry.json | 2 +- contracts/libraries/ParanetLib.sol | 6 +- .../ParanetKnowledgeAssetsRegistry.sol | 75 ++++++++++--------- 3 files changed, 42 insertions(+), 41 deletions(-) diff --git a/abi/ParanetKnowledgeAssetsRegistry.json b/abi/ParanetKnowledgeAssetsRegistry.json index 817138b6..92c68f87 100644 --- a/abi/ParanetKnowledgeAssetsRegistry.json +++ b/abi/ParanetKnowledgeAssetsRegistry.json @@ -68,7 +68,7 @@ "type": "bytes32" } ], - "name": "getKnowledgeAssetLocator", + "name": "getKnowledgeCollectionLocator", "outputs": [ { "internalType": "address", diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 8c5c4c18..d2c0987b 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -135,9 +135,9 @@ library ParanetLib { uint256 totalSubmittedKnowledgeAssetsCount; } - struct KnowledgeAsset { - address knowledgeAssetStorageContract; - uint256 tokenId; + struct KnolwedgeCollection { + address knowledgeCollectionStorageContract; + uint256 knowledgeCollectionTokenId; address minerAddress; bytes32 paranetId; } diff --git a/contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol index 2d6043fe..b831b3ca 100644 --- a/contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol @@ -7,12 +7,12 @@ import {INamed} from "../../interfaces/INamed.sol"; import {IVersioned} from "../../interfaces/IVersioned.sol"; import {ParanetLib} from "../../libraries/ParanetLib.sol"; -contract ParanetKnowledgeAssetsRegistry is INamed, IVersioned, HubDependent { - string private constant _NAME = "ParanetKnowledgeAssetsRegistry"; - string private constant _VERSION = "1.0.0"; +contract ParanetknowledgeCollectionIdRegistry is INamed, IVersioned, HubDependent { + string private constant _NAME = "ParanetknowledgeCollectionIdRegistry"; + string private constant _VERSION = "1.0.1"; // Knowledge Asset ID => Knowledge Asset On Paranet - mapping(bytes32 => ParanetLib.KnowledgeAsset) internal knowledgeAssets; + mapping(bytes32 => ParanetLib.KnolwedgeCollection) internal knolwedgeCollections; // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) HubDependent(hubAddress) {} @@ -25,63 +25,64 @@ contract ParanetKnowledgeAssetsRegistry is INamed, IVersioned, HubDependent { return _VERSION; } - function addKnowledgeAsset( + function addKnowledgeCollection( bytes32 paranetId, - address knowledgeAssetStorageContract, - uint256 tokenId, + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId, address miner ) external onlyContracts returns (bytes32) { - knowledgeAssets[keccak256(abi.encodePacked(knowledgeAssetStorageContract, tokenId))] = ParanetLib - .KnowledgeAsset({ - knowledgeAssetStorageContract: knowledgeAssetStorageContract, - tokenId: tokenId, - minerAddress: miner, - paranetId: paranetId - }); - - return keccak256(abi.encodePacked(knowledgeAssetStorageContract, tokenId)); + knolwedgeCollections[ + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) + ] = ParanetLib.KnolwedgeCollection({ + knowledgeCollectionStorageContract: knowledgeCollectionStorageContract, + knowledgeCollectionTokenId: knowledgeCollectionTokenId, + minerAddress: miner, + paranetId: paranetId + }); + + return keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); } - function removeKnowledgeAsset(bytes32 knowledgeAssetId) external onlyContracts { - delete knowledgeAssets[knowledgeAssetId]; + function removeKnowledgeCollection(bytes32 knowledgeCollectionId) external onlyContracts { + delete knolwedgeCollections[knowledgeCollectionId]; } - function isParanetKnowledgeAsset(bytes32 knowledgeAssetId) external view returns (bool) { + function isParanetKnowledgeCollection(bytes32 knolwedgeCollectionId) external view returns (bool) { return keccak256( abi.encodePacked( - knowledgeAssets[knowledgeAssetId].knowledgeAssetStorageContract, - knowledgeAssets[knowledgeAssetId].tokenId + knolwedgeCollections[knolwedgeCollectionId].knowledgeCollectionStorageContract, + knolwedgeCollections[knolwedgeCollectionId].knowledgeCollectionTokenId ) - ) == knowledgeAssetId; + ) == knolwedgeCollectionId; } - function getKnowledgeAssetObject( - bytes32 knowledgeAssetId - ) external view returns (ParanetLib.KnowledgeAsset memory) { - return knowledgeAssets[knowledgeAssetId]; + function getKnowledgeCollectionObject( + bytes32 knolwedgeCollectionId + ) external view returns (ParanetLib.KnolwedgeCollection memory) { + return knolwedgeCollections[knolwedgeCollectionId]; } - function getKnowledgeAssetLocator(bytes32 knowledgeAssetId) external view returns (address, uint256) { + function getKnowledgeCollectionLocator(bytes32 knowledgeCollectionId) external view returns (address, uint256) { return ( - knowledgeAssets[knowledgeAssetId].knowledgeAssetStorageContract, - knowledgeAssets[knowledgeAssetId].tokenId + knolwedgeCollections[knowledgeCollectionId].knowledgeCollectionStorageContract, + knolwedgeCollections[knowledgeCollectionId].knowledgeCollectionTokenId ); } - function getMinerAddress(bytes32 knowledgeAssetId) external view returns (address) { - return knowledgeAssets[knowledgeAssetId].minerAddress; + function getMinerAddress(bytes32 knowledgeCollectionId) external view returns (address) { + return knolwedgeCollections[knowledgeCollectionId].minerAddress; } - function setMinerAddress(bytes32 knowledgeAssetId, address minerAddress) external onlyContracts { - knowledgeAssets[knowledgeAssetId].minerAddress = minerAddress; + function setMinerAddress(bytes32 knowledgeCollectionId, address minerAddress) external onlyContracts { + knolwedgeCollections[knowledgeCollectionId].minerAddress = minerAddress; } - function getParanetId(bytes32 knowledgeAssetId) external view returns (bytes32) { - return knowledgeAssets[knowledgeAssetId].paranetId; + function getParanetId(bytes32 knowledgeCollectionId) external view returns (bytes32) { + return knolwedgeCollections[knowledgeCollectionId].paranetId; } - function setParanetId(bytes32 knowledgeAssetId, bytes32 paranetId) external onlyContracts { - knowledgeAssets[knowledgeAssetId].paranetId = paranetId; + function setParanetId(bytes32 knowledgeCollectionId, bytes32 paranetId) external onlyContracts { + knolwedgeCollections[knowledgeCollectionId].paranetId = paranetId; } } From 706d4550c416b94592f1a780be588f6c6a26dd50 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 15 Jan 2025 16:23:54 +0100 Subject: [PATCH 08/50] Rename asset to collection --- contracts/libraries/ParanetLib.sol | 66 +-- contracts/paranets/Paranet.sol | 464 +++++++++--------- .../paranets/ParanetIncentivesPoolFactory.sol | 45 +- .../paranets/ParanetNeuroIncentivesPool.sol | 7 +- .../ParanetKnowledgeMinersRegistry.sol | 168 +++---- .../paranets/ParanetServicesRegistry.sol | 28 +- ... ParanetknowledgeCollectionIdRegistry.sol} | 2 +- .../storage/paranets/ParanetsRegistry.sol | 133 ++--- 8 files changed, 467 insertions(+), 446 deletions(-) rename contracts/storage/paranets/{ParanetKnowledgeAssetsRegistry.sol => ParanetknowledgeCollectionIdRegistry.sol} (98%) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index d2c0987b..65ac1251 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -11,8 +11,8 @@ library ParanetLib { uint16 constant MAX_CUMULATIVE_VOTERS_WEIGHT = 10 ** 4; struct UniversalAssetLocator { - address knowledgeAssetStorageContract; - uint256 tokenId; + address knowledgeCollectionStorageContract; + uint256 knolwedgeCollectionTokenId; } enum NodesAccessPolicy { @@ -25,7 +25,7 @@ library ParanetLib { CURATED } - enum KnowledgeAssetsAccessPolicy { + enum KnowledgeCollectionsAccessPolicy { OPEN } @@ -56,13 +56,13 @@ library ParanetLib { } struct Paranet { - address paranetKAStorageContract; - uint256 paranetKATokenId; + address paranetKCStorageContract; + uint256 paranetKCTokenId; string name; string description; NodesAccessPolicy nodesAccessPolicy; MinersAccessPolicy minersAccessPolicy; - KnowledgeAssetsAccessPolicy knowledgeAssetsAccessPolicy; + KnowledgeCollectionsAccessPolicy knowledgeCollectionsAccessPolicy; uint96 cumulativeKnowledgeValue; UnorderedNamedContractDynamicSet.Set incentivesPools; Node[] curatedNodes; @@ -84,13 +84,13 @@ library ParanetLib { } struct ParanetMetadata { - address paranetKAStorageContract; - uint256 paranetKATokenId; + address paranetKCStorageContract; + uint256 paranetKCTokenId; string name; string description; NodesAccessPolicy nodesAccessPolicy; MinersAccessPolicy minersAccessPolicy; - KnowledgeAssetsAccessPolicy knowledgeAssetsAccessPolicy; + KnowledgeCollectionsAccessPolicy knowledgeCollectonsAccessPolicy; uint96 cumulativeKnowledgeValue; } @@ -100,8 +100,8 @@ library ParanetLib { } struct ParanetService { - address paranetServiceKAStorageContract; - uint256 paranetServiceKATokenId; + address paranetServiceKCStorageContract; + uint256 paranetServiceKCTokenId; string name; string description; address[] paranetServiceAddresses; @@ -109,8 +109,8 @@ library ParanetLib { } struct ParanetServiceMetadata { - address paranetServiceKAStorageContract; - uint256 paranetServiceKATokenId; + address paranetServiceKCStorageContract; + uint256 paranetServiceKCTokenId; string name; string description; address[] paranetServiceAddresses; @@ -119,11 +119,11 @@ library ParanetLib { struct KnowledgeMiner { address addr; uint96 totalTracSpent; - uint256 totalSubmittedKnowledgeAssetsCount; - mapping(bytes32 => bytes32[]) submittedKnowledgeAssets; - mapping(bytes32 => mapping(bytes32 => uint256)) submittedKnowledgeAssetsIndexes; - mapping(bytes32 => UpdatingKnowledgeAssetState[]) updatingKnowledgeAssetStates; - mapping(bytes32 => mapping(bytes32 => uint256)) updatingKnowledgeAssetStateIndexes; + uint256 totalSubmittedKnowledgeCollectionCount; + mapping(bytes32 => bytes32[]) submittedKnowledgeCollections; + mapping(bytes32 => mapping(bytes32 => uint256)) submittedKnowledgeACollectionIndexes; + mapping(bytes32 => UpdatingKnowledgeCollectionState[]) updatingKnowledgeCollectionStates; + mapping(bytes32 => mapping(bytes32 => uint256)) updatingKnowledgeCollectionStateIndexes; mapping(bytes32 => uint96) cumulativeTracSpent; mapping(bytes32 => uint96) unrewardedTracSpent; mapping(bytes32 => uint256) cumulativeAwardedNeuro; @@ -132,7 +132,7 @@ library ParanetLib { struct KnowledgeMinerMetadata { address addr; uint96 totalTracSpent; - uint256 totalSubmittedKnowledgeAssetsCount; + uint256 totalSubmittedKnowledgeCollectionsCount; } struct KnolwedgeCollection { @@ -142,8 +142,8 @@ library ParanetLib { bytes32 paranetId; } - struct UpdatingKnowledgeAssetState { - address knowledgeAssetStorageContract; + struct UpdatingKnowledgeCollectionState { + address knowledgeCollectionStorageContract; uint256 tokenId; bytes32 assertionId; uint96 updateTokenAmount; @@ -171,7 +171,10 @@ library ParanetLib { uint256 claimedNeuro; } - error ParanetHasAlreadyBeenRegistered(address knowledgeAssetStorageAddress, uint256 tokenId); + error ParanetHasAlreadyBeenRegistered( + address knowledgeCollectionStorageAddress, + uint256 knowledgeCollectionTokenId + ); error InvalidParanetNodesAccessPolicy( ParanetLib.NodesAccessPolicy[] expectedAccessPolicies, ParanetLib.NodesAccessPolicy actualAccessPolicy @@ -197,17 +200,20 @@ library ParanetLib { ); error ParanetCuratedMinerAccessRequestDoesntExist(bytes32 paranetId, address miner); error ParanetIncentivesPoolAlreadyExists( - address knowledgeAssetStorageAddress, - uint256 tokenId, + address knowledgeCollectionStorageAddress, + uint256 knowledgeCollectionTokenId, string poolType, address poolAddress ); - error ParanetDoesntExist(address knowledgeAssetStorageAddress, uint256 tokenId); - error ParanetServiceHasAlreadyBeenRegistered(address knowledgeAssetStorageAddress, uint256 tokenId); - error ParanetServiceDoesntExist(address knowledgeAssetStorageAddress, uint256 tokenId); - error KnowledgeAssetIsAPartOfOtherParanet( - address paranetKnowledgeAssetStorageContract, - uint256 paranetTokenId, + error ParanetDoesntExist(address knowledgeCollectionStorageAddress, uint256 knowledgeCollectionTokenId); + error ParanetServiceHasAlreadyBeenRegistered( + address knowledgeCollectionStorageAddress, + uint256 knowledgeCollectionTokenId + ); + error ParanetServiceDoesntExist(address knowledgeCollectionStorageAddress, uint256 knowledgeCollectionTokenId); + error KnowledgeCollectionIsAPartOfOtherParanet( + address paranetKnowledgeCollectionStorageAddress, + uint256 paranetKnowledgeCollectionTokenId, bytes32 paranetId ); error NoRewardAvailable(bytes32 paranetId, address claimer); diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index fe57d8fe..2f2b61bc 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; -import {ParanetKnowledgeAssetsRegistry} from "../storage/paranets/ParanetKnowledgeAssetsRegistry.sol"; +import {ParanetKnowledgeCollectionsRegistry} from "../storage/paranets/ParanetKnowledgeCollectionRegistry.sol"; import {ParanetKnowledgeMinersRegistry} from "../storage/paranets/ParanetKnowledgeMinersRegistry.sol"; import {ParanetsRegistry} from "../storage/paranets/ParanetsRegistry.sol"; import {ParanetServicesRegistry} from "../storage/paranets/ParanetServicesRegistry.sol"; @@ -19,66 +19,66 @@ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetRegistered( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, string paranetName, string paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, ParanetLib.MinersAccessPolicy minersAccessPolicy, - ParanetLib.KnowledgeAssetsAccessPolicy knowledgeAssetsAccessPolicy + ParanetLib.KnowledgeCollectionsAccessPolicy knowledgeCollectionsAccessPolicy ); event ParanetCuratedNodeAdded( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, uint72 identityId ); event ParanetCuratedNodeRemoved( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, uint72 identityId ); event ParanetCuratedNodeJoinRequestCreated( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, uint72 identityId ); event ParanetCuratedNodeJoinRequestAccepted( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, uint72 identityId ); event ParanetCuratedNodeJoinRequestRejected( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, uint72 identityId ); event ParanetIncetivesPoolDeployed( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, ParanetLib.IncentivesPool incentivesPool ); event ParanetMetadataUpdated( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, string newParanetName, string newParanetDescription ); event ParanetServiceAdded( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, - address indexed paranetServiceKAStorageContract, - uint256 paranetServiceKATokenId + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, + address indexed paranetServiceKCStorageContract, + uint256 paranetServiceKCTokenId ); event ParanetServiceRegistered( - address indexed paranetServiceKAStorageContract, - uint256 indexed paranetServiceKATokenId, + address indexed paranetServiceKCStorageContract, + uint256 indexed paranetServiceKCTokenId, string paranetServiceName, string paranetServiceDescription, address[] paranetServiceAddresses ); event ParanetServiceMetadataUpdated( - address indexed paranetServiceKAStorageContract, - uint256 indexed paranetServiceKATokenId, + address indexed paranetServiceKCStorageContract, + uint256 indexed paranetServiceKCTokenId, string newParanetServiceName, string newParanetServiceDescription, address[] newParanetServiceAddresses @@ -90,28 +90,28 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 knowledgeCollectionId ); event ParanetCuratedMinerAdded( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, address minerAddress ); event ParanetCuratedMinerRemoved( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, address minerAddress ); event ParanetCuratedMinerAccessRequestCreated( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, address minerAddress ); event ParanetCuratedMinerAccessRequestAccepted( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, address minerAddress ); event ParanetCuratedMinerAccessRequestRejected( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, address minerAddress ); @@ -121,15 +121,18 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ParanetsRegistry public paranetsRegistry; ParanetServicesRegistry public paranetServicesRegistry; ParanetKnowledgeMinersRegistry public paranetKnowledgeMinersRegistry; - ParanetKnowledgeAssetsRegistry public paranetKnowledgeAssetsRegistry; + ParanetKnowledgeCollectionsRegistry public paranetKnowledgeCollectionsRegistry; ProfileStorage public profileStorage; IdentityStorage public identityStorage; // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) ContractStatus(hubAddress) {} - modifier onlyKnowledgeCollectionOwner(address knowledgeAssetStorageContract, uint256 knowledgeAssetTokenId) { - _checkKnowledgeCollectionOwner(knowledgeAssetStorageContract, knowledgeAssetTokenId); + modifier onlyKnowledgeCollectionOwner( + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId + ) { + _checkKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId); _; } @@ -141,8 +144,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { paranetKnowledgeMinersRegistry = ParanetKnowledgeMinersRegistry( hub.getContractAddress("ParanetKnowledgeMinersRegistry") ); - paranetKnowledgeAssetsRegistry = ParanetKnowledgeAssetsRegistry( - hub.getContractAddress("ParanetKnowledgeAssetsRegistry") + paranetKnowledgeCollectionsRegistry = ParanetKnowledgeCollectionsRegistry( + hub.getContractAddress("ParanetKnowledgeCollectionsRegistry") ); } @@ -155,75 +158,75 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function registerParanet( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, string calldata paranetName, string calldata paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, ParanetLib.MinersAccessPolicy minersAccessPolicy - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) returns (bytes32) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) returns (bytes32) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetHasAlreadyBeenRegistered(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetHasAlreadyBeenRegistered(paranetKCStorageContract, paranetKCTokenId); } emit ParanetRegistered( - paranetKAStorageContract, - paranetKATokenId, + paranetKCStorageContract, + paranetKCTokenId, paranetName, paranetDescription, nodesAccessPolicy, minersAccessPolicy, - ParanetLib.KnowledgeAssetsAccessPolicy.OPEN + ParanetLib.KnowledgeCollectionsAccessPolicy.OPEN ); return pr.registerParanet( - paranetKAStorageContract, - paranetKATokenId, + paranetKCStorageContract, + paranetKCTokenId, paranetName, paranetDescription, nodesAccessPolicy, minersAccessPolicy, - ParanetLib.KnowledgeAssetsAccessPolicy.OPEN + ParanetLib.KnowledgeCollectionsAccessPolicy.OPEN ); } function updateParanetMetadata( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, string calldata paranetName, string calldata paranetDescription - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } pr.setName(paranetId, paranetName); pr.setDescription(paranetId, paranetDescription); - emit ParanetMetadataUpdated(paranetKAStorageContract, paranetKATokenId, paranetName, paranetDescription); + emit ParanetMetadataUpdated(paranetKCStorageContract, paranetKCTokenId, paranetName, paranetDescription); } function addParanetCuratedNodes( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, uint72[] calldata identityIds - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; ProfileStorage ps = profileStorage; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -247,7 +250,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addCuratedNode(paranetId, identityIds[i], ps.getNodeId(identityIds[i])); - emit ParanetCuratedNodeAdded(paranetKAStorageContract, paranetKATokenId, identityIds[i]); + emit ParanetCuratedNodeAdded(paranetKCStorageContract, paranetKCTokenId, identityIds[i]); unchecked { i++; @@ -256,16 +259,16 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function removeParanetCuratedNodes( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, uint72[] calldata identityIds - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -285,7 +288,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.removeCuratedNode(paranetId, identityIds[i]); - emit ParanetCuratedNodeRemoved(paranetKAStorageContract, paranetKATokenId, identityIds[i]); + emit ParanetCuratedNodeRemoved(paranetKCStorageContract, paranetKCTokenId, identityIds[i]); unchecked { i++; @@ -293,13 +296,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } } - function requestParanetCuratedNodeAccess(address paranetKAStorageContract, uint256 paranetKATokenId) external { + function requestParanetCuratedNodeAccess(address paranetKCStorageContract, uint256 paranetKCTokenId) external { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -336,20 +339,20 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addNodeJoinRequest(paranetId, identityId, ParanetLib.RequestStatus.PENDING); - emit ParanetCuratedNodeJoinRequestCreated(paranetKAStorageContract, paranetKATokenId, identityId); + emit ParanetCuratedNodeJoinRequestCreated(paranetKCStorageContract, paranetKCTokenId, identityId); } function approveCuratedNode( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, uint72 identityId - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -387,21 +390,21 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); pr.addCuratedNode(paranetId, identityId, profileStorage.getNodeId(identityId)); - emit ParanetCuratedNodeJoinRequestAccepted(paranetKAStorageContract, paranetKATokenId, identityId); - emit ParanetCuratedNodeAdded(paranetKAStorageContract, paranetKATokenId, identityId); + emit ParanetCuratedNodeJoinRequestAccepted(paranetKCStorageContract, paranetKCTokenId, identityId); + emit ParanetCuratedNodeAdded(paranetKCStorageContract, paranetKCTokenId, identityId); } function rejectCuratedNode( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, uint72 identityId - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -438,58 +441,58 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ParanetLib.RequestStatus.REJECTED ); - emit ParanetCuratedNodeJoinRequestRejected(paranetKAStorageContract, paranetKATokenId, identityId); + emit ParanetCuratedNodeJoinRequestRejected(paranetKCStorageContract, paranetKCTokenId, identityId); } function addParanetServices( - address paranetKAStorageContract, - uint256 paranetKATokenId, - ParanetLib.UniversalAssetLocator[] calldata services - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + address paranetKCStorageContract, + uint256 paranetKCTokenId, + ParanetLib.UniversalCollectionLocator[] calldata services + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetServicesRegistry psr = paranetServicesRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } for (uint256 i; i < services.length; ) { if ( !psr.paranetServiceExists( - keccak256(abi.encodePacked(services[i].knowledgeAssetStorageContract, services[i].tokenId)) + keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) ) ) { revert ParanetLib.ParanetServiceDoesntExist( - services[i].knowledgeAssetStorageContract, + services[i].knowledgeCollectionStorageContract, services[i].tokenId ); } - _checkKnowledgeCollectionOwner(services[i].knowledgeAssetStorageContract, services[i].tokenId); + _checkKnowledgeCollectionOwner(services[i].knowledgeCollectionStorageContract, services[i].tokenId); if ( pr.isServiceImplemented( paranetId, - keccak256(abi.encodePacked(services[i].knowledgeAssetStorageContract, services[i].tokenId)) + keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) ) ) { revert ParanetLib.ParanetServiceHasAlreadyBeenAdded( paranetId, - keccak256(abi.encodePacked(services[i].knowledgeAssetStorageContract, services[i].tokenId)) + keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) ); } pr.addService( paranetId, - keccak256(abi.encodePacked(services[i].knowledgeAssetStorageContract, services[i].tokenId)) + keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) ); emit ParanetServiceAdded( - paranetKAStorageContract, - paranetKATokenId, - services[i].knowledgeAssetStorageContract, + paranetKCStorageContract, + paranetKCTokenId, + services[i].knowledgeCollectionStorageContract, services[i].tokenId ); @@ -500,32 +503,32 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function registerParanetService( - address paranetServiceKAStorageContract, - uint256 paranetServiceKATokenId, + address paranetServiceKCStorageContract, + uint256 paranetServiceKCTokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses ) external - onlyKnowledgeCollectionOwner(paranetServiceKAStorageContract, paranetServiceKATokenId) + onlyKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId) returns (bytes32) { ParanetServicesRegistry psr = paranetServicesRegistry; bytes32 paranetServiceId = keccak256( - abi.encodePacked(paranetServiceKAStorageContract, paranetServiceKATokenId) + abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId) ); if (psr.paranetServiceExists(paranetServiceId)) { revert ParanetLib.ParanetServiceHasAlreadyBeenRegistered( - paranetServiceKAStorageContract, - paranetServiceKATokenId + paranetServiceKCStorageContract, + paranetServiceKCTokenId ); } emit ParanetServiceRegistered( - paranetServiceKAStorageContract, - paranetServiceKATokenId, + paranetServiceKCStorageContract, + paranetServiceKCTokenId, paranetServiceName, paranetServiceDescription, paranetServiceAddresses @@ -533,8 +536,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { return psr.registerParanetService( - paranetServiceKAStorageContract, - paranetServiceKATokenId, + paranetServiceKCStorageContract, + paranetServiceKCTokenId, paranetServiceName, paranetServiceDescription, paranetServiceAddresses @@ -542,20 +545,20 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function updateParanetServiceMetadata( - address paranetServiceKAStorageContract, - uint256 paranetServiceKATokenId, + address paranetServiceKCStorageContract, + uint256 paranetServiceKCTokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses - ) external onlyKnowledgeCollectionOwner(paranetServiceKAStorageContract, paranetServiceKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId) { ParanetServicesRegistry psr = paranetServicesRegistry; bytes32 paranetServiceId = keccak256( - abi.encodePacked(paranetServiceKAStorageContract, paranetServiceKATokenId) + abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId) ); if (!psr.paranetServiceExists(paranetServiceId)) { - revert ParanetLib.ParanetServiceDoesntExist(paranetServiceKAStorageContract, paranetServiceKATokenId); + revert ParanetLib.ParanetServiceDoesntExist(paranetServiceKCStorageContract, paranetServiceKCTokenId); } psr.setName(paranetServiceId, paranetServiceName); @@ -563,8 +566,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { psr.setParanetServiceAddresses(paranetServiceId, paranetServiceAddresses); emit ParanetServiceMetadataUpdated( - paranetServiceKAStorageContract, - paranetServiceKATokenId, + paranetServiceKCStorageContract, + paranetServiceKCTokenId, paranetServiceName, paranetServiceDescription, paranetServiceAddresses @@ -572,17 +575,17 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function addParanetCuratedMiners( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, address[] calldata minerAddresses - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -606,7 +609,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addKnowledgeMiner(paranetId, minerAddresses[i]); - emit ParanetCuratedMinerAdded(paranetKAStorageContract, paranetKATokenId, minerAddresses[i]); + emit ParanetCuratedMinerAdded(paranetKCStorageContract, paranetKCTokenId, minerAddresses[i]); unchecked { i++; @@ -615,16 +618,16 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } function removeParanetCuratedMiners( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, address[] calldata minerAddresses - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -644,7 +647,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.removeKnowledgeMiner(paranetId, minerAddresses[i]); - emit ParanetCuratedMinerRemoved(paranetKAStorageContract, paranetKATokenId, minerAddresses[i]); + emit ParanetCuratedMinerRemoved(paranetKCStorageContract, paranetKCTokenId, minerAddresses[i]); unchecked { i++; @@ -652,13 +655,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } } - function requestParanetCuratedMinerAccess(address paranetKAStorageContract, uint256 paranetKATokenId) external { + function requestParanetCuratedMinerAccess(address paranetKCStorageContract, uint256 paranetKCTokenId) external { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -688,20 +691,20 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addKnowledgeMinerAccessRequest(paranetId, msg.sender, ParanetLib.RequestStatus.PENDING); - emit ParanetCuratedMinerAccessRequestCreated(paranetKAStorageContract, paranetKATokenId, msg.sender); + emit ParanetCuratedMinerAccessRequestCreated(paranetKCStorageContract, paranetKCTokenId, msg.sender); } function approveCuratedMiner( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, address minerAddress - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -738,21 +741,21 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); pr.addKnowledgeMiner(paranetId, minerAddress); - emit ParanetCuratedMinerAccessRequestAccepted(paranetKAStorageContract, paranetKATokenId, minerAddress); - emit ParanetCuratedMinerAdded(paranetKAStorageContract, paranetKATokenId, minerAddress); + emit ParanetCuratedMinerAccessRequestAccepted(paranetKCStorageContract, paranetKCTokenId, minerAddress); + emit ParanetCuratedMinerAdded(paranetKCStorageContract, paranetKCTokenId, minerAddress); } function rejectCuratedMiner( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, address minerAddress - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -788,21 +791,21 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ParanetLib.RequestStatus.REJECTED ); - emit ParanetCuratedMinerAccessRequestRejected(paranetKAStorageContract, paranetKATokenId, minerAddress); + emit ParanetCuratedMinerAccessRequestRejected(paranetKCStorageContract, paranetKCTokenId, minerAddress); } - // function mintKnowledgeAsset( - // address paranetKAStorageContract, - // uint256 paranetKATokenId, - // ContentAssetStructs.AssetInputArgs calldata knowledgeAssetArgs + // function mintKnowledgeCollection( + // address paranetKCStorageContract, + // uint256 paranetKCTokenId, + // ContentCollectionStructs.CollectionInputArgs calldata knowledgeCollectionArgs // ) external returns (uint256) { // ParanetsRegistry pr = paranetsRegistry; - // bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + // bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); // // Check if Paranet exists // // If not: Throw an error // if (!pr.paranetExists(paranetId)) { - // revert ParanetLib.ParanetDoesntExist(paranetKAStorageContract, paranetKATokenId); + // revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); // } // ParanetLib.MinersAccessPolicy minersAccessPolicy = pr.getMinersAccessPolicy(paranetId); @@ -826,28 +829,28 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // } // } - // // Mint Knowledge Asset - // uint256 knowledgeAssetTokenId = contentAsset.createAssetFromContract(msg.sender, knowledgeAssetArgs); + // // Mint Knowledge Collection + // uint256 knowledgeCollectionTokenId = contentCollection.createCollectionFromContract(msg.sender, knowledgeCollectionArgs); - // _updateSubmittedKnowledgeAssetMetadata( - // paranetKAStorageContract, - // paranetKATokenId, - // address(contentAssetStorage), - // knowledgeAssetTokenId, - // knowledgeAssetArgs.tokenAmount + // _updateSubmittedKnowledgeCollectionMetadata( + // paranetKCStorageContract, + // paranetKCTokenId, + // address(contentCollectionStorage), + // knowledgeCollectionTokenId, + // knowledgeCollectionArgs.tokenAmount // ); - // emit KnowledgeAssetSubmittedToParanet( - // paranetKAStorageContract, - // paranetKATokenId, - // address(contentAssetStorage), - // knowledgeAssetTokenId + // emit KnowledgeCollectionSubmittedToParanet( + // paranetKCStorageContract, + // paranetKCTokenId, + // address(contentCollectionStorage), + // knowledgeCollectionTokenId // ); - // return knowledgeAssetTokenId; + // return knowledgeCollectionTokenId; // } - function submitKnowledgeAsset( + function submitKnowledgeCollection( address paranetKCStorageContract, uint256 paranetKnowledgeCollectionId, address knowledgeCollectionStorageContract, @@ -882,14 +885,14 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } if ( - paranetKnowledgeAssetsRegistry.isParanetKnowledgeAsset( + paranetKnowledgeCollectionsRegistry.isParanetKnowledgeCollection( keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) ) ) { - revert ParanetLib.KnowledgeAssetIsAPartOfOtherParanet( + revert ParanetLib.KnowledgeCollectionIsAPartOfOtherParanet( knowledgeCollectionStorageContract, knowledgeCollectionId, - paranetKnowledgeAssetsRegistry.getParanetId( + paranetKnowledgeCollectionsRegistry.getParanetId( keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) ) ); @@ -899,7 +902,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { knowledgeCollectionId ); - _updateSubmittedKnowledgeAssetMetadata( + _updateSubmittedKnowledgeCollectionMetadata( paranetKCStorageContract, paranetKnowledgeCollectionId, knowledgeCollectionStorageContract, @@ -915,99 +918,101 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); } - // function processUpdatedKnowledgeAssetStatesMetadata( - // address paranetKAStorageContract, - // uint256 paranetKATokenId, + // function processUpdatedKnowledgeCollectionStatesMetadata( + // address paranetKCStorageContract, + // uint256 paranetKCTokenId, // uint256 start, // uint256 end // ) external { - // bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); + // bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); - // _processUpdatedKnowledgeAssetStatesMetadata( + // _processUpdatedKnowledgeCollectionStatesMetadata( // paranetId, - // paranetKnowledgeMinersRegistry.getUpdatingKnowledgeAssetStates(msg.sender, paranetId, start, end) + // paranetKnowledgeMinersRegistry.getUpdatingKnowledgeCollectionStates(msg.sender, paranetId, start, end) // ); // } - function _updateSubmittedKnowledgeAssetMetadata( - address paranetKAStorageContract, - uint256 paranetKATokenId, - address knowledgeAssetStorageContract, - uint256 knowledgeAssetTokenId, + function _updateSubmittedKnowledgeCollectionMetadata( + address paranetKCStorageContract, + uint256 paranetKCTokenId, + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId, uint96 tokenAmount ) internal { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)); - bytes32 knowledgeAssetId = keccak256(abi.encodePacked(knowledgeAssetStorageContract, knowledgeAssetTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 knowledgeCollectionId = keccak256( + abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId) + ); - // Add Knowledge Asset to the KnowledgeAssetsRegistry - paranetKnowledgeAssetsRegistry.addKnowledgeAsset( + // Add Knowledge Collection to the KnowledgeCollectionsRegistry + paranetKnowledgeCollectionsRegistry.addKnowledgeCollection( paranetId, - knowledgeAssetStorageContract, - knowledgeAssetTokenId, + knowledgeCollectionStorageContract, + knowledgeCollectionTokenId, msg.sender ); - // Add Knowledge Asset Metadata to the ParanetsRegistry - pr.addKnowledgeAsset(paranetId, knowledgeAssetId); + // Add Knowledge Collection Metadata to the ParanetsRegistry + pr.addKnowledgeCollection(paranetId, knowledgeCollectionId); pr.addCumulativeKnowledgeValue(paranetId, tokenAmount); - // Add Knowledge Asset Metadata to the KnowledgeMinersRegistry - pkmr.addSubmittedKnowledgeAsset(msg.sender, paranetId, knowledgeAssetId); + // Add Knowledge Collection Metadata to the KnowledgeMinersRegistry + pkmr.addSubmittedKnowledgeCollection(msg.sender, paranetId, knowledgeCollectionId); pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); - pkmr.incrementTotalSubmittedKnowledgeAssetsCount(msg.sender); + pkmr.incrementTotalSubmittedKnowledgeCollectionsCount(msg.sender); pkmr.addTotalTracSpent(msg.sender, tokenAmount); } - // function _processUpdatedKnowledgeAssetStatesMetadata( + // function _processUpdatedKnowledgeCollectionStatesMetadata( // bytes32 paranetId, - // ParanetLib.UpdatingKnowledgeAssetState[] memory updatingKnowledgeAssetStates + // ParanetLib.UpdatingKnowledgeCollectionState[] memory updatingKnowledgeCollectionStates // ) internal { // ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; // ParanetsRegistry pr = paranetsRegistry; - // ContentAsset ca = contentAsset; + // ContentCollection ca = contentCollection; - // for (uint i; i < updatingKnowledgeAssetStates.length; ) { - // _checkKnowledgeAssetOwner( - // updatingKnowledgeAssetStates[i].knowledgeAssetStorageContract, - // updatingKnowledgeAssetStates[i].tokenId + // for (uint i; i < updatingKnowledgeCollectionStates.length; ) { + // _checkKnowledgeCollectionOwner( + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + // updatingKnowledgeCollectionStates[i].tokenId // ); // bool continueOuterLoop = false; - // bytes32[] memory assertionIds = ContentAssetStorage( - // updatingKnowledgeAssetStates[i].knowledgeAssetStorageContract - // ).getAssertionIds(updatingKnowledgeAssetStates[i].tokenId); + // bytes32[] memory assertionIds = ContentCollectionStorage( + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract + // ).getAssertionIds(updatingKnowledgeCollectionStates[i].tokenId); // for (uint j = assertionIds.length; j > 0; ) { - // if (assertionIds[j - 1] == updatingKnowledgeAssetStates[i].assertionId) { - // // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry - // pr.addCumulativeKnowledgeValue(paranetId, updatingKnowledgeAssetStates[i].updateTokenAmount); + // if (assertionIds[j - 1] == updatingKnowledgeCollectionStates[i].assertionId) { + // // Add Knowledge Collection Token Amount Metadata to the ParanetsRegistry + // pr.addCumulativeKnowledgeValue(paranetId, updatingKnowledgeCollectionStates[i].updateTokenAmount); - // // Add Knowledge Asset Token Amount Metadata to the KnowledgeMinersRegistry + // // Add Knowledge Collection Token Amount Metadata to the KnowledgeMinersRegistry // pkmr.addCumulativeTracSpent( // msg.sender, // paranetId, - // updatingKnowledgeAssetStates[i].updateTokenAmount + // updatingKnowledgeCollectionStates[i].updateTokenAmount // ); // pkmr.addUnrewardedTracSpent( // msg.sender, // paranetId, - // updatingKnowledgeAssetStates[i].updateTokenAmount + // updatingKnowledgeCollectionStates[i].updateTokenAmount // ); - // pkmr.addTotalTracSpent(msg.sender, updatingKnowledgeAssetStates[i].updateTokenAmount); + // pkmr.addTotalTracSpent(msg.sender, updatingKnowledgeCollectionStates[i].updateTokenAmount); - // pkmr.removeUpdatingKnowledgeAssetState( + // pkmr.removeUpdatingKnowledgeCollectionState( // msg.sender, // paranetId, // keccak256( // abi.encodePacked( - // updatingKnowledgeAssetStates[i].knowledgeAssetStorageContract, - // updatingKnowledgeAssetStates[i].tokenId, - // updatingKnowledgeAssetStates[i].assertionId + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + // updatingKnowledgeCollectionStates[i].tokenId, + // updatingKnowledgeCollectionStates[i].assertionId // ) // ) // ); @@ -1029,15 +1034,15 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // continue; // } - // try ca.cancelAssetStateUpdateFromContract(updatingKnowledgeAssetStates[i].tokenId) { - // pkmr.removeUpdatingKnowledgeAssetState( + // try ca.cancelCollectionStateUpdateFromContract(updatingKnowledgeCollectionStates[i].tokenId) { + // pkmr.removeUpdatingKnowledgeCollectionState( // msg.sender, // paranetId, // keccak256( // abi.encodePacked( - // updatingKnowledgeAssetStates[i].knowledgeAssetStorageContract, - // updatingKnowledgeAssetStates[i].tokenId, - // updatingKnowledgeAssetStates[i].assertionId + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + // updatingKnowledgeCollectionStates[i].tokenId, + // updatingKnowledgeCollectionStates[i].assertionId // ) // ) // ); @@ -1047,23 +1052,22 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // } function _checkParanetOperator(bytes32 paranetId) internal view virtual { - (address paranetKAStorageContract, uint256 paranetKATokenId) = paranetsRegistry.getParanetKnowledgeAssetLocator( - paranetId - ); - _checkKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId); + (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry + .getParanetKnowledgeCollectionLocator(paranetId); + _checkKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId); } function _checkParanetServiceOperator(bytes32 paranetServiceId) internal view virtual { - (address paranetServiceKAStorageContract, uint256 paranetServiceKATokenId) = paranetServicesRegistry - .getParanetServiceKnowledgeAssetLocator(paranetServiceId); - _checkKnowledgeCollectionOwner(paranetServiceKAStorageContract, paranetServiceKATokenId); + (address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId) = paranetServicesRegistry + .getParanetServiceKnowledgeCollectionLocator(paranetServiceId); + _checkKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId); } function _checkKnowledgeCollectionOwner( address knowledgeCollectionStorageContractAddress, uint256 knowledgeCollectionId ) internal view virtual { - require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KA Storage"); + require(hub.isCollectionStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( knowledgeCollectionStorageContractAddress @@ -1072,7 +1076,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; - require(activeCount != 0, "No KAs in Collection"); + require(activeCount != 0, "No KCs in Collection"); uint256 startTokenId = (knowledgeCollectionId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index 2708a19d..7ab7a301 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -14,8 +14,8 @@ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IInitializable { event ParanetIncetivesPoolDeployed( - address indexed paranetKAStorageContract, - uint256 indexed paranetKATokenId, + address indexed paranetKCStorageContract, + uint256 indexed paranetKCTokenId, ParanetLib.IncentivesPool incentivesPool ); @@ -27,8 +27,11 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) ContractStatus(hubAddress) {} - modifier onlyKnowledgeAssetOwner(address knowledgeAssetStorageContract, uint256 knowledgeAssetTokenId) { - _checkKnowledgeAssetOwner(knowledgeAssetStorageContract, knowledgeAssetTokenId); + modifier onlyKnowledgeCollectionOwner( + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId + ) { + _checkKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId); _; } @@ -45,27 +48,27 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn } function deployNeuroIncentivesPool( - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, uint256 tracToNeuroEmissionMultiplier, uint16 paranetOperatorRewardPercentage, uint16 paranetIncentivizationProposalVotersRewardPercentage - ) external onlyKnowledgeAssetOwner(paranetKAStorageContract, paranetKATokenId) returns (address) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) returns (address) { Hub h = hub; ParanetsRegistry pr = paranetsRegistry; if ( pr.hasIncentivesPoolByType( - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), "Neuroweb" ) ) { revert ParanetLib.ParanetIncentivesPoolAlreadyExists( - paranetKAStorageContract, - paranetKATokenId, + paranetKCStorageContract, + paranetKCTokenId, "Neuroweb", pr.getIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), "Neuroweb" ) ); @@ -75,35 +78,35 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn address(h), h.getContractAddress("ParanetsRegistry"), h.getContractAddress("ParanetKnowledgeMinersRegistry"), - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), tracToNeuroEmissionMultiplier, paranetOperatorRewardPercentage, paranetIncentivizationProposalVotersRewardPercentage ); pr.setIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), "Neuroweb", address(incentivesPool) ); emit ParanetIncetivesPoolDeployed( - paranetKAStorageContract, - paranetKATokenId, + paranetKCStorageContract, + paranetKCTokenId, ParanetLib.IncentivesPool({poolType: "Neuroweb", addr: address(incentivesPool)}) ); return address(incentivesPool); } - function _checkKnowledgeAssetOwner( - address knowledgeAssetStorageContract, - uint256 knowledgeAssetTokenId + function _checkKnowledgeCollectionOwner( + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId ) internal view virtual { - require(hub.isAssetStorage(knowledgeAssetStorageContract), "Given address isn't KA Storage"); + require(hub.isCollectionStorage(knowledgeCollectionStorageContract), "Given address isn't KC Storage"); require( - IERC721(knowledgeAssetStorageContract).ownerOf(knowledgeAssetTokenId) == msg.sender, - "Caller isn't the owner of the KA" + IERC721(knowledgeCollectionStorageContract).ownerOf(knowledgeCollectionTokenId) == msg.sender, + "Caller isn't the owner of the KC" ); } } diff --git a/contracts/paranets/ParanetNeuroIncentivesPool.sol b/contracts/paranets/ParanetNeuroIncentivesPool.sol index 43af89a5..aced232d 100644 --- a/contracts/paranets/ParanetNeuroIncentivesPool.sol +++ b/contracts/paranets/ParanetNeuroIncentivesPool.sol @@ -244,11 +244,10 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { } function isParanetOperator(address addr) public view returns (bool) { - (address paranetKAStorageContract, uint256 paranetKATokenId) = paranetsRegistry.getParanetKnowledgeAssetLocator( - parentParanetId - ); + (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry + .getParanetKnowledgeCollectionLocator(parentParanetId); - return IERC721(paranetKAStorageContract).ownerOf(paranetKATokenId) == addr; + return IERC721(paranetKCStorageContract).ownerOf(paranetKCTokenId) == addr; } function isProposalVoter(address addr) public view returns (bool) { diff --git a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol index adb8682d..fb18e3e0 100644 --- a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol @@ -56,7 +56,7 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { ParanetLib.KnowledgeMinerMetadata({ addr: addr, totalTracSpent: knowledgeMiners[addr].totalTracSpent, - totalSubmittedKnowledgeAssetsCount: knowledgeMiners[addr].totalSubmittedKnowledgeAssetsCount + totalSubmittedKnowledgeCollectionsCount: knowledgeMiners[addr].totalSubmittedKnowledgeCollectionsCount }); } @@ -76,71 +76,74 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { knowledgeMiners[miner].totalTracSpent -= subtractedTracSpent; } - function getTotalSubmittedKnowledgeAssetsCount(address miner) external view returns (uint256) { - return knowledgeMiners[miner].totalSubmittedKnowledgeAssetsCount; + function getTotalSubmittedKnowledgeCollectionsCount(address miner) external view returns (uint256) { + return knowledgeMiners[miner].totalSubmittedKnowledgeCollectionsCount; } - function setTotalSubmittedKnowledgeAssetsCount( + function setTotalSubmittedKnowledgeCollectionsCount( address miner, - uint256 totalSubmittedKnowledgeAssetsCount + uint256 totalSubmittedKnowledgeCollectionsCount ) external onlyContracts { - knowledgeMiners[miner].totalSubmittedKnowledgeAssetsCount = totalSubmittedKnowledgeAssetsCount; + knowledgeMiners[miner].totalSubmittedKnowledgeCollectionsCount = totalSubmittedKnowledgeCollectionsCount; } - function incrementTotalSubmittedKnowledgeAssetsCount(address miner) external onlyContracts { + function incrementTotalSubmittedKnowledgeCollectionsCount(address miner) external onlyContracts { unchecked { - knowledgeMiners[miner].totalSubmittedKnowledgeAssetsCount++; + knowledgeMiners[miner].totalSubmittedKnowledgeCollectionsCount++; } } - function decrementTotalSubmittedKnowledgeAssetsCount(address miner) external onlyContracts { + function decrementTotalSubmittedKnowledgeCollectionsCount(address miner) external onlyContracts { unchecked { - knowledgeMiners[miner].totalSubmittedKnowledgeAssetsCount--; + knowledgeMiners[miner].totalSubmittedKnowledgeCollectionsCount--; } } - function addSubmittedKnowledgeAsset( + function addSubmittedKnowledgeCollection( address miner, bytes32 paranetId, - bytes32 knowledgeAssetId + bytes32 knowledgeCollectionId ) external onlyContracts { - knowledgeMiners[miner].submittedKnowledgeAssetsIndexes[paranetId][knowledgeAssetId] = knowledgeMiners[miner] - .submittedKnowledgeAssets[paranetId] - .length; - knowledgeMiners[miner].submittedKnowledgeAssets[paranetId].push(knowledgeAssetId); + knowledgeMiners[miner].submittedKnowledgeCollectionsIndexes[paranetId][knowledgeCollectionId] = knowledgeMiners[ + miner + ].submittedKnowledgeCollections[paranetId].length; + knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].push(knowledgeCollectionId); } - function removeSubmittedKnowledgeAsset( + function removeSubmittedKnowledgeCollection( address miner, bytes32 paranetId, - bytes32 knowledgeAssetId + bytes32 knowledgeCollectionId ) external onlyContracts { // 1. Move the last element to the slot of the element to remove - knowledgeMiners[miner].submittedKnowledgeAssets[paranetId][ - knowledgeMiners[miner].submittedKnowledgeAssetsIndexes[paranetId][knowledgeAssetId] - ] = knowledgeMiners[miner].submittedKnowledgeAssets[paranetId][ - knowledgeMiners[miner].submittedKnowledgeAssets[paranetId].length - 1 + knowledgeMiners[miner].submittedKnowlCollections[paranetId][ + knowledgeMiners[miner].submittedKnowledgeCollectionsIndexes[paranetId][knowledgeCollectionId] + ] = knowledgeMiners[miner].submittedKnowledgeCollections[paranetId][ + knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].length - 1 ]; // 2. Update the index of the moved element - knowledgeMiners[miner].submittedKnowledgeAssetsIndexes[paranetId][ - knowledgeMiners[miner].submittedKnowledgeAssets[paranetId][ - knowledgeMiners[miner].submittedKnowledgeAssets[paranetId].length - 1 + knowledgeMiners[miner].submittedKnowledgeACollectionIndexes[paranetId][ + knowledgeMiners[miner].submittedKnowledgeCollections[paranetId][ + knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].length - 1 ] - ] = knowledgeMiners[miner].submittedKnowledgeAssetsIndexes[paranetId][knowledgeAssetId]; + ] = knowledgeMiners[miner].submittedKnowledgeCollectionsIndexes[paranetId][knowledgeCollectionId]; // 3. Remove the last element from the array - knowledgeMiners[miner].submittedKnowledgeAssets[paranetId].pop(); + knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].pop(); // 4. Delete the index of the removed element - delete knowledgeMiners[miner].submittedKnowledgeAssetsIndexes[paranetId][knowledgeAssetId]; + delete knowledgeMiners[miner].submittedKnowledgeCollectionsIndexes[paranetId][knowledgeCollectionId]; } - function getSubmittedKnowledgeAssets(address miner, bytes32 paranetId) external view returns (bytes32[] memory) { - return knowledgeMiners[miner].submittedKnowledgeAssets[paranetId]; + function getSubmittedKnowledgeCollections( + address miner, + bytes32 paranetId + ) external view returns (bytes32[] memory) { + return knowledgeMiners[miner].submittedKnowledgeCollections[paranetId]; } - function getSubmittedKnowledgeAssets( + function getSubmittedKnowledgeCollections( address miner, bytes32 paranetId, uint256 start, @@ -148,13 +151,13 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { ) external view returns (bytes32[] memory) { require(start <= end, "Start should be <= End"); require( - end <= knowledgeMiners[miner].submittedKnowledgeAssets[paranetId].length, + end <= knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].length, "End should be <= length of Array" ); bytes32[] memory slice = new bytes32[](end - start); for (uint256 i; i < slice.length; ) { - slice[i] = knowledgeMiners[miner].submittedKnowledgeAssets[paranetId][i]; + slice[i] = knowledgeMiners[miner].submittedKnowledgeCollections[paranetId][i]; unchecked { i++; @@ -164,91 +167,92 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { return slice; } - function addUpdatingKnowledgeAssetState( + function addUpdatingKnowledgeCollectionState( address miner, bytes32 paranetId, - address knowledgeAssetStorageContract, - uint256 tokenId, - bytes32 assertionId, + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId, + bytes32 assertionId, // Should this be renamed uint96 updateTokenAmount ) external onlyContracts { - knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][ - keccak256(abi.encodePacked(knowledgeAssetStorageContract, tokenId, assertionId)) - ] = knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].length; - - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].push( - ParanetLib.UpdatingKnowledgeAssetState({ - knowledgeAssetStorageContract: knowledgeAssetStorageContract, - tokenId: tokenId, + knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][ + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId, assertionId)) + ] = knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length; + + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].push( + ParanetLib.UpdatingKnowledgeCollectionState({ + knowledgeCollectionStorageContract: knowledgeCollectionStorageContract, + knowledgeCollectionTokenId: knowledgeCollectionTokenId, assertionId: assertionId, updateTokenAmount: updateTokenAmount }) ); } - function removeUpdatingKnowledgeAssetState( + // What to do with updating this has to be reworked + function removeUpdatingKnowledgeCollectionState( address miner, bytes32 paranetId, - bytes32 knowledgeAssetStateId + bytes32 knowledgeCollectionStateId ) external onlyContracts { // 1. Move the last element to the slot of the element to remove - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][knowledgeAssetStateId] - ] = knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].length - 1 + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] + ] = knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 ]; // 2. Update the index of the moved element - knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][ keccak256( abi.encodePacked( knowledgeMiners[miner] - .updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].length - 1 - ].knowledgeAssetStorageContract, + .updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 + ].knowledgeCollectionStorageContract, knowledgeMiners[miner] - .updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].length - 1 + .updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 ].tokenId, knowledgeMiners[miner] - .updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].length - 1 + .updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 ].assertionId ) ) - ] = knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][knowledgeAssetStateId]; + ] = knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; // 3. Remove the last element from the array - knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].pop(); + knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].pop(); // 4. Delete the index of the removed element - delete knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][knowledgeAssetStateId]; + delete knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; } - function getUpdatingKnowledgeAssetStates( + function getUpdatingKnowledgeCollectionStates( address miner, bytes32 paranetId - ) external view returns (ParanetLib.UpdatingKnowledgeAssetState[] memory) { - return knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId]; + ) external view returns (ParanetLib.UpdatingKnowledgeCollectionState[] memory) { + return knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId]; } - function getUpdatingKnowledgeAssetStates( + function getUpdatingKnowledgeCollectionStates( address miner, bytes32 paranetId, uint256 start, uint256 end - ) external view returns (ParanetLib.UpdatingKnowledgeAssetState[] memory) { + ) external view returns (ParanetLib.UpdatingKnowledgeCollectionState[] memory) { require(start <= end, "Start should be <= End"); require( - end <= knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId].length, + end <= knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length, "End should be <= length of Array" ); - ParanetLib.UpdatingKnowledgeAssetState[] memory slice = new ParanetLib.UpdatingKnowledgeAssetState[]( + ParanetLib.UpdatingKnowledgeCollectionState[] memory slice = new ParanetLib.UpdatingKnowledgeCollectionState[]( end - start ); for (uint256 i; i < slice.length; ) { - slice[i] = knowledgeMiners[miner].updatingKnowledgeAssetStates[paranetId][i]; + slice[i] = knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId][i]; unchecked { i++; @@ -258,39 +262,39 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { return slice; } - function setUpdatingKnowledgeAssetUpdateTokenAmount( + function setUpdatingKnowledgeCollectionUpdateTokenAmount( address miner, bytes32 paranetId, - bytes32 knowledgeAssetStateId, + bytes32 knowledgeCollectionStateId, uint96 updateTokenAmount ) external onlyContracts { knowledgeMiners[miner] - .updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][knowledgeAssetStateId] + .updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] ].updateTokenAmount = updateTokenAmount; } - function addUpdatingKnowledgeAssetUpdateTokenAmount( + function addUpdatingKnowledgeCollectionUpdateTokenAmount( address miner, bytes32 paranetId, - bytes32 knowledgeAssetStateId, + bytes32 knowledgeCollectionStateId, uint96 addedUpdateTokenAmount ) external onlyContracts { knowledgeMiners[miner] - .updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][knowledgeAssetStateId] + .updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] ].updateTokenAmount += addedUpdateTokenAmount; } - function subUpdatingKnowledgeAssetUpdateTokenAmount( + function subUpdatingKnowledgeCollectionUpdateTokenAmount( address miner, bytes32 paranetId, - bytes32 knowledgeAssetStateId, + bytes32 knowledgeCollectionStateId, uint96 subtractedUpdateTokenAmount ) external onlyContracts { knowledgeMiners[miner] - .updatingKnowledgeAssetStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeAssetStateIndexes[paranetId][knowledgeAssetStateId] + .updatingKnowledgeCollectionStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] ].updateTokenAmount -= subtractedUpdateTokenAmount; } diff --git a/contracts/storage/paranets/ParanetServicesRegistry.sol b/contracts/storage/paranets/ParanetServicesRegistry.sol index 60ff380a..1776d82b 100644 --- a/contracts/storage/paranets/ParanetServicesRegistry.sol +++ b/contracts/storage/paranets/ParanetServicesRegistry.sol @@ -26,18 +26,18 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { } function registerParanetService( - address paranetServiceKAStorageContract, - uint256 paranetServiceKATokenId, + address paranetServiceKCStorageContract, + uint256 paranetServiceKCTokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses ) external onlyContracts returns (bytes32) { ParanetLib.ParanetService storage paranetService = paranetServices[ - keccak256(abi.encodePacked(paranetServiceKAStorageContract, paranetServiceKATokenId)) + keccak256(abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId)) ]; - paranetService.paranetServiceKAStorageContract = paranetServiceKAStorageContract; - paranetService.paranetServiceKATokenId = paranetServiceKATokenId; + paranetService.paranetServiceKCStorageContract = paranetServiceKCStorageContract; + paranetService.paranetServiceKCTokenId = paranetServiceKCTokenId; paranetService.name = paranetServiceName; paranetService.description = paranetServiceDescription; paranetService.paranetServiceAddresses = paranetServiceAddresses; @@ -50,7 +50,7 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { } } - return keccak256(abi.encodePacked(paranetServiceKAStorageContract, paranetServiceKATokenId)); + return keccak256(abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId)); } function deleteParanetService(bytes32 paranetServiceId) external onlyContracts { @@ -61,8 +61,8 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { return keccak256( abi.encodePacked( - paranetServices[paranetServiceId].paranetServiceKAStorageContract, - paranetServices[paranetServiceId].paranetServiceKATokenId + paranetServices[paranetServiceId].paranetServiceKCStorageContract, + paranetServices[paranetServiceId].paranetServiceKCTokenId ) ) == paranetServiceId; } @@ -72,18 +72,20 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { ) external view returns (ParanetLib.ParanetServiceMetadata memory) { return ParanetLib.ParanetServiceMetadata({ - paranetServiceKAStorageContract: paranetServices[paranetServiceId].paranetServiceKAStorageContract, - paranetServiceKATokenId: paranetServices[paranetServiceId].paranetServiceKATokenId, + paranetServiceKCStorageContract: paranetServices[paranetServiceId].paranetServiceKCStorageContract, + paranetServiceKCTokenId: paranetServices[paranetServiceId].paranetServiceKCTokenId, name: paranetServices[paranetServiceId].name, description: paranetServices[paranetServiceId].description, paranetServiceAddresses: paranetServices[paranetServiceId].paranetServiceAddresses }); } - function getParanetServiceKnowledgeAssetLocator(bytes32 paranetServiceId) external view returns (address, uint256) { + function getParanetServiceKnowledgeCollectionLocator( + bytes32 paranetServiceId + ) external view returns (address, uint256) { return ( - paranetServices[paranetServiceId].paranetServiceKAStorageContract, - paranetServices[paranetServiceId].paranetServiceKATokenId + paranetServices[paranetServiceId].paranetServiceKCStorageContract, + paranetServices[paranetServiceId].paranetServiceKCTokenId ); } diff --git a/contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol b/contracts/storage/paranets/ParanetknowledgeCollectionIdRegistry.sol similarity index 98% rename from contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol rename to contracts/storage/paranets/ParanetknowledgeCollectionIdRegistry.sol index b831b3ca..38dfddd9 100644 --- a/contracts/storage/paranets/ParanetKnowledgeAssetsRegistry.sol +++ b/contracts/storage/paranets/ParanetknowledgeCollectionIdRegistry.sol @@ -11,7 +11,7 @@ contract ParanetknowledgeCollectionIdRegistry is INamed, IVersioned, HubDependen string private constant _NAME = "ParanetknowledgeCollectionIdRegistry"; string private constant _VERSION = "1.0.1"; - // Knowledge Asset ID => Knowledge Asset On Paranet + // Knowledge Collection ID => Knowledge Collection On Paranet mapping(bytes32 => ParanetLib.KnolwedgeCollection) internal knolwedgeCollections; // solhint-disable-next-line no-empty-blocks diff --git a/contracts/storage/paranets/ParanetsRegistry.sol b/contracts/storage/paranets/ParanetsRegistry.sol index 558b5ae9..a1ea61da 100644 --- a/contracts/storage/paranets/ParanetsRegistry.sol +++ b/contracts/storage/paranets/ParanetsRegistry.sol @@ -29,27 +29,27 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { } function registerParanet( - address knowledgeAssetStorageContract, - uint256 tokenId, + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId, string calldata paranetName, string calldata paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, ParanetLib.MinersAccessPolicy minersAccessPolicy, - ParanetLib.KnowledgeAssetsAccessPolicy knowledgeAssetsAccessPolicy + ParanetLib.KnowledgeCollectionsAccessPolicy knowledgeColletionsAccessPolicy ) external onlyContracts returns (bytes32) { ParanetLib.Paranet storage paranet = paranets[ - keccak256(abi.encodePacked(knowledgeAssetStorageContract, tokenId)) + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) ]; - paranet.paranetKAStorageContract = knowledgeAssetStorageContract; - paranet.paranetKATokenId = tokenId; + paranet.paranetKCStorageContract = knowledgeCollectionStorageContract; + paranet.paranetKCTokenId = knowledgeCollectionTokenId; paranet.name = paranetName; paranet.description = paranetDescription; paranet.nodesAccessPolicy = nodesAccessPolicy; paranet.minersAccessPolicy = minersAccessPolicy; - paranet.knowledgeAssetsAccessPolicy = knowledgeAssetsAccessPolicy; + paranet.knowledgeCollectionsAccessPolicy = knowledgeColletionsAccessPolicy; - return keccak256(abi.encodePacked(knowledgeAssetStorageContract, tokenId)); + return keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); } function deleteParanet(bytes32 paranetId) external onlyContracts { @@ -59,7 +59,7 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { function paranetExists(bytes32 paranetId) external view returns (bool) { return keccak256( - abi.encodePacked(paranets[paranetId].paranetKAStorageContract, paranets[paranetId].paranetKATokenId) + abi.encodePacked(paranets[paranetId].paranetKCStorageContract, paranets[paranetId].paranetKCTokenId) ) == paranetId; } @@ -68,19 +68,19 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { return ParanetLib.ParanetMetadata({ - paranetKAStorageContract: paranet.paranetKAStorageContract, - paranetKATokenId: paranet.paranetKATokenId, + paranetKCStorageContract: paranet.paranetKCStorageContract, + paranetKCTokenId: paranet.paranetKCTokenId, name: paranet.name, description: paranet.description, nodesAccessPolicy: paranet.nodesAccessPolicy, minersAccessPolicy: paranet.minersAccessPolicy, - knowledgeAssetsAccessPolicy: paranet.knowledgeAssetsAccessPolicy, + knowledgeCollectionsAccessPolicy: paranet.knowledgeCollectionsAccessPolicy, cumulativeKnowledgeValue: paranet.cumulativeKnowledgeValue }); } - function getParanetKnowledgeAssetLocator(bytes32 paranetId) external view returns (address, uint256) { - return (paranets[paranetId].paranetKAStorageContract, paranets[paranetId].paranetKATokenId); + function getParanetKnowledgeCollectionLocator(bytes32 paranetId) external view returns (address, uint256) { + return (paranets[paranetId].paranetKCStorageContract, paranets[paranetId].paranetKCTokenId); } function getName(bytes32 paranetId) external view returns (string memory) { @@ -121,17 +121,17 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { paranets[paranetId].minersAccessPolicy = minersAccessPolicy; } - function getKnowledgeAssetsAccessPolicy( + function getKnowledgeCollectionsAccessPolicy( bytes32 paranetId - ) external view returns (ParanetLib.KnowledgeAssetsAccessPolicy) { - return paranets[paranetId].knowledgeAssetsAccessPolicy; + ) external view returns (ParanetLib.KnowledgeCollectionsAccessPolicy) { + return paranets[paranetId].getKnowledgeCollectionsAccessPolicy; } - function setKnowledgeAssetsAccessPolicy( + function setKnowledgeCollectionsAccessPolicy( bytes32 paranetId, - ParanetLib.KnowledgeAssetsAccessPolicy knowledgeAssetsAccessPolicy + ParanetLib.KnowledgeCollectionAccessPolicy knowledgeCollectionAccessPolicy ) external onlyContracts { - paranets[paranetId].knowledgeAssetsAccessPolicy = knowledgeAssetsAccessPolicy; + paranets[paranetId].knowledgeCollectionAccessPolicy = knowledgeCollectionAccessPolicy; } function addNodeJoinRequest( @@ -408,95 +408,98 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { return paranets[paranetId].paranetKnowledgeMinerAccessRequests[miner].length; } - function addKnowledgeAsset(bytes32 paranetId, bytes32 knowledgeAssetId) external onlyContracts { - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] = paranets[paranetId] - .knowledgeAssets + function addKnowledgeCollecton(bytes32 paranetId, bytes32 knowledgeCollectionId) external onlyContracts { + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] = paranets[paranetId] + .knowledgeCollections .length; - paranets[paranetId].knowledgeAssets.push(knowledgeAssetId); + paranets[paranetId].knowledgeCollections.push(knowledgeCollectionId); } - function removeKnowledgeAsset(bytes32 paranetId, bytes32 knowledgeAssetId) external onlyContracts { - paranets[paranetId].knowledgeAssets[ - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] - ] = paranets[paranetId].knowledgeAssets[paranets[paranetId].knowledgeAssets.length - 1]; - paranets[paranetId].registeredKnowledgeAssetsIndexes[ - paranets[paranetId].knowledgeAssets[paranets[paranetId].knowledgeAssets.length - 1] - ] = paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId]; + function removeKnowledgeCollection(bytes32 paranetId, bytes32 knowledgeCollectionId) external onlyContracts { + paranets[paranetId].knowledgeCollections[ + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] + ] = paranets[paranetId].knowledgeCollections[paranets[paranetId].knowledgeCollections.length - 1]; + paranets[paranetId].registeredKnowledgeCollectionsIndexes[ + paranets[paranetId].knowledgeCollections[paranets[paranetId].knowledgeCollections.length - 1] + ] = paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId]; - delete paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId]; - paranets[paranetId].knowledgeAssets.pop(); + delete paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId]; + paranets[paranetId].knowledgeCollections.pop(); } - function getKnowledgeAssets(bytes32 paranetId) external view returns (bytes32[] memory) { - return paranets[paranetId].knowledgeAssets; + function getKnowledgeCollections(bytes32 paranetId) external view returns (bytes32[] memory) { + return paranets[paranetId].knowledgeCollections; } - function getKnowledgeAssetsWithPagination( + function getKnowledgeCollectionsWithPagination( bytes32 paranetId, uint256 offset, uint256 limit ) external view returns (bytes32[] memory) { - if (offset >= paranets[paranetId].knowledgeAssets.length) { + if (offset >= paranets[paranetId].knowledgeCollections.length) { return new bytes32[](0); } - uint256 fetchCount = (offset + limit > paranets[paranetId].knowledgeAssets.length) - ? paranets[paranetId].knowledgeAssets.length - offset + uint256 fetchCount = (offset + limit > paranets[paranetId].knowledgeCollections.length) + ? paranets[paranetId].knowledgeCollections.length - offset : limit; - bytes32[] memory knowledgeAssets = new bytes32[](fetchCount); + bytes32[] memory knowledgeCollections = new bytes32[](fetchCount); for (uint256 i = 0; i < fetchCount; i++) { - knowledgeAssets[i] = paranets[paranetId].knowledgeAssets[offset + i]; + knowledgeCollections[i] = paranets[paranetId].knowledgeCollections[offset + i]; } - return knowledgeAssets; + return knowledgeCollections; } - function getKnowledgeAssetsStartingFromKnowledgeAssetId( + function getKnowledgeCollectionsStartingFromKnowlCollectionId( bytes32 paranetId, - bytes32 knowledgeAssetId, + bytes32 knowledgeCollectionId, uint256 limit ) external view returns (bytes32[] memory) { if ( - paranets[paranetId].knowledgeAssets[ - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] - ] != knowledgeAssetId + paranets[paranetId].knowledgeCollections[ + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] + ] != knowledgeCollectionId ) { - revert("Invalid starting KA"); + revert("Invalid starting KC"); } if ( - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] >= - paranets[paranetId].knowledgeAssets.length + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] >= + paranets[paranetId].knowledgeCollections.length ) { return new bytes32[](0); } - uint256 fetchCount = (paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] + limit > - paranets[paranetId].knowledgeAssets.length) - ? paranets[paranetId].knowledgeAssets.length - - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] + uint256 fetchCount = (paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] + limit > + paranets[paranetId].knowledgCollections.length) + ? paranets[paranetId].knowledgCollections.length - + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] : limit; - bytes32[] memory knowledgeAssets = new bytes32[](fetchCount); + bytes32[] memory knowledgeCollections = new bytes32[](fetchCount); for (uint256 i = 0; i < fetchCount; i++) { - knowledgeAssets[i] = paranets[paranetId].knowledgeAssets[ - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] + i + knowledgeCollections[i] = paranets[paranetId].knowledgeCollections[ + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] + i ]; } - return knowledgeAssets; + return knowledgeCollections; } - function getKnowledgeAssetsCount(bytes32 paranetId) external view returns (uint256) { - return paranets[paranetId].knowledgeAssets.length; + function getKnowledgeCollectionsCount(bytes32 paranetId) external view returns (uint256) { + return paranets[paranetId].knowledgeCollections.length; } - function isKnowledgeAssetRegistered(bytes32 paranetId, bytes32 knowledgeAssetId) external view returns (bool) { - return (paranets[paranetId].knowledgeAssets.length != 0 && - paranets[paranetId].knowledgeAssets[ - paranets[paranetId].registeredKnowledgeAssetsIndexes[knowledgeAssetId] + function isKnowledgeCollectionRegistered( + bytes32 paranetId, + bytes32 knowledgeCollectionId + ) external view returns (bool) { + return (paranets[paranetId].knowledgeCollections.length != 0 && + paranets[paranetId].knowledgeCollections[ + paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] ] == - knowledgeAssetId); + knowledgeCollectionId); } } From e261fb85715a6bb6d287827aa6e6049271742e7e Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 15 Jan 2025 16:34:50 +0100 Subject: [PATCH 09/50] Rename fix typos --- contracts/libraries/ParanetLib.sol | 10 +++++----- contracts/paranets/Paranet.sol | 2 +- ...ry.sol => ParanetKnowledgeCollectionsRegistry.sol} | 2 +- contracts/storage/paranets/ParanetsRegistry.sol | 11 +++++------ 4 files changed, 12 insertions(+), 13 deletions(-) rename contracts/storage/paranets/{ParanetknowledgeCollectionIdRegistry.sol => ParanetKnowledgeCollectionsRegistry.sol} (97%) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 65ac1251..1c317e5a 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -10,7 +10,7 @@ library ParanetLib { uint16 constant PERCENTAGE_SCALING_FACTOR = 10 ** 4; uint16 constant MAX_CUMULATIVE_VOTERS_WEIGHT = 10 ** 4; - struct UniversalAssetLocator { + struct UniversalCollectionLocator { address knowledgeCollectionStorageContract; uint256 knolwedgeCollectionTokenId; } @@ -78,9 +78,9 @@ library ParanetLib { mapping(address => uint256) registeredKnowledgeMinersIndexes; // Knowledge Miner address => Requests Array mapping(address => ParanetKnowledgeMinerAccessRequest[]) paranetKnowledgeMinerAccessRequests; - bytes32[] knowledgeAssets; - // Knowledge Asset ID => Index in the array - mapping(bytes32 => uint256) registeredKnowledgeAssetsIndexes; + bytes32[] knowledgeCollections; + // Knowledge Collection ID => Index in the array + mapping(bytes32 => uint256) registeredKnowledgeCollectionsIndexes; } struct ParanetMetadata { @@ -90,7 +90,7 @@ library ParanetLib { string description; NodesAccessPolicy nodesAccessPolicy; MinersAccessPolicy minersAccessPolicy; - KnowledgeCollectionsAccessPolicy knowledgeCollectonsAccessPolicy; + KnowledgeCollectionsAccessPolicy knowledgeCollectionsAccessPolicy; uint96 cumulativeKnowledgeValue; } diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 2f2b61bc..0e51ae41 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; -import {ParanetKnowledgeCollectionsRegistry} from "../storage/paranets/ParanetKnowledgeCollectionRegistry.sol"; +import {ParanetKnowledgeCollectionsRegistry} from "../storage/paranets/ParanetKnowledgeCollectionsRegistry.sol"; import {ParanetKnowledgeMinersRegistry} from "../storage/paranets/ParanetKnowledgeMinersRegistry.sol"; import {ParanetsRegistry} from "../storage/paranets/ParanetsRegistry.sol"; import {ParanetServicesRegistry} from "../storage/paranets/ParanetServicesRegistry.sol"; diff --git a/contracts/storage/paranets/ParanetknowledgeCollectionIdRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol similarity index 97% rename from contracts/storage/paranets/ParanetknowledgeCollectionIdRegistry.sol rename to contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol index 38dfddd9..ee1b934c 100644 --- a/contracts/storage/paranets/ParanetknowledgeCollectionIdRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol @@ -7,7 +7,7 @@ import {INamed} from "../../interfaces/INamed.sol"; import {IVersioned} from "../../interfaces/IVersioned.sol"; import {ParanetLib} from "../../libraries/ParanetLib.sol"; -contract ParanetknowledgeCollectionIdRegistry is INamed, IVersioned, HubDependent { +contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent { string private constant _NAME = "ParanetknowledgeCollectionIdRegistry"; string private constant _VERSION = "1.0.1"; diff --git a/contracts/storage/paranets/ParanetsRegistry.sol b/contracts/storage/paranets/ParanetsRegistry.sol index a1ea61da..829f1246 100644 --- a/contracts/storage/paranets/ParanetsRegistry.sol +++ b/contracts/storage/paranets/ParanetsRegistry.sol @@ -65,7 +65,6 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { function getParanetMetadata(bytes32 paranetId) external view returns (ParanetLib.ParanetMetadata memory) { ParanetLib.Paranet storage paranet = paranets[paranetId]; - return ParanetLib.ParanetMetadata({ paranetKCStorageContract: paranet.paranetKCStorageContract, @@ -124,14 +123,14 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { function getKnowledgeCollectionsAccessPolicy( bytes32 paranetId ) external view returns (ParanetLib.KnowledgeCollectionsAccessPolicy) { - return paranets[paranetId].getKnowledgeCollectionsAccessPolicy; + return paranets[paranetId].knowledgeCollectionsAccessPolicy; } function setKnowledgeCollectionsAccessPolicy( bytes32 paranetId, - ParanetLib.KnowledgeCollectionAccessPolicy knowledgeCollectionAccessPolicy + ParanetLib.KnowledgeCollectionsAccessPolicy knowledgeCollectionsAccessPolicy ) external onlyContracts { - paranets[paranetId].knowledgeCollectionAccessPolicy = knowledgeCollectionAccessPolicy; + paranets[paranetId].knowledgeCollectionsAccessPolicy = knowledgeCollectionsAccessPolicy; } function addNodeJoinRequest( @@ -473,8 +472,8 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { } uint256 fetchCount = (paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] + limit > - paranets[paranetId].knowledgCollections.length) - ? paranets[paranetId].knowledgCollections.length - + paranets[paranetId].knowledgeCollections.length) + ? paranets[paranetId].knowledgeCollections.length - paranets[paranetId].registeredKnowledgeCollectionsIndexes[knowledgeCollectionId] : limit; bytes32[] memory knowledgeCollections = new bytes32[](fetchCount); From 53826dc61721ff4ee8480d158dcb38e7ff3aacf7 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Thu, 16 Jan 2025 14:14:11 +0100 Subject: [PATCH 10/50] Fix renaming --- contracts/libraries/ParanetLib.sol | 10 +- contracts/paranets/Paranet.sol | 2 +- .../ParanetKnowledgeMinersRegistry.sol | 142 +++++++++--------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 1c317e5a..7ad7fc42 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -119,11 +119,11 @@ library ParanetLib { struct KnowledgeMiner { address addr; uint96 totalTracSpent; - uint256 totalSubmittedKnowledgeCollectionCount; + uint256 totalSubmittedKnowledgeCollectionsCount; mapping(bytes32 => bytes32[]) submittedKnowledgeCollections; - mapping(bytes32 => mapping(bytes32 => uint256)) submittedKnowledgeACollectionIndexes; - mapping(bytes32 => UpdatingKnowledgeCollectionState[]) updatingKnowledgeCollectionStates; - mapping(bytes32 => mapping(bytes32 => uint256)) updatingKnowledgeCollectionStateIndexes; + mapping(bytes32 => mapping(bytes32 => uint256)) submittedKnowledgeCollectionsIndexes; + mapping(bytes32 => UpdatingKnowledgeCollectionState[]) updatingKnowledgeCollectionsStates; + mapping(bytes32 => mapping(bytes32 => uint256)) updatingKnowledgeCollectionsStateIndexes; mapping(bytes32 => uint96) cumulativeTracSpent; mapping(bytes32 => uint96) unrewardedTracSpent; mapping(bytes32 => uint256) cumulativeAwardedNeuro; @@ -144,7 +144,7 @@ library ParanetLib { struct UpdatingKnowledgeCollectionState { address knowledgeCollectionStorageContract; - uint256 tokenId; + uint256 knowledgeCollectionTokenId; bytes32 assertionId; uint96 updateTokenAmount; } diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 0e51ae41..528fe918 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -1067,7 +1067,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address knowledgeCollectionStorageContractAddress, uint256 knowledgeCollectionId ) internal view virtual { - require(hub.isCollectionStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); + require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( knowledgeCollectionStorageContractAddress diff --git a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol index fb18e3e0..06e7af57 100644 --- a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol @@ -116,14 +116,14 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { bytes32 knowledgeCollectionId ) external onlyContracts { // 1. Move the last element to the slot of the element to remove - knowledgeMiners[miner].submittedKnowlCollections[paranetId][ + knowledgeMiners[miner].submittedKnowledgeCollections[paranetId][ knowledgeMiners[miner].submittedKnowledgeCollectionsIndexes[paranetId][knowledgeCollectionId] ] = knowledgeMiners[miner].submittedKnowledgeCollections[paranetId][ knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].length - 1 ]; // 2. Update the index of the moved element - knowledgeMiners[miner].submittedKnowledgeACollectionIndexes[paranetId][ + knowledgeMiners[miner].submittedKnowledgeCollectionsIndexes[paranetId][ knowledgeMiners[miner].submittedKnowledgeCollections[paranetId][ knowledgeMiners[miner].submittedKnowledgeCollections[paranetId].length - 1 ] @@ -175,11 +175,11 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { bytes32 assertionId, // Should this be renamed uint96 updateTokenAmount ) external onlyContracts { - knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionsStateIndexes[paranetId][ keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId, assertionId)) - ] = knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length; + ] = knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId].length; - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].push( + knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId].push( ParanetLib.UpdatingKnowledgeCollectionState({ knowledgeCollectionStorageContract: knowledgeCollectionStorageContract, knowledgeCollectionTokenId: knowledgeCollectionTokenId, @@ -190,50 +190,50 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { } // What to do with updating this has to be reworked - function removeUpdatingKnowledgeCollectionState( - address miner, - bytes32 paranetId, - bytes32 knowledgeCollectionStateId - ) external onlyContracts { - // 1. Move the last element to the slot of the element to remove - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] - ] = knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 - ]; - - // 2. Update the index of the moved element - knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][ - keccak256( - abi.encodePacked( - knowledgeMiners[miner] - .updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 - ].knowledgeCollectionStorageContract, - knowledgeMiners[miner] - .updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 - ].tokenId, - knowledgeMiners[miner] - .updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 - ].assertionId - ) - ) - ] = knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; - - // 3. Remove the last element from the array - knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].pop(); - - // 4. Delete the index of the removed element - delete knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; - } + // function removeUpdatingKnowledgeCollectionState( + // address miner, + // bytes32 paranetId, + // bytes32 knowledgeCollectionStateId + // ) external onlyContracts { + // // 1. Move the last element to the slot of the element to remove + // knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId][knowledgeCollectionStateId] + // ] = knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId].length - 1 + // ]; + + // // 2. Update the index of the moved element + // knowledgeMiners[miner].updatingKnowledgeCollectionsStateIndexes[paranetId][ + // keccak256( + // abi.encodePacked( + // knowledgeMiners[miner] + // .updatingKnowledgeCollectionStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 + // ].knowledgeCollectionStorageContract, + // knowledgeMiners[miner] + // .updatingKnowledgeCollectionStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 + // ].tokenId, + // knowledgeMiners[miner] + // .updatingKnowledgeCollectionStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 + // ].assertionId + // ) + // ) + // ] = knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; + + // // 3. Remove the last element from the array + // knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].pop(); + + // // 4. Delete the index of the removed element + // delete knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; + // } function getUpdatingKnowledgeCollectionStates( address miner, bytes32 paranetId ) external view returns (ParanetLib.UpdatingKnowledgeCollectionState[] memory) { - return knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId]; + return knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId]; } function getUpdatingKnowledgeCollectionStates( @@ -244,7 +244,7 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { ) external view returns (ParanetLib.UpdatingKnowledgeCollectionState[] memory) { require(start <= end, "Start should be <= End"); require( - end <= knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length, + end <= knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId].length, "End should be <= length of Array" ); @@ -252,7 +252,7 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { end - start ); for (uint256 i; i < slice.length; ) { - slice[i] = knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId][i]; + slice[i] = knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId][i]; unchecked { i++; @@ -262,29 +262,29 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { return slice; } - function setUpdatingKnowledgeCollectionUpdateTokenAmount( - address miner, - bytes32 paranetId, - bytes32 knowledgeCollectionStateId, - uint96 updateTokenAmount - ) external onlyContracts { - knowledgeMiners[miner] - .updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] - ].updateTokenAmount = updateTokenAmount; - } - - function addUpdatingKnowledgeCollectionUpdateTokenAmount( - address miner, - bytes32 paranetId, - bytes32 knowledgeCollectionStateId, - uint96 addedUpdateTokenAmount - ) external onlyContracts { - knowledgeMiners[miner] - .updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] - ].updateTokenAmount += addedUpdateTokenAmount; - } + // function setUpdatingKnowledgeCollectionUpdateTokenAmount( + // address miner, + // bytes32 paranetId, + // bytes32 knowledgeCollectionStateId, + // uint96 updateTokenAmount + // ) external onlyContracts { + // knowledgeMiners[miner] + // .updatingKnowledgeCollectionsStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] + // ].updateTokenAmount = updateTokenAmount; + // } + + // function addUpdatingKnowledgeCollectionUpdateTokenAmount( + // address miner, + // bytes32 paranetId, + // bytes32 knowledgeCollectionStateId, + // uint96 addedUpdateTokenAmount + // ) external onlyContracts { + // knowledgeMiners[miner] + // .updatingKnowledgeCollectionsStates[paranetId][ + // knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] + // ].updateTokenAmount += addedUpdateTokenAmount; + // } function subUpdatingKnowledgeCollectionUpdateTokenAmount( address miner, @@ -293,8 +293,8 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { uint96 subtractedUpdateTokenAmount ) external onlyContracts { knowledgeMiners[miner] - .updatingKnowledgeCollectionStates[paranetId][ - knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] + .updatingKnowledgeCollectionsStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionsStateIndexes[paranetId][knowledgeCollectionStateId] ].updateTokenAmount -= subtractedUpdateTokenAmount; } From 3e7489470ee42f961044ca484a176261aa808c38 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Thu, 16 Jan 2025 14:50:52 +0100 Subject: [PATCH 11/50] fixes --- contracts/libraries/ParanetLib.sol | 2 +- contracts/paranets/Paranet.sol | 39 ++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 7ad7fc42..4a011a80 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -12,7 +12,7 @@ library ParanetLib { struct UniversalCollectionLocator { address knowledgeCollectionStorageContract; - uint256 knolwedgeCollectionTokenId; + uint256 knowledgeCollectionTokenId; } enum NodesAccessPolicy { diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 528fe918..d3392c11 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -461,39 +461,62 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { for (uint256 i; i < services.length; ) { if ( !psr.paranetServiceExists( - keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) + keccak256( + abi.encodePacked( + services[i].knowledgeCollectionStorageContract, + services[i].knowledgeCollectionTokenId + ) + ) ) ) { revert ParanetLib.ParanetServiceDoesntExist( services[i].knowledgeCollectionStorageContract, - services[i].tokenId + services[i].knowledgeCollectionTokenId ); } - _checkKnowledgeCollectionOwner(services[i].knowledgeCollectionStorageContract, services[i].tokenId); + _checkKnowledgeCollectionOwner( + services[i].knowledgeCollectionStorageContract, + services[i].knowledgeCollectionTokenId + ); if ( pr.isServiceImplemented( paranetId, - keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) + keccak256( + abi.encodePacked( + services[i].knowledgeCollectionStorageContract, + services[i].knowledgeCollectionTokenId + ) + ) ) ) { revert ParanetLib.ParanetServiceHasAlreadyBeenAdded( paranetId, - keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) + keccak256( + abi.encodePacked( + services[i].knowledgeCollectionStorageContract, + services[i].knowledgeCollectionTokenId + ) + ) ); } pr.addService( paranetId, - keccak256(abi.encodePacked(services[i].knowledgeCollectionStorageContract, services[i].tokenId)) + keccak256( + abi.encodePacked( + services[i].knowledgeCollectionStorageContract, + services[i].knowledgeCollectionTokenId + ) + ) ); emit ParanetServiceAdded( paranetKCStorageContract, paranetKCTokenId, services[i].knowledgeCollectionStorageContract, - services[i].tokenId + services[i].knowledgeCollectionTokenId ); unchecked { @@ -956,7 +979,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); // Add Knowledge Collection Metadata to the ParanetsRegistry - pr.addKnowledgeCollection(paranetId, knowledgeCollectionId); + pr.addKnowledgeCollection(paranetId, knowledgeCollectionId); // ??? pr.addCumulativeKnowledgeValue(paranetId, tokenAmount); // Add Knowledge Collection Metadata to the KnowledgeMinersRegistry From a214adf19e674e0b70028ada2746c98b138f3a04 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Thu, 16 Jan 2025 14:52:13 +0100 Subject: [PATCH 12/50] Fix _updateSubmittedKnowledgeCollectionMetadata --- contracts/paranets/Paranet.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index d3392c11..e9b1e11a 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -979,7 +979,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); // Add Knowledge Collection Metadata to the ParanetsRegistry - pr.addKnowledgeCollection(paranetId, knowledgeCollectionId); // ??? + pr.addKnowledgeCollecton(paranetId, knowledgeCollectionId); pr.addCumulativeKnowledgeValue(paranetId, tokenAmount); // Add Knowledge Collection Metadata to the KnowledgeMinersRegistry From f4cb2ebde063f099bba8d5259a8595402c7ed480 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 12:31:23 +0100 Subject: [PATCH 13/50] Make paranet easier to count and discover --- .../storage/paranets/ParanetsRegistry.sol | 69 +++++++++++++++++-- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/contracts/storage/paranets/ParanetsRegistry.sol b/contracts/storage/paranets/ParanetsRegistry.sol index 829f1246..8917f7c8 100644 --- a/contracts/storage/paranets/ParanetsRegistry.sol +++ b/contracts/storage/paranets/ParanetsRegistry.sol @@ -12,8 +12,11 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { using UnorderedNamedContractDynamicSet for UnorderedNamedContractDynamicSet.Set; string private constant _NAME = "ParanetsRegistry"; - string private constant _VERSION = "1.0.0"; + string private constant _VERSION = "1.0.1"; + bytes32[] private paranetIds; + + mapping(bytes32 => uint256) internal paranetIdsMapping; // Paranet ID => Paranet Object mapping(bytes32 => ParanetLib.Paranet) internal paranets; @@ -37,9 +40,9 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { ParanetLib.MinersAccessPolicy minersAccessPolicy, ParanetLib.KnowledgeCollectionsAccessPolicy knowledgeColletionsAccessPolicy ) external onlyContracts returns (bytes32) { - ParanetLib.Paranet storage paranet = paranets[ - keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) - ]; + bytes32 paranetId = keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); + + ParanetLib.Paranet storage paranet = paranets[paranetId]; paranet.paranetKCStorageContract = knowledgeCollectionStorageContract; paranet.paranetKCTokenId = knowledgeCollectionTokenId; @@ -49,11 +52,25 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { paranet.minersAccessPolicy = minersAccessPolicy; paranet.knowledgeCollectionsAccessPolicy = knowledgeColletionsAccessPolicy; + paranetIds.push(paranetId); + paranetIdsMapping[paranetId] = paranetIds.length - 1; + return keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); } function deleteParanet(bytes32 paranetId) external onlyContracts { delete paranets[paranetId]; + uint256 indexToRemove = paranetIdsMapping[paranetId]; + uint256 lastIndex = paranetIds.length - 1; + if (indexToRemove != lastIndex) { + bytes32 lastParanetId = paranetIds[lastIndex]; + + paranetIds[indexToRemove] = lastParanetId; + paranetIdsMapping[lastParanetId] = indexToRemove; + } + + paranetIds.pop(); + delete paranetIdsMapping[paranetId]; } function paranetExists(bytes32 paranetId) external view returns (bool) { @@ -501,4 +518,48 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { ] == knowledgeCollectionId); } + + function getParanetsCount() external view returns (uint256) { + return paranetIds.length; + } + + function getParanetIdAtIndex(uint256 index) external view returns (bytes32) { + require(index < paranetIds.length, "Index out of range"); + return paranetIds[index]; + } + + function getAllParanetIds() external view returns (bytes32[] memory) { + return paranetIds; + } + + function getParanetIds(uint256 offset, uint256 limit) external view returns (bytes32[] memory) { + // If offset is past the end of the array, return an empty array + if (offset >= paranetIds.length) { + return new bytes32[](0); + } + + uint256 end = offset + limit; + if (end > paranetIds.length) { + end = paranetIds.length; + } + + bytes32[] memory ids = new bytes32[](end - offset); + + for (uint256 i = offset; i < end; i++) { + ids[i - offset] = paranetIds[i]; + } + + return ids; + } + + function getParanetIdsMapping(bytes32 paranetId) external view returns (uint256) { + require( + keccak256( + abi.encodePacked(paranets[paranetId].paranetKCStorageContract, paranets[paranetId].paranetKCTokenId) + ) == paranetId, + "Paranet not found" + ); + + return paranetIdsMapping[paranetId]; + } } From d7f28e6bfebd0378626d915b34171781642e3924 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 13:23:06 +0100 Subject: [PATCH 14/50] Add getKnowledgeCollectionLocators batch getter --- .../ParanetKnowledgeCollectionsRegistry.sol | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol index ee1b934c..2afab151 100644 --- a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol @@ -70,6 +70,25 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent ); } + function getKnowledgeCollectionLocators( + bytes32[] calldata knowledgeCollectionIds + ) external view returns (ParanetLib.UniversalCollectionLocator[] memory) { + uint256 length = knowledgeCollectionIds.length; + + ParanetLib.UniversalCollectionLocator[] memory locators = new ParanetLib.UniversalCollectionLocator[](length); + + for (uint256 i = 0; i < length; i++) { + bytes32 id = knowledgeCollectionIds[i]; + + locators[i] = ParanetLib.UniversalCollectionLocator({ + knowledgeCollectionStorageContract: knolwedgeCollections[id].knowledgeCollectionStorageContract, + knowledgeCollectionTokenId: knolwedgeCollections[id].knowledgeCollectionTokenId + }); + } + + return locators; + } + function getMinerAddress(bytes32 knowledgeCollectionId) external view returns (address) { return knolwedgeCollections[knowledgeCollectionId].minerAddress; } From faf755168b223b930acd68fe168ea3889a9e764f Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 13:53:02 +0100 Subject: [PATCH 15/50] getKnowledgeCollectionLocatorsWithPagination --- contracts/paranets/Paranet.sol | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index e9b1e11a..bc3bd186 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -817,6 +817,20 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { emit ParanetCuratedMinerAccessRequestRejected(paranetKCStorageContract, paranetKCTokenId, minerAddress); } + function getKnowledgeCollectionLocatorsWithPagination( + bytes32 paranetId, + uint256 offset, + uint256 limit + ) external view returns (ParanetLib.UniversalCollectionLocator[] memory) { + ParanetsRegistry pr = paranetsRegistry; + + bytes32[] memory knowledgeCollections = pr.getKnowledgeCollectionsWithPagination(paranetId, offset, limit); + + ParanetKnowledgeCollectionsRegistry pkcr = paranetKnowledgeCollectionsRegistry; + + return pkcr.getKnowledgeCollectionLocators(knowledgeCollections); + } + // function mintKnowledgeCollection( // address paranetKCStorageContract, // uint256 paranetKCTokenId, From 50aa4677edff036586f4c137bb439043ecdbf9d0 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 14:29:07 +0100 Subject: [PATCH 16/50] Update ParanetNeuroIncentivesPool & ParanetIncentivesPoolFactory --- .../paranets/ParanetIncentivesPoolFactory.sol | 65 ++++++++++++------- .../paranets/ParanetNeuroIncentivesPool.sol | 23 ++++++- 2 files changed, 64 insertions(+), 24 deletions(-) diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index 7ab7a301..09c5c15c 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.20; import {Hub} from "../storage/Hub.sol"; import {ParanetsRegistry} from "../storage/paranets/ParanetsRegistry.sol"; import {ParanetNeuroIncentivesPool} from "./ParanetNeuroIncentivesPool.sol"; +import {KnowledgeCollectionStorage} from "../storage/KnowledgeCollectionStorage.sol"; import {ContractStatus} from "../abstract/ContractStatus.sol"; import {IInitializable} from "../interfaces/IInitializable.sol"; import {INamed} from "../interfaces/INamed.sol"; @@ -48,65 +49,85 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn } function deployNeuroIncentivesPool( - address paranetKCStorageContract, - uint256 paranetKCTokenId, + bool isNativeReward, + address paranetKAStorageContract, + uint256 paranetKATokenId, uint256 tracToNeuroEmissionMultiplier, uint16 paranetOperatorRewardPercentage, uint16 paranetIncentivizationProposalVotersRewardPercentage - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) returns (address) { + ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) returns (address) { Hub h = hub; ParanetsRegistry pr = paranetsRegistry; + string memory incentivesPoolType = isNativeReward ? "Neuroweb" : "NeurowebERC20"; if ( pr.hasIncentivesPoolByType( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), - "Neuroweb" + keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + incentivesPoolType ) ) { revert ParanetLib.ParanetIncentivesPoolAlreadyExists( - paranetKCStorageContract, - paranetKCTokenId, - "Neuroweb", + paranetKAStorageContract, + paranetKATokenId, + incentivesPoolType, pr.getIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), - "Neuroweb" + keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + incentivesPoolType ) ); } ParanetNeuroIncentivesPool incentivesPool = new ParanetNeuroIncentivesPool( address(h), + isNativeReward ? address(0) : h.getContractAddress(incentivesPoolType), h.getContractAddress("ParanetsRegistry"), h.getContractAddress("ParanetKnowledgeMinersRegistry"), - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), + keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), tracToNeuroEmissionMultiplier, paranetOperatorRewardPercentage, paranetIncentivizationProposalVotersRewardPercentage ); pr.setIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), - "Neuroweb", + keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + incentivesPoolType, address(incentivesPool) ); emit ParanetIncetivesPoolDeployed( - paranetKCStorageContract, - paranetKCTokenId, - ParanetLib.IncentivesPool({poolType: "Neuroweb", addr: address(incentivesPool)}) + paranetKAStorageContract, + paranetKATokenId, + ParanetLib.IncentivesPool({poolType: incentivesPoolType, addr: address(incentivesPool)}) ); return address(incentivesPool); } function _checkKnowledgeCollectionOwner( - address knowledgeCollectionStorageContract, - uint256 knowledgeCollectionTokenId + address knowledgeCollectionStorageContractAddress, + uint256 knowledgeCollectionId ) internal view virtual { - require(hub.isCollectionStorage(knowledgeCollectionStorageContract), "Given address isn't KC Storage"); - require( - IERC721(knowledgeCollectionStorageContract).ownerOf(knowledgeCollectionTokenId) == msg.sender, - "Caller isn't the owner of the KC" + require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); + + KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( + knowledgeCollectionStorageContractAddress + ); + + uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); + uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); + uint256 activeCount = minted - burnedCount; + require(activeCount != 0, "No KCs in Collection"); + + uint256 startTokenId = (knowledgeCollectionId - 1) * + knowledgeCollectionStorage.knowledgeCollectionMaxSize() + + 1; // _startTokenId() + + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( + msg.sender, + startTokenId, + minted + burnedCount ); + + require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); } } diff --git a/contracts/paranets/ParanetNeuroIncentivesPool.sol b/contracts/paranets/ParanetNeuroIncentivesPool.sol index aced232d..51303c2e 100644 --- a/contracts/paranets/ParanetNeuroIncentivesPool.sol +++ b/contracts/paranets/ParanetNeuroIncentivesPool.sol @@ -4,11 +4,12 @@ pragma solidity ^0.8.20; import {ParanetKnowledgeMinersRegistry} from "../storage/paranets/ParanetKnowledgeMinersRegistry.sol"; import {ParanetsRegistry} from "../storage/paranets/ParanetsRegistry.sol"; +import {KnowledgeCollectionStorage} from "../storage/KnowledgeCollectionStorage.sol"; import {Hub} from "../storage/Hub.sol"; import {INamed} from "../interfaces/INamed.sol"; import {IVersioned} from "../interfaces/IVersioned.sol"; import {ParanetLib} from "../libraries/ParanetLib.sol"; -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; contract ParanetNeuroIncentivesPool is INamed, IVersioned { @@ -23,6 +24,7 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { string private constant _VERSION = "1.0.0"; Hub public hub; + IERC20 public token; ParanetsRegistry public paranetsRegistry; ParanetKnowledgeMinersRegistry public paranetKnowledgeMinersRegistry; @@ -66,6 +68,7 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { // solhint-disable-next-line no-empty-blocks constructor( address hubAddress, + address rewardTokenAddress, address paranetsRegistryAddress, address knowledgeMinersRegistryAddress, bytes32 paranetId, @@ -80,6 +83,9 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { ); hub = Hub(hubAddress); + if (rewardTokenAddress != address(0)) { + token = IERC20(rewardTokenAddress); + } paranetsRegistry = ParanetsRegistry(paranetsRegistryAddress); paranetKnowledgeMinersRegistry = ParanetKnowledgeMinersRegistry(knowledgeMinersRegistryAddress); @@ -247,7 +253,20 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry .getParanetKnowledgeCollectionLocator(parentParanetId); - return IERC721(paranetKCStorageContract).ownerOf(paranetKCTokenId) == addr; + KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage(paranetKCStorageContract); + + uint256 minted = knowledgeCollectionStorage.getMinted(paranetKCTokenId); + uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(paranetKCTokenId); + uint256 activeCount = minted - burnedCount; + if (activeCount == 0) { + return false; + } + + uint256 startTokenId = (paranetKCTokenId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + 1; // _startTokenId() + + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf(addr, startTokenId, minted + burnedCount); + + return ownedCountInRange == activeCount; } function isProposalVoter(address addr) public view returns (bool) { From c08c20c3703fee67d85536673efe0ae6133688f7 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 14:29:32 +0100 Subject: [PATCH 17/50] Remove unused import from ParanetIncentivesPoolFactory --- contracts/paranets/ParanetIncentivesPoolFactory.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index 09c5c15c..b575bfdd 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -11,7 +11,6 @@ import {IInitializable} from "../interfaces/IInitializable.sol"; import {INamed} from "../interfaces/INamed.sol"; import {IVersioned} from "../interfaces/IVersioned.sol"; import {ParanetLib} from "../libraries/ParanetLib.sol"; -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IInitializable { event ParanetIncetivesPoolDeployed( From c631a53a118ea32dc3acdcb7d78063d3bd7e3a0d Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 14:40:37 +0100 Subject: [PATCH 18/50] Update KnowledgeCollection with paranet features --- contracts/KnowledgeCollection.sol | 61 +++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/contracts/KnowledgeCollection.sol b/contracts/KnowledgeCollection.sol index 1b0fd093..81de6dfd 100644 --- a/contracts/KnowledgeCollection.sol +++ b/contracts/KnowledgeCollection.sol @@ -10,6 +10,9 @@ import {KnowledgeCollectionStorage} from "./storage/KnowledgeCollectionStorage.s import {ShardingTableStorage} from "./storage/ShardingTableStorage.sol"; import {IdentityStorage} from "./storage/IdentityStorage.sol"; import {ParametersStorage} from "./storage/ParametersStorage.sol"; +import {ParanetKnowledgeCollectionsRegistry} from "./storage/paranets/ParanetKnowledgeCollectionsRegistry.sol"; +import {ParanetKnowledgeMinersRegistry} from "./storage/paranets/ParanetKnowledgeMinersRegistry.sol"; +import {ParanetsRegistry} from "./storage/paranets/ParanetsRegistry.sol"; import {KnowledgeCollectionLib} from "./libraries/KnowledgeCollectionLib.sol"; import {TokenLib} from "./libraries/TokenLib.sol"; import {IdentityLib} from "./libraries/IdentityLib.sol"; @@ -28,6 +31,9 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab AskStorage public askStorage; EpochStorage public epochStorage; PaymasterManager public paymasterManager; + ParanetKnowledgeCollectionsRegistry public paranetKnowledgeCollectionsRegistry; + ParanetKnowledgeMinersRegistry public paranetKnowledgeMinersRegistry; + ParanetsRegistry public paranetsRegistry; KnowledgeCollectionStorage public knowledgeCollectionStorage; Chronos public chronos; ShardingTableStorage public shardingTableStorage; @@ -41,6 +47,13 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab askStorage = AskStorage(hub.getContractAddress("AskStorage")); epochStorage = EpochStorage(hub.getContractAddress("EpochStorageV8")); paymasterManager = PaymasterManager(hub.getContractAddress("PaymasterManager")); + paranetKnowledgeCollectionsRegistry = ParanetKnowledgeCollectionsRegistry( + hub.getContractAddress("paranetKnowledgeCollectionsRegistry") + ); + paranetKnowledgeMinersRegistry = ParanetKnowledgeMinersRegistry( + hub.getContractAddress("ParanetKnowledgeMinersRegistry") + ); + paranetsRegistry = ParanetsRegistry(hub.getContractAddress("ParanetsRegistry")); knowledgeCollectionStorage = KnowledgeCollectionStorage( hub.getAssetStorageAddress("KnowledgeCollectionStorage") ); @@ -167,6 +180,22 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab es.addEpochProducedKnowledgeValue(publisherNodeIdentityId, currentEpoch, tokenAmount); _addTokens(tokenAmount, paymaster); + + ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; + + if (pkar.isParanetKnowledgeCollection(keccak256(abi.encodePacked(address(kcs), id)))) { + ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + + bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + + // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry + paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); + + // Add Knowledge Asset Token Amount Metadata to the KnowledgeMinersRegistry + pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addTotalTracSpent(msg.sender, tokenAmount); + } } function extendKnowledgeCollectionLifetime( @@ -192,6 +221,22 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab epochStorage.addTokensToEpochRange(1, endEpoch, endEpoch + epochs, tokenAmount); _addTokens(tokenAmount, paymaster); + + ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; + + if (pkar.isParanetKnowledgeCollection(keccak256(abi.encodePacked(address(kcs), id)))) { + ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + + bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + + // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry + paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); + + // Add Knowledge Asset Token Amount Metadata to the KnowledgeMinersRegistry + pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addTotalTracSpent(msg.sender, tokenAmount); + } } function increaseKnowledgeCollectionTokenAmount(uint256 id, uint96 tokenAmount, address paymaster) external { @@ -213,6 +258,22 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab epochStorage.addTokensToEpochRange(1, currentEpoch, endEpoch, tokenAmount); _addTokens(tokenAmount, paymaster); + + ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; + + if (pkar.isParanetKnowledgeCollection(keccak256(abi.encodePacked(address(kcs), id)))) { + ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + + bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + + // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry + paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); + + // Add Knowledge Asset Token Amount Metadata to the KnowledgeMinersRegistry + pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); + pkmr.addTotalTracSpent(msg.sender, tokenAmount); + } } function _verifySignatures( From 5d413c1a5a4d02be261bebdf0be159ec06cf8cf1 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 16:09:36 +0100 Subject: [PATCH 19/50] Implement suggested changes from review --- contracts/KnowledgeCollection.sol | 17 ++++---- contracts/libraries/ParanetLib.sol | 2 +- .../paranets/ParanetIncentivesPoolFactory.sol | 22 +++++----- .../ParanetKnowledgeCollectionsRegistry.sol | 41 +++++++++---------- .../paranets/ParanetServicesRegistry.sol | 9 ++-- .../storage/paranets/ParanetsRegistry.sol | 2 +- 6 files changed, 45 insertions(+), 48 deletions(-) diff --git a/contracts/KnowledgeCollection.sol b/contracts/KnowledgeCollection.sol index 81de6dfd..4b9ebcfb 100644 --- a/contracts/KnowledgeCollection.sol +++ b/contracts/KnowledgeCollection.sol @@ -48,7 +48,7 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab epochStorage = EpochStorage(hub.getContractAddress("EpochStorageV8")); paymasterManager = PaymasterManager(hub.getContractAddress("PaymasterManager")); paranetKnowledgeCollectionsRegistry = ParanetKnowledgeCollectionsRegistry( - hub.getContractAddress("paranetKnowledgeCollectionsRegistry") + hub.getContractAddress("ParanetKnowledgeCollectionsRegistry") ); paranetKnowledgeMinersRegistry = ParanetKnowledgeMinersRegistry( hub.getContractAddress("ParanetKnowledgeMinersRegistry") @@ -183,11 +183,10 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; - if (pkar.isParanetKnowledgeCollection(keccak256(abi.encodePacked(address(kcs), id)))) { + bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + if (pkar.isParanetKnowledgeCollection(paranetId)) { ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); - // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); @@ -224,11 +223,10 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; - if (pkar.isParanetKnowledgeCollection(keccak256(abi.encodePacked(address(kcs), id)))) { + bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + if (pkar.isParanetKnowledgeCollection(paranetId)) { ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); - // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); @@ -261,11 +259,10 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; - if (pkar.isParanetKnowledgeCollection(keccak256(abi.encodePacked(address(kcs), id)))) { + bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + if (pkar.isParanetKnowledgeCollection(paranetId)) { ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); - // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 4a011a80..be3843d4 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -135,7 +135,7 @@ library ParanetLib { uint256 totalSubmittedKnowledgeCollectionsCount; } - struct KnolwedgeCollection { + struct knowledgeCollection { address knowledgeCollectionStorageContract; uint256 knowledgeCollectionTokenId; address minerAddress; diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index b575bfdd..e460927b 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -49,28 +49,28 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn function deployNeuroIncentivesPool( bool isNativeReward, - address paranetKAStorageContract, - uint256 paranetKATokenId, + address paranetKCStorageContract, + uint256 paranetKCTokenId, uint256 tracToNeuroEmissionMultiplier, uint16 paranetOperatorRewardPercentage, uint16 paranetIncentivizationProposalVotersRewardPercentage - ) external onlyKnowledgeCollectionOwner(paranetKAStorageContract, paranetKATokenId) returns (address) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) returns (address) { Hub h = hub; ParanetsRegistry pr = paranetsRegistry; string memory incentivesPoolType = isNativeReward ? "Neuroweb" : "NeurowebERC20"; if ( pr.hasIncentivesPoolByType( - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), incentivesPoolType ) ) { revert ParanetLib.ParanetIncentivesPoolAlreadyExists( - paranetKAStorageContract, - paranetKATokenId, + paranetKCStorageContract, + paranetKCTokenId, incentivesPoolType, pr.getIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), incentivesPoolType ) ); @@ -81,21 +81,21 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn isNativeReward ? address(0) : h.getContractAddress(incentivesPoolType), h.getContractAddress("ParanetsRegistry"), h.getContractAddress("ParanetKnowledgeMinersRegistry"), - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), tracToNeuroEmissionMultiplier, paranetOperatorRewardPercentage, paranetIncentivizationProposalVotersRewardPercentage ); pr.setIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKAStorageContract, paranetKATokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), incentivesPoolType, address(incentivesPool) ); emit ParanetIncetivesPoolDeployed( - paranetKAStorageContract, - paranetKATokenId, + paranetKCStorageContract, + paranetKCTokenId, ParanetLib.IncentivesPool({poolType: incentivesPoolType, addr: address(incentivesPool)}) ); diff --git a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol index 2afab151..4f749d4c 100644 --- a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol @@ -12,7 +12,7 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent string private constant _VERSION = "1.0.1"; // Knowledge Collection ID => Knowledge Collection On Paranet - mapping(bytes32 => ParanetLib.KnolwedgeCollection) internal knolwedgeCollections; + mapping(bytes32 => ParanetLib.knowledgeCollection) internal knowledgeCollections; // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) HubDependent(hubAddress) {} @@ -31,42 +31,41 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent uint256 knowledgeCollectionTokenId, address miner ) external onlyContracts returns (bytes32) { - knolwedgeCollections[ - keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) - ] = ParanetLib.KnolwedgeCollection({ + bytes32 kcId = keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); + knowledgeCollections[kcId] = ParanetLib.knowledgeCollection({ knowledgeCollectionStorageContract: knowledgeCollectionStorageContract, knowledgeCollectionTokenId: knowledgeCollectionTokenId, minerAddress: miner, paranetId: paranetId }); - return keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); + return kcId; } function removeKnowledgeCollection(bytes32 knowledgeCollectionId) external onlyContracts { - delete knolwedgeCollections[knowledgeCollectionId]; + delete knowledgeCollections[knowledgeCollectionId]; } - function isParanetKnowledgeCollection(bytes32 knolwedgeCollectionId) external view returns (bool) { + function isParanetKnowledgeCollection(bytes32 knowledgeCollectionId) external view returns (bool) { return keccak256( abi.encodePacked( - knolwedgeCollections[knolwedgeCollectionId].knowledgeCollectionStorageContract, - knolwedgeCollections[knolwedgeCollectionId].knowledgeCollectionTokenId + knowledgeCollections[knowledgeCollectionId].knowledgeCollectionStorageContract, + knowledgeCollections[knowledgeCollectionId].knowledgeCollectionTokenId ) - ) == knolwedgeCollectionId; + ) == knowledgeCollectionId; } function getKnowledgeCollectionObject( - bytes32 knolwedgeCollectionId - ) external view returns (ParanetLib.KnolwedgeCollection memory) { - return knolwedgeCollections[knolwedgeCollectionId]; + bytes32 knowledgeCollectionId + ) external view returns (ParanetLib.knowledgeCollection memory) { + return knowledgeCollections[knowledgeCollectionId]; } function getKnowledgeCollectionLocator(bytes32 knowledgeCollectionId) external view returns (address, uint256) { return ( - knolwedgeCollections[knowledgeCollectionId].knowledgeCollectionStorageContract, - knolwedgeCollections[knowledgeCollectionId].knowledgeCollectionTokenId + knowledgeCollections[knowledgeCollectionId].knowledgeCollectionStorageContract, + knowledgeCollections[knowledgeCollectionId].knowledgeCollectionTokenId ); } @@ -81,8 +80,8 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent bytes32 id = knowledgeCollectionIds[i]; locators[i] = ParanetLib.UniversalCollectionLocator({ - knowledgeCollectionStorageContract: knolwedgeCollections[id].knowledgeCollectionStorageContract, - knowledgeCollectionTokenId: knolwedgeCollections[id].knowledgeCollectionTokenId + knowledgeCollectionStorageContract: knowledgeCollections[id].knowledgeCollectionStorageContract, + knowledgeCollectionTokenId: knowledgeCollections[id].knowledgeCollectionTokenId }); } @@ -90,18 +89,18 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent } function getMinerAddress(bytes32 knowledgeCollectionId) external view returns (address) { - return knolwedgeCollections[knowledgeCollectionId].minerAddress; + return knowledgeCollections[knowledgeCollectionId].minerAddress; } function setMinerAddress(bytes32 knowledgeCollectionId, address minerAddress) external onlyContracts { - knolwedgeCollections[knowledgeCollectionId].minerAddress = minerAddress; + knowledgeCollections[knowledgeCollectionId].minerAddress = minerAddress; } function getParanetId(bytes32 knowledgeCollectionId) external view returns (bytes32) { - return knolwedgeCollections[knowledgeCollectionId].paranetId; + return knowledgeCollections[knowledgeCollectionId].paranetId; } function setParanetId(bytes32 knowledgeCollectionId, bytes32 paranetId) external onlyContracts { - knolwedgeCollections[knowledgeCollectionId].paranetId = paranetId; + knowledgeCollections[knowledgeCollectionId].paranetId = paranetId; } } diff --git a/contracts/storage/paranets/ParanetServicesRegistry.sol b/contracts/storage/paranets/ParanetServicesRegistry.sol index 1776d82b..2088ddf6 100644 --- a/contracts/storage/paranets/ParanetServicesRegistry.sol +++ b/contracts/storage/paranets/ParanetServicesRegistry.sol @@ -32,9 +32,10 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses ) external onlyContracts returns (bytes32) { - ParanetLib.ParanetService storage paranetService = paranetServices[ - keccak256(abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId)) - ]; + bytes32 paranetServiceId = keccak256( + abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId) + ); + ParanetLib.ParanetService storage paranetService = paranetServices[paranetServiceId]; paranetService.paranetServiceKCStorageContract = paranetServiceKCStorageContract; paranetService.paranetServiceKCTokenId = paranetServiceKCTokenId; @@ -50,7 +51,7 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { } } - return keccak256(abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId)); + return paranetServiceId; } function deleteParanetService(bytes32 paranetServiceId) external onlyContracts { diff --git a/contracts/storage/paranets/ParanetsRegistry.sol b/contracts/storage/paranets/ParanetsRegistry.sol index 8917f7c8..8bcd2a5b 100644 --- a/contracts/storage/paranets/ParanetsRegistry.sol +++ b/contracts/storage/paranets/ParanetsRegistry.sol @@ -55,7 +55,7 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { paranetIds.push(paranetId); paranetIdsMapping[paranetId] = paranetIds.length - 1; - return keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); + return paranetId; } function deleteParanet(bytes32 paranetId) external onlyContracts { From f6351fedabca5bd901a46c6e5c12b436a600a435 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 16:18:27 +0100 Subject: [PATCH 20/50] Renamve ParanetLib.knowledgeCollection to ParanetLib.KnowledgeCollection --- contracts/libraries/ParanetLib.sol | 2 +- .../paranets/ParanetKnowledgeCollectionsRegistry.sol | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index be3843d4..dc4f8de5 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -135,7 +135,7 @@ library ParanetLib { uint256 totalSubmittedKnowledgeCollectionsCount; } - struct knowledgeCollection { + struct KnowledgeCollection { address knowledgeCollectionStorageContract; uint256 knowledgeCollectionTokenId; address minerAddress; diff --git a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol index 4f749d4c..be289394 100644 --- a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol @@ -12,7 +12,7 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent string private constant _VERSION = "1.0.1"; // Knowledge Collection ID => Knowledge Collection On Paranet - mapping(bytes32 => ParanetLib.knowledgeCollection) internal knowledgeCollections; + mapping(bytes32 => ParanetLib.KnowledgeCollection) internal knowledgeCollections; // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) HubDependent(hubAddress) {} @@ -32,7 +32,7 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent address miner ) external onlyContracts returns (bytes32) { bytes32 kcId = keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); - knowledgeCollections[kcId] = ParanetLib.knowledgeCollection({ + knowledgeCollections[kcId] = ParanetLib.KnowledgeCollection({ knowledgeCollectionStorageContract: knowledgeCollectionStorageContract, knowledgeCollectionTokenId: knowledgeCollectionTokenId, minerAddress: miner, @@ -58,7 +58,7 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent function getKnowledgeCollectionObject( bytes32 knowledgeCollectionId - ) external view returns (ParanetLib.knowledgeCollection memory) { + ) external view returns (ParanetLib.KnowledgeCollection memory) { return knowledgeCollections[knowledgeCollectionId]; } From 502215656866c36c96ccd7e075202bbf374e828b Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 16:46:48 +0100 Subject: [PATCH 21/50] wip --- contracts/libraries/ParanetLib.sol | 4 +- contracts/paranets/Paranet.sol | 187 +++++++++--------- .../ParanetKnowledgeMinersRegistry.sol | 14 +- 3 files changed, 103 insertions(+), 102 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index dc4f8de5..1946a1b8 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -144,8 +144,8 @@ library ParanetLib { struct UpdatingKnowledgeCollectionState { address knowledgeCollectionStorageContract; - uint256 knowledgeCollectionTokenId; - bytes32 assertionId; + uint256 knowledgeCollectionId; + bytes32 merkleRoot; // Do we need this ? uint96 updateTokenAmount; } diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index bc3bd186..c0eccec0 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -908,6 +908,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { !pr.isKnowledgeMinerRegistered(paranetId, msg.sender) ) { revert ParanetLib.ParanetCuratedMinerDoesntExist(paranetId, msg.sender); + // Should this be done in both cases why would OPEN have separeted logic ??? } else if (minersAccessPolicy == ParanetLib.MinersAccessPolicy.OPEN) { // Check if Knowledge Miner has profile // If not: Create a profile @@ -934,7 +935,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ) ); } - // Is this correct way to do this + // Is this correct way to do this ??? uint96 remainingTokenAmount = KnowledgeCollectionStorage(knowledgeCollectionStorageContract).getTokenAmount( knowledgeCollectionId ); @@ -955,19 +956,19 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); } - // function processUpdatedKnowledgeCollectionStatesMetadata( - // address paranetKCStorageContract, - // uint256 paranetKCTokenId, - // uint256 start, - // uint256 end - // ) external { - // bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + function processUpdatedKnowledgeCollectionStatesMetadata( + address paranetKCStorageContract, + uint256 paranetKCTokenId, + uint256 start, + uint256 end + ) external { + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); - // _processUpdatedKnowledgeCollectionStatesMetadata( - // paranetId, - // paranetKnowledgeMinersRegistry.getUpdatingKnowledgeCollectionStates(msg.sender, paranetId, start, end) - // ); - // } + _processUpdatedKnowledgeCollectionStatesMetadata( + paranetId, + paranetKnowledgeMinersRegistry.getUpdatingKnowledgeCollectionStates(msg.sender, paranetId, start, end) + ); + } function _updateSubmittedKnowledgeCollectionMetadata( address paranetKCStorageContract, @@ -1004,89 +1005,89 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pkmr.addTotalTracSpent(msg.sender, tokenAmount); } - // function _processUpdatedKnowledgeCollectionStatesMetadata( - // bytes32 paranetId, - // ParanetLib.UpdatingKnowledgeCollectionState[] memory updatingKnowledgeCollectionStates - // ) internal { - // ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - // ParanetsRegistry pr = paranetsRegistry; - // ContentCollection ca = contentCollection; - - // for (uint i; i < updatingKnowledgeCollectionStates.length; ) { - // _checkKnowledgeCollectionOwner( - // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, - // updatingKnowledgeCollectionStates[i].tokenId - // ); - - // bool continueOuterLoop = false; - - // bytes32[] memory assertionIds = ContentCollectionStorage( - // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract - // ).getAssertionIds(updatingKnowledgeCollectionStates[i].tokenId); - - // for (uint j = assertionIds.length; j > 0; ) { - // if (assertionIds[j - 1] == updatingKnowledgeCollectionStates[i].assertionId) { - // // Add Knowledge Collection Token Amount Metadata to the ParanetsRegistry - // pr.addCumulativeKnowledgeValue(paranetId, updatingKnowledgeCollectionStates[i].updateTokenAmount); - - // // Add Knowledge Collection Token Amount Metadata to the KnowledgeMinersRegistry - // pkmr.addCumulativeTracSpent( - // msg.sender, - // paranetId, - // updatingKnowledgeCollectionStates[i].updateTokenAmount - // ); - // pkmr.addUnrewardedTracSpent( - // msg.sender, - // paranetId, - // updatingKnowledgeCollectionStates[i].updateTokenAmount - // ); - // pkmr.addTotalTracSpent(msg.sender, updatingKnowledgeCollectionStates[i].updateTokenAmount); - - // pkmr.removeUpdatingKnowledgeCollectionState( - // msg.sender, - // paranetId, - // keccak256( - // abi.encodePacked( - // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, - // updatingKnowledgeCollectionStates[i].tokenId, - // updatingKnowledgeCollectionStates[i].assertionId - // ) - // ) - // ); - - // continueOuterLoop = true; - // break; - // } - - // unchecked { - // j--; - // } - // } + function _processUpdatedKnowledgeCollectionStatesMetadata( + bytes32 paranetId, + ParanetLib.UpdatingKnowledgeCollectionState[] memory updatingKnowledgeCollectionStates + ) internal { + ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + ParanetsRegistry pr = paranetsRegistry; + ContentCollection ca = contentCollection; - // unchecked { - // i++; - // } + for (uint i; i < updatingKnowledgeCollectionStates.length; ) { + _checkKnowledgeCollectionOwner( + updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + updatingKnowledgeCollectionStates[i].tokenId + ); - // if (continueOuterLoop) { - // continue; - // } + bool continueOuterLoop = false; + + bytes32[] memory assertionIds = ContentCollectionStorage( + updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract + ).getAssertionIds(updatingKnowledgeCollectionStates[i].tokenId); + + for (uint j = assertionIds.length; j > 0; ) { + if (assertionIds[j - 1] == updatingKnowledgeCollectionStates[i].assertionId) { + // Add Knowledge Collection Token Amount Metadata to the ParanetsRegistry + pr.addCumulativeKnowledgeValue(paranetId, updatingKnowledgeCollectionStates[i].updateTokenAmount); + + // Add Knowledge Collection Token Amount Metadata to the KnowledgeMinersRegistry + pkmr.addCumulativeTracSpent( + msg.sender, + paranetId, + updatingKnowledgeCollectionStates[i].updateTokenAmount + ); + pkmr.addUnrewardedTracSpent( + msg.sender, + paranetId, + updatingKnowledgeCollectionStates[i].updateTokenAmount + ); + pkmr.addTotalTracSpent(msg.sender, updatingKnowledgeCollectionStates[i].updateTokenAmount); + + pkmr.removeUpdatingKnowledgeCollectionState( + msg.sender, + paranetId, + keccak256( + abi.encodePacked( + updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + updatingKnowledgeCollectionStates[i].tokenId, + updatingKnowledgeCollectionStates[i].assertionId + ) + ) + ); - // try ca.cancelCollectionStateUpdateFromContract(updatingKnowledgeCollectionStates[i].tokenId) { - // pkmr.removeUpdatingKnowledgeCollectionState( - // msg.sender, - // paranetId, - // keccak256( - // abi.encodePacked( - // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, - // updatingKnowledgeCollectionStates[i].tokenId, - // updatingKnowledgeCollectionStates[i].assertionId - // ) - // ) - // ); - // // solhint-disable-next-line no-empty-blocks - // } catch {} - // } - // } + continueOuterLoop = true; + break; + } + + unchecked { + j--; + } + } + + unchecked { + i++; + } + + if (continueOuterLoop) { + continue; + } + + try ca.cancelCollectionStateUpdateFromContract(updatingKnowledgeCollectionStates[i].tokenId) { + pkmr.removeUpdatingKnowledgeCollectionState( + msg.sender, + paranetId, + keccak256( + abi.encodePacked( + updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + updatingKnowledgeCollectionStates[i].tokenId, + updatingKnowledgeCollectionStates[i].assertionId + ) + ) + ); + // solhint-disable-next-line no-empty-blocks + } catch {} + } + } function _checkParanetOperator(bytes32 paranetId) internal view virtual { (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry diff --git a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol index 06e7af57..bea36379 100644 --- a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol @@ -171,25 +171,25 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { address miner, bytes32 paranetId, address knowledgeCollectionStorageContract, - uint256 knowledgeCollectionTokenId, - bytes32 assertionId, // Should this be renamed + uint256 knowledgeCollectionId, + bytes32 merkleRoot, uint96 updateTokenAmount ) external onlyContracts { knowledgeMiners[miner].updatingKnowledgeCollectionsStateIndexes[paranetId][ - keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId, assertionId)) + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId, merkleRoot)) ] = knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId].length; knowledgeMiners[miner].updatingKnowledgeCollectionsStates[paranetId].push( ParanetLib.UpdatingKnowledgeCollectionState({ knowledgeCollectionStorageContract: knowledgeCollectionStorageContract, - knowledgeCollectionTokenId: knowledgeCollectionTokenId, - assertionId: assertionId, + knowledgeCollectionId: knowledgeCollectionId, + merkleRoot: merkleRoot, updateTokenAmount: updateTokenAmount }) ); } - // What to do with updating this has to be reworked + // If we do this on update // function removeUpdatingKnowledgeCollectionState( // address miner, // bytes32 paranetId, @@ -217,7 +217,7 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { // knowledgeMiners[miner] // .updatingKnowledgeCollectionStates[paranetId][ // knowledgeMiners[miner].updatingKnowledgeCollectionStates[paranetId].length - 1 - // ].assertionId + // ].merkleRoot // ) // ) // ] = knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId]; From 7ed374f171a769ca572a297152c7bcb02e263b57 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 17 Jan 2025 17:11:09 +0100 Subject: [PATCH 22/50] Add comments --- contracts/paranets/Paranet.sol | 2 ++ contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol | 1 + 2 files changed, 3 insertions(+) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index c0eccec0..f301a9a9 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -887,6 +887,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // return knowledgeCollectionTokenId; // } + // If asset has been updated there should be logic to update paranet kc states metadata with info about previouse state if posible function submitKnowledgeCollection( address paranetKCStorageContract, uint256 paranetKnowledgeCollectionId, @@ -1005,6 +1006,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pkmr.addTotalTracSpent(msg.sender, tokenAmount); } + // When is this used ??? function _processUpdatedKnowledgeCollectionStatesMetadata( bytes32 paranetId, ParanetLib.UpdatingKnowledgeCollectionState[] memory updatingKnowledgeCollectionStates diff --git a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol index bea36379..380a34a0 100644 --- a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol @@ -167,6 +167,7 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { return slice; } + // This should be called on update from KC function addUpdatingKnowledgeCollectionState( address miner, bytes32 paranetId, From e896651658153f0862a6ee078b928b7d301303b2 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 20 Jan 2025 13:51:29 +0100 Subject: [PATCH 23/50] Update state infor in paranet on submit and update --- contracts/KnowledgeCollection.sol | 16 +- contracts/libraries/ParanetLib.sol | 2 +- contracts/paranets/Paranet.sol | 232 ++++++++++-------- .../ParanetKnowledgeMinersRegistry.sol | 44 ++-- 4 files changed, 160 insertions(+), 134 deletions(-) diff --git a/contracts/KnowledgeCollection.sol b/contracts/KnowledgeCollection.sol index 4b9ebcfb..b88a75bc 100644 --- a/contracts/KnowledgeCollection.sol +++ b/contracts/KnowledgeCollection.sol @@ -183,9 +183,10 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; - bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); - if (pkar.isParanetKnowledgeCollection(paranetId)) { + bytes32 knowledgeCollectionId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + if (pkar.isParanetKnowledgeCollection(knowledgeCollectionId)) { ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + bytes32 paranetId = paranetKnowledgeCollectionsRegistry.getParanetId(knowledgeCollectionId); // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); @@ -194,6 +195,7 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); pkmr.addTotalTracSpent(msg.sender, tokenAmount); + pkmr.addUpdatingKnowledgeCollectionState(msg.sender, paranetId, address(kcs), id, merkleRoot, tokenAmount); } } @@ -223,9 +225,10 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; - bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); - if (pkar.isParanetKnowledgeCollection(paranetId)) { + bytes32 knowledgeCollectionId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + if (pkar.isParanetKnowledgeCollection(knowledgeCollectionId)) { ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + bytes32 paranetId = paranetKnowledgeCollectionsRegistry.getParanetId(knowledgeCollectionId); // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); @@ -259,9 +262,10 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab ParanetKnowledgeCollectionsRegistry pkar = paranetKnowledgeCollectionsRegistry; - bytes32 paranetId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); - if (pkar.isParanetKnowledgeCollection(paranetId)) { + bytes32 knowledgeCollectionId = pkar.getParanetId(keccak256(abi.encodePacked(address(kcs), id))); + if (pkar.isParanetKnowledgeCollection(knowledgeCollectionId)) { ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + bytes32 paranetId = paranetKnowledgeCollectionsRegistry.getParanetId(knowledgeCollectionId); // Add Knowledge Asset Token Amount Metadata to the ParanetsRegistry paranetsRegistry.addCumulativeKnowledgeValue(paranetId, tokenAmount); diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 1946a1b8..f4bef2a1 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -145,7 +145,7 @@ library ParanetLib { struct UpdatingKnowledgeCollectionState { address knowledgeCollectionStorageContract; uint256 knowledgeCollectionId; - bytes32 merkleRoot; // Do we need this ? + bytes32 merkleRoot; uint96 updateTokenAmount; } diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index f301a9a9..20fea616 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -15,6 +15,7 @@ import {INamed} from "../interfaces/INamed.sol"; import {IVersioned} from "../interfaces/IVersioned.sol"; import {ParanetLib} from "../libraries/ParanetLib.sol"; import {ProfileLib} from "../libraries/ProfileLib.sol"; +import {KnowledgeCollectionLib} from "../libraries/KnowledgeCollectionLib.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { @@ -888,12 +889,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // } // If asset has been updated there should be logic to update paranet kc states metadata with info about previouse state if posible + function submitKnowledgeCollection( address paranetKCStorageContract, uint256 paranetKnowledgeCollectionId, address knowledgeCollectionStorageContract, - uint256 knowledgeCollectionId - ) external onlyKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionId) { + uint256 knowledgeCollectionTokenId + ) external onlyKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionId)); @@ -925,58 +927,61 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { if ( paranetKnowledgeCollectionsRegistry.isParanetKnowledgeCollection( - keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) ) ) { revert ParanetLib.KnowledgeCollectionIsAPartOfOtherParanet( knowledgeCollectionStorageContract, - knowledgeCollectionId, + knowledgeCollectionTokenId, paranetKnowledgeCollectionsRegistry.getParanetId( - keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionId)) + keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) ) ); } // Is this correct way to do this ??? - uint96 remainingTokenAmount = KnowledgeCollectionStorage(knowledgeCollectionStorageContract).getTokenAmount( - knowledgeCollectionId - ); + KnowledgeCollectionStorage kcs = KnowledgeCollectionStorage(knowledgeCollectionStorageContract); + uint96 remainingTokenAmount = kcs.getTokenAmount(knowledgeCollectionTokenId); + KnowledgeCollectionLib.MerkleRoot[] calldata merkleRoots = kcs.getMerkleRoots(knowledgeCollectionTokenId); _updateSubmittedKnowledgeCollectionMetadata( + // Update KnowledgeMiner metadata paranetKCStorageContract, paranetKnowledgeCollectionId, knowledgeCollectionStorageContract, - knowledgeCollectionId, - remainingTokenAmount + knowledgeCollectionTokenId, + remainingTokenAmount, + merkleRoots ); emit KnowledgeCollectionSubmittedToParanet( paranetKCStorageContract, paranetKnowledgeCollectionId, knowledgeCollectionStorageContract, - knowledgeCollectionId + knowledgeCollectionTokenId ); } - function processUpdatedKnowledgeCollectionStatesMetadata( - address paranetKCStorageContract, - uint256 paranetKCTokenId, - uint256 start, - uint256 end - ) external { - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + // function processUpdatedKnowledgeCollectionStatesMetadata( + // address paranetKCStorageContract, + // uint256 paranetKCTokenId, + // uint256 start, + // uint256 end + // ) external { + // bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); - _processUpdatedKnowledgeCollectionStatesMetadata( - paranetId, - paranetKnowledgeMinersRegistry.getUpdatingKnowledgeCollectionStates(msg.sender, paranetId, start, end) - ); - } + // _processUpdatedKnowledgeCollectionStatesMetadata( + // paranetId, + // paranetKnowledgeMinersRegistry.getUpdatingKnowledgeCollectionStates(msg.sender, paranetId, start, end) + // ); + // } function _updateSubmittedKnowledgeCollectionMetadata( address paranetKCStorageContract, uint256 paranetKCTokenId, address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId, - uint96 tokenAmount + uint96 tokenAmount, + KnowledgeCollectionLib.MerkleRoot[] calldata merkleRoots ) internal { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; @@ -999,6 +1004,24 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addCumulativeKnowledgeValue(paranetId, tokenAmount); // Add Knowledge Collection Metadata to the KnowledgeMinersRegistry + for (uint256 i = 0; i < merkleRoots.length - 1; i++) { + pkmr.addUpdatingKnowledgeCollectionState( + msg.sender, + paranetId, + knowledgeCollectionStorageContract, + knowledgeCollectionTokenId, + merkleRoots[i].merkleRoot, + 0 + ); + } + pkmr.addUpdatingKnowledgeCollectionState( + msg.sender, + paranetId, + knowledgeCollectionStorageContract, + knowledgeCollectionTokenId, + merkleRoots[merkleRoots.length - 1].merkleRoot, + tokenAmount + ); pkmr.addSubmittedKnowledgeCollection(msg.sender, paranetId, knowledgeCollectionId); pkmr.addCumulativeTracSpent(msg.sender, paranetId, tokenAmount); pkmr.addUnrewardedTracSpent(msg.sender, paranetId, tokenAmount); @@ -1006,90 +1029,89 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pkmr.addTotalTracSpent(msg.sender, tokenAmount); } - // When is this used ??? - function _processUpdatedKnowledgeCollectionStatesMetadata( - bytes32 paranetId, - ParanetLib.UpdatingKnowledgeCollectionState[] memory updatingKnowledgeCollectionStates - ) internal { - ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - ParanetsRegistry pr = paranetsRegistry; - ContentCollection ca = contentCollection; - - for (uint i; i < updatingKnowledgeCollectionStates.length; ) { - _checkKnowledgeCollectionOwner( - updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, - updatingKnowledgeCollectionStates[i].tokenId - ); - - bool continueOuterLoop = false; - - bytes32[] memory assertionIds = ContentCollectionStorage( - updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract - ).getAssertionIds(updatingKnowledgeCollectionStates[i].tokenId); - - for (uint j = assertionIds.length; j > 0; ) { - if (assertionIds[j - 1] == updatingKnowledgeCollectionStates[i].assertionId) { - // Add Knowledge Collection Token Amount Metadata to the ParanetsRegistry - pr.addCumulativeKnowledgeValue(paranetId, updatingKnowledgeCollectionStates[i].updateTokenAmount); - - // Add Knowledge Collection Token Amount Metadata to the KnowledgeMinersRegistry - pkmr.addCumulativeTracSpent( - msg.sender, - paranetId, - updatingKnowledgeCollectionStates[i].updateTokenAmount - ); - pkmr.addUnrewardedTracSpent( - msg.sender, - paranetId, - updatingKnowledgeCollectionStates[i].updateTokenAmount - ); - pkmr.addTotalTracSpent(msg.sender, updatingKnowledgeCollectionStates[i].updateTokenAmount); - - pkmr.removeUpdatingKnowledgeCollectionState( - msg.sender, - paranetId, - keccak256( - abi.encodePacked( - updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, - updatingKnowledgeCollectionStates[i].tokenId, - updatingKnowledgeCollectionStates[i].assertionId - ) - ) - ); - - continueOuterLoop = true; - break; - } - - unchecked { - j--; - } - } + // function _processUpdatedKnowledgeCollectionStatesMetadata( + // bytes32 paranetId, + // ParanetLib.UpdatingKnowledgeCollectionState[] memory updatingKnowledgeCollectionStates + // ) internal { + // ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; + // ParanetsRegistry pr = paranetsRegistry; + // ContentCollection ca = contentCollection; + + // for (uint i; i < updatingKnowledgeCollectionStates.length; ) { + // _checkKnowledgeCollectionOwner( + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + // updatingKnowledgeCollectionStates[i].tokenId + // ); + + // bool continueOuterLoop = false; + + // bytes32[] memory assertionIds = ContentCollectionStorage( + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract + // ).getAssertionIds(updatingKnowledgeCollectionStates[i].tokenId); + + // for (uint j = assertionIds.length; j > 0; ) { + // if (assertionIds[j - 1] == updatingKnowledgeCollectionStates[i].assertionId) { + // // Add Knowledge Collection Token Amount Metadata to the ParanetsRegistry + // pr.addCumulativeKnowledgeValue(paranetId, updatingKnowledgeCollectionStates[i].updateTokenAmount); + + // // Add Knowledge Collection Token Amount Metadata to the KnowledgeMinersRegistry + // pkmr.addCumulativeTracSpent( + // msg.sender, + // paranetId, + // updatingKnowledgeCollectionStates[i].updateTokenAmount + // ); + // pkmr.addUnrewardedTracSpent( + // msg.sender, + // paranetId, + // updatingKnowledgeCollectionStates[i].updateTokenAmount + // ); + // pkmr.addTotalTracSpent(msg.sender, updatingKnowledgeCollectionStates[i].updateTokenAmount); + + // pkmr.removeUpdatingKnowledgeCollectionState( + // msg.sender, + // paranetId, + // keccak256( + // abi.encodePacked( + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + // updatingKnowledgeCollectionStates[i].tokenId, + // updatingKnowledgeCollectionStates[i].assertionId + // ) + // ) + // ); + + // continueOuterLoop = true; + // break; + // } + + // unchecked { + // j--; + // } + // } - unchecked { - i++; - } + // unchecked { + // i++; + // } - if (continueOuterLoop) { - continue; - } + // if (continueOuterLoop) { + // continue; + // } - try ca.cancelCollectionStateUpdateFromContract(updatingKnowledgeCollectionStates[i].tokenId) { - pkmr.removeUpdatingKnowledgeCollectionState( - msg.sender, - paranetId, - keccak256( - abi.encodePacked( - updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, - updatingKnowledgeCollectionStates[i].tokenId, - updatingKnowledgeCollectionStates[i].assertionId - ) - ) - ); - // solhint-disable-next-line no-empty-blocks - } catch {} - } - } + // try ca.cancelCollectionStateUpdateFromContract(updatingKnowledgeCollectionStates[i].tokenId) { + // pkmr.removeUpdatingKnowledgeCollectionState( + // msg.sender, + // paranetId, + // keccak256( + // abi.encodePacked( + // updatingKnowledgeCollectionStates[i].knowledgeCollectionStorageContract, + // updatingKnowledgeCollectionStates[i].tokenId, + // updatingKnowledgeCollectionStates[i].assertionId + // ) + // ) + // ); + // // solhint-disable-next-line no-empty-blocks + // } catch {} + // } + // } function _checkParanetOperator(bytes32 paranetId) internal view virtual { (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry diff --git a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol index 380a34a0..afaf7398 100644 --- a/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeMinersRegistry.sol @@ -263,29 +263,29 @@ contract ParanetKnowledgeMinersRegistry is INamed, IVersioned, HubDependent { return slice; } - // function setUpdatingKnowledgeCollectionUpdateTokenAmount( - // address miner, - // bytes32 paranetId, - // bytes32 knowledgeCollectionStateId, - // uint96 updateTokenAmount - // ) external onlyContracts { - // knowledgeMiners[miner] - // .updatingKnowledgeCollectionsStates[paranetId][ - // knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] - // ].updateTokenAmount = updateTokenAmount; - // } + function setUpdatingKnowledgeCollectionUpdateTokenAmount( + address miner, + bytes32 paranetId, + bytes32 knowledgeCollectionStateId, + uint96 updateTokenAmount + ) external onlyContracts { + knowledgeMiners[miner] + .updatingKnowledgeCollectionsStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionsStateIndexes[paranetId][knowledgeCollectionStateId] + ].updateTokenAmount = updateTokenAmount; + } - // function addUpdatingKnowledgeCollectionUpdateTokenAmount( - // address miner, - // bytes32 paranetId, - // bytes32 knowledgeCollectionStateId, - // uint96 addedUpdateTokenAmount - // ) external onlyContracts { - // knowledgeMiners[miner] - // .updatingKnowledgeCollectionsStates[paranetId][ - // knowledgeMiners[miner].updatingKnowledgeCollectionStateIndexes[paranetId][knowledgeCollectionStateId] - // ].updateTokenAmount += addedUpdateTokenAmount; - // } + function addUpdatingKnowledgeCollectionUpdateTokenAmount( + address miner, + bytes32 paranetId, + bytes32 knowledgeCollectionStateId, + uint96 addedUpdateTokenAmount + ) external onlyContracts { + knowledgeMiners[miner] + .updatingKnowledgeCollectionsStates[paranetId][ + knowledgeMiners[miner].updatingKnowledgeCollectionsStateIndexes[paranetId][knowledgeCollectionStateId] + ].updateTokenAmount += addedUpdateTokenAmount; + } function subUpdatingKnowledgeCollectionUpdateTokenAmount( address miner, From c44f28de934d6f0eb08c6c95c37678c04a6f8605 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 20 Jan 2025 14:31:33 +0100 Subject: [PATCH 24/50] Change merkleRoots to memory --- contracts/paranets/Paranet.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 20fea616..8fe20b40 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -941,10 +941,10 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // Is this correct way to do this ??? KnowledgeCollectionStorage kcs = KnowledgeCollectionStorage(knowledgeCollectionStorageContract); uint96 remainingTokenAmount = kcs.getTokenAmount(knowledgeCollectionTokenId); - KnowledgeCollectionLib.MerkleRoot[] calldata merkleRoots = kcs.getMerkleRoots(knowledgeCollectionTokenId); + KnowledgeCollectionLib.MerkleRoot[] memory merkleRoots = kcs.getMerkleRoots(knowledgeCollectionTokenId); + // Update KnowledgeMiner metadata _updateSubmittedKnowledgeCollectionMetadata( - // Update KnowledgeMiner metadata paranetKCStorageContract, paranetKnowledgeCollectionId, knowledgeCollectionStorageContract, @@ -981,7 +981,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId, uint96 tokenAmount, - KnowledgeCollectionLib.MerkleRoot[] calldata merkleRoots + KnowledgeCollectionLib.MerkleRoot[] memory merkleRoots ) internal { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; From 631ac4db2abf85cce335bc83e4853b92c19f9785 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 20 Jan 2025 15:07:06 +0100 Subject: [PATCH 25/50] Update ABI --- abi/KnowledgeCollection.json | 39 +++ abi/Paranet.json | 258 ++++++++++++------ abi/ParanetIncentivesPoolFactory.json | 17 +- ... ParanetKnowledgeCollectionsRegistry.json} | 65 +++-- abi/ParanetKnowledgeMinersRegistry.json | 107 +++----- abi/ParanetNeuroIncentivesPool.json | 18 ++ abi/ParanetServicesRegistry.json | 10 +- abi/ParanetsRegistry.json | 138 ++++++++-- 8 files changed, 450 insertions(+), 202 deletions(-) rename abi/{ParanetKnowledgeAssetsRegistry.json => ParanetKnowledgeCollectionsRegistry.json} (75%) diff --git a/abi/KnowledgeCollection.json b/abi/KnowledgeCollection.json index 3eaeebfa..79ff0586 100644 --- a/abi/KnowledgeCollection.json +++ b/abi/KnowledgeCollection.json @@ -451,6 +451,45 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "paranetKnowledgeCollectionsRegistry", + "outputs": [ + { + "internalType": "contract ParanetKnowledgeCollectionsRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paranetKnowledgeMinersRegistry", + "outputs": [ + { + "internalType": "contract ParanetKnowledgeMinersRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paranetsRegistry", + "outputs": [ + { + "internalType": "contract ParanetsRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "paymasterManager", diff --git a/abi/Paranet.json b/abi/Paranet.json index 04ce8992..2f029c96 100644 --- a/abi/Paranet.json +++ b/abi/Paranet.json @@ -42,6 +42,27 @@ "name": "InvalidParanetNodesAccessPolicy", "type": "error" }, + { + "inputs": [ + { + "internalType": "address", + "name": "paranetKnowledgeCollectionStorageAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "paranetKnowledgeCollectionTokenId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "paranetId", + "type": "bytes32" + } + ], + "name": "KnowledgeCollectionIsAPartOfOtherParanet", + "type": "error" + }, { "inputs": [ { @@ -184,12 +205,12 @@ "inputs": [ { "internalType": "address", - "name": "knowledgeAssetStorageAddress", + "name": "knowledgeCollectionStorageAddress", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" } ], @@ -200,12 +221,12 @@ "inputs": [ { "internalType": "address", - "name": "knowledgeAssetStorageAddress", + "name": "knowledgeCollectionStorageAddress", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" } ], @@ -216,12 +237,12 @@ "inputs": [ { "internalType": "address", - "name": "knowledgeAssetStorageAddress", + "name": "knowledgeCollectionStorageAddress", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" } ], @@ -248,12 +269,12 @@ "inputs": [ { "internalType": "address", - "name": "knowledgeAssetStorageAddress", + "name": "knowledgeCollectionStorageAddress", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" } ], @@ -293,29 +314,29 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "knowledgeAssetTokenId", + "name": "knowledgeCollectionId", "type": "uint256" } ], - "name": "KnowledgeAssetSubmittedToParanet", + "name": "KnowledgeCollectionSubmittedToParanet", "type": "event" }, { @@ -324,13 +345,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -349,13 +370,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -374,13 +395,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -399,13 +420,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -424,13 +445,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -449,13 +470,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -474,13 +495,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -499,13 +520,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -524,13 +545,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -549,13 +570,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -574,13 +595,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -611,13 +632,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -642,13 +663,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -677,8 +698,8 @@ }, { "indexed": false, - "internalType": "enum ParanetLib.KnowledgeAssetsAccessPolicy", - "name": "knowledgeAssetsAccessPolicy", + "internalType": "enum ParanetLib.KnowledgeCollectionsAccessPolicy", + "name": "knowledgeCollectionsAccessPolicy", "type": "uint8" } ], @@ -691,25 +712,25 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" } ], @@ -722,13 +743,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" }, { @@ -759,13 +780,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" }, { @@ -794,12 +815,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -817,12 +838,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -840,28 +861,28 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { "components": [ { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" } ], - "internalType": "struct ParanetLib.UniversalAssetLocator[]", + "internalType": "struct ParanetLib.UniversalCollectionLocator[]", "name": "services", "type": "tuple[]" } @@ -875,12 +896,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -898,12 +919,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -917,6 +938,47 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "paranetId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "getKnowledgeCollectionLocatorsWithPagination", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "knowledgeCollectionStorageContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "knowledgeCollectionTokenId", + "type": "uint256" + } + ], + "internalType": "struct ParanetLib.UniversalCollectionLocator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "hub", @@ -965,10 +1027,10 @@ }, { "inputs": [], - "name": "paranetKnowledgeAssetsRegistry", + "name": "paranetKnowledgeCollectionsRegistry", "outputs": [ { - "internalType": "contract ParanetKnowledgeAssetsRegistry", + "internalType": "contract ParanetKnowledgeCollectionsRegistry", "name": "", "type": "address" } @@ -1032,12 +1094,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -1076,12 +1138,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" }, { @@ -1115,12 +1177,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -1138,12 +1200,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -1161,12 +1223,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -1184,12 +1246,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -1207,12 +1269,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" } ], @@ -1225,12 +1287,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" } ], @@ -1269,12 +1331,40 @@ "inputs": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "paranetKnowledgeCollectionId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "knowledgeCollectionStorageContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "knowledgeCollectionTokenId", + "type": "uint256" + } + ], + "name": "submitKnowledgeCollection", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -1297,12 +1387,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" }, { diff --git a/abi/ParanetIncentivesPoolFactory.json b/abi/ParanetIncentivesPoolFactory.json index 774b2299..f3b72120 100644 --- a/abi/ParanetIncentivesPoolFactory.json +++ b/abi/ParanetIncentivesPoolFactory.json @@ -14,12 +14,12 @@ "inputs": [ { "internalType": "address", - "name": "knowledgeAssetStorageAddress", + "name": "knowledgeCollectionStorageAddress", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" }, { @@ -58,13 +58,13 @@ { "indexed": true, "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "indexed": true, "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -91,14 +91,19 @@ }, { "inputs": [ + { + "internalType": "bool", + "name": "isNativeReward", + "type": "bool" + }, { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { diff --git a/abi/ParanetKnowledgeAssetsRegistry.json b/abi/ParanetKnowledgeCollectionsRegistry.json similarity index 75% rename from abi/ParanetKnowledgeAssetsRegistry.json rename to abi/ParanetKnowledgeCollectionsRegistry.json index 92c68f87..7a654245 100644 --- a/abi/ParanetKnowledgeAssetsRegistry.json +++ b/abi/ParanetKnowledgeCollectionsRegistry.json @@ -35,12 +35,12 @@ }, { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" }, { @@ -49,7 +49,7 @@ "type": "address" } ], - "name": "addKnowledgeAsset", + "name": "addKnowledgeCollection", "outputs": [ { "internalType": "bytes32", @@ -64,7 +64,7 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], @@ -84,26 +84,57 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "knowledgeCollectionIds", + "type": "bytes32[]" + } + ], + "name": "getKnowledgeCollectionLocators", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "knowledgeCollectionStorageContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "knowledgeCollectionTokenId", + "type": "uint256" + } + ], + "internalType": "struct ParanetLib.UniversalCollectionLocator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "getKnowledgeAssetObject", + "name": "getKnowledgeCollectionObject", "outputs": [ { "components": [ { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" }, { @@ -117,7 +148,7 @@ "type": "bytes32" } ], - "internalType": "struct ParanetLib.KnowledgeAsset", + "internalType": "struct ParanetLib.KnowledgeCollection", "name": "", "type": "tuple" } @@ -129,7 +160,7 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], @@ -148,7 +179,7 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], @@ -180,11 +211,11 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "isParanetKnowledgeAsset", + "name": "isParanetKnowledgeCollection", "outputs": [ { "internalType": "bool", @@ -212,11 +243,11 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "removeKnowledgeAsset", + "name": "removeKnowledgeCollection", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -225,7 +256,7 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" }, { @@ -243,7 +274,7 @@ "inputs": [ { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" }, { diff --git a/abi/ParanetKnowledgeMinersRegistry.json b/abi/ParanetKnowledgeMinersRegistry.json index f78c7e52..f77f96fd 100644 --- a/abi/ParanetKnowledgeMinersRegistry.json +++ b/abi/ParanetKnowledgeMinersRegistry.json @@ -86,11 +86,11 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "addSubmittedKnowledgeAsset", + "name": "addSubmittedKnowledgeCollection", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -150,17 +150,17 @@ }, { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionId", "type": "uint256" }, { "internalType": "bytes32", - "name": "assertionId", + "name": "merkleRoot", "type": "bytes32" }, { @@ -169,7 +169,7 @@ "type": "uint96" } ], - "name": "addUpdatingKnowledgeAssetState", + "name": "addUpdatingKnowledgeCollectionState", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -188,7 +188,7 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetStateId", + "name": "knowledgeCollectionStateId", "type": "bytes32" }, { @@ -197,7 +197,7 @@ "type": "uint96" } ], - "name": "addUpdatingKnowledgeAssetUpdateTokenAmount", + "name": "addUpdatingKnowledgeCollectionUpdateTokenAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -210,7 +210,7 @@ "type": "address" } ], - "name": "decrementTotalSubmittedKnowledgeAssetsCount", + "name": "decrementTotalSubmittedKnowledgeCollectionsCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -300,7 +300,7 @@ }, { "internalType": "uint256", - "name": "totalSubmittedKnowledgeAssetsCount", + "name": "totalSubmittedKnowledgeCollectionsCount", "type": "uint256" } ], @@ -325,7 +325,7 @@ "type": "bytes32" } ], - "name": "getSubmittedKnowledgeAssets", + "name": "getSubmittedKnowledgeCollections", "outputs": [ { "internalType": "bytes32[]", @@ -359,7 +359,7 @@ "type": "uint256" } ], - "name": "getSubmittedKnowledgeAssets", + "name": "getSubmittedKnowledgeCollections", "outputs": [ { "internalType": "bytes32[]", @@ -378,7 +378,7 @@ "type": "address" } ], - "name": "getTotalSubmittedKnowledgeAssetsCount", + "name": "getTotalSubmittedKnowledgeCollectionsCount", "outputs": [ { "internalType": "uint256", @@ -443,35 +443,25 @@ "internalType": "bytes32", "name": "paranetId", "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" } ], - "name": "getUpdatingKnowledgeAssetStates", + "name": "getUpdatingKnowledgeCollectionStates", "outputs": [ { "components": [ { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionId", "type": "uint256" }, { "internalType": "bytes32", - "name": "assertionId", + "name": "merkleRoot", "type": "bytes32" }, { @@ -480,7 +470,7 @@ "type": "uint96" } ], - "internalType": "struct ParanetLib.UpdatingKnowledgeAssetState[]", + "internalType": "struct ParanetLib.UpdatingKnowledgeCollectionState[]", "name": "", "type": "tuple[]" } @@ -499,25 +489,35 @@ "internalType": "bytes32", "name": "paranetId", "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" } ], - "name": "getUpdatingKnowledgeAssetStates", + "name": "getUpdatingKnowledgeCollectionStates", "outputs": [ { "components": [ { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionId", "type": "uint256" }, { "internalType": "bytes32", - "name": "assertionId", + "name": "merkleRoot", "type": "bytes32" }, { @@ -526,7 +526,7 @@ "type": "uint96" } ], - "internalType": "struct ParanetLib.UpdatingKnowledgeAssetState[]", + "internalType": "struct ParanetLib.UpdatingKnowledgeCollectionState[]", "name": "", "type": "tuple[]" } @@ -555,7 +555,7 @@ "type": "address" } ], - "name": "incrementTotalSubmittedKnowledgeAssetsCount", + "name": "incrementTotalSubmittedKnowledgeCollectionsCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -639,34 +639,11 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetId", - "type": "bytes32" - } - ], - "name": "removeSubmittedKnowledgeAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "miner", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "paranetId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "knowledgeAssetStateId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "removeUpdatingKnowledgeAssetState", + "name": "removeSubmittedKnowledgeCollection", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -726,11 +703,11 @@ }, { "internalType": "uint256", - "name": "totalSubmittedKnowledgeAssetsCount", + "name": "totalSubmittedKnowledgeCollectionsCount", "type": "uint256" } ], - "name": "setTotalSubmittedKnowledgeAssetsCount", + "name": "setTotalSubmittedKnowledgeCollectionsCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -790,7 +767,7 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetStateId", + "name": "knowledgeCollectionStateId", "type": "bytes32" }, { @@ -799,7 +776,7 @@ "type": "uint96" } ], - "name": "setUpdatingKnowledgeAssetUpdateTokenAmount", + "name": "setUpdatingKnowledgeCollectionUpdateTokenAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -905,7 +882,7 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetStateId", + "name": "knowledgeCollectionStateId", "type": "bytes32" }, { @@ -914,7 +891,7 @@ "type": "uint96" } ], - "name": "subUpdatingKnowledgeAssetUpdateTokenAmount", + "name": "subUpdatingKnowledgeCollectionUpdateTokenAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/abi/ParanetNeuroIncentivesPool.json b/abi/ParanetNeuroIncentivesPool.json index 1677d836..41e29420 100644 --- a/abi/ParanetNeuroIncentivesPool.json +++ b/abi/ParanetNeuroIncentivesPool.json @@ -6,6 +6,11 @@ "name": "hubAddress", "type": "address" }, + { + "internalType": "address", + "name": "rewardTokenAddress", + "type": "address" + }, { "internalType": "address", "name": "paranetsRegistryAddress", @@ -924,6 +929,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "totalMinersClaimedNeuro", diff --git a/abi/ParanetServicesRegistry.json b/abi/ParanetServicesRegistry.json index 7bdde7e6..59e26327 100644 --- a/abi/ParanetServicesRegistry.json +++ b/abi/ParanetServicesRegistry.json @@ -104,7 +104,7 @@ "type": "bytes32" } ], - "name": "getParanetServiceKnowledgeAssetLocator", + "name": "getParanetServiceKnowledgeCollectionLocator", "outputs": [ { "internalType": "address", @@ -134,12 +134,12 @@ "components": [ { "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" }, { @@ -239,12 +239,12 @@ "inputs": [ { "internalType": "address", - "name": "paranetServiceKAStorageContract", + "name": "paranetServiceKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetServiceKATokenId", + "name": "paranetServiceKCTokenId", "type": "uint256" }, { diff --git a/abi/ParanetsRegistry.json b/abi/ParanetsRegistry.json index 438a9fbc..5c8acee9 100644 --- a/abi/ParanetsRegistry.json +++ b/abi/ParanetsRegistry.json @@ -130,11 +130,11 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "addKnowledgeAsset", + "name": "addKnowledgeCollecton", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -265,6 +265,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getAllParanetIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -385,7 +398,7 @@ "type": "bytes32" } ], - "name": "getKnowledgeAssets", + "name": "getKnowledgeCollections", "outputs": [ { "internalType": "bytes32[]", @@ -404,10 +417,10 @@ "type": "bytes32" } ], - "name": "getKnowledgeAssetsAccessPolicy", + "name": "getKnowledgeCollectionsAccessPolicy", "outputs": [ { - "internalType": "enum ParanetLib.KnowledgeAssetsAccessPolicy", + "internalType": "enum ParanetLib.KnowledgeCollectionsAccessPolicy", "name": "", "type": "uint8" } @@ -423,7 +436,7 @@ "type": "bytes32" } ], - "name": "getKnowledgeAssetsCount", + "name": "getKnowledgeCollectionsCount", "outputs": [ { "internalType": "uint256", @@ -443,7 +456,7 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" }, { @@ -452,7 +465,7 @@ "type": "uint256" } ], - "name": "getKnowledgeAssetsStartingFromKnowledgeAssetId", + "name": "getKnowledgeCollectionsStartingFromKnowlCollectionId", "outputs": [ { "internalType": "bytes32[]", @@ -481,7 +494,7 @@ "type": "uint256" } ], - "name": "getKnowledgeAssetsWithPagination", + "name": "getKnowledgeCollectionsWithPagination", "outputs": [ { "internalType": "bytes32[]", @@ -921,6 +934,49 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getParanetIdAtIndex", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + } + ], + "name": "getParanetIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -929,7 +985,26 @@ "type": "bytes32" } ], - "name": "getParanetKnowledgeAssetLocator", + "name": "getParanetIdsMapping", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "paranetId", + "type": "bytes32" + } + ], + "name": "getParanetKnowledgeCollectionLocator", "outputs": [ { "internalType": "address", @@ -959,12 +1034,12 @@ "components": [ { "internalType": "address", - "name": "paranetKAStorageContract", + "name": "paranetKCStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "paranetKATokenId", + "name": "paranetKCTokenId", "type": "uint256" }, { @@ -988,8 +1063,8 @@ "type": "uint8" }, { - "internalType": "enum ParanetLib.KnowledgeAssetsAccessPolicy", - "name": "knowledgeAssetsAccessPolicy", + "internalType": "enum ParanetLib.KnowledgeCollectionsAccessPolicy", + "name": "knowledgeCollectionsAccessPolicy", "type": "uint8" }, { @@ -1006,6 +1081,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getParanetsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1138,11 +1226,11 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "isKnowledgeAssetRegistered", + "name": "isKnowledgeCollectionRegistered", "outputs": [ { "internalType": "bool", @@ -1237,12 +1325,12 @@ "inputs": [ { "internalType": "address", - "name": "knowledgeAssetStorageContract", + "name": "knowledgeCollectionStorageContract", "type": "address" }, { "internalType": "uint256", - "name": "tokenId", + "name": "knowledgeCollectionTokenId", "type": "uint256" }, { @@ -1266,8 +1354,8 @@ "type": "uint8" }, { - "internalType": "enum ParanetLib.KnowledgeAssetsAccessPolicy", - "name": "knowledgeAssetsAccessPolicy", + "internalType": "enum ParanetLib.KnowledgeCollectionsAccessPolicy", + "name": "knowledgeColletionsAccessPolicy", "type": "uint8" } ], @@ -1345,11 +1433,11 @@ }, { "internalType": "bytes32", - "name": "knowledgeAssetId", + "name": "knowledgeCollectionId", "type": "bytes32" } ], - "name": "removeKnowledgeAsset", + "name": "removeKnowledgeCollection", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -1503,12 +1591,12 @@ "type": "bytes32" }, { - "internalType": "enum ParanetLib.KnowledgeAssetsAccessPolicy", - "name": "knowledgeAssetsAccessPolicy", + "internalType": "enum ParanetLib.KnowledgeCollectionsAccessPolicy", + "name": "knowledgeCollectionsAccessPolicy", "type": "uint8" } ], - "name": "setKnowledgeAssetsAccessPolicy", + "name": "setKnowledgeCollectionsAccessPolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" From f97063a95c94d7443aa324101037baf14fe43ed7 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 20 Jan 2025 15:27:59 +0100 Subject: [PATCH 26/50] Update deployment script & ABIs exports --- deploy/012_deploy_paranets_registry.ts | 3 --- deploy/013_deploy_paranet_services_registry.ts | 3 --- ...> 014_deploy_paranet_knowledge_collections_registry.ts} | 7 ++----- deploy/015_deploy_paranet_knowledge_miners_registry.ts | 3 --- deploy/024_deploy_paranet.ts | 5 +---- deploy/025_deploy_paranet_incentives_pool_factory.ts | 3 --- index.ts | 4 ++-- 7 files changed, 5 insertions(+), 23 deletions(-) rename deploy/{014_deploy_paranet_knowledge_assets_registry.ts => 014_deploy_paranet_knowledge_collections_registry.ts} (63%) diff --git a/deploy/012_deploy_paranets_registry.ts b/deploy/012_deploy_paranets_registry.ts index 21b2721d..fad5d8cd 100644 --- a/deploy/012_deploy_paranets_registry.ts +++ b/deploy/012_deploy_paranets_registry.ts @@ -2,9 +2,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - // TODO: Remove when paranets V2 are finished - return; - await hre.helpers.deploy({ newContractName: 'ParanetsRegistry', }); diff --git a/deploy/013_deploy_paranet_services_registry.ts b/deploy/013_deploy_paranet_services_registry.ts index 516a0d9d..f2ae3e20 100644 --- a/deploy/013_deploy_paranet_services_registry.ts +++ b/deploy/013_deploy_paranet_services_registry.ts @@ -2,9 +2,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - // TODO: Remove when paranets V2 are finished - return; - await hre.helpers.deploy({ newContractName: 'ParanetServicesRegistry', }); diff --git a/deploy/014_deploy_paranet_knowledge_assets_registry.ts b/deploy/014_deploy_paranet_knowledge_collections_registry.ts similarity index 63% rename from deploy/014_deploy_paranet_knowledge_assets_registry.ts rename to deploy/014_deploy_paranet_knowledge_collections_registry.ts index 131d080a..b3cc14d8 100644 --- a/deploy/014_deploy_paranet_knowledge_assets_registry.ts +++ b/deploy/014_deploy_paranet_knowledge_collections_registry.ts @@ -2,14 +2,11 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - // TODO: Remove when paranets V2 are finished - return; - await hre.helpers.deploy({ - newContractName: 'ParanetKnowledgeAssetsRegistry', + newContractName: 'ParanetKnowledgeCollectionsRegistry', }); }; export default func; -func.tags = ['ParanetKnowledgeAssetsRegistry']; +func.tags = ['ParanetKnowledgeCollectionsRegistry']; func.dependencies = ['Hub']; diff --git a/deploy/015_deploy_paranet_knowledge_miners_registry.ts b/deploy/015_deploy_paranet_knowledge_miners_registry.ts index 7341c9e9..3c72d735 100644 --- a/deploy/015_deploy_paranet_knowledge_miners_registry.ts +++ b/deploy/015_deploy_paranet_knowledge_miners_registry.ts @@ -2,9 +2,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - // TODO: Remove when paranets V2 are finished - return; - await hre.helpers.deploy({ newContractName: 'ParanetKnowledgeMinersRegistry', }); diff --git a/deploy/024_deploy_paranet.ts b/deploy/024_deploy_paranet.ts index b82a5272..a78c3542 100644 --- a/deploy/024_deploy_paranet.ts +++ b/deploy/024_deploy_paranet.ts @@ -2,9 +2,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - // TODO: Remove when paranets V2 are finished - return; - await hre.helpers.deploy({ newContractName: 'Paranet', }); @@ -14,7 +11,7 @@ export default func; func.tags = ['Paranet']; func.dependencies = [ 'Hub', - 'ParanetKnowledgeAssetsRegistry', + 'ParanetKnowledgeCollectionsRegistry', 'ParanetKnowledgeMinersRegistry', 'ParanetsRegistry', 'ParanetServicesRegistry', diff --git a/deploy/025_deploy_paranet_incentives_pool_factory.ts b/deploy/025_deploy_paranet_incentives_pool_factory.ts index 907175f8..68d18455 100644 --- a/deploy/025_deploy_paranet_incentives_pool_factory.ts +++ b/deploy/025_deploy_paranet_incentives_pool_factory.ts @@ -2,9 +2,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - // TODO: Remove when paranets V2 are finished - return; - if ( !hre.network.name.startsWith('neuroweb') && !hre.network.name.startsWith('hardhat') diff --git a/index.ts b/index.ts index 84179306..882ff8c5 100644 --- a/index.ts +++ b/index.ts @@ -21,7 +21,7 @@ import Migrator from './abi/Migrator.json'; import ParametersStorage from './abi/ParametersStorage.json'; import Paranet from './abi/Paranet.json'; import ParanetIncentivesPoolFactory from './abi/ParanetIncentivesPoolFactory.json'; -import ParanetKnowledgeAssetsRegistry from './abi/ParanetKnowledgeAssetsRegistry.json'; +import ParanetKnowledgeCollectionsRegistry from './abi/ParanetKnowledgeCollectionsRegistry.json'; import ParanetKnowledgeMinersRegistry from './abi/ParanetKnowledgeMinersRegistry.json'; import ParanetNeuroIncentivesPool from './abi/ParanetNeuroIncentivesPool.json'; import ParanetServicesRegistry from './abi/ParanetServicesRegistry.json'; @@ -49,7 +49,7 @@ export { Identity as IdentityABI, Paranet as ParanetABI, ParanetIncentivesPoolFactory as ParanetIncentivesPoolFactoryABI, - ParanetKnowledgeAssetsRegistry as ParanetKnowledgeAssetsRegistryABI, + ParanetKnowledgeCollectionsRegistry as ParanetKnowledgeCollectionsRegistryABI, ParanetKnowledgeMinersRegistry as ParanetKnowledgeMinersRegistryABI, ParanetServicesRegistry as ParanetServicesRegistryABI, ParanetsRegistry as ParanetsRegistryABI, From 57e3c2bd61ab3cfccd749585a5834b5ca3d6c104 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Mon, 20 Jan 2025 15:28:22 +0100 Subject: [PATCH 27/50] Remove unused import --- contracts/paranets/Paranet.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 8fe20b40..eddffab7 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -16,7 +16,6 @@ import {IVersioned} from "../interfaces/IVersioned.sol"; import {ParanetLib} from "../libraries/ParanetLib.sol"; import {ProfileLib} from "../libraries/ProfileLib.sol"; import {KnowledgeCollectionLib} from "../libraries/KnowledgeCollectionLib.sol"; -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetRegistered( From 3e90db072a675e5461f123925dc28920d2723118 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 21 Jan 2025 13:06:31 +0100 Subject: [PATCH 28/50] Add debugevent --- contracts/paranets/Paranet.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index eddffab7..fecd3916 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -114,6 +114,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 indexed paranetKCTokenId, address minerAddress ); + event DebugOwner(uint256 minted, uint256 burnedCount, uint256 activeCount, uint256 ownedCountInRange); string private constant _NAME = "Paranet"; string private constant _VERSION = "1.0.0"; From a9ad1aca8da21c060c33e1f87e433610a60f20c5 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 21 Jan 2025 13:09:59 +0100 Subject: [PATCH 29/50] Add debugevent --- contracts/paranets/Paranet.sol | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index fecd3916..702f4a2c 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -1113,13 +1113,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // } // } - function _checkParanetOperator(bytes32 paranetId) internal view virtual { + function _checkParanetOperator(bytes32 paranetId) internal virtual { (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry .getParanetKnowledgeCollectionLocator(paranetId); _checkKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId); } - function _checkParanetServiceOperator(bytes32 paranetServiceId) internal view virtual { + function _checkParanetServiceOperator(bytes32 paranetServiceId) internal virtual { (address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId) = paranetServicesRegistry .getParanetServiceKnowledgeCollectionLocator(paranetServiceId); _checkKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId); @@ -1128,7 +1128,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function _checkKnowledgeCollectionOwner( address knowledgeCollectionStorageContractAddress, uint256 knowledgeCollectionId - ) internal view virtual { + ) internal virtual { require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( @@ -1150,6 +1150,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { minted + burnedCount ); + emit DebugOwner(minted, burnedCount, activeCount, ownedCountInRange); + require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); } } From 7cf3d642e40eb173ed8b57156a0c9de9e71b23a3 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 21 Jan 2025 13:19:47 +0100 Subject: [PATCH 30/50] Add local logs --- contracts/paranets/Paranet.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 702f4a2c..301ca629 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -16,6 +16,7 @@ import {IVersioned} from "../interfaces/IVersioned.sol"; import {ParanetLib} from "../libraries/ParanetLib.sol"; import {ProfileLib} from "../libraries/ProfileLib.sol"; import {KnowledgeCollectionLib} from "../libraries/KnowledgeCollectionLib.sol"; +import "hardhat/console.sol"; contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetRegistered( @@ -1150,7 +1151,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { minted + burnedCount ); - emit DebugOwner(minted, burnedCount, activeCount, ownedCountInRange); + console.log(minted, burnedCount, activeCount, ownedCountInRange); require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); } From 50779d785fdbcf4309a9e2cfaa0d1aa44afa38c8 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 21 Jan 2025 14:23:25 +0100 Subject: [PATCH 31/50] Remove debug code and fix how _checkKnowledgeCollectionOwner is calculated --- contracts/paranets/Paranet.sol | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 301ca629..1519f023 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -16,7 +16,6 @@ import {IVersioned} from "../interfaces/IVersioned.sol"; import {ParanetLib} from "../libraries/ParanetLib.sol"; import {ProfileLib} from "../libraries/ProfileLib.sol"; import {KnowledgeCollectionLib} from "../libraries/KnowledgeCollectionLib.sol"; -import "hardhat/console.sol"; contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetRegistered( @@ -115,7 +114,6 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 indexed paranetKCTokenId, address minerAddress ); - event DebugOwner(uint256 minted, uint256 burnedCount, uint256 activeCount, uint256 ownedCountInRange); string private constant _NAME = "Paranet"; string private constant _VERSION = "1.0.0"; @@ -1135,7 +1133,6 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( knowledgeCollectionStorageContractAddress ); - uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; @@ -1148,11 +1145,9 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( msg.sender, startTokenId, - minted + burnedCount + startTokenId + minted + burnedCount ); - console.log(minted, burnedCount, activeCount, ownedCountInRange); - require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); } } From 70ea1f679ab59d7a12c5d0268242aeae5f6e94e5 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 21 Jan 2025 18:26:20 +0100 Subject: [PATCH 32/50] Update _checkKnowledgeCollectionOwner in ParanetIncentivesPoolFactory --- contracts/paranets/ParanetIncentivesPoolFactory.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index e460927b..0db21459 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -105,13 +105,12 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn function _checkKnowledgeCollectionOwner( address knowledgeCollectionStorageContractAddress, uint256 knowledgeCollectionId - ) internal view virtual { + ) internal virtual { require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( knowledgeCollectionStorageContractAddress ); - uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; @@ -124,7 +123,7 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( msg.sender, startTokenId, - minted + burnedCount + startTokenId + minted + burnedCount ); require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); From bdb071a4c93ebf0d2e1cc36be54ca2f49b3210cf Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 21 Jan 2025 18:35:12 +0100 Subject: [PATCH 33/50] Change reverte msg --- contracts/paranets/Paranet.sol | 3 +-- contracts/paranets/ParanetIncentivesPoolFactory.sol | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 1519f023..98941d79 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -823,7 +823,6 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 limit ) external view returns (ParanetLib.UniversalCollectionLocator[] memory) { ParanetsRegistry pr = paranetsRegistry; - bytes32[] memory knowledgeCollections = pr.getKnowledgeCollectionsWithPagination(paranetId, offset, limit); ParanetKnowledgeCollectionsRegistry pkcr = paranetKnowledgeCollectionsRegistry; @@ -1136,7 +1135,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; - require(activeCount != 0, "No KCs in Collection"); + require(activeCount != 0, "No KAs in Collection"); uint256 startTokenId = (knowledgeCollectionId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index 0db21459..7621f612 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -114,7 +114,7 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); uint256 activeCount = minted - burnedCount; - require(activeCount != 0, "No KCs in Collection"); + require(activeCount != 0, "No KAs in Collection"); uint256 startTokenId = (knowledgeCollectionId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + From e847d002d81cec0642317b8c5e77d3bacc1661eb Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 22 Jan 2025 12:36:38 +0100 Subject: [PATCH 34/50] Version bump --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b336b86..06ab018c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dkg-evm-module", - "version": "8.0.0", + "version": "8.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dkg-evm-module", - "version": "8.0.0", + "version": "8.0.1", "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^5.1.0", diff --git a/package.json b/package.json index 1c880046..6edd4b51 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dkg-evm-module", - "version": "8.0.0", + "version": "8.0.1", "description": "Smart contracts for OriginTrail V8", "main": "index.ts", "files": [ From b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 22 Jan 2025 13:21:51 +0100 Subject: [PATCH 35/50] Fix isParanetOperator in ParanetNeuroIncentivesPool --- contracts/paranets/ParanetNeuroIncentivesPool.sol | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/contracts/paranets/ParanetNeuroIncentivesPool.sol b/contracts/paranets/ParanetNeuroIncentivesPool.sol index 51303c2e..fc88b94b 100644 --- a/contracts/paranets/ParanetNeuroIncentivesPool.sol +++ b/contracts/paranets/ParanetNeuroIncentivesPool.sol @@ -264,7 +264,11 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { uint256 startTokenId = (paranetKCTokenId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + 1; // _startTokenId() - uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf(addr, startTokenId, minted + burnedCount); + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( + addr, + startTokenId, + startTokenId + minted + burnedCount + ); return ownedCountInRange == activeCount; } From 6fbacb268cf9afca7617179a7064e0ee1e14123f Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Wed, 22 Jan 2025 14:26:14 +0100 Subject: [PATCH 36/50] Update deployments --- deployments/base_sepolia_test_contracts.json | 55 ++++++++++++-- deployments/gnosis_chiado_test_contracts.json | 55 ++++++++++++-- deployments/neuroweb_testnet_contracts.json | 72 +++++++++++++++++-- 3 files changed, 166 insertions(+), 16 deletions(-) diff --git a/deployments/base_sepolia_test_contracts.json b/deployments/base_sepolia_test_contracts.json index 2ac7be33..42dc4eba 100644 --- a/deployments/base_sepolia_test_contracts.json +++ b/deployments/base_sepolia_test_contracts.json @@ -173,12 +173,12 @@ "deployed": true }, "KnowledgeCollection": { - "evmAddress": "0x46121121F78f8351DA4526813FbfBffD044dec6c", + "evmAddress": "0xA85c3117fA62176830ADA98A6d429c0D0947cEFb", "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "ddb3f9e1ef7c2f9f7ca8554b19fae7d521a5507f", - "deploymentBlock": 19684808, - "deploymentTimestamp": 1735137910837, + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 20892002, + "deploymentTimestamp": 1737552295950, "deployed": true }, "Migrator": { @@ -189,6 +189,51 @@ "deploymentBlock": 19684813, "deploymentTimestamp": 1735137919078, "deployed": true + }, + "ParanetsRegistry": { + "evmAddress": "0x5960930cC6A47A4606fa05Fe26ca9A6Eb2250097", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 20891862, + "deploymentTimestamp": 1737552017110, + "deployed": true + }, + "ParanetServicesRegistry": { + "evmAddress": "0x6e1E82955f00CF8Bf062e8B35608B0fFE3FC4Df6", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 20891866, + "deploymentTimestamp": 1737552023350, + "deployed": true + }, + "ParanetKnowledgeCollectionsRegistry": { + "evmAddress": "0xB7f43dc2f4863a3a771F7E7e2BF08adc1de68fC7", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 20891869, + "deploymentTimestamp": 1737552029843, + "deployed": true + }, + "ParanetKnowledgeMinersRegistry": { + "evmAddress": "0x91EF627b8581D41658611b1b376FF31b9a3884ea", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 20891872, + "deploymentTimestamp": 1737552036245, + "deployed": true + }, + "Paranet": { + "evmAddress": "0x8DBfBe94a5E24d8Bd4ea3e933C77C054128F29b5", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 20891875, + "deploymentTimestamp": 1737552043122, + "deployed": true } } } diff --git a/deployments/gnosis_chiado_test_contracts.json b/deployments/gnosis_chiado_test_contracts.json index fd7b30b4..9db54c25 100644 --- a/deployments/gnosis_chiado_test_contracts.json +++ b/deployments/gnosis_chiado_test_contracts.json @@ -173,12 +173,12 @@ "deployed": true }, "KnowledgeCollection": { - "evmAddress": "0xdd2B900b121CD258Fbfd05C1C0482C0E25582f2C", + "evmAddress": "0x27F52c0d7289A982D76F74De1adeFBFCB1EB8ed8", "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "ddb3f9e1ef7c2f9f7ca8554b19fae7d521a5507f", - "deploymentBlock": 13494299, - "deploymentTimestamp": 1735137979260, + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 13947424, + "deploymentTimestamp": 1737552337932, "deployed": true }, "Migrator": { @@ -189,6 +189,51 @@ "deploymentBlock": 13494301, "deploymentTimestamp": 1735137986444, "deployed": true + }, + "ParanetsRegistry": { + "evmAddress": "0xd926A082A87D3A2536a48CAff6a9B8583434B1D7", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 13947383, + "deploymentTimestamp": 1737552116734, + "deployed": true + }, + "ParanetServicesRegistry": { + "evmAddress": "0x0495C0251A3fCbe3561abD033A2Cb54f752d46eD", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 13947384, + "deploymentTimestamp": 1737552121766, + "deployed": true + }, + "ParanetKnowledgeCollectionsRegistry": { + "evmAddress": "0x6499c0006a5408Ca7A5D1380E4f7d0e3e2C23650", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 13947385, + "deploymentTimestamp": 1737552126777, + "deployed": true + }, + "ParanetKnowledgeMinersRegistry": { + "evmAddress": "0x1769C41E2B8ddbb1F429fA0aF453Bb34cce52D60", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 13947386, + "deploymentTimestamp": 1737552131790, + "deployed": true + }, + "Paranet": { + "evmAddress": "0x8e49110922bC01241f434B4dAc0Fbc335FeBE63C", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 13947388, + "deploymentTimestamp": 1737552145114, + "deployed": true } } } diff --git a/deployments/neuroweb_testnet_contracts.json b/deployments/neuroweb_testnet_contracts.json index 74566147..d6d23f9c 100644 --- a/deployments/neuroweb_testnet_contracts.json +++ b/deployments/neuroweb_testnet_contracts.json @@ -192,13 +192,13 @@ "deployed": true }, "KnowledgeCollection": { - "evmAddress": "0x731227B9B8eB9B1ad209585cec3e0568278a0C89", - "substrateAddress": "5EMjsczjESbn133kUVssGUuA55dCkRtKK1LTYeoULYqASafv", + "evmAddress": "0xD842553c0a6C1C1427db6B56Ab3299F575a726F2", + "substrateAddress": "5EMjsd15WQzb9JzKqn2kvi2PXHnfL8JFjn9Gi1bH29FGE2WU", "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "ddb3f9e1ef7c2f9f7ca8554b19fae7d521a5507f", - "deploymentBlock": 5706407, - "deploymentTimestamp": 1735137995151, + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086206, + "deploymentTimestamp": 1737551947852, "deployed": true }, "Migrator": { @@ -210,6 +210,66 @@ "deploymentBlock": 5706409, "deploymentTimestamp": 1735138003714, "deployed": true + }, + "ParanetsRegistry": { + "evmAddress": "0x03fD0638d57e1DFf059cfB0A59D465d96bc3d381", + "substrateAddress": "5EMjsczLyUsdcHaiGPvbVQtY5RrHNDDNdGz56TkyLhkGqyjB", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086202, + "deploymentTimestamp": 1737551926889, + "deployed": true + }, + "ParanetServicesRegistry": { + "evmAddress": "0xE56Ac2244FCFb20D3B7d7eFfd9EB9B3490fd1C8d", + "substrateAddress": "5EMjsd189L9Y8LfKAMeFQZ2jzZQWqWA2rpZeDqysvNSni8B8", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086203, + "deploymentTimestamp": 1737551931960, + "deployed": true + }, + "ParanetKnowledgeCollectionsRegistry": { + "evmAddress": "0xA6f3E79c083aFc6Bf69bFbA4cb488A98d70481b7", + "substrateAddress": "5EMjsczudPoVZCQMERLv7QbbGJR7fZCFQvdx2vYX4faDRiSZ", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086204, + "deploymentTimestamp": 1737551937030, + "deployed": true + }, + "ParanetKnowledgeMinersRegistry": { + "evmAddress": "0xdc65788847B633C8Ea6A90e65E67a7A431f10244", + "substrateAddress": "5EMjsd16LVjR5mXywuAMRgFA9vVPBnk7r2VstqK5txaT4aHw", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086205, + "deploymentTimestamp": 1737551942154, + "deployed": true + }, + "Paranet": { + "evmAddress": "0x2d2bAddadD98AD4BFCDd3F3A6d20D6b5c21297DA", + "substrateAddress": "5EMjsczVE5xz2ejNb3s3Xc8mRwrLhBi86L5LiBtHMzgjkga7", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086207, + "deploymentTimestamp": 1737551953213, + "deployed": true + }, + "ParanetIncentivesPoolFactory": { + "evmAddress": "0x0A7301DE4a368E22C7Bb3F6786a00daCFAC51Fb3", + "substrateAddress": "5EMjsczNGZrZL176FuPFJS3H8TXFkHGWexw6aC2ui9gpy7DH", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", + "deploymentBlock": 6086208, + "deploymentTimestamp": 1737551962358, + "deployed": true } } } From 7ae367ec8a0403650459e777642e0ca4101e1884 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 10:24:54 +0100 Subject: [PATCH 37/50] Remove update --- contracts/KnowledgeCollection.sol | 116 +++++++++++++++--------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/contracts/KnowledgeCollection.sol b/contracts/KnowledgeCollection.sol index 1b0fd093..3304b454 100644 --- a/contracts/KnowledgeCollection.sol +++ b/contracts/KnowledgeCollection.sol @@ -110,64 +110,64 @@ contract KnowledgeCollection is INamed, IVersioned, ContractStatus, IInitializab return id; } - function updateKnowledgeCollection( - uint256 id, - string calldata updateOperationId, - bytes32 merkleRoot, - uint256 mintKnowledgeAssetsAmount, - uint256[] calldata knowledgeAssetsToBurn, - uint88 byteSize, - uint96 tokenAmount, - address paymaster, - uint72 publisherNodeIdentityId, - bytes32 publisherNodeR, - bytes32 publisherNodeVS, - uint72[] calldata identityIds, - bytes32[] calldata r, - bytes32[] calldata vs - ) external { - KnowledgeCollectionStorage kcs = knowledgeCollectionStorage; - EpochStorage es = epochStorage; - - (, , , uint88 oldByteSize, , uint40 endEpoch, uint96 oldTokenAmount, bool isImmutable) = kcs - .getKnowledgeCollectionMetadata(id); - - if (isImmutable) { - revert KnowledgeCollectionLib.CannotUpdateImmutableKnowledgeCollection(id); - } - - _verifySignature( - publisherNodeIdentityId, - ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(publisherNodeIdentityId, merkleRoot))), - publisherNodeR, - publisherNodeVS - ); - - _verifySignatures(identityIds, ECDSA.toEthSignedMessageHash(merkleRoot), r, vs); - - uint256 currentEpoch = chronos.getCurrentEpoch(); - if (currentEpoch > endEpoch) { - revert KnowledgeCollectionLib.KnowledgeCollectionExpired(id, currentEpoch, endEpoch); - } - - kcs.updateKnowledgeCollection( - msg.sender, - id, - updateOperationId, - merkleRoot, - mintKnowledgeAssetsAmount, - knowledgeAssetsToBurn, - oldByteSize + byteSize, - oldTokenAmount + tokenAmount - ); - - _validateTokenAmount(byteSize - oldByteSize, endEpoch - currentEpoch, tokenAmount, true); - - es.addTokensToEpochRange(1, currentEpoch, endEpoch, tokenAmount); - es.addEpochProducedKnowledgeValue(publisherNodeIdentityId, currentEpoch, tokenAmount); - - _addTokens(tokenAmount, paymaster); - } + // function updateKnowledgeCollection( + // uint256 id, + // string calldata updateOperationId, + // bytes32 merkleRoot, + // uint256 mintKnowledgeAssetsAmount, + // uint256[] calldata knowledgeAssetsToBurn, + // uint88 byteSize, + // uint96 tokenAmount, + // address paymaster, + // uint72 publisherNodeIdentityId, + // bytes32 publisherNodeR, + // bytes32 publisherNodeVS, + // uint72[] calldata identityIds, + // bytes32[] calldata r, + // bytes32[] calldata vs + // ) external { + // KnowledgeCollectionStorage kcs = knowledgeCollectionStorage; + // EpochStorage es = epochStorage; + + // (, , , uint88 oldByteSize, , uint40 endEpoch, uint96 oldTokenAmount, bool isImmutable) = kcs + // .getKnowledgeCollectionMetadata(id); + + // if (isImmutable) { + // revert KnowledgeCollectionLib.CannotUpdateImmutableKnowledgeCollection(id); + // } + + // _verifySignature( + // publisherNodeIdentityId, + // ECDSA.toEthSignedMessageHash(keccak256(abi.encodePacked(publisherNodeIdentityId, merkleRoot))), + // publisherNodeR, + // publisherNodeVS + // ); + + // _verifySignatures(identityIds, ECDSA.toEthSignedMessageHash(merkleRoot), r, vs); + + // uint256 currentEpoch = chronos.getCurrentEpoch(); + // if (currentEpoch > endEpoch) { + // revert KnowledgeCollectionLib.KnowledgeCollectionExpired(id, currentEpoch, endEpoch); + // } + + // kcs.updateKnowledgeCollection( + // msg.sender, + // id, + // updateOperationId, + // merkleRoot, + // mintKnowledgeAssetsAmount, + // knowledgeAssetsToBurn, + // oldByteSize + byteSize, + // oldTokenAmount + tokenAmount + // ); + + // _validateTokenAmount(byteSize - oldByteSize, endEpoch - currentEpoch, tokenAmount, true); + + // es.addTokensToEpochRange(1, currentEpoch, endEpoch, tokenAmount); + // es.addEpochProducedKnowledgeValue(publisherNodeIdentityId, currentEpoch, tokenAmount); + + // _addTokens(tokenAmount, paymaster); + // } function extendKnowledgeCollectionLifetime( uint256 id, From 59a62815b3d8c5deffdf8da44dd5ace4655052ed Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 10:30:35 +0100 Subject: [PATCH 38/50] Update ABI --- abi/KnowledgeCollection.json | 89 ------------------------------------ 1 file changed, 89 deletions(-) diff --git a/abi/KnowledgeCollection.json b/abi/KnowledgeCollection.json index 3eaeebfa..5af35289 100644 --- a/abi/KnowledgeCollection.json +++ b/abi/KnowledgeCollection.json @@ -10,17 +10,6 @@ "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "CannotUpdateImmutableKnowledgeCollection", - "type": "error" - }, { "inputs": [ { @@ -516,84 +505,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "updateOperationId", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "mintKnowledgeAssetsAmount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "knowledgeAssetsToBurn", - "type": "uint256[]" - }, - { - "internalType": "uint88", - "name": "byteSize", - "type": "uint88" - }, - { - "internalType": "uint96", - "name": "tokenAmount", - "type": "uint96" - }, - { - "internalType": "address", - "name": "paymaster", - "type": "address" - }, - { - "internalType": "uint72", - "name": "publisherNodeIdentityId", - "type": "uint72" - }, - { - "internalType": "bytes32", - "name": "publisherNodeR", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "publisherNodeVS", - "type": "bytes32" - }, - { - "internalType": "uint72[]", - "name": "identityIds", - "type": "uint72[]" - }, - { - "internalType": "bytes32[]", - "name": "r", - "type": "bytes32[]" - }, - { - "internalType": "bytes32[]", - "name": "vs", - "type": "bytes32[]" - } - ], - "name": "updateKnowledgeCollection", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "version", From 300217f1fc39b0ba448a1bbf8b74e7c5d4d13136 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 11:44:11 +0100 Subject: [PATCH 39/50] Base tesnted KC redeployed --- deployments/base_sepolia_test_contracts.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/deployments/base_sepolia_test_contracts.json b/deployments/base_sepolia_test_contracts.json index 2ac7be33..d1ed8c08 100644 --- a/deployments/base_sepolia_test_contracts.json +++ b/deployments/base_sepolia_test_contracts.json @@ -172,15 +172,6 @@ "deploymentTimestamp": 1735137901423, "deployed": true }, - "KnowledgeCollection": { - "evmAddress": "0x46121121F78f8351DA4526813FbfBffD044dec6c", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "ddb3f9e1ef7c2f9f7ca8554b19fae7d521a5507f", - "deploymentBlock": 19684808, - "deploymentTimestamp": 1735137910837, - "deployed": true - }, "Migrator": { "evmAddress": "0x974892b18A62AE61D21a14F9db005f4f6DD2e52A", "version": null, @@ -189,6 +180,15 @@ "deploymentBlock": 19684813, "deploymentTimestamp": 1735137919078, "deployed": true + }, + "KnowledgeCollection": { + "evmAddress": "0xAF09267e228E5D529732497BF20d652d10278a6e", + "version": "1.0.0", + "gitBranch": "fix/remove-kc-update", + "gitCommitHash": "59a62815b3d8c5deffdf8da44dd5ace4655052ed", + "deploymentBlock": 20972223, + "deploymentTimestamp": 1737712739031, + "deployed": true } } } From 1cf13968f378b58f7d08b35bf4558f70784be8e4 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 12:33:37 +0100 Subject: [PATCH 40/50] wip --- contracts/libraries/ParanetLib.sol | 11 +- contracts/paranets/Paranet.sol | 142 +++++++++++++----- .../storage/paranets/ParanetsRegistry.sol | 15 +- 3 files changed, 123 insertions(+), 45 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index f4bef2a1..3d780603 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -58,6 +58,7 @@ library ParanetLib { struct Paranet { address paranetKCStorageContract; uint256 paranetKCTokenId; + uint256 paranetKATokenId; string name; string description; NodesAccessPolicy nodesAccessPolicy; @@ -86,6 +87,7 @@ library ParanetLib { struct ParanetMetadata { address paranetKCStorageContract; uint256 paranetKCTokenId; + uint256 paranetKATokenId; string name; string description; NodesAccessPolicy nodesAccessPolicy; @@ -173,7 +175,8 @@ library ParanetLib { error ParanetHasAlreadyBeenRegistered( address knowledgeCollectionStorageAddress, - uint256 knowledgeCollectionTokenId + uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId ); error InvalidParanetNodesAccessPolicy( ParanetLib.NodesAccessPolicy[] expectedAccessPolicies, @@ -205,7 +208,11 @@ library ParanetLib { string poolType, address poolAddress ); - error ParanetDoesntExist(address knowledgeCollectionStorageAddress, uint256 knowledgeCollectionTokenId); + error ParanetDoesntExist( + address knowledgeCollectionStorageAddress, + uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId + ); error ParanetServiceHasAlreadyBeenRegistered( address knowledgeCollectionStorageAddress, uint256 knowledgeCollectionTokenId diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 98941d79..74104a1d 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -21,6 +21,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetRegistered( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed parnetKATokenId, string paranetName, string paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, @@ -160,22 +161,28 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function registerParanet( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, string calldata paranetName, string calldata paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, ParanetLib.MinersAccessPolicy minersAccessPolicy - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) returns (bytes32) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) returns (bytes32) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetHasAlreadyBeenRegistered(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetHasAlreadyBeenRegistered( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId + ); } emit ParanetRegistered( paranetKCStorageContract, paranetKCTokenId, + paranetKATokenId, paranetName, paranetDescription, nodesAccessPolicy, @@ -187,6 +194,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.registerParanet( paranetKCStorageContract, paranetKCTokenId, + paranetKATokenId, paranetName, paranetDescription, nodesAccessPolicy, @@ -198,35 +206,43 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function updateParanetMetadata( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, string calldata paranetName, string calldata paranetDescription - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } pr.setName(paranetId, paranetName); pr.setDescription(paranetId, paranetDescription); - emit ParanetMetadataUpdated(paranetKCStorageContract, paranetKCTokenId, paranetName, paranetDescription); + emit ParanetMetadataUpdated( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + paranetName, + paranetDescription + ); } function addParanetCuratedNodes( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, uint72[] calldata identityIds - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, onlyKnowledgeAssetOwner) { ParanetsRegistry pr = paranetsRegistry; ProfileStorage ps = profileStorage; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -261,14 +277,15 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function removeParanetCuratedNodes( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, uint72[] calldata identityIds - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -288,7 +305,12 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.removeCuratedNode(paranetId, identityIds[i]); - emit ParanetCuratedNodeRemoved(paranetKCStorageContract, paranetKCTokenId, identityIds[i]); + emit ParanetCuratedNodeRemoved( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + identityIds[i] + ); unchecked { i++; @@ -296,13 +318,17 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } } - function requestParanetCuratedNodeAccess(address paranetKCStorageContract, uint256 paranetKCTokenId) external { + function requestParanetCuratedNodeAccess( + address paranetKCStorageContract, + uint256 paranetKCTokenId, + uint256 paranetKATokenId + ) external { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -339,20 +365,26 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addNodeJoinRequest(paranetId, identityId, ParanetLib.RequestStatus.PENDING); - emit ParanetCuratedNodeJoinRequestCreated(paranetKCStorageContract, paranetKCTokenId, identityId); + emit ParanetCuratedNodeJoinRequestCreated( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + identityId + ); } function approveCuratedNode( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, uint72 identityId - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -390,21 +422,27 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); pr.addCuratedNode(paranetId, identityId, profileStorage.getNodeId(identityId)); - emit ParanetCuratedNodeJoinRequestAccepted(paranetKCStorageContract, paranetKCTokenId, identityId); - emit ParanetCuratedNodeAdded(paranetKCStorageContract, paranetKCTokenId, identityId); + emit ParanetCuratedNodeJoinRequestAccepted( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + identityId + ); + emit ParanetCuratedNodeAdded(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId, identityId); } function rejectCuratedNode( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, uint72 identityId - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getNodesAccessPolicy(paranetId) != ParanetLib.NodesAccessPolicy.CURATED) { @@ -441,21 +479,27 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ParanetLib.RequestStatus.REJECTED ); - emit ParanetCuratedNodeJoinRequestRejected(paranetKCStorageContract, paranetKCTokenId, identityId); + emit ParanetCuratedNodeJoinRequestRejected( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + identityId + ); } function addParanetServices( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, ParanetLib.UniversalCollectionLocator[] calldata services - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetServicesRegistry psr = paranetServicesRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } for (uint256 i; i < services.length; ) { @@ -515,6 +559,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { emit ParanetServiceAdded( paranetKCStorageContract, paranetKCTokenId, + paranetKATokenId, services[i].knowledgeCollectionStorageContract, services[i].knowledgeCollectionTokenId ); @@ -528,12 +573,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function registerParanetService( address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId, + uint256 paranetKATokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses ) external - onlyKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId) + onlyKnowledgeAssetOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetKATokenId) returns (bytes32) { ParanetServicesRegistry psr = paranetServicesRegistry; @@ -600,15 +646,16 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function addParanetCuratedMiners( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, address[] calldata minerAddresses - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -632,7 +679,12 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addKnowledgeMiner(paranetId, minerAddresses[i]); - emit ParanetCuratedMinerAdded(paranetKCStorageContract, paranetKCTokenId, minerAddresses[i]); + emit ParanetCuratedMinerAdded( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + minerAddresses[i] + ); unchecked { i++; @@ -643,14 +695,15 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function removeParanetCuratedMiners( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, address[] calldata minerAddresses - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -670,7 +723,12 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.removeKnowledgeMiner(paranetId, minerAddresses[i]); - emit ParanetCuratedMinerRemoved(paranetKCStorageContract, paranetKCTokenId, minerAddresses[i]); + emit ParanetCuratedMinerRemoved( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + minerAddresses[i] + ); unchecked { i++; @@ -678,7 +736,11 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { } } - function requestParanetCuratedMinerAccess(address paranetKCStorageContract, uint256 paranetKCTokenId) external { + function requestParanetCuratedMinerAccess( + address paranetKCStorageContract, + uint256 paranetKCTokenId, + uint256 paranetKATokenId + ) external { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); diff --git a/contracts/storage/paranets/ParanetsRegistry.sol b/contracts/storage/paranets/ParanetsRegistry.sol index 8bcd2a5b..5b0a823d 100644 --- a/contracts/storage/paranets/ParanetsRegistry.sol +++ b/contracts/storage/paranets/ParanetsRegistry.sol @@ -34,18 +34,22 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { function registerParanet( address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId, string calldata paranetName, string calldata paranetDescription, ParanetLib.NodesAccessPolicy nodesAccessPolicy, ParanetLib.MinersAccessPolicy minersAccessPolicy, ParanetLib.KnowledgeCollectionsAccessPolicy knowledgeColletionsAccessPolicy ) external onlyContracts returns (bytes32) { - bytes32 paranetId = keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)); + bytes32 paranetId = keccak256( + abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId, knowledgeAssetTokenId) + ); ParanetLib.Paranet storage paranet = paranets[paranetId]; paranet.paranetKCStorageContract = knowledgeCollectionStorageContract; paranet.paranetKCTokenId = knowledgeCollectionTokenId; + paranet.paranetKATokenId = knowledgeAssetTokenId; paranet.name = paranetName; paranet.description = paranetDescription; paranet.nodesAccessPolicy = nodesAccessPolicy; @@ -86,6 +90,7 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { ParanetLib.ParanetMetadata({ paranetKCStorageContract: paranet.paranetKCStorageContract, paranetKCTokenId: paranet.paranetKCTokenId, + paranetKATokenId: paranet.paranetKATokenId, name: paranet.name, description: paranet.description, nodesAccessPolicy: paranet.nodesAccessPolicy, @@ -95,8 +100,12 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { }); } - function getParanetKnowledgeCollectionLocator(bytes32 paranetId) external view returns (address, uint256) { - return (paranets[paranetId].paranetKCStorageContract, paranets[paranetId].paranetKCTokenId); + function getParanetKnowledgeAssetLocator(bytes32 paranetId) external view returns (address, uint256, uint256) { + return ( + paranets[paranetId].paranetKCStorageContract, + paranets[paranetId].paranetKCTokenId, + paranets[paranetId].paranetKATokenId + ); } function getName(bytes32 paranetId) external view returns (string memory) { From 0dfb4b1c3699a14a0d61f0c28592b76d91d25b56 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 12:49:38 +0100 Subject: [PATCH 41/50] Update deployment files --- deployments/base_mainnet_contracts.json | 391 +++++++++--------- deployments/gnosis_mainnet_contracts.json | 382 +++++++++--------- deployments/neuroweb_mainnet_contracts.json | 424 ++++++++++---------- 3 files changed, 598 insertions(+), 599 deletions(-) diff --git a/deployments/base_mainnet_contracts.json b/deployments/base_mainnet_contracts.json index 6bbe24e5..80b13c86 100644 --- a/deployments/base_mainnet_contracts.json +++ b/deployments/base_mainnet_contracts.json @@ -1,199 +1,198 @@ { - "contracts": { - "Token": { - "deployed": true, - "evmAddress": "0xa81a52b4dda010896cdd386c7fbdc5cdc835ba23" - }, - "NeurowebERC20": { - "deployed": true, - "evmAddress": "0x2548c27A04e49B412DD887b08d062D34C72ad2B6" - }, - "OldHub": { - "evmAddress": "0xaBfcf2ad1718828E7D3ec20435b0d0b5EAfbDf2c" - }, - "OldIdentityStorage": { - "evmAddress": "0xD40c74f5D1Ee382deb63Fa92d7ff5bC65415bBEE" - }, - "Hub": { - "evmAddress": "0x99Aa571fD5e681c2D27ee08A7b7989DB02541d13", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189831, - "deploymentTimestamp": 1735169014502, - "deployed": true - }, - "ParametersStorage": { - "evmAddress": "0xdC6615170420b1DDF54812f4430B9cc71eD10099", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189835, - "deploymentTimestamp": 1735169022283, - "deployed": true - }, - "WhitelistStorage": { - "evmAddress": "0x5d7aCedD766b39aa6f20BC49D8F36D2665cdcEb2", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189840, - "deploymentTimestamp": 1735169032135, - "deployed": true - }, - "IdentityStorage": { - "evmAddress": "0xDc67F8Fc0021b20db24701dfA6E67E5739bf094b", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189844, - "deploymentTimestamp": 1735169040198, - "deployed": true - }, - "ShardingTableStorage": { - "evmAddress": "0xF59ca9Eb70D7af0700394924B1053548dE6aE7aF", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189848, - "deploymentTimestamp": 1735169048165, - "deployed": true - }, - "StakingStorage": { - "evmAddress": "0x57307C87E95a372C5D94BCC372bb7304505A739D", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189852, - "deploymentTimestamp": 1735169053403, - "deployed": true - }, - "ProfileStorage": { - "evmAddress": "0x62Ac6414857FAaa08eadA066F3370e7fB3010ed3", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189856, - "deploymentTimestamp": 1735169062573, - "deployed": true - }, - "Chronos": { - "evmAddress": "0x07B1442717bbeD003ab2B2165B1b020F3F6B924B", - "version": null, - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189860, - "deploymentTimestamp": 1735169070781, - "deployed": true - }, - "EpochStorageV6": { - "evmAddress": "0x390B6Dc895D5C815FDC85023d6FB1261fe62c9F7", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189864, - "deploymentTimestamp": 1735169080177, - "deployed": true - }, - "EpochStorageV8": { - "evmAddress": "0x271Dd66348844bbe1d8bf838a4DAE5b4B7f558A1", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189869, - "deploymentTimestamp": 1735169088758, - "deployed": true - }, - "KnowledgeCollectionStorage": { - "evmAddress": "0xc28F310A87f7621A087A603E2ce41C22523F11d7", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189873, - "deploymentTimestamp": 1735169097530, - "deployed": true - }, - "PaymasterManager": { - "evmAddress": "0x937f4A6299ae22DB3f1990aFff8513F2a181eA7C", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189877, - "deploymentTimestamp": 1735169102947, - "deployed": true - }, - "AskStorage": { - "evmAddress": "0xDBdfe1628B4700f2D45Cb2292F905e56F06B8802", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 24224668, - "deploymentTimestamp": 1735238686973, - "deployed": true - }, - - "Identity": { - "evmAddress": "0x57fE6A6f56191bEcfAC857778FdB002803cd2EB2", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189884, - "deploymentTimestamp": 1735169119909, - "deployed": true - }, - "ShardingTable": { - "evmAddress": "0x825B05c8838A8D939EADd08D80e4bce980059b70", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189888, - "deploymentTimestamp": 1735169127961, - "deployed": true - }, - "Ask": { - "evmAddress": "0xF4be9eE05cBA91b6445DA7576F43CF91cB8958F5", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 24221985, - "deploymentTimestamp": 1735233321134, - "deployed": true - }, - "Staking": { - "evmAddress": "0xd5Ed8EAb35536F8C33C38128087441218Df65B1C", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 24221990, - "deploymentTimestamp": 1735233334587, - "deployed": true - }, - "Profile": { - "evmAddress": "0x2F0dd0781F13aA24d3E3061E3AfB8a411fbc64d7", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 24221996, - "deploymentTimestamp": 1735233343023, - "deployed": true - }, - "KnowledgeCollection": { - "evmAddress": "0x0924BeF5F4fB8c72064781ff2a4a661e298c76FC", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189905, - "deploymentTimestamp": 1735169162103, - "deployed": true - }, - "Migrator": { - "evmAddress": "0xc6B8b1E3EFE8BE4dA79f3C2Cfc36d37d6F3DC8CB", - "version": null, - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 24189909, - "deploymentTimestamp": 1735169166389, - "deployed": true - } + "contracts": { + "Token": { + "deployed": true, + "evmAddress": "0xa81a52b4dda010896cdd386c7fbdc5cdc835ba23" + }, + "NeurowebERC20": { + "deployed": true, + "evmAddress": "0x2548c27A04e49B412DD887b08d062D34C72ad2B6" + }, + "OldHub": { + "evmAddress": "0xaBfcf2ad1718828E7D3ec20435b0d0b5EAfbDf2c" + }, + "OldIdentityStorage": { + "evmAddress": "0xD40c74f5D1Ee382deb63Fa92d7ff5bC65415bBEE" + }, + "Hub": { + "evmAddress": "0x99Aa571fD5e681c2D27ee08A7b7989DB02541d13", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189831, + "deploymentTimestamp": 1735169014502, + "deployed": true + }, + "ParametersStorage": { + "evmAddress": "0xdC6615170420b1DDF54812f4430B9cc71eD10099", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189835, + "deploymentTimestamp": 1735169022283, + "deployed": true + }, + "WhitelistStorage": { + "evmAddress": "0x5d7aCedD766b39aa6f20BC49D8F36D2665cdcEb2", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189840, + "deploymentTimestamp": 1735169032135, + "deployed": true + }, + "IdentityStorage": { + "evmAddress": "0xDc67F8Fc0021b20db24701dfA6E67E5739bf094b", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189844, + "deploymentTimestamp": 1735169040198, + "deployed": true + }, + "ShardingTableStorage": { + "evmAddress": "0xF59ca9Eb70D7af0700394924B1053548dE6aE7aF", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189848, + "deploymentTimestamp": 1735169048165, + "deployed": true + }, + "StakingStorage": { + "evmAddress": "0x57307C87E95a372C5D94BCC372bb7304505A739D", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189852, + "deploymentTimestamp": 1735169053403, + "deployed": true + }, + "ProfileStorage": { + "evmAddress": "0x62Ac6414857FAaa08eadA066F3370e7fB3010ed3", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189856, + "deploymentTimestamp": 1735169062573, + "deployed": true + }, + "Chronos": { + "evmAddress": "0x07B1442717bbeD003ab2B2165B1b020F3F6B924B", + "version": null, + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189860, + "deploymentTimestamp": 1735169070781, + "deployed": true + }, + "EpochStorageV6": { + "evmAddress": "0x390B6Dc895D5C815FDC85023d6FB1261fe62c9F7", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189864, + "deploymentTimestamp": 1735169080177, + "deployed": true + }, + "EpochStorageV8": { + "evmAddress": "0x271Dd66348844bbe1d8bf838a4DAE5b4B7f558A1", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189869, + "deploymentTimestamp": 1735169088758, + "deployed": true + }, + "KnowledgeCollectionStorage": { + "evmAddress": "0xc28F310A87f7621A087A603E2ce41C22523F11d7", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189873, + "deploymentTimestamp": 1735169097530, + "deployed": true + }, + "PaymasterManager": { + "evmAddress": "0x937f4A6299ae22DB3f1990aFff8513F2a181eA7C", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189877, + "deploymentTimestamp": 1735169102947, + "deployed": true + }, + "AskStorage": { + "evmAddress": "0xDBdfe1628B4700f2D45Cb2292F905e56F06B8802", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 24224668, + "deploymentTimestamp": 1735238686973, + "deployed": true + }, + "Identity": { + "evmAddress": "0x57fE6A6f56191bEcfAC857778FdB002803cd2EB2", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189884, + "deploymentTimestamp": 1735169119909, + "deployed": true + }, + "ShardingTable": { + "evmAddress": "0x825B05c8838A8D939EADd08D80e4bce980059b70", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189888, + "deploymentTimestamp": 1735169127961, + "deployed": true + }, + "Ask": { + "evmAddress": "0xF4be9eE05cBA91b6445DA7576F43CF91cB8958F5", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 24221985, + "deploymentTimestamp": 1735233321134, + "deployed": true + }, + "Staking": { + "evmAddress": "0xd5Ed8EAb35536F8C33C38128087441218Df65B1C", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 24221990, + "deploymentTimestamp": 1735233334587, + "deployed": true + }, + "Profile": { + "evmAddress": "0x2F0dd0781F13aA24d3E3061E3AfB8a411fbc64d7", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 24221996, + "deploymentTimestamp": 1735233343023, + "deployed": true + }, + "Migrator": { + "evmAddress": "0xc6B8b1E3EFE8BE4dA79f3C2Cfc36d37d6F3DC8CB", + "version": null, + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 24189909, + "deploymentTimestamp": 1735169166389, + "deployed": true + }, + "KnowledgeCollection": { + "evmAddress": "0x49CECDF153cE9419a0D2B762Cfd1AFda5C5c6Efd", + "version": "1.0.0", + "gitBranch": "fix/remove-kc-update", + "gitCommitHash": "300217f1fc39b0ba448a1bbf8b74e7c5d4d13136", + "deploymentBlock": 25464971, + "deploymentTimestamp": 1737719292176, + "deployed": true } + } } diff --git a/deployments/gnosis_mainnet_contracts.json b/deployments/gnosis_mainnet_contracts.json index 01482f93..1d6266fa 100644 --- a/deployments/gnosis_mainnet_contracts.json +++ b/deployments/gnosis_mainnet_contracts.json @@ -1,194 +1,194 @@ { - "contracts": { - "Token": { - "deployed": true, - "evmAddress": "0xEddd81E0792E764501AaE206EB432399a0268DB5" - }, - "OldHub": { - "evmAddress": "0xbEF14fc04F870c2dD65c13Df4faB6ba01A9c746b" - }, - "OldIdentityStorage": { - "evmAddress": "0xe369328795B24853C53132186DE45757105f79e4" - }, - "Hub": { - "evmAddress": "0x882D0BF07F956b1b94BBfe9E77F47c6fc7D4EC8f", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713034, - "deploymentTimestamp": 1735170543771, - "deployed": true - }, - "ParametersStorage": { - "evmAddress": "0x2323c8B7B60A5b8A6CEa0B3EE5e444306C9F69aB", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713036, - "deploymentTimestamp": 1735170552655, - "deployed": true - }, - "WhitelistStorage": { - "evmAddress": "0xd8ca67a3Ac9C24D266C6097B96eEF275156B2e9a", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713038, - "deploymentTimestamp": 1735170563255, - "deployed": true - }, - "IdentityStorage": { - "evmAddress": "0x3baDc8222C7B801FEc824890E4ea65Fa7ecF70a3", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713040, - "deploymentTimestamp": 1735170571481, - "deployed": true - }, - "ShardingTableStorage": { - "evmAddress": "0xba6a5c765CEf48f1992324a6b400D5b0Eb0B13B4", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713042, - "deploymentTimestamp": 1735170583604, - "deployed": true - }, - "StakingStorage": { - "evmAddress": "0x03DbaBD10C2e99C9F4cb5f18a6635545Ef526386", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713044, - "deploymentTimestamp": 1735170593608, - "deployed": true - }, - "ProfileStorage": { - "evmAddress": "0x60c9bCD2Fab842DD5D631C4bCeCE7cF305EF5416", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713046, - "deploymentTimestamp": 1735170602933, - "deployed": true - }, - "Chronos": { - "evmAddress": "0x0913cBBbF760D53A88915a0CFF57ED8A3409b4fe", - "version": null, - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713048, - "deploymentTimestamp": 1735170613290, - "deployed": true - }, - "EpochStorageV6": { - "evmAddress": "0x6a3f334144b349def5DB1CB14491558974b205f2", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713050, - "deploymentTimestamp": 1735170625963, - "deployed": true - }, - "EpochStorageV8": { - "evmAddress": "0x054f356265E7E43f3E1641D00cDF51E762e8Cd58", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713052, - "deploymentTimestamp": 1735170639130, - "deployed": true - }, - "KnowledgeCollectionStorage": { - "evmAddress": "0x3Cb124E1cDcEECF6E464BB185325608dbe635f5D", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713054, - "deploymentTimestamp": 1735170649343, - "deployed": true - }, - "PaymasterManager": { - "evmAddress": "0xF258508Cada5176A808A6acb640Fd621Af74885b", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713056, - "deploymentTimestamp": 1735170658326, - "deployed": true - }, - "AskStorage": { - "evmAddress": "0x397441d8480Ab694Ba9f915D7e2Fb6E7206A207c", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 37726238, - "deploymentTimestamp": 1735239475012, - "deployed": true - }, - "Identity": { - "evmAddress": "0x08062706018bda4Ed91986E12A069f4cddb8Ec94", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713060, - "deploymentTimestamp": 1735170676192, - "deployed": true - }, - "ShardingTable": { - "evmAddress": "0x16F056aea9166349D05A8f707511C834a5B193C7", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713062, - "deploymentTimestamp": 1735170688253, - "deployed": true - }, - "Ask": { - "evmAddress": "0x48BA9d59c827B4DBc3661761791A84995cD114C8", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 37724989, - "deploymentTimestamp": 1735233004117, - "deployed": true - }, - "Staking": { - "evmAddress": "0x828405dfc287f7d9B9Cc0588D036f2B94231e166", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 37724991, - "deploymentTimestamp": 1735233012746, - "deployed": true - }, - "Profile": { - "evmAddress": "0x8b372Da0A74d2AbF10DC9b3Fbf29c8d3F98DbeE2", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 37724993, - "deploymentTimestamp": 1735233025701, - "deployed": true - }, - "KnowledgeCollection": { - "evmAddress": "0x2149a412E88014C9F47c2628bBf70239a398f425", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713070, - "deploymentTimestamp": 1735170726022, - "deployed": true - }, - "Migrator": { - "evmAddress": "0xdB60B4d2747680051d5D6010Ed0e08576aB2aaec", - "version": null, - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 37713071, - "deploymentTimestamp": 1735170734385, - "deployed": true - } + "contracts": { + "Token": { + "deployed": true, + "evmAddress": "0xEddd81E0792E764501AaE206EB432399a0268DB5" + }, + "OldHub": { + "evmAddress": "0xbEF14fc04F870c2dD65c13Df4faB6ba01A9c746b" + }, + "OldIdentityStorage": { + "evmAddress": "0xe369328795B24853C53132186DE45757105f79e4" + }, + "Hub": { + "evmAddress": "0x882D0BF07F956b1b94BBfe9E77F47c6fc7D4EC8f", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713034, + "deploymentTimestamp": 1735170543771, + "deployed": true + }, + "ParametersStorage": { + "evmAddress": "0x2323c8B7B60A5b8A6CEa0B3EE5e444306C9F69aB", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713036, + "deploymentTimestamp": 1735170552655, + "deployed": true + }, + "WhitelistStorage": { + "evmAddress": "0xd8ca67a3Ac9C24D266C6097B96eEF275156B2e9a", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713038, + "deploymentTimestamp": 1735170563255, + "deployed": true + }, + "IdentityStorage": { + "evmAddress": "0x3baDc8222C7B801FEc824890E4ea65Fa7ecF70a3", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713040, + "deploymentTimestamp": 1735170571481, + "deployed": true + }, + "ShardingTableStorage": { + "evmAddress": "0xba6a5c765CEf48f1992324a6b400D5b0Eb0B13B4", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713042, + "deploymentTimestamp": 1735170583604, + "deployed": true + }, + "StakingStorage": { + "evmAddress": "0x03DbaBD10C2e99C9F4cb5f18a6635545Ef526386", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713044, + "deploymentTimestamp": 1735170593608, + "deployed": true + }, + "ProfileStorage": { + "evmAddress": "0x60c9bCD2Fab842DD5D631C4bCeCE7cF305EF5416", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713046, + "deploymentTimestamp": 1735170602933, + "deployed": true + }, + "Chronos": { + "evmAddress": "0x0913cBBbF760D53A88915a0CFF57ED8A3409b4fe", + "version": null, + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713048, + "deploymentTimestamp": 1735170613290, + "deployed": true + }, + "EpochStorageV6": { + "evmAddress": "0x6a3f334144b349def5DB1CB14491558974b205f2", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713050, + "deploymentTimestamp": 1735170625963, + "deployed": true + }, + "EpochStorageV8": { + "evmAddress": "0x054f356265E7E43f3E1641D00cDF51E762e8Cd58", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713052, + "deploymentTimestamp": 1735170639130, + "deployed": true + }, + "KnowledgeCollectionStorage": { + "evmAddress": "0x3Cb124E1cDcEECF6E464BB185325608dbe635f5D", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713054, + "deploymentTimestamp": 1735170649343, + "deployed": true + }, + "PaymasterManager": { + "evmAddress": "0xF258508Cada5176A808A6acb640Fd621Af74885b", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713056, + "deploymentTimestamp": 1735170658326, + "deployed": true + }, + "AskStorage": { + "evmAddress": "0x397441d8480Ab694Ba9f915D7e2Fb6E7206A207c", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 37726238, + "deploymentTimestamp": 1735239475012, + "deployed": true + }, + "Identity": { + "evmAddress": "0x08062706018bda4Ed91986E12A069f4cddb8Ec94", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713060, + "deploymentTimestamp": 1735170676192, + "deployed": true + }, + "ShardingTable": { + "evmAddress": "0x16F056aea9166349D05A8f707511C834a5B193C7", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713062, + "deploymentTimestamp": 1735170688253, + "deployed": true + }, + "Ask": { + "evmAddress": "0x48BA9d59c827B4DBc3661761791A84995cD114C8", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 37724989, + "deploymentTimestamp": 1735233004117, + "deployed": true + }, + "Staking": { + "evmAddress": "0x828405dfc287f7d9B9Cc0588D036f2B94231e166", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 37724991, + "deploymentTimestamp": 1735233012746, + "deployed": true + }, + "Profile": { + "evmAddress": "0x8b372Da0A74d2AbF10DC9b3Fbf29c8d3F98DbeE2", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 37724993, + "deploymentTimestamp": 1735233025701, + "deployed": true + }, + "Migrator": { + "evmAddress": "0xdB60B4d2747680051d5D6010Ed0e08576aB2aaec", + "version": null, + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 37713071, + "deploymentTimestamp": 1735170734385, + "deployed": true + }, + "KnowledgeCollection": { + "evmAddress": "0x49CECDF153cE9419a0D2B762Cfd1AFda5C5c6Efd", + "version": "1.0.0", + "gitBranch": "fix/remove-kc-update", + "gitCommitHash": "300217f1fc39b0ba448a1bbf8b74e7c5d4d13136", + "deploymentBlock": 38203521, + "deploymentTimestamp": 1737719183101, + "deployed": true } + } } diff --git a/deployments/neuroweb_mainnet_contracts.json b/deployments/neuroweb_mainnet_contracts.json index dd86eb2c..51f9a747 100644 --- a/deployments/neuroweb_mainnet_contracts.json +++ b/deployments/neuroweb_mainnet_contracts.json @@ -1,215 +1,215 @@ { - "contracts": { - "Token": { - "deployed": true, - "evmAddress": "0xFfFFFFff00000000000000000000000000000001", - "substrateAddress": "5EMjsd1DUGXmZiLinvCzc3vG9GVfE5dE1TMBYKR5LMVDrVvU" - }, - "OldHub": { - "evmAddress": "0x5fA7916c48Fe6D5F1738d12Ad234b78c90B4cAdA" - }, - "OldIdentityStorage": { - "evmAddress": "0x2C81a650A2E9C8eB88d941A8ab50E1F3eEEe08Ac" - }, - "Hub": { - "evmAddress": "0x0957e25BD33034948abc28204ddA54b6E1142D6F", - "substrateAddress": "5EMjsczN3iPG2tB2mv2p1QDLDDCaVjuFNtfC9HkNEJoa1PL5", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237897, - "deploymentTimestamp": 1735172196310, - "deployed": true - }, - "ParametersStorage": { - "evmAddress": "0xF81D1E84C75AEbb717d8E3560477fFB0fcc642A7", - "substrateAddress": "5EMjsd1BtcmH3C7FxzXDk9j9E6ApAFZussCHDCKWD1wKJMNB", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237899, - "deploymentTimestamp": 1735172203804, - "deployed": true - }, - "WhitelistStorage": { - "evmAddress": "0x0e93233BAE82554B74AC989BD67eBed0EA47E116", - "substrateAddress": "5EMjsczP6Wg5t1ThcxMsMV1Wk3s8nU9sVZJg1CvPaRihLaTf", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237900, - "deploymentTimestamp": 1735172209196, - "deployed": true - }, - "IdentityStorage": { - "evmAddress": "0x9E2306977C0bC6f0BfF7BC9290B5C68D0386Caf2", - "substrateAddress": "5EMjsczsrwNyT7f4KMbCh65oWobJ7YEAg5iCE7Ebzyrb8JUf", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237901, - "deploymentTimestamp": 1735172216391, - "deployed": true - }, - "ShardingTableStorage": { - "evmAddress": "0xe6ddE49E3cb2dc24549CD2506052Af14762dc36D", - "substrateAddress": "5EMjsd18SBMaFCpQz9Den91TEJ9nu5GbfVtxEqGd75N4aRZY", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237902, - "deploymentTimestamp": 1735172224118, - "deployed": true - }, - "StakingStorage": { - "evmAddress": "0x36175d07F8F0022B7cB24dd6F68062f1dD7E425f", - "substrateAddress": "5EMjsczX1ky6BxmSwnbofNUJUVCkasCEBRgKFZe9qR5m9qVY", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237903, - "deploymentTimestamp": 1735172228119, - "deployed": true - }, - "ProfileStorage": { - "evmAddress": "0x33C4ed3117aE00A4226CAB9182bE7CFC1307dBe7", - "substrateAddress": "5EMjsczWYmoLPJRQLSr2RCMVp7uASoopwsH9GwphgSTThCQu", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237904, - "deploymentTimestamp": 1735172235628, - "deployed": true - }, - "Chronos": { - "evmAddress": "0xCFb72d5F0C888Be93d67EeaAf6Daac8507D85853", - "substrateAddress": "5EMjsd13o89txKQYdL3T6xZXyR7cNrACHeviJienVtS3d5Qt", - "version": null, - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237905, - "deploymentTimestamp": 1735172242852, - "deployed": true - }, - "EpochStorageV6": { - "evmAddress": "0x1Bb8e5e73f95ecCf63771bB53aA461c3Fac57c5B", - "substrateAddress": "5EMjsczRjJp3iiUFXSgPVkYDQ9RFYRRtYDkoYwTQz4ZoyaUS", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237906, - "deploymentTimestamp": 1735172245713, - "deployed": true - }, - "EpochStorageV8": { - "evmAddress": "0x079C6744ed723Df6da6d18c56520362569D5448A", - "substrateAddress": "5EMjsczMhagqnbm94sBEW8iZXqb2cgAf7Fdqh3Q6NWqP8CyR", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237907, - "deploymentTimestamp": 1735172253485, - "deployed": true - }, - "KnowledgeCollectionStorage": { - "evmAddress": "0x8f678eB0E57ee8A109B295710E23076fA3a443fe", - "substrateAddress": "5EMjsczpuj16nJsqCa2jKa3qZadcS8SEHM6UeEz3U56doXgq", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237908, - "deploymentTimestamp": 1735172257647, - "deployed": true - }, - "PaymasterManager": { - "evmAddress": "0x32c70FfB23BcC1cD6632e1e0C9208AB947565aCe", - "substrateAddress": "5EMjsczWMFNLZhpo7TbwUobfpCHNEtYcpBEDLdrfvxEr9wtz", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237909, - "deploymentTimestamp": 1735172265323, - "deployed": true - }, - "AskStorage": { - "evmAddress": "0x44e438332dF57983ec3402B0a5F8f462caE268d4", - "substrateAddress": "5EMjsczZym8M2g4w4UqNvMEortekbVKZqbkHYTh3KEVV2BuV", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 7249059, - "deploymentTimestamp": 1735239728174, - "deployed": true - }, - "Identity": { - "evmAddress": "0xF9F7c3Eac0b489ae87c33F5eE8095E148115Ea9a", - "substrateAddress": "5EMjsd1CGAX7ifoX9AsS4Dt9ZwcFJpCN63zdqXufvca6p6Pj", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237912, - "deploymentTimestamp": 1735172282503, - "deployed": true - }, - "ShardingTable": { - "evmAddress": "0x6a1D804274C6f0624cD95b590481a14CFF50691a", - "substrateAddress": "5EMjsczhSMyq6Z9ZWBuHUBkX7vZzLSuE9Z89xLZXqcxZqhM2", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237913, - "deploymentTimestamp": 1735172290900, - "deployed": true - }, - "Ask": { - "evmAddress": "0x064F451b40791BB43dBAb92434768B5e30EE03a6", - "substrateAddress": "5EMjsczMSTYBbHGu8ZwE8Hf8Zk68iMe8yhqGsAdN21yXcdJs", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 7248330, - "deploymentTimestamp": 1735235312583, - "deployed": true - }, - "Staking": { - "evmAddress": "0x996eF3cfd6c788618C359Fb538D49281a0b13805", - "substrateAddress": "5EMjsczrvH2FESdqKMxY6Rz1yskqnqgJAKjr6efKNqXoFn6k", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 7248332, - "deploymentTimestamp": 1735235328833, - "deployed": true - }, - "Profile": { - "evmAddress": "0x53352D8B4C3582162fAc3f4e0067961E67C3c231", - "substrateAddress": "5EMjsczcr94VH5QyM1RC9tfY3awdUrkAFFP1mrnKVMGi2Asz", - "version": "1.0.0", - "gitBranch": "v8/pricing-fix", - "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", - "deploymentBlock": 7248334, - "deploymentTimestamp": 1735235336400, - "deployed": true - }, - "KnowledgeCollection": { - "evmAddress": "0xc8cf8064d7fc7cF42d51Ca5B28218472157F3d90", - "substrateAddress": "5EMjsd12QspKvHfuBbRBtiHPYt99HtrVYtVLhPrvHXVkAFES", - "version": "1.0.0", - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237920, - "deploymentTimestamp": 1735172331238, - "deployed": true - }, - "Migrator": { - "evmAddress": "0xce8499e36297F7cd0c0C9BCCb0C0C7945744e1D4", - "substrateAddress": "5EMjsd13ZCvxUafKvUNyzeJU2g5JUC5wcph9kF8WfGXF8UfD", - "version": null, - "gitBranch": "v8-contracts", - "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", - "deploymentBlock": 7237921, - "deploymentTimestamp": 1735172339296, - "deployed": true - } + "contracts": { + "Token": { + "deployed": true, + "evmAddress": "0xFfFFFFff00000000000000000000000000000001", + "substrateAddress": "5EMjsd1DUGXmZiLinvCzc3vG9GVfE5dE1TMBYKR5LMVDrVvU" + }, + "OldHub": { + "evmAddress": "0x5fA7916c48Fe6D5F1738d12Ad234b78c90B4cAdA" + }, + "OldIdentityStorage": { + "evmAddress": "0x2C81a650A2E9C8eB88d941A8ab50E1F3eEEe08Ac" + }, + "Hub": { + "evmAddress": "0x0957e25BD33034948abc28204ddA54b6E1142D6F", + "substrateAddress": "5EMjsczN3iPG2tB2mv2p1QDLDDCaVjuFNtfC9HkNEJoa1PL5", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237897, + "deploymentTimestamp": 1735172196310, + "deployed": true + }, + "ParametersStorage": { + "evmAddress": "0xF81D1E84C75AEbb717d8E3560477fFB0fcc642A7", + "substrateAddress": "5EMjsd1BtcmH3C7FxzXDk9j9E6ApAFZussCHDCKWD1wKJMNB", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237899, + "deploymentTimestamp": 1735172203804, + "deployed": true + }, + "WhitelistStorage": { + "evmAddress": "0x0e93233BAE82554B74AC989BD67eBed0EA47E116", + "substrateAddress": "5EMjsczP6Wg5t1ThcxMsMV1Wk3s8nU9sVZJg1CvPaRihLaTf", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237900, + "deploymentTimestamp": 1735172209196, + "deployed": true + }, + "IdentityStorage": { + "evmAddress": "0x9E2306977C0bC6f0BfF7BC9290B5C68D0386Caf2", + "substrateAddress": "5EMjsczsrwNyT7f4KMbCh65oWobJ7YEAg5iCE7Ebzyrb8JUf", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237901, + "deploymentTimestamp": 1735172216391, + "deployed": true + }, + "ShardingTableStorage": { + "evmAddress": "0xe6ddE49E3cb2dc24549CD2506052Af14762dc36D", + "substrateAddress": "5EMjsd18SBMaFCpQz9Den91TEJ9nu5GbfVtxEqGd75N4aRZY", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237902, + "deploymentTimestamp": 1735172224118, + "deployed": true + }, + "StakingStorage": { + "evmAddress": "0x36175d07F8F0022B7cB24dd6F68062f1dD7E425f", + "substrateAddress": "5EMjsczX1ky6BxmSwnbofNUJUVCkasCEBRgKFZe9qR5m9qVY", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237903, + "deploymentTimestamp": 1735172228119, + "deployed": true + }, + "ProfileStorage": { + "evmAddress": "0x33C4ed3117aE00A4226CAB9182bE7CFC1307dBe7", + "substrateAddress": "5EMjsczWYmoLPJRQLSr2RCMVp7uASoopwsH9GwphgSTThCQu", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237904, + "deploymentTimestamp": 1735172235628, + "deployed": true + }, + "Chronos": { + "evmAddress": "0xCFb72d5F0C888Be93d67EeaAf6Daac8507D85853", + "substrateAddress": "5EMjsd13o89txKQYdL3T6xZXyR7cNrACHeviJienVtS3d5Qt", + "version": null, + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237905, + "deploymentTimestamp": 1735172242852, + "deployed": true + }, + "EpochStorageV6": { + "evmAddress": "0x1Bb8e5e73f95ecCf63771bB53aA461c3Fac57c5B", + "substrateAddress": "5EMjsczRjJp3iiUFXSgPVkYDQ9RFYRRtYDkoYwTQz4ZoyaUS", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237906, + "deploymentTimestamp": 1735172245713, + "deployed": true + }, + "EpochStorageV8": { + "evmAddress": "0x079C6744ed723Df6da6d18c56520362569D5448A", + "substrateAddress": "5EMjsczMhagqnbm94sBEW8iZXqb2cgAf7Fdqh3Q6NWqP8CyR", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237907, + "deploymentTimestamp": 1735172253485, + "deployed": true + }, + "KnowledgeCollectionStorage": { + "evmAddress": "0x8f678eB0E57ee8A109B295710E23076fA3a443fe", + "substrateAddress": "5EMjsczpuj16nJsqCa2jKa3qZadcS8SEHM6UeEz3U56doXgq", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237908, + "deploymentTimestamp": 1735172257647, + "deployed": true + }, + "PaymasterManager": { + "evmAddress": "0x32c70FfB23BcC1cD6632e1e0C9208AB947565aCe", + "substrateAddress": "5EMjsczWMFNLZhpo7TbwUobfpCHNEtYcpBEDLdrfvxEr9wtz", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237909, + "deploymentTimestamp": 1735172265323, + "deployed": true + }, + "AskStorage": { + "evmAddress": "0x44e438332dF57983ec3402B0a5F8f462caE268d4", + "substrateAddress": "5EMjsczZym8M2g4w4UqNvMEortekbVKZqbkHYTh3KEVV2BuV", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 7249059, + "deploymentTimestamp": 1735239728174, + "deployed": true + }, + "Identity": { + "evmAddress": "0xF9F7c3Eac0b489ae87c33F5eE8095E148115Ea9a", + "substrateAddress": "5EMjsd1CGAX7ifoX9AsS4Dt9ZwcFJpCN63zdqXufvca6p6Pj", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237912, + "deploymentTimestamp": 1735172282503, + "deployed": true + }, + "ShardingTable": { + "evmAddress": "0x6a1D804274C6f0624cD95b590481a14CFF50691a", + "substrateAddress": "5EMjsczhSMyq6Z9ZWBuHUBkX7vZzLSuE9Z89xLZXqcxZqhM2", + "version": "1.0.0", + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237913, + "deploymentTimestamp": 1735172290900, + "deployed": true + }, + "Ask": { + "evmAddress": "0x064F451b40791BB43dBAb92434768B5e30EE03a6", + "substrateAddress": "5EMjsczMSTYBbHGu8ZwE8Hf8Zk68iMe8yhqGsAdN21yXcdJs", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 7248330, + "deploymentTimestamp": 1735235312583, + "deployed": true + }, + "Staking": { + "evmAddress": "0x996eF3cfd6c788618C359Fb538D49281a0b13805", + "substrateAddress": "5EMjsczrvH2FESdqKMxY6Rz1yskqnqgJAKjr6efKNqXoFn6k", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 7248332, + "deploymentTimestamp": 1735235328833, + "deployed": true + }, + "Profile": { + "evmAddress": "0x53352D8B4C3582162fAc3f4e0067961E67C3c231", + "substrateAddress": "5EMjsczcr94VH5QyM1RC9tfY3awdUrkAFFP1mrnKVMGi2Asz", + "version": "1.0.0", + "gitBranch": "v8/pricing-fix", + "gitCommitHash": "41db1cea6e655a8a7d869814b05f0d49dcaed9d4", + "deploymentBlock": 7248334, + "deploymentTimestamp": 1735235336400, + "deployed": true + }, + "Migrator": { + "evmAddress": "0xce8499e36297F7cd0c0C9BCCb0C0C7945744e1D4", + "substrateAddress": "5EMjsd13ZCvxUafKvUNyzeJU2g5JUC5wcph9kF8WfGXF8UfD", + "version": null, + "gitBranch": "v8-contracts", + "gitCommitHash": "e8eb0e42e23f4e7d0d957266d83d25d9407ff656", + "deploymentBlock": 7237921, + "deploymentTimestamp": 1735172339296, + "deployed": true + }, + "KnowledgeCollection": { + "evmAddress": "0x7CB6F4d2bd9021De7009811f57C8eBcf6633a90b", + "substrateAddress": "5EMjsczmAX27JyN8wSU3qD7KGmkXCNfgYe34ucV1ZWsKtyYo", + "version": "1.0.0", + "gitBranch": "fix/remove-kc-update", + "gitCommitHash": "300217f1fc39b0ba448a1bbf8b74e7c5d4d13136", + "deploymentBlock": 7657316, + "deploymentTimestamp": 1737719140267, + "deployed": true } + } } From c74bddf5625578db33eb8c6c32e66c989b346aba Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 14:28:22 +0100 Subject: [PATCH 42/50] wip --- contracts/libraries/ParanetLib.sol | 1 + contracts/paranets/Paranet.sol | 130 ++++++++++++++---- .../paranets/ParanetIncentivesPoolFactory.sol | 43 +++--- .../paranets/ParanetNeuroIncentivesPool.sol | 23 +--- 4 files changed, 134 insertions(+), 63 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 3d780603..aaa85fd9 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -205,6 +205,7 @@ library ParanetLib { error ParanetIncentivesPoolAlreadyExists( address knowledgeCollectionStorageAddress, uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId, string poolType, address poolAddress ); diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 74104a1d..a1720dc0 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -31,43 +31,51 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetCuratedNodeAdded( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, uint72 identityId ); event ParanetCuratedNodeRemoved( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, uint72 identityId ); event ParanetCuratedNodeJoinRequestCreated( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, uint72 identityId ); event ParanetCuratedNodeJoinRequestAccepted( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, uint72 identityId ); event ParanetCuratedNodeJoinRequestRejected( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, uint72 identityId ); event ParanetIncetivesPoolDeployed( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, ParanetLib.IncentivesPool incentivesPool ); event ParanetMetadataUpdated( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, string newParanetName, string newParanetDescription ); event ParanetServiceAdded( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, - address indexed paranetServiceKCStorageContract, + uint256 indexed paranetKATokenId, + address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId ); event ParanetServiceRegistered( @@ -87,32 +95,38 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event KnowledgeCollectionSubmittedToParanet( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, - address indexed knowledgeCollectionStorageContract, + uint256 indexed paranetKATokenId, + address knowledgeCollectionStorageContract, uint256 knowledgeCollectionId ); event ParanetCuratedMinerAdded( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, address minerAddress ); event ParanetCuratedMinerRemoved( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, address minerAddress ); event ParanetCuratedMinerAccessRequestCreated( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, address minerAddress ); event ParanetCuratedMinerAccessRequestAccepted( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, address minerAddress ); event ParanetCuratedMinerAccessRequestRejected( address indexed paranetKCStorageContract, uint256 indexed paranetKCTokenId, + uint256 indexed paranetKATokenId, address minerAddress ); @@ -137,6 +151,19 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { _; } + modifier onlyKnowledgeAssetOwner( + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId + ) { + _checkKnowledgeAssetOwner( + knowledgeCollectionStorageContract, + knowledgeCollectionTokenId, + knowledgeAssetTokenId + ); + _; + } + function initialize() public onlyHub { profileStorage = ProfileStorage(hub.getContractAddress("ProfileStorage")); identityStorage = IdentityStorage(hub.getContractAddress("IdentityStorage")); @@ -235,7 +262,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 paranetKCTokenId, uint256 paranetKATokenId, uint72[] calldata identityIds - ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, onlyKnowledgeAssetOwner) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ProfileStorage ps = profileStorage; @@ -266,7 +293,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addCuratedNode(paranetId, identityIds[i], ps.getNodeId(identityIds[i])); - emit ParanetCuratedNodeAdded(paranetKCStorageContract, paranetKCTokenId, identityIds[i]); + emit ParanetCuratedNodeAdded(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId, identityIds[i]); unchecked { i++; @@ -378,7 +405,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 paranetKCTokenId, uint256 paranetKATokenId, uint72 identityId - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); @@ -743,10 +770,10 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ) external { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -776,20 +803,26 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { pr.addKnowledgeMinerAccessRequest(paranetId, msg.sender, ParanetLib.RequestStatus.PENDING); - emit ParanetCuratedMinerAccessRequestCreated(paranetKCStorageContract, paranetKCTokenId, msg.sender); + emit ParanetCuratedMinerAccessRequestCreated( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + msg.sender + ); } function approveCuratedMiner( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, address minerAddress - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -826,21 +859,27 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ); pr.addKnowledgeMiner(paranetId, minerAddress); - emit ParanetCuratedMinerAccessRequestAccepted(paranetKCStorageContract, paranetKCTokenId, minerAddress); - emit ParanetCuratedMinerAdded(paranetKCStorageContract, paranetKCTokenId, minerAddress); + emit ParanetCuratedMinerAccessRequestAccepted( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + minerAddress + ); + emit ParanetCuratedMinerAdded(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId, minerAddress); } function rejectCuratedMiner( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, address minerAddress - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId); + revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } if (pr.getMinersAccessPolicy(paranetId) != ParanetLib.MinersAccessPolicy.CURATED) { @@ -876,7 +915,12 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ParanetLib.RequestStatus.REJECTED ); - emit ParanetCuratedMinerAccessRequestRejected(paranetKCStorageContract, paranetKCTokenId, minerAddress); + emit ParanetCuratedMinerAccessRequestRejected( + paranetKCStorageContract, + paranetKCTokenId, + paranetKATokenId, + minerAddress + ); } function getKnowledgeCollectionLocatorsWithPagination( @@ -953,14 +997,28 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function submitKnowledgeCollection( address paranetKCStorageContract, uint256 paranetKnowledgeCollectionId, + uint256 paranetKnowledgeAssetTokenId, address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId - ) external onlyKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId) { + ) + external + onlyKnowledgeAssetOwner( + knowledgeCollectionStorageContract, + knowledgeCollectionTokenId, + paranetKnowledgeAssetTokenId + ) + { ParanetsRegistry pr = paranetsRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionId)); + bytes32 paranetId = keccak256( + abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionId, paranetKnowledgeAssetTokenId) + ); if (!pr.paranetExists(paranetId)) { - revert ParanetLib.ParanetDoesntExist(paranetKCStorageContract, paranetKnowledgeCollectionId); + revert ParanetLib.ParanetDoesntExist( + paranetKCStorageContract, + paranetKnowledgeCollectionId, + paranetKnowledgeAssetTokenId + ); } ParanetLib.MinersAccessPolicy minersAccessPolicy = pr.getMinersAccessPolicy(paranetId); @@ -1007,6 +1065,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { _updateSubmittedKnowledgeCollectionMetadata( paranetKCStorageContract, paranetKnowledgeCollectionId, + paranetKnowledgeAssetTokenId, knowledgeCollectionStorageContract, knowledgeCollectionTokenId, remainingTokenAmount, @@ -1016,6 +1075,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { emit KnowledgeCollectionSubmittedToParanet( paranetKCStorageContract, paranetKnowledgeCollectionId, + paranetKnowledgeAssetTokenId, knowledgeCollectionStorageContract, knowledgeCollectionTokenId ); @@ -1038,6 +1098,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function _updateSubmittedKnowledgeCollectionMetadata( address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId, uint96 tokenAmount, @@ -1046,9 +1107,9 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ParanetsRegistry pr = paranetsRegistry; ParanetKnowledgeMinersRegistry pkmr = paranetKnowledgeMinersRegistry; - bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)); + bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); bytes32 knowledgeCollectionId = keccak256( - abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId) + abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId, paranetKATokenId) ); // Add Knowledge Collection to the KnowledgeCollectionsRegistry @@ -1174,9 +1235,9 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // } function _checkParanetOperator(bytes32 paranetId) internal virtual { - (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry - .getParanetKnowledgeCollectionLocator(paranetId); - _checkKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId); + (address paranetKCStorageContract, uint256 paranetKCTokenId, uint256 paranetKATokenId) = paranetsRegistry + .getParanetKnowledgeAssetLocator(paranetId); + _checkKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); } function _checkParanetServiceOperator(bytes32 paranetServiceId) internal virtual { @@ -1211,4 +1272,23 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); } + + function _checkKnowledgeAssetOwner( + address knowledgeCollectionStorageContractAddress, + uint256 knowledgeCollectionId, + uint256 knowledgeAssetId + ) internal virtual { + require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); + + KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( + knowledgeCollectionStorageContractAddress + ); + + uint256 startTokenId = (knowledgeCollectionId - 1) * + knowledgeCollectionStorage.knowledgeCollectionMaxSize() + + knowledgeAssetId; + + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf(msg.sender, startTokenId, startTokenId + 1); + require(ownedCountInRange == 1, "Caller isn't the owner of the KA"); + } } diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index 7621f612..fbd8bc67 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -27,11 +27,16 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) ContractStatus(hubAddress) {} - modifier onlyKnowledgeCollectionOwner( + modifier onlyKnowledgeAssetOwner( address knowledgeCollectionStorageContract, - uint256 knowledgeCollectionTokenId + uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId ) { - _checkKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId); + _checkKnowledgeAssetOwner( + knowledgeCollectionStorageContract, + knowledgeCollectionTokenId, + knowledgeAssetTokenId + ); _; } @@ -51,26 +56,28 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn bool isNativeReward, address paranetKCStorageContract, uint256 paranetKCTokenId, + uint256 paranetKATokenId, uint256 tracToNeuroEmissionMultiplier, uint16 paranetOperatorRewardPercentage, uint16 paranetIncentivizationProposalVotersRewardPercentage - ) external onlyKnowledgeCollectionOwner(paranetKCStorageContract, paranetKCTokenId) returns (address) { + ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) returns (address) { Hub h = hub; ParanetsRegistry pr = paranetsRegistry; string memory incentivesPoolType = isNativeReward ? "Neuroweb" : "NeurowebERC20"; if ( pr.hasIncentivesPoolByType( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)), incentivesPoolType ) ) { revert ParanetLib.ParanetIncentivesPoolAlreadyExists( paranetKCStorageContract, paranetKCTokenId, + paranetKATokenId, incentivesPoolType, pr.getIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)), incentivesPoolType ) ); @@ -81,14 +88,14 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn isNativeReward ? address(0) : h.getContractAddress(incentivesPoolType), h.getContractAddress("ParanetsRegistry"), h.getContractAddress("ParanetKnowledgeMinersRegistry"), - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)), tracToNeuroEmissionMultiplier, paranetOperatorRewardPercentage, paranetIncentivizationProposalVotersRewardPercentage ); pr.setIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKCTokenId)), incentivesPoolType, address(incentivesPool) ); @@ -102,30 +109,22 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn return address(incentivesPool); } - function _checkKnowledgeCollectionOwner( + function _checkKnowledgeAssetOwner( address knowledgeCollectionStorageContractAddress, - uint256 knowledgeCollectionId + uint256 knowledgeCollectionId, + uint256 knowledgeAssetId ) internal virtual { require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( knowledgeCollectionStorageContractAddress ); - uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); - uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); - uint256 activeCount = minted - burnedCount; - require(activeCount != 0, "No KAs in Collection"); uint256 startTokenId = (knowledgeCollectionId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + - 1; // _startTokenId() - - uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( - msg.sender, - startTokenId, - startTokenId + minted + burnedCount - ); + knowledgeAssetId; - require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf(msg.sender, startTokenId, startTokenId + 1); + require(ownedCountInRange == 1, "Caller isn't the owner of the KA"); } } diff --git a/contracts/paranets/ParanetNeuroIncentivesPool.sol b/contracts/paranets/ParanetNeuroIncentivesPool.sol index fc88b94b..fa004342 100644 --- a/contracts/paranets/ParanetNeuroIncentivesPool.sol +++ b/contracts/paranets/ParanetNeuroIncentivesPool.sol @@ -250,27 +250,18 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { } function isParanetOperator(address addr) public view returns (bool) { - (address paranetKCStorageContract, uint256 paranetKCTokenId) = paranetsRegistry - .getParanetKnowledgeCollectionLocator(parentParanetId); + (address paranetKCStorageContract, uint256 paranetKCTokenId, uint256 paranetKATokenId) = paranetsRegistry + .getParanetKnowledgeAssetLocator(parentParanetId); KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage(paranetKCStorageContract); - uint256 minted = knowledgeCollectionStorage.getMinted(paranetKCTokenId); - uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(paranetKCTokenId); - uint256 activeCount = minted - burnedCount; - if (activeCount == 0) { - return false; - } - - uint256 startTokenId = (paranetKCTokenId - 1) * knowledgeCollectionStorage.knowledgeCollectionMaxSize() + 1; // _startTokenId() + uint256 startTokenId = (paranetKCTokenId - 1) * + knowledgeCollectionStorage.knowledgeCollectionMaxSize() + + paranetKATokenId; - uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( - addr, - startTokenId, - startTokenId + minted + burnedCount - ); + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf(addr, startTokenId, startTokenId + 1); - return ownedCountInRange == activeCount; + return ownedCountInRange == 1; } function isProposalVoter(address addr) public view returns (bool) { From 87ee0d77c7b1109878f25ffb8ab4573753f447ab Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 24 Jan 2025 15:16:55 +0100 Subject: [PATCH 43/50] Update services --- contracts/libraries/ParanetLib.sol | 17 ++- contracts/paranets/Paranet.sol | 113 +++++++----------- .../paranets/ParanetServicesRegistry.sol | 13 +- .../storage/paranets/ParanetsRegistry.sol | 12 +- 4 files changed, 78 insertions(+), 77 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index aaa85fd9..0d6bad7d 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -15,6 +15,12 @@ library ParanetLib { uint256 knowledgeCollectionTokenId; } + struct UniversalAssetLocator { + address knowledgeCollectionStorageContract; + uint256 knowledgeCollectionTokenId; + uint256 knowledgeAssetTokenId; + } + enum NodesAccessPolicy { OPEN, CURATED @@ -104,6 +110,7 @@ library ParanetLib { struct ParanetService { address paranetServiceKCStorageContract; uint256 paranetServiceKCTokenId; + uint256 paranetServiceKATokenId; string name; string description; address[] paranetServiceAddresses; @@ -113,6 +120,7 @@ library ParanetLib { struct ParanetServiceMetadata { address paranetServiceKCStorageContract; uint256 paranetServiceKCTokenId; + uint256 paranetServiceKATokenId; string name; string description; address[] paranetServiceAddresses; @@ -216,9 +224,14 @@ library ParanetLib { ); error ParanetServiceHasAlreadyBeenRegistered( address knowledgeCollectionStorageAddress, - uint256 knowledgeCollectionTokenId + uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId + ); + error ParanetServiceDoesntExist( + address knowledgeCollectionStorageAddress, + uint256 knowledgeCollectionTokenId, + uint256 knowledgeAssetTokenId ); - error ParanetServiceDoesntExist(address knowledgeCollectionStorageAddress, uint256 knowledgeCollectionTokenId); error KnowledgeCollectionIsAPartOfOtherParanet( address paranetKnowledgeCollectionStorageAddress, uint256 paranetKnowledgeCollectionTokenId, diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index a1720dc0..b9ec1be9 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -76,11 +76,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 indexed paranetKCTokenId, uint256 indexed paranetKATokenId, address paranetServiceKCStorageContract, - uint256 paranetServiceKCTokenId + uint256 paranetServiceKCTokenId, + uint256 paranetServiceKATokenId ); event ParanetServiceRegistered( address indexed paranetServiceKCStorageContract, uint256 indexed paranetServiceKCTokenId, + uint256 indexed paranetServiceKATokenId, string paranetServiceName, string paranetServiceDescription, address[] paranetServiceAddresses @@ -88,6 +90,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { event ParanetServiceMetadataUpdated( address indexed paranetServiceKCStorageContract, uint256 indexed paranetServiceKCTokenId, + uint256 indexed paranetServiceKATokenId, string newParanetServiceName, string newParanetServiceDescription, address[] newParanetServiceAddresses @@ -143,14 +146,6 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // solhint-disable-next-line no-empty-blocks constructor(address hubAddress) ContractStatus(hubAddress) {} - modifier onlyKnowledgeCollectionOwner( - address knowledgeCollectionStorageContract, - uint256 knowledgeCollectionTokenId - ) { - _checkKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId); - _; - } - modifier onlyKnowledgeAssetOwner( address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId, @@ -518,7 +513,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { address paranetKCStorageContract, uint256 paranetKCTokenId, uint256 paranetKATokenId, - ParanetLib.UniversalCollectionLocator[] calldata services + ParanetLib.UniversalAssetLocator[] calldata services ) external onlyKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId) { ParanetsRegistry pr = paranetsRegistry; ParanetServicesRegistry psr = paranetServicesRegistry; @@ -535,20 +530,23 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { keccak256( abi.encodePacked( services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ) ) ) ) { revert ParanetLib.ParanetServiceDoesntExist( services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ); } - _checkKnowledgeCollectionOwner( + _checkKnowledgeAssetOwner( services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ); if ( @@ -557,7 +555,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { keccak256( abi.encodePacked( services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ) ) ) @@ -567,7 +566,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { keccak256( abi.encodePacked( services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ) ) ); @@ -578,7 +578,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { keccak256( abi.encodePacked( services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ) ) ); @@ -588,7 +589,8 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { paranetKCTokenId, paranetKATokenId, services[i].knowledgeCollectionStorageContract, - services[i].knowledgeCollectionTokenId + services[i].knowledgeCollectionTokenId, + services[i].knowledgeAssetTokenId ); unchecked { @@ -600,31 +602,33 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function registerParanetService( address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId, - uint256 paranetKATokenId, + uint256 paranetServiceKATokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses ) external - onlyKnowledgeAssetOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetKATokenId) + onlyKnowledgeAssetOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetServiceKATokenId) returns (bytes32) { ParanetServicesRegistry psr = paranetServicesRegistry; bytes32 paranetServiceId = keccak256( - abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId) + abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetServiceKATokenId) ); if (psr.paranetServiceExists(paranetServiceId)) { revert ParanetLib.ParanetServiceHasAlreadyBeenRegistered( paranetServiceKCStorageContract, - paranetServiceKCTokenId + paranetServiceKCTokenId, + paranetServiceKATokenId ); } emit ParanetServiceRegistered( paranetServiceKCStorageContract, paranetServiceKCTokenId, + paranetServiceKATokenId, paranetServiceName, paranetServiceDescription, paranetServiceAddresses @@ -634,6 +638,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { psr.registerParanetService( paranetServiceKCStorageContract, paranetServiceKCTokenId, + paranetServiceKATokenId, paranetServiceName, paranetServiceDescription, paranetServiceAddresses @@ -643,18 +648,26 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function updateParanetServiceMetadata( address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId, + uint256 paranetServiceKATokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses - ) external onlyKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId) { + ) + external + onlyKnowledgeAssetOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetServiceKATokenId) + { ParanetServicesRegistry psr = paranetServicesRegistry; bytes32 paranetServiceId = keccak256( - abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId) + abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetServiceKATokenId) ); if (!psr.paranetServiceExists(paranetServiceId)) { - revert ParanetLib.ParanetServiceDoesntExist(paranetServiceKCStorageContract, paranetServiceKCTokenId); + revert ParanetLib.ParanetServiceDoesntExist( + paranetServiceKCStorageContract, + paranetServiceKCTokenId, + paranetServiceKATokenId + ); } psr.setName(paranetServiceId, paranetServiceName); @@ -664,6 +677,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { emit ParanetServiceMetadataUpdated( paranetServiceKCStorageContract, paranetServiceKCTokenId, + paranetServiceKATokenId, paranetServiceName, paranetServiceDescription, paranetServiceAddresses @@ -996,7 +1010,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { function submitKnowledgeCollection( address paranetKCStorageContract, - uint256 paranetKnowledgeCollectionId, + uint256 paranetKnowledgeCollectionTokenId, uint256 paranetKnowledgeAssetTokenId, address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId @@ -1010,13 +1024,13 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256( - abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionId, paranetKnowledgeAssetTokenId) + abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionTokenId, paranetKnowledgeAssetTokenId) ); if (!pr.paranetExists(paranetId)) { revert ParanetLib.ParanetDoesntExist( paranetKCStorageContract, - paranetKnowledgeCollectionId, + paranetKnowledgeCollectionTokenId, paranetKnowledgeAssetTokenId ); } @@ -1064,7 +1078,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // Update KnowledgeMiner metadata _updateSubmittedKnowledgeCollectionMetadata( paranetKCStorageContract, - paranetKnowledgeCollectionId, + paranetKnowledgeCollectionTokenId, paranetKnowledgeAssetTokenId, knowledgeCollectionStorageContract, knowledgeCollectionTokenId, @@ -1074,7 +1088,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { emit KnowledgeCollectionSubmittedToParanet( paranetKCStorageContract, - paranetKnowledgeCollectionId, + paranetKnowledgeCollectionTokenId, paranetKnowledgeAssetTokenId, knowledgeCollectionStorageContract, knowledgeCollectionTokenId @@ -1234,45 +1248,6 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { // } // } - function _checkParanetOperator(bytes32 paranetId) internal virtual { - (address paranetKCStorageContract, uint256 paranetKCTokenId, uint256 paranetKATokenId) = paranetsRegistry - .getParanetKnowledgeAssetLocator(paranetId); - _checkKnowledgeAssetOwner(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId); - } - - function _checkParanetServiceOperator(bytes32 paranetServiceId) internal virtual { - (address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId) = paranetServicesRegistry - .getParanetServiceKnowledgeCollectionLocator(paranetServiceId); - _checkKnowledgeCollectionOwner(paranetServiceKCStorageContract, paranetServiceKCTokenId); - } - - function _checkKnowledgeCollectionOwner( - address knowledgeCollectionStorageContractAddress, - uint256 knowledgeCollectionId - ) internal virtual { - require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); - - KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( - knowledgeCollectionStorageContractAddress - ); - uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); - uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); - uint256 activeCount = minted - burnedCount; - require(activeCount != 0, "No KAs in Collection"); - - uint256 startTokenId = (knowledgeCollectionId - 1) * - knowledgeCollectionStorage.knowledgeCollectionMaxSize() + - 1; // _startTokenId() - - uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( - msg.sender, - startTokenId, - startTokenId + minted + burnedCount - ); - - require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); - } - function _checkKnowledgeAssetOwner( address knowledgeCollectionStorageContractAddress, uint256 knowledgeCollectionId, diff --git a/contracts/storage/paranets/ParanetServicesRegistry.sol b/contracts/storage/paranets/ParanetServicesRegistry.sol index 2088ddf6..a8c39d05 100644 --- a/contracts/storage/paranets/ParanetServicesRegistry.sol +++ b/contracts/storage/paranets/ParanetServicesRegistry.sol @@ -28,17 +28,19 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { function registerParanetService( address paranetServiceKCStorageContract, uint256 paranetServiceKCTokenId, + uint256 paranetServiceKATokenId, string calldata paranetServiceName, string calldata paranetServiceDescription, address[] calldata paranetServiceAddresses ) external onlyContracts returns (bytes32) { bytes32 paranetServiceId = keccak256( - abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId) + abi.encodePacked(paranetServiceKCStorageContract, paranetServiceKCTokenId, paranetServiceKATokenId) ); ParanetLib.ParanetService storage paranetService = paranetServices[paranetServiceId]; paranetService.paranetServiceKCStorageContract = paranetServiceKCStorageContract; paranetService.paranetServiceKCTokenId = paranetServiceKCTokenId; + paranetService.paranetServiceKATokenId = paranetServiceKATokenId; paranetService.name = paranetServiceName; paranetService.description = paranetServiceDescription; paranetService.paranetServiceAddresses = paranetServiceAddresses; @@ -63,7 +65,8 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { keccak256( abi.encodePacked( paranetServices[paranetServiceId].paranetServiceKCStorageContract, - paranetServices[paranetServiceId].paranetServiceKCTokenId + paranetServices[paranetServiceId].paranetServiceKCTokenId, + paranetServices[paranetServiceId].paranetServiceKATokenId ) ) == paranetServiceId; } @@ -75,6 +78,7 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { ParanetLib.ParanetServiceMetadata({ paranetServiceKCStorageContract: paranetServices[paranetServiceId].paranetServiceKCStorageContract, paranetServiceKCTokenId: paranetServices[paranetServiceId].paranetServiceKCTokenId, + paranetServiceKATokenId: paranetServices[paranetServiceId].paranetServiceKATokenId, name: paranetServices[paranetServiceId].name, description: paranetServices[paranetServiceId].description, paranetServiceAddresses: paranetServices[paranetServiceId].paranetServiceAddresses @@ -83,10 +87,11 @@ contract ParanetServicesRegistry is INamed, IVersioned, HubDependent { function getParanetServiceKnowledgeCollectionLocator( bytes32 paranetServiceId - ) external view returns (address, uint256) { + ) external view returns (address, uint256, uint256) { return ( paranetServices[paranetServiceId].paranetServiceKCStorageContract, - paranetServices[paranetServiceId].paranetServiceKCTokenId + paranetServices[paranetServiceId].paranetServiceKCTokenId, + paranetServices[paranetServiceId].paranetServiceKATokenId ); } diff --git a/contracts/storage/paranets/ParanetsRegistry.sol b/contracts/storage/paranets/ParanetsRegistry.sol index 5b0a823d..763db4f9 100644 --- a/contracts/storage/paranets/ParanetsRegistry.sol +++ b/contracts/storage/paranets/ParanetsRegistry.sol @@ -80,7 +80,11 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { function paranetExists(bytes32 paranetId) external view returns (bool) { return keccak256( - abi.encodePacked(paranets[paranetId].paranetKCStorageContract, paranets[paranetId].paranetKCTokenId) + abi.encodePacked( + paranets[paranetId].paranetKCStorageContract, + paranets[paranetId].paranetKCTokenId, + paranets[paranetId].paranetKATokenId + ) ) == paranetId; } @@ -564,7 +568,11 @@ contract ParanetsRegistry is INamed, IVersioned, HubDependent { function getParanetIdsMapping(bytes32 paranetId) external view returns (uint256) { require( keccak256( - abi.encodePacked(paranets[paranetId].paranetKCStorageContract, paranets[paranetId].paranetKCTokenId) + abi.encodePacked( + paranets[paranetId].paranetKCStorageContract, + paranets[paranetId].paranetKCTokenId, + paranets[paranetId].paranetKATokenId + ) ) == paranetId, "Paranet not found" ); From 1715370fab62657807c97ff7e96c507454a30d31 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Thu, 30 Jan 2025 10:12:36 +0100 Subject: [PATCH 44/50] wip --- abi/Paranet.json | 217 +++++++++++++++++++++++++- abi/ParanetIncentivesPoolFactory.json | 10 ++ abi/ParanetServicesRegistry.json | 15 ++ abi/ParanetsRegistry.json | 17 +- 4 files changed, 256 insertions(+), 3 deletions(-) diff --git a/abi/Paranet.json b/abi/Paranet.json index 2f029c96..08bc7d72 100644 --- a/abi/Paranet.json +++ b/abi/Paranet.json @@ -212,6 +212,11 @@ "internalType": "uint256", "name": "knowledgeCollectionTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" } ], "name": "ParanetDoesntExist", @@ -228,6 +233,11 @@ "internalType": "uint256", "name": "knowledgeCollectionTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" } ], "name": "ParanetHasAlreadyBeenRegistered", @@ -244,6 +254,11 @@ "internalType": "uint256", "name": "knowledgeCollectionTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" } ], "name": "ParanetServiceDoesntExist", @@ -276,6 +291,11 @@ "internalType": "uint256", "name": "knowledgeCollectionTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" } ], "name": "ParanetServiceHasAlreadyBeenRegistered", @@ -325,6 +345,12 @@ }, { "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, + { + "indexed": false, "internalType": "address", "name": "knowledgeCollectionStorageContract", "type": "address" @@ -354,6 +380,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "address", @@ -379,6 +411,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "address", @@ -404,6 +442,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "address", @@ -429,6 +473,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "address", @@ -454,6 +504,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "address", @@ -479,6 +535,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "uint72", @@ -504,6 +566,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "uint72", @@ -529,6 +597,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "uint72", @@ -554,6 +628,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "uint72", @@ -579,6 +659,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "uint72", @@ -604,6 +690,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "components": [ { @@ -641,6 +733,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "string", @@ -672,6 +770,12 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "parnetKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "string", @@ -723,6 +827,12 @@ }, { "indexed": true, + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, + { + "indexed": false, "internalType": "address", "name": "paranetServiceKCStorageContract", "type": "address" @@ -732,6 +842,12 @@ "internalType": "uint256", "name": "paranetServiceKCTokenId", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" } ], "name": "ParanetServiceAdded", @@ -752,6 +868,12 @@ "name": "paranetServiceKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "string", @@ -789,6 +911,12 @@ "name": "paranetServiceKCTokenId", "type": "uint256" }, + { + "indexed": true, + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" + }, { "indexed": false, "internalType": "string", @@ -823,6 +951,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "address[]", "name": "minerAddresses", @@ -846,6 +979,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "uint72[]", "name": "identityIds", @@ -869,6 +1007,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "components": [ { @@ -880,9 +1023,14 @@ "internalType": "uint256", "name": "knowledgeCollectionTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" } ], - "internalType": "struct ParanetLib.UniversalCollectionLocator[]", + "internalType": "struct ParanetLib.UniversalAssetLocator[]", "name": "services", "type": "tuple[]" } @@ -904,6 +1052,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "address", "name": "minerAddress", @@ -927,6 +1080,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "uint72", "name": "identityId", @@ -1102,6 +1260,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "paranetName", @@ -1146,6 +1309,11 @@ "name": "paranetServiceKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "paranetServiceName", @@ -1185,6 +1353,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "address", "name": "minerAddress", @@ -1208,6 +1381,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "uint72", "name": "identityId", @@ -1231,6 +1409,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "address[]", "name": "minerAddresses", @@ -1254,6 +1437,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "uint72[]", "name": "identityIds", @@ -1276,6 +1464,11 @@ "internalType": "uint256", "name": "paranetKCTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" } ], "name": "requestParanetCuratedMinerAccess", @@ -1294,6 +1487,11 @@ "internalType": "uint256", "name": "paranetKCTokenId", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" } ], "name": "requestParanetCuratedNodeAccess", @@ -1336,7 +1534,12 @@ }, { "internalType": "uint256", - "name": "paranetKnowledgeCollectionId", + "name": "paranetKnowledgeCollectionTokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paranetKnowledgeAssetTokenId", "type": "uint256" }, { @@ -1367,6 +1570,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "paranetName", @@ -1395,6 +1603,11 @@ "name": "paranetServiceKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "paranetServiceName", diff --git a/abi/ParanetIncentivesPoolFactory.json b/abi/ParanetIncentivesPoolFactory.json index f3b72120..9d86e09c 100644 --- a/abi/ParanetIncentivesPoolFactory.json +++ b/abi/ParanetIncentivesPoolFactory.json @@ -22,6 +22,11 @@ "name": "knowledgeCollectionTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" + }, { "internalType": "string", "name": "poolType", @@ -106,6 +111,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "uint256", "name": "tracToNeuroEmissionMultiplier", diff --git a/abi/ParanetServicesRegistry.json b/abi/ParanetServicesRegistry.json index 59e26327..3501f264 100644 --- a/abi/ParanetServicesRegistry.json +++ b/abi/ParanetServicesRegistry.json @@ -111,6 +111,11 @@ "name": "", "type": "address" }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, { "internalType": "uint256", "name": "", @@ -142,6 +147,11 @@ "name": "paranetServiceKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "name", @@ -247,6 +257,11 @@ "name": "paranetServiceKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetServiceKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "paranetServiceName", diff --git a/abi/ParanetsRegistry.json b/abi/ParanetsRegistry.json index 5c8acee9..274a8604 100644 --- a/abi/ParanetsRegistry.json +++ b/abi/ParanetsRegistry.json @@ -1004,13 +1004,18 @@ "type": "bytes32" } ], - "name": "getParanetKnowledgeCollectionLocator", + "name": "getParanetKnowledgeAssetLocator", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, { "internalType": "uint256", "name": "", @@ -1042,6 +1047,11 @@ "name": "paranetKCTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "paranetKATokenId", + "type": "uint256" + }, { "internalType": "string", "name": "name", @@ -1333,6 +1343,11 @@ "name": "knowledgeCollectionTokenId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "knowledgeAssetTokenId", + "type": "uint256" + }, { "internalType": "string", "name": "paranetName", From 668f725ac33c65c06e887214598b8f900199ff0b Mon Sep 17 00:00:00 2001 From: Zvonimir Date: Thu, 30 Jan 2025 14:43:40 +0100 Subject: [PATCH 45/50] Fix paranetId calculation in incentives pool deployment --- contracts/paranets/ParanetIncentivesPoolFactory.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/paranets/ParanetIncentivesPoolFactory.sol b/contracts/paranets/ParanetIncentivesPoolFactory.sol index fbd8bc67..4c1ad8cb 100644 --- a/contracts/paranets/ParanetIncentivesPoolFactory.sol +++ b/contracts/paranets/ParanetIncentivesPoolFactory.sol @@ -95,7 +95,7 @@ contract ParanetIncentivesPoolFactory is INamed, IVersioned, ContractStatus, IIn ); pr.setIncentivesPoolAddress( - keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKCTokenId)), + keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)), incentivesPoolType, address(incentivesPool) ); From 01dfb903d0ddadefcfbd726faaab0e85b16313e7 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 31 Jan 2025 11:04:02 +0100 Subject: [PATCH 46/50] fix removeVoters --- contracts/paranets/ParanetNeuroIncentivesPool.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/paranets/ParanetNeuroIncentivesPool.sol b/contracts/paranets/ParanetNeuroIncentivesPool.sol index fa004342..91984f17 100644 --- a/contracts/paranets/ParanetNeuroIncentivesPool.sol +++ b/contracts/paranets/ParanetNeuroIncentivesPool.sol @@ -234,9 +234,9 @@ contract ParanetNeuroIncentivesPool is INamed, IVersioned { require(voters.length >= limit, "Limit exceeds the num of voters"); for (uint256 i; i < limit; ) { - cumulativeVotersWeight -= uint16(voters[voters.length - 1 - i].weight); + cumulativeVotersWeight -= uint16(voters[voters.length - 1].weight); - delete votersIndexes[voters[voters.length - 1 - i].addr]; + delete votersIndexes[voters[voters.length - 1].addr]; voters.pop(); unchecked { From 41d94aaf8f2af16b103f34518bb439ec97e4fed3 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 31 Jan 2025 11:56:36 +0100 Subject: [PATCH 47/50] Fix submit --- contracts/paranets/Paranet.sol | 48 +++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index b9ec1be9..7497e1f4 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -159,6 +159,14 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { _; } + modifier onlyKnowledgeCollectionOwner( + address knowledgeCollectionStorageContract, + uint256 knowledgeCollectionTokenId + ) { + _checkKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId); + _; + } + function initialize() public onlyHub { profileStorage = ProfileStorage(hub.getContractAddress("ProfileStorage")); identityStorage = IdentityStorage(hub.getContractAddress("IdentityStorage")); @@ -1014,14 +1022,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 paranetKnowledgeAssetTokenId, address knowledgeCollectionStorageContract, uint256 knowledgeCollectionTokenId - ) - external - onlyKnowledgeAssetOwner( - knowledgeCollectionStorageContract, - knowledgeCollectionTokenId, - paranetKnowledgeAssetTokenId - ) - { + ) external onlyKnowledgeCollectionOwner(knowledgeCollectionStorageContract, knowledgeCollectionTokenId) { ParanetsRegistry pr = paranetsRegistry; bytes32 paranetId = keccak256( abi.encodePacked(paranetKCStorageContract, paranetKnowledgeCollectionTokenId, paranetKnowledgeAssetTokenId) @@ -1070,7 +1071,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { ) ); } - // Is this correct way to do this ??? + KnowledgeCollectionStorage kcs = KnowledgeCollectionStorage(knowledgeCollectionStorageContract); uint96 remainingTokenAmount = kcs.getTokenAmount(knowledgeCollectionTokenId); KnowledgeCollectionLib.MerkleRoot[] memory merkleRoots = kcs.getMerkleRoots(knowledgeCollectionTokenId); @@ -1123,7 +1124,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { bytes32 paranetId = keccak256(abi.encodePacked(paranetKCStorageContract, paranetKCTokenId, paranetKATokenId)); bytes32 knowledgeCollectionId = keccak256( - abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId, paranetKATokenId) + abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId) ); // Add Knowledge Collection to the KnowledgeCollectionsRegistry @@ -1266,4 +1267,31 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf(msg.sender, startTokenId, startTokenId + 1); require(ownedCountInRange == 1, "Caller isn't the owner of the KA"); } + + function _checkKnowledgeCollectionOwner( + address knowledgeCollectionStorageContractAddress, + uint256 knowledgeCollectionId + ) internal virtual { + require(hub.isAssetStorage(knowledgeCollectionStorageContractAddress), "Given address isn't KC Storage"); + + KnowledgeCollectionStorage knowledgeCollectionStorage = KnowledgeCollectionStorage( + knowledgeCollectionStorageContractAddress + ); + uint256 minted = knowledgeCollectionStorage.getMinted(knowledgeCollectionId); + uint256 burnedCount = knowledgeCollectionStorage.getBurnedAmount(knowledgeCollectionId); + uint256 activeCount = minted - burnedCount; + require(activeCount != 0, "No KAs in Collection"); + + uint256 startTokenId = (knowledgeCollectionId - 1) * + knowledgeCollectionStorage.knowledgeCollectionMaxSize() + + 1; // _startTokenId() + + uint256 ownedCountInRange = knowledgeCollectionStorage.balanceOf( + msg.sender, + startTokenId, + startTokenId + minted + burnedCount + ); + + require(ownedCountInRange == activeCount, "Caller isn't the owner of the KC"); + } } From 8dc1364440d4a940600a5901f1c9acb2b317ade6 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Fri, 31 Jan 2025 15:32:39 +0100 Subject: [PATCH 48/50] Update deployment --- deployments/base_sepolia_test_contracts.json | 45 ++++++++++++++ deployments/gnosis_chiado_test_contracts.json | 40 ++++++------- deployments/neuroweb_testnet_contracts.json | 60 +++++++++---------- package.json | 2 +- 4 files changed, 96 insertions(+), 51 deletions(-) diff --git a/deployments/base_sepolia_test_contracts.json b/deployments/base_sepolia_test_contracts.json index d1ed8c08..0426f426 100644 --- a/deployments/base_sepolia_test_contracts.json +++ b/deployments/base_sepolia_test_contracts.json @@ -189,6 +189,51 @@ "deploymentBlock": 20972223, "deploymentTimestamp": 1737712739031, "deployed": true + }, + "ParanetsRegistry": { + "evmAddress": "0x734Ad13B02D41d3e8740c6892B863D53951420Fe", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 21282805, + "deploymentTimestamp": 1738333901133, + "deployed": true + }, + "ParanetServicesRegistry": { + "evmAddress": "0xB17D6e67998CF107dbCe6b26502e002dd76e9999", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 21282808, + "deploymentTimestamp": 1738333908284, + "deployed": true + }, + "ParanetKnowledgeCollectionsRegistry": { + "evmAddress": "0xbdbe818FD8664BF8B2d944CDe33587f419F83C45", + "version": "1.0.1", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 21282811, + "deploymentTimestamp": 1738333914891, + "deployed": true + }, + "ParanetKnowledgeMinersRegistry": { + "evmAddress": "0x5f444c05a8Fd28F8BA618F452F439ef5894D3060", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 21282815, + "deploymentTimestamp": 1738333921676, + "deployed": true + }, + "Paranet": { + "evmAddress": "0x6f841a01D6Cd947d444cBa94103B9F8D610F12c1", + "version": "1.0.0", + "gitBranch": "v8-paranet-update", + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 21282818, + "deploymentTimestamp": 1738333928833, + "deployed": true } } } diff --git a/deployments/gnosis_chiado_test_contracts.json b/deployments/gnosis_chiado_test_contracts.json index 9db54c25..8e4226b1 100644 --- a/deployments/gnosis_chiado_test_contracts.json +++ b/deployments/gnosis_chiado_test_contracts.json @@ -191,48 +191,48 @@ "deployed": true }, "ParanetsRegistry": { - "evmAddress": "0xd926A082A87D3A2536a48CAff6a9B8583434B1D7", + "evmAddress": "0x070b9e4e2C0d8aAB8965D05167572C73C97BB06f", "version": "1.0.1", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 13947383, - "deploymentTimestamp": 1737552116734, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 14094593, + "deploymentTimestamp": 1738333780660, "deployed": true }, "ParanetServicesRegistry": { - "evmAddress": "0x0495C0251A3fCbe3561abD033A2Cb54f752d46eD", + "evmAddress": "0x698D59C74dccD57b53F5A00e314eA770BAcFab79", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 13947384, - "deploymentTimestamp": 1737552121766, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 14094594, + "deploymentTimestamp": 1738333786293, "deployed": true }, "ParanetKnowledgeCollectionsRegistry": { - "evmAddress": "0x6499c0006a5408Ca7A5D1380E4f7d0e3e2C23650", + "evmAddress": "0x8A055234b7479BA0f9358EBA6cFf3aF1ac6ecC53", "version": "1.0.1", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 13947385, - "deploymentTimestamp": 1737552126777, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 14094595, + "deploymentTimestamp": 1738333795552, "deployed": true }, "ParanetKnowledgeMinersRegistry": { - "evmAddress": "0x1769C41E2B8ddbb1F429fA0aF453Bb34cce52D60", + "evmAddress": "0x4A83f16dd5c7fd0c9874FE4706cD574011d20E6C", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 13947386, - "deploymentTimestamp": 1737552131790, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 14094596, + "deploymentTimestamp": 1738333801377, "deployed": true }, "Paranet": { - "evmAddress": "0x8e49110922bC01241f434B4dAc0Fbc335FeBE63C", + "evmAddress": "0x6494540fDA6E197A8dF4155f895Aa61A971D2B5b", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 13947388, - "deploymentTimestamp": 1737552145114, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 14094597, + "deploymentTimestamp": 1738333806716, "deployed": true } } diff --git a/deployments/neuroweb_testnet_contracts.json b/deployments/neuroweb_testnet_contracts.json index d6d23f9c..0a9b6d3e 100644 --- a/deployments/neuroweb_testnet_contracts.json +++ b/deployments/neuroweb_testnet_contracts.json @@ -212,63 +212,63 @@ "deployed": true }, "ParanetsRegistry": { - "evmAddress": "0x03fD0638d57e1DFf059cfB0A59D465d96bc3d381", - "substrateAddress": "5EMjsczLyUsdcHaiGPvbVQtY5RrHNDDNdGz56TkyLhkGqyjB", + "evmAddress": "0x5C4915989900577cf623B2F9Cc2e2DEEDDFd1735", + "substrateAddress": "5EMjsczefdy9Q6WfbW6XqnaaqwmweMbYF4xnhgMjL9dWNGt5", "version": "1.0.1", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 6086202, - "deploymentTimestamp": 1737551926889, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 6207080, + "deploymentTimestamp": 1738333636752, "deployed": true }, "ParanetServicesRegistry": { - "evmAddress": "0xE56Ac2244FCFb20D3B7d7eFfd9EB9B3490fd1C8d", - "substrateAddress": "5EMjsd189L9Y8LfKAMeFQZ2jzZQWqWA2rpZeDqysvNSni8B8", + "evmAddress": "0x612627453FCEF0B3792E621bdF96c9C96d5Ba578", + "substrateAddress": "5EMjsczfeAGYxD6sF1easgsBBqkQgRydgPaMJXxrn2qgERpf", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 6086203, - "deploymentTimestamp": 1737551931960, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 6207081, + "deploymentTimestamp": 1738333641897, "deployed": true }, "ParanetKnowledgeCollectionsRegistry": { - "evmAddress": "0xA6f3E79c083aFc6Bf69bFbA4cb488A98d70481b7", - "substrateAddress": "5EMjsczudPoVZCQMERLv7QbbGJR7fZCFQvdx2vYX4faDRiSZ", + "evmAddress": "0x17686361437FD87D90aEbeb632E6DF98B11288F7", + "substrateAddress": "5EMjsczQsAcDRQe13srwDZN8pqoVBNPWc6Tx7ZHpTD15cUXi", "version": "1.0.1", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 6086204, - "deploymentTimestamp": 1737551937030, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 6207082, + "deploymentTimestamp": 1738333647010, "deployed": true }, "ParanetKnowledgeMinersRegistry": { - "evmAddress": "0xdc65788847B633C8Ea6A90e65E67a7A431f10244", - "substrateAddress": "5EMjsd16LVjR5mXywuAMRgFA9vVPBnk7r2VstqK5txaT4aHw", + "evmAddress": "0x452b9Ae4998d979368AA9AcdB23A35844914d876", + "substrateAddress": "5EMjscza3162R3cjs88XTMVa24UmMFvGnGtWLDMwR6F9gRYw", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 6086205, - "deploymentTimestamp": 1737551942154, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 6207083, + "deploymentTimestamp": 1738333652729, "deployed": true }, "Paranet": { - "evmAddress": "0x2d2bAddadD98AD4BFCDd3F3A6d20D6b5c21297DA", - "substrateAddress": "5EMjsczVE5xz2ejNb3s3Xc8mRwrLhBi86L5LiBtHMzgjkga7", + "evmAddress": "0xDDDc8ac99313B0BFA251DaA714bCB75566277369", + "substrateAddress": "5EMjsd16dXJdxjKtXvpHpDawRqGazeoBzuY1wew7eKvQL9ND", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 6086207, - "deploymentTimestamp": 1737551953213, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 6207084, + "deploymentTimestamp": 1738333658436, "deployed": true }, "ParanetIncentivesPoolFactory": { - "evmAddress": "0x0A7301DE4a368E22C7Bb3F6786a00daCFAC51Fb3", - "substrateAddress": "5EMjsczNGZrZL176FuPFJS3H8TXFkHGWexw6aC2ui9gpy7DH", + "evmAddress": "0x157C9b49968200B90Da630F18FB809858c87aeBa", + "substrateAddress": "5EMjsczQUqjWoV8veQT7sBtdzLSJYCH8pCzVUhmdmo7xkkRd", "version": "1.0.0", "gitBranch": "v8-paranet-update", - "gitCommitHash": "b3ce1bc042e3c5f28f93758e750f9f0e1cbcdee5", - "deploymentBlock": 6086208, - "deploymentTimestamp": 1737551962358, + "gitCommitHash": "4da11a2df6531292cc9ae01c307f6f69e5845f5b", + "deploymentBlock": 6207086, + "deploymentTimestamp": 1738333671698, "deployed": true } } diff --git a/package.json b/package.json index 6edd4b51..a74e9527 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dkg-evm-module", - "version": "8.0.1", + "version": "8.0.2", "description": "Smart contracts for OriginTrail V8", "main": "index.ts", "files": [ From 3925bd5f2b058ecd0123d7ed47a07e2e64268208 Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 11 Feb 2025 13:26:23 +0100 Subject: [PATCH 49/50] Rename UniversalCollectionLocator to UniversalAssetCollectionLocator --- contracts/libraries/ParanetLib.sol | 2 +- contracts/paranets/Paranet.sol | 2 +- .../paranets/ParanetKnowledgeCollectionsRegistry.sol | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 0d6bad7d..642a2c25 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -10,7 +10,7 @@ library ParanetLib { uint16 constant PERCENTAGE_SCALING_FACTOR = 10 ** 4; uint16 constant MAX_CUMULATIVE_VOTERS_WEIGHT = 10 ** 4; - struct UniversalCollectionLocator { + struct UniversalAssetCollectionLocator { address knowledgeCollectionStorageContract; uint256 knowledgeCollectionTokenId; } diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index 7497e1f4..a4da8e80 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -949,7 +949,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { bytes32 paranetId, uint256 offset, uint256 limit - ) external view returns (ParanetLib.UniversalCollectionLocator[] memory) { + ) external view returns (ParanetLib.UniversalAssetCollectionLocator[] memory) { ParanetsRegistry pr = paranetsRegistry; bytes32[] memory knowledgeCollections = pr.getKnowledgeCollectionsWithPagination(paranetId, offset, limit); diff --git a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol index be289394..2ac22a68 100644 --- a/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol +++ b/contracts/storage/paranets/ParanetKnowledgeCollectionsRegistry.sol @@ -71,15 +71,17 @@ contract ParanetKnowledgeCollectionsRegistry is INamed, IVersioned, HubDependent function getKnowledgeCollectionLocators( bytes32[] calldata knowledgeCollectionIds - ) external view returns (ParanetLib.UniversalCollectionLocator[] memory) { + ) external view returns (ParanetLib.UniversalAssetCollectionLocator[] memory) { uint256 length = knowledgeCollectionIds.length; - ParanetLib.UniversalCollectionLocator[] memory locators = new ParanetLib.UniversalCollectionLocator[](length); + ParanetLib.UniversalAssetCollectionLocator[] memory locators = new ParanetLib.UniversalAssetCollectionLocator[]( + length + ); for (uint256 i = 0; i < length; i++) { bytes32 id = knowledgeCollectionIds[i]; - locators[i] = ParanetLib.UniversalCollectionLocator({ + locators[i] = ParanetLib.UniversalAssetCollectionLocator({ knowledgeCollectionStorageContract: knowledgeCollections[id].knowledgeCollectionStorageContract, knowledgeCollectionTokenId: knowledgeCollections[id].knowledgeCollectionTokenId }); From f9fb318373ec1ee33e020d98871ab40b87e22dff Mon Sep 17 00:00:00 2001 From: Mihajlo Pavlovic Date: Tue, 11 Feb 2025 13:34:54 +0100 Subject: [PATCH 50/50] Rename ParanetLib.KnowledgeCollectionIsAPartOfOtherParanet to ParanetLib.KnowledgeCollectionIsAPartOfAParanet --- contracts/libraries/ParanetLib.sol | 2 +- contracts/paranets/Paranet.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/libraries/ParanetLib.sol b/contracts/libraries/ParanetLib.sol index 642a2c25..3b898c1a 100644 --- a/contracts/libraries/ParanetLib.sol +++ b/contracts/libraries/ParanetLib.sol @@ -232,7 +232,7 @@ library ParanetLib { uint256 knowledgeCollectionTokenId, uint256 knowledgeAssetTokenId ); - error KnowledgeCollectionIsAPartOfOtherParanet( + error KnowledgeCollectionIsAPartOfAParanet( address paranetKnowledgeCollectionStorageAddress, uint256 paranetKnowledgeCollectionTokenId, bytes32 paranetId diff --git a/contracts/paranets/Paranet.sol b/contracts/paranets/Paranet.sol index a4da8e80..853bfc4d 100644 --- a/contracts/paranets/Paranet.sol +++ b/contracts/paranets/Paranet.sol @@ -1063,7 +1063,7 @@ contract Paranet is INamed, IVersioned, ContractStatus, IInitializable { keccak256(abi.encodePacked(knowledgeCollectionStorageContract, knowledgeCollectionTokenId)) ) ) { - revert ParanetLib.KnowledgeCollectionIsAPartOfOtherParanet( + revert ParanetLib.KnowledgeCollectionIsAPartOfAParanet( knowledgeCollectionStorageContract, knowledgeCollectionTokenId, paranetKnowledgeCollectionsRegistry.getParanetId(