Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: create and test LSP26FollowingSystem #967

Merged
merged 9 commits into from
Aug 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 23 additions & 22 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
{
"packages/lsp-smart-contracts": "0.15.0-rc.0",
"packages/lsp0-contracts": "0.15.0-rc.0",
"packages/lsp1-contracts": "0.15.0-rc.0",
"packages/lsp1delegate-contracts": "0.15.0-rc.0",
"packages/lsp2-contracts": "0.15.0-rc.0",
"packages/lsp3-contracts": "0.15.0-rc.0",
"packages/lsp4-contracts": "0.15.0-rc.0",
"packages/lsp5-contracts": "0.15.0-rc.0",
"packages/lsp6-contracts": "0.15.0-rc.0",
"packages/lsp7-contracts": "0.15.0-rc.0",
"packages/lsp8-contracts": "0.15.0-rc.0",
"packages/lsp9-contracts": "0.15.0-rc.0",
"packages/lsp10-contracts": "0.15.0-rc.0",
"packages/lsp12-contracts": "0.15.0-rc.0",
"packages/lsp14-contracts": "0.15.0-rc.0",
"packages/lsp16-contracts": "0.15.0-rc.0",
"packages/lsp17-contracts": "0.15.0-rc.0",
"packages/lsp17contractextension-contracts": "0.15.0-rc.0",
"packages/lsp20-contracts": "0.15.0-rc.0",
"packages/lsp23-contracts": "0.15.0-rc.0",
"packages/lsp25-contracts": "0.15.0-rc.0",
"packages/universalprofile-contracts": "0.15.0-rc.0"
"packages/lsp-smart-contracts": "0.15.0",
"packages/lsp0-contracts": "0.15.0",
"packages/lsp1-contracts": "0.15.0",
"packages/lsp1delegate-contracts": "0.15.0",
"packages/lsp2-contracts": "0.15.0",
"packages/lsp3-contracts": "0.15.0",
"packages/lsp4-contracts": "0.15.0",
"packages/lsp5-contracts": "0.15.0",
"packages/lsp6-contracts": "0.15.0",
"packages/lsp7-contracts": "0.15.0",
"packages/lsp8-contracts": "0.15.0",
"packages/lsp9-contracts": "0.15.0",
"packages/lsp10-contracts": "0.15.0",
"packages/lsp12-contracts": "0.15.0",
"packages/lsp14-contracts": "0.15.0",
"packages/lsp16-contracts": "0.15.0",
"packages/lsp17-contracts": "0.15.0",
"packages/lsp17contractextension-contracts": "0.15.0",
"packages/lsp20-contracts": "0.15.0",
"packages/lsp23-contracts": "0.15.0",
"packages/lsp25-contracts": "0.15.0",
"packages/lsp26-contracts": "0.15.0",
"packages/universalprofile-contracts": "0.15.0"
}
2 changes: 1 addition & 1 deletion config/eslint-config-custom/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"@typescript-eslint/eslint-plugin": "^6.2.1",
"@typescript-eslint/parser": "^6.2.1",
"eslint-config-prettier": "^8.8.0",
"eslint-config-turbo": "^1.9.3",
"eslint-config-turbo": "^2.0.12",
"eslint-plugin-prettier": "^4.2.1"
}
}
3,892 changes: 1,957 additions & 1,935 deletions package-lock.json

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "0.14.0",
"description": "The reference smart contract implementation for the LUKSO LSP standards",
"private": true,
"packageManager": "^npm@10.1.0",
"npmClient": "npm",
"author": "",
"license": "Apache-2.0",
Expand Down Expand Up @@ -37,7 +38,7 @@
"lint:solidity": "turbo lint:solidity",
"package": "turbo package",
"test": "turbo test",
"test:foundry": "turbo test:foundry --scope='!@lukso/lsp16-contracts'",
"test:foundry": "turbo test:foundry --filter='!@lukso/lsp16-contracts'",
"test:coverage": "turbo test:coverage",
"test:mocks": "hardhat test --no-compile packages/lsp-smart-contracts/tests/Mocks/*.test.ts",
"test:up": "hardhat test --no-compile packages/lsp-smart-contracts/tests/UniversalProfile.test.ts",
Expand Down Expand Up @@ -79,8 +80,8 @@
"ethers": "^6.11.0",
"hardhat": "^2.20.1",
"hardhat-contract-sizer": "^2.8.0",
"hardhat-deploy": "^0.11.25",
"hardhat-deploy-ethers": "^0.4.1",
"hardhat-deploy": "^0.12.0",
"hardhat-deploy-ethers": "^0.4.2",
"hardhat-gas-reporter": "^1.0.9",
"hardhat-packager": "^1.4.2",
"markdown-table-ts": "^1.0.3",
Expand Down
79 changes: 63 additions & 16 deletions packages/lsp-smart-contracts/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,77 @@
* Set of constants values as defined in each LUKSO Standards Proposals (LSPs).
* @see https://github.com/lukso-network/LIPs/tree/main/LSPs
*/
// export * from './contracts';
export * from './contracts';

import { INTERFACE_ID_LSP0ERC725Account, LSP0_TYPE_IDS } from '@lukso/lsp0-contracts';
import { INTERFACE_ID_LSP1, LSP1DataKeys } from '@lukso/lsp1-contracts';
// Typescript types from each LSP package
export type { Verification, LSP2ArrayKey } from '@lukso/lsp2-contracts';
export type {
LSP3ProfileMetadataJSON,
LSP3ProfileMetadata,
ImageMetadata,
LinkMetadata,
AssetMetadata,
} from '@lukso/lsp3-contracts';
export type {
LSP4DigitalAssetMetadataJSON,
LSP4DigitalAssetMetadata,
AttributeMetadata,
AssetFile,
DigitalAsset,
} from '@lukso/lsp4-contracts';
export type { LSP6PermissionName } from '@lukso/lsp6-contracts';

// Generic constants and types from each LSP package
export { ERC1271_VALUES, OPERATION_TYPES } from '@lukso/lsp0-contracts';
export { CALLTYPE, ALL_PERMISSIONS, PERMISSIONS } from '@lukso/lsp6-contracts';
export { LSP4_TOKEN_TYPES } from '@lukso/lsp4-contracts';
export { LSP8_TOKEN_ID_FORMAT } from '@lukso/lsp8-contracts';
export { LSP20_SUCCESS_VALUES } from '@lukso/lsp20-contracts';
export { LSP25_VERSION } from '@lukso/lsp25-contracts';

// Old interface Ids of previous releases of LSP7/8 Tokens
// for backward compatibilities for dApps and interfaces
export { INTERFACE_ID_LSP7_PREVIOUS } from '@lukso/lsp7-contracts';
export { INTERFACE_ID_LSP8_PREVIOUS } from '@lukso/lsp8-contracts';

// ERC165 interface IDs of each LSP
import { INTERFACE_ID_LSP0 } from '@lukso/lsp0-contracts';
import { INTERFACE_ID_LSP1 } from '@lukso/lsp1-contracts';
import { INTERFACE_ID_LSP1DELEGATE } from '@lukso/lsp1delegate-contracts';
import { LSP3DataKeys } from '@lukso/lsp3-contracts';
import { LSP4DataKeys } from '@lukso/lsp4-contracts';
import { LSP5DataKeys } from '@lukso/lsp5-contracts';
import { INTERFACE_ID_LSP6KEYMANAGER, LSP6DataKeys } from '@lukso/lsp6-contracts';
import { INTERFACE_ID_LSP7, LSP7_TYPE_IDS } from '@lukso/lsp7-contracts';
import { INTERFACE_ID_LSP8, LSP8DataKeys, LSP8_TYPE_IDS } from '@lukso/lsp8-contracts';
import { INTERFACE_ID_LSP9, LSP9DataKeys, LSP9_TYPE_IDS } from '@lukso/lsp9-contracts';
import { LSP10DataKeys } from '@lukso/lsp10-contracts';
import { LSP12DataKeys } from '@lukso/lsp12-contracts';
import { INTERFACE_ID_LSP14, LSP14_TYPE_IDS } from '@lukso/lsp14-contracts';
import { INTERFACE_ID_LSP6 } from '@lukso/lsp6-contracts';
import { INTERFACE_ID_LSP7 } from '@lukso/lsp7-contracts';
import { INTERFACE_ID_LSP8 } from '@lukso/lsp8-contracts';
import { INTERFACE_ID_LSP9 } from '@lukso/lsp9-contracts';
import { INTERFACE_ID_LSP14 } from '@lukso/lsp14-contracts';
import {
INTERFACE_ID_LSP17Extendable,
INTERFACE_ID_LSP17Extension,
LSP17DataKeys,
} from '@lukso/lsp17contractextension-contracts';
import {
INTERFACE_ID_LSP20CallVerification,
INTERFACE_ID_LSP20CallVerifier,
} from '@lukso/lsp20-contracts';
import { INTERFACE_ID_LSP25 } from '@lukso/lsp25-contracts';
import { INTERFACE_ID_LSP26 } from '@lukso/lsp26-contracts';

// LSP1 Type IDs of each LSP
import { LSP0_TYPE_IDS } from '@lukso/lsp0-contracts';
import { LSP7_TYPE_IDS } from '@lukso/lsp7-contracts';
import { LSP8_TYPE_IDS } from '@lukso/lsp8-contracts';
import { LSP9_TYPE_IDS } from '@lukso/lsp9-contracts';
import { LSP14_TYPE_IDS } from '@lukso/lsp14-contracts';

// ERC725Y Data Keys of each LSP
import { LSP1DataKeys } from '@lukso/lsp1-contracts';
import { LSP3DataKeys } from '@lukso/lsp3-contracts';
import { LSP4DataKeys } from '@lukso/lsp4-contracts';
import { LSP5DataKeys } from '@lukso/lsp5-contracts';
import { LSP6DataKeys } from '@lukso/lsp6-contracts';
import { LSP8DataKeys } from '@lukso/lsp8-contracts';
import { LSP9DataKeys } from '@lukso/lsp9-contracts';
import { LSP10DataKeys } from '@lukso/lsp10-contracts';
import { LSP12DataKeys } from '@lukso/lsp12-contracts';
import { LSP17DataKeys } from '@lukso/lsp17contractextension-contracts';

import { LSP3SupportedStandard } from '@lukso/lsp3-contracts';
import { LSP4SupportedStandard } from '@lukso/lsp4-contracts';
Expand Down Expand Up @@ -58,10 +104,10 @@ export const INTERFACE_IDS = {
ERC1155: '0xd9b67a26',
ERC725X: '0x7545acac',
ERC725Y: '0x629aa694',
LSP0ERC725Account: INTERFACE_ID_LSP0ERC725Account,
LSP0ERC725Account: INTERFACE_ID_LSP0,
LSP1UniversalReceiver: INTERFACE_ID_LSP1,
LSP1UniversalReceiverDelegate: INTERFACE_ID_LSP1DELEGATE,
LSP6KeyManager: INTERFACE_ID_LSP6KEYMANAGER,
LSP6KeyManager: INTERFACE_ID_LSP6,
LSP7DigitalAsset: INTERFACE_ID_LSP7,
LSP8IdentifiableDigitalAsset: INTERFACE_ID_LSP8,
LSP9Vault: INTERFACE_ID_LSP9,
Expand All @@ -72,6 +118,7 @@ export const INTERFACE_IDS = {
LSP20CallVerifier: INTERFACE_ID_LSP20CallVerifier,
LSP11BasicSocialRecovery: '0x049a28f1',
LSP25ExecuteRelayCall: INTERFACE_ID_LSP25,
LSP26FollowingSystem: INTERFACE_ID_LSP26,
};

// ERC725Y
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.17;

import "@lukso/lsp26-contracts/contracts/ILSP26FollowingSystem.sol";
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.4;

import "@lukso/lsp26-contracts/contracts/LSP26Constants.sol";
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.4;

import "@lukso/lsp26-contracts/contracts/LSP26Errors.sol";
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.17;

import "@lukso/lsp26-contracts/contracts/LSP26FollowingSystem.sol";
16 changes: 16 additions & 0 deletions packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ import {
import {
ILSP25ExecuteRelayCall as ILSP25
} from "@lukso/lsp25-contracts/contracts/ILSP25ExecuteRelayCall.sol";
import {
ILSP26FollowingSystem as ILSP26
} from "@lukso/lsp26-contracts/contracts/ILSP26FollowingSystem.sol";

// constants
import {
Expand Down Expand Up @@ -102,6 +105,9 @@ import {
import {
_INTERFACEID_LSP25
} from "@lukso/lsp25-contracts/contracts/LSP25Constants.sol";
import {
_INTERFACEID_LSP26
} from "@lukso/lsp26-contracts/contracts/LSP26Constants.sol";

// libraries
import {
Expand Down Expand Up @@ -302,6 +308,16 @@ contract CalculateLSPInterfaces {

return interfaceId;
}

function calculateInterfaceLSP26() public pure returns (bytes4) {
bytes4 interfaceId = type(ILSP26).interfaceId;
require(
interfaceId == _INTERFACEID_LSP26,
"hardcoded _INTERFACEID_LSP26 does not match type(ILSP26).interfaceId"
);

return interfaceId;
}
}

/**
Expand Down
13 changes: 13 additions & 0 deletions packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ import {
_TYPEID_LSP14_OwnershipTransferred_SenderNotification,
_TYPEID_LSP14_OwnershipTransferred_RecipientNotification
} from "@lukso/lsp14-contracts/contracts/LSP14Constants.sol";
import {
_TYPEID_LSP26_FOLLOW,
_TYPEID_LSP26_UNFOLLOW
} from "@lukso/lsp26-contracts/contracts/LSP26Constants.sol";

error LSP1TypeIdHashIsWrong(bytes32 typeIdHash, string typeIdname);

Expand Down Expand Up @@ -92,6 +96,15 @@ contract LSP1TypeIDsTester {
"LSP14OwnershipTransferred_RecipientNotification"
] = _TYPEID_LSP14_OwnershipTransferred_RecipientNotification;
// -------------------

// ------ LSP26 ------
_typeIds[
"LSP26FollowerSystem_FollowNotification"
] = _TYPEID_LSP26_FOLLOW;
_typeIds[
"LSP26FollowerSystem_UnfollowNotification"
] = _TYPEID_LSP26_UNFOLLOW;
// -------------------
}

function verifyLSP1TypeID(
Expand Down
43 changes: 22 additions & 21 deletions packages/lsp-smart-contracts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,26 +68,27 @@
"test:benchmark": "hardhat test --no-compile tests/Benchmark.test.ts"
},
"dependencies": {
"@lukso/lsp0-contracts": "*",
"@lukso/lsp1-contracts": "*",
"@lukso/lsp10-contracts": "*",
"@lukso/lsp12-contracts": "*",
"@lukso/lsp14-contracts": "*",
"@lukso/lsp16-contracts": "*",
"@lukso/lsp17-contracts": "*",
"@lukso/lsp17contractextension-contracts": "*",
"@lukso/lsp1delegate-contracts": "*",
"@lukso/lsp2-contracts": "*",
"@lukso/lsp20-contracts": "*",
"@lukso/lsp23-contracts": "*",
"@lukso/lsp25-contracts": "*",
"@lukso/lsp3-contracts": "*",
"@lukso/lsp4-contracts": "*",
"@lukso/lsp5-contracts": "*",
"@lukso/lsp6-contracts": "*",
"@lukso/lsp7-contracts": "*",
"@lukso/lsp8-contracts": "*",
"@lukso/lsp9-contracts": "*",
"@lukso/universalprofile-contracts": "*"
"@lukso/lsp0-contracts": "~0.15.0",
"@lukso/lsp1-contracts": "~0.15.0",
"@lukso/lsp10-contracts": "~0.15.0",
"@lukso/lsp12-contracts": "~0.15.0",
"@lukso/lsp14-contracts": "~0.15.0",
"@lukso/lsp16-contracts": "~0.15.0",
"@lukso/lsp17-contracts": "~0.15.0",
"@lukso/lsp17contractextension-contracts": "~0.15.0",
"@lukso/lsp1delegate-contracts": "~0.15.0",
"@lukso/lsp2-contracts": "~0.15.0",
"@lukso/lsp20-contracts": "~0.15.0",
"@lukso/lsp23-contracts": "~0.15.0",
"@lukso/lsp25-contracts": "~0.15.0",
"@lukso/lsp26-contracts": "~0.15.0",
"@lukso/lsp3-contracts": "~0.15.0",
"@lukso/lsp4-contracts": "~0.15.0",
"@lukso/lsp5-contracts": "~0.15.0",
"@lukso/lsp6-contracts": "~0.15.0",
"@lukso/lsp7-contracts": "~0.15.0",
"@lukso/lsp8-contracts": "~0.15.0",
"@lukso/lsp9-contracts": "~0.15.0",
"@lukso/universalprofile-contracts": "~0.15.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ describe('Calculate LSP interfaces', () => {
const result = await contract.calculateInterfaceLSP25ExecuteRelayCall();
expect(result).to.equal(INTERFACE_IDS.LSP25ExecuteRelayCall);
});

it('LSP26FollowingSystem', async () => {
const result = await contract.calculateInterfaceLSP26();
expect(result).to.equal(INTERFACE_IDS.LSP26FollowingSystem);
});
});

describe('Calculate ERC interfaces', () => {
Expand Down
4 changes: 4 additions & 0 deletions packages/lsp26-contracts/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
root: true,
extends: ['custom'],
};
25 changes: 25 additions & 0 deletions packages/lsp26-contracts/.solhint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"extends": "solhint:recommended",
"rules": {
"avoid-sha3": "error",
"avoid-suicide": "error",
"avoid-throw": "error",
"avoid-tx-origin": "error",
"check-send-result": "error",
"compiler-version": ["error", "^0.8.0"],
"func-visibility": ["error", { "ignoreConstructors": true }],
"not-rely-on-block-hash": "error",
"not-rely-on-time": "error",
"reentrancy": "error",
"constructor-syntax": "error",
"private-vars-leading-underscore": ["error", { "strict": false }],
"imports-on-top": "error",
"visibility-modifier-order": "error",
"no-unused-import": "error",
"no-global-import": "error",
"reason-string": ["warn", { "maxLength": 120 }],
"avoid-low-level-calls": "off",
"no-empty-blocks": ["error", { "ignoreConstructors": true }],
"custom-errors": "off"
}
}
17 changes: 17 additions & 0 deletions packages/lsp26-contracts/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# LSP26 Following System · [![npm version](https://img.shields.io/npm/v/@lukso/lsp26-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp26-contracts)

Package for the LSP26 Following System standard.

## Installation

```bash
npm i @lukso/lsp26-contracts
```

## Available Constants & Types

The `@lukso/lsp26-contracts` npm package contains useful constants such as InterfaceIds, and specific constants related to the LSP26 Standard. You can import and access them as follow:

```js
import { INTERFACE_ID_LSP26, LSP26_TYPE_IDS } from "@lukso/lsp26-contracts";
```
Loading
Loading