Skip to content

Commit

Permalink
Update state infor in paranet on submit and update
Browse files Browse the repository at this point in the history
  • Loading branch information
Mihajlo-Pavlovic committed Jan 20, 2025
1 parent 7ed374f commit e896651
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 134 deletions.
16 changes: 10 additions & 6 deletions contracts/KnowledgeCollection.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
}
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion contracts/libraries/ParanetLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ library ParanetLib {
struct UpdatingKnowledgeCollectionState {
address knowledgeCollectionStorageContract;
uint256 knowledgeCollectionId;
bytes32 merkleRoot; // Do we need this ?
bytes32 merkleRoot;
uint96 updateTokenAmount;
}

Expand Down
232 changes: 127 additions & 105 deletions contracts/paranets/Paranet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Check warning on line 19 in contracts/paranets/Paranet.sol

View workflow job for this annotation

GitHub Actions / lint

imported name IERC721 is not used

contract Paranet is INamed, IVersioned, ContractStatus, IInitializable {
Expand Down Expand Up @@ -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));

Expand Down Expand Up @@ -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;
Expand All @@ -999,97 +1004,114 @@ 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);
pkmr.incrementTotalSubmittedKnowledgeCollectionsCount(msg.sender);
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
Expand Down
Loading

0 comments on commit e896651

Please sign in to comment.