Skip to content

Commit

Permalink
Merge pull request #967 from lukso-network/lsp26-contracts
Browse files Browse the repository at this point in the history
feat: create and test `LSP26FollowingSystem`
  • Loading branch information
CJ42 authored Aug 9, 2024
2 parents 0397025 + c2dad63 commit 882da18
Show file tree
Hide file tree
Showing 35 changed files with 4,036 additions and 2,002 deletions.
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

0 comments on commit 882da18

Please sign in to comment.