Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lukso-network/lsp-smart-contracts
The reference implementation for universal profiles smart contracts
https://github.com/lukso-network/lsp-smart-contracts
erc725 smart-contracts solidity universalprofile
Last synced: 3 months ago
JSON representation
The reference implementation for universal profiles smart contracts
- Host: GitHub
- URL: https://github.com/lukso-network/lsp-smart-contracts
- Owner: lukso-network
- License: apache-2.0
- Created: 2021-03-22T13:30:30.000Z (almost 4 years ago)
- Default Branch: develop
- Last Pushed: 2024-10-24T08:33:11.000Z (3 months ago)
- Last Synced: 2024-10-24T19:39:37.877Z (3 months ago)
- Topics: erc725, smart-contracts, solidity, universalprofile
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@lukso/lsp-smart-contracts
- Size: 33.2 MB
- Stars: 76
- Watchers: 13
- Forks: 50
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Audit: audits/Chainsulting_audit_2022_07_06.pdf
Awesome Lists containing this project
README
# LSP Smart Contracts ยท [![npm version](https://img.shields.io/npm/v/@lukso/lsp-smart-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp-smart-contracts) [![Coverage Status](https://coveralls.io/repos/github/lukso-network/lsp-smart-contracts/badge.svg?branch=develop)](https://coveralls.io/github/lukso-network/lsp-smart-contracts?branch=develop) [![All Contributors](https://img.shields.io/badge/all_contributors-17-orange.svg?style=flat-square)](#contributors-)
The smart contracts reference implementation of the [LUKSO Standard Proposals (LSPs)](https://github.com/lukso-network/LIPs/tree/main/LSPs).
For more information see [Documentation](https://docs.lukso.tech/standards/smart-contracts/introduction) on _[docs.lukso.tech](https://docs.lukso.tech/standards/introduction)._
| :warning: | _This package is currently in early stages of development,
use for testing or experimentation purposes only._ |
| :-------: | :----------------------------------------------------------------------------------------------------------------- |## Packages
This repo contains packages for the Solidity implementation of the LSP smart contracts.
| Package | NPM | Description |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| [`@lukso/lsp0-contracts`](./packages/lsp0-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp0-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp0-contracts) | LSP0 ERC725Account |
| [`@lukso/lsp1-contracts`](./packages/lsp1-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp1-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp1-contracts) | LSP1 Universal Receiver |
| [`@lukso/lsp1delegate-contracts`](./packages/lsp1delegate-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp1delegate-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp1delegate-contracts) | LSP1 Universal Receiver Delegate |
| [`@lukso/lsp2-contracts`](./packages/lsp2-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp2-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp2-contracts) | LSP2 ERC725Y JSON Schema |
| [`@lukso/lsp3-contracts`](./packages/lsp3-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp3-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp3-contracts) | LSP3 Profile Metadata |
| [`@lukso/lsp4-contracts`](./packages/lsp4-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp4-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp4-contracts) | LSP4 Digital Asset Metadata |
| [`@lukso/lsp5-contracts`](./packages/lsp5-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp5-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp5-contracts) | LSP5 Received Assets |
| [`@lukso/lsp6-contracts`](./packages/lsp6-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp6-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp6-contracts) | LSP6 Key Manager |
| [`@lukso/lsp7-contracts`](./packages/lsp7-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp7-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp7-contracts) | LSP7 Digital Asset |
| [`@lukso/lsp8-contracts`](./packages/lsp8-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp8-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp8-contracts) | LSP8 Identifiable Digital Asset |
| [`@lukso/lsp9-contracts`](./packages/lsp9-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp9-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp9-contracts) | LSP9 Vault |
| [`@lukso/lsp10-contracts`](./packages/lsp10-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp10-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp10-contracts) | LSP10 Received Vaults |
| [`@lukso/lsp12-contracts`](./packages/lsp12-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp12-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp12-contracts) | LSP12 Issued Assets |
| [`@lukso/lsp14-contracts`](./packages/lsp14-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp14-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp14-contracts) | LSP14 Ownable 2 Step |
| [`@lukso/lsp16-contracts`](./packages/lsp16-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp16-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp16-contracts) | LSP16 Universal Factory |
| [`@lukso/lsp17-contracts`](./packages/lsp17-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp17-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp17-contracts) | LSP17 Extensions Package |
| [`@lukso/lsp17contractextension-contracts`](./packages/lsp17contractextension-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp17contractextension-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp17contractextension-contracts) | LSP17 Contract Extension Package |
| [`@lukso/lsp20-contracts`](./packages/lsp20-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp20-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp20-contracts) | LSP20 Call Verification |
| [`@lukso/lsp23-contracts`](./packages/lsp23-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp23-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp23-contracts) | LSP23 Linked Contracts Factory |
| [`@lukso/lsp25-contracts`](./packages/lsp25-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/lsp25-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp25-contracts) | LSP25 Execute Relay Call |
| [`@lukso/universalprofile-contracts`](./packages/universalprofile-contracts) | [![npm version](https://img.shields.io/npm/v/@lukso/universalprofile-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/universalprofile-contracts) | Universal Profile |## Installation
### npm
LSP smart contracts are available as a [npm package](https://www.npmjs.com/package/@lukso/lsp-smart-contracts).
```bash
npm install @lukso/lsp-smart-contracts
```### cloning the repository
Alternatively you can also clone the repository and install its dependencies to start using the smart contracts.
```bash
$ git clone https://github.com/lukso-network/lsp-smart-contracts.git
$ cd ./lsp-smart-contracts
$ npm install
```## Testing
For detailed instructions on how to run tests, please refer to our [Testing Guide](./tests/README.md).
## Usage
### in Javascript
You can use the contracts JSON ABI by importing them as follow:
```javascript
import LSP0ERC725Account from "@lukso/lsp-smart-contracts/artifacts/LSP0ERC725Account.json";const myContract = new web3.eth.Contract(
LSP0ERC725Account.abi,
"",
defaultOptions
);
```### in Solidity
```sol
import "@lukso/lsp-smart-contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.sol";contract MyAccount is LSP0ERC725Account {
constructor(address _newOwner) LSP0ERC725Account(_newOwner) {}
}
```### Deployment via hardhat
You can find more infos on how to deploy the contracts via hardhat in the [DEPLOYMENT](./DEPLOYMENT.md) page.
## Available Constants & Types
The [`@lukso/lsp-smart-contracts` npm package](https://www.npmjs.com/package/@lukso/lsp-smart-contracts) contains useful constants such as Interface IDs or ERC725Y Data Keys related to the LSP Standards. You can import and access them as follow:
```ts
import {
INTERFACE_IDS,
ERC1271,
OPERATIONS,
SupportedStandards,
ERC725YDataKeys,
PERMISSIONS,
ALL_PERMISSIONS,
LSP8_TOKEN_ID_SCHEMA,
LSP25_VERSION,
ErrorSelectors,
EventSigHashes,
FunctionSelectors,
ContractsDocs,
StateVariables,
} from "@lukso/lsp-smart-contracts";
```> **Note:** we also export it as `@lukso/lsp-smart-contracts/constants` or `@lukso/lsp-smart-contracts/constants.js` to keep it backward compatible.
It also includes constant values [Array data keys](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#Array) to retrieve both the array length and for index access.
```js
'LSP5ReceivedAssets[]': {
length: '0x6460ee3c0aac563ccbf76d6e1d07bada78e3a9514e6382b736ed3f478ab7b90b',
index: '0x6460ee3c0aac563ccbf76d6e1d07bada',
},
```### Note for Hardhat Typescript projects
If you are trying to import the constants in a Hardhat project that uses Typescript, you will need to import the constants from the `dist` folder directly, as shown in the code snippet:
```js
import { INTERFACE_IDS } from "@lukso/lsp-smart-contracts/dist/constants.cjs.js";// This will raise an error if you have ES Lint enabled,
// but will allow you to import the constants in a Hardhat + Typescript based project.
const LSP0InterfaceId = INTERFACE_IDS.LSP0ERC725Account;
```See the [issue related to Hardhat Typescript + ES Modules](https://hardhat.org/hardhat-runner/docs/advanced/using-esm#esm-and-typescript-projects) in the Hardhat docs for more infos.
### Typescript types
The following additional typescript types are also available, including types for the JSON format of the LSP3 Profile and LSP4 Digital Asset metadata.
```ts
import {
LSP2ArrayKey,
LSPSupportedStandard,
LSP6PermissionName,
LSP3ProfileMetadataJSON,
LSP3ProfileMetadata,
LSP4DigitalAssetMetadataJSON,
LSP4DigitalAssetMetadata,
ImageMetadata,
LinkMetadata,
AssetMetadata,
} from "@lukso/lsp-smart-contracts";
```## Audits
> **NB:** dates of the audit reports use the american date format YYYY-MM-DD.
The following audits and formal verification were conducted. All high-level issues were addressed, or were not deemed as critical.
- Chainsulting Audit, 2022-07-06, Final Result: [Chainsulting_audit_06_07_2022.pdf](./audits/Chainsulting_audit_2022_07_06.pdf)
- Quantstamp Audit, 2022-09-07, Final Result: [Quantstamp_audit_07_09_2022.pdf](./audits/Quantstamp_audit_2022_09_07.pdf)
- Watchpug Audit, 2022-10-20, Final Result: [Watchpug_audit_20_10_2022.pdf](./audits/Watchpug_audit_2022_10_20.pdf)
- Watchpug Audit, 2022-12-15, Final Result: [Watchpug_audit_15_12_2022.pdf](./audits/Watchpug_audit_2022_12_15.pdf)
- Runtime Verification - Formal Verification, 2023-02-20, Final Result: [RuntimeVerification_formalVerification_2023_02_20.pdf](./audits/RuntimeVerification_formalVerification_2023_02_20.pdf)
- Trust Audit, 2023-04-13, Final Result: [Trust_audit_2023_04_13.pdf](./audits/Trust_audit_2023_04_13.pdf)
- Watchpug Audit, 2023-04-21, Final Result: [Watchpug_audit_2023_04_21.pdf](./audits/Watchpug_audit_2023_04_21.pdf)
- Code4Rena Audit Contest, 2023-06-30 to 2023-07-14, Final Result: [See Code4Rena audit report on Code4rena.com website](https://code4rena.com/reports/2023-06-lukso)
- MiloTruck, 2023-11-31, Final Result: [MiloTruck_audit_2023_11_31.pdf](./audits/MiloTruck_audit_2023_11_31.pdf)
- MiloTruck, 2024-01-24, Final Result: [MiloTruck_audit_2024_01_24.pdf](./audits/MiloTruck_audit_2024_01_24.pdf)## Contribute
The implementation contracts of the [LSPs](https://github.com/lukso-network/LIPs) exist thanks to their contributors. There are many ways you can participate and help build high quality software. Check out the [contribution guidelines](./CONTRIBUTING.md)!
## Contributors โจ
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Jean Cvllr
๐ป
Yamen Merhi
๐ป
Fabian Vogelsteller
๐ป
b00ste.lyx
๐ป
Matthew Stevens
๐ป
Reto Ryter
๐ง ๐
Callum Grindle
๐
Skima Harvey
๐ป
Jenea Vranceanu
๐ป
Hugo Masclet
๐ ๐ป
Leondroid
๐
lucasmt
๐
qian-hu
๐ก๏ธ ๐
Magali Morin
๐ป
Hugo Montenegro
๐
Volodymyr Lykhonis
๐ป
Prosperity
๐
Michael Standen
๐ป
Add your contributions
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!